From 679910415778c6098c8511923f3c13674e56219d Mon Sep 17 00:00:00 2001 From: Jake Date: Mon, 10 Feb 2020 14:16:11 -0500 Subject: [PATCH 001/419] Remove $GOPATH Caching $GOPATH caching has led to flaky tests as per #1503 and #1536. The speedup is marginal and while the false negatives are a headache, false positives are potentially dangerous. --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 5063496735..5a611c3960 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,7 +2,6 @@ language: go cache: directories: - $GOCACHE - - $GOPATH - $GOPATH/pkg/mod - $GOPATH/github.com/golang - $GOPATH/gopkg.in/alecthomas From eed57cdcf1b47292b31fa59bfc74bc6c5f920dd3 Mon Sep 17 00:00:00 2001 From: Jake Sylvestre Date: Wed, 22 Jan 2020 00:45:53 -0500 Subject: [PATCH 002/419] go fmt --- mempool/estimatefee.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mempool/estimatefee.go b/mempool/estimatefee.go index 53933469b6..3546f6b356 100644 --- a/mempool/estimatefee.go +++ b/mempool/estimatefee.go @@ -47,7 +47,7 @@ const ( bytePerKb = 1000 - btcPerSatoshi = 1E-8 + btcPerSatoshi = 1e-8 ) var ( From 3eb4739b7583bd84743d79f7131f939d8018dffa Mon Sep 17 00:00:00 2001 From: Federico Bond Date: Mon, 9 Jul 2018 18:41:43 -0300 Subject: [PATCH 003/419] Fix minRelayTxFee name in comment --- mempool/policy.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mempool/policy.go b/mempool/policy.go index f4e3b51ee7..7e97329319 100644 --- a/mempool/policy.go +++ b/mempool/policy.go @@ -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 From 1639d6c070d904c4a716b8d8435b4d98461fa5c4 Mon Sep 17 00:00:00 2001 From: Henry Harder Date: Thu, 26 Dec 2019 16:59:10 -0500 Subject: [PATCH 004/419] release: add missing back tick in build docs --- release/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release/README.md b/release/README.md index 10d1c80cc0..a5c9681947 100644 --- a/release/README.md +++ b/release/README.md @@ -17,7 +17,7 @@ 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` From 8bbbe98be9005a7d77837e23ddb783ef1f062b7a Mon Sep 17 00:00:00 2001 From: George Tankersley Date: Wed, 9 Oct 2019 16:18:20 -0400 Subject: [PATCH 005/419] peer: fix small typo --- peer/peer.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/peer/peer.go b/peer/peer.go index 11306ace49..200acb32af 100644 --- a/peer/peer.go +++ b/peer/peer.go @@ -2097,7 +2097,7 @@ func (p *Peer) negotiateInboundProtocol() error { return p.readRemoteVerAckMsg() } -// 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: // From 0c76fbd26ff682c6a2ceb8a8df2267503c66dedf Mon Sep 17 00:00:00 2001 From: Nisen Date: Sun, 3 Mar 2019 09:42:32 +0800 Subject: [PATCH 006/419] Fix comment error --- database/ffldb/interface_test.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/database/ffldb/interface_test.go b/database/ffldb/interface_test.go index 4989913de9..1ce991cc09 100644 --- a/database/ffldb/interface_test.go +++ b/database/ffldb/interface_test.go @@ -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", From 318c89dfed25ecfa916b966c965e157f088d5205 Mon Sep 17 00:00:00 2001 From: Yash Bhutwala Date: Tue, 25 Jun 2019 19:57:39 -0400 Subject: [PATCH 007/419] fix comment of database.Tx to match code --- database/ffldb/db.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/database/ffldb/db.go b/database/ffldb/db.go index fd1ff895c3..b499442101 100644 --- a/database/ffldb/db.go +++ b/database/ffldb/db.go @@ -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? From 46461dc84a2195ee699b1cf3997c075220db71ba Mon Sep 17 00:00:00 2001 From: "shuai.qi" Date: Sat, 6 Jul 2019 00:13:54 +0800 Subject: [PATCH 008/419] btcjson, rpclient: Fix typo --- btcjson/jsonrpc.go | 4 ++-- rpcclient/doc.go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/btcjson/jsonrpc.go b/btcjson/jsonrpc.go index e99d9f4265..0ead85e5ee 100644 --- a/btcjson/jsonrpc.go +++ b/btcjson/jsonrpc.go @@ -22,10 +22,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) 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 From ef4cecf42b620a8074194e260631fe06e4501b60 Mon Sep 17 00:00:00 2001 From: qshuai Date: Tue, 29 Jan 2019 09:36:42 +0800 Subject: [PATCH 009/419] blockchain/indexers: Start a new line for long code --- blockchain/indexers/addrindex.go | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/blockchain/indexers/addrindex.go b/blockchain/indexers/addrindex.go index 29d9030a2c..4a9bf4ec68 100644 --- a/blockchain/indexers/addrindex.go +++ b/blockchain/indexers/addrindex.go @@ -155,7 +155,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 +184,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 +257,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 +363,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 @@ -796,7 +805,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 From e2c08cc80b7071034ae36ea8e0359d0c0930ad74 Mon Sep 17 00:00:00 2001 From: mohanson Date: Mon, 27 Aug 2018 10:41:57 +0800 Subject: [PATCH 010/419] docs/json_rpc_api: update go examples --- docs/json_rpc_api.md | 69 ++++++++++++++++++++++++-------------------- 1 file changed, 37 insertions(+), 32 deletions(-) diff --git a/docs/json_rpc_api.md b/docs/json_rpc_api.md index 51d4c82c3f..4bb0625e89 100644 --- a/docs/json_rpc_api.md +++ b/docs/json_rpc_api.md @@ -1074,7 +1074,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 +1086,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 +1094,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/btcutil" ) func main() { @@ -1114,14 +1115,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 +1140,7 @@ func main() { Which results in: ```bash -Block count: 276978 +2018/08/27 11:17:27 Block count: 536027 ``` @@ -1147,7 +1148,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 +1156,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/btcutil" ) func main() { @@ -1178,14 +1179,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 +1200,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 +1226,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 +1238,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 +1248,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/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 +1280,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 +1317,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. ```
From 06e5c43499a2f30a1f7d7c3b49de0073dfbbdd1f Mon Sep 17 00:00:00 2001 From: Kulpreet Singh Date: Wed, 18 Jul 2018 14:25:34 +0200 Subject: [PATCH 011/419] Add note about using gencerts when listening on specific interfaces --- docs/configure_peer_server_listen_interfaces.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/configure_peer_server_listen_interfaces.md b/docs/configure_peer_server_listen_interfaces.md index 26f5ec72a1..ac61137335 100644 --- a/docs/configure_peer_server_listen_interfaces.md +++ b/docs/configure_peer_server_listen_interfaces.md @@ -33,3 +33,11 @@ The following config file would configure btcd to only listen on localhost for b 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/ +``` From 160c388285f5ae4ccea484185b93b15d9e35a432 Mon Sep 17 00:00:00 2001 From: jalavosus Date: Fri, 31 Jan 2020 12:27:38 -0500 Subject: [PATCH 012/419] Refactor GetBlockCmd type and NewGetBlockCmd() function to follow the bitcoin json RPC verbosity format for getblock, which uses 0, 1, or 2 as parameters rather than a boolean true or false. --- btcjson/chainsvrcmds.go | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/btcjson/chainsvrcmds.go b/btcjson/chainsvrcmds.go index 406357bd06..031eafd606 100644 --- a/btcjson/chainsvrcmds.go +++ b/btcjson/chainsvrcmds.go @@ -130,8 +130,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:"0"` } // NewGetBlockCmd returns a new instance which can be used to issue a getblock @@ -139,11 +138,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, } } From 468154a05228669a4eddc4166c749a2b075aba1b Mon Sep 17 00:00:00 2001 From: jalavosus Date: Fri, 31 Jan 2020 12:29:20 -0500 Subject: [PATCH 013/419] Refactor GetBlockVerboseResult into two separate types: one type for getblock "hash" verbosity=1, and a second type for getblock "hash" verbosity=2. This is necessary due to how getblock returns a block's transaction data based on the provided verbosity parameter. If verbosity=1, then getblock.Tx is an array of a block's transaction ids (txids) as strings. If verbosity=2, then getblock.Tx is an array of raw transaction data. --- btcjson/chainsvrresults.go | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/btcjson/chainsvrresults.go b/btcjson/chainsvrresults.go index 7e6c710766..81d0517e42 100644 --- a/btcjson/chainsvrresults.go +++ b/btcjson/chainsvrresults.go @@ -25,8 +25,11 @@ type GetBlockHeaderVerboseResult struct { } // 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 +41,32 @@ 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"` Time int64 `json:"time"` Nonce uint32 `json:"nonce"` Bits string `json:"bits"` From 57cb8e4b11a76282166442ec149625712edb945f Mon Sep 17 00:00:00 2001 From: jalavosus Date: Fri, 31 Jan 2020 12:31:47 -0500 Subject: [PATCH 014/419] Refactor FutureGetBlockVerboseResult into two types: FutureGetBlockVerboseResult, and FutureGetBlockVerboseTxResult. Due to differences in how getblock returns data based on the provided verbosity parameter, it's necessary to have two separate return types based on verbosity. This necessitates a separate unmarshalling function (represented throughout rpcclient/chain.go as Result.Receive()) to ensure that data is correctly unmarshalled and returned to the user. --- btcjson/chainsvrcmds_test.go | 31 ++++++++++++------------------- btcjson/cmdinfo_test.go | 2 +- btcjson/example_test.go | 12 +++++------- rpcclient/chain.go | 32 ++++++++++++++++++++++++++------ rpcserver.go | 4 ++-- 5 files changed, 46 insertions(+), 35 deletions(-) diff --git a/btcjson/chainsvrcmds_test.go b/btcjson/chainsvrcmds_test.go index 8cb4ee765a..a861af1aa7 100644 --- a/btcjson/chainsvrcmds_test.go +++ b/btcjson/chainsvrcmds_test.go @@ -142,50 +142,43 @@ func TestChainSvrCmds(t *testing.T) { { name: "getblock", newCmd: func() (interface{}, error) { - return btcjson.NewCmd("getblock", "123") + return btcjson.NewCmd("getblock", "123", btcjson.Int(0)) }, staticCmd: func() interface{} { - return btcjson.NewGetBlockCmd("123", nil, nil) + return btcjson.NewGetBlockCmd("123", btcjson.Int(0)) }, - marshalled: `{"jsonrpc":"1.0","method":"getblock","params":["123"],"id":1}`, + marshalled: `{"jsonrpc":"1.0","method":"getblock","params":["123",0],"id":1}`, unmarshalled: &btcjson.GetBlockCmd{ Hash: "123", - Verbose: btcjson.Bool(true), - VerboseTx: btcjson.Bool(false), + Verbosity: btcjson.Int(0), }, }, { 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), }, }, { 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/example_test.go b/btcjson/example_test.go index 527252c7fb..cbca495b38 100644 --- a/btcjson/example_test.go +++ b/btcjson/example_test.go @@ -21,7 +21,7 @@ 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(1)) // Marshal the command to the format suitable for sending to the RPC // server. Typically the client would increment the id here which is @@ -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",1],"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",1],"id":1}`) // Unmarshal the raw bytes from the wire into a JSON-RPC request. var request btcjson.Request @@ -84,13 +84,11 @@ 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. diff --git a/rpcclient/chain.go b/rpcclient/chain.go index 996d80458c..6815e1fa78 100644 --- a/rpcclient/chain.go +++ b/rpcclient/chain.go @@ -97,7 +97,7 @@ func (c *Client) GetBlockAsync(blockHash *chainhash.Hash) FutureGetBlockResult { hash = blockHash.String() } - cmd := btcjson.NewGetBlockCmd(hash, btcjson.Bool(false), nil) + cmd := btcjson.NewGetBlockCmd(hash, nil) return c.sendCmd(cmd) } @@ -140,8 +140,9 @@ func (c *Client) GetBlockVerboseAsync(blockHash *chainhash.Hash) FutureGetBlockV if blockHash != nil { hash = blockHash.String() } - - cmd := btcjson.NewGetBlockCmd(hash, btcjson.Bool(true), nil) + // 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 c.sendCmd(cmd) } @@ -154,18 +155,37 @@ func (c *Client) GetBlockVerbose(blockHash *chainhash.Hash) (*btcjson.GetBlockVe return c.GetBlockVerboseAsync(blockHash).Receive() } +type FutureGetBlockVerboseTxResult chan *response + +func (r FutureGetBlockVerboseTxResult) Receive() (*btcjson.GetBlockVerboseTxResult, error) { + res, err := receiveFuture(r) + 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() } + // 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)) - cmd := btcjson.NewGetBlockCmd(hash, btcjson.Bool(true), btcjson.Bool(true)) return c.sendCmd(cmd) } @@ -174,7 +194,7 @@ 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() } diff --git a/rpcserver.go b/rpcserver.go index e762cc1a9d..2da7e9f57e 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -1084,7 +1084,7 @@ func handleGetBlock(s *rpcServer, cmd interface{}, closeChan <-chan struct{}) (i // When the verbose flag isn't set, simply return the serialized block // as a hex-encoded string. - if c.Verbose != nil && !*c.Verbose { + if c.Verbosity != nil && *c.Verbosity == 0 { return hex.EncodeToString(blkBytes), nil } @@ -1137,7 +1137,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 { From a310aa6e7464e9624eb8078260e248c28c8f67bb Mon Sep 17 00:00:00 2001 From: jalavosus Date: Thu, 5 Mar 2020 06:35:34 -0500 Subject: [PATCH 015/419] All tests pass --- btcjson/cmdinfo_test.go | 2 +- btcjson/example_test.go | 6 +++--- rpcserverhelp.go | 7 +++---- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/btcjson/cmdinfo_test.go b/btcjson/cmdinfo_test.go index 61a693e404..471fccfc77 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" (verbosity=1)`, + expected: `getblock "hash" (verbosity=0)`, }, } diff --git a/btcjson/example_test.go b/btcjson/example_test.go index cbca495b38..73dd804073 100644 --- a/btcjson/example_test.go +++ b/btcjson/example_test.go @@ -21,7 +21,7 @@ func ExampleMarshalCmd() { // convenience function for creating a pointer out of a primitive for // optional parameters. blockHash := "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f" - gbCmd := btcjson.NewGetBlockCmd(blockHash, btcjson.Int(1)) + 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 @@ -38,7 +38,7 @@ func ExampleMarshalCmd() { fmt.Printf("%s\n", marshalledBytes) // Output: - // {"jsonrpc":"1.0","method":"getblock","params":["000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f",1],"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",1],"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 diff --git a/rpcserverhelp.go b/rpcserverhelp.go index cc6935b512..cee2407566 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. From e9f15eda7e774d9bf6f49a7a10d3ed8440502265 Mon Sep 17 00:00:00 2001 From: "John C. Vernaleo" Date: Thu, 5 Mar 2020 16:46:29 -0500 Subject: [PATCH 016/419] rpcclient: Add net params to Client (#1467) * rpcclient: replace futures mainnet with params Adds a chaincfg.Params to the Client rpcclient: parse config to assign params * rpcclient: change address commands to Address * Change address future struct to contain a network field, so futures can return the correct type for Receive --- rpcclient/infrastructure.go | 71 ++++++++++++++++-------- rpcclient/wallet.go | 104 +++++++++++++++++++++++++----------- 2 files changed, 120 insertions(+), 55 deletions(-) diff --git a/rpcclient/infrastructure.go b/rpcclient/infrastructure.go index 7a8f1885d1..a2079886d3 100644 --- a/rpcclient/infrastructure.go +++ b/rpcclient/infrastructure.go @@ -25,6 +25,7 @@ import ( "time" "github.com/btcsuite/btcd/btcjson" + "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/go-socks/socks" "github.com/btcsuite/websocket" ) @@ -138,6 +139,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 @@ -283,31 +288,29 @@ 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 - } +// 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. - rawNotification struct { - Method string `json:"method"` - Params []json.RawMessage `json:"params"` - } +// 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. - rawResponse struct { - Result json.RawMessage `json:"result"` - Error *btcjson.RPCError `json:"error"` - } -) +// 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. @@ -1093,6 +1096,11 @@ type ConnConfig struct { // Pass is the passphrase to use to authenticate to the RPC server. Pass string + // 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 @@ -1290,6 +1298,23 @@ func New(config *ConnConfig, ntfnHandlers *NotificationHandlers) (*Client, error 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) diff --git a/rpcclient/wallet.go b/rpcclient/wallet.go index 27546f5de0..d43be26181 100644 --- a/rpcclient/wallet.go +++ b/rpcclient/wallet.go @@ -753,13 +753,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 // 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 +774,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,14 +789,17 @@ 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 @@ -868,12 +874,15 @@ func (c *Client) CreateNewAccount(account string) error { // 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 // 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 +894,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 @@ -895,23 +904,31 @@ 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) + 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() } // 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 // 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 +940,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 @@ -933,7 +950,11 @@ 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) + result := FutureGetRawChangeAddressResult{ + network: c.chainParams, + responseChannel: c.sendCmd(cmd), + } + return result } // GetRawChangeAddress returns a new address for receiving change that will be @@ -945,12 +966,15 @@ func (c *Client) GetRawChangeAddress(account string) (btcutil.Address, error) { // 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 // 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 +986,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 +996,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 +1011,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 // 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 +1031,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 +1041,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 @@ -1086,12 +1121,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 // 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 +1141,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 +1159,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 From 1d0bfca5b0e96a3bfb8a47e23ce8d04ae13aad9d Mon Sep 17 00:00:00 2001 From: Tyler Chambers Date: Sun, 12 Jan 2020 17:11:46 -0500 Subject: [PATCH 017/419] fix error message --- txscript/engine.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/txscript/engine.go b/txscript/engine.go index db661860c8..f2d7b303c1 100644 --- a/txscript/engine.go +++ b/txscript/engine.go @@ -586,7 +586,7 @@ func (vm *Engine) checkPubKeyEncoding(pubKey []byte) error { if vm.hasFlag(ScriptVerifyWitnessPubKeyType) && vm.isWitnessVersionActive(0) && !btcec.IsCompressedPubKey(pubKey) { - str := "only uncompressed keys are accepted post-segwit" + str := "only compressed keys are accepted post-segwit" return scriptError(ErrWitnessPubKeyType, str) } From 9e94ccbd0ed1c12ee7fcffa1c2288e60951bc25d Mon Sep 17 00:00:00 2001 From: Steven Roose Date: Fri, 16 Mar 2018 09:12:18 +0100 Subject: [PATCH 018/419] server: Fix incorrect log message format --- server.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server.go b/server.go index edbc1c036e..b9bb18d0f5 100644 --- a/server.go +++ b/server.go @@ -1221,7 +1221,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 +1229,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 } From 96f3808dc98509a0c471d70ad1862e30a252c6a9 Mon Sep 17 00:00:00 2001 From: Jin Date: Sat, 7 Mar 2020 07:55:05 +0800 Subject: [PATCH 019/419] BUG:dynamicbanscore deadlock --- connmgr/dynamicbanscore.go | 2 +- connmgr/dynamicbanscore_test.go | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) 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()) +} From fd0921b9b4513d5b916377a0813067ecdf6cdd63 Mon Sep 17 00:00:00 2001 From: Daniel McNally Date: Tue, 18 Feb 2020 01:51:23 -0500 Subject: [PATCH 020/419] btcjson: add RPC_IN_WARMUP error code This adds an error code for the `RPC_IN_WARMUP` error code defined at https://github.com/bitcoin/bitcoin/blob/master/src/rpc/protocol.h#L49 which is thrown when bitcoind has started but has not yet finished verifying recent blocks and being ready for rpc calls. --- btcjson/jsonrpcerr.go | 1 + 1 file changed, 1 insertion(+) diff --git a/btcjson/jsonrpcerr.go b/btcjson/jsonrpcerr.go index 8996c47461..ea62fb55a6 100644 --- a/btcjson/jsonrpcerr.go +++ b/btcjson/jsonrpcerr.go @@ -39,6 +39,7 @@ const ( ErrRPCDatabase RPCErrorCode = -20 ErrRPCDeserialization RPCErrorCode = -22 ErrRPCVerify RPCErrorCode = -25 + ErrRPCInWarmup RPCErrorCode = -28 ) // Peer-to-peer client errors. From d9ce6b037f4eeaf86d1d39bcd33ab776d0f2b6e4 Mon Sep 17 00:00:00 2001 From: Iskander Sharipov Date: Fri, 14 Sep 2018 00:13:06 +0300 Subject: [PATCH 021/419] btcjson,rpcclient: use proper Deprecated comment format This makes godoc and other Go tools understand deprecation notice. Found using https://go-critic.github.io/overview#deprecatedComment-ref --- btcjson/chainsvrwscmds.go | 20 ++++++++++---------- btcjson/chainsvrwsntfns.go | 36 ++++++++++++++++++------------------ rpcclient/notify.go | 34 +++++++++++++++++----------------- 3 files changed, 45 insertions(+), 45 deletions(-) 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/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/rpcclient/notify.go b/rpcclient/notify.go index 2454a94696..1feb755605 100644 --- a/rpcclient/notify.go +++ b/rpcclient/notify.go @@ -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 @@ -905,7 +905,7 @@ 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. +// Deprecated: Use FutureLoadTxFilterResult instead. type FutureNotifySpentResult chan *response // Receive waits for the response promised by the future and returns an error @@ -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 { @@ -983,7 +983,7 @@ 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() } @@ -1040,7 +1040,7 @@ 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. +// Deprecated: Use FutureLoadTxFilterResult instead. type FutureNotifyReceivedResult chan *response // Receive waits for the response promised by the future and returns an error @@ -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 { @@ -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,7 +1126,7 @@ 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. +// Deprecated: Use FutureRescanBlocksResult instead. type FutureRescanResult chan *response // Receive waits for the response promised by the future and returns an error @@ -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 { @@ -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 { @@ -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 { From a8eadd2ce49aa6ac0be1672f971dcc3d173a9d80 Mon Sep 17 00:00:00 2001 From: Jake Sylvestre Date: Wed, 22 Jan 2020 01:13:15 -0500 Subject: [PATCH 022/419] update GetMempoolEntryResult to v0.19.0 https://bitcoincore.org/en/doc/0.19.0/rpc/blockchain/getmempoolentry/ --- btcjson/chainsvrresults.go | 40 +++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/btcjson/chainsvrresults.go b/btcjson/chainsvrresults.go index 81d0517e42..7ce32f4588 100644 --- a/btcjson/chainsvrresults.go +++ b/btcjson/chainsvrresults.go @@ -234,23 +234,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:"base"` + 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 From 8b1be464630c54988cabe965c739a8b2575701ed Mon Sep 17 00:00:00 2001 From: Torkel Rogstad Date: Tue, 26 Nov 2019 14:33:48 +0100 Subject: [PATCH 023/419] Add generatetoaddress and estimatesmartfee RPCs --- btcjson/btcdextcmds.go | 18 ++++++++++++++ btcjson/btcdextcmds_test.go | 18 ++++++++++++++ btcjson/chainsvrresults.go | 8 ++++++ btcjson/walletsvrcmds.go | 25 +++++++++++++++++++ btcjson/walletsvrcmds_test.go | 28 +++++++++++++++++++++ rpcclient/chain.go | 35 ++++++++++++++++++++++++++ rpcclient/mining.go | 47 +++++++++++++++++++++++++++++++++++ 7 files changed, 179 insertions(+) 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..143ec5224f 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) { diff --git a/btcjson/chainsvrresults.go b/btcjson/chainsvrresults.go index 7ce32f4588..a3a26c8976 100644 --- a/btcjson/chainsvrresults.go +++ b/btcjson/chainsvrresults.go @@ -624,3 +624,11 @@ type ValidateAddressChainResult struct { IsValid bool `json:"isvalid"` Address string `json:"address,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"` +} diff --git a/btcjson/walletsvrcmds.go b/btcjson/walletsvrcmds.go index 6697555172..53bb93da14 100644 --- a/btcjson/walletsvrcmds.go +++ b/btcjson/walletsvrcmds.go @@ -81,6 +81,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 @@ -662,6 +686,7 @@ func init() { MustRegisterCmd("createmultisig", (*CreateMultisigCmd)(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) diff --git a/btcjson/walletsvrcmds_test.go b/btcjson/walletsvrcmds_test.go index efc08cc945..2e0f1d0f8e 100644 --- a/btcjson/walletsvrcmds_test.go +++ b/btcjson/walletsvrcmds_test.go @@ -128,6 +128,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) { diff --git a/rpcclient/chain.go b/rpcclient/chain.go index 6815e1fa78..c656a19a8d 100644 --- a/rpcclient/chain.go +++ b/rpcclient/chain.go @@ -669,6 +669,41 @@ 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). diff --git a/rpcclient/mining.go b/rpcclient/mining.go index 76a9d30580..8717d3278f 100644 --- a/rpcclient/mining.go +++ b/rpcclient/mining.go @@ -61,6 +61,53 @@ 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 From cfcf4fb7625ab2e8ca26414e79b25cf979ff37b0 Mon Sep 17 00:00:00 2001 From: Ivan Kuznetsov Date: Wed, 27 Nov 2019 13:49:59 +0700 Subject: [PATCH 024/419] Implement 'getblockstats' JSON-RPC command --- btcjson/chainsvrcmds.go | 45 ++++++++++++++++++++++++++++++ btcjson/chainsvrcmds_test.go | 54 ++++++++++++++++++++++++++++++++++++ btcjson/chainsvrresults.go | 32 +++++++++++++++++++++ rpcclient/chain.go | 41 +++++++++++++++++++++++++++ 4 files changed, 172 insertions(+) diff --git a/btcjson/chainsvrcmds.go b/btcjson/chainsvrcmds.go index 031eafd606..90ab70ece7 100644 --- a/btcjson/chainsvrcmds.go +++ b/btcjson/chainsvrcmds.go @@ -191,6 +191,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. @@ -798,6 +842,7 @@ func init() { MustRegisterCmd("getblockcount", (*GetBlockCountCmd)(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) diff --git a/btcjson/chainsvrcmds_test.go b/btcjson/chainsvrcmds_test.go index a861af1aa7..dca2332860 100644 --- a/btcjson/chainsvrcmds_test.go +++ b/btcjson/chainsvrcmds_test.go @@ -228,6 +228,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) { diff --git a/btcjson/chainsvrresults.go b/btcjson/chainsvrresults.go index a3a26c8976..8cd716d409 100644 --- a/btcjson/chainsvrresults.go +++ b/btcjson/chainsvrresults.go @@ -24,6 +24,38 @@ 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 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 diff --git a/rpcclient/chain.go b/rpcclient/chain.go index c656a19a8d..707978ca65 100644 --- a/rpcclient/chain.go +++ b/rpcclient/chain.go @@ -1037,3 +1037,44 @@ 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() +} From 08b875155907c6f93694d3be6e8d8e67c159e084 Mon Sep 17 00:00:00 2001 From: Iskander Sharipov Date: Fri, 14 Sep 2018 00:19:24 +0300 Subject: [PATCH 025/419] cmd/btcctl: use regexp.MustCompile for constant patterns Found using https://go-critic.github.io/overview#regexpMust-ref --- cmd/btcctl/config.go | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/cmd/btcctl/config.go b/cmd/btcctl/config.go index cd232a9e0a..282b17438f 100644 --- a/cmd/btcctl/config.go +++ b/cmd/btcctl/config.go @@ -295,10 +295,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 +303,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 +311,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 From 57d44d022ecb4edac34e1ea7dbd62c7a592d3d58 Mon Sep 17 00:00:00 2001 From: Torkel Rogstad Date: Mon, 2 Dec 2019 11:42:14 +0100 Subject: [PATCH 026/419] Try both TX serialization formats --- rpcclient/rawtransactions.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/rpcclient/rawtransactions.go b/rpcclient/rawtransactions.go index 4bf4ee57fc..23754d961d 100644 --- a/rpcclient/rawtransactions.go +++ b/rpcclient/rawtransactions.go @@ -233,8 +233,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 } From 9f15a7e6af2ef99622c401250e4bc6300049d1b2 Mon Sep 17 00:00:00 2001 From: Murray Nesbitt Date: Tue, 14 Apr 2020 01:58:45 -0700 Subject: [PATCH 027/419] Alphabetize --help output; add missing options to doc.go --- cmd/addblock/config.go | 8 +- cmd/btcctl/config.go | 16 +- cmd/findcheckpoint/config.go | 6 +- cmd/gencerts/gencerts.go | 6 +- config.go | 120 +++++++-------- database/cmd/dbtool/globalconfig.go | 2 +- doc.go | 230 ++++++++++++++++------------ 7 files changed, 210 insertions(+), 178 deletions(-) diff --git a/cmd/addblock/config.go b/cmd/addblock/config.go index ae7a52fd2e..90620c8fda 100644 --- a/cmd/addblock/config.go +++ b/cmd/addblock/config.go @@ -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/btcctl/config.go b/cmd/btcctl/config.go index 282b17438f..8ed85f352b 100644 --- a/cmd/btcctl/config.go +++ b/cmd/btcctl/config.go @@ -92,20 +92,20 @@ 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"` + 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)"` - 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"` + ProxyUser string `long:"proxyuser" description:"Username for proxy server"` + 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"` + ShowVersion bool `short:"V" long:"version" description:"Display version information and exit"` Wallet bool `long:"wallet" description:"Connect to wallet"` } diff --git a/cmd/findcheckpoint/config.go b/cmd/findcheckpoint/config.go index 1539db334c..87f04cecd5 100644 --- a/cmd/findcheckpoint/config.go +++ b/cmd/findcheckpoint/config.go @@ -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..27d1073e74 100644 --- a/cmd/gencerts/gencerts.go +++ b/cmd/gencerts/gencerts.go @@ -18,10 +18,10 @@ import ( 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..f3653485f2 100644 --- a/config.go +++ b/config.go @@ -93,79 +93,79 @@ 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"` 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"` 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"` + 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) diff --git a/database/cmd/dbtool/globalconfig.go b/database/cmd/dbtool/globalconfig.go index 5cbd9b3af9..aa1e0e0483 100644 --- a/database/cmd/dbtool/globalconfig.go +++ b/database/cmd/dbtool/globalconfig.go @@ -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/doc.go b/doc.go index ace26b0f99..8b9b99773a 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) + --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 From 8b54b0b96418b33c1e584c84c0ec5141647306e0 Mon Sep 17 00:00:00 2001 From: Dan Cline Date: Tue, 14 Apr 2020 07:35:22 -0400 Subject: [PATCH 028/419] config.go: remove extra quotes --- config.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config.go b/config.go index f3653485f2..96756f7f97 100644 --- a/config.go +++ b/config.go @@ -96,8 +96,8 @@ type config struct { 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."`"` + 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"` From 8512affc592e6e0331ca2ff03b469d22fc197fb0 Mon Sep 17 00:00:00 2001 From: tpkeeper Date: Wed, 6 May 2020 18:35:44 +0800 Subject: [PATCH 029/419] readme: remove duplicate word --- database/internal/treap/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/database/internal/treap/README.md b/database/internal/treap/README.md index ee49ef9bf6..f5314b4a05 100644 --- a/database/internal/treap/README.md +++ b/database/internal/treap/README.md @@ -8,7 +8,7 @@ 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 From b29841558383a58530319ab4983a550261708d91 Mon Sep 17 00:00:00 2001 From: Antonin Hildebrand Date: Mon, 25 Mar 2019 23:24:06 +0100 Subject: [PATCH 030/419] Improve error message about non-active segwit on simnet I started playing with simnet and was confronted with error message: ``` [ERR] FNDG: Unable to broadcast funding tx for ChannelPoint(:0): -22: TX rejected: transaction has witness data, but segwit isn't active yet ``` I wasn't aware of the activation period so I got quite puzzled. Google helped. But I think the message could mention likely cause. Newly it optionally prints something like: ``` (The threshold for segwit activation is 300 blocks on simnet, current best height is 113) ``` --- mempool/mempool.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/mempool/mempool.go b/mempool/mempool.go index 63a86a16f5..7ada3d2907 100644 --- a/mempool/mempool.go +++ b/mempool/mempool.go @@ -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) } } From b470eee477280e03df6f4a5e7ce3d71d548deb40 Mon Sep 17 00:00:00 2001 From: Dan Cline Date: Tue, 14 Apr 2020 07:06:39 -0400 Subject: [PATCH 031/419] btcctl: add regtest mode to btcctl --- cmd/btcctl/config.go | 72 +++++++++++++++++++++++++++++--------------- 1 file changed, 47 insertions(+), 25 deletions(-) diff --git a/cmd/btcctl/config.go b/cmd/btcctl/config.go index 8ed85f352b..939b6a8699 100644 --- a/cmd/btcctl/config.go +++ b/cmd/btcctl/config.go @@ -14,6 +14,7 @@ import ( "strings" "github.com/btcsuite/btcd/btcjson" + "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcutil" flags "github.com/jessevdk/go-flags" ) @@ -92,42 +93,51 @@ func listCommands() { // // See loadConfig for details on the configuration load process. type config struct { - 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"` - 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"` - ShowVersion bool `short:"V" long:"version" description:"Display version information and exit"` - 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"` + 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" + } default: if useWallet { defaultPort = "8332" @@ -136,9 +146,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 +256,27 @@ 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 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 +293,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 } From a505b99ba37802797ad486cc3d0d811d5409de6d Mon Sep 17 00:00:00 2001 From: David Hill Date: Wed, 13 May 2020 08:44:07 -0400 Subject: [PATCH 032/419] build: replace travis-ci with github actions. test go 1.14 use golangci-lint --- .github/workflows/go.yml | 27 +++++++++++++++++++++++++++ .travis.yml | 18 ------------------ README.md | 6 +++--- btcjson/chainsvrresults.go | 2 +- goclean.sh | 18 ++++-------------- mempool/mempool_test.go | 8 ++++---- txscript/pkscript_test.go | 12 ++++++------ 7 files changed, 45 insertions(+), 46 deletions(-) create mode 100644 .github/workflows/go.yml delete mode 100644 .travis.yml diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml new file mode 100644 index 0000000000..f722032b16 --- /dev/null +++ b/.github/workflows/go.yml @@ -0,0 +1,27 @@ +name: Build and Test +on: [push, pull_request] +jobs: + build: + name: Go CI + runs-on: ubuntu-latest + strategy: + matrix: + go: [1.13, 1.14] + steps: + - name: Set up Go + uses: actions/setup-go@v2 + with: + go-version: ${{ matrix.go }} + - name: Check out source + uses: actions/checkout@v2 + - name: Install Linters + run: "curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b $(go env GOPATH)/bin v1.26.0" + - name: Build + env: + GO111MODULE: "on" + run: go build ./... + - name: Test + env: + GO111MODULE: "on" + run: | + sh ./goclean.sh diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 5a611c3960..0000000000 --- a/.travis.yml +++ /dev/null @@ -1,18 +0,0 @@ -language: go -cache: - directories: - - $GOCACHE - - $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/README.md b/README.md index a270fd2e97..8c9d252ad4 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ 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) +[![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) btcd is an alternative full node bitcoin implementation written in Go (golang). diff --git a/btcjson/chainsvrresults.go b/btcjson/chainsvrresults.go index 8cd716d409..d076b74691 100644 --- a/btcjson/chainsvrresults.go +++ b/btcjson/chainsvrresults.go @@ -271,7 +271,7 @@ type GetBlockTemplateResult struct { type MempoolFees struct { Base float64 `json:"base"` - Modified float64 `json:"base"` + Modified float64 `json:"modified"` Ancestor float64 `json:"ancestor"` Descendant float64 `json:"descendant"` } diff --git a/goclean.sh b/goclean.sh index 6d0e0ca104..4689ab360f 100755 --- a/goclean.sh +++ b/goclean.sh @@ -6,26 +6,16 @@ # 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 ./...) +go test -tags="rpctest" ./... # Automatic checks -test -z "$(gometalinter.v2 -j 4 --disable-all \ +golangci-lint run --deadline=10m --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 +--enable=unconvert + diff --git a/mempool/mempool_test.go b/mempool/mempool_test.go index 84aee10ab2..6d43cfd86e 100644 --- a/mempool/mempool_test.go +++ b/mempool/mempool_test.go @@ -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) { diff --git a/txscript/pkscript_test.go b/txscript/pkscript_test.go index 841842c268..49e2db8afa 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, From bc8d63bf15e8e73e102a9ba93a75a6e1e3402cc7 Mon Sep 17 00:00:00 2001 From: David Hill Date: Wed, 13 May 2020 08:48:56 -0400 Subject: [PATCH 033/419] build: update deps --- go.mod | 15 +++++---------- go.sum | 23 ++++++++++++++++++++++- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/go.mod b/go.mod index 606399481f..15c261cef5 100644 --- a/go.mod +++ b/go.mod @@ -1,21 +1,16 @@ module github.com/btcsuite/btcd require ( - github.com/aead/siphash v1.0.1 // indirect github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f - github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d + github.com/btcsuite/btcutil v1.0.2 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/goleveldb v1.0.0 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/jessevdk/go-flags v1.4.0 github.com/jrick/logrotate v1.0.0 - 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 + golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37 ) go 1.12 diff --git a/go.sum b/go.sum index dc773d4775..1ead212fc8 100644 --- a/go.sum +++ b/go.sum @@ -1,21 +1,29 @@ 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.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= 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/btcutil v1.0.2 h1:9iZ1Terx9fMIOtq1VrwdqfsATL9MC2l8ZrUY6YZ2uts= +github.com/btcsuite/btcutil v1.0.2/go.mod h1:j9HUFwoQRsZL3V4n+qG+CUnEGHOarIxfC3Le2Yhbcts= 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/goleveldb v1.0.0 h1:Tvd0BfvqX9o823q1j2UZ/epQo09eJh6dTcRp79ilIN4= +github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= 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/snappy-go v1.0.0 h1:ZxaA6lo2EpxGddsA8JwWOcxlzRybb444sgmeJQMJGQE= +github.com/btcsuite/snappy-go v1.0.0/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/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/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= @@ -24,6 +32,8 @@ github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= 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= @@ -31,16 +41,27 @@ github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6 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.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= 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/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37 h1:cg5LA/zNPRzIXIWSCxQW10Rvpy94aQh3LT/ShoCpkHw= +golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd h1:nTDtHvHSdCn1m6ITfMRqtOd/9+7a3s8RBNOZ3eYZzJA= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3 h1:0GoQqolDA55aaLxZyTzK/Y2ePZzZTUrRacwib7cNsYQ= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA= 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/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= From f7399e6157d38144d89517c9ca1d668e1615d9c3 Mon Sep 17 00:00:00 2001 From: David Hill Date: Wed, 13 May 2020 08:58:39 -0400 Subject: [PATCH 034/419] build: clean linter warnings --- blockchain/difficulty_test.go | 2 +- blockchain/indexers/addrindex_test.go | 4 ++-- btcec/pubkey_test.go | 6 +++--- btcec/signature_test.go | 3 +-- btcjson/register.go | 2 +- btcjson/register_test.go | 2 +- database/ffldb/whitebox_test.go | 4 ++-- goclean.sh | 3 --- rpcserverhelp.go | 2 +- server.go | 4 +--- txscript/opcode_test.go | 4 ++-- wire/common_test.go | 12 ++++++------ 12 files changed, 21 insertions(+), 27 deletions(-) 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/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/btcec/pubkey_test.go b/btcec/pubkey_test.go index 0a45f1c01d..68b61de10b 100644 --- a/btcec/pubkey_test.go +++ b/btcec/pubkey_test.go @@ -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 = pk.SerializeHybrid() } if !bytes.Equal(test.key, pkStr) { t.Errorf("%s pubkey: serialized keys do not match.", diff --git a/btcec/signature_test.go b/btcec/signature_test.go index 19ab772ef9..d238741455 100644 --- a/btcec/signature_test.go +++ b/btcec/signature_test.go @@ -464,8 +464,7 @@ func TestSignatureSerialize(t *testing.T) { func testSignCompact(t *testing.T, tag string, curve *KoblitzCurve, data []byte, isCompressed bool) { - tmp, _ := NewPrivateKey(curve) - priv := (*PrivateKey)(tmp) + priv, _ := NewPrivateKey(curve) hashed := []byte("testing") sig, err := SignCompact(curve, priv, hashed, isCompressed) 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/database/ffldb/whitebox_test.go b/database/ffldb/whitebox_test.go index 4e529363dc..161d866d29 100644 --- a/database/ffldb/whitebox_test.go +++ b/database/ffldb/whitebox_test.go @@ -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/goclean.sh b/goclean.sh index 4689ab360f..bb0cd7b600 100755 --- a/goclean.sh +++ b/goclean.sh @@ -1,7 +1,6 @@ #!/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) @@ -14,8 +13,6 @@ go test -tags="rpctest" ./... # Automatic checks golangci-lint run --deadline=10m --disable-all \ --enable=gofmt \ ---enable=golint \ --enable=vet \ --enable=gosimple \ --enable=unconvert - diff --git a/rpcserverhelp.go b/rpcserverhelp.go index cee2407566..63ad3d841e 100644 --- a/rpcserverhelp.go +++ b/rpcserverhelp.go @@ -818,7 +818,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/server.go b/server.go index b9bb18d0f5..9a76be8d4c 100644 --- a/server.go +++ b/server.go @@ -2270,9 +2270,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: diff --git a/txscript/opcode_test.go b/txscript/opcode_test.go index 6e3205a209..1487dde590 100644 --- a/txscript/opcode_test.go +++ b/txscript/opcode_test.go @@ -124,7 +124,7 @@ func TestOpcodeDisasm(t *testing.T) { // OP_UNKNOWN#. case opcodeVal >= 0xba && opcodeVal <= 0xf9 || opcodeVal == 0xfc: - expectedStr = "OP_UNKNOWN" + strconv.Itoa(int(opcodeVal)) + expectedStr = "OP_UNKNOWN" + strconv.Itoa(opcodeVal) } pop := parsedOpcode{opcode: &opcodeArray[opcodeVal], data: data} @@ -190,7 +190,7 @@ func TestOpcodeDisasm(t *testing.T) { // OP_UNKNOWN#. case opcodeVal >= 0xba && opcodeVal <= 0xf9 || opcodeVal == 0xfc: - expectedStr = "OP_UNKNOWN" + strconv.Itoa(int(opcodeVal)) + expectedStr = "OP_UNKNOWN" + strconv.Itoa(opcodeVal) } pop := parsedOpcode{opcode: &opcodeArray[opcodeVal], data: data} 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)) From d38279ee7446d9ee17cb7242afb5ccb32c3775ec Mon Sep 17 00:00:00 2001 From: Henry Date: Thu, 14 May 2020 18:27:59 -0600 Subject: [PATCH 035/419] btcjson: change getblock default verbosity to 1 This change makes btcd's getblock command match bitcoind's. Previously the default verbosity was 0, which caused errors when using the rpcclient library to connect to a bitcoind node - getblock would unmarshall incorrectly since it didn't expect a verbosity=1 result when it did not specify verbosity. --- btcjson/chainsvrcmds.go | 2 +- btcjson/chainsvrcmds_test.go | 14 ++++++++++++++ btcjson/cmdinfo_test.go | 2 +- rpcclient/chain.go | 2 +- rpcserver.go | 6 ++---- rpcserverhelp.go | 4 ++-- 6 files changed, 21 insertions(+), 9 deletions(-) diff --git a/btcjson/chainsvrcmds.go b/btcjson/chainsvrcmds.go index 90ab70ece7..2f3069fd15 100644 --- a/btcjson/chainsvrcmds.go +++ b/btcjson/chainsvrcmds.go @@ -130,7 +130,7 @@ func NewGetBestBlockHashCmd() *GetBestBlockHashCmd { // GetBlockCmd defines the getblock JSON-RPC command. type GetBlockCmd struct { Hash string - Verbosity *int `jsonrpcdefault:"0"` + Verbosity *int `jsonrpcdefault:"1"` } // NewGetBlockCmd returns a new instance which can be used to issue a getblock diff --git a/btcjson/chainsvrcmds_test.go b/btcjson/chainsvrcmds_test.go index dca2332860..8f3fd455c5 100644 --- a/btcjson/chainsvrcmds_test.go +++ b/btcjson/chainsvrcmds_test.go @@ -153,6 +153,20 @@ func TestChainSvrCmds(t *testing.T) { 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) + }, + marshalled: `{"jsonrpc":"1.0","method":"getblock","params":["123"],"id":1}`, + unmarshalled: &btcjson.GetBlockCmd{ + Hash: "123", + Verbosity: btcjson.Int(1), + }, + }, { name: "getblock required optional1", newCmd: func() (interface{}, error) { diff --git a/btcjson/cmdinfo_test.go b/btcjson/cmdinfo_test.go index 471fccfc77..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" (verbosity=0)`, + expected: `getblock "hash" (verbosity=1)`, }, } diff --git a/rpcclient/chain.go b/rpcclient/chain.go index 707978ca65..a5ec9e5412 100644 --- a/rpcclient/chain.go +++ b/rpcclient/chain.go @@ -97,7 +97,7 @@ func (c *Client) GetBlockAsync(blockHash *chainhash.Hash) FutureGetBlockResult { hash = blockHash.String() } - cmd := btcjson.NewGetBlockCmd(hash, nil) + cmd := btcjson.NewGetBlockCmd(hash, btcjson.Int(0)) return c.sendCmd(cmd) } diff --git a/rpcserver.go b/rpcserver.go index 2da7e9f57e..89817db856 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -1081,14 +1081,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 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) diff --git a/rpcserverhelp.go b/rpcserverhelp.go index cee2407566..38a5351355 100644 --- a/rpcserverhelp.go +++ b/rpcserverhelp.go @@ -243,8 +243,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", From 742935e3a9da8c52350b2422cdba1ccbbf231d5d Mon Sep 17 00:00:00 2001 From: Wilmer Paulino Date: Thu, 14 May 2020 14:15:50 -0700 Subject: [PATCH 036/419] rpcclient: send legacy GetBlock request for backwards compatibility Without this, users of this library wouldn't be able to issue GetBlock requests to nodes which haven't updated to support the latest request format, namely the use of a single `int` parameter to denote verbosity instead of two `bool`s. --- rpcclient/chain.go | 95 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 84 insertions(+), 11 deletions(-) diff --git a/rpcclient/chain.go b/rpcclient/chain.go index a5ec9e5412..6e701b1c97 100644 --- a/rpcclient/chain.go +++ b/rpcclient/chain.go @@ -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 // 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 } @@ -98,7 +145,11 @@ func (c *Client) GetBlockAsync(blockHash *chainhash.Hash) FutureGetBlockResult { } cmd := btcjson.NewGetBlockCmd(hash, btcjson.Int(0)) - return c.sendCmd(cmd) + 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 // 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 } @@ -143,7 +198,11 @@ func (c *Client) GetBlockVerboseAsync(blockHash *chainhash.Hash) FutureGetBlockV // 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 c.sendCmd(cmd) + return FutureGetBlockVerboseResult{ + client: c, + hash: hash, + Response: c.sendCmd(cmd), + } } // GetBlockVerbose returns a data structure from the server with information @@ -155,10 +214,18 @@ func (c *Client) GetBlockVerbose(blockHash *chainhash.Hash) (*btcjson.GetBlockVe return c.GetBlockVerboseAsync(blockHash).Receive() } -type FutureGetBlockVerboseTxResult chan *response +// 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 := receiveFuture(r) + res, err := r.client.waitForGetBlockRes(r.Response, r.hash, true, true) if err != nil { return nil, err } @@ -182,11 +249,17 @@ func (c *Client) GetBlockVerboseTxAsync(blockHash *chainhash.Hash) FutureGetBloc if blockHash != nil { hash = blockHash.String() } + // From the bitcoin-cli getblock documentation: - // "If verbosity is 2, returns an Object with information about block and information about each transaction." + // + // If verbosity is 2, returns an Object with information about block + // and information about each transaction. cmd := btcjson.NewGetBlockCmd(hash, btcjson.Int(2)) - - return c.sendCmd(cmd) + return FutureGetBlockVerboseTxResult{ + client: c, + hash: hash, + Response: c.sendCmd(cmd), + } } // GetBlockVerboseTx returns a data structure from the server with information From 280845a8a4aebd432030201e50c74b0a29e01a94 Mon Sep 17 00:00:00 2001 From: JeremyRand Date: Mon, 25 May 2020 20:15:11 +0000 Subject: [PATCH 037/419] rpcclient: Add cookie auth Based on Hugo Landau's cookie auth implementation for Namecoin's ncdns. Fixes https://github.com/btcsuite/btcd/issues/1054 --- rpcclient/cookiefile.go | 64 +++++++++++++++++++++++++++++++++++++ rpcclient/infrastructure.go | 41 ++++++++++++++++++++++-- 2 files changed, 103 insertions(+), 2 deletions(-) create mode 100644 rpcclient/cookiefile.go diff --git a/rpcclient/cookiefile.go b/rpcclient/cookiefile.go new file mode 100644 index 0000000000..9311fbbfcf --- /dev/null +++ b/rpcclient/cookiefile.go @@ -0,0 +1,64 @@ +// 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 ( + "fmt" + "io/ioutil" + "os" + "strings" + "time" +) + +func readCookieFile(path string) (username, password string, err error) { + b, err := ioutil.ReadFile(path) + if err != nil { + return + } + + s := strings.TrimSpace(string(b)) + parts := strings.SplitN(s, ":", 2) + if len(parts) != 2 { + err = fmt.Errorf("malformed cookie file") + return + } + + username, password = parts[0], parts[1] + return +} + +func cookieRetriever(path string) func() (username, password string, err error) { + lastCheckTime := time.Time{} + lastModTime := time.Time{} + + curUsername, curPassword := "", "" + var curError error + + doUpdate := func() { + if !lastCheckTime.IsZero() && time.Now().Before(lastCheckTime.Add(30*time.Second)) { + return + } + + lastCheckTime = time.Now() + + st, err := os.Stat(path) + if err != nil { + curError = err + return + } + + modTime := st.ModTime() + if !modTime.Equal(lastModTime) { + lastModTime = modTime + curUsername, curPassword, curError = readCookieFile(path) + } + } + + return func() (username, password string, err error) { + doUpdate() + return curUsername, curPassword, curError + } +} diff --git a/rpcclient/infrastructure.go b/rpcclient/infrastructure.go index a2079886d3..fa9e00e232 100644 --- a/rpcclient/infrastructure.go +++ b/rpcclient/infrastructure.go @@ -851,7 +851,12 @@ func (c *Client) sendPost(jReq *jsonRequest) { httpReq.Header.Set("Content-Type", "application/json") // Configure basic access authorization. - httpReq.SetBasicAuth(c.config.User, c.config.Pass) + user, pass, err := c.config.getAuth() + if err != nil { + jReq.responseChan <- &response{result: nil, err: err} + return + } + httpReq.SetBasicAuth(user, pass) log.Tracef("Sending command [%s] with id %d", jReq.method, jReq.id) c.sendPostRequest(httpReq, jReq) @@ -1096,6 +1101,15 @@ 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 + + // retrieveCookie is a function that returns the cookie username and + // passphrase. + retrieveCookie func() (username, passphrase string, err 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. @@ -1149,6 +1163,25 @@ type ConnConfig struct { 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) { + // If cookie auth isn't in use, just use the supplied + // username/passphrase. + if config.CookiePath == "" { + return config.User, config.Pass, nil + } + + // Initialize the cookie retriever on first run. + if config.retrieveCookie == nil { + config.retrieveCookie = cookieRetriever(config.CookiePath) + } + + return config.retrieveCookie() +} + // 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) { @@ -1218,7 +1251,11 @@ 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) From 915788b8e6e0c65adad447fa2796de544fb0fc6a Mon Sep 17 00:00:00 2001 From: JeremyRand Date: Wed, 9 Oct 2019 11:23:05 +0000 Subject: [PATCH 038/419] rpcclient: Refactor cookie caching --- rpcclient/cookiefile.go | 35 ----------------------------------- rpcclient/infrastructure.go | 35 ++++++++++++++++++++++++++++------- 2 files changed, 28 insertions(+), 42 deletions(-) diff --git a/rpcclient/cookiefile.go b/rpcclient/cookiefile.go index 9311fbbfcf..b29e29b759 100644 --- a/rpcclient/cookiefile.go +++ b/rpcclient/cookiefile.go @@ -8,9 +8,7 @@ package rpcclient import ( "fmt" "io/ioutil" - "os" "strings" - "time" ) func readCookieFile(path string) (username, password string, err error) { @@ -29,36 +27,3 @@ func readCookieFile(path string) (username, password string, err error) { username, password = parts[0], parts[1] return } - -func cookieRetriever(path string) func() (username, password string, err error) { - lastCheckTime := time.Time{} - lastModTime := time.Time{} - - curUsername, curPassword := "", "" - var curError error - - doUpdate := func() { - if !lastCheckTime.IsZero() && time.Now().Before(lastCheckTime.Add(30*time.Second)) { - return - } - - lastCheckTime = time.Now() - - st, err := os.Stat(path) - if err != nil { - curError = err - return - } - - modTime := st.ModTime() - if !modTime.Equal(lastModTime) { - lastModTime = modTime - curUsername, curPassword, curError = readCookieFile(path) - } - } - - return func() (username, password string, err error) { - doUpdate() - return curUsername, curPassword, curError - } -} diff --git a/rpcclient/infrastructure.go b/rpcclient/infrastructure.go index fa9e00e232..42aeb49fbd 100644 --- a/rpcclient/infrastructure.go +++ b/rpcclient/infrastructure.go @@ -19,6 +19,7 @@ import ( "net" "net/http" "net/url" + "os" "strings" "sync" "sync/atomic" @@ -1106,9 +1107,11 @@ type ConnConfig struct { // instead of User and Pass if non-empty. CookiePath string - // retrieveCookie is a function that returns the cookie username and - // passphrase. - retrieveCookie func() (username, passphrase string, err error) + 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 @@ -1174,12 +1177,30 @@ func (config *ConnConfig) getAuth() (username, passphrase string, err error) { return config.User, config.Pass, nil } - // Initialize the cookie retriever on first run. - if config.retrieveCookie == nil { - config.retrieveCookie = cookieRetriever(config.CookiePath) + 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 } - return config.retrieveCookie() + 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 From e6f163e61e4fcf13038d5775c079e3da27637282 Mon Sep 17 00:00:00 2001 From: JeremyRand Date: Wed, 9 Oct 2019 11:08:42 +0000 Subject: [PATCH 039/419] rpcclient: Try user+pass auth before cookie auth --- rpcclient/infrastructure.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rpcclient/infrastructure.go b/rpcclient/infrastructure.go index 42aeb49fbd..8609e7c5ad 100644 --- a/rpcclient/infrastructure.go +++ b/rpcclient/infrastructure.go @@ -1171,12 +1171,12 @@ type ConnConfig struct { // path is configured; if not, it will be the user-configured username and // passphrase. func (config *ConnConfig) getAuth() (username, passphrase string, err error) { - // If cookie auth isn't in use, just use the supplied - // username/passphrase. - if config.CookiePath == "" { + // 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() } From 6d521ff8cdbb2bae1a9a16bb64f765aff8d4be56 Mon Sep 17 00:00:00 2001 From: JeremyRand Date: Thu, 10 Oct 2019 22:59:50 +0000 Subject: [PATCH 040/419] rpcclient: Read first line of cookie instead of trimming space --- rpcclient/cookiefile.go | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/rpcclient/cookiefile.go b/rpcclient/cookiefile.go index b29e29b759..c3f7068b30 100644 --- a/rpcclient/cookiefile.go +++ b/rpcclient/cookiefile.go @@ -6,18 +6,27 @@ package rpcclient import ( + "bufio" "fmt" - "io/ioutil" + "os" "strings" ) func readCookieFile(path string) (username, password string, err error) { - b, err := ioutil.ReadFile(path) + 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() - s := strings.TrimSpace(string(b)) parts := strings.SplitN(s, ":", 2) if len(parts) != 2 { err = fmt.Errorf("malformed cookie file") From 714de3f3c74d7719cd95ceb8a9c68cb7cf74c832 Mon Sep 17 00:00:00 2001 From: Torkel Rogstad Date: Thu, 2 Apr 2020 11:01:56 +0200 Subject: [PATCH 041/419] rpcclient: serialize nil inputs to empty list --- btcjson/chainsvrcmds.go | 9 +++++++-- btcjson/chainsvrcmds_test.go | 15 +++++++++++++++ rpcclient/rawtransactions.go | 3 ++- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/btcjson/chainsvrcmds.go b/btcjson/chainsvrcmds.go index 2f3069fd15..1345f8f7c8 100644 --- a/btcjson/chainsvrcmds.go +++ b/btcjson/chainsvrcmds.go @@ -63,10 +63,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, diff --git a/btcjson/chainsvrcmds_test.go b/btcjson/chainsvrcmds_test.go index 8f3fd455c5..dd997ce5e9 100644 --- a/btcjson/chainsvrcmds_test.go +++ b/btcjson/chainsvrcmds_test.go @@ -60,6 +60,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) { diff --git a/rpcclient/rawtransactions.go b/rpcclient/rawtransactions.go index 23754d961d..63a086642a 100644 --- a/rpcclient/rawtransactions.go +++ b/rpcclient/rawtransactions.go @@ -261,7 +261,8 @@ func (c *Client) CreateRawTransactionAsync(inputs []btcjson.TransactionInput, } // 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) { From b11bf582c51fdf3888433575a104d301a095f337 Mon Sep 17 00:00:00 2001 From: Mikael Lindlof Date: Sun, 17 May 2020 13:02:24 +0100 Subject: [PATCH 042/419] Improve chain state init efficiency Remove unnecessary slice of all block indexes and remove DB iteration over all block indexes that used to determined the size of the slice. --- blockchain/chainio.go | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/blockchain/chainio.go b/blockchain/chainio.go index 8d76d3ca94..c456c006f3 100644 --- a/blockchain/chainio.go +++ b/blockchain/chainio.go @@ -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) From a383a7167007197578e780476cf5719c97dfd31b Mon Sep 17 00:00:00 2001 From: adiabat Date: Fri, 29 May 2020 12:03:02 -0400 Subject: [PATCH 043/419] Add blockchain.NewUtxoEntry() to directly create entries for UtxoViewpoint The current methods to add to a UtxoViewpoint don't allow for a situation where we have only UTXO data but not a whole transaction. This commit allows contstruction of a UtxoEntry without requiring a full MsgTx. AddTxOut() and AddTxOuts() both require a whole transaction, including the inputs, which are only used in order to calculate the txid. In some situations, such as with use of the utreexo accumulator, we only have the utxo data but not the transaction which created it. For reference, utreexo's initial usage of the blockchain.NewUtxoEntry() function is at https://github.com/mit-dci/utreexo/pull/135/files#diff-3f7b8f9991ea957f1f4ad9f5a95415f0R96 --- blockchain/utxoviewpoint.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/blockchain/utxoviewpoint.go b/blockchain/utxoviewpoint.go index 08005d27a1..b85765814d 100644 --- a/blockchain/utxoviewpoint.go +++ b/blockchain/utxoviewpoint.go @@ -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 From 73d69f09d095bb21eca304538a9e0f0586bae8d3 Mon Sep 17 00:00:00 2001 From: Mikael Lindlof Date: Mon, 11 May 2020 19:12:44 +0100 Subject: [PATCH 044/419] Add getchaintxstats JSON-RPC client command --- btcjson/chainsvrcmds.go | 19 ++++++++++ btcjson/chainsvrcmds_test.go | 38 +++++++++++++++++++ btcjson/chainsvrresults.go | 12 ++++++ rpcclient/chain.go | 73 ++++++++++++++++++++++++++++++++++++ 4 files changed, 142 insertions(+) diff --git a/btcjson/chainsvrcmds.go b/btcjson/chainsvrcmds.go index 1345f8f7c8..983a4e969f 100644 --- a/btcjson/chainsvrcmds.go +++ b/btcjson/chainsvrcmds.go @@ -368,6 +368,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{} @@ -852,6 +870,7 @@ func init() { 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("getdifficulty", (*GetDifficultyCmd)(nil), flags) MustRegisterCmd("getgenerate", (*GetGenerateCmd)(nil), flags) diff --git a/btcjson/chainsvrcmds_test.go b/btcjson/chainsvrcmds_test.go index dd997ce5e9..400ad25a75 100644 --- a/btcjson/chainsvrcmds_test.go +++ b/btcjson/chainsvrcmds_test.go @@ -437,6 +437,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) { diff --git a/btcjson/chainsvrresults.go b/btcjson/chainsvrresults.go index d076b74691..0c4e66bb99 100644 --- a/btcjson/chainsvrresults.go +++ b/btcjson/chainsvrresults.go @@ -107,6 +107,18 @@ type GetBlockVerboseTxResult 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 { diff --git a/rpcclient/chain.go b/rpcclient/chain.go index 6e701b1c97..9f0c6c684d 100644 --- a/rpcclient/chain.go +++ b/rpcclient/chain.go @@ -307,6 +307,79 @@ 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 From e4f59022a387f27253674d3a389047a23615b0f1 Mon Sep 17 00:00:00 2001 From: Torkel Rogstad Date: Mon, 2 Dec 2019 11:39:27 +0100 Subject: [PATCH 045/419] Add fundrawtransaction RPC call --- btcjson/chainsvrcmds.go | 33 ++++++++++++ btcjson/chainsvrcmds_test.go | 102 +++++++++++++++++++++++++++++++++++ btcjson/chainsvrresults.go | 56 ++++++++++++++++++- rpcclient/rawtransactions.go | 41 ++++++++++++++ 4 files changed, 231 insertions(+), 1 deletion(-) diff --git a/btcjson/chainsvrcmds.go b/btcjson/chainsvrcmds.go index 983a4e969f..d66478c305 100644 --- a/btcjson/chainsvrcmds.go +++ b/btcjson/chainsvrcmds.go @@ -8,6 +8,7 @@ package btcjson import ( + "encoding/hex" "encoding/json" "fmt" @@ -79,6 +80,37 @@ func NewCreateRawTransactionCmd(inputs []TransactionInput, amounts map[string]fl } } +// 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 *string `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, + } +} + // DecodeRawTransactionCmd defines the decoderawtransaction JSON-RPC command. type DecodeRawTransactionCmd struct { HexTx string @@ -856,6 +888,7 @@ func init() { MustRegisterCmd("addnode", (*AddNodeCmd)(nil), flags) MustRegisterCmd("createrawtransaction", (*CreateRawTransactionCmd)(nil), flags) + MustRegisterCmd("fundrawtransaction", (*FundRawTransactionCmd)(nil), flags) MustRegisterCmd("decoderawtransaction", (*DecodeRawTransactionCmd)(nil), flags) MustRegisterCmd("decodescript", (*DecodeScriptCmd)(nil), flags) MustRegisterCmd("getaddednodeinfo", (*GetAddedNodeInfoCmd)(nil), flags) diff --git a/btcjson/chainsvrcmds_test.go b/btcjson/chainsvrcmds_test.go index 400ad25a75..e2b5025727 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" @@ -95,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 := "legacy" + 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 := "legacy" + 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) { diff --git a/btcjson/chainsvrresults.go b/btcjson/chainsvrresults.go index 0c4e66bb99..a96319b235 100644 --- a/btcjson/chainsvrresults.go +++ b/btcjson/chainsvrresults.go @@ -4,7 +4,14 @@ package btcjson -import "encoding/json" +import ( + "bytes" + "encoding/hex" + "encoding/json" + + "github.com/btcsuite/btcd/wire" + "github.com/btcsuite/btcutil" +) // GetBlockHeaderVerboseResult models the data from the getblockheader command when // the verbose flag is set. When the verbose flag is not set, getblockheader @@ -676,3 +683,50 @@ type EstimateSmartFeeResult struct { 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 +} diff --git a/rpcclient/rawtransactions.go b/rpcclient/rawtransactions.go index 63a086642a..4e8d4e4d9c 100644 --- a/rpcclient/rawtransactions.go +++ b/rpcclient/rawtransactions.go @@ -205,6 +205,47 @@ 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 From 7b2ff5d180ed9557342d8f8534d9b72a6664573b Mon Sep 17 00:00:00 2001 From: Federico Bond Date: Wed, 17 Jun 2020 23:29:50 -0300 Subject: [PATCH 046/419] Add getbalances RPC client command --- btcjson/walletsvrcmds.go | 10 ++++++++++ btcjson/walletsvrcmds_test.go | 11 +++++++++++ btcjson/walletsvrresults.go | 14 +++++++++++++ rpcclient/wallet.go | 37 +++++++++++++++++++++++++++++++++++ 4 files changed, 72 insertions(+) diff --git a/btcjson/walletsvrcmds.go b/btcjson/walletsvrcmds.go index 53bb93da14..be1a67fbf0 100644 --- a/btcjson/walletsvrcmds.go +++ b/btcjson/walletsvrcmds.go @@ -188,6 +188,15 @@ 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 @@ -693,6 +702,7 @@ func init() { MustRegisterCmd("getaccountaddress", (*GetAccountAddressCmd)(nil), flags) MustRegisterCmd("getaddressesbyaccount", (*GetAddressesByAccountCmd)(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) diff --git a/btcjson/walletsvrcmds_test.go b/btcjson/walletsvrcmds_test.go index 2e0f1d0f8e..554a87413a 100644 --- a/btcjson/walletsvrcmds_test.go +++ b/btcjson/walletsvrcmds_test.go @@ -250,6 +250,17 @@ 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) { diff --git a/btcjson/walletsvrresults.go b/btcjson/walletsvrresults.go index 9246d131ae..6e69ed9066 100644 --- a/btcjson/walletsvrresults.go +++ b/btcjson/walletsvrresults.go @@ -159,3 +159,17 @@ 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"` +} diff --git a/rpcclient/wallet.go b/rpcclient/wallet.go index d43be26181..e92d1aab28 100644 --- a/rpcclient/wallet.go +++ b/rpcclient/wallet.go @@ -1547,6 +1547,43 @@ 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). From e2d9cf4b55083056a458a86289d9a0651a00a02b Mon Sep 17 00:00:00 2001 From: Anirudha Bose Date: Wed, 10 Jun 2020 10:57:12 +0530 Subject: [PATCH 047/419] rpcclient: Add GetTransactionWatchOnly method --- rpcclient/wallet.go | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/rpcclient/wallet.go b/rpcclient/wallet.go index e92d1aab28..37bf9471e0 100644 --- a/rpcclient/wallet.go +++ b/rpcclient/wallet.go @@ -20,7 +20,8 @@ import ( // ***************************** // FutureGetTransactionResult is a future promise to deliver the result -// of a GetTransactionAsync RPC invocation (or an applicable error). +// 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 @@ -63,6 +64,28 @@ 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). From 875b51c9fb83e5521ef5b4f8c9c522126baa2041 Mon Sep 17 00:00:00 2001 From: Javed Khan Date: Fri, 3 Jul 2020 17:40:32 +0530 Subject: [PATCH 048/419] peer: knownInventory, sentNonces - use generic lru While here, also rename and generalize limitMap and apply to other maps which need to be bounded. --- go.mod | 1 + go.sum | 2 + netsync/manager.go | 50 ++++++------ peer/mruinvmap.go | 127 ----------------------------- peer/mruinvmap_test.go | 170 --------------------------------------- peer/mrunoncemap.go | 125 ---------------------------- peer/mrunoncemap_test.go | 152 ---------------------------------- peer/peer.go | 13 +-- 8 files changed, 34 insertions(+), 606 deletions(-) delete mode 100644 peer/mruinvmap.go delete mode 100644 peer/mruinvmap_test.go delete mode 100644 peer/mrunoncemap.go delete mode 100644 peer/mrunoncemap_test.go diff --git a/go.mod b/go.mod index 15c261cef5..80a3d7658f 100644 --- a/go.mod +++ b/go.mod @@ -8,6 +8,7 @@ require ( github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792 github.com/btcsuite/winsvc v1.0.0 github.com/davecgh/go-spew v1.1.1 + github.com/decred/dcrd/lru v1.0.0 github.com/jessevdk/go-flags v1.4.0 github.com/jrick/logrotate v1.0.0 golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37 diff --git a/go.sum b/go.sum index 1ead212fc8..392d70f1b7 100644 --- a/go.sum +++ b/go.sum @@ -24,6 +24,8 @@ github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46f github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/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/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 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= diff --git a/netsync/manager.go b/netsync/manager.go index 32715b8e1e..51c2cbe4a8 100644 --- a/netsync/manager.go +++ b/netsync/manager.go @@ -147,6 +147,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 +598,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, @@ -1202,9 +1220,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 +1237,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 +1261,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 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 200acb32af..82010f3b84 100644 --- a/peer/peer.go +++ b/peer/peer.go @@ -24,6 +24,7 @@ import ( "github.com/btcsuite/btcd/wire" "github.com/btcsuite/go-socks/socks" "github.com/davecgh/go-spew/spew" + "github.com/decred/dcrd/lru" ) const ( @@ -82,7 +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) + sentNonces = lru.NewCache(50) // allowSelfConns is only used to allow the tests to bypass the self // connection detecting and disconnect logic since they intentionally @@ -450,7 +451,7 @@ type Peer struct { wireEncoding wire.MessageEncoding - knownInventory *mruInventoryMap + knownInventory lru.Cache prevGetBlocksMtx sync.Mutex prevGetBlocksBegin *chainhash.Hash prevGetBlocksStop *chainhash.Hash @@ -1626,7 +1627,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 +1833,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 +1892,7 @@ func (p *Peer) readRemoteVersionMsg() error { } // Detect self connections. - if !allowSelfConns && sentNonces.Exists(msg.Nonce) { + if !allowSelfConns && sentNonces.Contains(msg.Nonce) { return errors.New("disconnecting peer connected to self") } @@ -2224,7 +2225,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 From d28c7167a50d9224a53cae962f14ffa705554013 Mon Sep 17 00:00:00 2001 From: Anirudha Bose Date: Fri, 10 Jul 2020 01:35:17 +0530 Subject: [PATCH 049/419] btcec: Avoid panic in fieldVal.SetByteSlice for large inputs The implementation has been adapted from the dcrec module in dcrd. The bug was initially fixed in decred/dcrd@3d9cda1 while transitioning to a constant time algorithm. A large set of test vectors were subsequently added in decred/dcrd@8c6b52d. The function signature has been preserved for backwards compatibility. This means that returning whether the value has overflowed, and the corresponding test vectors have not been backported. This fixes #1170 and closes a previous attempt to fix the bug in #1178. --- btcec/field.go | 20 +++--- btcec/field_test.go | 154 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 166 insertions(+), 8 deletions(-) diff --git a/btcec/field.go b/btcec/field.go index c2bb84b3fe..98105ed8e4 100644 --- a/btcec/field.go +++ b/btcec/field.go @@ -226,20 +226,24 @@ func (f *fieldVal) SetBytes(b *[32]byte) *fieldVal { 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. +// SetByteSlice interprets the provided slice as a 256-bit big-endian unsigned +// integer (meaning it is truncated to the first 32 bytes), packs it into the +// internal field value representation, and returns the updated field value. +// +// Note that since passing a slice with more than 32 bytes is truncated, it is +// possible that the truncated value is less than the field prime. It is up to +// the caller to decide whether it needs to provide numbers of the appropriate +// size or if it is acceptable to use this function with the described +// truncation behavior. // // 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] - } + if len(b) > 32 { + b = b[:32] } + copy(b32[32-len(b):], b) return f.SetBytes(&b32) } diff --git a/btcec/field_test.go b/btcec/field_test.go index 27b9730f65..4226ba55f9 100644 --- a/btcec/field_test.go +++ b/btcec/field_test.go @@ -7,6 +7,7 @@ package btcec import ( "crypto/rand" + "encoding/hex" "fmt" "reflect" "testing" @@ -965,3 +966,156 @@ func testSqrt(t *testing.T, test sqrtTest) { } } } + +// TestFieldSetBytes ensures that setting a field value to a 256-bit big-endian +// unsigned integer via both the slice and array methods works as expected for +// edge cases. Random cases are tested via the various other tests. +func TestFieldSetBytes(t *testing.T) { + tests := []struct { + name string // test description + in string // hex encoded test value + expected [10]uint32 // expected raw ints + }{{ + name: "zero", + in: "00", + expected: [10]uint32{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + }, { + name: "field prime", + in: "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + expected: [10]uint32{ + 0x03fffc2f, 0x03ffffbf, 0x03ffffff, 0x03ffffff, 0x03ffffff, + 0x03ffffff, 0x03ffffff, 0x03ffffff, 0x03ffffff, 0x003fffff, + }, + }, { + name: "field prime - 1", + in: "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e", + expected: [10]uint32{ + 0x03fffc2e, 0x03ffffbf, 0x03ffffff, 0x03ffffff, 0x03ffffff, + 0x03ffffff, 0x03ffffff, 0x03ffffff, 0x03ffffff, 0x003fffff, + }, + }, { + name: "field prime + 1 (overflow in word zero)", + in: "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc30", + expected: [10]uint32{ + 0x03fffc30, 0x03ffffbf, 0x03ffffff, 0x03ffffff, 0x03ffffff, + 0x03ffffff, 0x03ffffff, 0x03ffffff, 0x03ffffff, 0x003fffff, + }, + }, { + name: "field prime first 32 bits", + in: "fffffc2f", + expected: [10]uint32{ + 0x03fffc2f, 0x00000003f, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + }, + }, { + name: "field prime word zero", + in: "03fffc2f", + expected: [10]uint32{ + 0x03fffc2f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + }, + }, { + name: "field prime first 64 bits", + in: "fffffffefffffc2f", + expected: [10]uint32{ + 0x03fffc2f, 0x03ffffbf, 0x00000fff, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + }, + }, { + name: "field prime word zero and one", + in: "0ffffefffffc2f", + expected: [10]uint32{ + 0x03fffc2f, 0x03ffffbf, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + }, + }, { + name: "field prime first 96 bits", + in: "fffffffffffffffefffffc2f", + expected: [10]uint32{ + 0x03fffc2f, 0x03ffffbf, 0x03ffffff, 0x0003ffff, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + }, + }, { + name: "field prime word zero, one, and two", + in: "3ffffffffffefffffc2f", + expected: [10]uint32{ + 0x03fffc2f, 0x03ffffbf, 0x03ffffff, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + }, + }, { + name: "overflow in word one (prime + 1<<26)", + in: "ffffffffffffffffffffffffffffffffffffffffffffffffffffffff03fffc2f", + expected: [10]uint32{ + 0x03fffc2f, 0x03ffffc0, 0x03ffffff, 0x03ffffff, 0x03ffffff, + 0x03ffffff, 0x03ffffff, 0x03ffffff, 0x03ffffff, 0x003fffff, + }, + }, { + name: "(field prime - 1) * 2 NOT mod P, truncated >32 bytes", + in: "01fffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff85c", + expected: [10]uint32{ + 0x01fffff8, 0x03ffffff, 0x03ffffff, 0x03ffffff, 0x03ffffff, + 0x03ffffff, 0x03ffffff, 0x03ffffff, 0x03ffffff, 0x00007fff, + }, + }, { + name: "2^256 - 1", + in: "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + expected: [10]uint32{ + 0x03ffffff, 0x03ffffff, 0x03ffffff, 0x03ffffff, 0x03ffffff, + 0x03ffffff, 0x03ffffff, 0x03ffffff, 0x03ffffff, 0x003fffff, + }, + }, { + name: "alternating bits", + in: "a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5", + expected: [10]uint32{ + 0x01a5a5a5, 0x01696969, 0x025a5a5a, 0x02969696, 0x01a5a5a5, + 0x01696969, 0x025a5a5a, 0x02969696, 0x01a5a5a5, 0x00296969, + }, + }, { + name: "alternating bits 2", + in: "5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a", + expected: [10]uint32{ + 0x025a5a5a, 0x02969696, 0x01a5a5a5, 0x01696969, 0x025a5a5a, + 0x02969696, 0x01a5a5a5, 0x01696969, 0x025a5a5a, 0x00169696, + }, + }} + + for _, test := range tests { + inBytes := hexToBytes(test.in) + + // Ensure setting the bytes via the slice method works as expected. + var f fieldVal + f.SetByteSlice(inBytes) + if !reflect.DeepEqual(f.n, test.expected) { + t.Errorf("%s: unexpected result\ngot: %x\nwant: %x", test.name, f.n, + test.expected) + continue + } + + // Ensure setting the bytes via the array method works as expected. + var f2 fieldVal + var b32 [32]byte + truncatedInBytes := inBytes + if len(truncatedInBytes) > 32 { + truncatedInBytes = truncatedInBytes[:32] + } + copy(b32[32-len(truncatedInBytes):], truncatedInBytes) + f2.SetBytes(&b32) + if !reflect.DeepEqual(f2.n, test.expected) { + t.Errorf("%s: unexpected result\ngot: %x\nwant: %x", test.name, + f2.n, test.expected) + 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 +} From c7390232d31db328daf298246d8a15c7dc86c9d3 Mon Sep 17 00:00:00 2001 From: Oliver Gugger Date: Wed, 22 Jul 2020 09:57:15 +0200 Subject: [PATCH 050/419] config+service_windows: add flag to disable win service To run integration tests with btcd on Windows in non-interactive environments (such as the Travis build with Windows machines), we need to make sure we can still spawn a child process instead of only a windows background service. --- config.go | 1 + service_windows.go | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/config.go b/config.go index 96756f7f97..c44f3a837f 100644 --- a/config.go +++ b/config.go @@ -132,6 +132,7 @@ type config struct { 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"` DisableTLS bool `long:"notls" description:"Disable TLS for the RPC server -- NOTE: This is only allowed if the RPC server is bound to localhost"` OnionProxy string `long:"onion" description:"Connect to tor hidden services via SOCKS5 proxy (eg. 127.0.0.1:9050)"` 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() From 3c56a6bd3a26585e60683b09bafe1513ca1fea7c Mon Sep 17 00:00:00 2001 From: qqjettkgjzhxmwj <37233887+JettScythe@users.noreply.github.com> Date: Tue, 21 Jul 2020 16:54:22 -0300 Subject: [PATCH 051/419] updated docs for getblock-verbosity fixes --- docs/json_rpc_api.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/json_rpc_api.md b/docs/json_rpc_api.md index 4bb0625e89..c33bd7a396 100644 --- a/docs/json_rpc_api.md +++ b/docs/json_rpc_api.md @@ -271,13 +271,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 the block is returned as a JSON object instead of hex-encoded string**This parameter is a btcd extension**| |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)
*** From 69773a7b41c1cb2f6914004764c7a02af05ca569 Mon Sep 17 00:00:00 2001 From: qqjettkgjzhxmwj <37233887+JettScythe@users.noreply.github.com> Date: Tue, 21 Jul 2020 17:24:02 -0300 Subject: [PATCH 052/419] Update json_rpc_api.md Corrections suggested by @onyb https://github.com/btcsuite/btcd/pull/1608#discussion_r458363077 --- docs/json_rpc_api.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/json_rpc_api.md b/docs/json_rpc_api.md index c33bd7a396..61884df0a0 100644 --- a/docs/json_rpc_api.md +++ b/docs/json_rpc_api.md @@ -271,7 +271,7 @@ 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. verbosity (int, optional, default=1) - specifies the block is returned as a JSON object instead of hex-encoded string**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 (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)`
`}`| From 24db7d7c0cea3bebf44f9f274db60c778acef94b Mon Sep 17 00:00:00 2001 From: Javed Khan Date: Fri, 10 Jul 2020 12:49:38 +0530 Subject: [PATCH 053/419] netsync: handle notfound messages from peers backport from https://github.com/decred/dcrd/pull/2253 When a peer sends a notfound message, remove the hash from requested map. Also increase notfound ban score and return early if it disconnects the peer. --- netsync/manager.go | 48 ++++++++++++++++++++++++++++++++++++++ server.go | 57 +++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 99 insertions(+), 6 deletions(-) diff --git a/netsync/manager.go b/netsync/manager.go index 51c2cbe4a8..603fca6ec8 100644 --- a/netsync/manager.go +++ b/netsync/manager.go @@ -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 @@ -1012,6 +1019,32 @@ 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.InvTypeBlock: + if _, exists := state.requestedBlocks[inv.Hash]; exists { + delete(state.requestedBlocks, inv.Hash) + delete(sm.requestedBlocks, inv.Hash) + } + 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 @@ -1293,6 +1326,9 @@ out: case *headersMsg: sm.handleHeadersMsg(msg) + case *notFoundMsg: + sm.handleNotFoundMsg(msg) + case *donePeerMsg: sm.handleDonePeerMsg(msg.peer) @@ -1490,6 +1526,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/server.go b/server.go index 9a76be8d4c..c9f23fa638 100644 --- a/server.go +++ b/server.go @@ -364,14 +364,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 +383,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 +394,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 +500,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 +642,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. @@ -1304,6 +1310,44 @@ 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.InvTypeTx: + 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", numBlocks, 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. @@ -1998,6 +2042,7 @@ func newPeerConfig(sp *serverPeer) *peer.Config { OnAddr: sp.OnAddr, 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 From 4255e1ed7b8bae4b316f121ceb04d4f0e23747f0 Mon Sep 17 00:00:00 2001 From: Dan Cline Date: Wed, 22 Jul 2020 22:01:38 -0400 Subject: [PATCH 054/419] release: update release script path --- release/README.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/release/README.md b/release/README.md index a5c9681947..31b05d5c38 100644 --- a/release/README.md +++ b/release/README.md @@ -6,7 +6,7 @@ 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`. +utilize a work around needed until `go1.13.2`. ## Building a New Release @@ -19,8 +19,7 @@ the release binaries following these steps: 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, @@ -64,7 +63,7 @@ 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__ From 2a0d6fd0e3386b8f882782944ab648d05ef5e926 Mon Sep 17 00:00:00 2001 From: Dan Cline Date: Sun, 26 Jul 2020 20:56:39 -0400 Subject: [PATCH 055/419] release: remove old scripts and update process doc - remove prep_release.sh and notes.sample - update license in release.sh - add notes for maintainers on the release process - mention CHANGES file modifications --- release/README.md | 116 ++++++++++++++++++++++- release/notes.sample | 6 -- release/prep_release.sh | 205 ---------------------------------------- release/release.sh | 9 +- 4 files changed, 120 insertions(+), 216 deletions(-) delete mode 100644 release/notes.sample delete mode 100644 release/prep_release.sh diff --git a/release/README.md b/release/README.md index 31b05d5c38..ea01c7d0bb 100644 --- a/release/README.md +++ b/release/README.md @@ -7,10 +7,84 @@ 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`. +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 @@ -25,6 +99,46 @@ 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. 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..cc65fb6cf1 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 From 4527c5671fd982a842521ceb3f3bc1869b37b739 Mon Sep 17 00:00:00 2001 From: Anirudha Bose Date: Mon, 24 Aug 2020 20:57:54 +0200 Subject: [PATCH 056/419] Update CHANGES file for 0.21.0 release Also updated changes for 0.20.1, and added a small note about changes since 0.12.0. --- CHANGES | 155 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 155 insertions(+) diff --git a/CHANGES b/CHANGES index 6f7013e922..d38897b339 100644 --- a/CHANGES +++ b/CHANGES @@ -3,6 +3,161 @@ User visible changes for btcd A full-node bitcoin implementation written in Go ============================================================================ +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: + - Added -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) From 56cc42fe07c206e76812fc57a216b59c41189f04 Mon Sep 17 00:00:00 2001 From: "John C. Vernaleo" Date: Thu, 27 Aug 2020 15:36:47 -0400 Subject: [PATCH 057/419] btcd: bump version to v0.21.0-beta --- cmd/btcctl/version.go | 4 ++-- version.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cmd/btcctl/version.go b/cmd/btcctl/version.go index f65cacef7e..f3a3e0b830 100644 --- a/cmd/btcctl/version.go +++ b/cmd/btcctl/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 = 21 + appPatch uint = 0 // appPreRelease MUST only contain characters from semanticAlphabet // per the semantic versioning spec. diff --git a/version.go b/version.go index fba55b5a37..ac294de232 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 = 21 + appPatch uint = 0 // appPreRelease MUST only contain characters from semanticAlphabet // per the semantic versioning spec. From 70a0132485e5570ba3a1dede7a205fb55a127c9a Mon Sep 17 00:00:00 2001 From: Rjected Date: Mon, 26 Aug 2019 22:09:13 -0400 Subject: [PATCH 058/419] blockchain: remove unknown block version warning --- blockchain/chain.go | 15 ++---------- blockchain/thresholdstate.go | 10 ++------ blockchain/versionbits.go | 44 ------------------------------------ 3 files changed, 4 insertions(+), 65 deletions(-) diff --git a/blockchain/chain.go b/blockchain/chain.go index 71c1b2ee77..eea603ce8e 100644 --- a/blockchain/chain.go +++ b/blockchain/chain.go @@ -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. diff --git a/blockchain/thresholdstate.go b/blockchain/thresholdstate.go index 35a762552a..5da74a95af 100644 --- a/blockchain/thresholdstate.go +++ b/blockchain/thresholdstate.go @@ -310,7 +310,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 +335,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/versionbits.go b/blockchain/versionbits.go index ef2a080257..28fcde7b69 100644 --- a/blockchain/versionbits.go +++ b/blockchain/versionbits.go @@ -26,15 +26,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 @@ -264,38 +255,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 -} From efae8e99678d9579aea0d7bd6b352289a17187b8 Mon Sep 17 00:00:00 2001 From: Anirudha Bose Date: Mon, 24 Aug 2020 20:53:04 +0200 Subject: [PATCH 059/419] Add rpclient implementation of getdescriptorinfo RPC --- btcjson/chainsvrcmds.go | 14 ++++++++++++ btcjson/chainsvrcmds_test.go | 11 ++++++++++ btcjson/chainsvrresults.go | 9 ++++++++ rpcclient/chain.go | 41 ++++++++++++++++++++++++++++++++++++ rpcclient/example_test.go | 31 +++++++++++++++++++++++++++ 5 files changed, 106 insertions(+) create mode 100644 rpcclient/example_test.go diff --git a/btcjson/chainsvrcmds.go b/btcjson/chainsvrcmds.go index d66478c305..1292e46c89 100644 --- a/btcjson/chainsvrcmds.go +++ b/btcjson/chainsvrcmds.go @@ -882,6 +882,19 @@ func NewVerifyTxOutProofCmd(proof string) *VerifyTxOutProofCmd { } } +// 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, + } +} + func init() { // No special flags for commands in this file. flags := UsageFlag(0) @@ -937,4 +950,5 @@ func init() { MustRegisterCmd("verifychain", (*VerifyChainCmd)(nil), flags) MustRegisterCmd("verifymessage", (*VerifyMessageCmd)(nil), flags) MustRegisterCmd("verifytxoutproof", (*VerifyTxOutProofCmd)(nil), flags) + MustRegisterCmd("getdescriptorinfo", (*GetDescriptorInfoCmd)(nil), flags) } diff --git a/btcjson/chainsvrcmds_test.go b/btcjson/chainsvrcmds_test.go index e2b5025727..9aeac49ecb 100644 --- a/btcjson/chainsvrcmds_test.go +++ b/btcjson/chainsvrcmds_test.go @@ -1302,6 +1302,17 @@ 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"}, + }, } t.Logf("Running %d tests", len(tests)) diff --git a/btcjson/chainsvrresults.go b/btcjson/chainsvrresults.go index a96319b235..482e3d72d8 100644 --- a/btcjson/chainsvrresults.go +++ b/btcjson/chainsvrresults.go @@ -730,3 +730,12 @@ func (f *FundRawTransactionResult) UnmarshalJSON(data []byte) error { 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 +} diff --git a/rpcclient/chain.go b/rpcclient/chain.go index 9f0c6c684d..c0c6a15922 100644 --- a/rpcclient/chain.go +++ b/rpcclient/chain.go @@ -1224,3 +1224,44 @@ func (c *Client) GetBlockStatsAsync(hashOrHeight interface{}, stats *[]string) F func (c *Client) GetBlockStats(hashOrHeight interface{}, stats *[]string) (*btcjson.GetBlockStatsResult, error) { return c.GetBlockStatsAsync(hashOrHeight, stats).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/example_test.go b/rpcclient/example_test.go new file mode 100644 index 0000000000..c2c5290596 --- /dev/null +++ b/rpcclient/example_test.go @@ -0,0 +1,31 @@ +package rpcclient + +import ( + "fmt" +) + +func ExampleClient_GetDescriptorInfo() { + connCfg := &ConnConfig{ + Host: "localhost:8332", + User: "yourrpcuser", + Pass: "yourrpcpass", + HTTPPostMode: true, + DisableTLS: true, + } + client, err := New(connCfg, nil) + if err != nil { + log.Error(err) + return + } + defer client.Shutdown() + + descriptorInfo, err := client.GetDescriptorInfo( + "wpkh([d34db33f/84h/0h/0h]0279be667ef9dcbbac55a06295Ce870b07029Bfcdb2dce28d959f2815b16f81798)") + if err != nil { + log.Error(err) + return + } + + fmt.Printf("%+v\n", descriptorInfo) + // &{Descriptor:wpkh([d34db33f/84'/0'/0']0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798)#n9g43y4k Checksum:qwlqgth7 IsRange:false IsSolvable:true HasPrivateKeys:false} +} From 7d69fb9ba6a009817abdc62bc30b25ddc938225e Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Thu, 16 Jul 2020 18:05:45 -0700 Subject: [PATCH 060/419] peer: prevent last block height going backwards This modifies the UpdateLastBlockHeight function to ensure the new height is after the existing height before updating it in order to prevent it from going backwards so it properly matches the intent of the function which is to report the latest known block height for the peer. Without this change, the value will properly start out at the latest known block height reported by the peer during version negotiation, however, it will be set to lower values when syncing from the peer due to requesting old blocks and blindly updating the height. It also adds a test to ensure proper functionality. This is a backport of https://github.com/decred/dcrd/pull/1747 --- peer/peer.go | 4 +++ peer/peer_test.go | 66 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+) diff --git a/peer/peer.go b/peer/peer.go index 82010f3b84..5b083a7467 100644 --- a/peer/peer.go +++ b/peer/peer.go @@ -495,6 +495,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 diff --git a/peer/peer_test.go b/peer/peer_test.go index fff0ce3fd8..6cc3113d1e 100644 --- a/peer/peer_test.go +++ b/peer/peer_test.go @@ -917,6 +917,72 @@ func TestDuplicateVersionMsg(t *testing.T) { } } +// 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, + } + remotePeerCfg := peerCfg + remotePeerCfg.NewestBlock = func() (*chainhash.Hash, int32, error) { + return &chainhash.Hash{}, remotePeerHeight, nil + } + 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"}, + ) + localPeer, err := peer.NewOutboundPeer(&peerCfg, inConn.laddr) + if err != nil { + t.Fatalf("NewOutboundPeer: unexpected err: %v\n", err) + } + localPeer.AssociateConnection(outConn) + inPeer := peer.NewInboundPeer(&remotePeerCfg) + inPeer.AssociateConnection(inConn) + + // 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) + } +} + func init() { // Allow self connection when running the tests. peer.TstAllowSelfConns() From 36d4ae08e87e227efae5997664ff652ebc7fdbe2 Mon Sep 17 00:00:00 2001 From: wakiyamap Date: Fri, 14 Aug 2020 17:46:02 +0900 Subject: [PATCH 061/419] Fix monetary unit --- rpcserver.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpcserver.go b/rpcserver.go index 89817db856..6d684451b1 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -543,7 +543,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", From 7145eef75b483775e6457aa628f98fe1ae05758a Mon Sep 17 00:00:00 2001 From: Anirudha Bose Date: Mon, 24 Aug 2020 20:47:32 +0200 Subject: [PATCH 062/419] rpcserver: add parity with bitcoind for validateaddress Updated the rpcserver handler for validateaddress JSON-RPC command to have parity with the bitcoind 0.20.0 interface. The new fields included are - isscript, iswitness, witness_version, and witness_program. The scriptPubKey field has been left out since it requires wallet access. This update has no impact on the rpcclient.ValidateAddress method, which uses the btcjson.ValidateAddressWalletResult type for modelling the response from bitcoind. --- btcjson/chainsvrresults.go | 12 ++++++++++-- rpcserver.go | 31 +++++++++++++++++++++++++++++++ rpcserverhelp.go | 8 ++++++-- 3 files changed, 47 insertions(+), 4 deletions(-) diff --git a/btcjson/chainsvrresults.go b/btcjson/chainsvrresults.go index 482e3d72d8..6322580217 100644 --- a/btcjson/chainsvrresults.go +++ b/btcjson/chainsvrresults.go @@ -671,9 +671,17 @@ 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 diff --git a/rpcserver.go b/rpcserver.go index 6d684451b1..aa154dd0e1 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -3493,6 +3493,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 diff --git a/rpcserverhelp.go b/rpcserverhelp.go index cc3b33f3ce..9299f3e49d 100644 --- a/rpcserverhelp.go +++ b/rpcserverhelp.go @@ -575,8 +575,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.", From b68c50e33c394ec5214118fe9471534428d08f94 Mon Sep 17 00:00:00 2001 From: Mikael Lindlof Date: Sat, 16 May 2020 11:12:28 +0100 Subject: [PATCH 063/419] Add getblockfilter JSON-RPC client command Add type for second getblockfilter param --- btcjson/chainsvrcmds.go | 28 ++++++++++++++++++++++++++ btcjson/chainsvrcmds_test.go | 22 +++++++++++++++++++++ btcjson/chainsvrresults.go | 7 +++++++ btcjson/helpers.go | 8 ++++++++ rpcclient/chain.go | 38 ++++++++++++++++++++++++++++++++++++ 5 files changed, 103 insertions(+) diff --git a/btcjson/chainsvrcmds.go b/btcjson/chainsvrcmds.go index 1292e46c89..6383458528 100644 --- a/btcjson/chainsvrcmds.go +++ b/btcjson/chainsvrcmds.go @@ -200,6 +200,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 @@ -909,6 +936,7 @@ func init() { 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) diff --git a/btcjson/chainsvrcmds_test.go b/btcjson/chainsvrcmds_test.go index 9aeac49ecb..9087135d7e 100644 --- a/btcjson/chainsvrcmds_test.go +++ b/btcjson/chainsvrcmds_test.go @@ -334,6 +334,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) { diff --git a/btcjson/chainsvrresults.go b/btcjson/chainsvrresults.go index 6322580217..5699c53c07 100644 --- a/btcjson/chainsvrresults.go +++ b/btcjson/chainsvrresults.go @@ -226,6 +226,13 @@ type GetBlockChainInfoResult struct { *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 { 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/rpcclient/chain.go b/rpcclient/chain.go index c0c6a15922..4d7c455dd0 100644 --- a/rpcclient/chain.go +++ b/rpcclient/chain.go @@ -508,6 +508,44 @@ 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 From d2c0123befbf2243d8dd35dd4976cb7d1f3c65aa Mon Sep 17 00:00:00 2001 From: Mikael Lindlof Date: Sat, 23 May 2020 19:54:49 +0100 Subject: [PATCH 064/419] Implement signmessagewithprivkey JSON-RPC command Reuse the Bitcoin message signature header const also in verifymessage. --- btcjson/chainsvrcmds.go | 19 +++++ btcjson/chainsvrcmds_test.go | 14 ++++ rpcserver.go | 141 +++++++++++++++++++++++------------ rpcserverhelp.go | 99 ++++++++++++------------ 4 files changed, 180 insertions(+), 93 deletions(-) diff --git a/btcjson/chainsvrcmds.go b/btcjson/chainsvrcmds.go index 6383458528..d751d9bce2 100644 --- a/btcjson/chainsvrcmds.go +++ b/btcjson/chainsvrcmds.go @@ -806,6 +806,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{} @@ -971,6 +989,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 9087135d7e..b510b5ec21 100644 --- a/btcjson/chainsvrcmds_test.go +++ b/btcjson/chainsvrcmds_test.go @@ -1186,6 +1186,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) { diff --git a/rpcserver.go b/rpcserver.go index aa154dd0e1..7e00004123 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -127,52 +127,53 @@ 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, + "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 @@ -3435,6 +3436,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 := btcec.SignCompact(btcec.S256(), 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 { @@ -3615,7 +3662,7 @@ 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, diff --git a/rpcserverhelp.go b/rpcserverhelp.go index 9299f3e49d..bd0f8fd7ff 100644 --- a/rpcserverhelp.go +++ b/rpcserverhelp.go @@ -559,6 +559,12 @@ var helpDescsEnUS = map[string]string{ "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.'", @@ -691,52 +697,53 @@ 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": {(*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, + "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, From fffe4a909b895f97f75e343d50387f053d8e1f1c Mon Sep 17 00:00:00 2001 From: Anirudha Bose Date: Mon, 24 Aug 2020 20:53:41 +0200 Subject: [PATCH 065/419] rpcclient: Implement importmulti JSON-RPC client command --- btcjson/walletsvrcmds.go | 208 ++++++++++++++++++++++++++++ btcjson/walletsvrcmds_test.go | 252 ++++++++++++++++++++++++++++++++++ btcjson/walletsvrresults.go | 11 ++ rpcclient/example_test.go | 52 +++++-- rpcclient/wallet.go | 38 +++++ 5 files changed, 550 insertions(+), 11 deletions(-) diff --git a/btcjson/walletsvrcmds.go b/btcjson/walletsvrcmds.go index be1a67fbf0..a2c7398827 100644 --- a/btcjson/walletsvrcmds.go +++ b/btcjson/walletsvrcmds.go @@ -7,6 +7,11 @@ package btcjson +import ( + "encoding/json" + "fmt" +) + // AddMultisigAddressCmd defines the addmutisigaddress JSON-RPC command. type AddMultisigAddressCmd struct { NRequired int @@ -686,6 +691,208 @@ 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, + } +} + func init() { // The commands in this file are only usable with a wallet server. flags := UFWalletOnly @@ -709,6 +916,7 @@ func init() { 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) diff --git a/btcjson/walletsvrcmds_test.go b/btcjson/walletsvrcmds_test.go index 554a87413a..bc09588268 100644 --- a/btcjson/walletsvrcmds_test.go +++ b/btcjson/walletsvrcmds_test.go @@ -1243,6 +1243,258 @@ 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}}, + }, + }, + }, + }, } t.Logf("Running %d tests", len(tests)) diff --git a/btcjson/walletsvrresults.go b/btcjson/walletsvrresults.go index 6e69ed9066..d860eceb39 100644 --- a/btcjson/walletsvrresults.go +++ b/btcjson/walletsvrresults.go @@ -173,3 +173,14 @@ 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"` +} diff --git a/rpcclient/example_test.go b/rpcclient/example_test.go index c2c5290596..6083e115ec 100644 --- a/rpcclient/example_test.go +++ b/rpcclient/example_test.go @@ -2,30 +2,60 @@ package rpcclient import ( "fmt" + + "github.com/btcsuite/btcd/btcjson" ) +var connCfg = &ConnConfig{ + Host: "localhost:8332", + User: "yourrpcuser", + Pass: "yourrpcpass", + HTTPPostMode: true, + DisableTLS: true, +} + func ExampleClient_GetDescriptorInfo() { - connCfg := &ConnConfig{ - Host: "localhost:8332", - User: "yourrpcuser", - Pass: "yourrpcpass", - HTTPPostMode: true, - DisableTLS: true, - } client, err := New(connCfg, nil) if err != nil { - log.Error(err) - return + panic(err) } defer client.Shutdown() descriptorInfo, err := client.GetDescriptorInfo( "wpkh([d34db33f/84h/0h/0h]0279be667ef9dcbbac55a06295Ce870b07029Bfcdb2dce28d959f2815b16f81798)") if err != nil { - log.Error(err) - return + 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 +} diff --git a/rpcclient/wallet.go b/rpcclient/wallet.go index 37bf9471e0..d4069aad62 100644 --- a/rpcclient/wallet.go +++ b/rpcclient/wallet.go @@ -2203,6 +2203,44 @@ 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 From 90a5c7997c9a4c38e850fec3559601d838be37b2 Mon Sep 17 00:00:00 2001 From: Christian Lehmann Date: Thu, 5 Sep 2019 15:37:43 +0200 Subject: [PATCH 066/419] Add Dockerfile to build and run btcd on Docker. --- Dockerfile | 40 +++++++++++ docs/README.md | 9 +++ docs/using_docker.md | 160 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 209 insertions(+) create mode 100644 Dockerfile create mode 100644 docs/using_docker.md diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000..7cb47e0138 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,40 @@ +# 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 + +FROM golang:1.14-alpine3.12 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}" = "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/docs/README.md b/docs/README.md index afc58a631e..15d7e739f9 100644 --- a/docs/README.md +++ b/docs/README.md @@ -20,6 +20,7 @@ 1. [Code Contribution Guidelines](#ContributionGuidelines) 2. [JSON-RPC Reference](#JSONRPCReference) 3. [The btcsuite Bitcoin-related Go Packages](#GoPackages) +6. [Using Docker](#Docker)
@@ -294,3 +295,11 @@ information. specific hash algorithm to be abstracted. * [connmgr](https://github.com/btcsuite/btcd/tree/master/connmgr) - Package connmgr implements a generic Bitcoin network connection manager. + + + +### 6. Using Docker + +You can run btcd in a Docker container, without the need to compile the source by yourself. Visit the [Using Docker](https://github.com/btcsuite/btcd/tree/master/docs/using_docker.md) page for more inrormation and examples. + +* [Using Docker](https://github.com/btcsuite/btcd/tree/master/docs/using_docker.md) details page 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: +``` From d13e907952ae818bc1c3abe1c011ae5f38f8fd18 Mon Sep 17 00:00:00 2001 From: Federico Bond Date: Thu, 27 Aug 2020 16:11:21 -0300 Subject: [PATCH 067/419] btcd: fix conversion of int to string failing in Go 1.15 --- upnp.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 From 35194e2dacf8c918abe77ac85ca220cc8a9fd1e6 Mon Sep 17 00:00:00 2001 From: Federico Bond Date: Thu, 27 Aug 2020 21:30:27 -0300 Subject: [PATCH 068/419] btcjson,wire: fix invalid use of string(x) to convert byte value --- btcjson/cmdparse_test.go | 2 +- wire/message.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/btcjson/cmdparse_test.go b/btcjson/cmdparse_test.go index 7c13a0bb44..dd951dcbd7 100644 --- a/btcjson/cmdparse_test.go +++ b/btcjson/cmdparse_test.go @@ -201,7 +201,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}, }, diff --git a/wire/message.go b/wire/message.go index e937647702..fe45a11fb1 100644 --- a/wire/message.go +++ b/wire/message.go @@ -213,7 +213,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 } From 355472b0f79a72d2445ed2f0d9e5e472b25814f4 Mon Sep 17 00:00:00 2001 From: Christian Lehmann Date: Mon, 9 Sep 2019 17:24:56 +0200 Subject: [PATCH 069/419] Major rework on documentation to make it compatible to readthedocs.org --- README.md | 2 +- docs/.gitignore | 1 + docs/Makefile | 20 ++ docs/README.md | 305 ------------------ docs/code_contribution_guidelines.md | 106 ++---- docs/conf.py | 77 +++++ docs/configuration.md | 190 +++++++++++ ...configure_peer_server_listen_interfaces.md | 43 --- .../configure_rpc_server_listen_interfaces.md | 47 --- docs/configuring_tor.md | 96 ++---- docs/contact.md | 15 + docs/controlling.md | 34 ++ docs/default_ports.md | 15 - docs/developer_resources.md | 37 +++ docs/index.md | 57 ++++ docs/installation.md | 76 +++++ docs/json_rpc_api.md | 3 +- docs/make.bat | 35 ++ docs/mining.md | 30 ++ docs/requirements.txt | 1 + docs/table_of_content.md | 13 + docs/update.md | 8 + docs/using_bootstrap_dat.md | 79 ----- docs/wallet.md | 5 + 24 files changed, 655 insertions(+), 640 deletions(-) create mode 100644 docs/.gitignore create mode 100644 docs/Makefile delete mode 100644 docs/README.md create mode 100644 docs/conf.py create mode 100644 docs/configuration.md delete mode 100644 docs/configure_peer_server_listen_interfaces.md delete mode 100644 docs/configure_rpc_server_listen_interfaces.md create mode 100644 docs/contact.md create mode 100644 docs/controlling.md delete mode 100644 docs/default_ports.md create mode 100644 docs/developer_resources.md create mode 100644 docs/index.md create mode 100644 docs/installation.md create mode 100644 docs/make.bat create mode 100644 docs/mining.md create mode 100644 docs/requirements.txt create mode 100644 docs/table_of_content.md create mode 100644 docs/update.md delete mode 100644 docs/using_bootstrap_dat.md create mode 100644 docs/wallet.md diff --git a/README.md b/README.md index 8c9d252ad4..352252dd16 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,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 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 15d7e739f9..0000000000 --- a/docs/README.md +++ /dev/null @@ -1,305 +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) -6. [Using Docker](#Docker) - - - -### 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. - - - -### 6. Using Docker - -You can run btcd in a Docker container, without the need to compile the source by yourself. Visit the [Using Docker](https://github.com/btcsuite/btcd/tree/master/docs/using_docker.md) page for more inrormation and examples. - -* [Using Docker](https://github.com/btcsuite/btcd/tree/master/docs/using_docker.md) details page diff --git a/docs/code_contribution_guidelines.md b/docs/code_contribution_guidelines.md index b643e911a3..a135ad937a 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,15 +97,14 @@ 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 @@ -144,16 +114,20 @@ A quick summary of test practices follows: variety of automated presentations such as [godoc.org](https://godoc.org) - 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..132c07a1df --- /dev/null +++ b/docs/configuration.md @@ -0,0 +1,190 @@ +# Configuration + +btcd has a number of [configuration](http://godoc.org/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 ac61137335..0000000000 --- a/docs/configure_peer_server_listen_interfaces.md +++ /dev/null @@ -1,43 +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 -``` - -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/ -``` 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..ecb03bfc32 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,13 +45,7 @@ $ ./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 @@ -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..88b425e8bc --- /dev/null +++ b/docs/contact.md @@ -0,0 +1,15 @@ +# Contact + +## IRC + +* [irc.freenode.net](irc://irc.freenode.net), 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..cec8ce9972 --- /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/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..5dc0dfcf56 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,57 @@ +# 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) + +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/en/docu/). + +## 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..3eea886e4c --- /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.11 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/tree/master/docs/using_bootstrap_dat.md) diff --git a/docs/json_rpc_api.md b/docs/json_rpc_api.md index 61884df0a0..db292d2ba2 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)
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/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. From 23d149cbfbfa13938dcb64ed62f22250eb6d239d Mon Sep 17 00:00:00 2001 From: Christian Lehmann Date: Tue, 1 Sep 2020 07:42:37 +0200 Subject: [PATCH 070/419] Added symlink to index.md for github readme preview. --- docs/README.md | 1 + 1 file changed, 1 insertion(+) create mode 120000 docs/README.md 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 From 61634447e719206c2f67e51c6d6fb3b516330a9e Mon Sep 17 00:00:00 2001 From: yyforyongyu Date: Thu, 3 Sep 2020 18:53:16 +0800 Subject: [PATCH 071/419] btcd+netsync: support witness tx and block in notfound msg --- netsync/manager.go | 5 +++++ server.go | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/netsync/manager.go b/netsync/manager.go index 603fca6ec8..2b6c041156 100644 --- a/netsync/manager.go +++ b/netsync/manager.go @@ -1031,11 +1031,16 @@ func (sm *SyncManager) handleNotFoundMsg(nfmsg *notFoundMsg) { // 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) diff --git a/server.go b/server.go index c9f23fa638..ba7932a1a4 100644 --- a/server.go +++ b/server.go @@ -1321,8 +1321,12 @@ func (sp *serverPeer) OnNotFound(p *peer.Peer, msg *wire.MsgNotFound) { 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) From 8facfdd04db86fcee25d368c1b2e9133551e316d Mon Sep 17 00:00:00 2001 From: Hanjun Kim Date: Thu, 16 Apr 2020 00:20:56 +0900 Subject: [PATCH 072/419] btcec: set curve name in CurveParams Set curve name(secp256k1) in KoblitzCurve.CurveParams Fixes #1564 --- btcec/btcec.go | 1 + 1 file changed, 1 insertion(+) diff --git a/btcec/btcec.go b/btcec/btcec.go index de93a255a4..6000c479df 100644 --- a/btcec/btcec.go +++ b/btcec/btcec.go @@ -930,6 +930,7 @@ func initS256() { secp256k1.Gx = fromHex("79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798") secp256k1.Gy = fromHex("483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8") secp256k1.BitSize = 256 + secp256k1.Name = "secp256k1" secp256k1.q = new(big.Int).Div(new(big.Int).Add(secp256k1.P, big.NewInt(1)), big.NewInt(4)) secp256k1.H = 1 From 7cbf95675a26e90b88d0252f0835939cde464e6f Mon Sep 17 00:00:00 2001 From: Hanjun Kim Date: Sat, 18 Jul 2020 18:42:01 +0900 Subject: [PATCH 073/419] btcec: add a comment indicating where curve name taken from Related with #1565 --- btcec/btcec.go | 1 + 1 file changed, 1 insertion(+) diff --git a/btcec/btcec.go b/btcec/btcec.go index 6000c479df..a2e20f4b31 100644 --- a/btcec/btcec.go +++ b/btcec/btcec.go @@ -930,6 +930,7 @@ func initS256() { secp256k1.Gx = fromHex("79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798") secp256k1.Gy = fromHex("483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8") secp256k1.BitSize = 256 + // Curve name taken from https://safecurves.cr.yp.to/. secp256k1.Name = "secp256k1" secp256k1.q = new(big.Int).Div(new(big.Int).Add(secp256k1.P, big.NewInt(1)), big.NewInt(4)) From ba3fe57507ba8af1c9887932a19841d7ab373bf3 Mon Sep 17 00:00:00 2001 From: Anirudha Bose Date: Tue, 8 Sep 2020 15:43:02 +0200 Subject: [PATCH 074/419] rpcclient: support listtransactions RPC with watchonly argument Co-authored-by: Gert-Jaap Glasbergen --- rpcclient/wallet.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/rpcclient/wallet.go b/rpcclient/wallet.go index d4069aad62..4f263f102c 100644 --- a/rpcclient/wallet.go +++ b/rpcclient/wallet.go @@ -164,6 +164,25 @@ 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). From 95fea6420c92fb90c145ddd087def415731634a3 Mon Sep 17 00:00:00 2001 From: Calvin Kim Date: Mon, 13 Jul 2020 23:24:40 +0900 Subject: [PATCH 075/419] blockchain: Remove unnecessary tx hash --- blockchain/validate.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/blockchain/validate.go b/blockchain/validate.go index b971337fb5..f41d54e6b1 100644 --- a/blockchain/validate.go +++ b/blockchain/validate.go @@ -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) } From 3b926ef77b8cafee93e8898ddc4684cd2606aec6 Mon Sep 17 00:00:00 2001 From: Anirudha Bose Date: Sun, 6 Sep 2020 20:37:44 +0200 Subject: [PATCH 076/419] btcjson: update ListTransactionsResult for Bitcoin 0.20.0 This only adds new fields as optional, in order to make this change backwards compatible with older versions of Bitcoin Core. --- btcjson/walletsvrresults.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/btcjson/walletsvrresults.go b/btcjson/walletsvrresults.go index d860eceb39..4ad74b1ed1 100644 --- a/btcjson/walletsvrresults.go +++ b/btcjson/walletsvrresults.go @@ -64,6 +64,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 +72,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"` From bdab8dfe81c92667a2e2bf9044e068398be50549 Mon Sep 17 00:00:00 2001 From: Anirudha Bose Date: Mon, 24 Aug 2020 20:48:23 +0200 Subject: [PATCH 077/419] chaincfg: Add RegisterHDKeyID func to populate HD key ID pairs Currently, the only way to register HD version bytes is by initializing chaincfg.Params struct, and registering it during package init. RegisterHDKeyID provides a way to populate custom HD version bytes, without having to create new chaincfg.Params instances. This is useful for library packages who want to use non-standard version bytes for serializing extended keys, such as the ones documented in SLIP-0132. This function is complementary to HDPrivateKeyToPublicKeyID, which is used to lookup previously registered key IDs. --- chaincfg/params.go | 33 ++++++++++++++++++++++++- chaincfg/params_test.go | 53 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 84 insertions(+), 2 deletions(-) diff --git a/chaincfg/params.go b/chaincfg/params.go index 54117b8713..7e4327984c 100644 --- a/chaincfg/params.go +++ b/chaincfg/params.go @@ -588,6 +588,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 +623,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 +674,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..d9e1516812 100644 --- a/chaincfg/params_test.go +++ b/chaincfg/params_test.go @@ -4,7 +4,10 @@ package chaincfg -import "testing" +import ( + "bytes" + "testing" +) // TestInvalidHashStr ensures the newShaHashFromStr function panics when used to // with an invalid hash string. @@ -33,3 +36,51 @@ 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) + } +} From eb05726dacc7252ae8f1bc8689745bec0e9fc23f Mon Sep 17 00:00:00 2001 From: Mikael Lindlof Date: Sun, 14 Jun 2020 19:00:20 +0100 Subject: [PATCH 078/419] Nullable optional JSON-RPC parameters Fix command marshalling dropping params following params with nil value. #1591 Allow specifying null parameter value from command line. --- btcjson/cmdparse.go | 16 ++++++--- btcjson/cmdparse_test.go | 74 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+), 5 deletions(-) diff --git a/btcjson/cmdparse.go b/btcjson/cmdparse.go index 48c6278a61..117f72f187 100644 --- a/btcjson/cmdparse.go +++ b/btcjson/cmdparse.go @@ -16,19 +16,20 @@ 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 @@ -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 dd951dcbd7..71547271df 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 { @@ -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(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() From 2547246f84db364949e5535a597e01d7b3fc8b53 Mon Sep 17 00:00:00 2001 From: Anirudha Bose Date: Mon, 24 Aug 2020 20:58:47 +0200 Subject: [PATCH 079/419] GitHub Actions: Enable Go Race detector and code coverage This modifies the goclean.sh script to run tests with the race detector enabled. It also enables code coverage, and uploads the results to coveralls.io. Running tests with -race and -cover flags was disabled in 6487ba1 and 6788df7 respectively, due to some limits on time/goroutines being hit on Travis CI. Since we have migrated to GitHub Actions, it is desirable to bring them back. --- .github/workflows/go.yml | 5 +++++ .gitignore | 4 ++++ README.md | 1 + goclean.sh | 5 +++-- 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index f722032b16..7573dbe5ef 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -25,3 +25,8 @@ jobs: GO111MODULE: "on" run: | sh ./goclean.sh + + - name: Send coverage + uses: shogo82148/actions-goveralls@v1 + with: + path-to-profile: profile.cov diff --git a/.gitignore b/.gitignore index 72fb9416ea..c3effe5fc7 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,7 @@ _cgo_export.* _testmain.go *.exe + +# Code coverage files +profile.tmp +profile.cov diff --git a/README.md b/README.md index 352252dd16..d0ec992423 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,7 @@ 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://godoc.org/github.com/btcsuite/btcd) diff --git a/goclean.sh b/goclean.sh index bb0cd7b600..dad9f8f1dc 100755 --- a/goclean.sh +++ b/goclean.sh @@ -4,11 +4,12 @@ # 3. go vet (http://golang.org/cmd/vet) # 4. gosimple (https://github.com/dominikh/go-simple) # 5. unconvert (https://github.com/mdempsky/unconvert) -# +# 6. race detector (http://blog.golang.org/race-detector) +# 7. test coverage (http://blog.golang.org/cover) set -ex -go test -tags="rpctest" ./... +env GORACE="halt_on_error=1" go test -race -tags="rpctest" -covermode atomic -coverprofile=profile.cov ./... # Automatic checks golangci-lint run --deadline=10m --disable-all \ From fff96610aa6a3d82280363ca682ea2745d7d842b Mon Sep 17 00:00:00 2001 From: Mikael Lindlof Date: Sun, 31 May 2020 13:30:50 +0100 Subject: [PATCH 080/419] rpc: Add getnodeaddresses JSON-RPC support Add NodeAddresses function to rpcserverConnManager interface for fetching known node addresses. --- btcjson/chainsvrcmds.go | 17 ++++++++++++++++ btcjson/chainsvrcmds_test.go | 26 ++++++++++++++++++++++++ btcjson/chainsvrresults.go | 10 +++++++++ rpcadapters.go | 9 +++++++++ rpcclient/net.go | 37 ++++++++++++++++++++++++++++++++++ rpcserver.go | 39 ++++++++++++++++++++++++++++++++++++ rpcserverhelp.go | 12 +++++++++++ 7 files changed, 150 insertions(+) diff --git a/btcjson/chainsvrcmds.go b/btcjson/chainsvrcmds.go index d751d9bce2..793bb503ba 100644 --- a/btcjson/chainsvrcmds.go +++ b/btcjson/chainsvrcmds.go @@ -557,6 +557,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{} @@ -974,6 +990,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) diff --git a/btcjson/chainsvrcmds_test.go b/btcjson/chainsvrcmds_test.go index b510b5ec21..c7752d2ba8 100644 --- a/btcjson/chainsvrcmds_test.go +++ b/btcjson/chainsvrcmds_test.go @@ -753,6 +753,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) { diff --git a/btcjson/chainsvrresults.go b/btcjson/chainsvrresults.go index 5699c53c07..eb9a006077 100644 --- a/btcjson/chainsvrresults.go +++ b/btcjson/chainsvrresults.go @@ -365,6 +365,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"` diff --git a/rpcadapters.go b/rpcadapters.go index 7d2c3a14d0..ddcdf79bf7 100644 --- a/rpcadapters.go +++ b/rpcadapters.go @@ -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.NetAddress { + 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/net.go b/rpcclient/net.go index 6eb7362541..8f781e4ed8 100644 --- a/rpcclient/net.go +++ b/rpcclient/net.go @@ -281,6 +281,43 @@ 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 diff --git a/rpcserver.go b/rpcserver.go index 7e00004123..d7b68bf81b 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -156,6 +156,7 @@ var rpcHandlersBeforeInit = map[string]commandHandler{ "getmininginfo": handleGetMiningInfo, "getnettotals": handleGetNetTotals, "getnetworkhashps": handleGetNetworkHashPS, + "getnodeaddresses": handleGetNodeAddresses, "getpeerinfo": handleGetPeerInfo, "getrawmempool": handleGetRawMempool, "getrawtransaction": handleGetRawTransaction, @@ -2477,6 +2478,40 @@ func handleGetNetworkHashPS(s *rpcServer, cmd interface{}, closeChan <-chan stru return hashesPerSec.Int64(), 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.IP.String(), + Port: node.Port, + } + addresses = append(addresses, address) + } + + return addresses, nil +} + // handleGetPeerInfo implements the getpeerinfo command. func handleGetPeerInfo(s *rpcServer, cmd interface{}, closeChan <-chan struct{}) (interface{}, error) { peers := s.cfg.ConnMgr.ConnectedPeers() @@ -4298,6 +4333,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.NetAddress } // rpcserverSyncManager represents a sync manager for use with the RPC server. diff --git a/rpcserverhelp.go b/rpcserverhelp.go index bd0f8fd7ff..ca6d2e79c7 100644 --- a/rpcserverhelp.go +++ b/rpcserverhelp.go @@ -452,6 +452,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", @@ -726,6 +737,7 @@ var rpcResultTypes = map[string][]interface{}{ "getmininginfo": {(*btcjson.GetMiningInfoResult)(nil)}, "getnettotals": {(*btcjson.GetNetTotalsResult)(nil)}, "getnetworkhashps": {(*int64)(nil)}, + "getnodeaddresses": {(*[]btcjson.GetNodeAddressesResult)(nil)}, "getpeerinfo": {(*[]btcjson.GetPeerInfoResult)(nil)}, "getrawmempool": {(*[]string)(nil), (*btcjson.GetRawMempoolVerboseResult)(nil)}, "getrawtransaction": {(*string)(nil), (*btcjson.TxRawResult)(nil)}, From 6f49f1f1943cb0a372c6e7da5b302714a0a8ea6f Mon Sep 17 00:00:00 2001 From: Federico Bond Date: Thu, 30 Apr 2020 12:55:57 -0300 Subject: [PATCH 081/419] btcjson,rpcclient: add support for PSBT commands to rpcclient --- btcjson/chainsvrcmds.go | 15 +++++- btcjson/chainsvrcmds_test.go | 4 +- btcjson/walletsvrcmds.go | 87 ++++++++++++++++++++++++++++++++++ btcjson/walletsvrcmds_test.go | 76 ++++++++++++++++++++++++++++++ btcjson/walletsvrresults.go | 15 ++++++ rpcclient/wallet.go | 89 +++++++++++++++++++++++++++++++++++ 6 files changed, 283 insertions(+), 3 deletions(-) diff --git a/btcjson/chainsvrcmds.go b/btcjson/chainsvrcmds.go index 793bb503ba..a499169de3 100644 --- a/btcjson/chainsvrcmds.go +++ b/btcjson/chainsvrcmds.go @@ -80,11 +80,24 @@ func NewCreateRawTransactionCmd(inputs []TransactionInput, amounts map[string]fl } } +// 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 *string `json:"change_type,omitempty"` + ChangeType *ChangeType `json:"change_type,omitempty"` IncludeWatching *bool `json:"includeWatching,omitempty"` LockUnspents *bool `json:"lockUnspents,omitempty"` FeeRate *float64 `json:"feeRate,omitempty"` // BTC/kB diff --git a/btcjson/chainsvrcmds_test.go b/btcjson/chainsvrcmds_test.go index c7752d2ba8..bb589fdf6c 100644 --- a/btcjson/chainsvrcmds_test.go +++ b/btcjson/chainsvrcmds_test.go @@ -127,7 +127,7 @@ func TestChainSvrCmds(t *testing.T) { } changeAddress := "bcrt1qeeuctq9wutlcl5zatge7rjgx0k45228cxez655" change := 1 - changeType := "legacy" + changeType := btcjson.ChangeTypeLegacy watching := true lockUnspents := true feeRate := 0.7 @@ -151,7 +151,7 @@ func TestChainSvrCmds(t *testing.T) { unmarshalled: func() interface{} { changeAddress := "bcrt1qeeuctq9wutlcl5zatge7rjgx0k45228cxez655" change := 1 - changeType := "legacy" + changeType := btcjson.ChangeTypeLegacy watching := true lockUnspents := true feeRate := 0.7 diff --git a/btcjson/walletsvrcmds.go b/btcjson/walletsvrcmds.go index a2c7398827..97cc7ed679 100644 --- a/btcjson/walletsvrcmds.go +++ b/btcjson/walletsvrcmds.go @@ -8,8 +8,11 @@ package btcjson import ( + "encoding/hex" "encoding/json" "fmt" + + "github.com/btcsuite/btcutil" ) // AddMultisigAddressCmd defines the addmutisigaddress JSON-RPC command. @@ -893,6 +896,88 @@ func NewImportMultiCmd(requests []ImportMultiRequest, options *ImportMultiOption } } +// 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 *int64 `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 @@ -939,4 +1024,6 @@ func init() { 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 bc09588268..c45dfed1ad 100644 --- a/btcjson/walletsvrcmds_test.go +++ b/btcjson/walletsvrcmds_test.go @@ -12,6 +12,7 @@ import ( "testing" "github.com/btcsuite/btcd/btcjson" + "github.com/btcsuite/btcutil" ) // TestWalletSvrCmds tests all of the wallet server commands marshal and @@ -1495,6 +1496,81 @@ func TestWalletSvrCmds(t *testing.T) { }, }, }, + { + 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)) diff --git a/btcjson/walletsvrresults.go b/btcjson/walletsvrresults.go index 4ad74b1ed1..0cb78d482f 100644 --- a/btcjson/walletsvrresults.go +++ b/btcjson/walletsvrresults.go @@ -186,3 +186,18 @@ type ImportMultiResults []struct { 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/rpcclient/wallet.go b/rpcclient/wallet.go index 4f263f102c..6b04ced7bc 100644 --- a/rpcclient/wallet.go +++ b/rpcclient/wallet.go @@ -2424,6 +2424,95 @@ 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() +} + // TODO(davec): Implement // backupwallet (NYI in btcwallet) // encryptwallet (Won't be supported by btcwallet since it's always encrypted) From 5ae1f21cd959414d40b3f67535d6989a9f485bac Mon Sep 17 00:00:00 2001 From: Andrew Tugarinov Date: Tue, 8 Sep 2020 23:15:49 +0700 Subject: [PATCH 082/419] Added ListSinceBlockMinConfWatchOnly method. --- btcjson/walletsvrcmds_test.go | 15 +++++++++++++++ rpcclient/wallet.go | 25 +++++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/btcjson/walletsvrcmds_test.go b/btcjson/walletsvrcmds_test.go index c45dfed1ad..2e1780c10d 100644 --- a/btcjson/walletsvrcmds_test.go +++ b/btcjson/walletsvrcmds_test.go @@ -708,6 +708,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) { diff --git a/rpcclient/wallet.go b/rpcclient/wallet.go index 6b04ced7bc..c80f6ba7d2 100644 --- a/rpcclient/wallet.go +++ b/rpcclient/wallet.go @@ -326,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() } @@ -354,6 +355,30 @@ 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 paremeter. +func (c *Client) ListSinceBlockMinConfWatchOnly(blockHash *chainhash.Hash, minConfirms int, watchOnly bool) (*btcjson.ListSinceBlockResult, error) { + return c.ListSinceBlockMinConfWatchOnlyAsync(blockHash, minConfirms, watchOnly).Receive() +} + // ************************** // Transaction Send Functions // ************************** From ff59bbc14a3441dda427c1e6d1feaa8b7eb411a1 Mon Sep 17 00:00:00 2001 From: Anirudha Bose Date: Sun, 13 Sep 2020 16:45:10 +0200 Subject: [PATCH 083/419] wire: add proper types for flag field and improve docs Summary of changes: - Add a new const TxFlagMarker to indicate the flag prefix byte. - Add a new TxFlag type to enumerate the flags supported by the tx parser. This allows us to avoid hardcoded magics, and will make it easier to support new flags in future. - Improve code comments. Closes #1598. --- wire/msgtx.go | 70 ++++++++++++++++++++++++++++++---------------- wire/msgtx_test.go | 12 ++++---- 2 files changed, 52 insertions(+), 30 deletions(-) diff --git a/wire/msgtx.go b/wire/msgtx.go index 4f10ef9f98..1e2f69fad4 100644 --- a/wire/msgtx.go +++ b/wire/msgtx.go @@ -109,14 +109,38 @@ const ( maxWitnessItemSize = 11000 ) -// 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 +444,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) } @@ -690,14 +715,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 } } 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, From 42782bba1816beb4da478e8abbef17312d3590a5 Mon Sep 17 00:00:00 2001 From: ipriver Date: Mon, 7 Sep 2020 19:14:21 +0300 Subject: [PATCH 084/419] removed unnecessary GOMAXPROCS function calls --- blockchain/scriptval_test.go | 3 --- btcd.go | 3 --- cmd/addblock/addblock.go | 4 +--- database/cmd/dbtool/main.go | 4 ---- database/ffldb/driver_test.go | 2 -- 5 files changed, 1 insertion(+), 15 deletions(-) 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/btcd.go b/btcd.go index c17d6ab48a..3ace182cd8 100644 --- a/btcd.go +++ b/btcd.go @@ -297,9 +297,6 @@ func loadBlockDB() (database.DB, error) { } 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 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/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/ffldb/driver_test.go b/database/ffldb/driver_test.go index 8ba6691af3..f3db909d79 100644 --- a/database/ffldb/driver_test.go +++ b/database/ffldb/driver_test.go @@ -9,7 +9,6 @@ import ( "os" "path/filepath" "reflect" - "runtime" "testing" "github.com/btcsuite/btcd/chaincfg" @@ -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. From c693bd8bc510a83d2fd78541ceea340c66efa913 Mon Sep 17 00:00:00 2001 From: Anirudha Bose Date: Sun, 13 Sep 2020 09:47:39 +0200 Subject: [PATCH 085/419] rpcclient: add deriveaddresses RPC command --- btcjson/chainsvrcmds.go | 98 +++++++++++++++++++++--------------- btcjson/chainsvrcmds_test.go | 45 +++++++++++++++++ btcjson/chainsvrresults.go | 3 ++ rpcclient/chain.go | 41 +++++++++++++++ rpcclient/example_test.go | 18 +++++++ 5 files changed, 164 insertions(+), 41 deletions(-) diff --git a/btcjson/chainsvrcmds.go b/btcjson/chainsvrcmds.go index a499169de3..b15bce898a 100644 --- a/btcjson/chainsvrcmds.go +++ b/btcjson/chainsvrcmds.go @@ -80,6 +80,47 @@ func NewCreateRawTransactionCmd(inputs []TransactionInput, amounts map[string]fl } } +// DecodeRawTransactionCmd defines the decoderawtransaction JSON-RPC command. +type DecodeRawTransactionCmd struct { + HexTx string +} + +// NewDecodeRawTransactionCmd returns a new instance which can be used to issue +// a decoderawtransaction JSON-RPC command. +func NewDecodeRawTransactionCmd(hexTx string) *DecodeRawTransactionCmd { + return &DecodeRawTransactionCmd{ + HexTx: hexTx, + } +} + +// DecodeScriptCmd defines the decodescript JSON-RPC command. +type DecodeScriptCmd struct { + HexScript string +} + +// NewDecodeScriptCmd returns a new instance which can be used to issue a +// decodescript JSON-RPC command. +func NewDecodeScriptCmd(hexScript string) *DecodeScriptCmd { + return &DecodeScriptCmd{ + HexScript: hexScript, + } +} + +// 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 @@ -124,32 +165,6 @@ func NewFundRawTransactionCmd(serializedTx []byte, opts FundRawTransactionOpts, } } -// DecodeRawTransactionCmd defines the decoderawtransaction JSON-RPC command. -type DecodeRawTransactionCmd struct { - HexTx string -} - -// NewDecodeRawTransactionCmd returns a new instance which can be used to issue -// a decoderawtransaction JSON-RPC command. -func NewDecodeRawTransactionCmd(hexTx string) *DecodeRawTransactionCmd { - return &DecodeRawTransactionCmd{ - HexTx: hexTx, - } -} - -// DecodeScriptCmd defines the decodescript JSON-RPC command. -type DecodeScriptCmd struct { - HexScript string -} - -// NewDecodeScriptCmd returns a new instance which can be used to issue a -// decodescript JSON-RPC command. -func NewDecodeScriptCmd(hexScript string) *DecodeScriptCmd { - return &DecodeScriptCmd{ - HexScript: hexScript, - } -} - // GetAddedNodeInfoCmd defines the getaddednodeinfo JSON-RPC command. type GetAddedNodeInfoCmd struct { DNS bool @@ -467,6 +482,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{} @@ -956,28 +984,16 @@ func NewVerifyTxOutProofCmd(proof string) *VerifyTxOutProofCmd { } } -// 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, - } -} - func init() { // No special flags for commands in this file. flags := UsageFlag(0) MustRegisterCmd("addnode", (*AddNodeCmd)(nil), flags) MustRegisterCmd("createrawtransaction", (*CreateRawTransactionCmd)(nil), flags) - MustRegisterCmd("fundrawtransaction", (*FundRawTransactionCmd)(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) @@ -993,6 +1009,7 @@ func init() { 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) @@ -1027,5 +1044,4 @@ func init() { MustRegisterCmd("verifychain", (*VerifyChainCmd)(nil), flags) MustRegisterCmd("verifymessage", (*VerifyMessageCmd)(nil), flags) MustRegisterCmd("verifytxoutproof", (*VerifyTxOutProofCmd)(nil), flags) - MustRegisterCmd("getdescriptorinfo", (*GetDescriptorInfoCmd)(nil), flags) } diff --git a/btcjson/chainsvrcmds_test.go b/btcjson/chainsvrcmds_test.go index bb589fdf6c..bdf16bbee8 100644 --- a/btcjson/chainsvrcmds_test.go +++ b/btcjson/chainsvrcmds_test.go @@ -220,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) { diff --git a/btcjson/chainsvrresults.go b/btcjson/chainsvrresults.go index eb9a006077..bdd135b559 100644 --- a/btcjson/chainsvrresults.go +++ b/btcjson/chainsvrresults.go @@ -764,3 +764,6 @@ type GetDescriptorInfoResult struct { 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 diff --git a/rpcclient/chain.go b/rpcclient/chain.go index 4d7c455dd0..35adbc1000 100644 --- a/rpcclient/chain.go +++ b/rpcclient/chain.go @@ -1263,6 +1263,45 @@ func (c *Client) GetBlockStats(hashOrHeight interface{}, stats *[]string) (*btcj 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 @@ -1276,10 +1315,12 @@ func (r FutureGetDescriptorInfoResult) Receive() (*btcjson.GetDescriptorInfoResu } var descriptorInfo btcjson.GetDescriptorInfoResult + err = json.Unmarshal(res, &descriptorInfo) if err != nil { return nil, err } + return &descriptorInfo, nil } diff --git a/rpcclient/example_test.go b/rpcclient/example_test.go index 6083e115ec..c9474512fa 100644 --- a/rpcclient/example_test.go +++ b/rpcclient/example_test.go @@ -59,3 +59,21 @@ func ExampleClient_ImportMulti() { 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] +} From 297c6120bbf93294cca95f22a64bf7c5feb2c3e9 Mon Sep 17 00:00:00 2001 From: Jake Sylvestre Date: Thu, 17 Sep 2020 01:38:18 -0400 Subject: [PATCH 086/419] ci: add go 1.15 to tests --- .github/workflows/go.yml | 2 +- README.md | 2 +- go.mod | 2 +- release/README.md | 7 ++----- release/release.sh | 1 - 5 files changed, 5 insertions(+), 9 deletions(-) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index f722032b16..a6a6b59749 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -6,7 +6,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - go: [1.13, 1.14] + go: [1.14, 1.15] steps: - name: Set up Go uses: actions/setup-go@v2 diff --git a/README.md b/README.md index 8c9d252ad4..4f53f1bbc1 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ which are both under active development. ## Requirements -[Go](http://golang.org) 1.12 or newer. +[Go](http://golang.org) 1.14 or newer. ## Installation diff --git a/go.mod b/go.mod index 80a3d7658f..c53b23d222 100644 --- a/go.mod +++ b/go.mod @@ -14,4 +14,4 @@ require ( golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37 ) -go 1.12 +go 1.14 diff --git a/release/README.md b/release/README.md index ea01c7d0bb..7128ef1f16 100644 --- a/release/README.md +++ b/release/README.md @@ -3,10 +3,7 @@ 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. @@ -181,4 +178,4 @@ and `go` (matching the same version used in the release): 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/release.sh b/release/release.sh index cc65fb6cf1..de49f64122 100755 --- a/release/release.sh +++ b/release/release.sh @@ -39,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 From e5521de652133c1d59df6fc505fd3f6e5c23bea9 Mon Sep 17 00:00:00 2001 From: Tristyn Date: Wed, 16 Sep 2020 18:30:48 -0700 Subject: [PATCH 087/419] sample-btcd.conf: fix typo --- sample-btcd.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From f4024160f30d98097866cfb092e27cba46adb4ac Mon Sep 17 00:00:00 2001 From: Anirudha Bose Date: Fri, 18 Sep 2020 00:10:32 +0200 Subject: [PATCH 088/419] btcjson: add test for null params in searchrawtransactions Closes PR #1476. --- btcjson/chainsvrcmds_test.go | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/btcjson/chainsvrcmds_test.go b/btcjson/chainsvrcmds_test.go index bdf16bbee8..d44a2ece6f 100644 --- a/btcjson/chainsvrcmds_test.go +++ b/btcjson/chainsvrcmds_test.go @@ -1201,6 +1201,26 @@ 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) { From 6daaf73544d70aea67efe468651648a6d03c7b25 Mon Sep 17 00:00:00 2001 From: Elliott Minns Date: Mon, 21 Sep 2020 08:42:35 -0500 Subject: [PATCH 089/419] GetBlockTemplate RPC client implementation (#1629) * GetBlockTemplate RPC client implementation * Txid added to the getblocktemplate result * Omitempty for TxID and improved comment for GetBlockTemplate 'rules' field --- btcjson/chainsvrcmds.go | 4 ++++ btcjson/chainsvrresults.go | 6 ++++-- rpcclient/mining.go | 37 ++++++++++++++++++++++++++++++++++++- rpcserverhelp.go | 2 ++ 4 files changed, 46 insertions(+), 3 deletions(-) diff --git a/btcjson/chainsvrcmds.go b/btcjson/chainsvrcmds.go index b15bce898a..0e683af003 100644 --- a/btcjson/chainsvrcmds.go +++ b/btcjson/chainsvrcmds.go @@ -350,6 +350,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 diff --git a/btcjson/chainsvrresults.go b/btcjson/chainsvrresults.go index bdd135b559..9cafe33494 100644 --- a/btcjson/chainsvrresults.go +++ b/btcjson/chainsvrresults.go @@ -236,8 +236,10 @@ type GetBlockFilterResult struct { // GetBlockTemplateResultTx models the transactions field of the // getblocktemplate command. type GetBlockTemplateResultTx struct { - Data string `json:"data"` - Hash string `json:"hash"` + Data string `json:"data"` + Hash string `json:"hash"` + // TODO: remove omitempty once implemented in rpcserver + TxID string `json:"txid,omitempty"` Depends []int64 `json:"depends"` Fee int64 `json:"fee"` SigOps int64 `json:"sigops"` diff --git a/rpcclient/mining.go b/rpcclient/mining.go index 8717d3278f..431054e155 100644 --- a/rpcclient/mining.go +++ b/rpcclient/mining.go @@ -461,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/rpcserverhelp.go b/rpcserverhelp.go index ca6d2e79c7..75a63be0af 100644 --- a/rpcserverhelp.go +++ b/rpcserverhelp.go @@ -295,6 +295,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)", @@ -302,6 +303,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. From ac3f235eb958ff6402f8a96a1612feccd95a81aa Mon Sep 17 00:00:00 2001 From: Anirudha Bose Date: Tue, 15 Sep 2020 23:30:59 +0200 Subject: [PATCH 090/419] rpcclient: implement getaddressinfo command Fields such as label, and labelspurpose are not included, since they are deprecated, and will be removed in Bitcoin Core 0.21. --- btcjson/walletsvrcmds.go | 16 ++++- btcjson/walletsvrcmds_test.go | 15 +++- btcjson/walletsvrresults.go | 117 ++++++++++++++++++++++++++++++- btcjson/walletsvrresults_test.go | 80 +++++++++++++++++++++ rpcclient/example_test.go | 31 +++++++- rpcclient/wallet.go | 37 +++++++++- txscript/standard.go | 20 +++++- txscript/standard_test.go | 40 ++++++++++- 8 files changed, 349 insertions(+), 7 deletions(-) create mode 100644 btcjson/walletsvrresults_test.go diff --git a/btcjson/walletsvrcmds.go b/btcjson/walletsvrcmds.go index 97cc7ed679..b21fb18712 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. @@ -178,6 +178,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 @@ -993,6 +1006,7 @@ func init() { 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) diff --git a/btcjson/walletsvrcmds_test.go b/btcjson/walletsvrcmds_test.go index 2e1780c10d..d19aa32aac 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. @@ -209,6 +209,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) { diff --git a/btcjson/walletsvrresults.go b/btcjson/walletsvrresults.go index 0cb78d482f..1b9393ab5c 100644 --- a/btcjson/walletsvrresults.go +++ b/btcjson/walletsvrresults.go @@ -1,9 +1,124 @@ -// 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" + "github.com/btcsuite/btcd/txscript" +) + +// 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 diff --git a/btcjson/walletsvrresults_test.go b/btcjson/walletsvrresults_test.go new file mode 100644 index 0000000000..173226b8b5 --- /dev/null +++ b/btcjson/walletsvrresults_test.go @@ -0,0 +1,80 @@ +// 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 + } + } +} diff --git a/rpcclient/example_test.go b/rpcclient/example_test.go index c9474512fa..e930778a01 100644 --- a/rpcclient/example_test.go +++ b/rpcclient/example_test.go @@ -1,8 +1,11 @@ +// 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" ) @@ -77,3 +80,29 @@ func ExampleClient_DeriveAddresses() { fmt.Printf("%+v\n", addrs) // &[14NjenDKkGGq1McUgoSkeUHJpW3rrKLbPW 1Pn6i3cvdGhqbdgNjXHfbaYfiuviPiymXj 181x1NbgGYKLeMXkDdXEAqepG75EgU8XtG] } + +func ExampleClient_GetAddressInfo() { + connCfg = &ConnConfig{ + Host: "localhost:18332", + User: "user", + Pass: "pass", + HTTPPostMode: true, + DisableTLS: true, + } + + 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 +} diff --git a/rpcclient/wallet.go b/rpcclient/wallet.go index c80f6ba7d2..10bdfca6d8 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. @@ -939,6 +939,41 @@ func (c *Client) CreateNewAccount(account string) error { return c.CreateNewAccountAsync(account).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 struct { diff --git a/txscript/standard.go b/txscript/standard.go index a7e929d101..2cad218e95 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. @@ -58,6 +58,7 @@ const ( WitnessV0ScriptHashTy // Pay to witness script hash. MultiSigTy // Multi signature. NullDataTy // Empty data-only (provably prunable). + WitnessUnknownTy // Witness unknown ) // scriptClassToName houses the human-readable strings which describe each @@ -71,6 +72,7 @@ var scriptClassToName = []string{ WitnessV0ScriptHashTy: "witness_v0_scripthash", MultiSigTy: "multisig", NullDataTy: "nulldata", + WitnessUnknownTy: "witness_unknown", } // String implements the Stringer interface by returning the name of @@ -188,6 +190,22 @@ func GetScriptClass(script []byte) ScriptClass { return typeOfScript(pops) } +// 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. // If the script is of unknown type such that the number can not be determined // then -1 is returned. We are an internal function and thus assume that class diff --git a/txscript/standard_test.go b/txscript/standard_test.go index e24d5f615b..37dd8f8a37 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,6 +7,7 @@ package txscript import ( "bytes" "encoding/hex" + "errors" "reflect" "testing" @@ -1213,3 +1214,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) + } + }) + } +} From 134051378620b1c1410c84396439a0c4937c7a50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Friedger=20M=C3=BCffke?= Date: Wed, 23 Sep 2020 08:47:26 +0200 Subject: [PATCH 091/419] Fix link to using bootstrap.dat --- docs/installation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/installation.md b/docs/installation.md index 3eea886e4c..c3c206060b 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -73,4 +73,4 @@ 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/tree/master/docs/using_bootstrap_dat.md) +* [Using bootstrap.dat](https://github.com/btcsuite/btcd/blob/master/docs/configuration.md#using-bootstrapdat) From e9a51e8dcd673c563a549676ebd4384b0318a9b7 Mon Sep 17 00:00:00 2001 From: Anirudha Bose Date: Sun, 20 Sep 2020 15:46:32 +0200 Subject: [PATCH 092/419] rpcclient: implement getwalletinfo command --- btcjson/walletsvrresults.go | 54 ++++++++++++++++++++++++++++++++ btcjson/walletsvrresults_test.go | 47 +++++++++++++++++++++++++++ rpcclient/example_test.go | 26 ++++++++++----- rpcclient/wallet.go | 36 ++++++++++++++++++++- 4 files changed, 154 insertions(+), 9 deletions(-) diff --git a/btcjson/walletsvrresults.go b/btcjson/walletsvrresults.go index 1b9393ab5c..2569dde424 100644 --- a/btcjson/walletsvrresults.go +++ b/btcjson/walletsvrresults.go @@ -6,6 +6,8 @@ package btcjson import ( "encoding/json" + "fmt" + "github.com/btcsuite/btcd/txscript" ) @@ -150,6 +152,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 { diff --git a/btcjson/walletsvrresults_test.go b/btcjson/walletsvrresults_test.go index 173226b8b5..fd44b066b8 100644 --- a/btcjson/walletsvrresults_test.go +++ b/btcjson/walletsvrresults_test.go @@ -78,3 +78,50 @@ func TestGetAddressInfoResult(t *testing.T) { } } } + +// 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/rpcclient/example_test.go b/rpcclient/example_test.go index e930778a01..ba8bb5ecb5 100644 --- a/rpcclient/example_test.go +++ b/rpcclient/example_test.go @@ -82,14 +82,6 @@ func ExampleClient_DeriveAddresses() { } func ExampleClient_GetAddressInfo() { - connCfg = &ConnConfig{ - Host: "localhost:18332", - User: "user", - Pass: "pass", - HTTPPostMode: true, - DisableTLS: true, - } - client, err := New(connCfg, nil) if err != nil { panic(err) @@ -106,3 +98,21 @@ func ExampleClient_GetAddressInfo() { 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 +} diff --git a/rpcclient/wallet.go b/rpcclient/wallet.go index 10bdfca6d8..3824de990c 100644 --- a/rpcclient/wallet.go +++ b/rpcclient/wallet.go @@ -2573,10 +2573,44 @@ func (c *Client) WalletProcessPsbt( 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() +} + // 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) From 0bf42f447686272b7bd8c41a04727edd090d5f31 Mon Sep 17 00:00:00 2001 From: Anirudha Bose Date: Mon, 21 Sep 2020 23:11:48 +0200 Subject: [PATCH 093/419] rpcserver: add txid to getblocktemplate response --- btcjson/chainsvrresults.go | 7 +++---- rpcserver.go | 7 ++++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/btcjson/chainsvrresults.go b/btcjson/chainsvrresults.go index 9cafe33494..aeb1f6ac7f 100644 --- a/btcjson/chainsvrresults.go +++ b/btcjson/chainsvrresults.go @@ -236,10 +236,9 @@ type GetBlockFilterResult struct { // GetBlockTemplateResultTx models the transactions field of the // getblocktemplate command. type GetBlockTemplateResultTx struct { - Data string `json:"data"` - Hash string `json:"hash"` - // TODO: remove omitempty once implemented in rpcserver - TxID string `json:"txid,omitempty"` + Data string `json:"data"` + Hash string `json:"hash"` + TxID string `json:"txid"` Depends []int64 `json:"depends"` Fee int64 `json:"fee"` SigOps int64 `json:"sigops"` diff --git a/rpcserver.go b/rpcserver.go index d7b68bf81b..9a52301ee8 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -1689,8 +1689,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 +1724,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], From 584c3823342c4eb2b538928b50be2881059f06a5 Mon Sep 17 00:00:00 2001 From: Henry Fisher Date: Fri, 10 Apr 2020 18:09:29 -0700 Subject: [PATCH 094/419] rpc: add signrawtransactionwithwallet interface Adds interface for issuing a signrawtransactionwithwallet command. Note that this does not add functionality for the btcd rpc server itself, it simply assumes that the RPC client has this ability and gives an API for interacting with the RPC client. rpc: add signrawtransactionwithwallet interface --- btcjson/walletsvrcmds.go | 34 ++++++++ btcjson/walletsvrcmds_test.go | 97 +++++++++++++++++++++++ btcjson/walletsvrresults.go | 8 ++ rpcclient/rawtransactions.go | 145 +++++++++++++++++++++++++++++++++- 4 files changed, 283 insertions(+), 1 deletion(-) diff --git a/btcjson/walletsvrcmds.go b/btcjson/walletsvrcmds.go index b21fb18712..c3ecc0c862 100644 --- a/btcjson/walletsvrcmds.go +++ b/btcjson/walletsvrcmds.go @@ -668,6 +668,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{} @@ -1035,6 +1068,7 @@ func init() { MustRegisterCmd("settxfee", (*SetTxFeeCmd)(nil), flags) MustRegisterCmd("signmessage", (*SignMessageCmd)(nil), flags) MustRegisterCmd("signrawtransaction", (*SignRawTransactionCmd)(nil), flags) + MustRegisterCmd("signrawtransactionwithwallet", (*SignRawTransactionWithWalletCmd)(nil), flags) MustRegisterCmd("walletlock", (*WalletLockCmd)(nil), flags) MustRegisterCmd("walletpassphrase", (*WalletPassphraseCmd)(nil), flags) MustRegisterCmd("walletpassphrasechange", (*WalletPassphraseChangeCmd)(nil), flags) diff --git a/btcjson/walletsvrcmds_test.go b/btcjson/walletsvrcmds_test.go index d19aa32aac..38c7c3bd7c 100644 --- a/btcjson/walletsvrcmds_test.go +++ b/btcjson/walletsvrcmds_test.go @@ -1233,6 +1233,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) { diff --git a/btcjson/walletsvrresults.go b/btcjson/walletsvrresults.go index 2569dde424..e2ba201daf 100644 --- a/btcjson/walletsvrresults.go +++ b/btcjson/walletsvrresults.go @@ -308,6 +308,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 { diff --git a/rpcclient/rawtransactions.go b/rpcclient/rawtransactions.go index 4e8d4e4d9c..35038ed9d3 100644 --- a/rpcclient/rawtransactions.go +++ b/rpcclient/rawtransactions.go @@ -555,7 +555,7 @@ func (c *Client) SignRawTransaction4Async(tx *wire.MsgTx, 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 @@ -582,6 +582,149 @@ 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 From 6519c04a6fcea38faee9b5febcd49fb10ea95128 Mon Sep 17 00:00:00 2001 From: Anirudha Bose Date: Mon, 28 Sep 2020 14:42:18 +0200 Subject: [PATCH 095/419] rpcclient: implement gettxoutsetinfo command --- btcjson/chainsvrresults.go | 60 ++++++++++++++++++++++++++++ btcjson/chainsvrresults_test.go | 71 +++++++++++++++++++++++++++++++++ rpcclient/chain.go | 38 ++++++++++++++++++ rpcclient/example_test.go | 19 +++++++++ 4 files changed, 188 insertions(+) diff --git a/btcjson/chainsvrresults.go b/btcjson/chainsvrresults.go index aeb1f6ac7f..689fbe6742 100644 --- a/btcjson/chainsvrresults.go +++ b/btcjson/chainsvrresults.go @@ -9,6 +9,8 @@ import ( "encoding/hex" "encoding/json" + "github.com/btcsuite/btcd/chaincfg/chainhash" + "github.com/btcsuite/btcd/wire" "github.com/btcsuite/btcutil" ) @@ -435,6 +437,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"` diff --git a/btcjson/chainsvrresults_test.go b/btcjson/chainsvrresults_test.go index 1d568e2658..0bab922b0d 100644 --- a/btcjson/chainsvrresults_test.go +++ b/btcjson/chainsvrresults_test.go @@ -6,8 +6,13 @@ package btcjson_test import ( "encoding/json" + "reflect" "testing" + "github.com/btcsuite/btcd/chaincfg/chainhash" + "github.com/btcsuite/btcutil" + "github.com/davecgh/go-spew/spew" + "github.com/btcsuite/btcd/btcjson" ) @@ -86,3 +91,69 @@ 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 + } + } +} diff --git a/rpcclient/chain.go b/rpcclient/chain.go index 35adbc1000..d478da7a00 100644 --- a/rpcclient/chain.go +++ b/rpcclient/chain.go @@ -1026,6 +1026,44 @@ 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). // diff --git a/rpcclient/example_test.go b/rpcclient/example_test.go index ba8bb5ecb5..35159317b5 100644 --- a/rpcclient/example_test.go +++ b/rpcclient/example_test.go @@ -116,3 +116,22 @@ func ExampleClient_GetWalletInfo() { 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 +} From 6adfc07d1ea97599c7e06cf6ea84daa0c0ef57e6 Mon Sep 17 00:00:00 2001 From: David Mazary Date: Sat, 3 Oct 2020 21:12:09 -0400 Subject: [PATCH 096/419] Unmarshal hashes/second as float in GetMiningInfoResult --- btcjson/chainsvrresults.go | 4 +-- btcjson/chainsvrresults_test.go | 46 +++++++++++++++++++++++++++++++-- rpcserver.go | 4 +-- 3 files changed, 48 insertions(+), 6 deletions(-) diff --git a/btcjson/chainsvrresults.go b/btcjson/chainsvrresults.go index 689fbe6742..00f8cd6149 100644 --- a/btcjson/chainsvrresults.go +++ b/btcjson/chainsvrresults.go @@ -673,8 +673,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"` } diff --git a/btcjson/chainsvrresults_test.go b/btcjson/chainsvrresults_test.go index 0bab922b0d..72dcd8d7ec 100644 --- a/btcjson/chainsvrresults_test.go +++ b/btcjson/chainsvrresults_test.go @@ -9,11 +9,10 @@ import ( "reflect" "testing" + "github.com/btcsuite/btcd/btcjson" "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcutil" "github.com/davecgh/go-spew/spew" - - "github.com/btcsuite/btcd/btcjson" ) // TestChainSvrCustomResults ensures any results that have custom marshalling @@ -157,3 +156,46 @@ func TestGetTxOutSetInfoResult(t *testing.T) { } } } + +// 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/rpcserver.go b/rpcserver.go index 9a52301ee8..f159f2397f 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -2366,8 +2366,8 @@ 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()), - NetworkHashPS: networkHashesPerSec, + HashesPerSec: s.cfg.CPUMiner.HashesPerSecond(), + NetworkHashPS: float64(networkHashesPerSec), PooledTx: uint64(s.cfg.TxMemPool.Count()), TestNet: cfg.TestNet3, } From 1d75e0a8854337de76bbbb10cebb301ff1c7ef3a Mon Sep 17 00:00:00 2001 From: Torkel Rogstad Date: Tue, 6 Oct 2020 14:28:19 +0200 Subject: [PATCH 097/419] rpcclient: add more wallet commands Implement backupwallet, dumpwallet, loadwallet and unloadwallet. --- btcjson/chainsvrresults.go | 11 +++ btcjson/walletsvrcmds.go | 36 +++++++++ btcjson/walletsvrcmds_test.go | 43 +++++++++++ rpcclient/wallet.go | 139 ++++++++++++++++++++++++++++++++-- 4 files changed, 224 insertions(+), 5 deletions(-) diff --git a/btcjson/chainsvrresults.go b/btcjson/chainsvrresults.go index 00f8cd6149..e70900d87b 100644 --- a/btcjson/chainsvrresults.go +++ b/btcjson/chainsvrresults.go @@ -828,3 +828,14 @@ type GetDescriptorInfoResult struct { // 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/walletsvrcmds.go b/btcjson/walletsvrcmds.go index c3ecc0c862..f63a59445b 100644 --- a/btcjson/walletsvrcmds.go +++ b/btcjson/walletsvrcmds.go @@ -313,6 +313,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 @@ -1030,6 +1063,7 @@ func init() { MustRegisterCmd("addmultisigaddress", (*AddMultisigAddressCmd)(nil), flags) MustRegisterCmd("addwitnessaddress", (*AddWitnessAddressCmd)(nil), flags) + MustRegisterCmd("backupwallet", (*BackupWalletCmd)(nil), flags) MustRegisterCmd("createmultisig", (*CreateMultisigCmd)(nil), flags) MustRegisterCmd("dumpprivkey", (*DumpPrivKeyCmd)(nil), flags) MustRegisterCmd("encryptwallet", (*EncryptWalletCmd)(nil), flags) @@ -1059,6 +1093,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) @@ -1069,6 +1104,7 @@ func init() { 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) diff --git a/btcjson/walletsvrcmds_test.go b/btcjson/walletsvrcmds_test.go index 38c7c3bd7c..5d36a12ab4 100644 --- a/btcjson/walletsvrcmds_test.go +++ b/btcjson/walletsvrcmds_test.go @@ -75,6 +75,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) { diff --git a/rpcclient/wallet.go b/rpcclient/wallet.go index 3824de990c..c7064bfe5f 100644 --- a/rpcclient/wallet.go +++ b/rpcclient/wallet.go @@ -2608,12 +2608,141 @@ 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) // listaddressgroupings (NYI in btcwallet) // listreceivedbyaccount (NYI in btcwallet) - -// DUMP -// importwallet (NYI in btcwallet) -// dumpwallet (NYI in btcwallet) From 5e56ca05e15ac2a081990d4cfe16f0c54682e4c5 Mon Sep 17 00:00:00 2001 From: Anirudha Bose Date: Thu, 8 Oct 2020 23:28:09 +0200 Subject: [PATCH 098/419] btcjson: add new JSON-RPC errors and document them --- btcjson/jsonrpcerr.go | 133 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 115 insertions(+), 18 deletions(-) diff --git a/btcjson/jsonrpcerr.go b/btcjson/jsonrpcerr.go index ea62fb55a6..d67b58bbb6 100644 --- a/btcjson/jsonrpcerr.go +++ b/btcjson/jsonrpcerr.go @@ -30,36 +30,133 @@ 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 - ErrRPCInWarmup RPCErrorCode = -28 + + // 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 + + // 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 From 535f25593d47297f2c7f27fac7725c3b9b05727d Mon Sep 17 00:00:00 2001 From: Anirudha Bose Date: Fri, 9 Oct 2020 22:20:49 +0200 Subject: [PATCH 099/419] rpcclient: implement createwallet with functional options --- btcjson/walletsvrcmds.go | 23 ++++++++++ btcjson/walletsvrcmds_test.go | 55 +++++++++++++++++++++++ btcjson/walletsvrresults.go | 6 +++ rpcclient/example_test.go | 23 +++++++++- rpcclient/wallet.go | 85 +++++++++++++++++++++++++++++++++++ 5 files changed, 190 insertions(+), 2 deletions(-) diff --git a/btcjson/walletsvrcmds.go b/btcjson/walletsvrcmds.go index f63a59445b..2ff9ae1832 100644 --- a/btcjson/walletsvrcmds.go +++ b/btcjson/walletsvrcmds.go @@ -63,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 @@ -1065,6 +1087,7 @@ func init() { 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) diff --git a/btcjson/walletsvrcmds_test.go b/btcjson/walletsvrcmds_test.go index 5d36a12ab4..9ee6f0c749 100644 --- a/btcjson/walletsvrcmds_test.go +++ b/btcjson/walletsvrcmds_test.go @@ -62,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) { diff --git a/btcjson/walletsvrresults.go b/btcjson/walletsvrresults.go index e2ba201daf..78a6e647f5 100644 --- a/btcjson/walletsvrresults.go +++ b/btcjson/walletsvrresults.go @@ -11,6 +11,12 @@ import ( "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. // diff --git a/rpcclient/example_test.go b/rpcclient/example_test.go index 35159317b5..9ba9adadef 100644 --- a/rpcclient/example_test.go +++ b/rpcclient/example_test.go @@ -11,8 +11,8 @@ import ( var connCfg = &ConnConfig{ Host: "localhost:8332", - User: "yourrpcuser", - Pass: "yourrpcpass", + User: "user", + Pass: "pass", HTTPPostMode: true, DisableTLS: true, } @@ -135,3 +135,22 @@ func ExampleClient_GetTxOutSetInfo() { 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/wallet.go b/rpcclient/wallet.go index c7064bfe5f..4bff252304 100644 --- a/rpcclient/wallet.go +++ b/rpcclient/wallet.go @@ -939,6 +939,91 @@ 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 From f070f7f2bea6b3e04537e5fb1c53d360ceb19814 Mon Sep 17 00:00:00 2001 From: Armando Ochoa Date: Tue, 3 Nov 2020 23:13:20 +0700 Subject: [PATCH 100/419] rpcclient: fix documentation typos --- rpcclient/wallet.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/rpcclient/wallet.go b/rpcclient/wallet.go index 4bff252304..011e91062b 100644 --- a/rpcclient/wallet.go +++ b/rpcclient/wallet.go @@ -262,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() } @@ -374,7 +374,7 @@ func (c *Client) ListSinceBlockMinConfWatchOnlyAsync(blockHash *chainhash.Hash, // 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 paremeter. +// 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() } @@ -572,7 +572,7 @@ func (c *Client) SendToAddressCommentAsync(address btcutil.Address, // 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. @@ -678,7 +678,7 @@ func (c *Client) SendFromCommentAsync(fromAccount string, // 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. // From 925006483747d39fa6d6038a8270a979bccfdadd Mon Sep 17 00:00:00 2001 From: Oliver Gugger Date: Wed, 11 Nov 2020 14:16:03 +0100 Subject: [PATCH 101/419] integration: allow setting custom btcd exe path To allow using a custom btcd executable, we allow specifying a path to a file. If the path is empty, the harness will fall back to compiling one from scratch. --- integration/bip0009_test.go | 4 ++-- integration/csv_fork_test.go | 4 ++-- integration/rpcserver_test.go | 4 +++- integration/rpctest/node.go | 16 ++++++++++++---- integration/rpctest/rpc_harness.go | 9 ++++++--- integration/rpctest/rpc_harness_test.go | 12 ++++++------ 6 files changed, 31 insertions(+), 18 deletions(-) diff --git a/integration/bip0009_test.go b/integration/bip0009_test.go index df3721b1e6..b72065594c 100644 --- a/integration/bip0009_test.go +++ b/integration/bip0009_test.go @@ -129,7 +129,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) } @@ -320,7 +320,7 @@ func TestBIP0009Mining(t *testing.T) { t.Parallel() // Initialize the primary mining node with only the genesis block. - r, err := rpctest.New(&chaincfg.SimNetParams, nil, nil) + r, err := rpctest.New(&chaincfg.SimNetParams, nil, nil, "") if err != nil { t.Fatalf("unable to create primary harness: %v", err) } diff --git a/integration/csv_fork_test.go b/integration/csv_fork_test.go index 345217c864..b623487e59 100644 --- a/integration/csv_fork_test.go +++ b/integration/csv_fork_test.go @@ -109,7 +109,7 @@ func TestBIP0113Activation(t *testing.T) { t.Parallel() 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) } @@ -405,7 +405,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) } diff --git a/integration/rpcserver_test.go b/integration/rpcserver_test.go index df526442be..e5528453d4 100644 --- a/integration/rpcserver_test.go +++ b/integration/rpcserver_test.go @@ -109,7 +109,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/node.go b/integration/rpctest/node.go index 6aec2b1168..73dc15fca9 100644 --- a/integration/rpctest/node.go +++ b/integration/rpctest/node.go @@ -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..ee7b62fd31 100644 --- a/integration/rpctest/rpc_harness.go +++ b/integration/rpctest/rpc_harness.go @@ -94,11 +94,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,7 +145,9 @@ 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 } diff --git a/integration/rpctest/rpc_harness_test.go b/integration/rpctest/rpc_harness_test.go index 717f8f45af..25faf96901 100644 --- a/integration/rpctest/rpc_harness_test.go +++ b/integration/rpctest/rpc_harness_test.go @@ -105,7 +105,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 +153,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) } @@ -181,7 +181,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) } @@ -281,7 +281,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 +469,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 +566,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) From 93cc7f36cffbd66e3ad181dbc19aea5e05bc6b8b Mon Sep 17 00:00:00 2001 From: Oliver Gugger Date: Wed, 11 Nov 2020 14:24:14 +0100 Subject: [PATCH 102/419] integration: allow overwriting address generator --- integration/rpctest/rpc_harness.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/integration/rpctest/rpc_harness.go b/integration/rpctest/rpc_harness.go index ee7b62fd31..e8cd7e89dd 100644 --- a/integration/rpctest/rpc_harness.go +++ b/integration/rpctest/rpc_harness.go @@ -58,6 +58,13 @@ 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 ) // HarnessTestCase represents a test-case which utilizes an instance of the @@ -153,7 +160,7 @@ func New(activeNet *chaincfg.Params, handlers *rpcclient.NotificationHandlers, } // 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) From 65d2b7a18cf4fc89680f67ea2e541abe0c17489b Mon Sep 17 00:00:00 2001 From: Oliver Gugger Date: Wed, 11 Nov 2020 14:29:17 +0100 Subject: [PATCH 103/419] integration: allow specifying connection behavior --- integration/rpctest/rpc_harness.go | 42 +++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/integration/rpctest/rpc_harness.go b/integration/rpctest/rpc_harness.go index e8cd7e89dd..aaf9e90621 100644 --- a/integration/rpctest/rpc_harness.go +++ b/integration/rpctest/rpc_harness.go @@ -34,6 +34,14 @@ 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 ( @@ -58,7 +66,7 @@ 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 @@ -85,15 +93,22 @@ type Harness struct { // to. ActiveNet *chaincfg.Params + // 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 + Node *rpcclient.Client node *node handlers *rpcclient.NotificationHandlers wallet *memWallet - testNodeDir string - maxConnRetries int - nodeNum int + testNodeDir string + nodeNum int sync.Mutex } @@ -200,13 +215,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 @@ -322,9 +338,9 @@ func (h *Harness) connectRPCClient() error { var err error rpcConf := h.node.config.rpcConnConfig() - for i := 0; i < h.maxConnRetries; i++ { + 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) + time.Sleep(time.Duration(i) * h.ConnectionRetryTimeout) continue } break From 9fd26cf7953033a9e955b43e2dd7330c260f2a5e Mon Sep 17 00:00:00 2001 From: Liran Sharir Date: Tue, 10 Nov 2020 16:27:55 -0500 Subject: [PATCH 104/419] integration/rpctest: randomizes port in rpctest.New to reduce collisions --- integration/rpctest/rpc_harness.go | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/integration/rpctest/rpc_harness.go b/integration/rpctest/rpc_harness.go index 1c2612e47b..ab58d16a3e 100644 --- a/integration/rpctest/rpc_harness.go +++ b/integration/rpctest/rpc_harness.go @@ -7,6 +7,7 @@ package rpctest import ( "fmt" "io/ioutil" + "math/rand" "net" "os" "path/filepath" @@ -40,16 +41,6 @@ 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, @@ -477,13 +468,14 @@ func (h *Harness) GenerateAndSubmitBlockWithCustomCoinbaseOutputs( // 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. +// picked at random between {min/max}PeerPort and {min/max}RPCPort respectively. func generateListeningAddresses() (string, string) { localhost := "127.0.0.1" + rand.Seed(time.Now().UnixNano()) + portString := func(minPort, maxPort int) string { - port := minPort + numTestInstances + ((20 * processID) % - (maxPort - minPort)) + port := minPort + rand.Intn(maxPort-minPort) return strconv.Itoa(port) } From 9e8bb3eddba2fb9ce953f3658b386ae39f115d8e Mon Sep 17 00:00:00 2001 From: Oliver Gugger Date: Thu, 12 Nov 2020 10:08:54 +0100 Subject: [PATCH 105/419] btcjson+rpcserverhelp: restore bitcoind compatibility The PR #1594 introduced a change that made the order of parameters relevant, if one of them is nil. This makes it harder to be backward compatible with the same JSON message if an existing parameter in bitcoind was re-purposed to have a different meaning. --- btcjson/chainsvrcmds.go | 68 ++++++++++++++++++++++++++++++++---- btcjson/chainsvrcmds_test.go | 34 ++++++++++++++---- rpcserverhelp.go | 10 +++--- 3 files changed, 93 insertions(+), 19 deletions(-) diff --git a/btcjson/chainsvrcmds.go b/btcjson/chainsvrcmds.go index 0e683af003..aa1d4415da 100644 --- a/btcjson/chainsvrcmds.go +++ b/btcjson/chainsvrcmds.go @@ -11,6 +11,7 @@ import ( "encoding/hex" "encoding/json" "fmt" + "reflect" "github.com/btcsuite/btcd/wire" ) @@ -819,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 @@ -833,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, + }, } } @@ -844,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, + }, } } diff --git a/btcjson/chainsvrcmds_test.go b/btcjson/chainsvrcmds_test.go index d44a2ece6f..263d6d7e5d 100644 --- a/btcjson/chainsvrcmds_test.go +++ b/btcjson/chainsvrcmds_test.go @@ -1224,29 +1224,49 @@ func TestChainSvrCmds(t *testing.T) { { 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), + }, }, }, { diff --git a/rpcserverhelp.go b/rpcserverhelp.go index 75a63be0af..c1cb8cd0b7 100644 --- a/rpcserverhelp.go +++ b/rpcserverhelp.go @@ -561,11 +561,11 @@ 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.", From 0886f1e5c1fd28ad24aaca4dbccc5f4ab85e58ca Mon Sep 17 00:00:00 2001 From: Iskander Sharipov Date: Fri, 14 Sep 2018 00:35:08 +0300 Subject: [PATCH 106/419] simplify s[:] to s where s is a slice Found using https://go-critic.github.io/overview#unslice-ref --- blockchain/chainio.go | 4 ++-- database/ffldb/blockio.go | 2 +- wire/fixedIO_test.go | 2 +- wire/message.go | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/blockchain/chainio.go b/blockchain/chainio.go index c456c006f3..f40ba465e9 100644 --- a/blockchain/chainio.go +++ b/blockchain/chainio.go @@ -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 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/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 fe45a11fb1..eae1cf88de 100644 --- a/wire/message.go +++ b/wire/message.go @@ -401,7 +401,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) From 610bb55ae85ccbc73958f44df1fba0ba888559ce Mon Sep 17 00:00:00 2001 From: 10gic <2391796+10gic@users.noreply.github.com> Date: Fri, 20 Nov 2020 17:58:10 +0800 Subject: [PATCH 107/419] rpcclient: add ExtraHeaders in ConnConfig --- rpcclient/infrastructure.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/rpcclient/infrastructure.go b/rpcclient/infrastructure.go index 8609e7c5ad..4f15ed1430 100644 --- a/rpcclient/infrastructure.go +++ b/rpcclient/infrastructure.go @@ -850,6 +850,9 @@ func (c *Client) sendPost(jReq *jsonRequest) { } 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() @@ -1161,6 +1164,10 @@ 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 @@ -1280,6 +1287,9 @@ func dial(config *ConnConfig) (*websocket.Conn, error) { 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) From 29c9ff351c4b4716e823071b8fe42c617f4cd6e2 Mon Sep 17 00:00:00 2001 From: Yaacov Akiba Slama Date: Mon, 23 Nov 2020 15:17:10 +0200 Subject: [PATCH 108/419] Add support for receiving sendaddrv2 message from a peer --- wire/message.go | 4 ++++ wire/msgsendaddrv2.go | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 wire/msgsendaddrv2.go diff --git a/wire/message.go b/wire/message.go index eae1cf88de..6d3147a81d 100644 --- a/wire/message.go +++ b/wire/message.go @@ -57,6 +57,7 @@ const ( CmdCFilter = "cfilter" CmdCFHeaders = "cfheaders" CmdCFCheckpt = "cfcheckpt" + CmdSendAddrV2 = "sendaddrv2" ) // MessageEncoding represents the wire message encoding format to be used. @@ -99,6 +100,9 @@ func makeEmptyMessage(command string) (Message, error) { case CmdVerAck: msg = &MsgVerAck{} + case CmdSendAddrV2: + msg = &MsgSendAddrV2{} + case CmdGetAddr: msg = &MsgGetAddr{} 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{} +} From 12abc84cb22f26c87d468bd9ebbeb5d836f5a5d1 Mon Sep 17 00:00:00 2001 From: ebiiim Date: Wed, 13 Jan 2021 00:36:00 +0900 Subject: [PATCH 109/419] fixed broken link --- docs/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/index.md b/docs/index.md index 5dc0dfcf56..c286d47a51 100644 --- a/docs/index.md +++ b/docs/index.md @@ -34,7 +34,7 @@ which are both under active development. ## Documentation -Documentation is a work-in-progress. It is available at [btcd.readthedocs.io](https://btcd.readthedocs.io/en/docu/). +Documentation is a work-in-progress. It is available at [btcd.readthedocs.io](https://btcd.readthedocs.io). ## Contents From e747eb9284f643b3074bd3c69901a5ffb2e6152e Mon Sep 17 00:00:00 2001 From: Victor Lavaud Date: Thu, 14 Jan 2021 20:39:43 +0100 Subject: [PATCH 110/419] Add support for arm32v7 in Dockerfile --- Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Dockerfile b/Dockerfile index 7cb47e0138..3bbc25712b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -25,6 +25,7 @@ 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 c3ece697dab966a9b8854facead71755d226eead Mon Sep 17 00:00:00 2001 From: Vinayak Borkar Date: Mon, 4 Jan 2021 01:55:26 -0800 Subject: [PATCH 111/419] Fixes btcsuite/btcd#1653 --- btcjson/chainsvrresults.go | 1 + 1 file changed, 1 insertion(+) diff --git a/btcjson/chainsvrresults.go b/btcjson/chainsvrresults.go index e70900d87b..bfe4d6b532 100644 --- a/btcjson/chainsvrresults.go +++ b/btcjson/chainsvrresults.go @@ -108,6 +108,7 @@ type GetBlockVerboseTxResult struct { 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"` From 7bbd9b0284de8492ae738ad8d722772925fa5a86 Mon Sep 17 00:00:00 2001 From: Steven Kreuzer Date: Sun, 3 Jan 2021 02:24:39 +0000 Subject: [PATCH 112/419] btcjson: Update fields in GetBlockChainInfoResult Update the fields of GetBlockChainInfoResult to reflect the current state of the RPC returned by other full-node implementations. * InitialBlockDownload - Node is in Initial Block Download mode if True. * SizeOnDisk - The estimated size of the block and undo files on disk. --- btcjson/chainsvrresults.go | 2 ++ rpcserverhelp.go | 2 ++ 2 files changed, 4 insertions(+) diff --git a/btcjson/chainsvrresults.go b/btcjson/chainsvrresults.go index bfe4d6b532..9799494ca3 100644 --- a/btcjson/chainsvrresults.go +++ b/btcjson/chainsvrresults.go @@ -222,9 +222,11 @@ 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 } diff --git a/rpcserverhelp.go b/rpcserverhelp.go index c1cb8cd0b7..654fee0169 100644 --- a/rpcserverhelp.go +++ b/rpcserverhelp.go @@ -181,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", From 77fd96753c8571937663bc913ddc0c938fc4f05b Mon Sep 17 00:00:00 2001 From: Dan Cline Date: Fri, 14 Aug 2020 18:38:55 -0400 Subject: [PATCH 113/419] txscript: add benchmark for IsUnspendable - create benchmarks to measure allocations - add test for benchmark input - create a low alloc parseScriptTemplate - refactor parsing logic for a single opcode --- txscript/opcode.go | 73 +++++++++++++++++++++++++ txscript/script.go | 114 ++++++++++++++++------------------------ txscript/script_test.go | 35 ++++++++++++ 3 files changed, 153 insertions(+), 69 deletions(-) diff --git a/txscript/opcode.go b/txscript/opcode.go index 5ffb398277..a878a9667b 100644 --- a/txscript/opcode.go +++ b/txscript/opcode.go @@ -656,6 +656,79 @@ func (pop *parsedOpcode) isDisabled() bool { } } +// checkParseableInScript checks whether or not the current opcode is able to be +// parsed at a certain position in a script. +// This returns the position of the next opcode to be parsed in the script. +func (pop *parsedOpcode) checkParseableInScript(script []byte, scriptPos int) (int, error) { + // 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 pop.opcode.length == 1: + scriptPos++ + + // Data pushes of specific lengths -- OP_DATA_[1-75]. + case pop.opcode.length > 1: + if len(script[scriptPos:]) < pop.opcode.length { + str := fmt.Sprintf("opcode %s requires %d "+ + "bytes, but script only has %d remaining", + pop.opcode.name, pop.opcode.length, len(script[scriptPos:])) + return 0, scriptError(ErrMalformedPush, str) + } + + // Slice out the data. + pop.data = script[scriptPos+1 : scriptPos+pop.opcode.length] + scriptPos += pop.opcode.length + + // Data pushes with parsed lengths -- OP_PUSHDATAP{1,2,4}. + case pop.opcode.length < 0: + var l uint + off := scriptPos + 1 + + if len(script[off:]) < -pop.opcode.length { + str := fmt.Sprintf("opcode %s requires %d "+ + "bytes, but script only has %d remaining", + pop.opcode.name, -pop.opcode.length, len(script[off:])) + return 0, scriptError(ErrMalformedPush, str) + } + + // Next -length bytes are little endian length of data. + switch pop.opcode.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", + pop.opcode.length) + return 0, scriptError(ErrMalformedPush, str) + } + + // Move offset to beginning of the data. + off += -pop.opcode.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", + pop.opcode.name, int(l), len(script[off:])) + return 0, scriptError(ErrMalformedPush, str) + } + + pop.data = script[off : off+int(l)] + scriptPos += 1 - pop.opcode.length + int(l) + } + return scriptPos, nil +} + // 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). diff --git a/txscript/script.go b/txscript/script.go index aac3d4aaaa..92a50e3761 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -196,86 +196,58 @@ func IsPushOnlyScript(script []byte) bool { // 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)) + var err error for i := 0; i < len(script); { instr := script[i] op := &opcodes[instr] pop := parsedOpcode{opcode: op} + i, err = pop.checkParseableInScript(script, i) + if err != nil { + return retScript, err + } - // 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) - } + retScript = append(retScript, pop) + } - // 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) - } + return retScript, nil +} - // 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) - } +// checkScriptTemplateParseable is the same as parseScriptTemplate but does not +// return the list of opcodes up until the point of failure so that this can be +// used in functions which do not necessarily have a need for the failed list of +// opcodes, such as IsUnspendable. +// +// This function returns a pointer to a byte. This byte is nil if the parsing +// has an error, or if the script length is zero. If the script length is not +// zero and parsing succeeds, then the first opcode parsed will be returned. +// +// Not returning the full opcode list up until failure also has the benefit of +// reducing GC pressure, as the list would get immediately thrown away. +func checkScriptTemplateParseable(script []byte, opcodes *[256]opcode) (*byte, error) { + var err error - // 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) - } + // A script of length zero is an unspendable script but it is parseable. + var firstOpcode byte + var numParsedInstr uint = 0 - pop.data = script[off : off+int(l)] - i += 1 - op.length + int(l) + for i := 0; i < len(script); { + instr := script[i] + op := &opcodes[instr] + pop := parsedOpcode{opcode: op} + i, err = pop.checkParseableInScript(script, i) + if err != nil { + return nil, err } - retScript = append(retScript, pop) + // if this is a op_return then it is unspendable so we set the first + // parsed instruction in case it's an op_return + if numParsedInstr == 0 { + firstOpcode = pop.opcode.value + } + numParsedInstr++ } - return retScript, nil + return &firstOpcode, nil } // parseScript preparses the script in bytes into a list of parsedOpcodes while @@ -851,10 +823,14 @@ func getWitnessSigOps(pkScript []byte, witness wire.TxWitness) int { // guaranteed to fail at execution. This allows inputs to be pruned instantly // when entering the UTXO set. func IsUnspendable(pkScript []byte) bool { - pops, err := parseScript(pkScript) + // Not provably unspendable + if len(pkScript) == 0 { + return false + } + firstOpcode, err := checkScriptTemplateParseable(pkScript, &opcodeArray) if err != nil { return true } - return len(pops) > 0 && pops[0].opcode.value == OP_RETURN + return firstOpcode != nil && *firstOpcode == OP_RETURN } diff --git a/txscript/script_test.go b/txscript/script_test.go index 6a725e275c..34c8ef9740 100644 --- a/txscript/script_test.go +++ b/txscript/script_test.go @@ -4301,6 +4301,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 { @@ -4312,3 +4334,16 @@ func TestIsUnspendable(t *testing.T) { } } } + +// BenchmarkIsUnspendable adds a benchmark to compare the time and allocations +// necessary for the IsUnspendable function. +func BenchmarkIsUnspendable(b *testing.B) { + pkScriptToUse := []byte{0xa9, 0x14, 0x82, 0x1d, 0xba, 0x94, 0xbc, 0xfb, 0xa2, 0x57, 0x36, 0xa3, 0x9e, 0x5d, 0x14, 0x5d, 0x69, 0x75, 0xba, 0x8c, 0x0b, 0x42, 0x87} + var res bool = false + for i := 0; i < b.N; i++ { + res = IsUnspendable(pkScriptToUse) + } + if res { + b.Fatalf("Benchmark should never have res be %t\n", res) + } +} From 1dd693480cbfea6cffb1d1fa947fb1ccbb9d3acb Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Tue, 2 Feb 2021 12:42:28 -0800 Subject: [PATCH 114/419] txscript/hashcache_test: always add inputs during getTxn TestHashCacheAddContainsHashes flakes fairly regularly when rebasing PR #1684 with: txid wasn't inserted into cache but was found. With probabilty 1/10^2 there will be no inputs on the transaction. This reduces the entropy in the txid, and I belive is the primary cause of the flake. --- txscript/hashcache_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/txscript/hashcache_test.go b/txscript/hashcache_test.go index 389918e2f2..09b71fafa6 100644 --- a/txscript/hashcache_test.go +++ b/txscript/hashcache_test.go @@ -18,7 +18,7 @@ func genTestTx() (*wire.MsgTx, error) { tx := wire.NewMsgTx(2) tx.Version = rand.Int31() - numTxins := rand.Intn(11) + numTxins := 1 + rand.Intn(11) for i := 0; i < numTxins; i++ { randTxIn := wire.TxIn{ PreviousOutPoint: wire.OutPoint{ @@ -34,7 +34,7 @@ func genTestTx() (*wire.MsgTx, error) { tx.TxIn = append(tx.TxIn, &randTxIn) } - numTxouts := rand.Intn(11) + numTxouts := 1 + rand.Intn(11) for i := 0; i < numTxouts; i++ { randTxOut := wire.TxOut{ Value: rand.Int63(), From 5300a19d06d29171637fcb067dd5d3af6895d900 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Tue, 2 Feb 2021 13:24:27 -0800 Subject: [PATCH 115/419] txscript/hashcache_test: call rand.Seed once in init This resolves the more fundamental flake in the unit tests noted in the prior commit. Because multiple unit tests call rand.Seed in parallel, it's possible they can be executed with the same unix timestamp (in seconds). If the second call happens between generating the hash cache and checking that the cache doesn't contain a random txn, the random transaction is in fact a duplicate of one generated earlier since the RNG state was reset. To remedy, we initialize rand.Seed once in the init function. --- txscript/hashcache_test.go | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/txscript/hashcache_test.go b/txscript/hashcache_test.go index 09b71fafa6..cee59b9956 100644 --- a/txscript/hashcache_test.go +++ b/txscript/hashcache_test.go @@ -13,6 +13,10 @@ 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) { tx := wire.NewMsgTx(2) @@ -56,8 +60,6 @@ func genTestTx() (*wire.MsgTx, error) { func TestHashCacheAddContainsHashes(t *testing.T) { t.Parallel() - rand.Seed(time.Now().Unix()) - cache := NewHashCache(10) var err error @@ -109,8 +111,6 @@ 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 @@ -144,8 +144,6 @@ func TestHashCacheAddGet(t *testing.T) { func TestHashCachePurge(t *testing.T) { t.Parallel() - rand.Seed(time.Now().Unix()) - cache := NewHashCache(10) var err error From 31b66488b497fb3da2038bad8bb181a66e5454e2 Mon Sep 17 00:00:00 2001 From: Anirudha Bose Date: Wed, 3 Feb 2021 21:01:10 +0100 Subject: [PATCH 116/419] btcec: validate R and S signature components in RecoverCompact --- btcec/signature.go | 21 ++++++++++++++++++++- btcec/signature_test.go | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/btcec/signature.go b/btcec/signature.go index deedd172d8..cdd7cedfb8 100644 --- a/btcec/signature.go +++ b/btcec/signature.go @@ -284,6 +284,25 @@ func hashToInt(hash []byte, c elliptic.Curve) *big.Int { // format and thus we match bitcoind's behaviour here. func recoverKeyFromSignature(curve *KoblitzCurve, sig *Signature, msg []byte, iter int, doChecks bool) (*PublicKey, error) { + // Parse and validate the R and S signature components. + // + // Fail if r and s are not in [1, N-1]. + if sig.R.Cmp(curve.Params().N) != -1 { + return nil, errors.New("signature R is >= curve order") + } + + if sig.R.Sign() == 0 { + return nil, errors.New("signature R is 0") + } + + if sig.S.Cmp(curve.Params().N) != -1 { + return nil, errors.New("signature S is >= curve order") + } + + if sig.S.Sign() == 0 { + return nil, errors.New("signature S is 0") + } + // 1.1 x = (n * i) + r Rx := new(big.Int).Mul(curve.Params().N, new(big.Int).SetInt64(int64(iter/2))) @@ -393,7 +412,7 @@ func SignCompact(curve *KoblitzCurve, key *PrivateKey, // 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 +// 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(curve *KoblitzCurve, signature, hash []byte) (*PublicKey, bool, error) { diff --git a/btcec/signature_test.go b/btcec/signature_test.go index d238741455..ba02a03f76 100644 --- a/btcec/signature_test.go +++ b/btcec/signature_test.go @@ -555,6 +555,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("signature R is 0"), + }, + { + // 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("signature R is >= curve order"), + }, + { + // 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) { From 2a1aa5129e2dc8d0f7441f723dc55ac12795d867 Mon Sep 17 00:00:00 2001 From: Jake Sylvestre Date: Sat, 5 Dec 2020 22:39:40 -0500 Subject: [PATCH 117/419] Add Batch JSON-RPC support (rpc client & server) --- btcjson/btcdextcmds_test.go | 4 +- btcjson/btcwalletextcmds_test.go | 4 +- btcjson/chainsvrcmds_test.go | 4 +- btcjson/chainsvrwscmds_test.go | 4 +- btcjson/chainsvrwsntfns_test.go | 4 +- btcjson/cmdparse.go | 4 +- btcjson/cmdparse_test.go | 12 +- btcjson/example_test.go | 8 +- btcjson/jsonrpc.go | 150 ++++- btcjson/jsonrpc_test.go | 12 +- btcjson/walletsvrcmds_test.go | 4 +- btcjson/walletsvrwscmds_test.go | 4 +- btcjson/walletsvrwsntfns_test.go | 4 +- cmd/btcctl/btcctl.go | 2 +- integration/bip0009_test.go | 14 +- integration/csv_fork_test.go | 36 +- integration/rpcserver_test.go | 60 +- integration/rpctest/rpc_harness.go | 57 +- integration/rpctest/rpc_harness_test.go | 18 +- integration/rpctest/utils.go | 14 +- .../examples/bitcoincorehttpbulk/README.md | 31 + .../examples/bitcoincorehttpbulk/main.go | 46 ++ rpcclient/infrastructure.go | 166 +++++- rpcclient/rawrequest.go | 2 +- rpcserver.go | 306 +++++++--- rpcwebsocket.go | 554 +++++++++++++----- 26 files changed, 1180 insertions(+), 344 deletions(-) create mode 100644 rpcclient/examples/bitcoincorehttpbulk/README.md create mode 100644 rpcclient/examples/bitcoincorehttpbulk/main.go diff --git a/btcjson/btcdextcmds_test.go b/btcjson/btcdextcmds_test.go index 143ec5224f..aaa44144e4 100644 --- a/btcjson/btcdextcmds_test.go +++ b/btcjson/btcdextcmds_test.go @@ -211,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) @@ -235,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_test.go b/btcjson/chainsvrcmds_test.go index 263d6d7e5d..7d3a68dc41 100644 --- a/btcjson/chainsvrcmds_test.go +++ b/btcjson/chainsvrcmds_test.go @@ -1466,7 +1466,7 @@ func TestChainSvrCmds(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) @@ -1491,7 +1491,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/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_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/cmdparse.go b/btcjson/cmdparse.go index 117f72f187..4fb8dd6260 100644 --- a/btcjson/cmdparse.go +++ b/btcjson/cmdparse.go @@ -36,7 +36,7 @@ func makeParams(rt reflect.Type, rv reflect.Value) []interface{} { // 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() @@ -60,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 } diff --git a/btcjson/cmdparse_test.go b/btcjson/cmdparse_test.go index 71547271df..f2585edf5c 100644 --- a/btcjson/cmdparse_test.go +++ b/btcjson/cmdparse_test.go @@ -460,7 +460,7 @@ func TestMarshalCmd(t *testing.T) { t.Logf("Running %d tests", len(tests)) for i, test := range tests { - bytes, err := btcjson.MarshalCmd(test.id, test.cmd) + 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) @@ -507,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) @@ -535,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, @@ -545,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, @@ -555,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, @@ -565,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 73dd804073..74478e7482 100644 --- a/btcjson/example_test.go +++ b/btcjson/example_test.go @@ -27,7 +27,7 @@ func ExampleMarshalCmd() { // 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 @@ -95,7 +95,7 @@ func ExampleUnmarshalCmd() { 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 @@ -107,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 @@ -116,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/jsonrpc.go b/btcjson/jsonrpc.go index 0ead85e5ee..553a7bc37f 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. // @@ -67,21 +94,74 @@ 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.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 +178,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 +214,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/walletsvrcmds_test.go b/btcjson/walletsvrcmds_test.go index 9ee6f0c749..9c68d260f6 100644 --- a/btcjson/walletsvrcmds_test.go +++ b/btcjson/walletsvrcmds_test.go @@ -1800,7 +1800,7 @@ func TestWalletSvrCmds(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) @@ -1824,7 +1824,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/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/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/integration/bip0009_test.go b/integration/bip0009_test.go index b72065594c..9bdec34fbb 100644 --- a/integration/bip0009_test.go +++ b/integration/bip0009_test.go @@ -33,7 +33,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 +53,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 +96,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) } @@ -339,7 +339,7 @@ func TestBIP0009Mining(t *testing.T) { // in the defined threshold state. deployment := &r.ActiveNet.Deployments[chaincfg.DeploymentTestDummy] testDummyBitNum := deployment.BitNumber - hashes, err := r.Node.Generate(1) + hashes, err := r.Client.Generate(1) if err != nil { t.Fatalf("unable to generate blocks: %v", err) } @@ -358,7 +358,7 @@ func TestBIP0009Mining(t *testing.T) { // dummy deployment as started. confirmationWindow := r.ActiveNet.MinerConfirmationWindow numNeeded := confirmationWindow - 1 - hashes, err = r.Node.Generate(numNeeded) + hashes, err = r.Client.Generate(numNeeded) if err != nil { t.Fatalf("failed to generated %d blocks: %v", numNeeded, err) } @@ -373,7 +373,7 @@ func TestBIP0009Mining(t *testing.T) { // The last generated block should still have the test bit set in the // version since the btcd mining code will have recognized the test // dummy deployment as locked in. - hashes, err = r.Node.Generate(confirmationWindow) + hashes, err = r.Client.Generate(confirmationWindow) if err != nil { t.Fatalf("failed to generated %d blocks: %v", confirmationWindow, err) @@ -392,7 +392,7 @@ func TestBIP0009Mining(t *testing.T) { // version since the btcd mining code will have recognized the test // dummy deployment as activated and thus there is no longer any need // to set the bit. - hashes, err = r.Node.Generate(confirmationWindow) + hashes, err = r.Client.Generate(confirmationWindow) if err != nil { t.Fatalf("failed to generated %d blocks: %v", confirmationWindow, err) diff --git a/integration/csv_fork_test.go b/integration/csv_fork_test.go index b623487e59..3146634966 100644 --- a/integration/csv_fork_test.go +++ b/integration/csv_fork_test.go @@ -57,14 +57,14 @@ func makeTestOutput(r *rpctest.Harness, t *testing.T, if err != nil { return nil, nil, nil, err } - txHash, err := r.Node.SendRawTransaction(fundTx, true) + txHash, err := r.Client.SendRawTransaction(fundTx, true) if err != nil { return nil, nil, nil, err } // The transaction created above should be included within the next // generated block. - blockHash, err := r.Node.Generate(1) + blockHash, err := r.Client.Generate(1) if err != nil { return nil, nil, nil, err } @@ -151,7 +151,7 @@ func TestBIP0113Activation(t *testing.T) { // We set the lock-time of the transaction to just one minute after the // current MTP of the chain. - chainInfo, err := r.Node.GetBlockChainInfo() + chainInfo, err := r.Client.GetBlockChainInfo() if err != nil { t.Fatalf("unable to query for chain info: %v", err) } @@ -167,7 +167,7 @@ func TestBIP0113Activation(t *testing.T) { // This transaction should be rejected from the mempool as using MTP // for transactions finality is now a policy rule. Additionally, the // exact error should be the rejection of a non-final transaction. - _, err = r.Node.SendRawTransaction(tx, true) + _, err = r.Client.SendRawTransaction(tx, true) if err == nil { t.Fatalf("transaction accepted, but should be non-final") } else if !strings.Contains(err.Error(), "not finalized") { @@ -201,7 +201,7 @@ func TestBIP0113Activation(t *testing.T) { // height 299. The getblockchaininfo call checks the state for the // block AFTER the current height. numBlocks := (r.ActiveNet.MinerConfirmationWindow * 2) - 4 - if _, err := r.Node.Generate(numBlocks); err != nil { + if _, err := r.Client.Generate(numBlocks); err != nil { t.Fatalf("unable to generate blocks: %v", err) } @@ -220,7 +220,7 @@ func TestBIP0113Activation(t *testing.T) { // rejected. timeLockDeltas := []int64{-1, 0, 1} for _, timeLockDelta := range timeLockDeltas { - chainInfo, err = r.Node.GetBlockChainInfo() + chainInfo, err = r.Client.GetBlockChainInfo() if err != nil { t.Fatalf("unable to query for chain info: %v", err) } @@ -257,7 +257,7 @@ func TestBIP0113Activation(t *testing.T) { // accepted as it has a lock-time of one // second _before_ the current MTP. - _, err = r.Node.SendRawTransaction(tx, true) + _, err = r.Client.SendRawTransaction(tx, true) if err == nil && timeLockDelta >= 0 { t.Fatal("transaction was accepted into the mempool " + "but should be rejected!") @@ -366,7 +366,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) } @@ -449,10 +449,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 +469,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 +496,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 +530,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 +542,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 +652,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 +686,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 e5528453d4..5875b35353 100644 --- a/integration/rpcserver_test.go +++ b/integration/rpcserver_test.go @@ -15,22 +15,24 @@ import ( "testing" "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 +52,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 +74,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 +96,50 @@ 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) + } + } + +} + var rpcTestCases = []rpctest.HarnessTestCase{ testGetBestBlock, testGetBlockCount, testGetBlockHash, + testBulkClient, } var primaryHarness *rpctest.Harness diff --git a/integration/rpctest/rpc_harness.go b/integration/rpctest/rpc_harness.go index ff8c0216b1..679ae4e478 100644 --- a/integration/rpctest/rpc_harness.go +++ b/integration/rpctest/rpc_harness.go @@ -92,9 +92,10 @@ type Harness struct { // attempts. ConnectionRetryTimeout time.Duration - Node *rpcclient.Client - node *node - handlers *rpcclient.NotificationHandlers + Client *rpcclient.Client + BatchClient *rpcclient.Client + node *node + handlers *rpcclient.NotificationHandlers wallet *memWallet @@ -245,13 +246,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 } @@ -260,7 +261,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 } @@ -268,7 +269,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 } @@ -289,8 +290,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 { @@ -325,24 +330,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() + batchConf := h.node.config.rpcConnConfig() + batchConf.HTTPPostMode = true for i := 0; i < h.MaxConnRetries; i++ { - if client, err = rpcclient.New(&rpcConf, h.handlers); err != nil { - time.Sleep(time.Duration(i) * h.ConnectionRetryTimeout) - continue + 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 } @@ -464,11 +483,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 } @@ -483,7 +502,7 @@ 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 } diff --git a/integration/rpctest/rpc_harness_test.go b/integration/rpctest/rpc_harness_test.go index 25faf96901..df753e3126 100644 --- a/integration/rpctest/rpc_harness_test.go +++ b/integration/rpctest/rpc_harness_test.go @@ -43,7 +43,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 +67,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 +76,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 +84,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") } @@ -170,7 +170,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) } @@ -210,7 +210,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 +219,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 +262,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) } @@ -612,7 +612,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/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/infrastructure.go b/rpcclient/infrastructure.go index 4f15ed1430..798f027911 100644 --- a/rpcclient/infrastructure.go +++ b/rpcclient/infrastructure.go @@ -163,6 +163,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 @@ -220,8 +224,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 } @@ -289,6 +298,41 @@ func (c *Client) trackRegisteredNtfns(cmd interface{}) { } } +// FutureGetBulkResult waits for the responses promised by the future +// and returns them in a channel +type FutureGetBulkResult chan *response + +// 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 + } + + for _, results := range arr { + m[results.Id] = results + } + + 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 @@ -741,7 +785,12 @@ func (c *Client) handleSendPostMessage(details *sendPostDetails) { // 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 @@ -751,8 +800,14 @@ func (c *Client) handleSendPostMessage(details *sendPostDetails) { jReq.responseChan <- &response{err: err} return } - - res, err := resp.result() + 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} } @@ -875,7 +930,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.sendPost(jReq) + } return } @@ -905,6 +966,10 @@ func (c *Client) sendRequest(jReq *jsonRequest) { // future. It handles both websocket and HTTP POST mode depending on the // configuration of the client. 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 { @@ -913,7 +978,7 @@ 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) } @@ -927,6 +992,7 @@ func (c *Client) sendCmd(cmd interface{}) chan *response { marshalledJSON: marshalledJSON, responseChan: responseChan, } + c.sendRequest(jReq) return responseChan @@ -1357,6 +1423,8 @@ 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), @@ -1397,6 +1465,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. @@ -1534,3 +1620,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.sendPost(&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/rawrequest.go b/rpcclient/rawrequest.go index dd16fd049e..baead8bb90 100644 --- a/rpcclient/rawrequest.go +++ b/rpcclient/rawrequest.go @@ -44,7 +44,7 @@ func (c *Client) RawRequestAsync(method string, params []json.RawMessage) Future // than custom commands. id := c.NextID() rawRequest := &btcjson.Request{ - Jsonrpc: "1.0", + Jsonrpc: btcjson.RpcVersion1, ID: id, Method: method, Params: params, diff --git a/rpcserver.go b/rpcserver.go index f159f2397f..8e351bd27c 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -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 @@ -3939,10 +3942,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 @@ -3975,9 +3979,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 { @@ -4004,7 +4010,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 { @@ -4014,7 +4020,67 @@ 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 { + 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. @@ -4059,80 +4125,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) + } } - // The parse was at least successful enough to have an ID so - // set it for the response. - responseID = request.ID + 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) + } - // 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 resp != nil { + results = append(results, resp) + } + } + + // 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) } - }() - // 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", + 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) + } + } + + // 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. diff --git a/rpcwebsocket.go b/rpcwebsocket.go index 32e466d115..356a897455 100644 --- a/rpcwebsocket.go +++ b/rpcwebsocket.go @@ -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 { From dff2198fc543e7ae86f25bbf63193024fde7f5b1 Mon Sep 17 00:00:00 2001 From: Appelberg-s Date: Mon, 11 Jan 2021 19:39:22 +0100 Subject: [PATCH 118/419] Fix error message returned by EstimateFee When you provide an argument to EstimateFee(numblocks uint32) that exceeds the estimateFeeDepth (which is set to 25), you get an error message that says "can only estimate fees for up to 100 blocks from now". The variable used in the if condition and the variable used for creating the error message should be the same. --- mempool/estimatefee.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mempool/estimatefee.go b/mempool/estimatefee.go index 3546f6b356..55fe4810df 100644 --- a/mempool/estimatefee.go +++ b/mempool/estimatefee.go @@ -563,7 +563,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. From d08785547a8744481774e72782d26cb34f84d532 Mon Sep 17 00:00:00 2001 From: Jake Sylvestre Date: Thu, 4 Mar 2021 17:12:45 -0500 Subject: [PATCH 119/419] docs: update shields --- README.md | 2 +- blockchain/README.md | 10 +++++----- blockchain/fullblocktests/README.md | 4 ++-- blockchain/indexers/README.md | 4 ++-- btcec/README.md | 12 ++++++------ btcjson/README.md | 12 ++++++------ chaincfg/README.md | 4 ++-- chaincfg/chainhash/README.md | 4 ++-- connmgr/README.md | 4 ++-- database/README.md | 8 ++++---- database/ffldb/README.md | 4 ++-- database/internal/treap/README.md | 4 ++-- docs/code_contribution_guidelines.md | 2 +- docs/configuration.md | 2 +- docs/index.md | 4 ++-- integration/README.md | 2 +- integration/rpctest/README.md | 4 ++-- mempool/README.md | 4 ++-- mining/README.md | 4 ++-- mining/cpuminer/README.md | 4 ++-- netsync/README.md | 4 ++-- peer/README.md | 6 +++--- peer/doc.go | 2 +- rpcclient/README.md | 6 +++--- txscript/README.md | 10 +++++----- wire/README.md | 4 ++-- 26 files changed, 65 insertions(+), 65 deletions(-) diff --git a/README.md b/README.md index 3e91cda3d4..62fa223aae 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ 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://godoc.org/github.com/btcsuite/btcd) +[![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). 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/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/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/btcec/README.md b/btcec/README.md index 130bd200a0..a6dd2cf285 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?status.png)](https://pkg.go.dev/github.com/btcsuite/btcd/btcec) 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 @@ -25,19 +25,19 @@ $ go get -u github.com/btcsuite/btcd/btcec ## 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#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#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) +* [Encryption](https://pkg.go.dev/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) +* [Decryption](https://pkg.go.dev/github.com/btcsuite/btcd/btcec#example-package--DecryptMessage) Demonstrates decrypting a message using a private key that is first parsed from raw bytes. 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/chaincfg/README.md b/chaincfg/README.md index 880446fdc7..72fac2e7dc 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 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/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/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/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/internal/treap/README.md b/database/internal/treap/README.md index f5314b4a05..14c3159a50 100644 --- a/database/internal/treap/README.md +++ b/database/internal/treap/README.md @@ -1,9 +1,9 @@ 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. diff --git a/docs/code_contribution_guidelines.md b/docs/code_contribution_guidelines.md index a135ad937a..c0a7eecc5f 100644 --- a/docs/code_contribution_guidelines.md +++ b/docs/code_contribution_guidelines.md @@ -111,7 +111,7 @@ A quick summary of test practices follows: - 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 diff --git a/docs/configuration.md b/docs/configuration.md index 132c07a1df..c6f95b274c 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -1,6 +1,6 @@ # Configuration -btcd has a number of [configuration](http://godoc.org/github.com/btcsuite/btcd) +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 diff --git a/docs/index.md b/docs/index.md index c286d47a51..9d980626d4 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,8 +1,8 @@ # btcd -[![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) +[![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). 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/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/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/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/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/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/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/txscript/README.md b/txscript/README.md index 5793173451..004c586d61 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,15 +26,15 @@ $ 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. ## GPG Verification Key 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 From 556620fea68b464f53b25cb1dc2e041e8040653b Mon Sep 17 00:00:00 2001 From: Gustavo Chain Date: Tue, 9 Mar 2021 10:37:31 +0100 Subject: [PATCH 120/419] rpcserver: Fix Error message returned by processRequest When processRequest can't find a rpc command, standardCmdResult returns a `btcjson.ErrRPCMethodNotFound` but it gets ignored and a `btcjson.ErrRPCInvalidRequest` is returned instead. This makes processRequest return the right error message. --- rpcserver.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/rpcserver.go b/rpcserver.go index 8e351bd27c..1cd3d69cf4 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -4066,9 +4066,13 @@ func (s *rpcServer) processRequest(request *btcjson.Request, isAdmin bool, close result, err = s.standardCmdResult(parsedCmd, closeChan) if err != nil { - jsonErr = &btcjson.RPCError{ - Code: btcjson.ErrRPCInvalidRequest.Code, - Message: "Invalid request: malformed", + if rpcErr, ok := err.(*btcjson.RPCError); ok { + jsonErr = rpcErr + } else { + jsonErr = &btcjson.RPCError{ + Code: btcjson.ErrRPCInvalidRequest.Code, + Message: "Invalid request: malformed", + } } } } From fdb479f1213f892fc52a17dde311d5b441a4cbf8 Mon Sep 17 00:00:00 2001 From: Wilmer Paulino Date: Thu, 11 Mar 2021 18:24:13 -0800 Subject: [PATCH 121/419] peer: allow external testing of peer.Peer The previous use of allowSelfConns prevented this, as users aren't able to invoke peer.TstAllowSelfConns themselves due to being part of a test file, which aren't exported at the library level, leading to a "disconnecting peer connected to self" error upon establishing a mock connection between two peers. By including the option at the config level instead (false by default, prevents connections to self) we enable users of the peer library to properly test the behavior of the peer.Peer struct externally. --- peer/example_test.go | 2 ++ peer/export_test.go | 18 ------------------ peer/peer.go | 12 ++++++------ peer/peer_test.go | 12 +++++++----- 4 files changed, 15 insertions(+), 29 deletions(-) delete mode 100644 peer/export_test.go 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/peer.go b/peer/peer.go index 5b083a7467..92ac3d27e8 100644 --- a/peer/peer.go +++ b/peer/peer.go @@ -84,11 +84,6 @@ var ( // sentNonces houses the unique nonces that are generated when pushing // version messages that are used to detect self connections. sentNonces = lru.NewCache(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 ) // MessageListeners defines callback function pointers to invoke with message @@ -276,6 +271,11 @@ 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 } // minUint32 is a helper function to return the minimum of two uint32s. @@ -1896,7 +1896,7 @@ func (p *Peer) readRemoteVersionMsg() error { } // Detect self connections. - if !allowSelfConns && sentNonces.Contains(msg.Nonce) { + if !p.cfg.AllowSelfConns && sentNonces.Contains(msg.Nonce) { return errors.New("disconnecting peer connected to self") } diff --git a/peer/peer_test.go b/peer/peer_test.go index 6cc3113d1e..dd7f36aa3a 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{ @@ -452,6 +454,7 @@ 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"}, @@ -623,6 +626,7 @@ func TestOutboundPeer(t *testing.T) { ChainParams: &chaincfg.MainNetParams, Services: 0, TrickleInterval: time.Second * 10, + AllowSelfConns: true, } r, w := io.Pipe() @@ -764,6 +768,7 @@ func TestUnsupportedVersionPeer(t *testing.T) { ChainParams: &chaincfg.MainNetParams, Services: 0, TrickleInterval: time.Second * 10, + AllowSelfConns: true, } localNA := wire.NewNetAddressIPPort( @@ -874,6 +879,7 @@ 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"}, @@ -935,6 +941,7 @@ func TestUpdateLastBlockHeight(t *testing.T) { UserAgentVersion: "1.0", ChainParams: &chaincfg.MainNetParams, Services: 0, + AllowSelfConns: true, } remotePeerCfg := peerCfg remotePeerCfg.NewestBlock = func() (*chainhash.Hash, int32, error) { @@ -982,8 +989,3 @@ func TestUpdateLastBlockHeight(t *testing.T) { remotePeerHeight+1) } } - -func init() { - // Allow self connection when running the tests. - peer.TstAllowSelfConns() -} From f86ae60936d7134fad9bf0ab1b3a1c261abe79b7 Mon Sep 17 00:00:00 2001 From: Gustavo Chain Date: Tue, 9 Mar 2021 18:22:04 +0100 Subject: [PATCH 122/419] addrmgr: Use RLock/RUnlock when possible --- addrmgr/addrmanager.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/addrmgr/addrmanager.go b/addrmgr/addrmanager.go index a8a8fb3338..fa8f27bcae 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 @@ -645,8 +645,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,8 +654,8 @@ 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 } @@ -685,8 +685,8 @@ 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() + a.mtx.RLock() + defer a.mtx.RUnlock() addrIndexLen := len(a.addrIndex) if addrIndexLen == 0 { From f133593b932d1eee4d21623d6044760958e69953 Mon Sep 17 00:00:00 2001 From: Wilmer Paulino Date: Mon, 25 Jan 2021 14:13:18 -0800 Subject: [PATCH 123/419] build: update btcutil dependency --- go.mod | 2 +- go.sum | 5 +++-- integration/rpctest/memwallet.go | 6 +++--- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index c53b23d222..049b97fe6c 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,7 @@ module github.com/btcsuite/btcd require ( github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f - github.com/btcsuite/btcutil v1.0.2 + github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd github.com/btcsuite/goleveldb v1.0.0 github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792 diff --git a/go.sum b/go.sum index 392d70f1b7..e259d0ec77 100644 --- a/go.sum +++ b/go.sum @@ -5,8 +5,8 @@ github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f h1:bAs4lUbRJpnnkd9 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/btcutil v1.0.2 h1:9iZ1Terx9fMIOtq1VrwdqfsATL9MC2l8ZrUY6YZ2uts= -github.com/btcsuite/btcutil v1.0.2/go.mod h1:j9HUFwoQRsZL3V4n+qG+CUnEGHOarIxfC3Le2Yhbcts= +github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= +github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= 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= @@ -22,6 +22,7 @@ github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtE 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/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +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/lru v1.0.0 h1:Kbsb1SFDsIlaupWPwsPp+dkxiBY1frcS07PCPgotKz8= diff --git a/integration/rpctest/memwallet.go b/integration/rpctest/memwallet.go index f16130750a..59b0ef4c08 100644 --- a/integration/rpctest/memwallet.go +++ b/integration/rpctest/memwallet.go @@ -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 } @@ -337,7 +337,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,7 +509,7 @@ 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 } From 540786fda6c6d9328eacf005fa84aef5ed1ec725 Mon Sep 17 00:00:00 2001 From: Jake Sylvestre Date: Tue, 13 Apr 2021 09:02:41 -0400 Subject: [PATCH 124/419] rpcclient: fix documentation typo --- rpcclient/net.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpcclient/net.go b/rpcclient/net.go index 8f781e4ed8..8c191ff66f 100644 --- a/rpcclient/net.go +++ b/rpcclient/net.go @@ -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 { From 2d7825cf709fc6ac15921cecfd4d62ec78ccbba2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A8le=20Oul=C3=A8s?= Date: Sun, 21 Mar 2021 19:54:48 +0000 Subject: [PATCH 125/419] btcjson: Updated TxRawResult.Version from int32 to uint32 --- btcjson/chainsvrresults.go | 2 +- rpcserver.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/btcjson/chainsvrresults.go b/btcjson/chainsvrresults.go index 9799494ca3..59f18c74c8 100644 --- a/btcjson/chainsvrresults.go +++ b/btcjson/chainsvrresults.go @@ -712,7 +712,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"` diff --git a/rpcserver.go b/rpcserver.go index 1cd3d69cf4..2c9a518543 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -764,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, } From 73ecb5997bcf3d69482bd3780c02472f0bde699a Mon Sep 17 00:00:00 2001 From: Oliver Gugger Date: Thu, 24 Dec 2020 16:51:59 +0100 Subject: [PATCH 126/419] wire+chaincfg: add signet params This commit adds all necessary chain parameters for connecting to the public signet network. Reference: https://github.com/bitcoin/bitcoin/pull/18267 --- chaincfg/genesis.go | 28 +++++++++ chaincfg/genesis_test.go | 68 ++++++++++++++++++++ chaincfg/params.go | 132 +++++++++++++++++++++++++++++++++++++++ chaincfg/params_test.go | 49 +++++++++++++++ 4 files changed, 277 insertions(+) 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 7e4327984c..cb1568632c 100644 --- a/chaincfg/params.go +++ b/chaincfg/params.go @@ -5,6 +5,8 @@ package chaincfg import ( + "encoding/binary" + "encoding/hex" "errors" "math" "math/big" @@ -38,6 +40,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 @@ -96,6 +122,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. @@ -578,6 +609,107 @@ 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, + StartTime: 1199145601, // January 1, 2008 UTC + ExpireTime: 1230767999, // December 31, 2008 UTC + }, + DeploymentCSV: { + BitNumber: 0, + StartTime: 0, // Always available for vote + ExpireTime: math.MaxInt64, // Never expires + }, + DeploymentSegwit: { + BitNumber: 1, + StartTime: 0, // Always available for vote + ExpireTime: math.MaxInt64, // Never expires. + }, + DeploymentTaproot: { + BitNumber: 2, + StartTime: 0, // Always available for vote + ExpireTime: math.MaxInt64, // 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 diff --git a/chaincfg/params_test.go b/chaincfg/params_test.go index d9e1516812..4166ce0a23 100644 --- a/chaincfg/params_test.go +++ b/chaincfg/params_test.go @@ -6,6 +6,8 @@ package chaincfg import ( "bytes" + "encoding/hex" + "math/big" "testing" ) @@ -84,3 +86,50 @@ func TestInvalidHDKeyID(t *testing.T) { 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 +} From 3eac153437340fc90ec8a17d3e0fc6c64bc979b3 Mon Sep 17 00:00:00 2001 From: Oliver Gugger Date: Sun, 14 Feb 2021 15:49:11 +0100 Subject: [PATCH 127/419] config+params: add signet config option This commit adds the --signet command line flag (or signet config option) for starting btcd in signet mode. --- config.go | 52 ++++++++++++++++++++++++++++++++++++++++++++++++---- doc.go | 2 +- params.go | 7 +++++++ 3 files changed, 56 insertions(+), 5 deletions(-) diff --git a/config.go b/config.go index c44f3a837f..7124fe9290 100644 --- a/config.go +++ b/config.go @@ -8,6 +8,7 @@ import ( "bufio" "crypto/rand" "encoding/base64" + "encoding/hex" "errors" "fmt" "io" @@ -159,6 +160,9 @@ type config struct { 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"` + 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"` @@ -475,8 +479,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) @@ -550,9 +554,49 @@ 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) diff --git a/doc.go b/doc.go index 8b9b99773a..70d0d9e45c 100644 --- a/doc.go +++ b/doc.go @@ -72,7 +72,7 @@ Application Options: minute (default: 15) --listen= Add an interface/port to listen for connections (default all interfaces port: 8333, testnet: - 18333) + 18333, signet: 38333) --logdir= Directory to log output --maxorphantx= Max number of orphan transactions to keep in memory (default: 100) 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 From 8a62cf0ef5e3deb27f042543e2748b0b2b120da0 Mon Sep 17 00:00:00 2001 From: Oliver Gugger Date: Wed, 17 Feb 2021 11:07:12 +0100 Subject: [PATCH 128/419] rpcserver: add taproot deployment to getblockchaininfo --- rpcserver.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/rpcserver.go b/rpcserver.go index 2c9a518543..d184072942 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -1256,6 +1256,9 @@ func handleGetBlockChainInfo(s *rpcServer, cmd interface{}, closeChan <-chan str case chaincfg.DeploymentSegwit: forkName = "segwit" + case chaincfg.DeploymentTaproot: + forkName = "taproot" + default: return nil, &btcjson.RPCError{ Code: btcjson.ErrRPCInternal.Code, From 7d1ab0b4d769cd86cfd63b0b7c52601b32011edb Mon Sep 17 00:00:00 2001 From: Oliver Gugger Date: Mon, 22 Mar 2021 18:26:58 +0100 Subject: [PATCH 129/419] btcctl: add signet param This commit adds the --signet command line flag to the btcctl utility. --- cmd/btcctl/config.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/cmd/btcctl/config.go b/cmd/btcctl/config.go index 939b6a8699..1cc2a260f3 100644 --- a/cmd/btcctl/config.go +++ b/cmd/btcctl/config.go @@ -107,6 +107,7 @@ type config struct { 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"` } @@ -138,6 +139,12 @@ func normalizeAddress(addr string, chain *chaincfg.Params, useWallet bool) (stri } else { defaultPort = "18334" } + case &chaincfg.SigNetParams: + if useWallet { + defaultPort = "38332" + } else { + defaultPort = "38332" + } default: if useWallet { defaultPort = "8332" @@ -273,6 +280,10 @@ func loadConfig() (*config, []string, error) { numNets++ network = &chaincfg.RegressionNetParams } + if cfg.SigNet { + numNets++ + network = &chaincfg.SigNetParams + } if numNets > 1 { str := "%s: Multiple network params can't be used " + From f0f4784c1ccf8cdafb3c72b8f251fa5290174297 Mon Sep 17 00:00:00 2001 From: "Johan T. Halseth" Date: Mon, 26 Apr 2021 13:53:22 +0200 Subject: [PATCH 130/419] mining: extract witness commitment add into method --- mining/mining.go | 78 +++++++++++++++++++++++++++--------------------- 1 file changed, 44 insertions(+), 34 deletions(-) diff --git a/mining/mining.go b/mining/mining.go index 44ec7dc761..e918328df8 100644 --- a/mining/mining.go +++ b/mining/mining.go @@ -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 From 37a6e8485b69f9514d74d153843477c73d1b0473 Mon Sep 17 00:00:00 2001 From: "Johan T. Halseth" Date: Mon, 26 Apr 2021 13:53:51 +0200 Subject: [PATCH 131/419] rpctest: add witness commitment when calling CreateBlock If we tried to include transactions having witnesses, the block would be invalid since the witness commitment was not added. --- integration/rpctest/blockgen.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/integration/rpctest/blockgen.go b/integration/rpctest/blockgen.go index de5821b0c1..0d802f5a48 100644 --- a/integration/rpctest/blockgen.go +++ b/integration/rpctest/blockgen.go @@ -14,6 +14,7 @@ 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" @@ -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{ From 0ec4bdc1b8e162efffed446a80f297c188543088 Mon Sep 17 00:00:00 2001 From: "John C. Vernaleo" Date: Sun, 18 Apr 2021 16:46:27 -0400 Subject: [PATCH 132/419] Don't reference the readme that we don't produce --- README.md | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/README.md b/README.md index 62fa223aae..957369a239 100644 --- a/README.md +++ b/README.md @@ -40,8 +40,6 @@ which are both under active development. ## Installation -#### Windows - MSI Available - https://github.com/btcsuite/btcd/releases #### Linux/BSD/MacOSX/POSIX - Build from Source @@ -74,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: @@ -94,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 From 7b6c2b342379f3cba880d9f3cc14c77fc7500969 Mon Sep 17 00:00:00 2001 From: Oliver Gugger Date: Tue, 11 May 2021 14:22:09 +0200 Subject: [PATCH 133/419] chaincfg: fix deployment bit numbers On signet all previous soft forks and also taproot are always activated, meaning the version is always 0x20000000 for all blocks. To make sure they activate properly in `btcd` we therefore need to use the correct bit to mask the version. This means that on any custom signet there would need to be 2016 blocks mined before SegWit or Taproot can be used. --- chaincfg/params.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/chaincfg/params.go b/chaincfg/params.go index cb1568632c..a6d8d3e551 100644 --- a/chaincfg/params.go +++ b/chaincfg/params.go @@ -670,17 +670,17 @@ func CustomSignetParams(challenge []byte, dnsSeeds []DNSSeed) Params { ExpireTime: 1230767999, // December 31, 2008 UTC }, DeploymentCSV: { - BitNumber: 0, + BitNumber: 29, StartTime: 0, // Always available for vote ExpireTime: math.MaxInt64, // Never expires }, DeploymentSegwit: { - BitNumber: 1, + BitNumber: 29, StartTime: 0, // Always available for vote ExpireTime: math.MaxInt64, // Never expires. }, DeploymentTaproot: { - BitNumber: 2, + BitNumber: 29, StartTime: 0, // Always available for vote ExpireTime: math.MaxInt64, // Never expires. }, From ee5896bad5be6b35d9308d1698aee2fb77863279 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Wed, 12 May 2021 17:47:26 -0700 Subject: [PATCH 134/419] mempool: add additional test case for inherited RBF replacement In this commit, we add an additional test case for inherited RBF replacement. This test case asserts that if a parent is marked as being replaceable, but the child isn't, then the child can still be replaced as according to BIP 125 it shoudl _inhreit_ the replaceability of its parent. The addition of this test case was prompted by the recently discovered Bitcoin Core "CVE" [1]. It turns out that bitcoind doesn't properly implement BIP 125. Namely it fails to allow a child to "inherit" replaceability if its parent is also replaceable. Our implementation makes this trait rather explicit due to its recursive implementation. Kudos to the original implementer @wpaulino for getting this correct. [1]: https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-May/018893.html. --- mempool/mempool_test.go | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/mempool/mempool_test.go b/mempool/mempool_test.go index 6d43cfd86e..96d5054417 100644 --- a/mempool/mempool_test.go +++ b/mempool/mempool_test.go @@ -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 { From 418f9204f49c71e6a481653237f00a781c29ea77 Mon Sep 17 00:00:00 2001 From: Anirudha Bose Date: Wed, 26 May 2021 03:17:24 +0530 Subject: [PATCH 135/419] Update CHANGES file for 0.22.0 release --- CHANGES | 122 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 121 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index d38897b339..6c5be7fa3a 100644 --- a/CHANGES +++ b/CHANGES @@ -3,6 +3,126 @@ User visible changes for btcd A full-node bitcoin implementation written in Go ============================================================================ +Changes in 0.22.0 (Thu May 27 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) @@ -26,7 +146,7 @@ Changes in 0.21.0 (Thu Aug 27 2020) - Fix panic in fieldVal.SetByteSlice when called with large values, and improve the method to be 35% faster (#1602) - btcctl changes: - - Added -regtest mode to btcctl (#1556) + - 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 From aaf19b26f3abfc5b0374042881d8e43cf1d95a8c Mon Sep 17 00:00:00 2001 From: "John C. Vernaleo" Date: Wed, 26 May 2021 11:13:28 -0400 Subject: [PATCH 136/419] btcd: bump version to v0.22.0-beta --- cmd/btcctl/version.go | 2 +- version.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/btcctl/version.go b/cmd/btcctl/version.go index f3a3e0b830..edb42dbe7d 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 = 21 + appMinor uint = 22 appPatch uint = 0 // appPreRelease MUST only contain characters from semanticAlphabet diff --git a/version.go b/version.go index ac294de232..d6ff9171aa 100644 --- a/version.go +++ b/version.go @@ -17,7 +17,7 @@ const semanticAlphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr // versioning 2.0.0 spec (http://semver.org/). const ( appMajor uint = 0 - appMinor uint = 21 + appMinor uint = 22 appPatch uint = 0 // appPreRelease MUST only contain characters from semanticAlphabet From 63438c6d3661a7dec09013f7731035abdf1eb4bc Mon Sep 17 00:00:00 2001 From: Anirudha Bose Date: Tue, 1 Jun 2021 21:27:38 +0530 Subject: [PATCH 137/419] Update release date for v0.22.0-beta in CHANGES file --- CHANGES | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 6c5be7fa3a..fd59a88672 100644 --- a/CHANGES +++ b/CHANGES @@ -3,7 +3,7 @@ User visible changes for btcd A full-node bitcoin implementation written in Go ============================================================================ -Changes in 0.22.0 (Thu May 27 2021) +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) From 505915dc3f2877e5d561d8eb03c6a7c05e61d462 Mon Sep 17 00:00:00 2001 From: Gabriel Nasr Date: Fri, 25 Jun 2021 15:20:16 -0300 Subject: [PATCH 138/419] btcjson: Update WalletCreateFundedPsbtOpts.FeeRate from *int64 to *float64 --- btcjson/walletsvrcmds.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/btcjson/walletsvrcmds.go b/btcjson/walletsvrcmds.go index 2ff9ae1832..e8ed62372b 100644 --- a/btcjson/walletsvrcmds.go +++ b/btcjson/walletsvrcmds.go @@ -1029,7 +1029,7 @@ type WalletCreateFundedPsbtOpts struct { ChangeType *ChangeType `json:"change_type,omitempty"` IncludeWatching *bool `json:"includeWatching,omitempty"` LockUnspents *bool `json:"lockUnspents,omitempty"` - FeeRate *int64 `json:"feeRate,omitempty"` + FeeRate *float64 `json:"feeRate,omitempty"` SubtractFeeFromOutputs *[]int64 `json:"subtractFeeFromOutputs,omitempty"` Replaceable *bool `json:"replaceable,omitempty"` ConfTarget *int64 `json:"conf_target,omitempty"` From b3e6bd6161d66f67655af2e7536b92db882a48f7 Mon Sep 17 00:00:00 2001 From: Calvin Kim Date: Thu, 15 Jul 2021 16:01:20 +0900 Subject: [PATCH 139/419] rpcserverhelp: Remove extra period for gettxout--synopsis --- rpcserverhelp.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpcserverhelp.go b/rpcserverhelp.go index 654fee0169..570b5b0500 100644 --- a/rpcserverhelp.go +++ b/rpcserverhelp.go @@ -528,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", From f5a1fb9965e4415c619c032e04ac21731f92167a Mon Sep 17 00:00:00 2001 From: eugene Date: Mon, 2 Aug 2021 11:14:52 -0400 Subject: [PATCH 140/419] mempool: export isDust for use in other projects This changes isDust to IsDust so other golang projects (btcwallet or lnd) can use the precise dust calculation used by btcd. --- mempool/policy.go | 6 +++--- mempool/policy_test.go | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/mempool/policy.go b/mempool/policy.go index 7e97329319..74142bf60c 100644 --- a/mempool/policy.go +++ b/mempool/policy.go @@ -172,12 +172,12 @@ func checkPkScriptStandard(pkScript []byte, scriptClass txscript.ScriptClass) er return nil } -// isDust returns whether or not the passed transaction output amount is +// 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 { +func IsDust(txOut *wire.TxOut, minRelayTxFee btcutil.Amount) bool { // Unspendable outputs are considered dust. if txscript.IsUnspendable(txOut.PkScript) { return true @@ -351,7 +351,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..b9cdbac47a 100644 --- a/mempool/policy_test.go +++ b/mempool/policy_test.go @@ -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) From f9d72f05a4bcf5288a237b652ad2b9a5fea4630c Mon Sep 17 00:00:00 2001 From: "John C. Vernaleo" Date: Wed, 26 May 2021 11:19:15 -0400 Subject: [PATCH 141/419] Switch irc to libera.chat --- README.md | 4 ++-- docs/contact.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 957369a239..556673825e 100644 --- a/README.md +++ b/README.md @@ -96,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/docs/contact.md b/docs/contact.md index 88b425e8bc..1ed9fc0b3a 100644 --- a/docs/contact.md +++ b/docs/contact.md @@ -2,7 +2,7 @@ ## IRC -* [irc.freenode.net](irc://irc.freenode.net), channel `#btcd` +* [irc.libera.chat](irc://irc.libera.chat), channel `#btcd` ## Mailing Lists From 3e2d8464f12b2e534e9764b0e4d4a48217c157e0 Mon Sep 17 00:00:00 2001 From: JeremyRand <244188+JeremyRand@users.noreply.github.com> Date: Thu, 2 Sep 2021 06:39:55 +0000 Subject: [PATCH 142/419] rpcclient: Export symbols needed for custom commands (#1457) * rpcclient: Export sendCmd and response This facilitates using custom commands with rpcclient. See https://github.com/btcsuite/btcd/issues/1083 * rpcclient: Export receiveFuture This facilitates using custom commands with rpcclient. See https://github.com/btcsuite/btcd/issues/1083 * rpcclient: Add customcommand example * rpcclient: remove "Namecoin" from customcommand readme heading --- rpcclient/chain.go | 230 +++++----- rpcclient/examples/customcommand/README.md | 32 ++ rpcclient/examples/customcommand/main.go | 110 +++++ rpcclient/extensions.go | 72 ++-- rpcclient/infrastructure.go | 58 +-- rpcclient/mining.go | 92 ++-- rpcclient/net.go | 80 ++-- rpcclient/notify.go | 60 +-- rpcclient/rawrequest.go | 10 +- rpcclient/rawtransactions.go | 98 ++--- rpcclient/wallet.go | 480 ++++++++++----------- 11 files changed, 732 insertions(+), 590 deletions(-) create mode 100644 rpcclient/examples/customcommand/README.md create mode 100644 rpcclient/examples/customcommand/main.go diff --git a/rpcclient/chain.go b/rpcclient/chain.go index d478da7a00..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 @@ -75,13 +75,13 @@ func (c *Client) legacyGetBlockRequest(hash string, verbose, }) } -// 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, +// 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) + 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 @@ -91,7 +91,7 @@ func (c *Client) waitForGetBlockRes(respChan chan *response, hash string, return c.legacyGetBlockRequest(hash, verbose, verboseTx) } - // Otherwise, we can return the response as is. + // Otherwise, we can return the Response as is. return res, err } @@ -100,10 +100,10 @@ func (c *Client) waitForGetBlockRes(respChan chan *response, hash string, type FutureGetBlockResult struct { client *Client hash string - Response chan *response + 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 := r.client.waitForGetBlockRes(r.Response, r.hash, false, false) @@ -148,7 +148,7 @@ func (c *Client) GetBlockAsync(blockHash *chainhash.Hash) FutureGetBlockResult { return FutureGetBlockResult{ client: c, hash: hash, - Response: c.sendCmd(cmd), + Response: c.SendCmd(cmd), } } @@ -165,10 +165,10 @@ func (c *Client) GetBlock(blockHash *chainhash.Hash) (*wire.MsgBlock, error) { type FutureGetBlockVerboseResult struct { client *Client hash string - Response chan *response + 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 := r.client.waitForGetBlockRes(r.Response, r.hash, true, false) @@ -201,7 +201,7 @@ func (c *Client) GetBlockVerboseAsync(blockHash *chainhash.Hash) FutureGetBlockV return FutureGetBlockVerboseResult{ client: c, hash: hash, - Response: c.sendCmd(cmd), + Response: c.SendCmd(cmd), } } @@ -219,10 +219,10 @@ func (c *Client) GetBlockVerbose(blockHash *chainhash.Hash) (*btcjson.GetBlockVe type FutureGetBlockVerboseTxResult struct { client *Client hash string - Response chan *response + Response chan *Response } -// Receive waits for the response promised by the future and returns a verbose +// 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) @@ -258,7 +258,7 @@ func (c *Client) GetBlockVerboseTxAsync(blockHash *chainhash.Hash) FutureGetBloc return FutureGetBlockVerboseTxResult{ client: c, hash: hash, - Response: c.sendCmd(cmd), + Response: c.SendCmd(cmd), } } @@ -273,12 +273,12 @@ func (c *Client) GetBlockVerboseTx(blockHash *chainhash.Hash) (*btcjson.GetBlock // 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 } @@ -299,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. @@ -309,11 +309,11 @@ func (c *Client) GetBlockCount() (int64, error) { // FutureGetChainTxStatsResult is a future promise to deliver the result of a // GetChainTxStatsAsync RPC invocation (or an applicable error). -type FutureGetChainTxStatsResult chan *response +type FutureGetChainTxStatsResult chan *Response -// Receive waits for the response promised by the future and returns transaction statistics +// Receive waits for the Response promised by the future and returns transaction statistics func (r FutureGetChainTxStatsResult) Receive() (*btcjson.GetChainTxStatsResult, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -334,7 +334,7 @@ func (r FutureGetChainTxStatsResult) Receive() (*btcjson.GetChainTxStatsResult, // See GetChainTxStats for the blocking version and more details. func (c *Client) GetChainTxStatsAsync() FutureGetChainTxStatsResult { cmd := btcjson.NewGetChainTxStatsCmd(nil, nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetChainTxStatsNBlocksAsync returns an instance of a type that can be used to get @@ -344,7 +344,7 @@ func (c *Client) GetChainTxStatsAsync() FutureGetChainTxStatsResult { // 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) + return c.SendCmd(cmd) } // GetChainTxStatsNBlocksBlockHashAsync returns an instance of a type that can be used to get @@ -355,7 +355,7 @@ func (c *Client) GetChainTxStatsNBlocksAsync(nBlocks int32) FutureGetChainTxStat func (c *Client) GetChainTxStatsNBlocksBlockHashAsync(nBlocks int32, blockHash chainhash.Hash) FutureGetChainTxStatsResult { hash := blockHash.String() cmd := btcjson.NewGetChainTxStatsCmd(&nBlocks, &hash) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetChainTxStats returns statistics about the total number and rate of transactions in the chain. @@ -382,12 +382,12 @@ func (c *Client) GetChainTxStatsNBlocksBlockHash(nBlocks int32, blockHash chainh // 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 } @@ -408,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 @@ -421,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 @@ -461,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 } @@ -497,7 +497,7 @@ func (c *Client) GetBlockChainInfoAsync() FutureGetBlockChainInfoResult { cmd := btcjson.NewGetBlockChainInfoCmd() return FutureGetBlockChainInfoResult{ client: c, - Response: c.sendCmd(cmd), + Response: c.SendCmd(cmd), } } @@ -510,12 +510,12 @@ func (c *Client) GetBlockChainInfo() (*btcjson.GetBlockChainInfoResult, error) { // FutureGetBlockFilterResult is a future promise to deliver the result of a // GetBlockFilterAsync RPC invocation (or an applicable error). -type FutureGetBlockFilterResult chan *response +type FutureGetBlockFilterResult chan *Response -// Receive waits for the response promised by the future and returns block filter +// 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) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -538,7 +538,7 @@ func (c *Client) GetBlockFilterAsync(blockHash chainhash.Hash, filterType *btcjs hash := blockHash.String() cmd := btcjson.NewGetBlockFilterCmd(hash, filterType) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetBlockFilter retrieves a BIP0157 content filter for a particular block. @@ -548,12 +548,12 @@ func (c *Client) GetBlockFilter(blockHash chainhash.Hash, filterType *btcjson.Fi // 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 } @@ -574,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 @@ -585,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 } @@ -629,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. @@ -642,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 } @@ -674,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 @@ -687,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 } @@ -715,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 @@ -726,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 } @@ -763,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. @@ -776,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 } @@ -804,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 @@ -818,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 } @@ -845,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. @@ -855,12 +855,12 @@ func (c *Client) EstimateFee(numBlocks int64) (float64, error) { // FutureEstimateFeeResult is a future promise to deliver the result of a // EstimateSmartFeeAsync RPC invocation (or an applicable error). -type FutureEstimateSmartFeeResult chan *response +type FutureEstimateSmartFeeResult 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 fee. func (r FutureEstimateSmartFeeResult) Receive() (*btcjson.EstimateSmartFeeResult, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -880,7 +880,7 @@ func (r FutureEstimateSmartFeeResult) Receive() (*btcjson.EstimateSmartFeeResult // 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) + return c.SendCmd(cmd) } // EstimateSmartFee requests the server to estimate a fee level based on the given parameters. @@ -891,13 +891,13 @@ func (c *Client) EstimateSmartFee(confTarget int64, mode *btcjson.EstimateSmartF // 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 } @@ -918,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 @@ -936,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 @@ -959,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 @@ -979,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 } @@ -1017,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 @@ -1028,12 +1028,12 @@ func (c *Client) GetTxOut(txHash *chainhash.Hash, index uint32, mempool bool) (* // FutureGetTxOutSetInfoResult is a future promise to deliver the result of a // GetTxOutSetInfoAsync RPC invocation (or an applicable error). -type FutureGetTxOutSetInfoResult chan *response +type FutureGetTxOutSetInfoResult 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 // results of GetTxOutSetInfoAsync RPC invocation. func (r FutureGetTxOutSetInfoResult) Receive() (*btcjson.GetTxOutSetInfoResult, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -1055,7 +1055,7 @@ func (r FutureGetTxOutSetInfoResult) Receive() (*btcjson.GetTxOutSetInfoResult, // See GetTxOutSetInfo for the blocking version and more details. func (c *Client) GetTxOutSetInfoAsync() FutureGetTxOutSetInfoResult { cmd := btcjson.NewGetTxOutSetInfoCmd() - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetTxOutSetInfo returns the statistics about the unspent transaction output @@ -1069,15 +1069,15 @@ func (c *Client) GetTxOutSetInfo() (*btcjson.GetTxOutSetInfoResult, 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 } @@ -1106,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 @@ -1121,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 } @@ -1143,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. @@ -1153,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 } @@ -1197,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. @@ -1208,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 } @@ -1250,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 @@ -1262,12 +1262,12 @@ func (c *Client) GetCFilterHeader(blockHash *chainhash.Hash, // FutureGetBlockStatsResult is a future promise to deliver the result of a // GetBlockStatsAsync RPC invocation (or an applicable error). -type FutureGetBlockStatsResult chan *response +type FutureGetBlockStatsResult chan *Response -// Receive waits for the response promised by the future and returns statistics +// 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) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -1292,7 +1292,7 @@ func (c *Client) GetBlockStatsAsync(hashOrHeight interface{}, stats *[]string) F } cmd := btcjson.NewGetBlockStatsCmd(btcjson.HashOrHeight{Value: hashOrHeight}, stats) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetBlockStats returns block statistics. First argument specifies height or hash of the target block. @@ -1303,12 +1303,12 @@ func (c *Client) GetBlockStats(hashOrHeight interface{}, stats *[]string) (*btcj // FutureDeriveAddressesResult is a future promise to deliver the result of an // DeriveAddressesAsync RPC invocation (or an applicable error). -type FutureDeriveAddressesResult chan *response +type FutureDeriveAddressesResult chan *Response -// Receive waits for the response promised by the future and derives one or more addresses +// 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) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -1330,7 +1330,7 @@ func (r FutureDeriveAddressesResult) Receive() (*btcjson.DeriveAddressesResult, // 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) + return c.SendCmd(cmd) } // DeriveAddresses derives one or more addresses corresponding to an output @@ -1342,12 +1342,12 @@ func (c *Client) DeriveAddresses(descriptor string, descriptorRange *btcjson.Des // FutureGetDescriptorInfoResult is a future promise to deliver the result of a // GetDescriptorInfoAsync RPC invocation (or an applicable error). -type FutureGetDescriptorInfoResult chan *response +type FutureGetDescriptorInfoResult chan *Response -// Receive waits for the response promised by the future and returns the analysed +// 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) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -1369,7 +1369,7 @@ func (r FutureGetDescriptorInfoResult) Receive() (*btcjson.GetDescriptorInfoResu // See GetDescriptorInfo for the blocking version and more details. func (c *Client) GetDescriptorInfoAsync(descriptor string) FutureGetDescriptorInfoResult { cmd := btcjson.NewGetDescriptorInfoCmd(descriptor) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetDescriptorInfo returns the analysed info of a descriptor string, by invoking the 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..c8615293e3 100644 --- a/rpcclient/extensions.go +++ b/rpcclient/extensions.go @@ -20,13 +20,13 @@ import ( // 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 798f027911..7255289282 100644 --- a/rpcclient/infrastructure.go +++ b/rpcclient/infrastructure.go @@ -103,7 +103,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 @@ -300,13 +300,13 @@ func (c *Client) trackRegisteredNtfns(cmd interface{}) { // FutureGetBulkResult waits for the responses promised by the future // and returns them in a channel -type FutureGetBulkResult chan *response +type FutureGetBulkResult chan *Response // 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) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -357,9 +357,9 @@ type rawResponse struct { Error *btcjson.RPCError `json:"error"` } -// response is the raw bytes of a JSON-RPC result, or the error if the response +// 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 } @@ -440,7 +440,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 @@ -770,7 +770,7 @@ func (c *Client) handleSendPostMessage(details *sendPostDetails) { log.Tracef("Sending command [%s] with id %d", jReq.method, jReq.id) httpResponse, err := c.httpClient.Do(details.httpRequest) if err != nil { - jReq.responseChan <- &response{err: err} + jReq.responseChan <- &Response{err: err} return } @@ -779,7 +779,7 @@ 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 } @@ -797,7 +797,7 @@ func (c *Client) handleSendPostMessage(details *sendPostDetails) { // 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 } var res []byte @@ -808,7 +808,7 @@ func (c *Client) handleSendPostMessage(details *sendPostDetails) { } else { res, err = resp.result() } - jReq.responseChan <- &response{result: res, err: err} + jReq.responseChan <- &Response{result: res, err: err} } // sendPostHandler handles all outgoing messages when the client is running @@ -835,7 +835,7 @@ cleanup: for { select { case details := <-c.sendPostChan: - details.jsonRequest.responseChan <- &response{ + details.jsonRequest.responseChan <- &Response{ result: nil, err: ErrClientShutdown, } @@ -856,7 +856,7 @@ func (c *Client) sendPostRequest(httpReq *http.Request, 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: } @@ -869,17 +869,17 @@ func (c *Client) sendPostRequest(httpReq *http.Request, jReq *jsonRequest) { // 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 @@ -900,7 +900,7 @@ func (c *Client) sendPost(jReq *jsonRequest) { bodyReader := bytes.NewReader(jReq.marshalledJSON) httpReq, err := http.NewRequest("POST", url, bodyReader) if err != nil { - jReq.responseChan <- &response{result: nil, err: err} + jReq.responseChan <- &Response{result: nil, err: err} return } httpReq.Close = true @@ -912,7 +912,7 @@ func (c *Client) sendPost(jReq *jsonRequest) { // Configure basic access authorization. user, pass, err := c.config.getAuth() if err != nil { - jReq.responseChan <- &response{result: nil, err: err} + jReq.responseChan <- &Response{result: nil, err: err} return } httpReq.SetBasicAuth(user, pass) @@ -945,7 +945,7 @@ func (c *Client) sendRequest(jReq *jsonRequest) { select { case <-c.connEstablished: default: - jReq.responseChan <- &response{err: ErrClientNotConnected} + jReq.responseChan <- &Response{err: ErrClientNotConnected} return } @@ -954,18 +954,18 @@ 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 @@ -984,7 +984,7 @@ func (c *Client) sendCmd(cmd interface{}) chan *response { } // 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, @@ -1004,7 +1004,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 @@ -1085,7 +1085,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, } @@ -1113,7 +1113,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, } @@ -1623,7 +1623,7 @@ func (c *Client) BackendVersion() (BackendVersion, error) { func (c *Client) sendAsync() FutureGetBulkResult { // convert the array of marshalled json requests to a single request we can send - responseChan := make(chan *response, 1) + responseChan := make(chan *Response, 1) marshalledRequest := []byte("[") for iter := c.batchList.Front(); iter != nil; iter = iter.Next() { request := iter.Value.(*jsonRequest) @@ -1678,7 +1678,7 @@ func (c *Client) Send() error { requestError = individualResult.Error } - result := response{ + result := Response{ result: fullResult, err: requestError, } diff --git a/rpcclient/mining.go b/rpcclient/mining.go index 431054e155..15473e24be 100644 --- a/rpcclient/mining.go +++ b/rpcclient/mining.go @@ -16,12 +16,12 @@ import ( // 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. @@ -63,12 +63,12 @@ func (c *Client) Generate(numBlocks uint32) ([]*chainhash.Hash, error) { // FutureGenerateToAddressResult is a future promise to deliver the result of a // GenerateToAddressResult RPC invocation (or an applicable error). -type FutureGenerateToAddressResult chan *response +type FutureGenerateToAddressResult chan *Response -// Receive waits for the response promised by the future and returns the hashes of +// 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) + res, err := ReceiveFuture(f) if err != nil { return nil, err } @@ -100,7 +100,7 @@ func (f FutureGenerateToAddressResult) Receive() ([]*chainhash.Hash, error) { // 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) + return c.SendCmd(cmd) } // GenerateToAddress generates numBlocks blocks to the given address and returns their hashes. @@ -110,12 +110,12 @@ func (c *Client) GenerateToAddress(numBlocks int64, address btcutil.Address, max // 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 } @@ -137,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. @@ -147,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 } @@ -163,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. @@ -173,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 } @@ -201,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 @@ -213,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 } @@ -240,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. @@ -250,13 +250,13 @@ 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) + res, err := ReceiveFuture(r) if err != nil { return -1, err } @@ -278,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 @@ -297,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 @@ -318,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 @@ -333,12 +333,12 @@ func (c *Client) GetNetworkHashPS3(blocks, height int) (int64, error) { // 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 } @@ -360,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. @@ -372,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 } @@ -399,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 @@ -412,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 } @@ -453,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. @@ -463,12 +463,12 @@ func (c *Client) SubmitBlock(block *btcutil.Block, options *btcjson.SubmitBlockO // FutureGetBlockTemplateResponse is a future promise to deliver the result of a // GetBlockTemplateAsync RPC invocation (or an applicable error). -type FutureGetBlockTemplateResponse chan *response +type FutureGetBlockTemplateResponse 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 retrieving the block template. func (r FutureGetBlockTemplateResponse) Receive() (*btcjson.GetBlockTemplateResult, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -490,7 +490,7 @@ func (r FutureGetBlockTemplateResponse) Receive() (*btcjson.GetBlockTemplateResu // 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) + return c.SendCmd(cmd) } // GetBlockTemplate returns a new block template for mining. diff --git a/rpcclient/net.go b/rpcclient/net.go index 8c191ff66f..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. @@ -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. @@ -283,12 +283,12 @@ func (c *Client) GetNetworkInfo() (*btcjson.GetNetworkInfoResult, error) { // FutureGetNodeAddressesResult is a future promise to deliver the result of a // GetNodeAddressesAsync RPC invocation (or an applicable error). -type FutureGetNodeAddressesResult chan *response +type FutureGetNodeAddressesResult 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 // known node addresses. func (r FutureGetNodeAddressesResult) Receive() ([]btcjson.GetNodeAddressesResult, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -310,7 +310,7 @@ func (r FutureGetNodeAddressesResult) Receive() ([]btcjson.GetNodeAddressesResul // See GetNodeAddresses for the blocking version and more details. func (c *Client) GetNodeAddressesAsync(count *int32) FutureGetNodeAddressesResult { cmd := btcjson.NewGetNodeAddressesCmd(count) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetNodeAddresses returns data about known node addresses. @@ -320,12 +320,12 @@ func (c *Client) GetNodeAddresses(count *int32) ([]btcjson.GetNodeAddressesResul // 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 } @@ -347,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. @@ -357,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 } @@ -384,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 1feb755605..6879099acd 100644 --- a/rpcclient/notify.go +++ b/rpcclient/notify.go @@ -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 } @@ -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 @@ -906,12 +906,12 @@ func (c *Client) NotifyBlocks() error { // NotifySpentAsync RPC invocation (or an applicable error). // // Deprecated: Use FutureLoadTxFilterResult instead. -type FutureNotifySpentResult chan *response +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 @@ -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 @@ -990,12 +990,12 @@ func (c *Client) NotifySpent(outpoints []*wire.OutPoint) error { // 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 @@ -1041,12 +1041,12 @@ func (c *Client) NotifyNewTransactions(verbose bool) error { // NotifyReceivedAsync RPC invocation (or an applicable error). // // Deprecated: Use FutureLoadTxFilterResult instead. -type FutureNotifyReceivedResult chan *response +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 @@ -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 @@ -1127,12 +1127,12 @@ func (c *Client) NotifyReceived(addresses []btcutil.Address) error { // or RescanEndHeightAsync RPC invocation (or an applicable error). // // Deprecated: Use FutureRescanBlocksResult instead. -type FutureRescanResult chan *response +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 } @@ -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 @@ -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 @@ -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 baead8bb90..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,7 +39,7 @@ 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() @@ -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 35038ed9d3..cfc322c769 100644 --- a/rpcclient/rawtransactions.go +++ b/rpcclient/rawtransactions.go @@ -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 @@ -207,12 +207,12 @@ func (c *Client) DecodeRawTransaction(serializedTx []byte) (*btcjson.TxRawResult // FutureFundRawTransactionResult is a future promise to deliver the result // of a FutureFundRawTransactionAsync RPC invocation (or an applicable error). -type FutureFundRawTransactionResult chan *response +type FutureFundRawTransactionResult 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 funding attempt func (r FutureFundRawTransactionResult) Receive() (*btcjson.FundRawTransactionResult, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -237,7 +237,7 @@ func (c *Client) FundRawTransactionAsync(tx *wire.MsgTx, opts btcjson.FundRawTra } cmd := btcjson.NewFundRawTransactionCmd(txBuf.Bytes(), opts, isWitness) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // FundRawTransaction returns the result of trying to fund the given transaction with @@ -248,13 +248,13 @@ func (c *Client) FundRawTransaction(tx *wire.MsgTx, opts btcjson.FundRawTransact // 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 } @@ -298,7 +298,7 @@ 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 @@ -312,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 } @@ -374,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 @@ -386,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 } @@ -435,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 @@ -466,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 @@ -504,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 @@ -552,7 +552,7 @@ 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 @@ -585,12 +585,12 @@ func (c *Client) SignRawTransaction4(tx *wire.MsgTx, // FutureSignRawTransactionWithWalletResult is a future promise to deliver // the result of the SignRawTransactionWithWalletAsync RPC invocation (or // an applicable error). -type FutureSignRawTransactionWithWalletResult chan *response +type FutureSignRawTransactionWithWalletResult 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 FutureSignRawTransactionWithWalletResult) Receive() (*wire.MsgTx, bool, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, false, err } @@ -634,7 +634,7 @@ func (c *Client) SignRawTransactionWithWalletAsync(tx *wire.MsgTx) FutureSignRaw } cmd := btcjson.NewSignRawTransactionWithWalletCmd(txHex, nil, nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // SignRawTransactionWithWallet signs inputs for the passed transaction and returns @@ -667,7 +667,7 @@ func (c *Client) SignRawTransactionWithWallet2Async(tx *wire.MsgTx, } cmd := btcjson.NewSignRawTransactionWithWalletCmd(txHex, &inputs, nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // SignRawTransactionWithWallet2 signs inputs for the passed transaction given the @@ -705,7 +705,7 @@ func (c *Client) SignRawTransactionWithWallet3Async(tx *wire.MsgTx, } cmd := btcjson.NewSignRawTransactionWithWalletCmd(txHex, &inputs, btcjson.String(string(hashType))) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // SignRawTransactionWithWallet3 signs inputs for the passed transaction using @@ -727,12 +727,12 @@ func (c *Client) SignRawTransactionWithWallet3(tx *wire.MsgTx, // 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 } @@ -775,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. @@ -792,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 } @@ -828,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 @@ -847,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 } @@ -875,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 011e91062b..71435d99f8 100644 --- a/rpcclient/wallet.go +++ b/rpcclient/wallet.go @@ -22,12 +22,12 @@ import ( // FutureGetTransactionResult is a future promise to deliver the result // of a GetTransactionAsync or GetTransactionWatchOnlyAsync RPC invocation // (or an applicable error). -type FutureGetTransactionResult chan *response +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 } @@ -54,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. @@ -76,7 +76,7 @@ func (c *Client) GetTransactionWatchOnlyAsync(txHash *chainhash.Hash, watchOnly } cmd := btcjson.NewGetTransactionCmd(hash, &watchOnly) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetTransactionWatchOnly returns detailed information about a wallet @@ -89,12 +89,12 @@ func (c *Client) GetTransactionWatchOnly(txHash *chainhash.Hash, watchOnly bool) // 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 } @@ -116,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. @@ -134,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 @@ -153,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 @@ -171,7 +171,7 @@ func (c *Client) ListTransactionsCountFrom(account string, count, from int) ([]b // 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) + return c.SendCmd(cmd) } // ListTransactionsCountFromWatchOnly returns a list of the most recent transactions up @@ -186,15 +186,15 @@ func (c *Client) ListTransactionsCountFromWatchOnly(account string, count, from // 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 } @@ -216,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 @@ -226,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 @@ -236,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 @@ -251,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 @@ -285,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 } @@ -318,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 @@ -343,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 @@ -367,7 +367,7 @@ func (c *Client) ListSinceBlockMinConfWatchOnlyAsync(blockHash *chainhash.Hash, } cmd := btcjson.NewListSinceBlockCmd(hash, &minConfirms, &watchOnly) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // ListSinceBlockMinConfWatchOnly returns all transactions added in blocks since the @@ -385,12 +385,12 @@ func (c *Client) ListSinceBlockMinConfWatchOnly(blockHash *chainhash.Hash, minCo // 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 } @@ -408,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 @@ -434,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 } @@ -471,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 @@ -483,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 } @@ -500,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 @@ -511,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 } @@ -539,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. @@ -566,7 +566,7 @@ 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 @@ -589,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 } @@ -619,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 @@ -643,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 @@ -672,7 +672,7 @@ 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 @@ -697,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 } @@ -729,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 @@ -759,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 @@ -793,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 @@ -821,15 +821,15 @@ 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 struct { - responseChannel chan *response + 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.responseChannel) + res, err := ReceiveFuture(r.responseChannel) if err != nil { return nil, err } @@ -858,7 +858,7 @@ func (c *Client) AddMultisigAddressAsync(requiredSigs int, addresses []btcutil.A cmd := btcjson.NewAddMultisigAddressCmd(requiredSigs, addrs, &account) result := FutureAddMultisigAddressResult{ network: c.chainParams, - responseChannel: c.sendCmd(cmd), + responseChannel: c.SendCmd(cmd), } return result } @@ -871,12 +871,12 @@ func (c *Client) AddMultisigAddress(requiredSigs int, addresses []btcutil.Addres // 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 } @@ -903,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 @@ -915,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 } @@ -931,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. @@ -941,12 +941,12 @@ func (c *Client) CreateNewAccount(account string) error { // FutureCreateWalletResult is a future promise to deliver the result of a // CreateWalletAsync RPC invocation (or an applicable error). -type FutureCreateWalletResult chan *response +type FutureCreateWalletResult 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 a new wallet. func (r FutureCreateWalletResult) Receive() (*btcjson.CreateWalletResult, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -1008,7 +1008,7 @@ func (c *Client) CreateWalletAsync(name string, opts ...CreateWalletOpt) FutureC opt(cmd) } - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // CreateWallet creates a new wallet account, with the possibility to use @@ -1026,12 +1026,12 @@ func (c *Client) CreateWallet(name string, opts ...CreateWalletOpt) (*btcjson.Cr // FutureGetAddressInfoResult is a future promise to deliver the result of an // GetAddressInfoAsync RPC invocation (or an applicable error). -type FutureGetAddressInfoResult chan *response +type FutureGetAddressInfoResult chan *Response -// Receive waits for the response promised by the future and returns the information +// 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) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -1051,7 +1051,7 @@ func (r FutureGetAddressInfoResult) Receive() (*btcjson.GetAddressInfoResult, er // See GetAddressInfo for the blocking version and more details. func (c *Client) GetAddressInfoAsync(address string) FutureGetAddressInfoResult { cmd := btcjson.NewGetAddressInfoCmd(address) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetAddressInfo returns information about the given bitcoin address. @@ -1062,14 +1062,14 @@ func (c *Client) GetAddressInfo(address string) (*btcjson.GetAddressInfoResult, // FutureGetNewAddressResult is a future promise to deliver the result of a // GetNewAddressAsync RPC invocation (or an applicable error). type FutureGetNewAddressResult struct { - responseChannel chan *response + 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.responseChannel) + res, err := ReceiveFuture(r.responseChannel) if err != nil { return nil, err } @@ -1093,7 +1093,7 @@ func (c *Client) GetNewAddressAsync(account string) FutureGetNewAddressResult { cmd := btcjson.NewGetNewAddressCmd(&account) result := FutureGetNewAddressResult{ network: c.chainParams, - responseChannel: c.sendCmd(cmd), + responseChannel: c.SendCmd(cmd), } return result } @@ -1107,15 +1107,15 @@ func (c *Client) GetNewAddress(account string) (btcutil.Address, error) { // FutureGetRawChangeAddressResult is a future promise to deliver the result of // a GetRawChangeAddressAsync RPC invocation (or an applicable error). type FutureGetRawChangeAddressResult struct { - responseChannel chan *response + 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.responseChannel) + res, err := ReceiveFuture(r.responseChannel) if err != nil { return nil, err } @@ -1139,7 +1139,7 @@ func (c *Client) GetRawChangeAddressAsync(account string) FutureGetRawChangeAddr cmd := btcjson.NewGetRawChangeAddressCmd(&account) result := FutureGetRawChangeAddressResult{ network: c.chainParams, - responseChannel: c.sendCmd(cmd), + responseChannel: c.SendCmd(cmd), } return result } @@ -1154,14 +1154,14 @@ func (c *Client) GetRawChangeAddress(account string) (btcutil.Address, error) { // FutureAddWitnessAddressResult is a future promise to deliver the result of // a AddWitnessAddressAsync RPC invocation (or an applicable error). type FutureAddWitnessAddressResult struct { - responseChannel chan *response + 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.responseChannel) + res, err := ReceiveFuture(r.responseChannel) if err != nil { return nil, err } @@ -1185,7 +1185,7 @@ func (c *Client) AddWitnessAddressAsync(address string) FutureAddWitnessAddressR cmd := btcjson.NewAddWitnessAddressCmd(address) response := FutureAddWitnessAddressResult{ network: c.chainParams, - responseChannel: c.sendCmd(cmd), + responseChannel: c.SendCmd(cmd), } return response } @@ -1199,14 +1199,14 @@ 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 struct { - responseChannel chan *response + 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.responseChannel) + res, err := ReceiveFuture(r.responseChannel) if err != nil { return nil, err } @@ -1230,7 +1230,7 @@ func (c *Client) GetAccountAddressAsync(account string) FutureGetAccountAddressR cmd := btcjson.NewGetAccountAddressCmd(account) result := FutureGetAccountAddressResult{ network: c.chainParams, - responseChannel: c.sendCmd(cmd), + responseChannel: c.SendCmd(cmd), } return result } @@ -1243,12 +1243,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 } @@ -1271,7 +1271,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. @@ -1281,12 +1281,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 } @@ -1298,7 +1298,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. @@ -1309,14 +1309,14 @@ 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 struct { - responseChannel chan *response + 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.responseChannel) + res, err := ReceiveFuture(r.responseChannel) if err != nil { return nil, err } @@ -1348,7 +1348,7 @@ func (c *Client) GetAddressesByAccountAsync(account string) FutureGetAddressesBy cmd := btcjson.NewGetAddressesByAccountCmd(account) result := FutureGetAddressesByAccountResult{ network: c.chainParams, - responseChannel: c.sendCmd(cmd), + responseChannel: c.SendCmd(cmd), } return result } @@ -1362,12 +1362,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 } @@ -1390,7 +1390,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 @@ -1411,7 +1411,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 @@ -1434,7 +1434,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 @@ -1452,12 +1452,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 } @@ -1468,7 +1468,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. @@ -1478,12 +1478,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 } @@ -1506,7 +1506,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. @@ -1516,12 +1516,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 } @@ -1532,7 +1532,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. @@ -1549,7 +1549,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 @@ -1565,12 +1565,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 } @@ -1602,7 +1602,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 @@ -1620,7 +1620,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 @@ -1634,12 +1634,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 } @@ -1663,12 +1663,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 } @@ -1699,7 +1699,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 @@ -1718,7 +1718,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 @@ -1736,12 +1736,12 @@ func (c *Client) GetBalanceMinConf(account string, minConfirms int) (btcutil.Amo // FutureGetBalancesResult is a future promise to deliver the result of a // GetBalancesAsync RPC invocation (or an applicable error). -type FutureGetBalancesResult chan *response +type FutureGetBalancesResult 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 balances from the server. func (r FutureGetBalancesResult) Receive() (*btcjson.GetBalancesResult, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -1763,7 +1763,7 @@ func (r FutureGetBalancesResult) Receive() (*btcjson.GetBalancesResult, error) { // See GetBalances for the blocking version and more details. func (c *Client) GetBalancesAsync() FutureGetBalancesResult { cmd := btcjson.NewGetBalancesCmd() - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetBalances returns the available balances from the server. @@ -1774,12 +1774,12 @@ func (c *Client) GetBalances() (*btcjson.GetBalancesResult, error) { // 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 } @@ -1806,7 +1806,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 @@ -1825,7 +1825,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 @@ -1839,12 +1839,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 } @@ -1871,7 +1871,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 @@ -1883,12 +1883,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 } @@ -1916,7 +1916,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) } @@ -1937,7 +1937,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 @@ -1952,12 +1952,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 } @@ -1979,7 +1979,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 @@ -2000,7 +2000,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 @@ -2022,7 +2022,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 @@ -2039,12 +2039,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 } @@ -2066,7 +2066,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 @@ -2087,7 +2087,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 @@ -2109,7 +2109,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 @@ -2128,12 +2128,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 } @@ -2144,7 +2144,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. @@ -2167,12 +2167,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 } @@ -2183,7 +2183,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 @@ -2198,12 +2198,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 } @@ -2226,7 +2226,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. @@ -2239,12 +2239,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 } @@ -2267,7 +2267,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. @@ -2284,13 +2284,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 } @@ -2313,7 +2313,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 @@ -2327,12 +2327,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 } @@ -2343,7 +2343,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. @@ -2358,7 +2358,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, @@ -2369,12 +2369,12 @@ func (c *Client) ImportAddressRescan(address string, account string, rescan bool // FutureImportMultiResult is a future promise to deliver the result of an // ImportMultiAsync RPC invocation (or an applicable error). -type FutureImportMultiResult chan *response +type FutureImportMultiResult 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 multiple addresses/scripts. func (r FutureImportMultiResult) Receive() (btcjson.ImportMultiResults, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -2394,7 +2394,7 @@ func (r FutureImportMultiResult) Receive() (btcjson.ImportMultiResults, error) { // 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) + return c.SendCmd(cmd) } // ImportMulti imports addresses/scripts, optionally rescanning the blockchain @@ -2407,13 +2407,13 @@ func (c *Client) ImportMulti(requests []btcjson.ImportMultiRequest, options *btc // 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 } @@ -2429,7 +2429,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 @@ -2450,7 +2450,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 @@ -2471,7 +2471,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 @@ -2483,12 +2483,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 } @@ -2499,7 +2499,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. @@ -2514,7 +2514,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 @@ -2532,12 +2532,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 } @@ -2559,7 +2559,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 @@ -2571,13 +2571,13 @@ func (c *Client) GetInfo() (*btcjson.InfoWalletResult, error) { // FutureImportPubKeyResult is a future promise to deliver the result of an // WalletCreateFundedPsbt RPC invocation (or an applicable error). -type FutureWalletCreateFundedPsbtResult chan *response +type FutureWalletCreateFundedPsbtResult 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 // 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) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -2602,7 +2602,7 @@ func (c *Client) WalletCreateFundedPsbtAsync( options *btcjson.WalletCreateFundedPsbtOpts, bip32Derivs *bool, ) FutureWalletCreateFundedPsbtResult { cmd := btcjson.NewWalletCreateFundedPsbtCmd(inputs, outputs, locktime, options, bip32Derivs) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // WalletCreateFundedPsbt creates and funds a transaction in the Partially @@ -2617,13 +2617,13 @@ func (c *Client) WalletCreateFundedPsbt( // FutureWalletProcessPsbtResult is a future promise to deliver the result of a // WalletCreateFundedPsb RPC invocation (or an applicable error). -type FutureWalletProcessPsbtResult chan *response +type FutureWalletProcessPsbtResult chan *Response -// Receive waits for the response promised by the future and returns an updated +// 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) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -2647,7 +2647,7 @@ 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) + return c.SendCmd(cmd) } // WalletProcessPsbt updates a PSBT with input information from our wallet and @@ -2660,12 +2660,12 @@ func (c *Client) WalletProcessPsbt( // FutureGetWalletInfoResult is a future promise to deliver the result of an // GetWalletInfoAsync RPC invocation (or an applicable error). -type FutureGetWalletInfoResult chan *response +type FutureGetWalletInfoResult 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 wallet state info. func (r FutureGetWalletInfoResult) Receive() (*btcjson.GetWalletInfoResult, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -2685,7 +2685,7 @@ func (r FutureGetWalletInfoResult) Receive() (*btcjson.GetWalletInfoResult, erro // See GetWalletInfo for the blocking version and more details. func (c *Client) GetWalletInfoAsync() FutureGetWalletInfoResult { cmd := btcjson.NewGetWalletInfoCmd() - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetWalletInfo returns various wallet state info. @@ -2695,11 +2695,11 @@ func (c *Client) GetWalletInfo() (*btcjson.GetWalletInfoResult, error) { // FutureBackupWalletResult is a future promise to deliver the result of an // BackupWalletAsync RPC invocation (or an applicable error) -type FutureBackupWalletResult chan *response +type FutureBackupWalletResult chan *Response -// Receive waits for the response promised by the future +// Receive waits for the Response promised by the future func (r FutureBackupWalletResult) Receive() error { - _, err := receiveFuture(r) + _, err := ReceiveFuture(r) return err } @@ -2709,7 +2709,7 @@ func (r FutureBackupWalletResult) Receive() error { // // See BackupWallet for the blocking version and more details. func (c *Client) BackupWalletAsync(destination string) FutureBackupWalletResult { - return c.sendCmd(btcjson.NewBackupWalletCmd(destination)) + return c.SendCmd(btcjson.NewBackupWalletCmd(destination)) } // BackupWallet safely copies current wallet file to destination, which can @@ -2720,11 +2720,11 @@ func (c *Client) BackupWallet(destination string) error { // FutureDumpWalletResult is a future promise to deliver the result of an // DumpWallet RPC invocation (or an applicable error) -type FutureDumpWalletResult chan *response +type FutureDumpWalletResult chan *Response -// Receive waits for the response promised by the future +// Receive waits for the Response promised by the future func (r FutureDumpWalletResult) Receive() (*btcjson.DumpWalletResult, error) { - bytes, err := receiveFuture(r) + bytes, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -2740,7 +2740,7 @@ func (r FutureDumpWalletResult) Receive() (*btcjson.DumpWalletResult, error) { // // See DumpWalletAsync for the blocking version and more details. func (c *Client) DumpWalletAsync(destination string) FutureDumpWalletResult { - return c.sendCmd(btcjson.NewDumpWalletCmd(destination)) + return c.SendCmd(btcjson.NewDumpWalletCmd(destination)) } // DumpWallet dumps all wallet keys in a human-readable format to a server-side file. @@ -2750,11 +2750,11 @@ func (c *Client) DumpWallet(destination string) (*btcjson.DumpWalletResult, erro // FutureImportWalletResult is a future promise to deliver the result of an // ImportWalletAsync RPC invocation (or an applicable error) -type FutureImportWalletResult chan *response +type FutureImportWalletResult chan *Response -// Receive waits for the response promised by the future +// Receive waits for the Response promised by the future func (r FutureImportWalletResult) Receive() error { - _, err := receiveFuture(r) + _, err := ReceiveFuture(r) return err } @@ -2764,7 +2764,7 @@ func (r FutureImportWalletResult) Receive() error { // // See ImportWallet for the blocking version and more details. func (c *Client) ImportWalletAsync(filename string) FutureImportWalletResult { - return c.sendCmd(btcjson.NewImportWalletCmd(filename)) + return c.SendCmd(btcjson.NewImportWalletCmd(filename)) } // ImportWallet imports keys from a wallet dump file (see DumpWallet). @@ -2774,11 +2774,11 @@ func (c *Client) ImportWallet(filename string) error { // FutureUnloadWalletResult is a future promise to deliver the result of an // UnloadWalletAsync RPC invocation (or an applicable error) -type FutureUnloadWalletResult chan *response +type FutureUnloadWalletResult chan *Response -// Receive waits for the response promised by the future +// Receive waits for the Response promised by the future func (r FutureUnloadWalletResult) Receive() error { - _, err := receiveFuture(r) + _, err := ReceiveFuture(r) return err } @@ -2788,7 +2788,7 @@ func (r FutureUnloadWalletResult) Receive() error { // // See UnloadWallet for the blocking version and more details. func (c *Client) UnloadWalletAsync(walletName *string) FutureUnloadWalletResult { - return c.sendCmd(btcjson.NewUnloadWalletCmd(walletName)) + return c.SendCmd(btcjson.NewUnloadWalletCmd(walletName)) } // UnloadWallet unloads the referenced wallet. If the RPC server URL already @@ -2800,11 +2800,11 @@ func (c *Client) UnloadWallet(walletName *string) error { // FutureLoadWalletResult is a future promise to deliver the result of an // LoadWalletAsync RPC invocation (or an applicable error) -type FutureLoadWalletResult chan *response +type FutureLoadWalletResult chan *Response -// Receive waits for the response promised by the future +// Receive waits for the Response promised by the future func (r FutureLoadWalletResult) Receive() (*btcjson.LoadWalletResult, error) { - bytes, err := receiveFuture(r) + bytes, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -2819,7 +2819,7 @@ func (r FutureLoadWalletResult) Receive() (*btcjson.LoadWalletResult, error) { // // See LoadWallet for the blocking version and more details. func (c *Client) LoadWalletAsync(walletName string) FutureLoadWalletResult { - return c.sendCmd(btcjson.NewLoadWalletCmd(walletName)) + return c.SendCmd(btcjson.NewLoadWalletCmd(walletName)) } // LoadWallet loads a wallet from a wallet file or directory. From 73f7eac903576be8c8c08b2069c7a400be047ec7 Mon Sep 17 00:00:00 2001 From: Marius van der Wijden Date: Mon, 13 Sep 2021 21:11:26 +0200 Subject: [PATCH 143/419] btcec: check if recovered pk is at point of infinity --- btcec/signature.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/btcec/signature.go b/btcec/signature.go index cdd7cedfb8..8a8f8301b7 100644 --- a/btcec/signature.go +++ b/btcec/signature.go @@ -353,6 +353,10 @@ func recoverKeyFromSignature(curve *KoblitzCurve, sig *Signature, msg []byte, // step to prevent the jacobian conversion back and forth. Qx, Qy := curve.Add(sRx, sRy, minuseGx, minuseGy) + if Qx.Sign() == 0 && Qy.Sign() == 0 { + return nil, errors.New("point (Qx, Qy) equals the point at infinity") + } + return &PublicKey{ Curve: curve, X: Qx, From 5e6736aad5785f9a3dc8912a122085271f7941c0 Mon Sep 17 00:00:00 2001 From: Marius van der Wijden Date: Mon, 13 Sep 2021 21:38:27 +0200 Subject: [PATCH 144/419] btcec: added testcase for point at infinity --- btcec/signature_test.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/btcec/signature_test.go b/btcec/signature_test.go index ba02a03f76..b58d186775 100644 --- a/btcec/signature_test.go +++ b/btcec/signature_test.go @@ -549,6 +549,12 @@ var recoveryTests = []struct { sig: "0100b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f00b940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549", err: fmt.Errorf("invalid square root"), }, + { + // Point at infinity recovered + msg: "6b8d2c81b11b2d699528dde488dbdf2f94293d0d33c32e347f255fa4a6c1f0a9", + sig: "0079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f817986b8d2c81b11b2d699528dde488dbdf2f94293d0d33c32e347f255fa4a6c1f0a9", + err: fmt.Errorf("point (Qx, Qy) equals the point at infinity"), + }, { // Low R and S values. msg: "ba09edc1275a285fb27bfe82c4eea240a907a0dbaf9e55764b8f318c37d5974f", From 7ae5b74dee05b366e6931cdada4c61e9b40a57b6 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Wed, 15 Sep 2021 18:18:04 -0700 Subject: [PATCH 145/419] build: bump min Go version to 1.16.8 add Go 1.17.1 --- .github/workflows/go.yml | 2 +- README.md | 2 +- docs/installation.md | 2 +- go.mod | 2 +- go.sum | 11 ----------- 5 files changed, 4 insertions(+), 15 deletions(-) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 8803194d69..c7ffb79033 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -6,7 +6,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - go: [1.14, 1.15] + go: [1.16.8, 1.17.1] steps: - name: Set up Go uses: actions/setup-go@v2 diff --git a/README.md b/README.md index 556673825e..5ec1454fcc 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ which are both under active development. ## Requirements -[Go](http://golang.org) 1.14 or newer. +[Go](http://golang.org) 1.16 or newer. ## Installation diff --git a/docs/installation.md b/docs/installation.md index c3c206060b..a74db56022 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -5,7 +5,7 @@ details on how to install on the supported operating systems. ## Requirements -[Go](http://golang.org) 1.11 or newer. +[Go](http://golang.org) 1.16 or newer. ## GPG Verification Key diff --git a/go.mod b/go.mod index 049b97fe6c..7722564f57 100644 --- a/go.mod +++ b/go.mod @@ -14,4 +14,4 @@ require ( golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37 ) -go 1.14 +go 1.16 diff --git a/go.sum b/go.sum index e259d0ec77..4c5a352a89 100644 --- a/go.sum +++ b/go.sum @@ -3,17 +3,14 @@ github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBA github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= 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/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= 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/goleveldb v1.0.0 h1:Tvd0BfvqX9o823q1j2UZ/epQo09eJh6dTcRp79ilIN4= github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= -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/snappy-go v1.0.0 h1:ZxaA6lo2EpxGddsA8JwWOcxlzRybb444sgmeJQMJGQE= github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= @@ -27,13 +24,10 @@ 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/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 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= 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/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= 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= @@ -47,27 +41,22 @@ github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= 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/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37 h1:cg5LA/zNPRzIXIWSCxQW10Rvpy94aQh3LT/ShoCpkHw= golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd h1:nTDtHvHSdCn1m6ITfMRqtOd/9+7a3s8RBNOZ3eYZzJA= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3 h1:0GoQqolDA55aaLxZyTzK/Y2ePZzZTUrRacwib7cNsYQ= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA= 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/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -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= From f8e6854197cd337b652c1260999a8a397d0d4703 Mon Sep 17 00:00:00 2001 From: eugene Date: Mon, 16 Aug 2021 12:40:38 -0400 Subject: [PATCH 146/419] mempool: introduce GetDustThreshold to export dust limit calculation This commit modifies no behavior and would allow other projects to retrieve the dust limit for a particular output type before the amount of the output is known. This is particularly useful in the Lightning Network for channel negotiation. --- mempool/policy.go | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/mempool/policy.go b/mempool/policy.go index 74142bf60c..1fe850797f 100644 --- a/mempool/policy.go +++ b/mempool/policy.go @@ -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,7 +272,7 @@ 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 From 4caf037c52afca038148cf2513f8c41945e57c07 Mon Sep 17 00:00:00 2001 From: naveen <172697+naveensrinivasan@users.noreply.github.com> Date: Fri, 17 Sep 2021 15:07:31 +0000 Subject: [PATCH 147/419] Upgraded the docker version to 1.16 With this changes https://github.com/btcsuite/btcd/pull/1753/ merged in the docker image also has to be upgraded. --- Dockerfile | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 3bbc25712b..ec45ee64c3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,8 +15,13 @@ # 8334 Mainet RPC port ARG ARCH=amd64 - -FROM golang:1.14-alpine3.12 AS build-container +# 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.16-alpine3.12 +# sha256:db2475a1dbb2149508e5db31d7d77a75e6600d54be645f37681f03f2762169ba +FROM golang@sha256:db2475a1dbb2149508e5db31d7d77a75e6600d54be645f37681f03f2762169ba AS build-container ARG ARCH ENV GO111MODULE=on From e98a1a1b4cd7c59465a8f21bce80839b99a7337e Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Wed, 15 Sep 2021 18:12:37 -0700 Subject: [PATCH 148/419] peer+server: add new config option to optionally disable stall detection In this commit, we add a new config options that allows one to start `btcd` in an operating mode that disables the stall detection. This can be useful in simnet/regtest integration tests settings where it's important that `btcd` holds on to its possibly sole connection to the only other node in the test harness. A new config flag has been added to gate this behavior, which is off by default. --- config.go | 12 ++++++++++++ peer/peer.go | 15 +++++++++++++++ server.go | 23 ++++++++++++----------- 3 files changed, 39 insertions(+), 11 deletions(-) diff --git a/config.go b/config.go index 7124fe9290..156084bcf9 100644 --- a/config.go +++ b/config.go @@ -29,6 +29,7 @@ import ( _ "github.com/btcsuite/btcd/database/ffldb" "github.com/btcsuite/btcd/mempool" "github.com/btcsuite/btcd/peer" + "github.com/btcsuite/btcd/wire" "github.com/btcsuite/btcutil" "github.com/btcsuite/go-socks/socks" flags "github.com/jessevdk/go-flags" @@ -135,6 +136,7 @@ type config struct { 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"` OnionProxy string `long:"onion" description:"Connect to tor hidden services via SOCKS5 proxy (eg. 127.0.0.1:9050)"` OnionProxyPass string `long:"onionpass" default-mask:"-" description:"Password for onion proxy server"` @@ -603,6 +605,16 @@ func loadConfig() (*config, []string, error) { 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) + return nil, nil, err + } + // Set the default policy for relaying non-standard transactions // according to the default of the active network. The set // configuration value takes precedence over the default value for the diff --git a/peer/peer.go b/peer/peer.go index 92ac3d27e8..a7b925802f 100644 --- a/peer/peer.go +++ b/peer/peer.go @@ -276,6 +276,13 @@ type Config struct { // 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. @@ -1202,6 +1209,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 @@ -1264,6 +1275,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. diff --git a/server.go b/server.go index ba7932a1a4..746c48dde3 100644 --- a/server.go +++ b/server.go @@ -2054,17 +2054,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, } } From a148fa797a732aefd189514b666cab11bab914c0 Mon Sep 17 00:00:00 2001 From: Jonathan Chappelow Date: Wed, 20 Oct 2021 11:59:18 -0500 Subject: [PATCH 149/419] addrmgr: make KnownAddress methods thread-safe This gives KnownAddress a sync.RWMutex so the exported methods may safely access the na (*wire.NetAddress) and lastattempt fields. The AddrManager is updated to lock the new KnownAddress mutex before assigning to na or lastattempt. The other KnownAddress fields are only accessed by AddrManager, using its own Mutex for synchronization. --- addrmgr/addrmanager.go | 17 ++++++++++++++--- addrmgr/knownaddress.go | 11 +++++++++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/addrmgr/addrmanager.go b/addrmgr/addrmanager.go index fa8f27bcae..4c737b937e 100644 --- a/addrmgr/addrmanager.go +++ b/addrmgr/addrmanager.go @@ -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. @@ -857,8 +859,11 @@ 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 @@ -880,7 +885,9 @@ 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() } } @@ -899,11 +906,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 } @@ -988,7 +997,9 @@ 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() } } diff --git a/addrmgr/knownaddress.go b/addrmgr/knownaddress.go index 15469f374e..5a7674f45b 100644 --- a/addrmgr/knownaddress.go +++ b/addrmgr/knownaddress.go @@ -5,6 +5,7 @@ package addrmgr import ( + "sync" "time" "github.com/btcsuite/btcd/wire" @@ -13,6 +14,7 @@ import ( // KnownAddress tracks information about a known network address that is used // to determine how viable an address is. type KnownAddress struct { + mtx sync.RWMutex // na and lastattempt na *wire.NetAddress srcAddr *wire.NetAddress attempts int @@ -25,19 +27,28 @@ type KnownAddress struct { // NetAddress returns the underlying wire.NetAddress associated with the // known address. func (ka *KnownAddress) NetAddress() *wire.NetAddress { + 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. From d590f3f77d3dd218fb33d297bc84493f1d61bba8 Mon Sep 17 00:00:00 2001 From: pengyonghui <421640644@qq.com> Date: Mon, 18 Oct 2021 15:11:12 +0800 Subject: [PATCH 150/419] fix typo --- mempool/mempool.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mempool/mempool.go b/mempool/mempool.go index 7ada3d2907..5595a11bfe 100644 --- a/mempool/mempool.go +++ b/mempool/mempool.go @@ -1032,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) From c56a053fdfb6389c4855ee00918fdc4d177f03f2 Mon Sep 17 00:00:00 2001 From: pengyonghui <421640644@qq.com> Date: Mon, 18 Oct 2021 15:48:51 +0800 Subject: [PATCH 151/419] fix typos --- mempool/mempool.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/mempool/mempool.go b/mempool/mempool.go index 5595a11bfe..b54856c8b3 100644 --- a/mempool/mempool.go +++ b/mempool/mempool.go @@ -1054,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) @@ -1100,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 @@ -1143,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, @@ -1194,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 { @@ -1366,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. @@ -1435,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. @@ -1488,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. From 31791ba4dc6ef913b1e8eb7bfb6746b1a118e405 Mon Sep 17 00:00:00 2001 From: naveen <172697+naveensrinivasan@users.noreply.github.com> Date: Fri, 17 Sep 2021 16:03:07 +0000 Subject: [PATCH 152/419] Included permissions for GitHub action The default GitHub Action is write which is not required for this action. --- .github/workflows/go.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index c7ffb79033..5da1bebc63 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -2,6 +2,9 @@ name: Build and Test on: [push, pull_request] jobs: build: + # https://github.blog/changelog/2021-04-20-github-actions-control-permissions-for-github_token/ + permissions: + contents: read name: Go CI runs-on: ubuntu-latest strategy: From 65e986844ebd50f0eb47ade893c53103585fce4e Mon Sep 17 00:00:00 2001 From: Aarush Bhat Date: Mon, 6 Sep 2021 11:19:39 +0530 Subject: [PATCH 153/419] Update connmanager_test.go --- connmgr/connmanager_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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()) } From cc7327c194daa4562d9ff472817c3e61448dfa8b Mon Sep 17 00:00:00 2001 From: 3nprob <3nprob@3nprob> Date: Sat, 21 Aug 2021 22:04:31 +0900 Subject: [PATCH 154/419] rpcclient: Add retry with backoffs to HTTP POST requests Adds behavior similar to the retries of persistent RPC connections to HTTP request. * Initial backoff: 500ms * Linear increase * Max retries: 10 Room for future improvement: * Make configurable * Add jitter * Tests for retry behavior --- rpcclient/infrastructure.go | 121 ++++++++++++++++++------------------ 1 file changed, 60 insertions(+), 61 deletions(-) diff --git a/rpcclient/infrastructure.go b/rpcclient/infrastructure.go index 7255289282..63874c1b4e 100644 --- a/rpcclient/infrastructure.go +++ b/rpcclient/infrastructure.go @@ -86,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. @@ -183,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{} @@ -765,10 +761,50 @@ 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) { + protocol := "http" + if !c.config.DisableTLS { + protocol = "https" + } + url := protocol + "://" + c.config.Host + + var err error + var backoff time.Duration + var httpResponse *http.Response + tries := 10 + for i := 0; tries == 0 || i < tries; i++ { + 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) + if err != nil { + 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) + time.Sleep(backoff) + continue + } + break + } if err != nil { jReq.responseChan <- &Response{err: err} return @@ -821,8 +857,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) case <-c.shutdown: break out @@ -834,8 +870,8 @@ out: cleanup: for { select { - case details := <-c.sendPostChan: - details.jsonRequest.responseChan <- &Response{ + case jReq := <-c.sendPostChan: + jReq.responseChan <- &Response{ result: nil, err: ErrClientShutdown, } @@ -852,7 +888,7 @@ 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: @@ -860,10 +896,9 @@ func (c *Client) sendPostRequest(httpReq *http.Request, jReq *jsonRequest) { 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 @@ -885,42 +920,6 @@ func ReceiveFuture(f chan *Response) ([]byte, error) { 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") - 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) - - 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. @@ -935,7 +934,7 @@ func (c *Client) sendRequest(jReq *jsonRequest) { log.Warn(err) } } else { - c.sendPost(jReq) + c.sendPostRequest(jReq) } return } @@ -1428,7 +1427,7 @@ func New(config *ConnConfig, ntfnHandlers *NotificationHandlers) (*Client, error 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{}), @@ -1642,7 +1641,7 @@ func (c *Client) sendAsync() FutureGetBulkResult { marshalledJSON: marshalledRequest, responseChan: responseChan, } - c.sendPost(&request) + c.sendPostRequest(&request) return responseChan } From 843d7607ef8d984ed53fcf8432792b3f852b7594 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:11:00 -0500 Subject: [PATCH 155/419] txscript: Add benchmark for CalcSignatureHash --- txscript/bench_test.go | 52 ++++++++++++++++++++++++++++++++ txscript/data/many_inputs_tx.hex | 1 + 2 files changed, 53 insertions(+) create mode 100644 txscript/bench_test.go create mode 100644 txscript/data/many_inputs_tx.hex diff --git a/txscript/bench_test.go b/txscript/bench_test.go new file mode 100644 index 0000000000..b129b80386 --- /dev/null +++ b/txscript/bench_test.go @@ -0,0 +1,52 @@ +// 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/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) + } + } + } +} 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 From 47806df63d2eba938fd1c27ff55b69ed7651daf4 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Thu, 4 Feb 2021 23:45:31 -0800 Subject: [PATCH 156/419] txscript: Add benchmark for CalcWitnessSigHash --- txscript/bench_test.go | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/txscript/bench_test.go b/txscript/bench_test.go index b129b80386..037ce531f7 100644 --- a/txscript/bench_test.go +++ b/txscript/bench_test.go @@ -50,3 +50,23 @@ func BenchmarkCalcSigHash(b *testing.B) { } } } + +// 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) { + sigHashes := NewTxSigHashes(&manyInputsBenchTx) + + 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) + } + } + } +} From bcb9643d39d86d21ce7bf0ac11464663b22df931 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:11:02 -0500 Subject: [PATCH 157/419] txscript: Add benchmark for script parsing. --- txscript/bench_test.go | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/txscript/bench_test.go b/txscript/bench_test.go index 037ce531f7..51f9aeab4c 100644 --- a/txscript/bench_test.go +++ b/txscript/bench_test.go @@ -70,3 +70,43 @@ func BenchmarkCalcWitnessSigHash(b *testing.B) { } } } + +// 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) + } + + b.ResetTimer() + b.ReportAllocs() + for i := 0; i < b.N; i++ { + pops, err := parseScript(script) + if err != nil { + b.Fatalf("failed to parse script: %v", err) + } + + for _, pop := range pops { + _ = pop.opcode + _ = pop.data + } + } +} From c997417978f04881cb0cce570fd9c2cb6d74ed27 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:11:03 -0500 Subject: [PATCH 158/419] txscript: Introduce zero-alloc script tokenizer. This implements an efficient and zero-allocation script tokenizer that is exported to both provide a new capability to tokenize scripts to external consumers of the API as well as to serve as a base for refactoring the existing highly inefficient internal code. It is important to note that this tokenizer is intended to be used in consensus critical code in the future, so it must exactly follow the existing semantics. The current script parsing mechanism used throughout the txscript module is to fully tokenize the scripts into an array of internal parsed opcodes which are then examined and passed around in order to implement virtually everything related to scripts. While that approach does simplify the analysis of certain scripts and thus provide some nice properties in that regard, it is both extremely inefficient in many cases, and makes it impossible for external consumers of the API to implement any form of custom script analysis without manually implementing a bunch of error prone tokenizing code or, alternatively, the script engine exposing internal structures. For example, as shown by profiling the total memory allocations of an initial sync, the existing script parsing code allocates a total of around 295.12GB, which equates to around 50% of all allocations performed. The zero-alloc tokenizer this introduces will allow that to be reduced to virtually zero. The following is a before and after comparison of tokenizing a large script with a high opcode count using the existing code versus the tokenizer this introduces for both speed and memory allocations: benchmark old ns/op new ns/op delta BenchmarkScriptParsing-8 63464 677 -98.93% benchmark old allocs new allocs delta BenchmarkScriptParsing-8 1 0 -100.00% benchmark old bytes new bytes delta BenchmarkScriptParsing-8 311299 0 -100.00% The following is an overview of the changes: - Introduce new error code ErrUnsupportedScriptVersion - Implement zero-allocation script tokenizer - Add a full suite of tests to ensure the tokenizer works as intended and follows the required consensus semantics - Add an example of using the new tokenizer to count the number of opcodes in a script - Update README.md to include the new example - Update script parsing benchmark to use the new tokenizer --- txscript/README.md | 4 + txscript/bench_test.go | 15 ++- txscript/error.go | 6 + txscript/error_test.go | 2 + txscript/example_test.go | 32 +++++ txscript/tokenizer.go | 186 ++++++++++++++++++++++++++ txscript/tokenizer_test.go | 259 +++++++++++++++++++++++++++++++++++++ 7 files changed, 497 insertions(+), 7 deletions(-) create mode 100644 txscript/tokenizer.go create mode 100644 txscript/tokenizer_test.go diff --git a/txscript/README.md b/txscript/README.md index 004c586d61..f0abb51884 100644 --- a/txscript/README.md +++ b/txscript/README.md @@ -37,6 +37,10 @@ $ go get -u github.com/btcsuite/btcd/txscript * [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 index 51f9aeab4c..673d1cc31d 100644 --- a/txscript/bench_test.go +++ b/txscript/bench_test.go @@ -96,17 +96,18 @@ func BenchmarkScriptParsing(b *testing.B) { b.Fatalf("failed to create benchmark script: %v", err) } + const scriptVersion = 0 b.ResetTimer() b.ReportAllocs() for i := 0; i < b.N; i++ { - pops, err := parseScript(script) - if err != nil { - b.Fatalf("failed to parse script: %v", err) + tokenizer := MakeScriptTokenizer(scriptVersion, script) + for tokenizer.Next() { + _ = tokenizer.Opcode() + _ = tokenizer.Data() + _ = tokenizer.ByteIndex() } - - for _, pop := range pops { - _ = pop.opcode - _ = pop.data + if err := tokenizer.Err(); err != nil { + b.Fatalf("failed to parse script: %v", err) } } } diff --git a/txscript/error.go b/txscript/error.go index a61d02729f..f42b893ea4 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. // ------------------------------------------ @@ -352,6 +357,7 @@ var errorCodeStrings = map[ErrorCode]string{ ErrNotMultisigScript: "ErrNotMultisigScript", ErrTooManyRequiredSigs: "ErrTooManyRequiredSigs", ErrTooMuchNullData: "ErrTooMuchNullData", + ErrUnsupportedScriptVersion: "ErrUnsupportedScriptVersion", ErrEarlyReturn: "ErrEarlyReturn", ErrEmptyStack: "ErrEmptyStack", ErrEvalFalse: "ErrEvalFalse", diff --git a/txscript/error_test.go b/txscript/error_test.go index ebac85fdaa..abfa156577 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"}, diff --git a/txscript/example_test.go b/txscript/example_test.go index 7bf2b3f059..6e17341c4a 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. @@ -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/tokenizer.go b/txscript/tokenizer.go new file mode 100644 index 0000000000..72e00f07e2 --- /dev/null +++ b/txscript/tokenizer.go @@ -0,0 +1,186 @@ +// 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 + 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 + } + + 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 +} + +// 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} +} 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") + } +} From 099784267e52bc6ea11a0012aab56a78e083cb9c Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:11:04 -0500 Subject: [PATCH 159/419] txscript: Add benchmark for DisasmString. --- txscript/bench_test.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/txscript/bench_test.go b/txscript/bench_test.go index 673d1cc31d..3b1ed40d8e 100644 --- a/txscript/bench_test.go +++ b/txscript/bench_test.go @@ -111,3 +111,21 @@ func BenchmarkScriptParsing(b *testing.B) { } } } + +// 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) + } + } +} From f980c9a28d943e926e2a4241b4e89de3e0a6fca6 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:11:05 -0500 Subject: [PATCH 160/419] txscript: Optimize script disasm. This converts the DisasmString function to make use of the new zero-allocation script tokenizer instead of the far less efficient parseScript thereby significantly optimizing the function. In order to facilitate this, the opcode disassembly functionality is split into a separate function called disasmOpcode that accepts the opcode struct and data independently as opposed to requiring a parsed opcode. The new function also accepts a pointer to a string builder so the disassembly can be more efficiently be built. While here, the comment is modified to explicitly call out the script version semantics. The following is a before and after comparison of a large script: benchmark old ns/op new ns/op delta BenchmarkDisasmString-8 102902 40124 -61.01% benchmark old allocs new allocs delta BenchmarkDisasmString-8 46 51 +10.87% benchmark old bytes new bytes delta BenchmarkDisasmString-8 389324 130552 -66.47% --- txscript/opcode.go | 65 +++++++++++++++++++++++++++++----------------- txscript/script.go | 30 ++++++++++++++------- 2 files changed, 61 insertions(+), 34 deletions(-) diff --git a/txscript/opcode.go b/txscript/opcode.go index a878a9667b..7383f881e9 100644 --- a/txscript/opcode.go +++ b/txscript/opcode.go @@ -9,8 +9,10 @@ import ( "crypto/sha1" "crypto/sha256" "encoding/binary" + "encoding/hex" "fmt" "hash" + "strings" "golang.org/x/crypto/ripemd160" @@ -815,45 +817,60 @@ func (pop *parsedOpcode) checkMinimalDataPush() error { 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 { +// 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)) + buf.WriteString(fmt.Sprintf(" 0x%08x", len(data))) } - return fmt.Sprintf("%s 0x%02x", retString, pop.data) + buf.WriteString(fmt.Sprintf(" 0x%02x", data)) +} + +// print returns a human-readable string representation of the opcode for use +// in script disassembly. +func (pop *parsedOpcode) print(compact bool) string { + var buf strings.Builder + disasmOpcode(&buf, pop.opcode, pop.data, compact) + return buf.String() } // bytes returns any data associated with the opcode encoded as it would be in diff --git a/txscript/script.go b/txscript/script.go index 92a50e3761..b7c2ef96f6 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -8,6 +8,7 @@ import ( "bytes" "encoding/binary" "fmt" + "strings" "time" "github.com/btcsuite/btcd/chaincfg/chainhash" @@ -275,20 +276,29 @@ 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 From af757d3d0d21468c994401da82816837a9314f62 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Thu, 18 Apr 2019 20:11:36 -0700 Subject: [PATCH 161/419] txscript: Introduce raw script sighash calc func. This introduces a new function named calcSignatureHashRaw which accepts the raw script bytes to calculate the script hash versus requiring the parsed opcode only to unparse them later in order to make it more flexible for working with raw scripts. Since there are several places in the rest of the code that currently only have access to the parsed opcodes, this modifies the existing calcSignatureHash to first unparse the script before calling the new function. Backport of decred/dcrd:f306a72a16eaabfb7054a26f9d9f850b87b00279 --- txscript/opcode.go | 10 ++++++++-- txscript/reference_test.go | 7 ++++++- txscript/script.go | 41 ++++++++++++++++++++++++++++---------- txscript/sign.go | 5 ++++- 4 files changed, 49 insertions(+), 14 deletions(-) diff --git a/txscript/opcode.go b/txscript/opcode.go index 7383f881e9..893bebdf8d 100644 --- a/txscript/opcode.go +++ b/txscript/opcode.go @@ -2198,7 +2198,10 @@ func opcodeCheckSig(op *parsedOpcode, vm *Engine) error { // to sign itself. subScript = removeOpcodeByData(subScript, fullSigBytes) - hash = calcSignatureHash(subScript, hashType, &vm.tx, vm.txIdx) + hash, err = calcSignatureHash(subScript, hashType, &vm.tx, vm.txIdx) + if err != nil { + return err + } } pubKey, err := btcec.ParsePubKey(pkBytes, btcec.S256()) @@ -2467,7 +2470,10 @@ func opcodeCheckMultiSig(op *parsedOpcode, vm *Engine) error { return err } } else { - hash = calcSignatureHash(script, hashType, &vm.tx, vm.txIdx) + hash, err = calcSignatureHash(script, hashType, &vm.tx, vm.txIdx) + if err != nil { + return err + } } var valid bool diff --git a/txscript/reference_test.go b/txscript/reference_test.go index 5015960b94..6ac9b68f51 100644 --- a/txscript/reference_test.go +++ b/txscript/reference_test.go @@ -863,8 +863,13 @@ func TestCalcSignatureHash(t *testing.T) { } hashType := SigHashType(testVecF64ToUint32(test[3].(float64))) - hash := calcSignatureHash(parsedScript, hashType, &tx, + hash, err := calcSignatureHash(parsedScript, 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[:]) { diff --git a/txscript/script.go b/txscript/script.go index b7c2ef96f6..52bb5b6b35 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -572,13 +572,12 @@ func CalcSignatureHash(script []byte, hashType SigHashType, tx *wire.MsgTx, idx if err != nil { return nil, fmt.Errorf("cannot parse output script: %v", err) } - return calcSignatureHash(parsedScript, hashType, tx, idx), nil + return calcSignatureHash(parsedScript, hashType, tx, idx) } -// 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 { +// calcSignatureHashRaw computes the signature hash for the specified input of +// the target transaction observing the desired signature hash type. +func calcSignatureHashRaw(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). // @@ -606,17 +605,24 @@ func calcSignatureHash(script []parsedOpcode, hashType SigHashType, tx *wire.Msg } // Remove all instances of OP_CODESEPARATOR from the script. - script = removeOpcode(script, OP_CODESEPARATOR) + filteredScript := make([]byte, 0, len(sigScript)) + const scriptVersion = 0 + tokenizer := MakeScriptTokenizer(scriptVersion, sigScript) + var prevOffset int32 + for tokenizer.Next() { + if tokenizer.Opcode() != OP_CODESEPARATOR { + filteredScript = append(filteredScript, + sigScript[prevOffset:tokenizer.ByteIndex()]...) + } + prevOffset = tokenizer.ByteIndex() + } // 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 + txCopy.TxIn[idx].SignatureScript = filteredScript } else { txCopy.TxIn[i].SignatureScript = nil } @@ -670,6 +676,21 @@ func calcSignatureHash(script []parsedOpcode, hashType SigHashType, tx *wire.Msg return chainhash.DoubleHashB(wbuf.Bytes()) } +// calcSignatureHash computes the signature hash for the specified input of the +// target transaction observing the desired signature hash type. +// +// DEPRECATED: Use calcSignatureHashRaw instead +func calcSignatureHash(prevOutScript []parsedOpcode, hashType SigHashType, + tx *wire.MsgTx, idx int) ([]byte, error) { + + sigScript, err := unparseScript(prevOutScript) + if err != nil { + return nil, err + } + + return calcSignatureHashRaw(sigScript, hashType, tx, idx), nil +} + // asSmallInt returns the passed opcode, which must be true according to // isSmallInt(), as an integer. func asSmallInt(op *opcode) int { diff --git a/txscript/sign.go b/txscript/sign.go index 42af9686cb..b9f8b2dbb4 100644 --- a/txscript/sign.go +++ b/txscript/sign.go @@ -345,7 +345,10 @@ 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, err := calcSignatureHash(pkPops, hashType, tx, idx) + if err != nil { + panic(fmt.Sprintf("cannot compute sighash: %v", err)) + } for _, addr := range addresses { // All multisig addresses should be pubkey addresses From c19535b1454325ac363070fe1cdbfe2fbd12bdb0 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:11:07 -0500 Subject: [PATCH 162/419] txscript: Optimize CalcSignatureHash. This modifies the CalcSignatureHash function to make use of the new signature hash calculation function that accepts raw scripts without needing to first parse them. Consequently, it also doubles as a slight optimization to the execution time and a significant reduction in the number of allocations. In order to convert the CalcScriptHash function and keep the same semantics, a new function named checkScriptParses is introduced which will quickly determine if a script can be fully parsed without failure and return the parse failure in the case it can't. The following is a before and after comparison of analyzing a large multiple input transaction: benchmark old ns/op new ns/op delta BenchmarkCalcSigHash-8 3627895 3619477 -0.23% benchmark old allocs new allocs delta BenchmarkCalcSigHash-8 1335 801 -40.00% benchmark old bytes new bytes delta BenchmarkCalcSigHash-8 1373812 1293354 -5.86% --- txscript/script.go | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/txscript/script.go b/txscript/script.go index 52bb5b6b35..112c24acb1 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -567,12 +567,17 @@ func shallowCopyTx(tx *wire.MsgTx) wire.MsgTx { // 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) { - parsedScript, err := parseScript(script) - if err != nil { - return nil, fmt.Errorf("cannot parse output script: %v", err) + const scriptVersion = 0 + if err := checkScriptParses(scriptVersion, script); err != nil { + return nil, err } - return calcSignatureHash(parsedScript, hashType, tx, idx) + + return calcSignatureHashRaw(script, hashType, tx, idx), nil } // calcSignatureHashRaw computes the signature hash for the specified input of @@ -850,6 +855,15 @@ func getWitnessSigOps(pkScript []byte, witness wire.TxWitness) int { 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. From c6f4cafe57cac8fb527be53b6418fe96c655265e Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Thu, 18 Apr 2019 21:12:34 -0700 Subject: [PATCH 163/419] txscript/reference_test: Convert sighash calc test This converts the tests for calculating signature hashes to use the exported function which handles the raw script versus the now deprecated variant requiring parsed opcodes. Backport of 06f769ef72e6042e7f2b5ff1c512ef1371d615e5 --- txscript/reference_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/txscript/reference_test.go b/txscript/reference_test.go index 6ac9b68f51..9d9c8f39ed 100644 --- a/txscript/reference_test.go +++ b/txscript/reference_test.go @@ -836,6 +836,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,15 +856,14 @@ 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, err := calcSignatureHash(parsedScript, hashType, &tx, + hash, err := CalcSignatureHash(subScript, hashType, &tx, int(test[2].(float64))) if err != nil { t.Errorf("TestCalcSignatureHash failed test #%d: "+ From 583b74040dc92978e9c258b7ea64e3da01f361f2 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:11:09 -0500 Subject: [PATCH 164/419] txscript: Make isSmallInt accept raw opcode. This converts the isSmallInt function to accept an opcode as a byte instead of the internal opcode data struct in order to make it more flexible for raw script analysis. The comment is modified to explicitly call out the script version semantics. Finally, it updates all callers accordingly. --- txscript/script.go | 14 ++++++++------ txscript/standard.go | 10 +++++----- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/txscript/script.go b/txscript/script.go index 112c24acb1..58b8e69f0f 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. @@ -45,11 +46,12 @@ 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 @@ -136,7 +138,7 @@ func IsWitnessProgram(script []byte) bool { // bytes. func isWitnessProgram(pops []parsedOpcode) bool { return len(pops) == 2 && - isSmallInt(pops[0].opcode) && + isSmallInt(pops[0].opcode.value) && canonicalPush(pops[1]) && (len(pops[1].data) >= 2 && len(pops[1].data) <= 40) } diff --git a/txscript/standard.go b/txscript/standard.go index 2cad218e95..a447303d62 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -115,10 +115,10 @@ func isMultiSig(pops []parsedOpcode) bool { if l < 4 { return false } - if !isSmallInt(pops[0].opcode) { + if !isSmallInt(pops[0].opcode.value) { return false } - if !isSmallInt(pops[l-2].opcode) { + if !isSmallInt(pops[l-2].opcode.value) { return false } if pops[l-1].opcode.value != OP_CHECKMULTISIG { @@ -153,7 +153,7 @@ func isNullData(pops []parsedOpcode) bool { return l == 2 && pops[0].opcode.value == OP_RETURN && - (isSmallInt(pops[1].opcode) || pops[1].opcode.value <= + (isSmallInt(pops[1].opcode.value) || pops[1].opcode.value <= OP_PUSHDATA4) && len(pops[1].data) <= MaxDataCarrierSize } @@ -705,7 +705,7 @@ func ExtractAtomicSwapDataPushes(version uint16, pkScript []byte) (*AtomicSwapDa return nil, nil } pushes.SecretSize = int64(locktime) - } else if op := pops[2].opcode; isSmallInt(op) { + } else if op := pops[2].opcode; isSmallInt(op.value) { pushes.SecretSize = int64(asSmallInt(op)) } else { return nil, nil @@ -716,7 +716,7 @@ func ExtractAtomicSwapDataPushes(version uint16, pkScript []byte) (*AtomicSwapDa return nil, nil } pushes.LockTime = int64(locktime) - } else if op := pops[11].opcode; isSmallInt(op) { + } else if op := pops[11].opcode; isSmallInt(op.value) { pushes.LockTime = int64(asSmallInt(op)) } else { return nil, nil From dfb1a6797b724873f8d3f785b76f86b9c58a6200 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:11:11 -0500 Subject: [PATCH 165/419] txscript: Make asSmallInt accept raw opcode. This converts the asSmallInt function to accept an opcode as a byte instead of the internal opcode data struct in order to make it more flexible for raw script analysis. It also updates all callers accordingly. --- txscript/script.go | 10 +++++----- txscript/standard.go | 16 ++++++++-------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/txscript/script.go b/txscript/script.go index 58b8e69f0f..3dfd82e139 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -159,7 +159,7 @@ func ExtractWitnessProgramInfo(script []byte) (int, []byte, error) { "unable to extract version or witness program") } - witnessVersion := asSmallInt(pops[0].opcode) + witnessVersion := asSmallInt(pops[0].opcode.value) witnessProgram := pops[1].data return witnessVersion, witnessProgram, nil @@ -700,12 +700,12 @@ func calcSignatureHash(prevOutScript []parsedOpcode, hashType SigHashType, // 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 @@ -730,7 +730,7 @@ func getSigOpCount(pops []parsedOpcode, precise bool) int { if precise && i > 0 && pops[i-1].opcode.value >= OP_1 && pops[i-1].opcode.value <= OP_16 { - nSigs += asSmallInt(pops[i-1].opcode) + nSigs += asSmallInt(pops[i-1].opcode.value) } else { nSigs += MaxPubKeysPerMultiSig } diff --git a/txscript/standard.go b/txscript/standard.go index a447303d62..94b3cce57b 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -127,7 +127,7 @@ func isMultiSig(pops []parsedOpcode) bool { // Verify the number of pubkeys specified matches the actual number // of pubkeys provided. - if l-2-1 != asSmallInt(pops[l-2].opcode) { + if l-2-1 != asSmallInt(pops[l-2].opcode.value) { return false } @@ -238,7 +238,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(pops[0].opcode.value) + 1 case NullDataTy: fallthrough @@ -395,8 +395,8 @@ func CalcMultiSigStats(script []byte) (int, int, error) { return 0, 0, scriptError(ErrNotMultisigScript, str) } - numSigs := asSmallInt(pops[0].opcode) - numPubKeys := asSmallInt(pops[len(pops)-2].opcode) + numSigs := asSmallInt(pops[0].opcode.value) + numPubKeys := asSmallInt(pops[len(pops)-2].opcode.value) return numPubKeys, numSigs, nil } @@ -617,8 +617,8 @@ func ExtractPkScriptAddrs(pkScript []byte, chainParams *chaincfg.Params) (Script // 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) + requiredSigs = asSmallInt(pops[0].opcode.value) + numPubKeys := asSmallInt(pops[len(pops)-2].opcode.value) // Extract the public keys while skipping any that are invalid. addrs = make([]btcutil.Address, 0, numPubKeys) @@ -706,7 +706,7 @@ func ExtractAtomicSwapDataPushes(version uint16, pkScript []byte) (*AtomicSwapDa } pushes.SecretSize = int64(locktime) } else if op := pops[2].opcode; isSmallInt(op.value) { - pushes.SecretSize = int64(asSmallInt(op)) + pushes.SecretSize = int64(asSmallInt(op.value)) } else { return nil, nil } @@ -717,7 +717,7 @@ func ExtractAtomicSwapDataPushes(version uint16, pkScript []byte) (*AtomicSwapDa } pushes.LockTime = int64(locktime) } else if op := pops[11].opcode; isSmallInt(op.value) { - pushes.LockTime = int64(asSmallInt(op)) + pushes.LockTime = int64(asSmallInt(op.value)) } else { return nil, nil } From 05aa488a877faa2fabdac38e024f9f72aa3abe4a Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:11:38 -0500 Subject: [PATCH 166/419] txscript: Add benchmark for IsPayToPubKey --- txscript/bench_test.go | 15 +++++++++++++++ txscript/script.go | 10 ++++++++++ 2 files changed, 25 insertions(+) diff --git a/txscript/bench_test.go b/txscript/bench_test.go index 3b1ed40d8e..6415c595a5 100644 --- a/txscript/bench_test.go +++ b/txscript/bench_test.go @@ -129,3 +129,18 @@ func BenchmarkDisasmString(b *testing.B) { } } } + +// 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) + } +} diff --git a/txscript/script.go b/txscript/script.go index 3dfd82e139..c642069ced 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -63,6 +63,16 @@ func isScriptHash(pops []parsedOpcode) bool { 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 { + pops, err := parseScript(script) + if err != nil { + return false + } + return isPubkey(pops) +} + // IsPayToScriptHash returns true if the script is in the standard // pay-to-script-hash (P2SH) format, false otherwise. func IsPayToScriptHash(script []byte) bool { From 99cb679b6f170003834de4ca326bfcf960bc1629 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Thu, 4 Feb 2021 14:06:56 -0800 Subject: [PATCH 167/419] txscript: Optimize IsPayToPubKey This converts the IsPayToScriptHash function to analyze the raw script instead of using the far less efficient parseScript, thereby significantly optimizing the function. In order to accomplish this, it introduces four new functions: extractCompressedPubKey, extractUncompressedPubKey, extractPubKey, and isPubKeyScript. The extractPubKey function makes use of extractCompressedPubKey and extractUncompressedPubKey to combine their functionality as a convenience and isPubKeyScript is defined in terms of extractPubKey. The extractCompressedPubKey works with the raw script bytes to simultaneously determine if the script is a pay-to-compressed-pubkey script, and in the case it is, extract and return the raw compressed pubkey bytes. Similarly, the extractUncompressedPubKey works in the same way except it determines if the script is a pay-to-uncompressed-pubkey script and returns the raw uncompressed pubkey bytes in the case it is. The extract function approach was chosen because it is common for callers to want to only extract relevant details from a script if the script is of the specific type. Extracting those details requires performing the exact same checks to ensure the script is of the correct type, so it is more efficient to combine the two into one and define the type determination in terms of the result so long as the extraction does not require allocations. The following is a before and after comparison of analyzing a large script: benchmark old ns/op new ns/op delta BenchmarkIsPubKeyScript-8 62323 2.97 -100.00% benchmark old allocs new allocs delta BenchmarkIsPubKeyScript-8 1 0 -100.00% benchmark old bytes new bytes delta BenchmarkIsPubKeyScript-8 311299 0 -100.00% --- txscript/script.go | 6 +---- txscript/standard.go | 58 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 5 deletions(-) diff --git a/txscript/script.go b/txscript/script.go index c642069ced..00df52167b 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -66,11 +66,7 @@ func isScriptHash(pops []parsedOpcode) bool { // IsPayToPubKey returns true if the script is in the standard pay-to-pubkey // (P2PK) format, false otherwise. func IsPayToPubKey(script []byte) bool { - pops, err := parseScript(script) - if err != nil { - return false - } - return isPubkey(pops) + return isPubKeyScript(script) } // IsPayToScriptHash returns true if the script is in the standard diff --git a/txscript/standard.go b/txscript/standard.go index 94b3cce57b..0a835dbb4f 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -85,6 +85,64 @@ func (t ScriptClass) String() string { return scriptClassToName[t] } +// 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 +} + +// 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) +} + +// 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 +} + // isPubkey returns true if the script passed is a pay-to-pubkey transaction, // false otherwise. func isPubkey(pops []parsedOpcode) bool { From 2d2608c34e293f5d95b132aba67bf1b58de8926f Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Thu, 4 Feb 2021 14:52:11 -0800 Subject: [PATCH 168/419] txscript: Add benchmark for IsPayToPubKeyHash --- txscript/bench_test.go | 15 +++++++++++++++ txscript/script.go | 10 ++++++++++ 2 files changed, 25 insertions(+) diff --git a/txscript/bench_test.go b/txscript/bench_test.go index 6415c595a5..401b9683a5 100644 --- a/txscript/bench_test.go +++ b/txscript/bench_test.go @@ -144,3 +144,18 @@ func BenchmarkIsPubKeyScript(b *testing.B) { _ = 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) + } +} diff --git a/txscript/script.go b/txscript/script.go index 00df52167b..fb4fc8bc88 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -69,6 +69,16 @@ 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 { + pops, err := parseScript(script) + if err != nil { + return false + } + return isPubkeyHash(pops) +} + // IsPayToScriptHash returns true if the script is in the standard // pay-to-script-hash (P2SH) format, false otherwise. func IsPayToScriptHash(script []byte) bool { From c771f4fb386e42a9363b614c58b536504feea0c2 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Thu, 4 Feb 2021 14:09:28 -0800 Subject: [PATCH 169/419] txscript: Optimize IsPayToPubKeyHash This converts the IsPayToPubKeyHash function to analyze the raw script instead of using the far less efficient parseScript, thereby significantly optimization the function. In order to accomplish this, it introduces two new functions. The first one is named extractPubKeyHash and works with the raw script bytes to simultaneously determine if the script is a pay-to-pubkey-hash script, and in the case it is, extract and return the hash. The second new function is named isPubKeyHashScript and is defined in terms of the former. The extract function approach was chosen because it is common for callers to want to only extract relevant details from a script if the script is of the specific type. Extracting those details requires performing the exact same checks to ensure the script is of the correct type, so it is more efficient to combine the two into one and define the type determination in terms of the result so long as the extraction does not require allocations. The following is a before and after comparison of analyzing a large script: benchmark old ns/op new ns/op delta BenchmarkIsPubKeyHashScript-8 62228 0.45 -100.00% benchmark old allocs new allocs delta BenchmarkIsPubKeyHashScript-8 1 0 -100.00% benchmark old bytes new bytes delta BenchmarkIsPubKeyHashScript-8 311299 0 -100.00% --- txscript/script.go | 6 +----- txscript/standard.go | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/txscript/script.go b/txscript/script.go index fb4fc8bc88..b154c1106d 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -72,11 +72,7 @@ func IsPayToPubKey(script []byte) bool { // IsPayToPubKeyHash returns true if the script is in the standard // pay-to-pubkey-hash (P2PKH) format, false otherwise. func IsPayToPubKeyHash(script []byte) bool { - pops, err := parseScript(script) - if err != nil { - return false - } - return isPubkeyHash(pops) + return isPubKeyHashScript(script) } // IsPayToScriptHash returns true if the script is in the standard diff --git a/txscript/standard.go b/txscript/standard.go index 0a835dbb4f..f7948f7930 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -143,6 +143,30 @@ 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] + } + + 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 +} + // isPubkey returns true if the script passed is a pay-to-pubkey transaction, // false otherwise. func isPubkey(pops []parsedOpcode) bool { From 665c29802ed3b6034396e4195b2abad8c77d2ab5 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:11:13 -0500 Subject: [PATCH 170/419] txscript: Add benchmark for IsPayToScriptHash. --- txscript/bench_test.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/txscript/bench_test.go b/txscript/bench_test.go index 401b9683a5..e47cf21fbe 100644 --- a/txscript/bench_test.go +++ b/txscript/bench_test.go @@ -159,3 +159,18 @@ func BenchmarkIsPubKeyHashScript(b *testing.B) { _ = 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) + } +} From 215af7ff5427d405d0443aa9b0c4bdb120f55f80 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:11:14 -0500 Subject: [PATCH 171/419] txscript: Optimize IsPayToScriptHash. This converts the IsPayToScriptHash function to analyze the raw script instead of using the far less efficient parseScript thereby significantly optimizing the function. In order to accomplish this, it introduces two new functions. The first one is named extractScriptHash and works with the raw script bytes to simultaneously determine if the script is a p2sh script, and in the case it is, extract and return the hash. The second new function is named isScriptHashScript and is defined in terms of the former. The extract function approach was chosen because it is common for callers to want to only extract relevant details from a script if the script is of the specific type. Extracting those details requires performing the exact same checks to ensure the script is of the correct type, so it is more efficient to combine the two into one and define the type determination in terms of the result so long as the extraction does not require allocations. Finally, this also deprecates the isScriptHash function that requires opcodes in favor of the new functions and modifies the comment on IsPayToScriptHash to explicitly call out the script version semantics. The following is a before and after comparison of analyzing a large script that is not a p2sh script: benchmark old ns/op new ns/op delta BenchmarkIsPayToScriptHash-8 62393 0.60 -100.00% benchmark old allocs new allocs delta BenchmarkIsPayToScriptHash-8 1 0 -100.00% benchmark old bytes new bytes delta BenchmarkIsPayToScriptHash-8 311299 0 -100.00% --- txscript/script.go | 14 +++++++++----- txscript/standard.go | 26 ++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/txscript/script.go b/txscript/script.go index b154c1106d..a8cfd16656 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -56,6 +56,8 @@ func isSmallInt(op byte) bool { // isScriptHash returns true if the script passed is a pay-to-script-hash // transaction, false otherwise. +// +// DEPRECATED. Use isScriptHashScript or extractScriptHash instead. func isScriptHash(pops []parsedOpcode) bool { return len(pops) == 3 && pops[0].opcode.value == OP_HASH160 && @@ -77,12 +79,14 @@ func IsPayToPubKeyHash(script []byte) bool { // 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) + return isScriptHashScript(script) } // isWitnessScriptHash returns true if the passed script is a diff --git a/txscript/standard.go b/txscript/standard.go index f7948f7930..a02f87232d 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -167,6 +167,32 @@ 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] + } + + 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 +} + // isPubkey returns true if the script passed is a pay-to-pubkey transaction, // false otherwise. func isPubkey(pops []parsedOpcode) bool { From 4d31d1599dc351183246aa4e85c9d77b199105f9 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:11:15 -0500 Subject: [PATCH 172/419] txscript: Add benchmarks for IsMutlsigScript. --- txscript/bench_test.go | 45 ++++++++++++++++++++++++++++++++++++++++++ txscript/standard.go | 21 ++++++++++++++++++++ 2 files changed, 66 insertions(+) diff --git a/txscript/bench_test.go b/txscript/bench_test.go index e47cf21fbe..49be4958c6 100644 --- a/txscript/bench_test.go +++ b/txscript/bench_test.go @@ -174,3 +174,48 @@ func BenchmarkIsPayToScriptHash(b *testing.B) { _ = 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") + } + } +} diff --git a/txscript/standard.go b/txscript/standard.go index a02f87232d..25483aebe5 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -248,6 +248,27 @@ func isMultiSig(pops []parsedOpcode) bool { return true } +// 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) { + if len(script) == 0 || script == nil { + return false, nil + } + + pops, err := parseScript(script) + if err != nil { + return false, err + } + + return isMultiSig(pops), nil +} + // isNullData returns true if the passed script is a null data transaction, // false otherwise. func isNullData(pops []parsedOpcode) bool { From 0eaae2663ba9955de61a2c6bf52b008dd40cc7f6 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:11:16 -0500 Subject: [PATCH 173/419] txscript: Optimize IsMultisigScript. This converts the IsMultisigScript function to make use of the new tokenizer instead of the far less efficient parseScript thereby significantly optimizing the function. In order to accomplish this, it introduces two new functions. The first one is named extractMultisigScriptDetails and works with the raw script bytes to simultaneously determine if the script is a multisignature script, and in the case it is, extract and return the relevant details. The second new function is named isMultisigScript and is defined in terms of the former. The extract function accepts the script version, raw script bytes, and a flag to determine whether or not the public keys should also be extracted. The flag is provided because extracting pubkeys results in an allocation that the caller might wish to avoid. The extract function approach was chosen because it is common for callers to want to only extract relevant details from a script if the script is of the specific type. Extracting those details requires performing the exact same checks to ensure the script is of the correct type, so it is more efficient to combine the two into one and define the type determination in terms of the result so long as the extraction does not require allocations. It is important to note that this new implementation intentionally has a semantic difference from the existing implementation in that it will now correctly identify a multisig script with zero pubkeys whereas previously it incorrectly required at least one pubkey. This change is acceptable because the function only deals with standardness rather than consensus rules. Finally, this also deprecates the isMultiSig function that requires opcodes in favor of the new functions and deprecates the error return on the export IsMultisigScript function since it really does not make sense given the purpose of the function. The following is a before and after comparison of analyzing both a large script that is not a multisig script and a 1-of-2 multisig public key script: benchmark old ns/op new ns/op delta BenchmarkIsMultisigScriptLarge-8 64166 5.52 -99.99% BenchmarkIsMultisigScript-8 630 59.4 -90.57% benchmark old allocs new allocs delta BenchmarkIsMultisigScriptLarge-8 1 0 -100.00% BenchmarkIsMultisigScript-8 1 0 -100.00% benchmark old bytes new bytes delta BenchmarkIsMultisigScriptLarge-8 311299 0 -100.00% BenchmarkIsMultisigScript-8 2304 0 -100.00% --- txscript/engine.go | 21 ++++++++ txscript/standard.go | 116 +++++++++++++++++++++++++++++++++++++++---- 2 files changed, 127 insertions(+), 10 deletions(-) diff --git a/txscript/engine.go b/txscript/engine.go index f2d7b303c1..3c76b74794 100644 --- a/txscript/engine.go +++ b/txscript/engine.go @@ -580,6 +580,27 @@ 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 { diff --git a/txscript/standard.go b/txscript/standard.go index 25483aebe5..096de4e561 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -216,6 +216,8 @@ func isPubkeyHash(pops []parsedOpcode) bool { // isMultiSig returns true if the passed script is a multisig transaction, false // otherwise. +// +// DEPECATED. Use isMultisigScript or extractMultisigScriptDetails instead. func isMultiSig(pops []parsedOpcode) bool { // The absolute minimum is 1 pubkey: // OP_0/OP_1-16 OP_1 OP_CHECKMULTISIG @@ -248,6 +250,108 @@ func isMultiSig(pops []parsedOpcode) bool { return true } +// 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. // @@ -257,16 +361,8 @@ func isMultiSig(pops []parsedOpcode) bool { // // The error is DEPRECATED and will be removed in the major version bump. func IsMultisigScript(script []byte) (bool, error) { - if len(script) == 0 || script == nil { - return false, nil - } - - pops, err := parseScript(script) - if err != nil { - return false, err - } - - return isMultiSig(pops), nil + const scriptVersion = 0 + return isMultisigScript(scriptVersion, script), nil } // isNullData returns true if the passed script is a null data transaction, From 02dab1695f3d99299f6448523529197cfca584d3 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:11:17 -0500 Subject: [PATCH 174/419] txscript: Add benchmarks for IsMutlsigSigScript. --- txscript/bench_test.go | 48 ++++++++++++++++++++++++++++++++++++++++++ txscript/standard.go | 18 ++++++++++++++++ 2 files changed, 66 insertions(+) diff --git a/txscript/bench_test.go b/txscript/bench_test.go index 49be4958c6..41d79ccba1 100644 --- a/txscript/bench_test.go +++ b/txscript/bench_test.go @@ -219,3 +219,51 @@ func BenchmarkIsMultisigScript(b *testing.B) { } } } + +// 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") + } + } +} diff --git a/txscript/standard.go b/txscript/standard.go index 096de4e561..51dcbfb9ca 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -365,6 +365,24 @@ func IsMultisigScript(script []byte) (bool, error) { return isMultisigScript(scriptVersion, script), nil } +// IsMultisigSigScript takes a script, parses it, then returns whether or +// not it is a multisignature script. +func IsMultisigSigScript(script []byte) bool { + if len(script) == 0 || script == nil { + return false + } + pops, err := parseScript(script) + if err != nil { + return false + } + subPops, err := parseScript(pops[len(pops)-1].data) + if err != nil { + return false + } + + return isMultiSig(subPops) +} + // isNullData returns true if the passed script is a null data transaction, // false otherwise. func isNullData(pops []parsedOpcode) bool { From 34ebf0f32f4729eb5f37133cae9f9f2b4fdc7033 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:11:18 -0500 Subject: [PATCH 175/419] txscript: Optimize IsMultisigSigScript. This converts the IsMultisigSigScript function to analyze the raw script and make use of the new tokenizer instead of the far less efficient parseScript thereby significantly optimizing the function. In order to accomplish this, it first rejects scripts that can't possibly fit the bill due to the final byte of what would be the redeem script not being the appropriate opcode or the overall script not having enough bytes. Then, it uses a new function that is introduced named finalOpcodeData that uses the tokenizer to return any data associated with the final opcode in the signature script (which will be nil for non-push opcodes or if the script fails to parse) and analyzes it as if it were a redeem script when it is non nil. It is also worth noting that this new implementation intentionally has the same semantic difference from the existing implementation as the updated IsMultisigScript function in regards to allowing zero pubkeys whereas previously it incorrectly required at least one pubkey. Finally, the comment is modified to explicitly call out the script version semantics. The following is a before and after comparison of analyzing a large script that is not a multisig script and 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): benchmark old ns/op new ns/op delta BenchmarkIsMultisigSigScriptLarge-8 69328 2.93 -100.00% BenchmarkIsMultisigSigScript-8 2375 146 -93.85% benchmark old allocs new allocs delta BenchmarkIsMultisigSigScriptLarge-8 5 0 -100.00% BenchmarkIsMultisigSigScript-8 3 0 -100.00% benchmark old bytes new bytes delta BenchmarkIsMultisigSigScriptLarge-8 330035 0 -100.00% BenchmarkIsMultisigSigScript-8 9472 0 -100.00% --- txscript/script.go | 19 +++++++++++++++++++ txscript/standard.go | 37 +++++++++++++++++++++++++++---------- 2 files changed, 46 insertions(+), 10 deletions(-) diff --git a/txscript/script.go b/txscript/script.go index a8cfd16656..eb5be8b7ca 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -769,6 +769,25 @@ func GetSigOpCount(script []byte) int { return getSigOpCount(pops, 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 // scriptPubKey. If bip16 is true then scriptSig may be searched for the // Pay-To-Script-Hash script in order to find the precise number of signature diff --git a/txscript/standard.go b/txscript/standard.go index 51dcbfb9ca..272b42b8fa 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -365,22 +365,39 @@ func IsMultisigScript(script []byte) (bool, error) { return isMultisigScript(scriptVersion, script), nil } -// IsMultisigSigScript takes a script, parses it, then returns whether or -// not it is a multisignature script. +// 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 { - if len(script) == 0 || script == nil { - return false - } - pops, err := parseScript(script) - if err != nil { + 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 } - subPops, err := parseScript(pops[len(pops)-1].data) - if err != nil { + + // 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 } - return isMultiSig(subPops) + // Finally, return if that possible redeem script is a multisig script. + return isMultisigScript(scriptVersion, possibleRedeemScript) } // isNullData returns true if the passed script is a null data transaction, From ce1513df03cfc708b2f6eacd1080e6f078455c84 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:11:25 -0500 Subject: [PATCH 176/419] txscript: Add benchmark for IsPushOnlyScript. --- txscript/bench_test.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/txscript/bench_test.go b/txscript/bench_test.go index 41d79ccba1..ca64267a8e 100644 --- a/txscript/bench_test.go +++ b/txscript/bench_test.go @@ -267,3 +267,18 @@ func BenchmarkIsMultisigSigScript(b *testing.B) { } } } + +// 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) + } +} From 2d5f7cf82540247f716d65f91dcbc934e67ccb67 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:11:26 -0500 Subject: [PATCH 177/419] txscript: Optimize IsPushOnlyScript. This converts the IsPushOnlyScript function to make use of the new tokenizer instead of the far less efficient parseScript thereby significantly optimizing the function. It also deprecates the isPushOnly function that requires opcodes in favor of the new function and modifies the comment on IsPushOnlyScript to explicitly call out the script version semantics. The following is a before and after comparison of analyzing a large script: benchmark old ns/op new ns/op delta BenchmarkIsPushOnlyScript-8 62412 622 -99.00% benchmark old allocs new allocs delta BenchmarkIsPushOnlyScript-8 1 0 -100.00% benchmark old bytes new bytes delta BenchmarkIsPushOnlyScript-8 311299 0 -100.00% --- txscript/script.go | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/txscript/script.go b/txscript/script.go index eb5be8b7ca..43048e9526 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -182,6 +182,8 @@ func ExtractWitnessProgramInfo(script []byte) (int, []byte, error) { } // isPushOnly returns true if the script only pushes data, false otherwise. +// +// DEPRECATED. Use IsPushOnlyScript instead. 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 @@ -199,15 +201,27 @@ func isPushOnly(pops []parsedOpcode) bool { 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 + 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 + } } - return isPushOnly(pops) + return tokenizer.Err() == nil } // parseScriptTemplate is the same as parseScript but allows the passing of the From e422d42d7fdde45c222810363d24b8eb3340cf2a Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Fri, 19 Apr 2019 01:43:18 -0700 Subject: [PATCH 178/419] txscript: Add benchmark IsPayToWitnessPubkeyHash --- txscript/bench_test.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/txscript/bench_test.go b/txscript/bench_test.go index ca64267a8e..de6636d9e7 100644 --- a/txscript/bench_test.go +++ b/txscript/bench_test.go @@ -282,3 +282,18 @@ func BenchmarkIsPushOnlyScript(b *testing.B) { _ = 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) + } +} From 54d08ebd5fa1706790e2cf73e87804b071368a0c Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Thu, 4 Feb 2021 13:22:40 -0800 Subject: [PATCH 179/419] txscript: Optimize IsPayToWitnessPubKeyHash This converts the IsPayToWitnessPubKeyHash function to analyze the raw script instead of the far less efficient parseScript, thereby significantly optimizing the function. In order to accomplish this, it introduces two new functions. The first one is named extractWitnessPubKeyHash and works with the raw script bytes to simultaneously deteremine if the script is a p2wkh, and in case it is, extract and return the hash. The second new function is name isWitnessPubKeyHashScript which is defined in terms of the former. The extract function is approach was chosen because it is common for callers to want to only extract relevant details from the script if the script is of the specific type. Extracting those details requires the exact same checks to ensure the script is of the correct type, so it is more efficient to combine the two and define the type determination in terms of the result so long as the extraction does not require allocations. Finally, this deprecates the isWitnessPubKeyHash function that requires opcodes in favor of the new functions and modifies the comment on IsPayToWitnessPubKeyHash to explicitly call out the script version semantics. The following is a before and after comparison of executing IsPayToWitnessPubKeyHash on a large script: benchmark old ns/op new ns/op delta BenchmarkIsWitnessPubKeyHash-8 68927 0.53 -100.00% benchmark old allocs new allocs delta BenchmarkIsWitnessPubKeyHash-8 1 0 -100.00% benchmark old bytes new bytes delta BenchmarkIsWitnessPubKeyHash-8 311299 0 -100.00% --- txscript/script.go | 6 +----- txscript/standard.go | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/txscript/script.go b/txscript/script.go index 43048e9526..59dc2e272b 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -110,11 +110,7 @@ func IsPayToWitnessScriptHash(script []byte) bool { // 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 diff --git a/txscript/standard.go b/txscript/standard.go index 272b42b8fa..513c9ce181 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -400,6 +400,27 @@ func IsMultisigSigScript(script []byte) bool { 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) == 22 && + script[0] == OP_0 && + script[1] == OP_DATA_20 { + + return script[2:22] + } + 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 +} + // isNullData returns true if the passed script is a null data transaction, // false otherwise. func isNullData(pops []parsedOpcode) bool { From 728ce1001d210f291796a0ad1748be2fc3abd505 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Fri, 19 Apr 2019 01:57:31 -0700 Subject: [PATCH 180/419] txscript: Add benchmark for IsPayToWitnessScriptHash --- txscript/bench_test.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/txscript/bench_test.go b/txscript/bench_test.go index de6636d9e7..529d32f7ff 100644 --- a/txscript/bench_test.go +++ b/txscript/bench_test.go @@ -297,3 +297,18 @@ func BenchmarkIsWitnessPubKeyHash(b *testing.B) { _ = 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) + } +} From 55a6bb5e325b8a9511e485160420c0acf236b44a Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Thu, 4 Feb 2021 13:39:10 -0800 Subject: [PATCH 181/419] txscript: Optimize IsPayToWitnessScriptHash This converts the IsPayToWitnessScriptHash function to analyze the raw script instead of using the far less efficient parseScript, thereby significantly optimizing the function. In order to accomplish this, it introduces two new functions. The first one is named extractWitnessScriptHash and works with the raw script byte to simultaneously deteremine if the script is a p2wsh script, and in the case that is is, extract and return the hash. The second new function is named isWitnessScriptHashScript and is defined in terms of the former. The extract function approach was chosed because it is common for callers to want to only extract relevant details from a script if the script is of the specific type. Extracting those details requires performing the exact same checks to ensure the script is of the correct type, so it is more efficient to combine the two into one and define the type determination in terms of the result, so long as the extraction does not require allocations. Finally, this also deprecates the isWitnessScriptHash function that requires opcodes in favor of the new functions and modifies the comment on IsPayToWitnessScriptHash to call out the script version semantics. The following is a before and after comparison of executing IsPayToWitnessScriptHash on a large script: benchmark old ns/op new ns/op delta BenchmarkIsWitnessScriptHash-8 62774 0.63 -100.00% benchmark old allocs new allocs delta BenchmarkIsWitnessScriptHash-8 1 0 -100.00% benchmark old bytes new bytes delta BenchmarkIsWitnessScriptHash-8 311299 0 -100.00% --- txscript/script.go | 6 +----- txscript/standard.go | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/txscript/script.go b/txscript/script.go index 59dc2e272b..5968cec72a 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -100,11 +100,7 @@ func isWitnessScriptHash(pops []parsedOpcode) bool { // 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 diff --git a/txscript/standard.go b/txscript/standard.go index 513c9ce181..a53180f148 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -421,6 +421,28 @@ func isWitnessPubKeyHashScript(script []byte) bool { return extractWitnessPubKeyHash(script) != nil } +// extractWitnessScriptHash 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 extractWitnessScriptHash(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) == 34 && + script[0] == OP_0 && + 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 extractWitnessScriptHash(script) != nil +} + // isNullData returns true if the passed script is a null data transaction, // false otherwise. func isNullData(pops []parsedOpcode) bool { From e4118c914fb8cdcced379a41b62f95402796cbed Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:11:49 -0500 Subject: [PATCH 182/419] txscript: Add benchmark for IsNullData --- txscript/bench_test.go | 15 +++++++++++++++ txscript/script.go | 10 ++++++++++ 2 files changed, 25 insertions(+) diff --git a/txscript/bench_test.go b/txscript/bench_test.go index 529d32f7ff..fda8377141 100644 --- a/txscript/bench_test.go +++ b/txscript/bench_test.go @@ -312,3 +312,18 @@ func BenchmarkIsWitnessScriptHash(b *testing.B) { _ = 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) + } +} diff --git a/txscript/script.go b/txscript/script.go index 5968cec72a..7f812207f9 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -151,6 +151,16 @@ func isWitnessProgram(pops []parsedOpcode) bool { (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 { + pops, err := parseScript(script) + if err != nil { + return false + } + return isNullData(pops) +} + // 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) { From 5f771c1aaa5db7427011de1478182ed0d95ecf37 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Thu, 4 Feb 2021 15:15:34 -0800 Subject: [PATCH 183/419] txscript: Optimize IsNullData This converts the IsNullData function to analyze the raw script instead of using the far less efficient parseScript, thereby significantly optimizing the function. The following is a before and after comparison of analyzing a large script: benchmark old ns/op new ns/op delta BenchmarkIsNullDataScript-8 62495 2.65 -100.00% benchmark old allocs new allocs delta BenchmarkIsNullDataScript-8 1 0 -100.00% benchmark old bytes new bytes delta BenchmarkIsNullDataScript-8 311299 0 -100.00% --- txscript/script.go | 7 ++----- txscript/standard.go | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/txscript/script.go b/txscript/script.go index 7f812207f9..691e31cc64 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -154,11 +154,8 @@ func isWitnessProgram(pops []parsedOpcode) bool { // IsNullData returns true if the passed script is a null data script, false // otherwise. func IsNullData(script []byte) bool { - pops, err := parseScript(script) - if err != nil { - return false - } - return isNullData(pops) + const scriptVersion = 0 + return isNullDataScript(scriptVersion, script) } // ExtractWitnessProgramInfo attempts to extract the witness program version, diff --git a/txscript/standard.go b/txscript/standard.go index a53180f148..9825f61bea 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -461,6 +461,41 @@ func isNullData(pops []parsedOpcode) bool { len(pops[1].data) <= MaxDataCarrierSize } +// 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 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 + } + + // 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 { From 77660b7fb0e2de0fd4d159fd09e29bf4025690df Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:12:20 -0500 Subject: [PATCH 184/419] txscript: Add benchmark for IsUnspendable. --- txscript/bench_test.go | 14 ++++++++++++++ txscript/script_test.go | 13 ------------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/txscript/bench_test.go b/txscript/bench_test.go index fda8377141..c8f7d0f790 100644 --- a/txscript/bench_test.go +++ b/txscript/bench_test.go @@ -327,3 +327,17 @@ func BenchmarkIsNullDataScript(b *testing.B) { _ = 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) + } +} diff --git a/txscript/script_test.go b/txscript/script_test.go index 34c8ef9740..665d9ef633 100644 --- a/txscript/script_test.go +++ b/txscript/script_test.go @@ -4334,16 +4334,3 @@ func TestIsUnspendable(t *testing.T) { } } } - -// BenchmarkIsUnspendable adds a benchmark to compare the time and allocations -// necessary for the IsUnspendable function. -func BenchmarkIsUnspendable(b *testing.B) { - pkScriptToUse := []byte{0xa9, 0x14, 0x82, 0x1d, 0xba, 0x94, 0xbc, 0xfb, 0xa2, 0x57, 0x36, 0xa3, 0x9e, 0x5d, 0x14, 0x5d, 0x69, 0x75, 0xba, 0x8c, 0x0b, 0x42, 0x87} - var res bool = false - for i := 0; i < b.N; i++ { - res = IsUnspendable(pkScriptToUse) - } - if res { - b.Fatalf("Benchmark should never have res be %t\n", res) - } -} From e98b7c1a9a10ae18e2e724aceeee57c216095517 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:12:21 -0500 Subject: [PATCH 185/419] txscript: Optimize IsUnspendable. This converts the IsUnspendable function to make use of a combination of raw script analysis and the new tokenizer instead of the far less efficient parseScript thereby significantly optimizing the function. It is important to note that this new implementation intentionally has a semantic difference from the existing implementation in that it will now report scripts that are larger than the max allowed script size are unspendable as well. Finally, the comment is modified to explicitly call out the script version semantics. Note: this function was recently optimized in master, so the gains here are less noticable than other optimizations. The following is a before and after comparison of analyzing a large script: benchmark old ns/op new ns/op delta BenchmarkIsUnspendable-8 656 584 -10.98% benchmark old allocs new allocs delta BenchmarkIsUnspendable-8 1 0 -100.00% benchmark old bytes new bytes delta BenchmarkIsUnspendable-8 1 0 -100.00% --- txscript/script.go | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/txscript/script.go b/txscript/script.go index 691e31cc64..e933167d4c 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -917,15 +917,22 @@ func checkScriptParses(scriptVersion uint16, script []byte) error { // 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 { - // Not provably unspendable - if len(pkScript) == 0 { - return false - } - firstOpcode, err := checkScriptTemplateParseable(pkScript, &opcodeArray) - 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 firstOpcode != nil && *firstOpcode == OP_RETURN + // The script is unspendable if it is guaranteed to fail at execution. + const scriptVersion = 0 + return checkScriptParses(scriptVersion, pkScript) != nil } From 549a1f26f2de278362b0b7643954c2e5a5a5dd58 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Fri, 19 Apr 2019 00:35:28 -0700 Subject: [PATCH 186/419] txscript/engine: Optimize new engine push only script This modifies the check for whether or not a pay-to-script-hash signature script is a push only script to make use of the new and more efficient raw script function. Also, since the script will have already been checked further above when the ScriptVerifySigPushOnly flags is set, avoid checking it again in that case. Backport of af67951b9a66df3aac1bf3d6376af0730287bbf2 --- txscript/engine.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/txscript/engine.go b/txscript/engine.go index 3c76b74794..06f454d372 100644 --- a/txscript/engine.go +++ b/txscript/engine.go @@ -946,7 +946,11 @@ func NewEngine(scriptPubKey []byte, tx *wire.MsgTx, txIdx int, flags ScriptFlags if vm.hasFlag(ScriptBip16) && isScriptHash(vm.scripts[1]) { // Only accept input scripts that push data for P2SH. - if !isPushOnly(vm.scripts[0]) { + // 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 && !isPushOnly(vm.scripts[0]) { return nil, scriptError(ErrNotPushOnly, "pay to script hash is not push only") } From a59e01c23c057d904cf4b23df0d85620b42a39cd Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Fri, 19 Apr 2019 00:43:38 -0700 Subject: [PATCH 187/419] txscript/engine: Use optimized IsPushOnlyScript --- txscript/engine.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/txscript/engine.go b/txscript/engine.go index 06f454d372..f0a9485164 100644 --- a/txscript/engine.go +++ b/txscript/engine.go @@ -950,7 +950,7 @@ func NewEngine(scriptPubKey []byte, tx *wire.MsgTx, txIdx int, flags ScriptFlags // the flag to verify signature scripts are push only is set // above, so avoid checking again. alreadyChecked := vm.hasFlag(ScriptVerifySigPushOnly) - if !alreadyChecked && !isPushOnly(vm.scripts[0]) { + if !alreadyChecked && !IsPushOnlyScript(scriptSig) { return nil, scriptError(ErrNotPushOnly, "pay to script hash is not push only") } From 1be3450efb84a7eda89fe1b2040f570e4809a9ae Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Fri, 19 Apr 2019 00:49:23 -0700 Subject: [PATCH 188/419] txscript/engine: Use optimized isScriptHashScript --- txscript/engine.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/txscript/engine.go b/txscript/engine.go index f0a9485164..703baef79b 100644 --- a/txscript/engine.go +++ b/txscript/engine.go @@ -944,7 +944,7 @@ func NewEngine(scriptPubKey []byte, tx *wire.MsgTx, txIdx int, flags ScriptFlags vm.scriptIdx++ } - if vm.hasFlag(ScriptBip16) && isScriptHash(vm.scripts[1]) { + 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 From 98dd6a900f3a1f997ffab68651e49f2772b25d5e Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Fri, 19 Apr 2019 00:50:54 -0700 Subject: [PATCH 189/419] txscript/engine: Check ps2h push before parsing script This moves the check for non push-only pay-to-script-hash signature scripts before the script parsing logic when creating a new engine instance to avoid the extra overhead in the error case. --- txscript/engine.go | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/txscript/engine.go b/txscript/engine.go index 703baef79b..576adc7188 100644 --- a/txscript/engine.go +++ b/txscript/engine.go @@ -918,6 +918,21 @@ func NewEngine(scriptPubKey []byte, tx *wire.MsgTx, txIdx int, flags ScriptFlags "signature script is not push only") } + // 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 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 @@ -943,19 +958,6 @@ func NewEngine(scriptPubKey []byte, tx *wire.MsgTx, txIdx int, flags ScriptFlags if len(scripts[0]) == 0 { vm.scriptIdx++ } - - 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 - } if vm.hasFlag(ScriptVerifyMinimalData) { vm.dstack.verifyMinimalData = true vm.astack.verifyMinimalData = true From 8316a06a0ee4f90512d232ce4ccd00f072ff4e0c Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:11:19 -0500 Subject: [PATCH 190/419] txscript: Add benchmark for GetSigOpCount. --- txscript/bench_test.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/txscript/bench_test.go b/txscript/bench_test.go index c8f7d0f790..7d0b90c4ad 100644 --- a/txscript/bench_test.go +++ b/txscript/bench_test.go @@ -341,3 +341,18 @@ func BenchmarkIsUnspendable(b *testing.B) { _ = 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) + } +} From 4d5c0b25295855676463942e487635a5cdc45a15 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:11:20 -0500 Subject: [PATCH 191/419] txscript: Optimize GetSigOpCount. This converts the GetSigOpCount function to make use of the new tokenizer instead of the far less efficient parseScript thereby significantly optimizing the function. A new function named countSigOpsV0 which accepts the raw script is introduced to perform the bulk of the work so it can be reused for precise signature operation counting as well in a later commit. It retains the same semantics in terms of counting the number of signature operations either up to the first parse error or the end of the script in the case it parses successfully as required by consensus. Finally, this also deprecates the getSigOpCount function that requires opcodes in favor of the new function and modifies the comment on GetSigOpCount to explicitly call out the script version semantics. The following is a before and after comparison of analyzing a large script: benchmark old ns/op new ns/op delta BenchmarkGetSigOpCount-8 61051 677 -98.89% benchmark old allocs new allocs delta BenchmarkGetSigOpCount-8 1 0 -100.00% benchmark old bytes new bytes delta BenchmarkGetSigOpCount-8 311299 0 -100.00% --- txscript/script.go | 66 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 62 insertions(+), 4 deletions(-) diff --git a/txscript/script.go b/txscript/script.go index e933167d4c..32654f788d 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -741,6 +741,8 @@ func asSmallInt(op byte) int { // 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. +// +// DEPRECATED. Use countSigOpsV0 instead. func getSigOpCount(pops []parsedOpcode, precise bool) int { nSigs := 0 for i, pop := range pops { @@ -771,15 +773,71 @@ func getSigOpCount(pops []parsedOpcode, precise bool) int { return nSigs } +// 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 Bitcion 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 { + numSigOps += MaxPubKeysPerMultiSig + } + + default: + // Not a sigop. + } + + prevOp = tokenizer.Opcode() + } + + 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 From cc802d14079debe347b699bb69c913069e679c6a Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:11:30 -0500 Subject: [PATCH 192/419] txscript: Add benchmark for GetPreciseSigOpCount. --- txscript/bench_test.go | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/txscript/bench_test.go b/txscript/bench_test.go index 7d0b90c4ad..817eb98f04 100644 --- a/txscript/bench_test.go +++ b/txscript/bench_test.go @@ -356,3 +356,29 @@ func BenchmarkGetSigOpCount(b *testing.B) { _ = 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) + } +} From a4a21c0b087b9e73ec33def05d4a8d06671eea16 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:11:31 -0500 Subject: [PATCH 193/419] txscript: Optimize GetPreciseSigOpCount. This converts the GetPreciseSigOpCount function to use a combination of raw script analysis and the new tokenizer instead of the far less efficient parseScript thereby significantly optimizing the function. In particular it uses the recently converted isScriptHashScript, IsPushOnlyScript, and countSigOpsV0 functions along with the recently added finalOpcodeData functions. It also modifies the comment to explicitly call out the script version semantics. The following is a before and after comparison of analyzing a large script: benchmark old ns/op new ns/op delta BenchmarkGetPreciseSigOpCount-8 130223 742 -99.43% benchmark old allocs new allocs delta BenchmarkGetPreciseSigOpCount-8 3 0 -100.00% benchmark old bytes new bytes delta BenchmarkGetPreciseSigOpCount-8 623367 0 -100.00% --- txscript/script.go | 48 +++++++++++++++++++++++----------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/txscript/script.go b/txscript/script.go index 32654f788d..aee1aaacad 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -864,44 +864,44 @@ func finalOpcodeData(scriptVersion uint16, script []byte) []byte { // 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 From 26d63c61dce4be4721d27506203cd00a5dbd5e4a Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Thu, 4 Feb 2021 12:58:03 -0800 Subject: [PATCH 194/419] txscript: add GetWitnessSigOpCountBenchmarks --- txscript/bench_test.go | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/txscript/bench_test.go b/txscript/bench_test.go index 817eb98f04..52965dca93 100644 --- a/txscript/bench_test.go +++ b/txscript/bench_test.go @@ -382,3 +382,44 @@ func BenchmarkGetPreciseSigOpCount(b *testing.B) { _ = 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) + } +} From 77863f5649cbd55e58e2c3ebdd8587de9edcaef7 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Thu, 4 Feb 2021 14:14:53 -0800 Subject: [PATCH 195/419] txscript: Optimize GetWitnessSigOpCount This converts the GetWitnessSigOpCount function to use a combination of raw script analysis and the new tokenizer instead of the far less efficeint parseScript, thereby significantly optimizing the funciton. In particular, it use the recently added countSigOpsv0 in precise mode to avoid calling paseScript. --- txscript/script.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/txscript/script.go b/txscript/script.go index aee1aaacad..b69c915afc 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -955,8 +955,7 @@ 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) } } From 69d560c03cea944cf48114732304e2285b7cbbb5 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:11:32 -0500 Subject: [PATCH 196/419] txscript: Add benchmark for GetScriptClass. --- txscript/bench_test.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/txscript/bench_test.go b/txscript/bench_test.go index 52965dca93..aba3d1239e 100644 --- a/txscript/bench_test.go +++ b/txscript/bench_test.go @@ -423,3 +423,18 @@ func BenchmarkGetWitnessSigOpCountNested(b *testing.B) { _ = 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) + } +} From 9b06388f7696fe6e1a4398c2bac6e7277a916067 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:11:33 -0500 Subject: [PATCH 197/419] txscript: Make typeOfScript accept raw script. This converts the typeOfScript function to accept a script version and raw script instead of an array of internal parsed opcodes in order to make it more flexible for raw script analysis. Also, this adds a comment to CalcScriptInfo to call out the specific version semantics and deprecates the function since nothing currently uses it, and the relevant information can now be obtained by callers more directly through the use of the new script tokenizer. All other callers are updated accordingly. --- txscript/standard.go | 46 ++++++++++++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/txscript/standard.go b/txscript/standard.go index 9825f61bea..54c043181b 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -498,7 +498,19 @@ func isNullDataScript(scriptVersion uint16, script []byte) bool { // scriptType returns the type of the script being inspected from the known // standard types. -func typeOfScript(pops []parsedOpcode) ScriptClass { +// +// NOTE: All scripts that are not version 0 are currently considered non +// standard. +func typeOfScript(scriptVersion uint16, script []byte) ScriptClass { + if scriptVersion != 0 { + return NonStandardTy + } + + pops, err := parseScript(script) + if err != nil { + return NonStandardTy + } + if isPubkey(pops) { return PubKeyTy } else if isPubkeyHash(pops) { @@ -521,11 +533,8 @@ 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 - } - return typeOfScript(pops) + const scriptVersion = 0 + return typeOfScript(scriptVersion, script) } // NewScriptClass returns the ScriptClass corresponding to the string name @@ -608,9 +617,17 @@ 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) { + const scriptVersion = 0 + sigPops, err := parseScript(sigScript) if err != nil { return nil, err @@ -621,9 +638,8 @@ func CalcScriptInfo(sigScript, pkScript []byte, witness wire.TxWitness, return nil, err } - // Push only sigScript makes little sense. si := new(ScriptInfo) - si.PkScriptClass = typeOfScript(pkPops) + si.PkScriptClass = typeOfScript(scriptVersion, pkScript) // Can't have a signature script that doesn't just push data. if !isPushOnly(sigPops) { @@ -644,7 +660,8 @@ func CalcScriptInfo(sigScript, pkScript []byte, witness wire.TxWitness, return nil, err } - shInputs := expectedInputs(shPops, typeOfScript(shPops)) + redeemClass := typeOfScript(scriptVersion, script) + shInputs := expectedInputs(shPops, redeemClass) if shInputs == -1 { si.ExpectedInputs = -1 } else { @@ -671,7 +688,9 @@ 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(pkPops, redeemClass) if shInputs == -1 { si.ExpectedInputs = -1 } else { @@ -691,7 +710,8 @@ func CalcScriptInfo(sigScript, pkScript []byte, witness wire.TxWitness, witnessScript := witness[len(witness)-1] pops, _ := parseScript(witnessScript) - shInputs := expectedInputs(pops, typeOfScript(pops)) + redeemClass := typeOfScript(scriptVersion, witnessScript) + shInputs := expectedInputs(pops, redeemClass) if shInputs == -1 { si.ExpectedInputs = -1 } else { @@ -888,7 +908,9 @@ func ExtractPkScriptAddrs(pkScript []byte, chainParams *chaincfg.Params) (Script return NonStandardTy, nil, 0, err } - scriptClass := typeOfScript(pops) + const scriptVersion = 0 + scriptClass := typeOfScript(scriptVersion, pkScript) + switch scriptClass { case PubKeyHashTy: // A pay-to-pubkey-hash script is of the form: From 3b86e0a0e2df9f20caa68c1dc6fcd67f0b9aa524 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:11:34 -0500 Subject: [PATCH 198/419] txscript: Optimize typeOfScript pay-to-script-hash. This begins the process of converting the typeOfScript function to use a combination of raw script analysis and the new tokenizer instead of the far less efficient parsed opcodes with the intent of significantly optimizing the function. In order to ease the review process, each script type will be converted in a separate commit and the typeOfScript function will be updated such that the script is only parsed as a fallback for the cases that are not already converted to more efficient raw script variants. In particular, for this commit, since the ability to detect pay-to-script-hash via raw script analysis is now available, the function is simply updated to make use of it. --- txscript/standard.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/txscript/standard.go b/txscript/standard.go index 54c043181b..fb3bb9821c 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -506,6 +506,11 @@ func typeOfScript(scriptVersion uint16, script []byte) ScriptClass { return NonStandardTy } + switch { + case isScriptHashScript(script): + return ScriptHashTy + } + pops, err := parseScript(script) if err != nil { return NonStandardTy @@ -517,8 +522,6 @@ func typeOfScript(scriptVersion uint16, script []byte) ScriptClass { return PubKeyHashTy } else if isWitnessPubKeyHash(pops) { return WitnessV0PubKeyHashTy - } else if isScriptHash(pops) { - return ScriptHashTy } else if isWitnessScriptHash(pops) { return WitnessV0ScriptHashTy } else if isMultiSig(pops) { From 671b5fefeff4cf07ae1805106c68b90fba291f79 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:11:35 -0500 Subject: [PATCH 199/419] txscript: Remove unused isScriptHash function. --- txscript/script.go | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/txscript/script.go b/txscript/script.go index b69c915afc..ca6520c8be 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -54,17 +54,6 @@ 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. -// -// DEPRECATED. Use isScriptHashScript or extractScriptHash instead. -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 { From 71bf51e82c57b0d4a68ed3f6d35d94d3e7928d9d Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:11:36 -0500 Subject: [PATCH 200/419] txscript: Optimize typeOfScript multisig. This continues the process of converting the typeOfScript function to use a combination of raw script analysis and the new tokenizer instead of the far less efficient parsed opcodes. In particular, for this commit, since the ability to detect multisig scripts via the new tokenizer is now available, the function is simply updated to make use of it. --- txscript/standard.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/txscript/standard.go b/txscript/standard.go index fb3bb9821c..dcd75214d3 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -509,6 +509,8 @@ func typeOfScript(scriptVersion uint16, script []byte) ScriptClass { switch { case isScriptHashScript(script): return ScriptHashTy + case isMultisigScript(scriptVersion, script): + return MultiSigTy } pops, err := parseScript(script) @@ -524,8 +526,6 @@ func typeOfScript(scriptVersion uint16, script []byte) ScriptClass { return WitnessV0PubKeyHashTy } else if isWitnessScriptHash(pops) { return WitnessV0ScriptHashTy - } else if isMultiSig(pops) { - return MultiSigTy } else if isNullData(pops) { return NullDataTy } From 6e86f0d09bc57573312a9b63044dea64992ff480 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:11:37 -0500 Subject: [PATCH 201/419] txscript: Remove unused isMultiSig function. --- txscript/standard.go | 36 ------------------------------------ 1 file changed, 36 deletions(-) diff --git a/txscript/standard.go b/txscript/standard.go index dcd75214d3..2722bc4156 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -214,42 +214,6 @@ func isPubkeyHash(pops []parsedOpcode) bool { } -// isMultiSig returns true if the passed script is a multisig transaction, false -// otherwise. -// -// DEPECATED. Use isMultisigScript or extractMultisigScriptDetails instead. -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 - } - if !isSmallInt(pops[0].opcode.value) { - return false - } - if !isSmallInt(pops[l-2].opcode.value) { - return false - } - if pops[l-1].opcode.value != OP_CHECKMULTISIG { - return false - } - - // Verify the number of pubkeys specified matches the actual number - // of pubkeys provided. - if l-2-1 != asSmallInt(pops[l-2].opcode.value) { - 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 - } - } - return true -} - // multiSigDetails houses details extracted from a standard multisig script. type multiSigDetails struct { requiredSigs int From 8b64adc234cfbfd68394898f2eeea0199fdefdb6 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Thu, 4 Feb 2021 14:07:19 -0800 Subject: [PATCH 202/419] txscript: Optimze typeOfScript pay-to-pubkey This continues the process of converting the typeOfScript function to use a combination of raw script analysis and the new tokenizer instead of the face less efficient parsed opcodes, with the intent of significantly optimizing the function. In particular, it converts the detection of pay-to-pubkey scripts to use raw script analysis. --- txscript/standard.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/txscript/standard.go b/txscript/standard.go index 2722bc4156..52a3747838 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -471,6 +471,8 @@ func typeOfScript(scriptVersion uint16, script []byte) ScriptClass { } switch { + case isPubKeyScript(script): + return PubKeyTy case isScriptHashScript(script): return ScriptHashTy case isMultisigScript(scriptVersion, script): @@ -482,9 +484,7 @@ func typeOfScript(scriptVersion uint16, script []byte) ScriptClass { return NonStandardTy } - if isPubkey(pops) { - return PubKeyTy - } else if isPubkeyHash(pops) { + if isPubkeyHash(pops) { return PubKeyHashTy } else if isWitnessPubKeyHash(pops) { return WitnessV0PubKeyHashTy From 1133ea0bb3c95654e827a8ab31531c6163046f4a Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:11:40 -0500 Subject: [PATCH 203/419] txscript: Remove unused isPubkey function. --- txscript/standard.go | 9 --------- 1 file changed, 9 deletions(-) diff --git a/txscript/standard.go b/txscript/standard.go index 52a3747838..d2aa0e99eb 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -193,15 +193,6 @@ func isScriptHashScript(script []byte) bool { return extractScriptHash(script) != nil } -// 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 -} - // isPubkeyHash returns true if the script passed is a pay-to-pubkey-hash // transaction, false otherwise. func isPubkeyHash(pops []parsedOpcode) bool { From 13f646243d26d34ec46dfd7f9b40d5c8aaae5d59 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:11:45 -0500 Subject: [PATCH 204/419] txscript: Optimize typeOfScript pay-to-pubkey-hash. This continues the process of converting the typeOfScript function to use a combination of raw script analysis and the new tokenizer instead of the far less efficient parsed opcodes. In particular, it converts the detection of pay-to-pubkey-hash scripts to use raw script analysis. --- txscript/standard.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/txscript/standard.go b/txscript/standard.go index d2aa0e99eb..08c6054e03 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -464,6 +464,8 @@ func typeOfScript(scriptVersion uint16, script []byte) ScriptClass { switch { case isPubKeyScript(script): return PubKeyTy + case isPubKeyHashScript(script): + return PubKeyHashTy case isScriptHashScript(script): return ScriptHashTy case isMultisigScript(scriptVersion, script): @@ -475,9 +477,7 @@ func typeOfScript(scriptVersion uint16, script []byte) ScriptClass { return NonStandardTy } - if isPubkeyHash(pops) { - return PubKeyHashTy - } else if isWitnessPubKeyHash(pops) { + if isWitnessPubKeyHash(pops) { return WitnessV0PubKeyHashTy } else if isWitnessScriptHash(pops) { return WitnessV0ScriptHashTy From d02f97e04a5243e0343763b30c798863d63f577b Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:11:46 -0500 Subject: [PATCH 205/419] txscript: Remove unused isPubkeyHash function. --- txscript/standard.go | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/txscript/standard.go b/txscript/standard.go index 08c6054e03..ff382537f4 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -193,18 +193,6 @@ func isScriptHashScript(script []byte) bool { return extractScriptHash(script) != 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 - -} - // multiSigDetails houses details extracted from a standard multisig script. type multiSigDetails struct { requiredSigs int From d80863da921d21dcea851605ca8d74b621bb339e Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Thu, 4 Feb 2021 15:15:45 -0800 Subject: [PATCH 206/419] txscript: Optimize typeOfScript for null data scripts This continues the process of converting the typeOfScript function to use a combination of raw script analysize and the tokenizer instead of parsed opcode, with the intent of significanty optimizing the function. In particular, it converts the detection of null data scripts to use raw script analysis. --- txscript/standard.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/txscript/standard.go b/txscript/standard.go index ff382537f4..bae2b0c5d0 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -458,6 +458,8 @@ func typeOfScript(scriptVersion uint16, script []byte) ScriptClass { return ScriptHashTy case isMultisigScript(scriptVersion, script): return MultiSigTy + case isNullDataScript(scriptVersion, script): + return NullDataTy } pops, err := parseScript(script) @@ -469,9 +471,8 @@ func typeOfScript(scriptVersion uint16, script []byte) ScriptClass { return WitnessV0PubKeyHashTy } else if isWitnessScriptHash(pops) { return WitnessV0ScriptHashTy - } else if isNullData(pops) { - return NullDataTy } + return NonStandardTy } From 78046b3815ac525e86edde8f302b757369856f9e Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:11:51 -0500 Subject: [PATCH 207/419] txscript: Remove unused isNullData function. --- txscript/standard.go | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/txscript/standard.go b/txscript/standard.go index bae2b0c5d0..85b285826d 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -386,24 +386,6 @@ func isWitnessScriptHashScript(script []byte) bool { return extractWitnessScriptHash(script) != 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 { - return true - } - - return l == 2 && - pops[0].opcode.value == OP_RETURN && - (isSmallInt(pops[1].opcode.value) || pops[1].opcode.value <= - OP_PUSHDATA4) && - len(pops[1].data) <= MaxDataCarrierSize -} - // isNullDataScript returns whether or not the passed script is a standard // null data script. // From 847a262d78933c57e6062151ceef8aba17896264 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Fri, 19 Apr 2019 01:46:52 -0700 Subject: [PATCH 208/419] txscript: Optimize typeOfScript witness-pubkey-hash This continues the process of converting the typeOfScript function to use a combination of raw script analysis and the new tokenizer instead of the far less efficient parsed opcodes. In particular, it converts the detection of witness pubkey hash scripts to use raw script analysis and the new tokenizer. The following is a before and after comparison of analyzing a large script: benchmark old ns/op new ns/op delta BenchmarkIsWitnessPubKeyHash-8 61688 62839 +1.87% benchmark old allocs new allocs delta BenchmarkIsWitnessPubKeyHash-8 1 1 +0.00% benchmark old bytes new bytes delta BenchmarkIsWitnessPubKeyHash-8 311299 311299 +0.00% --- txscript/standard.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/txscript/standard.go b/txscript/standard.go index 85b285826d..5d5c668794 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -355,6 +355,7 @@ func extractWitnessPubKeyHash(script []byte) []byte { return script[2:22] } + return nil } @@ -438,6 +439,8 @@ func typeOfScript(scriptVersion uint16, script []byte) ScriptClass { return PubKeyHashTy case isScriptHashScript(script): return ScriptHashTy + case isWitnessPubKeyHashScript(script): + return WitnessV0PubKeyHashTy case isMultisigScript(scriptVersion, script): return MultiSigTy case isNullDataScript(scriptVersion, script): @@ -449,9 +452,7 @@ func typeOfScript(scriptVersion uint16, script []byte) ScriptClass { return NonStandardTy } - if isWitnessPubKeyHash(pops) { - return WitnessV0PubKeyHashTy - } else if isWitnessScriptHash(pops) { + if isWitnessScriptHash(pops) { return WitnessV0ScriptHashTy } From 1a60e11da7ab917a6725ce10d37da7b7f8634ed5 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Fri, 19 Apr 2019 02:04:01 -0700 Subject: [PATCH 209/419] txscript: Optimize typeOfScript for witness-script-hash This concludes the process of converting the typeOfScript function to use a combination of raw script analysis and the new tokenizer instead of the far less efficient parsed opcodes. In particular, it converts the detection of witness script hash scripts to use raw script analysis and the new tokenizer. With all of the limbs now useing optimized variants, the following is a before an after comparison of calling GetScriptClass on a large script: benchmark old ns/op new ns/op delta BenchmarkGetScriptClass-8 61515 15.3 -99.98% benchmark old allocs new allocs delta BenchmarkGetScriptClass-8 1 0 -100.00% benchmark old bytes new bytes delta BenchmarkGetScriptClass-8 311299 0 -100.00% --- txscript/standard.go | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/txscript/standard.go b/txscript/standard.go index 5d5c668794..dd751cbe98 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -441,22 +441,15 @@ func typeOfScript(scriptVersion uint16, script []byte) ScriptClass { return ScriptHashTy case isWitnessPubKeyHashScript(script): return WitnessV0PubKeyHashTy + case isWitnessScriptHashScript(script): + return WitnessV0ScriptHashTy case isMultisigScript(scriptVersion, script): return MultiSigTy case isNullDataScript(scriptVersion, script): return NullDataTy - } - - pops, err := parseScript(script) - if err != nil { + default: return NonStandardTy } - - if isWitnessScriptHash(pops) { - return WitnessV0ScriptHashTy - } - - return NonStandardTy } // GetScriptClass returns the class of the script passed. From 43846b1edf9f281a88b02e91b361ebdd30b692db Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Fri, 19 Apr 2019 02:05:04 -0700 Subject: [PATCH 210/419] txscript: Remove unused isWitnessScriptHash --- txscript/script.go | 8 -------- 1 file changed, 8 deletions(-) diff --git a/txscript/script.go b/txscript/script.go index ca6520c8be..0d041a8bf9 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -78,14 +78,6 @@ func IsPayToScriptHash(script []byte) bool { return isScriptHashScript(script) } -// 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 -} - // IsPayToWitnessScriptHash returns true if the is in the standard // pay-to-witness-script-hash (P2WSH) format, false otherwise. func IsPayToWitnessScriptHash(script []byte) bool { From 705d24cab4bb7f9f0891736c4a983abd8d846146 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:12:09 -0500 Subject: [PATCH 211/419] txscript: Convert CalcScriptInfo. This converts CalcScriptInfo and dependent expectedInputs to make use of the new script tokenizer as well as several of the other recently added raw script analysis functions in order to remove the reliance on parsed opcodes as a step towards utlimately removing them altogether. It is worth noting that this has the side effect of significantly optimizing the function as well, however, since it is deprecated, no benchmarks are provided. --- txscript/standard.go | 72 +++++++++++++++++++++----------------------- 1 file changed, 35 insertions(+), 37 deletions(-) diff --git a/txscript/standard.go b/txscript/standard.go index dd751cbe98..fea6799f76 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -481,7 +481,11 @@ func NewScriptClass(name string) (*ScriptClass, error) { // 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 @@ -508,7 +512,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.value) + 1 + return asSmallInt(script[0]) + 1 case NullDataTy: fallthrough @@ -549,52 +553,52 @@ type ScriptInfo struct { func CalcScriptInfo(sigScript, pkScript []byte, witness wire.TxWitness, bip16, segwit bool) (*ScriptInfo, error) { + // 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 - - sigPops, err := parseScript(sigScript) - if err != nil { + 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 } - si := new(ScriptInfo) - si.PkScriptClass = typeOfScript(scriptVersion, pkScript) - // 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 - } - - redeemClass := typeOfScript(scriptVersion, script) - shInputs := expectedInputs(shPops, redeemClass) - 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. @@ -610,10 +614,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:]) - redeemClass := typeOfScript(scriptVersion, sigScript[1:]) - shInputs := expectedInputs(pkPops, redeemClass) + shInputs := expectedInputs(sigScript[1:], redeemClass) if shInputs == -1 { si.ExpectedInputs = -1 } else { @@ -623,18 +625,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) - redeemClass := typeOfScript(scriptVersion, witnessScript) - shInputs := expectedInputs(pops, redeemClass) + shInputs := expectedInputs(witnessScript, redeemClass) if shInputs == -1 { si.ExpectedInputs = -1 } else { @@ -645,11 +643,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 From 6c212fd7ee9e0ab2fcd6287d0c5ed26c0b9cf043 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:12:10 -0500 Subject: [PATCH 212/419] txscript: Remove unused isPushOnly function. --- txscript/script.go | 26 +------------------------- 1 file changed, 1 insertion(+), 25 deletions(-) diff --git a/txscript/script.go b/txscript/script.go index 0d041a8bf9..7e0e3669d2 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -161,26 +161,6 @@ func ExtractWitnessProgramInfo(script []byte) (int, []byte, error) { return witnessVersion, witnessProgram, nil } -// isPushOnly returns true if the script only pushes data, false otherwise. -// -// DEPRECATED. Use IsPushOnlyScript instead. -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 // according to the consensus definition of pushing data. // @@ -901,11 +881,7 @@ func GetWitnessSigOpCount(sigScript, pkScript []byte, witness wire.TxWitness) in // 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) && + if IsPayToScriptHash(pkScript) && IsPushOnlyScript(sigScript) && IsWitnessProgram(sigScript[1:]) { return getWitnessSigOps(sigScript[1:], witness) } From 8c54905959569b573f019ffc8e4eeb624505a8d9 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:12:11 -0500 Subject: [PATCH 213/419] txscript: Remove unused getSigOpCount function. --- txscript/script.go | 36 ------------------------------------ 1 file changed, 36 deletions(-) diff --git a/txscript/script.go b/txscript/script.go index 7e0e3669d2..10ff4315e0 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -698,42 +698,6 @@ func asSmallInt(op byte) int { 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. -// -// DEPRECATED. Use countSigOpsV0 instead. -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.value) - } else { - nSigs += MaxPubKeysPerMultiSig - } - default: - // Not a sigop. - } - } - - return nSigs -} - // 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 From 7791f92f6f09390f310c918966178fe189c1632a Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:12:13 -0500 Subject: [PATCH 214/419] txscript: Optimize CalcMultiSigStats. This converts the CalcMultiSigStats function to make use of the new extractMultisigScriptDetails function instead of the far less efficient parseScript thereby significantly optimizing the function. The tests are also updated accordingly. The following is a before and after comparison of analyzing a standard multisig script: benchmark old ns/op new ns/op delta --------------------------------------------------------------- BenchmarkCalcMultiSigStats 972 79.5 -91.82% benchmark old allocs new allocs delta --------------------------------------------------------------- BenchmarkCalcMultiSigStats 1 0 -100.00% benchmark old bytes new bytes delta --------------------------------------------------------------- BenchmarkCalcMultiSigStats 2304 0 -100.00% --- txscript/standard.go | 26 ++++++++++---------------- txscript/standard_test.go | 8 ++------ 2 files changed, 12 insertions(+), 22 deletions(-) diff --git a/txscript/standard.go b/txscript/standard.go index fea6799f76..3bb12b9aba 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -656,27 +656,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.value) - numPubKeys := asSmallInt(pops[len(pops)-2].opcode.value) - return numPubKeys, numSigs, nil + return details.numPubKeys, details.requiredSigs, nil } // payToPubKeyHashScript creates a new script to pay a transaction diff --git a/txscript/standard_test.go b/txscript/standard_test.go index 37dd8f8a37..582d30eee4 100644 --- a/txscript/standard_test.go +++ b/txscript/standard_test.go @@ -832,7 +832,7 @@ func TestCalcMultiSigStats(t *testing.T) { name: "short script", script: "0x046708afdb0fe5548271967f1a67130b7105cd6a828" + "e03909a67962e0ea1f61d", - err: scriptError(ErrMalformedPush, ""), + err: scriptError(ErrNotMultisigScript, ""), }, { name: "stack underflow", @@ -843,11 +843,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, }, From c4f6302189c7c928a2e89212d3727a308512920d Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:12:18 -0500 Subject: [PATCH 215/419] txscript: Add benchmark for PushedData. --- txscript/bench_test.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/txscript/bench_test.go b/txscript/bench_test.go index aba3d1239e..26b7c9feb8 100644 --- a/txscript/bench_test.go +++ b/txscript/bench_test.go @@ -438,3 +438,21 @@ func BenchmarkGetScriptClass(b *testing.B) { _ = 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) + } + } +} From 0a4f228dd10296da4c06484577112bf0411e7fff Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:12:19 -0500 Subject: [PATCH 216/419] txscript: Optimize PushedData. This converts the PushedData function to make use of the new tokenizer instead of the far less efficient parseScript thereby significantly optimizing the function. Also, the comment is modified to explicitly call out the script version semantics. The following is a before and after comparison of extracting the data from a very large script: benchmark old ns/op new ns/op delta BenchmarkPushedData-8 64837 1790 -97.24% benchmark old allocs new allocs delta BenchmarkPushedData-8 7 6 -14.29% benchmark old bytes new bytes delta BenchmarkPushedData-8 312816 1520 -99.51% --- txscript/standard.go | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/txscript/standard.go b/txscript/standard.go index 3bb12b9aba..0607b305f3 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -791,20 +791,25 @@ 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. +// +// 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 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 } From da9fdabbd5bae2c07aca03af811bfb33b05dd3d6 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:12:22 -0500 Subject: [PATCH 217/419] txscript: Make canonicalPush accept raw opcode. This renames the canonicalPush function to isCanonicalPush and converts it to accept an opcode as a byte and the associate data as a byte slice instead of the internal parse opcode data struct in order to make it more flexible for raw script analysis. It also updates all callers and tests accordingly. --- txscript/engine.go | 5 +++- txscript/script.go | 23 ++++++++------ txscript/script_test.go | 66 ++++++++++++++++++----------------------- txscript/standard.go | 4 +-- 4 files changed, 49 insertions(+), 49 deletions(-) diff --git a/txscript/engine.go b/txscript/engine.go index 576adc7188..ef7ad33e3c 100644 --- a/txscript/engine.go +++ b/txscript/engine.go @@ -875,6 +875,7 @@ func (vm *Engine) SetAltStack(data [][]byte) { // 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) { + const scriptVersion = 0 // The provided transaction input index must refer to a valid input. if txIdx < 0 || txIdx >= len(tx.TxIn) { @@ -994,7 +995,9 @@ 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]) && + if len(sigPops) == 1 && + isCanonicalPush(sigPops[0].opcode.value, + sigPops[0].data) && IsWitnessProgram(sigPops[0].data) { witProgram = sigPops[0].data diff --git a/txscript/script.go b/txscript/script.go index 10ff4315e0..52bedf2699 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -128,7 +128,7 @@ func IsWitnessProgram(script []byte) bool { func isWitnessProgram(pops []parsedOpcode) bool { return len(pops) == 2 && isSmallInt(pops[0].opcode.value) && - canonicalPush(pops[1]) && + isCanonicalPush(pops[1].opcode.value, pops[1].data) && (len(pops[1].data) >= 2 && len(pops[1].data) <= 40) } @@ -305,13 +305,16 @@ func removeOpcode(pkscript []parsedOpcode, opcode byte) []parsedOpcode { return retScript } -// 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 } @@ -336,7 +339,9 @@ func canonicalPush(pop parsedOpcode) bool { 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) { + if !isCanonicalPush(pop.opcode.value, pop.data) || + !bytes.Contains(pop.data, data) { + retScript = append(retScript, pop) } } diff --git a/txscript/script_test.go b/txscript/script_test.go index 665d9ef633..62c51e4181 100644 --- a/txscript/script_test.go +++ b/txscript/script_test.go @@ -3740,31 +3740,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) + 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) + if !IsPushOnlyScript(script) { + t.Errorf("IsPushOnlyScript: test #%d failed: %x\n", i, script) continue } - pops, err := parseScript(script) - if err != nil { - t.Errorf("parseScript: #%d failed: %v", i, err) - 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 +3768,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 } } @@ -4213,11 +4203,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 +4228,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 } } diff --git a/txscript/standard.go b/txscript/standard.go index 0607b305f3..d97072f155 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -953,7 +953,7 @@ func ExtractAtomicSwapDataPushes(version uint16, pkScript []byte) (*AtomicSwapDa } isAtomicSwap := pops[0].opcode.value == OP_IF && pops[1].opcode.value == OP_SIZE && - canonicalPush(pops[2]) && + isCanonicalPush(pops[2].opcode.value, pops[2].data) && pops[3].opcode.value == OP_EQUALVERIFY && pops[4].opcode.value == OP_SHA256 && pops[5].opcode.value == OP_DATA_32 && @@ -962,7 +962,7 @@ func ExtractAtomicSwapDataPushes(version uint16, pkScript []byte) (*AtomicSwapDa pops[8].opcode.value == OP_HASH160 && pops[9].opcode.value == OP_DATA_20 && pops[10].opcode.value == OP_ELSE && - canonicalPush(pops[11]) && + isCanonicalPush(pops[11].opcode.value, pops[11].data) && pops[12].opcode.value == OP_CHECKLOCKTIMEVERIFY && pops[13].opcode.value == OP_DROP && pops[14].opcode.value == OP_DUP && From 81b80328bd21ae8845a8ca3cb0760898b7119e43 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:12:24 -0500 Subject: [PATCH 218/419] txscript: Add ExtractAtomicSwapDataPushes benches. --- txscript/bench_test.go | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/txscript/bench_test.go b/txscript/bench_test.go index 26b7c9feb8..456db25d52 100644 --- a/txscript/bench_test.go +++ b/txscript/bench_test.go @@ -456,3 +456,44 @@ func BenchmarkPushedData(b *testing.B) { } } } + +// 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) + } + } +} From 6ec9b73a53a1f7480a5c251e639b754d95f25c27 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Fri, 19 Apr 2019 03:05:55 -0700 Subject: [PATCH 219/419] txscript/scriptnum: add maxscriptnum and maxcltvlength --- txscript/scriptnum.go | 20 ++++-- txscript/scriptnum_test.go | 126 ++++++++++++++++++------------------- txscript/stack.go | 4 +- 3 files changed, 81 insertions(+), 69 deletions(-) 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/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. From 367a75a3f410da2eda19b19b06e9b2eba24511b8 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:12:25 -0500 Subject: [PATCH 220/419] txscript: Optimize ExtractAtomicSwapDataPushes. This converts the ExtractAtomicSwapDataPushes function to make use of the new tokenizer instead of the far less efficient parseScript thereby significantly optimizing the function. The new implementation is designed such that it should be fairly easy to move the function into the atomic swap tools where it more naturally belongs now that the tokenizer makes it possible to analyze scripts outside of the txscript module. Consequently, this also deprecates the function. The following is a before and after comparison of attempting to extract from both a typical atomic swap script and a very large non-atomic swap script: benchmark old ns/op new ns/op delta BenchmarkExtractAtomicSwapDataPushesLarge-8 61332 44.4 -99.93% BenchmarkExtractAtomicSwapDataPushes-8 990 260 -73.74% benchmark old allocs new allocs delta BenchmarkExtractAtomicSwapDataPushesLarge-8 1 0 -100.00% BenchmarkExtractAtomicSwapDataPushes-8 2 1 -50.00% benchmark old bytes new bytes delta BenchmarkExtractAtomicSwapDataPushesLarge-8 311299 0 -100.00% BenchmarkExtractAtomicSwapDataPushes-8 3168 96 -96.97% --- txscript/standard.go | 140 +++++++++++++++++++++++++++---------------- 1 file changed, 89 insertions(+), 51 deletions(-) diff --git a/txscript/standard.go b/txscript/standard.go index d97072f155..041516e2d5 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -942,64 +942,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 && - isCanonicalPush(pops[2].opcode.value, pops[2].data) && - 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 && - isCanonicalPush(pops[11].opcode.value, pops[11].data) && - 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.value) { - pushes.SecretSize = int64(asSmallInt(op.value)) - } 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.value) { - pushes.LockTime = int64(asSmallInt(op.value)) - } 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 } From 33ee3e2f53476fa96b80093aa3cbbaaea7091682 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:12:26 -0500 Subject: [PATCH 221/419] txscript: Add ExtractPkScriptAddrs benchmarks. --- txscript/bench_test.go | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/txscript/bench_test.go b/txscript/bench_test.go index 456db25d52..cac2920280 100644 --- a/txscript/bench_test.go +++ b/txscript/bench_test.go @@ -10,6 +10,7 @@ import ( "io/ioutil" "testing" + "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/wire" ) @@ -497,3 +498,40 @@ func BenchmarkExtractAtomicSwapDataPushes(b *testing.B) { } } } + +// 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) + } + } +} From 055be988c06449007774923b6ff7a8adf8bab945 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:12:27 -0500 Subject: [PATCH 222/419] txscript: Optimize ExtractPkScriptAddrs scripthash. This begins the process of converting the ExtractPkScriptAddrs function to use the optimized extraction functions recently introduced as part of the typeOfScript conversion. In order to ease the review process, the detection of each script type will be converted in a separate commit such that the script is only parsed as a fallback for the cases that are not already converted to more efficient variants. In particular, this converts the detection for pay-to-script-hash scripts. --- txscript/standard.go | 37 +++++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/txscript/standard.go b/txscript/standard.go index 041516e2d5..f55cbf9849 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -813,11 +813,36 @@ func PushedData(script []byte) ([][]byte, error) { return data, nil } +// 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) { + + // Avoid parsing the script for the cases that already have the able to + // work with raw scripts. + + // Check for pay-to-script-hash. + if hash := extractScriptHash(pkScript); hash != nil { + return ScriptHashTy, scriptHashToAddrs(hash, chainParams), 1, nil + } + + // Fall back to slow path. Ultimately these are intended to be replaced by + // faster variants based on the unparsed raw scripts. + var addrs []btcutil.Address var requiredSigs int @@ -867,18 +892,6 @@ func ExtractPkScriptAddrs(pkScript []byte, chainParams *chaincfg.Params) (Script addrs = append(addrs, addr) } - 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 err == nil { - addrs = append(addrs, addr) - } - case WitnessV0ScriptHashTy: // A pay-to-witness-script-hash script is of the form: // OP_0 <32-byte hash> From 16bd6633b64f2fa8b91c580900136545e4cbf350 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:12:28 -0500 Subject: [PATCH 223/419] txscript: Optimize ExtractPkScriptAddrs pubkeyhash. This continues the process of converting the ExtractPkScriptAddrs function to use the optimized extraction functions recently introduced as part of the typeOfScript conversion. In particular, this converts the detection for pay-to-pubkey-hash scripts. --- txscript/standard.go | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/txscript/standard.go b/txscript/standard.go index f55cbf9849..af50660635 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -813,6 +813,19 @@ func PushedData(script []byte) ([][]byte, error) { 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. @@ -835,6 +848,11 @@ func ExtractPkScriptAddrs(pkScript []byte, chainParams *chaincfg.Params) (Script // Avoid parsing the script for the cases that already have the able to // work with raw scripts. + // Check for pay-to-pubkey-hash script. + if hash := extractPubKeyHash(pkScript); hash != nil { + return PubKeyHashTy, pubKeyHashToAddrs(hash, chainParams), 1, nil + } + // Check for pay-to-script-hash. if hash := extractScriptHash(pkScript); hash != nil { return ScriptHashTy, scriptHashToAddrs(hash, chainParams), 1, nil @@ -857,18 +875,6 @@ func ExtractPkScriptAddrs(pkScript []byte, chainParams *chaincfg.Params) (Script scriptClass := typeOfScript(scriptVersion, pkScript) 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) - if err == nil { - addrs = append(addrs, addr) - } - case WitnessV0PubKeyHashTy: // A pay-to-witness-pubkey-hash script is of thw form: // OP_0 <20-byte hash> From 0e810b4ef4a06de24f804f71bbbe12b96edd71e9 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:12:31 -0500 Subject: [PATCH 224/419] txscript: Optimize ExtractPkScriptAddrs pubkey. This continues the process of converting the ExtractPkScriptAddrs function to use the optimized extraction functions recently introduced as part of the typeOfScript conversion. In particular, this converts the detection for pay-to-pubkey scripts. --- txscript/standard.go | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/txscript/standard.go b/txscript/standard.go index af50660635..6377598c93 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -858,6 +858,16 @@ func ExtractPkScriptAddrs(pkScript []byte, chainParams *chaincfg.Params) (Script 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 + } + // Fall back to slow path. Ultimately these are intended to be replaced by // faster variants based on the unparsed raw scripts. @@ -887,17 +897,6 @@ func ExtractPkScriptAddrs(pkScript []byte, chainParams *chaincfg.Params) (Script addrs = append(addrs, addr) } - 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) - if err == nil { - addrs = append(addrs, addr) - } - case WitnessV0ScriptHashTy: // A pay-to-witness-script-hash script is of the form: // OP_0 <32-byte hash> From 0bc18254d403ea3d1a77626fa86dc0091c83be15 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:12:33 -0500 Subject: [PATCH 225/419] txscript: Optimize ExtractPkScriptAddrs multisig. This continues the process of converting the ExtractPkScriptAddrs function to use the optimized extraction functions recently introduced as part of the typeOfScript conversion. In particular, this converts the detection for multisig scripts. Also, since the remaining slow path cases are all recursive calls, the parsed opcodes are no longer used, so parsing is removed. --- txscript/standard.go | 36 ++++++++++++++++-------------------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/txscript/standard.go b/txscript/standard.go index 6377598c93..b187ac012e 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -868,11 +868,27 @@ func ExtractPkScriptAddrs(pkScript []byte, chainParams *chaincfg.Params) (Script return PubKeyTy, addrs, 1, nil } + // 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 + } + // Fall back to slow path. Ultimately these are intended to be replaced by // faster variants based on the unparsed raw scripts. var addrs []btcutil.Address var requiredSigs int + var err error // No valid addresses or required signatures if the script doesn't // parse. @@ -881,7 +897,6 @@ func ExtractPkScriptAddrs(pkScript []byte, chainParams *chaincfg.Params) (Script return NonStandardTy, nil, 0, err } - const scriptVersion = 0 scriptClass := typeOfScript(scriptVersion, pkScript) switch scriptClass { @@ -909,25 +924,6 @@ func ExtractPkScriptAddrs(pkScript []byte, chainParams *chaincfg.Params) (Script 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.value) - numPubKeys := asSmallInt(pops[len(pops)-2].opcode.value) - - // 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. From 507a4dcc005dea7bf3c1742498cd68de6977a9de Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:12:38 -0500 Subject: [PATCH 226/419] txscript: Optimize ExtractPkScriptAddrs nulldata. This continues the process of converting the ExtractPkScriptAddrs function to use the optimized extraction functions recently introduced as part of the typeOfScript conversion. In particular, this converts the detection for nulldata scripts, removes the slow path fallback code since it is the final case, and modifies the comment to call out the script version semantics. The following is a before and after comparison of analyzing both a typical standard script and a very large non-standard script: benchmark old ns/op new ns/op delta ----------------------------------------------------------------------- BenchmarkExtractPkScriptAddrsLarge 132400 44.4 -99.97% BenchmarkExtractPkScriptAddrs 1265 231 -81.74% benchmark old allocs new allocs delta ----------------------------------------------------------------------- BenchmarkExtractPkScriptAddrsLarge 1 0 -100.00% BenchmarkExtractPkScriptAddrs 5 2 -60.00% benchmark old bytes new bytes delta ----------------------------------------------------------------------- BenchmarkExtractPkScriptAddrsLarge 466944 0 -100.00% BenchmarkExtractPkScriptAddrs 1600 48 -97.00% --- txscript/standard.go | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/txscript/standard.go b/txscript/standard.go index b187ac012e..89c2196663 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -843,11 +843,12 @@ func scriptHashToAddrs(hash []byte, params *chaincfg.Params) []btcutil.Address { // 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. +// +// NOTE: This function only attempts to identify version 0 scripts. The return +// value will indicate a nonstandard script type for other script versions along +// with an invalid script version error. func ExtractPkScriptAddrs(pkScript []byte, chainParams *chaincfg.Params) (ScriptClass, []btcutil.Address, int, error) { - // Avoid parsing the script for the cases that already have the able to - // work with raw scripts. - // Check for pay-to-pubkey-hash script. if hash := extractPubKeyHash(pkScript); hash != nil { return PubKeyHashTy, pubKeyHashToAddrs(hash, chainParams), 1, nil @@ -883,6 +884,12 @@ func ExtractPkScriptAddrs(pkScript []byte, chainParams *chaincfg.Params) (Script return MultiSigTy, addrs, details.requiredSigs, nil } + // Check for null data script. + if isNullDataScript(scriptVersion, pkScript) { + // Null data transactions have no addresses or required signatures. + return NullDataTy, nil, 0, nil + } + // Fall back to slow path. Ultimately these are intended to be replaced by // faster variants based on the unparsed raw scripts. @@ -924,15 +931,13 @@ func ExtractPkScriptAddrs(pkScript []byte, chainParams *chaincfg.Params) (Script 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. } + // Don't attempt to extract addresses or required signatures for nonstandard + // transactions. return scriptClass, addrs, requiredSigs, nil } From ae7fffbe52af902984f38c55e558a2334ef1fe69 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Fri, 19 Apr 2019 19:18:51 -0700 Subject: [PATCH 227/419] txscript: Optimize ExtractPkScriptAddrs witness pubkey hash This continues the process of converting the ExtractPkScriptAddrs function to use the optimized extraction functions recently introduced as part of the typeOfScript conversion. In particular, this converts the extraction for witness-pubkey-hash scripts. --- txscript/standard.go | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/txscript/standard.go b/txscript/standard.go index 89c2196663..c0178250c9 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -890,6 +890,15 @@ func ExtractPkScriptAddrs(pkScript []byte, chainParams *chaincfg.Params) (Script 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 + } + // Fall back to slow path. Ultimately these are intended to be replaced by // faster variants based on the unparsed raw scripts. @@ -907,18 +916,6 @@ func ExtractPkScriptAddrs(pkScript []byte, chainParams *chaincfg.Params) (Script scriptClass := typeOfScript(scriptVersion, pkScript) switch scriptClass { - 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) - } - case WitnessV0ScriptHashTy: // A pay-to-witness-script-hash script is of the form: // OP_0 <32-byte hash> From a83152214ccf3fd4972a011e065e37a982343778 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Fri, 19 Apr 2019 19:22:52 -0700 Subject: [PATCH 228/419] txscript: Optimize ExtractPkScriptAddrs witness script hash This continues the process of converting the ExtractPkScriptAddrs function to use the optimized extraction functions recently introduced as part of the typeOfScript conversion. In particular, this converts the extract of witness-pay-to-script-hash scripts. --- txscript/standard.go | 29 +++++++++-------------------- 1 file changed, 9 insertions(+), 20 deletions(-) diff --git a/txscript/standard.go b/txscript/standard.go index c0178250c9..d9f8a9a3e3 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -899,35 +899,24 @@ func ExtractPkScriptAddrs(pkScript []byte, chainParams *chaincfg.Params) (Script return WitnessV0PubKeyHashTy, addrs, 1, nil } + if hash := extractWitnessScriptHash(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 + } + // Fall back to slow path. Ultimately these are intended to be replaced by // faster variants based on the unparsed raw scripts. var addrs []btcutil.Address var requiredSigs int - var err 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 - } scriptClass := typeOfScript(scriptVersion, pkScript) switch scriptClass { - 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 err == nil { - addrs = append(addrs, addr) - } - case NonStandardTy: // Don't attempt to extract addresses or required signatures for // nonstandard transactions. From 1034a66b357483b61c368232a4df9fc40ddc45ad Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Fri, 19 Apr 2019 19:32:37 -0700 Subject: [PATCH 229/419] txscript: Optimize ExtractPkScriptAddr assume non-standard if no success This completes the process of converting the ExtractPkScriptAddr function to use the optimized extraction functions recently introduced as part of the typeOfScript conversion. In particular, this cleans up the final remaining case for non-standard transactions. The method now returns NonStandardTy direclty if no other branch was taken. The following is a before and after comparison of attempting to extract pkscript addrs from a very large, non-standard script. benchmark old ns/op new ns/op delta BenchmarkExtractPkScriptAddrsLarge-8 60713 17.0 -99.97% BenchmarkExtractPkScriptAddrs-8 289 17.0 -94.12% benchmark old allocs new allocs delta BenchmarkExtractPkScriptAddrsLarge-8 1 0 -100.00% BenchmarkExtractPkScriptAddrs-8 1 0 -100.00% benchmark old bytes new bytes delta BenchmarkExtractPkScriptAddrsLarge-8 311299 0 -100.00% BenchmarkExtractPkScriptAddrs-8 768 0 -100.00% --- txscript/standard.go | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) diff --git a/txscript/standard.go b/txscript/standard.go index d9f8a9a3e3..326d14d828 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -908,23 +908,8 @@ func ExtractPkScriptAddrs(pkScript []byte, chainParams *chaincfg.Params) (Script return WitnessV0ScriptHashTy, addrs, 1, nil } - // Fall back to slow path. Ultimately these are intended to be replaced by - // faster variants based on the unparsed raw scripts. - - var addrs []btcutil.Address - var requiredSigs int - - scriptClass := typeOfScript(scriptVersion, pkScript) - - switch scriptClass { - case NonStandardTy: - // Don't attempt to extract addresses or required signatures for - // nonstandard transactions. - } - - // Don't attempt to extract addresses or required signatures for nonstandard - // transactions. - 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. From 6fb1c82fe5d14b4b2d7bba13c2d727051107aa25 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Fri, 19 Apr 2019 18:58:28 -0700 Subject: [PATCH 230/419] txscript: Optimize IsWitnessProgram --- txscript/script.go | 17 +++-------------- txscript/standard.go | 45 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 14 deletions(-) diff --git a/txscript/script.go b/txscript/script.go index 52bedf2699..1ca953dea4 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -103,20 +103,7 @@ 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 @@ -125,6 +112,8 @@ func IsWitnessProgram(script []byte) bool { // 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. +// +// DEPRECATED: Use isWitnessProgramScript instead. func isWitnessProgram(pops []parsedOpcode) bool { return len(pops) == 2 && isSmallInt(pops[0].opcode.value) && diff --git a/txscript/standard.go b/txscript/standard.go index 326d14d828..4b7d9be5bb 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -387,6 +387,51 @@ func isWitnessScriptHashScript(script []byte) bool { return extractWitnessScriptHash(script) != nil } +// 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. +// +// 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 isWitnessProgramScript(script []byte) bool { + // Skip parsing if we know the program is invalid based on size. + if len(script) < 4 || len(script) > 42 { + return false + } + + const scriptVersion = 0 + tokenizer := MakeScriptTokenizer(scriptVersion, script) + + // The first opcode must be a small int. + if !tokenizer.Next() || + !isSmallInt(tokenizer.Opcode()) { + + return false + } + + // 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 false + } + + // The witness program is valid if there are no more opcodes, and we + // terminated without a parsing error. + return tokenizer.Done() && tokenizer.Err() == nil +} + // isNullDataScript returns whether or not the passed script is a standard // null data script. // From 8b706344a1fbbc5307058d2d9beaa054cb43ab49 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Fri, 19 Apr 2019 19:39:28 -0700 Subject: [PATCH 231/419] txscript: Return witness version and program in one pass --- txscript/standard.go | 52 +++++++++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 20 deletions(-) diff --git a/txscript/standard.go b/txscript/standard.go index 4b7d9be5bb..e3cf770730 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -387,25 +387,13 @@ func isWitnessScriptHashScript(script []byte) bool { return extractWitnessScriptHash(script) != nil } -// 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. -// -// 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 isWitnessProgramScript(script []byte) bool { +// extractWitnessProgramInfo returns the version and program if the passed +// script constitutes a valid witness program. The alst 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 false + return 0, nil, false } const scriptVersion = 0 @@ -415,8 +403,9 @@ func isWitnessProgramScript(script []byte) bool { if !tokenizer.Next() || !isSmallInt(tokenizer.Opcode()) { - return false + 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 @@ -424,12 +413,35 @@ func isWitnessProgramScript(script []byte) bool { if !tokenizer.Next() || !isCanonicalPush(tokenizer.Opcode(), tokenizer.Data()) { - return false + 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. - return tokenizer.Done() && tokenizer.Err() == nil + 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. +// +// 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 isWitnessProgramScript(script []byte) bool { + _, _, valid := extractWitnessProgramInfo(script) + return valid } // isNullDataScript returns whether or not the passed script is a standard From 4b03b593912e1513937d98d7351bf8a58176063f Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Fri, 5 Feb 2021 01:58:59 -0800 Subject: [PATCH 232/419] txscript: Use internal analysis methods for GetWitnessSigOpCount --- txscript/script.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/txscript/script.go b/txscript/script.go index 1ca953dea4..57c7b9be17 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -832,15 +832,15 @@ func GetPreciseSigOpCount(scriptSig, scriptPubKey []byte, _ 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. - if IsPayToScriptHash(pkScript) && IsPushOnlyScript(sigScript) && - IsWitnessProgram(sigScript[1:]) { + if isScriptHashScript(pkScript) && IsPushOnlyScript(sigScript) && + len(sigScript) > 0 && isWitnessProgramScript(sigScript[1:]) { return getWitnessSigOps(sigScript[1:], witness) } From d410d7d7d4fe116508e7aa9a180bd77dd5b9b8c3 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Fri, 19 Apr 2019 19:43:43 -0700 Subject: [PATCH 233/419] txscript: Optimize ExtractWitnessProgramInfo --- txscript/script.go | 13 +++---------- txscript/standard.go | 2 +- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/txscript/script.go b/txscript/script.go index 57c7b9be17..9d7de56cbd 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -131,23 +131,16 @@ func IsNullData(script []byte) bool { // 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.value) - witnessProgram := pops[1].data - - return witnessVersion, witnessProgram, nil + return version, program, nil } // IsPushOnlyScript returns whether or not the passed script only pushes data diff --git a/txscript/standard.go b/txscript/standard.go index e3cf770730..44902971e9 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -388,7 +388,7 @@ func isWitnessScriptHashScript(script []byte) bool { } // extractWitnessProgramInfo returns the version and program if the passed -// script constitutes a valid witness program. The alst return value indicates +// 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. From 7ad3a10442d80b204e8276f524d4859aa4d55887 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:12:46 -0500 Subject: [PATCH 234/419] txscript: mergeMultiSig function def order cleanup. This moves the function definition for mergeMultiSig so it is more consistent with the preferred order used through the codebase. In particular, the functions are defined before they're first used and generally as close as possible to the first use when they're defined in the same file. --- txscript/sign.go | 135 ++++++++++++++++++++++++----------------------- 1 file changed, 68 insertions(+), 67 deletions(-) diff --git a/txscript/sign.go b/txscript/sign.go index b9f8b2dbb4..587910649c 100644 --- a/txscript/sign.go +++ b/txscript/sign.go @@ -212,73 +212,6 @@ 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 @@ -397,6 +330,74 @@ 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. +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. + 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, + // therefore the error is ignored. + 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 + } +} + // 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 { From dd609d6e36f3e6c7a4a0262cd0004733854d35c1 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Fri, 19 Apr 2019 15:25:18 -0700 Subject: [PATCH 235/419] txscript: Introduce calcWitnessSignatureHashRaw --- txscript/script.go | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/txscript/script.go b/txscript/script.go index 9d7de56cbd..4651798541 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -385,7 +385,7 @@ func calcHashOutputs(tx *wire.MsgTx) chainhash.Hash { return chainhash.DoubleHashH(b.Bytes()) } -// calcWitnessSignatureHash computes the sighash digest of a transaction's +// 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 @@ -396,7 +396,7 @@ func calcHashOutputs(tx *wire.MsgTx) chainhash.Hash { // 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, +func calcWitnessSignatureHashRaw(scriptSig []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 @@ -446,7 +446,7 @@ func calcWitnessSignatureHash(subScript []parsedOpcode, sigHashes *TxSigHashes, binary.LittleEndian.PutUint32(bIndex[:], txIn.PreviousOutPoint.Index) sigHash.Write(bIndex[:]) - if isWitnessPubKeyHash(subScript) { + if isWitnessPubKeyHashScript(scriptSig) { // 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. @@ -454,15 +454,14 @@ func calcWitnessSignatureHash(subScript []parsedOpcode, sigHashes *TxSigHashes, sigHash.Write([]byte{OP_DUP}) sigHash.Write([]byte{OP_HASH160}) sigHash.Write([]byte{OP_DATA_20}) - sigHash.Write(subScript[1].data) + sigHash.Write(extractWitnessPubKeyHash(scriptSig)) 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) + wire.WriteVarBytes(&sigHash, 0, scriptSig) } // Next, add the input amount, and sequence number of the input being @@ -501,6 +500,30 @@ func calcWitnessSignatureHash(subScript []parsedOpcode, sigHashes *TxSigHashes, return chainhash.DoubleHashB(sigHash.Bytes()), nil } +// 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. +// +// DEPRECATED: Use calcWitnessSignatureHashRaw instead. +func calcWitnessSignatureHash(subScript []parsedOpcode, sigHashes *TxSigHashes, + hashType SigHashType, tx *wire.MsgTx, idx int, amt int64) ([]byte, error) { + + script, err := unparseScript(subScript) + if err != nil { + return nil, err + } + + return calcWitnessSignatureHashRaw(script, sigHashes, hashType, tx, idx, amt) +} + // 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, From ed9e17a043bdab0427b3f3b8113b9cc27e90cd84 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Fri, 19 Apr 2019 20:09:07 -0700 Subject: [PATCH 236/419] txscript: Remove unused isWitnessPubKeyHash --- txscript/script.go | 8 -------- 1 file changed, 8 deletions(-) diff --git a/txscript/script.go b/txscript/script.go index 4651798541..10e0a1ca61 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -90,14 +90,6 @@ func IsPayToWitnessPubKeyHash(script []byte) bool { 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 -} - // IsWitnessProgram returns true if the passed script is a valid witness // program which is encoded according to the passed witness program version. A // witness program must be a small integer (from 0-16), followed by 2-40 bytes From e00fec15571157f1241c8347893cb030ee28e034 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Fri, 19 Apr 2019 15:26:10 -0700 Subject: [PATCH 237/419] txscript: Use optimized calcWitnessSignatureHashRaw w/o parsing --- txscript/script.go | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/txscript/script.go b/txscript/script.go index 10e0a1ca61..6798be1cb5 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -521,13 +521,12 @@ func calcWitnessSignatureHash(subScript []parsedOpcode, sigHashes *TxSigHashes, 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) + const scriptVersion = 0 + if err := checkScriptParses(scriptVersion, script); err != nil { + return nil, err } - return calcWitnessSignatureHash(parsedScript, sigHashes, hType, tx, idx, - amt) + return calcWitnessSignatureHashRaw(script, sigHashes, hType, tx, idx, amt) } // shallowCopyTx creates a shallow copy of the transaction for use when From f3354beb12ceaf97b0ab25a2ac3d9817231fa663 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:12:50 -0500 Subject: [PATCH 238/419] txscript: Use raw scripts in SignTxOutput. This converts SignTxOutput and supporting funcs, namely sign, mergeScripts and mergeMultiSig, to make use of the new tokenizer as well as some recently added funcs that deal with raw scripts in order to remove the reliance on parsed opcodes as a step towards utlimately removing them altogether and updates the comments to explicitly call out the script version semantics. It is worth noting that this has the side effect of optimizing the function as well, however, since this change is not focused on the optimization aspects, no benchmarks are provided. --- txscript/sign.go | 88 ++++++++++++++++++++++++++++-------------------- 1 file changed, 51 insertions(+), 37 deletions(-) diff --git a/txscript/sign.go b/txscript/sign.go index 587910649c..4d63a9b245 100644 --- a/txscript/sign.go +++ b/txscript/sign.go @@ -218,37 +218,44 @@ func sign(chainParams *chaincfg.Params, tx *wire.MsgTx, idx int, // 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 @@ -278,10 +285,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, err := calcSignatureHash(pkPops, hashType, tx, idx) - if err != nil { - panic(fmt.Sprintf("cannot compute sighash: %v", err)) - } + hash := calcSignatureHashRaw(pkScript, hashType, tx, idx) for _, addr := range addresses { // All multisig addresses should be pubkey addresses @@ -336,6 +340,10 @@ sigLoop: // 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 { @@ -344,32 +352,34 @@ func mergeScripts(chainParams *chaincfg.Params, tx *wire.MsgTx, idx int, // 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: - // 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 { + // 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 } - prevPops, err := parseScript(prevScript) - if err != nil || len(prevPops) == 0 { + if len(prevScript) == 0 || + checkScriptParses(scriptVersion, prevScript) != nil { + return sigScript } - // assume that script in sigPops is the correct one, we just - // made it. - script := sigPops[len(sigPops)-1].data + // 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) - // regenerate scripts. - sigScript, _ := unparseScript(sigPops) - prevScript, _ := unparseScript(prevPops) - // Merge mergedScript := mergeScripts(chainParams, tx, idx, script, class, addresses, nrequired, sigScript, prevScript) @@ -380,6 +390,7 @@ func mergeScripts(chainParams *chaincfg.Params, tx *wire.MsgTx, idx int, builder.AddData(script) finalScript, _ := builder.Script() return finalScript + case MultiSigTy: return mergeMultiSig(tx, idx, addresses, nRequired, pkScript, sigScript, prevScript) @@ -408,8 +419,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) } @@ -434,6 +444,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) { From 30874ff76b167796960cbd57178305cfefb2b0da Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:12:51 -0500 Subject: [PATCH 239/419] txscript: Implement efficient opcode data removal. This introduces a new function named removeOpcodeByDataRaw which accepts the raw scripts and data to remove versus requiring the parsed opcodes to both significantly optimize it as well as make it more flexible for working with raw scripts. There are several places in the rest of the code that currently only have access to the parsed opcodes, so this only introduces the function for use in the future and deprecates the existing one. Note that, in practice, the script will never actually contain the data that is intended to be removed since the 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, it avoids allocating a new script unless there is actually a match that needs to be removed. Finally, it updates the tests to use the new function. --- txscript/script.go | 55 +++++++++++++++++++++++++++++++++++++++++ txscript/script_test.go | 13 +++++----- 2 files changed, 61 insertions(+), 7 deletions(-) diff --git a/txscript/script.go b/txscript/script.go index 6798be1cb5..336a2c8b29 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -310,6 +310,8 @@ func isCanonicalPush(opcode byte, data []byte) bool { // removeOpcodeByData will return the script minus any opcodes that would push // the passed data to the stack. +// +// DEPRECATED. Use removeOpcodeByDataRaw instead. func removeOpcodeByData(pkscript []parsedOpcode, data []byte) []parsedOpcode { retScript := make([]parsedOpcode, 0, len(pkscript)) for _, pop := range pkscript { @@ -323,6 +325,59 @@ func removeOpcodeByData(pkscript []parsedOpcode, data []byte) []parsedOpcode { } +// removeOpcodeByDataRaw 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 removeOpcodeByDataRaw(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()]...) + } + + prevOffset = tokenizer.ByteIndex() + } + if result == nil { + result = script + } + return result +} + // 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 diff --git a/txscript/script_test.go b/txscript/script_test.go index 62c51e4181..9a64865e35 100644 --- a/txscript/script_test.go +++ b/txscript/script_test.go @@ -4129,16 +4129,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 removeOpcodeByDataRaw(script, data), nil } for _, test := range tests { From a4720f30e532c6c2815dd8ea626cf371ad2dca0e Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Fri, 19 Apr 2019 16:26:22 -0700 Subject: [PATCH 240/419] txscript: Optimize removeOpcodeRaw --- txscript/script.go | 39 +++++++++++++++++++++++++++++++++++++++ txscript/script_test.go | 7 +++---- 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/txscript/script.go b/txscript/script.go index 336a2c8b29..7bfe44b3b9 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -269,6 +269,8 @@ func DisasmString(script []byte) (string, error) { // removeOpcode will remove any opcode matching ``opcode'' from the opcode // stream in pkscript +// +// DEPRECATED. Use removeOpcodeRaw instead. func removeOpcode(pkscript []parsedOpcode, opcode byte) []parsedOpcode { retScript := make([]parsedOpcode, 0, len(pkscript)) for _, pop := range pkscript { @@ -279,6 +281,43 @@ func removeOpcode(pkscript []parsedOpcode, opcode byte) []parsedOpcode { return retScript } +// 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() + } + if result == nil { + return script + } + return result +} + // 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. diff --git a/txscript/script_test.go b/txscript/script_test.go index 9a64865e35..02c364ce31 100644 --- a/txscript/script_test.go +++ b/txscript/script_test.go @@ -3981,13 +3981,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 { From 2ddcdb91f5bcb8df7fab43cbf1b92cccaadeb6fc Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Fri, 19 Apr 2019 20:11:34 -0700 Subject: [PATCH 241/419] txscript: Remove unused removeOpcode --- txscript/script.go | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/txscript/script.go b/txscript/script.go index 7bfe44b3b9..7c8423bb50 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -267,20 +267,6 @@ func DisasmString(script []byte) (string, error) { return disbuf.String(), tokenizer.Err() } -// removeOpcode will remove any opcode matching ``opcode'' from the opcode -// stream in pkscript -// -// DEPRECATED. Use removeOpcodeRaw instead. -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) - } - } - return retScript -} - // 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 From a2ab5b66816c8270185d43d20de7f11681be8afa Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Fri, 19 Apr 2019 16:28:26 -0700 Subject: [PATCH 242/419] txscript: Use removeOpcodeRaw for CODESEP in calcSigHash --- txscript/script.go | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/txscript/script.go b/txscript/script.go index 7c8423bb50..0be0a7b8b3 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -683,24 +683,14 @@ func calcSignatureHashRaw(sigScript []byte, hashType SigHashType, tx *wire.MsgTx } // Remove all instances of OP_CODESEPARATOR from the script. - filteredScript := make([]byte, 0, len(sigScript)) - const scriptVersion = 0 - tokenizer := MakeScriptTokenizer(scriptVersion, sigScript) - var prevOffset int32 - for tokenizer.Next() { - if tokenizer.Opcode() != OP_CODESEPARATOR { - filteredScript = append(filteredScript, - sigScript[prevOffset:tokenizer.ByteIndex()]...) - } - prevOffset = tokenizer.ByteIndex() - } + 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 = filteredScript + txCopy.TxIn[idx].SignatureScript = sigScript } else { txCopy.TxIn[i].SignatureScript = nil } From 484f7b1fef6a62eabe31f8c8a9fa44d15e2310b2 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:12:52 -0500 Subject: [PATCH 243/419] txscript: Make isDisabled accept raw opcode. This converts the isDisabled function defined on a parsed opcode to a standalone function which accepts an opcode as a byte instead in order to make it more flexible for raw script analysis. It also updates all callers accordingly. --- txscript/engine.go | 42 +++++++++++++++++++++++++++++++++++++++++- txscript/opcode.go | 39 --------------------------------------- 2 files changed, 41 insertions(+), 40 deletions(-) diff --git a/txscript/engine.go b/txscript/engine.go index ef7ad33e3c..00973a03a4 100644 --- a/txscript/engine.go +++ b/txscript/engine.go @@ -154,12 +154,52 @@ 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 + } +} + // 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 { // Disabled opcodes are fail on program counter. - if pop.isDisabled() { + if isOpcodeDisabled(pop.opcode.value) { str := fmt.Sprintf("attempt to execute disabled opcode %s", pop.opcode.name) return scriptError(ErrDisabledOpcode, str) diff --git a/txscript/opcode.go b/txscript/opcode.go index 893bebdf8d..62c6649d3d 100644 --- a/txscript/opcode.go +++ b/txscript/opcode.go @@ -619,45 +619,6 @@ type parsedOpcode struct { 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 - } -} - // checkParseableInScript checks whether or not the current opcode is able to be // parsed at a certain position in a script. // This returns the position of the next opcode to be parsed in the script. From c6410257eb2894ee086fda5bb5ce88e33a44011a Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:12:53 -0500 Subject: [PATCH 244/419] txscript: Make alwaysIllegal accept raw opcode. This converts the alwaysIllegal function defined on a parsed opcode to a standalone function named isOpcodeAlwaysIllegal which accepts an opcode as a byte instead in order to make it more flexible for raw script analysis. It also updates all callers accordingly. --- txscript/engine.go | 16 +++++++++++++++- txscript/opcode.go | 14 -------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/txscript/engine.go b/txscript/engine.go index 00973a03a4..1c6a124b0c 100644 --- a/txscript/engine.go +++ b/txscript/engine.go @@ -194,6 +194,20 @@ func isOpcodeDisabled(opcode byte) bool { } } +// 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 + } +} + // 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. @@ -206,7 +220,7 @@ func (vm *Engine) executeOpcode(pop *parsedOpcode) error { } // Always-illegal opcodes are fail on program counter. - if pop.alwaysIllegal() { + if isOpcodeAlwaysIllegal(pop.opcode.value) { str := fmt.Sprintf("attempt to execute reserved opcode %s", pop.opcode.name) return scriptError(ErrReservedOpcode, str) diff --git a/txscript/opcode.go b/txscript/opcode.go index 62c6649d3d..dc4ec50eb5 100644 --- a/txscript/opcode.go +++ b/txscript/opcode.go @@ -692,20 +692,6 @@ func (pop *parsedOpcode) checkParseableInScript(script []byte, scriptPos int) (i return scriptPos, nil } -// 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 { From 62c608f2654367caedef75e4370155d2cd0c0024 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:12:54 -0500 Subject: [PATCH 245/419] txscript: Make isConditional accept raw opcode. This converts the isConditional function defined on a parsed opcode to a standalone function named isOpcodeConditional which accepts an opcode as a byte instead in order to make it more flexible for raw script analysis. It also updates all callers accordingly. --- txscript/engine.go | 19 ++++++++++++++++++- txscript/opcode.go | 17 ----------------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/txscript/engine.go b/txscript/engine.go index 1c6a124b0c..ddb26de58f 100644 --- a/txscript/engine.go +++ b/txscript/engine.go @@ -208,6 +208,23 @@ func isOpcodeAlwaysIllegal(opcode byte) bool { } } +// 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 + } +} + // 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. @@ -243,7 +260,7 @@ func (vm *Engine) executeOpcode(pop *parsedOpcode) error { // 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(pop.opcode.value) { return nil } diff --git a/txscript/opcode.go b/txscript/opcode.go index dc4ec50eb5..7705f59b02 100644 --- a/txscript/opcode.go +++ b/txscript/opcode.go @@ -692,23 +692,6 @@ func (pop *parsedOpcode) checkParseableInScript(script []byte, scriptPos int) (i return scriptPos, nil } -// 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 From 710bd5646e55a520054c4620e507b8867b864e64 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:12:55 -0500 Subject: [PATCH 246/419] txscript: Make min push accept raw opcode and data. This converts the checkMinimalDataPush function defined on a parsed opcode to a standalone function which accepts an opcode and data slice instead in order to make it more flexible for raw script analysis. It also updates all callers accordingly. --- txscript/engine.go | 51 +++++++++++++++++++++++++++++++++++++++++- txscript/opcode.go | 55 ---------------------------------------------- 2 files changed, 50 insertions(+), 56 deletions(-) diff --git a/txscript/engine.go b/txscript/engine.go index ddb26de58f..a2dfad4c32 100644 --- a/txscript/engine.go +++ b/txscript/engine.go @@ -225,6 +225,55 @@ func isOpcodeConditional(opcode byte) bool { } } +// 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. @@ -269,7 +318,7 @@ func (vm *Engine) executeOpcode(pop *parsedOpcode) error { if vm.dstack.verifyMinimalData && vm.isBranchExecuting() && pop.opcode.value >= 0 && pop.opcode.value <= OP_PUSHDATA4 { - if err := pop.checkMinimalDataPush(); err != nil { + if err := checkMinimalDataPush(pop.opcode, pop.data); err != nil { return err } } diff --git a/txscript/opcode.go b/txscript/opcode.go index 7705f59b02..95b4758055 100644 --- a/txscript/opcode.go +++ b/txscript/opcode.go @@ -692,61 +692,6 @@ func (pop *parsedOpcode) checkParseableInScript(script []byte, scriptPos int) (i return scriptPos, nil } -// 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 -} - // 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 From 54036e8bab1d8c8a596b2afbf2b0f4641b69a49f Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:12:56 -0500 Subject: [PATCH 247/419] txscript: Convert to use non-parsed opcode disasm. This converts the engine's current program counter disasembly to make use of the standalone disassembly function to remove the dependency on the parsed opcode struct. It also updates the tests accordingly. --- txscript/engine.go | 7 +++++-- txscript/opcode.go | 8 -------- txscript/opcode_test.go | 10 ++++++---- 3 files changed, 11 insertions(+), 14 deletions(-) diff --git a/txscript/engine.go b/txscript/engine.go index a2dfad4c32..191de29f5c 100644 --- a/txscript/engine.go +++ b/txscript/engine.go @@ -10,6 +10,7 @@ import ( "crypto/sha256" "fmt" "math/big" + "strings" "github.com/btcsuite/btcd/btcec" "github.com/btcsuite/btcd/wire" @@ -331,8 +332,10 @@ func (vm *Engine) executeOpcode(pop *parsedOpcode) error { // 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)) + var buf strings.Builder + pop := vm.scripts[scriptIdx][scriptOff] + disasmOpcode(&buf, pop.opcode, pop.data, false) + return fmt.Sprintf("%02x:%04x: %s", scriptIdx, scriptOff, buf.String()) } // validPC returns an error if the current script position is valid for diff --git a/txscript/opcode.go b/txscript/opcode.go index 95b4758055..a0d050529a 100644 --- a/txscript/opcode.go +++ b/txscript/opcode.go @@ -740,14 +740,6 @@ func disasmOpcode(buf *strings.Builder, op *opcode, data []byte, compact bool) { buf.WriteString(fmt.Sprintf(" 0x%02x", data)) } -// print returns a human-readable string representation of the opcode for use -// in script disassembly. -func (pop *parsedOpcode) print(compact bool) string { - var buf strings.Builder - disasmOpcode(&buf, pop.opcode, pop.data, compact) - return buf.String() -} - // 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) { diff --git a/txscript/opcode_test.go b/txscript/opcode_test.go index 1487dde590..3c5abf9da9 100644 --- a/txscript/opcode_test.go +++ b/txscript/opcode_test.go @@ -127,8 +127,9 @@ func TestOpcodeDisasm(t *testing.T) { 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, @@ -193,8 +194,9 @@ func TestOpcodeDisasm(t *testing.T) { 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, From d6b968c3ea24a55b51af05f764975e782b9bb677 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:12:58 -0500 Subject: [PATCH 248/419] txscript: Refactor engine to use raw scripts. This refactors the script engine to store and step through raw scripts by making using of the new zero-allocation script tokenizer as opposed to the less efficient method of storing and stepping through parsed opcodes. It also improves several aspects while refactoring such as optimizing the disassembly trace, showing all scripts in the trace in the case of execution failure, and providing additional comments describing the purpose of each field in the engine. It should be noted that this is a step towards removing the parsed opcode struct and associated supporting code altogether, however, in order to ease the review process, this retains the struct and all function signatures for opcode execution which make use of an individual parsed opcode. Those will be updated in future commits. The following is an overview of the changes: - Modify internal engine scripts slice to use raw scripts instead of parsed opcodes - Introduce a tokenizer to the engine to track the current script - Remove no longer needed script offset parameter from the engine since that is tracked by the tokenizer - Add an opcode index counter for disassembly purposes to the engine - Update check for valid program counter to only consider the script index - Update tests for bad program counter accordingly - Rework the NewEngine function - Store the raw scripts - Setup the initial tokenizer - Explicitly check against version 0 instead of DefaultScriptVersion which would break consensus if changed - Check the scripts parse according to version 0 semantics to retain current consensus rules - Improve comments throughout - Rework the Step function - Use the tokenizer and raw scripts - Create a parsed opcode on the fly for now to retain existing opcode execution function signatures - Improve comments throughout - Update the Execute function - Explicitly check against version 0 instead of DefaultScriptVersion which would break consensus if changed - Improve the disassembly tracing in the case of error - Update the CheckErrorCondition function - Modify clean stack error message to make sense in all cases - Improve the comments - Update the DisasmPC and DisasmScript functions on the engine - Use the tokenizer - Optimize construction via the use of strings.Builder - Modify the subScript function to return the raw script bytes since the parsed opcodes are no longer stored - Update the various signature checking opcodes to use the raw opcode data removal and signature hash calculation functions since the subscript is now a raw script - opcodeCheckSig - opcodeCheckMultiSig - opcodeCheckSigAlt --- txscript/engine.go | 373 +++++++++++++++++++++++++++------------- txscript/engine_test.go | 19 +- txscript/opcode.go | 20 +-- 3 files changed, 266 insertions(+), 146 deletions(-) diff --git a/txscript/engine.go b/txscript/engine.go index 191de29f5c..1afb8324dd 100644 --- a/txscript/engine.go +++ b/txscript/engine.go @@ -119,21 +119,84 @@ var halfOrder = new(big.Int).Rsh(btcec.S256().N, 1) // 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). + flags ScriptFlags + tx wire.MsgTx + txIdx int + version uint16 + bip16 bool + sigCache *SigCache + hashCache *TxSigHashes + + // 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 @@ -327,44 +390,17 @@ func (vm *Engine) executeOpcode(pop *parsedOpcode) error { 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 { - var buf strings.Builder - pop := vm.scripts[scriptIdx][scriptOff] - disasmOpcode(&buf, pop.opcode, pop.data, false) - return fmt.Sprintf("%02x:%04x: %s", scriptIdx, scriptOff, buf.String()) -} - -// 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. @@ -392,7 +428,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 } @@ -400,7 +438,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 @@ -430,10 +468,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 } @@ -441,7 +479,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: @@ -482,18 +520,50 @@ func (vm *Engine) verifyWitnessProgram(witness [][]byte) error { } // 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, @@ -501,19 +571,25 @@ 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. + // 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") @@ -527,11 +603,14 @@ func (vm *Engine) CheckErrorCondition(finalScript bool) error { "have clean stack") } + // 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. if finalScript && vm.hasFlag(ScriptVerifyCleanStack) && 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, @@ -545,10 +624,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") @@ -556,25 +639,39 @@ 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. + pop := parsedOpcode{opcode: vm.tokenizer.op, data: vm.tokenizer.Data()} + err = vm.executeOpcode(&pop) if err != nil { return true, err } @@ -589,43 +686,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++ @@ -633,30 +740,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) })) @@ -668,7 +791,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() } @@ -684,7 +807,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:] } @@ -1008,10 +1131,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") @@ -1057,29 +1180,28 @@ func NewEngine(scriptPubKey []byte, tx *wire.MsgTx, txIdx int, flags ScriptFlags vm.bip16 = true } - // 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 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(ScriptVerifyMinimalData) { @@ -1103,7 +1225,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 { @@ -1118,12 +1240,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 && - isCanonicalPush(sigPops[0].opcode.value, - sigPops[0].data) && - 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" @@ -1150,6 +1271,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..5818080dfd 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. @@ -59,20 +60,20 @@ func TestBadPC(t *testing.T) { 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) } } } diff --git a/txscript/opcode.go b/txscript/opcode.go index a0d050529a..950121c69d 100644 --- a/txscript/opcode.go +++ b/txscript/opcode.go @@ -1981,7 +1981,7 @@ func opcodeHash256(op *parsedOpcode, vm *Engine) error { // // This opcode does not change the contents of the data stack. func opcodeCodeSeparator(op *parsedOpcode, vm *Engine) error { - vm.lastCodeSep = vm.scriptOff + vm.lastCodeSep = int(vm.tokenizer.ByteIndex()) return nil } @@ -2055,7 +2055,7 @@ func opcodeCheckSig(op *parsedOpcode, vm *Engine) error { sigHashes = NewTxSigHashes(&vm.tx) } - hash, err = calcWitnessSignatureHash(subScript, sigHashes, hashType, + hash, err = calcWitnessSignatureHashRaw(subScript, sigHashes, hashType, &vm.tx, vm.txIdx, vm.inputAmount) if err != nil { return err @@ -2063,12 +2063,9 @@ func opcodeCheckSig(op *parsedOpcode, vm *Engine) error { } else { // Remove the signature since there is no way for a signature // to sign itself. - subScript = removeOpcodeByData(subScript, fullSigBytes) + subScript = removeOpcodeByDataRaw(subScript, fullSigBytes) - hash, err = calcSignatureHash(subScript, hashType, &vm.tx, vm.txIdx) - if err != nil { - return err - } + hash = calcSignatureHashRaw(subScript, hashType, &vm.tx, vm.txIdx) } pubKey, err := btcec.ParsePubKey(pkBytes, btcec.S256()) @@ -2239,7 +2236,7 @@ func opcodeCheckMultiSig(op *parsedOpcode, vm *Engine) error { // no way for a signature to sign itself. if !vm.isWitnessVersionActive(0) { for _, sigInfo := range signatures { - script = removeOpcodeByData(script, sigInfo.signature) + script = removeOpcodeByDataRaw(script, sigInfo.signature) } } @@ -2331,16 +2328,13 @@ func opcodeCheckMultiSig(op *parsedOpcode, vm *Engine) error { sigHashes = NewTxSigHashes(&vm.tx) } - hash, err = calcWitnessSignatureHash(script, sigHashes, hashType, + hash, err = calcWitnessSignatureHashRaw(script, sigHashes, hashType, &vm.tx, vm.txIdx, vm.inputAmount) if err != nil { return err } } else { - hash, err = calcSignatureHash(script, hashType, &vm.tx, vm.txIdx) - if err != nil { - return err - } + hash = calcSignatureHashRaw(script, hashType, &vm.tx, vm.txIdx) } var valid bool From 06c8bea6c76f73f8afa214a99d45fe9c65a20d2d Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Fri, 19 Apr 2019 19:05:20 -0700 Subject: [PATCH 249/419] txscript: Remove unused calcSignatureHash --- txscript/script.go | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/txscript/script.go b/txscript/script.go index 0be0a7b8b3..8ff39e209a 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -744,21 +744,6 @@ func calcSignatureHashRaw(sigScript []byte, hashType SigHashType, tx *wire.MsgTx return chainhash.DoubleHashB(wbuf.Bytes()) } -// calcSignatureHash computes the signature hash for the specified input of the -// target transaction observing the desired signature hash type. -// -// DEPRECATED: Use calcSignatureHashRaw instead -func calcSignatureHash(prevOutScript []parsedOpcode, hashType SigHashType, - tx *wire.MsgTx, idx int) ([]byte, error) { - - sigScript, err := unparseScript(prevOutScript) - if err != nil { - return nil, err - } - - return calcSignatureHashRaw(sigScript, hashType, tx, idx), nil -} - // asSmallInt returns the passed opcode, which must be true according to // isSmallInt(), as an integer. func asSmallInt(op byte) int { From 03d1fb0f86ac8dc65c6e67b31069630fce70fb69 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Fri, 19 Apr 2019 20:09:59 -0700 Subject: [PATCH 250/419] txscript: Remove unused isWitnessProgram --- txscript/script.go | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/txscript/script.go b/txscript/script.go index 8ff39e209a..6557c64d1e 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -98,21 +98,6 @@ func IsWitnessProgram(script []byte) bool { 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. -// -// DEPRECATED: Use isWitnessProgramScript instead. -func isWitnessProgram(pops []parsedOpcode) bool { - return len(pops) == 2 && - isSmallInt(pops[0].opcode.value) && - isCanonicalPush(pops[1].opcode.value, pops[1].data) && - (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 { From 07ab66b790e0b732868548e0624c62a7b03a2863 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:12:59 -0500 Subject: [PATCH 251/419] txscript: Remove unused removeOpcodeByData func. --- txscript/script.go | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/txscript/script.go b/txscript/script.go index 6557c64d1e..242fc2d875 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -318,23 +318,6 @@ func isCanonicalPush(opcode byte, data []byte) bool { return true } -// removeOpcodeByData will return the script minus any opcodes that would push -// the passed data to the stack. -// -// DEPRECATED. Use removeOpcodeByDataRaw instead. -func removeOpcodeByData(pkscript []parsedOpcode, data []byte) []parsedOpcode { - retScript := make([]parsedOpcode, 0, len(pkscript)) - for _, pop := range pkscript { - if !isCanonicalPush(pop.opcode.value, pop.data) || - !bytes.Contains(pop.data, data) { - - retScript = append(retScript, pop) - } - } - return retScript - -} - // removeOpcodeByDataRaw 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 From 911db90858acff024c54715b5336c95285e695ae Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:13:00 -0500 Subject: [PATCH 252/419] txscript: Rename removeOpcodeByDataRaw func. This renames the removeOpcodeByDataRaw to removeOpcodeByData now that the old version has been removed. --- txscript/opcode.go | 4 ++-- txscript/script.go | 4 ++-- txscript/script_test.go | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/txscript/opcode.go b/txscript/opcode.go index 950121c69d..1d8ee25ea8 100644 --- a/txscript/opcode.go +++ b/txscript/opcode.go @@ -2063,7 +2063,7 @@ func opcodeCheckSig(op *parsedOpcode, vm *Engine) error { } else { // Remove the signature since there is no way for a signature // to sign itself. - subScript = removeOpcodeByDataRaw(subScript, fullSigBytes) + subScript = removeOpcodeByData(subScript, fullSigBytes) hash = calcSignatureHashRaw(subScript, hashType, &vm.tx, vm.txIdx) } @@ -2236,7 +2236,7 @@ func opcodeCheckMultiSig(op *parsedOpcode, vm *Engine) error { // no way for a signature to sign itself. if !vm.isWitnessVersionActive(0) { for _, sigInfo := range signatures { - script = removeOpcodeByDataRaw(script, sigInfo.signature) + script = removeOpcodeByData(script, sigInfo.signature) } } diff --git a/txscript/script.go b/txscript/script.go index 242fc2d875..266c36ddce 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -318,7 +318,7 @@ func isCanonicalPush(opcode byte, data []byte) bool { return true } -// removeOpcodeByDataRaw will return the script minus any opcodes that perform a +// 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 @@ -332,7 +332,7 @@ func isCanonicalPush(opcode byte, data []byte) bool { // 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 removeOpcodeByDataRaw(script []byte, dataToRemove []byte) []byte { +func removeOpcodeByData(script []byte, dataToRemove []byte) []byte { // Avoid work when possible. if len(script) == 0 || len(dataToRemove) == 0 { return script diff --git a/txscript/script_test.go b/txscript/script_test.go index 02c364ce31..7db065de44 100644 --- a/txscript/script_test.go +++ b/txscript/script_test.go @@ -4136,7 +4136,7 @@ func TestRemoveOpcodeByData(t *testing.T) { return nil, err } - return removeOpcodeByDataRaw(script, data), nil + return removeOpcodeByData(script, data), nil } for _, test := range tests { From 94e99cf6b7d572ebe46eebc79d04a4a2cb071001 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Fri, 19 Apr 2019 19:07:18 -0700 Subject: [PATCH 253/419] txscript: Rename calcSignatureHashRaw --- txscript/opcode.go | 4 ++-- txscript/script.go | 8 ++++---- txscript/sign.go | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/txscript/opcode.go b/txscript/opcode.go index 1d8ee25ea8..9e0320aed9 100644 --- a/txscript/opcode.go +++ b/txscript/opcode.go @@ -2065,7 +2065,7 @@ func opcodeCheckSig(op *parsedOpcode, vm *Engine) error { // to sign itself. subScript = removeOpcodeByData(subScript, fullSigBytes) - hash = calcSignatureHashRaw(subScript, hashType, &vm.tx, vm.txIdx) + hash = calcSignatureHash(subScript, hashType, &vm.tx, vm.txIdx) } pubKey, err := btcec.ParsePubKey(pkBytes, btcec.S256()) @@ -2334,7 +2334,7 @@ func opcodeCheckMultiSig(op *parsedOpcode, vm *Engine) error { return err } } else { - hash = calcSignatureHashRaw(script, hashType, &vm.tx, vm.txIdx) + hash = calcSignatureHash(script, hashType, &vm.tx, vm.txIdx) } var valid bool diff --git a/txscript/script.go b/txscript/script.go index 266c36ddce..2e3431d025 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -618,12 +618,12 @@ func CalcSignatureHash(script []byte, hashType SigHashType, tx *wire.MsgTx, idx return nil, err } - return calcSignatureHashRaw(script, hashType, tx, idx), nil + return calcSignatureHash(script, hashType, tx, idx), nil } -// calcSignatureHashRaw computes the signature hash for the specified input of -// the target transaction observing the desired signature hash type. -func calcSignatureHashRaw(sigScript []byte, hashType SigHashType, tx *wire.MsgTx, idx int) []byte { +// 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). // diff --git a/txscript/sign.go b/txscript/sign.go index 4d63a9b245..51c69103cf 100644 --- a/txscript/sign.go +++ b/txscript/sign.go @@ -285,7 +285,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 := calcSignatureHashRaw(pkScript, hashType, tx, idx) + hash := calcSignatureHash(pkScript, hashType, tx, idx) for _, addr := range addresses { // All multisig addresses should be pubkey addresses From 69f3a39c1c96ba024ed332dd12f86f8f5cf7ba33 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Fri, 19 Apr 2019 19:10:48 -0700 Subject: [PATCH 254/419] txscript/sign: Use calcWitnessSigHashRaw for witness sigs --- txscript/sign.go | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/txscript/sign.go b/txscript/sign.go index 51c69103cf..138e31cdd4 100644 --- a/txscript/sign.go +++ b/txscript/sign.go @@ -22,12 +22,7 @@ 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 From 753367299342906c9323cf94a14b151f282c9e4a Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Fri, 19 Apr 2019 19:31:33 -0700 Subject: [PATCH 255/419] txscript/pkscript: Use finalOpcodeData to extract redeem script --- txscript/pkscript.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/txscript/pkscript.go b/txscript/pkscript.go index 0703ef5d05..f5b11e6d53 100644 --- a/txscript/pkscript.go +++ b/txscript/pkscript.go @@ -211,11 +211,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) From 6e5fbf8ea85ca1689d00421f2966436166c2e072 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:13:03 -0500 Subject: [PATCH 256/419] txscript: Remove unused parseScript func. --- txscript/script.go | 6 ------ 1 file changed, 6 deletions(-) diff --git a/txscript/script.go b/txscript/script.go index 2e3431d025..1a8890b914 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -202,12 +202,6 @@ func checkScriptTemplateParseable(script []byte, opcodes *[256]opcode) (*byte, e return &firstOpcode, 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) { From e06b11a999da91b6e0179795def1f2ee67e3b159 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Fri, 19 Apr 2019 19:48:25 -0700 Subject: [PATCH 257/419] txscript: Remove unused calcWitnessSignatureHash --- txscript/script.go | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/txscript/script.go b/txscript/script.go index 1a8890b914..97c2f40102 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -534,30 +534,6 @@ func calcWitnessSignatureHashRaw(scriptSig []byte, sigHashes *TxSigHashes, return chainhash.DoubleHashB(sigHash.Bytes()), nil } -// 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. -// -// DEPRECATED: Use calcWitnessSignatureHashRaw instead. -func calcWitnessSignatureHash(subScript []parsedOpcode, sigHashes *TxSigHashes, - hashType SigHashType, tx *wire.MsgTx, idx int, amt int64) ([]byte, error) { - - script, err := unparseScript(subScript) - if err != nil { - return nil, err - } - - return calcWitnessSignatureHashRaw(script, sigHashes, hashType, tx, idx, amt) -} - // 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, From 491b7b59fc4ad2ed8fb516a0105c2ff44a014397 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:13:04 -0500 Subject: [PATCH 258/419] txscript: Remove unused unparseScript func. Also remove tests associated with unparsing opcodes accordingly. --- txscript/script.go | 14 - txscript/script_test.go | 3651 --------------------------------------- 2 files changed, 3665 deletions(-) diff --git a/txscript/script.go b/txscript/script.go index 97c2f40102..0dbe4683d7 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -202,20 +202,6 @@ func checkScriptTemplateParseable(script []byte, opcodes *[256]opcode) (*byte, e return &firstOpcode, nil } -// 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 - } - script = append(script, b...) - } - return script, nil -} - // DisasmString formats a disassembled script for one line printing. When the // script fails to parse, the returned string will contain the disassembled // script up to the point the failure occurred along with the string '[error]' diff --git a/txscript/script_test.go b/txscript/script_test.go index 7db065de44..b6e7ff4203 100644 --- a/txscript/script_test.go +++ b/txscript/script_test.go @@ -28,3657 +28,6 @@ func TestParseOpcode(t *testing.T) { } } -// 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) { From ca044fefcb80f4cc0ed966895ea390d4d956cd5d Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:13:05 -0500 Subject: [PATCH 259/419] txscript: Remove unused parsedOpcode.bytes func. --- txscript/opcode.go | 57 ---------------------------------------------- 1 file changed, 57 deletions(-) diff --git a/txscript/opcode.go b/txscript/opcode.go index 9e0320aed9..515e1cf2b1 100644 --- a/txscript/opcode.go +++ b/txscript/opcode.go @@ -8,7 +8,6 @@ import ( "bytes" "crypto/sha1" "crypto/sha256" - "encoding/binary" "encoding/hex" "fmt" "hash" @@ -740,62 +739,6 @@ func disasmOpcode(buf *strings.Builder, op *opcode, data []byte, compact bool) { buf.WriteString(fmt.Sprintf(" 0x%02x", 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) - } - } - - 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 -} - // ******************************************* // Opcode implementation functions start here. // ******************************************* From 595d379fa6c1a588b9e3f58210132da6c6de3825 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:13:06 -0500 Subject: [PATCH 260/419] txscript: Remove unused parseScriptTemplate func. Also remove tests associated with the func accordingly. --- txscript/opcode.go | 73 ----------------------------------------- txscript/script.go | 59 --------------------------------- txscript/script_test.go | 16 --------- 3 files changed, 148 deletions(-) diff --git a/txscript/opcode.go b/txscript/opcode.go index 515e1cf2b1..d6fc494c89 100644 --- a/txscript/opcode.go +++ b/txscript/opcode.go @@ -618,79 +618,6 @@ type parsedOpcode struct { data []byte } -// checkParseableInScript checks whether or not the current opcode is able to be -// parsed at a certain position in a script. -// This returns the position of the next opcode to be parsed in the script. -func (pop *parsedOpcode) checkParseableInScript(script []byte, scriptPos int) (int, error) { - // 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 pop.opcode.length == 1: - scriptPos++ - - // Data pushes of specific lengths -- OP_DATA_[1-75]. - case pop.opcode.length > 1: - if len(script[scriptPos:]) < pop.opcode.length { - str := fmt.Sprintf("opcode %s requires %d "+ - "bytes, but script only has %d remaining", - pop.opcode.name, pop.opcode.length, len(script[scriptPos:])) - return 0, scriptError(ErrMalformedPush, str) - } - - // Slice out the data. - pop.data = script[scriptPos+1 : scriptPos+pop.opcode.length] - scriptPos += pop.opcode.length - - // Data pushes with parsed lengths -- OP_PUSHDATAP{1,2,4}. - case pop.opcode.length < 0: - var l uint - off := scriptPos + 1 - - if len(script[off:]) < -pop.opcode.length { - str := fmt.Sprintf("opcode %s requires %d "+ - "bytes, but script only has %d remaining", - pop.opcode.name, -pop.opcode.length, len(script[off:])) - return 0, scriptError(ErrMalformedPush, str) - } - - // Next -length bytes are little endian length of data. - switch pop.opcode.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", - pop.opcode.length) - return 0, scriptError(ErrMalformedPush, str) - } - - // Move offset to beginning of the data. - off += -pop.opcode.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", - pop.opcode.name, int(l), len(script[off:])) - return 0, scriptError(ErrMalformedPush, str) - } - - pop.data = script[off : off+int(l)] - scriptPos += 1 - pop.opcode.length + int(l) - } - return scriptPos, nil -} - // 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 diff --git a/txscript/script.go b/txscript/script.go index 0dbe4683d7..696bfe2d17 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -143,65 +143,6 @@ func IsPushOnlyScript(script []byte) bool { return tokenizer.Err() == nil } -// 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)) - var err error - for i := 0; i < len(script); { - instr := script[i] - op := &opcodes[instr] - pop := parsedOpcode{opcode: op} - i, err = pop.checkParseableInScript(script, i) - if err != nil { - return retScript, err - } - - retScript = append(retScript, pop) - } - - return retScript, nil -} - -// checkScriptTemplateParseable is the same as parseScriptTemplate but does not -// return the list of opcodes up until the point of failure so that this can be -// used in functions which do not necessarily have a need for the failed list of -// opcodes, such as IsUnspendable. -// -// This function returns a pointer to a byte. This byte is nil if the parsing -// has an error, or if the script length is zero. If the script length is not -// zero and parsing succeeds, then the first opcode parsed will be returned. -// -// Not returning the full opcode list up until failure also has the benefit of -// reducing GC pressure, as the list would get immediately thrown away. -func checkScriptTemplateParseable(script []byte, opcodes *[256]opcode) (*byte, error) { - var err error - - // A script of length zero is an unspendable script but it is parseable. - var firstOpcode byte - var numParsedInstr uint = 0 - - for i := 0; i < len(script); { - instr := script[i] - op := &opcodes[instr] - pop := parsedOpcode{opcode: op} - i, err = pop.checkParseableInScript(script, i) - if err != nil { - return nil, err - } - - // if this is a op_return then it is unspendable so we set the first - // parsed instruction in case it's an op_return - if numParsedInstr == 0 { - firstOpcode = pop.opcode.value - } - numParsedInstr++ - } - - return &firstOpcode, nil -} - // DisasmString formats a disassembled script for one line printing. When the // script fails to parse, the returned string will contain the disassembled // script up to the point the failure occurred along with the string '[error]' diff --git a/txscript/script_test.go b/txscript/script_test.go index b6e7ff4203..86f94d84f4 100644 --- a/txscript/script_test.go +++ b/txscript/script_test.go @@ -12,22 +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!") - } -} - // TestPushedData ensured the PushedData function extracts the expected data out // of various scripts. func TestPushedData(t *testing.T) { From ef3d06e62b76818163e8302384afcdb44874cf46 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:13:07 -0500 Subject: [PATCH 261/419] txscript: Make executeOpcode take opcode and data. This converts the executeOpcode function defined on the engine to accept an opcode and data slice instead of a parsed opcode as a step towards removing the parsed opcode struct and associated supporting code altogether. It also updates all callers accordingly. --- txscript/engine.go | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/txscript/engine.go b/txscript/engine.go index 1afb8324dd..a91dc9612f 100644 --- a/txscript/engine.go +++ b/txscript/engine.go @@ -341,23 +341,21 @@ func checkMinimalDataPush(op *opcode, data []byte) error { // 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 isOpcodeDisabled(pop.opcode.value) { - 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 isOpcodeAlwaysIllegal(pop.opcode.value) { - 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 op.value > OP_16 { vm.numOps++ if vm.numOps > MaxOpsPerScript { str := fmt.Sprintf("exceeded max operation limit of %d", @@ -365,29 +363,30 @@ 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() && !isOpcodeConditional(pop.opcode.value) { + 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 := checkMinimalDataPush(pop.opcode, pop.data); err != nil { + if err := checkMinimalDataPush(op, data); err != nil { return err } } - return pop.opcode.opfunc(pop, vm) + pop := parsedOpcode{opcode: op, data: data} + return op.opfunc(&pop, vm) } // checkValidPC returns an error if the current script position is not valid for @@ -670,8 +669,7 @@ func (vm *Engine) Step() (done bool, err error) { // 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. - pop := parsedOpcode{opcode: vm.tokenizer.op, data: vm.tokenizer.Data()} - err = vm.executeOpcode(&pop) + err = vm.executeOpcode(vm.tokenizer.op, vm.tokenizer.Data()) if err != nil { return true, err } From b95ba0ac95e04336f552b42864af824ba221d345 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 13 Mar 2019 01:13:08 -0500 Subject: [PATCH 262/419] txscript: Make op callbacks take opcode and data. This converts the callback function defined on the internal opcode struct to accept the opcode and data slice instead of a parsed opcode as the final step towards removing the parsed opcode struct and associated supporting code altogether. It also updates all of the callbacks and tests accordingly and finally removes the now unused parsedOpcode struct. The final results for the raw script analysis and tokenizer optimizations are as follows: benchmark old ns/op new ns/op delta BenchmarkIsPayToScriptHash-8 62393 0.51 -100.00% BenchmarkIsPubKeyHashScript-8 62228 0.56 -100.00% BenchmarkGetSigOpCount-8 61051 658 -98.92% BenchmarkExtractPkScriptAddrsLarge-8 60713 17.2 -99.97% BenchmarkExtractPkScriptAddrs-8 289 17.9 -93.81% BenchmarkIsWitnessPubKeyHash-8 61688 0.42 -100.00% BenchmarkIsUnspendable-8 656 520 -20.73% BenchmarkExtractAtomicSwapDataPushesLarge-8 61332 44.0 -99.93% BenchmarkExtractAtomicSwapDataPushes-8 990 260 -73.74% BenchmarkDisasmString-8 102902 39754 -61.37% BenchmarkGetPreciseSigOpCount-8 130223 715 -99.45% BenchmarkScriptParsing-8 63464 681 -98.93% BenchmarkIsMultisigScriptLarge-8 64166 5.83 -99.99% BenchmarkIsMultisigScript-8 630 58.5 -90.71% BenchmarkPushedData-8 64837 1779 -97.26% BenchmarkCalcSigHash-8 3627895 3605459 -0.62% BenchmarkIsPubKeyScript-8 62323 2.83 -100.00% BenchmarkIsPushOnlyScript-8 62412 569 -99.09% BenchmarkIsWitnessScriptHash-8 61243 0.56 -100.00% BenchmarkGetScriptClass-8 61515 16.4 -99.97% BenchmarkIsNullDataScript-8 62495 2.53 -100.00% BenchmarkIsMultisigSigScriptLarge-8 69328 2.52 -100.00% BenchmarkIsMultisigSigScript-8 2375 141 -94.06% BenchmarkGetWitnessSigOpCountP2WKH-8 504 72.0 -85.71% BenchmarkGetWitnessSigOpCountNested-8 1158 136 -88.26% BenchmarkIsWitnessPubKeyHash-8 68927 0.53 -100.00% BenchmarkIsWitnessScriptHash-8 62774 0.63 -100.00% benchmark old allocs new allocs delta BenchmarkIsPayToScriptHash-8 1 0 -100.00% BenchmarkIsPubKeyHashScript-8 1 0 -100.00% BenchmarkGetSigOpCount-8 1 0 -100.00% BenchmarkExtractPkScriptAddrsLarge-8 1 0 -100.00% BenchmarkExtractPkScriptAddrs-8 1 0 -100.00% BenchmarkIsWitnessPubKeyHash-8 1 0 -100.00% BenchmarkIsUnspendable-8 1 0 -100.00% BenchmarkExtractAtomicSwapDataPushesLarge-8 1 0 -100.00% BenchmarkExtractAtomicSwapDataPushes-8 2 1 -50.00% BenchmarkDisasmString-8 46 51 +10.87% BenchmarkGetPreciseSigOpCount-8 3 0 -100.00% BenchmarkScriptParsing-8 1 0 -100.00% BenchmarkIsMultisigScriptLarge-8 1 0 -100.00% BenchmarkIsMultisigScript-8 1 0 -100.00% BenchmarkPushedData-8 7 6 -14.29% BenchmarkCalcSigHash-8 1335 712 -46.67% BenchmarkIsPubKeyScript-8 1 0 -100.00% BenchmarkIsPushOnlyScript-8 1 0 -100.00% BenchmarkIsWitnessScriptHash-8 1 0 -100.00% BenchmarkGetScriptClass-8 1 0 -100.00% BenchmarkIsNullDataScript-8 1 0 -100.00% BenchmarkIsMultisigSigScriptLarge-8 5 0 -100.00% BenchmarkIsMultisigSigScript-8 3 0 -100.00% BenchmarkGetWitnessSigOpCountP2WKH-8 2 0 -100.00% BenchmarkGetWitnessSigOpCountNested-8 4 0 -100.00% BenchmarkIsWitnessPubKeyHash-8 1 0 -100.00% BenchmarkIsWitnessScriptHash-8 1 0 -100.00% benchmark old bytes new bytes delta BenchmarkIsPayToScriptHash-8 311299 0 -100.00% BenchmarkIsPubKeyHashScript-8 311299 0 -100.00% BenchmarkGetSigOpCount-8 311299 0 -100.00% BenchmarkExtractPkScriptAddrsLarge-8 311299 0 -100.00% BenchmarkExtractPkScriptAddrs-8 768 0 -100.00% BenchmarkIsWitnessPubKeyHash-8 311299 0 -100.00% BenchmarkIsUnspendable-8 1 0 -100.00% BenchmarkExtractAtomicSwapDataPushesLarge-8 311299 0 -100.00% BenchmarkExtractAtomicSwapDataPushes-8 3168 96 -96.97% BenchmarkDisasmString-8 389324 130552 -66.47% BenchmarkGetPreciseSigOpCount-8 623367 0 -100.00% BenchmarkScriptParsing-8 311299 0 -100.00% BenchmarkIsMultisigScriptLarge-8 311299 0 -100.00% BenchmarkIsMultisigScript-8 2304 0 -100.00% BenchmarkPushedData-8 312816 1520 -99.51% BenchmarkCalcSigHash-8 1373812 1290507 -6.06% BenchmarkIsPubKeyScript-8 311299 0 -100.00% BenchmarkIsPushOnlyScript-8 311299 0 -100.00% BenchmarkIsWitnessScriptHash-8 311299 0 -100.00% BenchmarkGetScriptClass-8 311299 0 -100.00% BenchmarkIsNullDataScript-8 311299 0 -100.00% BenchmarkIsMultisigSigScriptLarge-8 330035 0 -100.00% BenchmarkIsMultisigSigScript-8 9472 0 -100.00% BenchmarkGetWitnessSigOpCountP2WKH-8 1408 0 -100.00% BenchmarkGetWitnessSigOpCountNested-8 3200 0 -100.00% BenchmarkIsWitnessPubKeyHash-8 311299 0 -100.00% BenchmarkIsWitnessScriptHash-8 311299 0 -100.00% --- txscript/engine.go | 3 +- txscript/opcode.go | 183 +++++++++++++++++++--------------------- txscript/opcode_test.go | 4 +- 3 files changed, 90 insertions(+), 100 deletions(-) diff --git a/txscript/engine.go b/txscript/engine.go index a91dc9612f..0814e7eb96 100644 --- a/txscript/engine.go +++ b/txscript/engine.go @@ -385,8 +385,7 @@ func (vm *Engine) executeOpcode(op *opcode, data []byte) error { } } - pop := parsedOpcode{opcode: op, data: data} - return op.opfunc(&pop, vm) + return op.opfunc(op, data, vm) } // checkValidPC returns an error if the current script position is not valid for diff --git a/txscript/opcode.go b/txscript/opcode.go index d6fc494c89..4c31be3f75 100644 --- a/txscript/opcode.go +++ b/txscript/opcode.go @@ -28,7 +28,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, @@ -611,13 +611,6 @@ 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 -} - // 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 @@ -676,45 +669,42 @@ func disasmOpcode(buf *strings.Builder, op *opcode, data []byte, compact bool) { // 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 } @@ -722,23 +712,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) } } @@ -801,7 +792,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) @@ -835,7 +826,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) @@ -858,10 +849,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) } @@ -884,10 +875,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) } @@ -900,14 +891,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 @@ -915,13 +906,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") } @@ -951,7 +942,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) { @@ -1025,7 +1016,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) { @@ -1102,7 +1093,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 @@ -1117,7 +1108,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 @@ -1130,35 +1121,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) } @@ -1166,7 +1157,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) } @@ -1174,7 +1165,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 @@ -1194,7 +1185,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 } @@ -1202,28 +1193,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) } @@ -1233,7 +1224,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 @@ -1248,7 +1239,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 @@ -1260,14 +1251,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) } @@ -1275,7 +1266,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() } @@ -1283,7 +1274,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 @@ -1297,7 +1288,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 @@ -1318,8 +1309,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) } @@ -1330,7 +1321,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 @@ -1344,7 +1335,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 @@ -1358,7 +1349,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 @@ -1372,7 +1363,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 @@ -1397,7 +1388,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 @@ -1417,7 +1408,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 @@ -1434,7 +1425,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 @@ -1454,7 +1445,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 @@ -1476,7 +1467,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 @@ -1503,7 +1494,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 @@ -1528,7 +1519,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 @@ -1556,8 +1547,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) } @@ -1569,7 +1560,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 @@ -1594,7 +1585,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 @@ -1619,7 +1610,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 @@ -1643,7 +1634,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 @@ -1667,7 +1658,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 @@ -1691,7 +1682,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 @@ -1715,7 +1706,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 @@ -1743,7 +1734,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 @@ -1777,7 +1768,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 @@ -1791,7 +1782,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 @@ -1806,7 +1797,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 @@ -1821,7 +1812,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 @@ -1836,7 +1827,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 @@ -1850,7 +1841,7 @@ 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 { +func opcodeCodeSeparator(op *opcode, data []byte, vm *Engine) error { vm.lastCodeSep = int(vm.tokenizer.ByteIndex()) return nil } @@ -1869,7 +1860,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 @@ -1984,9 +1975,9 @@ 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) } @@ -2021,7 +2012,7 @@ 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 { numKeys, err := vm.dstack.PopInt() if err != nil { return err @@ -2247,8 +2238,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 3c5abf9da9..91263c21b1 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) From 3be166e3ae1521d0cf3472c204a348bca647995d Mon Sep 17 00:00:00 2001 From: Calvin Kim Date: Wed, 17 Nov 2021 12:46:12 +0900 Subject: [PATCH 263/419] go.mod, go.sum: Update goleveldb Goleveldb recently had a PR in where memory allocation was reduced drastically (github.com/syndtr/goleveldb/pull/367). Update goleveldb to use that PR. --- go.mod | 3 ++- go.sum | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 7722564f57..767c2740db 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,8 @@ require ( github.com/decred/dcrd/lru v1.0.0 github.com/jessevdk/go-flags v1.4.0 github.com/jrick/logrotate v1.0.0 - golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37 + github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 // indirect + golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 ) go 1.16 diff --git a/go.sum b/go.sum index 4c5a352a89..e9ee276db4 100644 --- a/go.sum +++ b/go.sum @@ -25,7 +25,18 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs 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/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 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= @@ -35,28 +46,56 @@ 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/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/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.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +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/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-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37 h1:cg5LA/zNPRzIXIWSCxQW10Rvpy94aQh3LT/ShoCpkHw= golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +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-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3 h1:0GoQqolDA55aaLxZyTzK/Y2ePZzZTUrRacwib7cNsYQ= 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 h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI= 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/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= 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 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= @@ -64,3 +103,5 @@ gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkep 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/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= From 780cc0889fd2f326e4a2a9b513d8d30ff37e0cd2 Mon Sep 17 00:00:00 2001 From: Tomasz Ziolkowski Date: Fri, 15 Oct 2021 16:56:27 +0200 Subject: [PATCH 264/419] reduce redundant memory allocatio - resolves btcsuite/btcd#1699 Signed-off-by: Tomasz Ziolkowski --- connmgr/tor.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/connmgr/tor.go b/connmgr/tor.go index 2b22ae51f2..a2e512dba1 100644 --- a/connmgr/tor.go +++ b/connmgr/tor.go @@ -76,7 +76,7 @@ func TorLookupIP(host, proxy string) ([]net.IP, error) { return nil, ErrTorUnrecognizedAuthMethod } - buf = make([]byte, 7+len(host)) + buf = make([]byte, 6+len(host)) buf[0] = 5 // protocol version buf[1] = '\xF0' // Tor Resolve buf[2] = 0 // reserved From ec9ca7d782a203fea9639f4122f22bf1fd79bef7 Mon Sep 17 00:00:00 2001 From: Matthew Bajorek Date: Sun, 5 Dec 2021 15:15:15 -0500 Subject: [PATCH 265/419] rpcclient+rpcserver: Change getnetworkhashps return type to be a float to be in line with bitcoin core --- rpcclient/mining.go | 12 ++++++------ rpcserver.go | 20 ++++++++++---------- rpcserverhelp.go | 2 +- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/rpcclient/mining.go b/rpcclient/mining.go index 15473e24be..717825eeaa 100644 --- a/rpcclient/mining.go +++ b/rpcclient/mining.go @@ -255,14 +255,14 @@ type FutureGetNetworkHashPS chan *Response // 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) { +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 @@ -286,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() } @@ -307,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() } @@ -327,7 +327,7 @@ 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() } diff --git a/rpcserver.go b/rpcserver.go index d184072942..6f60261a9c 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -2355,11 +2355,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", } } @@ -2373,7 +2373,7 @@ func handleGetMiningInfo(s *rpcServer, cmd interface{}, closeChan <-chan struct{ Generate: s.cfg.CPUMiner.IsMining(), GenProcLimit: s.cfg.CPUMiner.NumWorkers(), HashesPerSec: s.cfg.CPUMiner.HashesPerSecond(), - NetworkHashPS: float64(networkHashesPerSec), + NetworkHashPS: networkHashesPerSec, PooledTx: uint64(s.cfg.TxMemPool.Count()), TestNet: cfg.TestNet3, } @@ -2393,8 +2393,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) @@ -2409,7 +2409,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 @@ -2476,13 +2476,13 @@ 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. diff --git a/rpcserverhelp.go b/rpcserverhelp.go index 570b5b0500..16bbb62a2b 100644 --- a/rpcserverhelp.go +++ b/rpcserverhelp.go @@ -740,7 +740,7 @@ var rpcResultTypes = map[string][]interface{}{ "getmempoolinfo": {(*btcjson.GetMempoolInfoResult)(nil)}, "getmininginfo": {(*btcjson.GetMiningInfoResult)(nil)}, "getnettotals": {(*btcjson.GetNetTotalsResult)(nil)}, - "getnetworkhashps": {(*int64)(nil)}, + "getnetworkhashps": {(*float64)(nil)}, "getnodeaddresses": {(*[]btcjson.GetNodeAddressesResult)(nil)}, "getpeerinfo": {(*[]btcjson.GetPeerInfoResult)(nil)}, "getrawmempool": {(*[]string)(nil), (*btcjson.GetRawMempoolVerboseResult)(nil)}, From a1f43e4d846ea01f38d1cf459652f1133370a85c Mon Sep 17 00:00:00 2001 From: Matthew Bajorek Date: Sun, 5 Dec 2021 15:15:41 -0500 Subject: [PATCH 266/419] integration: Add unit tests for all three GetNetworkHashPS client methods --- integration/rpcserver_test.go | 156 ++++++++++++++++++++++++++++++++++ 1 file changed, 156 insertions(+) diff --git a/integration/rpcserver_test.go b/integration/rpcserver_test.go index 5875b35353..13325bc1d7 100644 --- a/integration/rpcserver_test.go +++ b/integration/rpcserver_test.go @@ -13,7 +13,9 @@ 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" @@ -135,11 +137,165 @@ func testBulkClient(r *rpctest.Harness, t *testing.T) { } +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 From 5cd3533e2b049e78f7a8f3b9fef2c0e4247f7a71 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Fri, 24 Dec 2021 16:34:26 -0800 Subject: [PATCH 267/419] btcutil: move btcutil into new sub-module In this commit, we move `btcutil` as well as its sub-module, the `psbt` package into the `btcd` repo itself. --- btcutil/LICENSE | 16 + btcutil/README.md | 49 + btcutil/address.go | 720 ++++++++++++ btcutil/address_test.go | 1012 +++++++++++++++++ btcutil/amount.go | 122 ++ btcutil/amount_test.go | 309 +++++ btcutil/appdata.go | 105 ++ btcutil/appdata_test.go | 133 +++ btcutil/base58/README.md | 34 + btcutil/base58/alphabet.go | 49 + btcutil/base58/base58.go | 138 +++ btcutil/base58/base58_test.go | 101 ++ btcutil/base58/base58bench_test.go | 47 + btcutil/base58/base58check.go | 52 + btcutil/base58/base58check_test.go | 69 ++ btcutil/base58/cov_report.sh | 17 + btcutil/base58/doc.go | 29 + btcutil/base58/example_test.go | 71 ++ btcutil/base58/genalphabet.go | 79 ++ btcutil/bech32/README.md | 29 + btcutil/bech32/bech32.go | 442 ++++++++ btcutil/bech32/bech32_test.go | 691 +++++++++++ btcutil/bech32/doc.go | 15 + btcutil/bech32/error.go | 87 ++ btcutil/bech32/example_test.go | 49 + btcutil/bech32/version.go | 43 + btcutil/block.go | 265 +++++ btcutil/block_test.go | 556 +++++++++ btcutil/bloom/README.md | 30 + btcutil/bloom/cov_report.sh | 17 + btcutil/bloom/example_test.go | 45 + btcutil/bloom/filter.go | 354 ++++++ btcutil/bloom/filter_test.go | 660 +++++++++++ btcutil/bloom/merkleblock.go | 125 ++ btcutil/bloom/merkleblock_test.go | 74 ++ btcutil/bloom/murmurhash3.go | 72 ++ btcutil/bloom/murmurhash3_test.go | 45 + btcutil/bloom/test_coverage.txt | 28 + btcutil/certgen.go | 144 +++ btcutil/certgen_test.go | 123 ++ btcutil/coinset/README.md | 71 ++ btcutil/coinset/coins.go | 396 +++++++ btcutil/coinset/coins_test.go | 260 +++++ btcutil/coinset/cov_report.sh | 17 + btcutil/coinset/test_coverage.txt | 31 + btcutil/const.go | 16 + btcutil/cov_report.sh | 17 + btcutil/doc.go | 46 + btcutil/example_test.go | 76 ++ btcutil/gcs/README.md | 24 + btcutil/gcs/builder/builder.go | 371 ++++++ btcutil/gcs/builder/builder_test.go | 281 +++++ btcutil/gcs/doc.go | 24 + btcutil/gcs/gcs.go | 541 +++++++++ btcutil/gcs/gcs_test.go | 368 ++++++ btcutil/gcs/gcsbench_test.go | 237 ++++ btcutil/go.mod | 13 + btcutil/go.sum | 43 + btcutil/hash160.go | 23 + btcutil/hdkeychain/README.md | 59 + btcutil/hdkeychain/bench_test.go | 84 ++ btcutil/hdkeychain/cov_report.sh | 17 + btcutil/hdkeychain/doc.go | 84 ++ btcutil/hdkeychain/example_test.go | 182 +++ btcutil/hdkeychain/extendedkey.go | 706 ++++++++++++ btcutil/hdkeychain/extendedkey_test.go | 1209 ++++++++++++++++++++ btcutil/hdkeychain/test_coverage.txt | 20 + btcutil/internal_test.go | 147 +++ btcutil/net.go | 18 + btcutil/net_noop.go | 19 + btcutil/psbt/bip32.go | 77 ++ btcutil/psbt/creator.go | 63 ++ btcutil/psbt/extractor.go | 81 ++ btcutil/psbt/finalizer.go | 462 ++++++++ btcutil/psbt/go.mod | 17 + btcutil/psbt/go.sum | 39 + btcutil/psbt/partial_input.go | 361 ++++++ btcutil/psbt/partial_output.go | 139 +++ btcutil/psbt/partialsig.go | 52 + btcutil/psbt/psbt.go | 407 +++++++ btcutil/psbt/psbt_test.go | 1448 ++++++++++++++++++++++++ btcutil/psbt/signer.go | 155 +++ btcutil/psbt/sort.go | 102 ++ btcutil/psbt/sort_test.go | 167 +++ btcutil/psbt/types.go | 149 +++ btcutil/psbt/updater.go | 377 ++++++ btcutil/psbt/utils.go | 422 +++++++ btcutil/psbt/utils_test.go | 370 ++++++ btcutil/tx.go | 124 ++ btcutil/tx_test.go | 136 +++ btcutil/txsort/README.md | 31 + btcutil/txsort/doc.go | 20 + btcutil/txsort/testdata/bip69-1.hex | 1 + btcutil/txsort/testdata/bip69-2.hex | 1 + btcutil/txsort/testdata/bip69-3.hex | 1 + btcutil/txsort/testdata/bip69-4.hex | 1 + btcutil/txsort/testdata/bip69-5.hex | 1 + btcutil/txsort/txsort.go | 95 ++ btcutil/txsort/txsort_test.go | 124 ++ btcutil/wif.go | 169 +++ btcutil/wif_test.go | 160 +++ 101 files changed, 18198 insertions(+) create mode 100644 btcutil/LICENSE create mode 100644 btcutil/README.md create mode 100644 btcutil/address.go create mode 100644 btcutil/address_test.go create mode 100644 btcutil/amount.go create mode 100644 btcutil/amount_test.go create mode 100644 btcutil/appdata.go create mode 100644 btcutil/appdata_test.go create mode 100644 btcutil/base58/README.md create mode 100644 btcutil/base58/alphabet.go create mode 100644 btcutil/base58/base58.go create mode 100644 btcutil/base58/base58_test.go create mode 100644 btcutil/base58/base58bench_test.go create mode 100644 btcutil/base58/base58check.go create mode 100644 btcutil/base58/base58check_test.go create mode 100644 btcutil/base58/cov_report.sh create mode 100644 btcutil/base58/doc.go create mode 100644 btcutil/base58/example_test.go create mode 100644 btcutil/base58/genalphabet.go create mode 100644 btcutil/bech32/README.md create mode 100644 btcutil/bech32/bech32.go create mode 100644 btcutil/bech32/bech32_test.go create mode 100644 btcutil/bech32/doc.go create mode 100644 btcutil/bech32/error.go create mode 100644 btcutil/bech32/example_test.go create mode 100644 btcutil/bech32/version.go create mode 100644 btcutil/block.go create mode 100644 btcutil/block_test.go create mode 100644 btcutil/bloom/README.md create mode 100644 btcutil/bloom/cov_report.sh create mode 100644 btcutil/bloom/example_test.go create mode 100644 btcutil/bloom/filter.go create mode 100644 btcutil/bloom/filter_test.go create mode 100644 btcutil/bloom/merkleblock.go create mode 100644 btcutil/bloom/merkleblock_test.go create mode 100644 btcutil/bloom/murmurhash3.go create mode 100644 btcutil/bloom/murmurhash3_test.go create mode 100644 btcutil/bloom/test_coverage.txt create mode 100644 btcutil/certgen.go create mode 100644 btcutil/certgen_test.go create mode 100644 btcutil/coinset/README.md create mode 100644 btcutil/coinset/coins.go create mode 100644 btcutil/coinset/coins_test.go create mode 100644 btcutil/coinset/cov_report.sh create mode 100644 btcutil/coinset/test_coverage.txt create mode 100644 btcutil/const.go create mode 100644 btcutil/cov_report.sh create mode 100644 btcutil/doc.go create mode 100644 btcutil/example_test.go create mode 100644 btcutil/gcs/README.md create mode 100644 btcutil/gcs/builder/builder.go create mode 100644 btcutil/gcs/builder/builder_test.go create mode 100644 btcutil/gcs/doc.go create mode 100644 btcutil/gcs/gcs.go create mode 100644 btcutil/gcs/gcs_test.go create mode 100644 btcutil/gcs/gcsbench_test.go create mode 100644 btcutil/go.mod create mode 100644 btcutil/go.sum create mode 100644 btcutil/hash160.go create mode 100644 btcutil/hdkeychain/README.md create mode 100644 btcutil/hdkeychain/bench_test.go create mode 100644 btcutil/hdkeychain/cov_report.sh create mode 100644 btcutil/hdkeychain/doc.go create mode 100644 btcutil/hdkeychain/example_test.go create mode 100644 btcutil/hdkeychain/extendedkey.go create mode 100644 btcutil/hdkeychain/extendedkey_test.go create mode 100644 btcutil/hdkeychain/test_coverage.txt create mode 100644 btcutil/internal_test.go create mode 100644 btcutil/net.go create mode 100644 btcutil/net_noop.go create mode 100644 btcutil/psbt/bip32.go create mode 100644 btcutil/psbt/creator.go create mode 100644 btcutil/psbt/extractor.go create mode 100644 btcutil/psbt/finalizer.go create mode 100644 btcutil/psbt/go.mod create mode 100644 btcutil/psbt/go.sum create mode 100644 btcutil/psbt/partial_input.go create mode 100644 btcutil/psbt/partial_output.go create mode 100644 btcutil/psbt/partialsig.go create mode 100644 btcutil/psbt/psbt.go create mode 100644 btcutil/psbt/psbt_test.go create mode 100644 btcutil/psbt/signer.go create mode 100644 btcutil/psbt/sort.go create mode 100644 btcutil/psbt/sort_test.go create mode 100644 btcutil/psbt/types.go create mode 100644 btcutil/psbt/updater.go create mode 100644 btcutil/psbt/utils.go create mode 100644 btcutil/psbt/utils_test.go create mode 100644 btcutil/tx.go create mode 100644 btcutil/tx_test.go create mode 100644 btcutil/txsort/README.md create mode 100644 btcutil/txsort/doc.go create mode 100644 btcutil/txsort/testdata/bip69-1.hex create mode 100644 btcutil/txsort/testdata/bip69-2.hex create mode 100644 btcutil/txsort/testdata/bip69-3.hex create mode 100644 btcutil/txsort/testdata/bip69-4.hex create mode 100644 btcutil/txsort/testdata/bip69-5.hex create mode 100644 btcutil/txsort/txsort.go create mode 100644 btcutil/txsort/txsort_test.go create mode 100644 btcutil/wif.go create mode 100644 btcutil/wif_test.go 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..7f7ccbbd7b --- /dev/null +++ b/btcutil/address.go @@ -0,0 +1,720 @@ +// 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" + "github.com/btcsuite/btcd/chaincfg" + "github.com/btcsuite/btcd/btcutil/base58" + "github.com/btcsuite/btcd/btcutil/bech32" + "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 + + // PKFHybrid indicates the pay-to-pubkey address format is a hybrid + // public key. + PKFHybrid +) + +// 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, btcec.S256()) + 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 + case 0x06, 0x07: + pkFormat = PKFHybrid + } + + 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() + + case PKFHybrid: + return a.pubKey.SerializeHybrid() + } +} + +// 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..52472b7923 --- /dev/null +++ b/btcutil/address_test.go @@ -0,0 +1,1012 @@ +// 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/chaincfg" + "github.com/btcsuite/btcd/wire" + "github.com/btcsuite/btcd/btcutil" + "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: "mainnet p2pk hybrid (0x06)", + addr: "06192d74d0cb94344c9569c2e77901573d8d7903c3ebec3a957724895dca52c6b4" + + "0d45264838c0bd96852662ce6a847b197376830160c6d2eb5e6a4c44d33f453e", + encoded: "1Ja5rs7XBZnK88EuLVcFqYGMEbBitzchmX", + valid: true, + result: btcutil.TstAddressPubKey( + []byte{ + 0x06, 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, 0x0d, 0x45, 0x26, 0x48, 0x38, 0xc0, 0xbd, + 0x96, 0x85, 0x26, 0x62, 0xce, 0x6a, 0x84, 0x7b, 0x19, 0x73, + 0x76, 0x83, 0x01, 0x60, 0xc6, 0xd2, 0xeb, 0x5e, 0x6a, 0x4c, + 0x44, 0xd3, 0x3f, 0x45, 0x3e}, + btcutil.PKFHybrid, chaincfg.MainNetParams.PubKeyHashAddrID), + f: func() (btcutil.Address, error) { + serializedPubKey := []byte{ + 0x06, 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, 0x0d, 0x45, 0x26, 0x48, 0x38, 0xc0, 0xbd, + 0x96, 0x85, 0x26, 0x62, 0xce, 0x6a, 0x84, 0x7b, 0x19, 0x73, + 0x76, 0x83, 0x01, 0x60, 0xc6, 0xd2, 0xeb, 0x5e, 0x6a, 0x4c, + 0x44, 0xd3, 0x3f, 0x45, 0x3e} + return btcutil.NewAddressPubKey(serializedPubKey, &chaincfg.MainNetParams) + }, + net: &chaincfg.MainNetParams, + }, + { + name: "mainnet p2pk hybrid (0x07)", + addr: "07b0bd634234abbb1ba1e986e884185c61cf43e001f9137f23c2c409273eb16e65" + + "37a576782eba668a7ef8bd3b3cfb1edb7117ab65129b8a2e681f3c1e0908ef7b", + encoded: "1ExqMmf6yMxcBMzHjbj41wbqYuqoX6uBLG", + valid: true, + result: btcutil.TstAddressPubKey( + []byte{ + 0x07, 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, 0x37, 0xa5, 0x76, 0x78, 0x2e, 0xba, 0x66, + 0x8a, 0x7e, 0xf8, 0xbd, 0x3b, 0x3c, 0xfb, 0x1e, 0xdb, 0x71, + 0x17, 0xab, 0x65, 0x12, 0x9b, 0x8a, 0x2e, 0x68, 0x1f, 0x3c, + 0x1e, 0x09, 0x08, 0xef, 0x7b}, + btcutil.PKFHybrid, chaincfg.MainNetParams.PubKeyHashAddrID), + f: func() (btcutil.Address, error) { + serializedPubKey := []byte{ + 0x07, 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, 0x37, 0xa5, 0x76, 0x78, 0x2e, 0xba, 0x66, + 0x8a, 0x7e, 0xf8, 0xbd, 0x3b, 0x3c, 0xfb, 0x1e, 0xdb, 0x71, + 0x17, 0xab, 0x65, 0x12, 0x9b, 0x8a, 0x2e, 0x68, 0x1f, 0x3c, + 0x1e, 0x09, 0x08, 0xef, 0x7b} + 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, + }, + { + name: "testnet p2pk hybrid (0x06)", + addr: "06192d74d0cb94344c9569c2e77901573d8d7903c3ebec3a957724895dca52c6b" + + "40d45264838c0bd96852662ce6a847b197376830160c6d2eb5e6a4c44d33f453e", + encoded: "my639vCVzbDZuEiX44adfTUg6anRomZLEP", + valid: true, + result: btcutil.TstAddressPubKey( + []byte{ + 0x06, 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, 0x0d, 0x45, 0x26, 0x48, 0x38, 0xc0, 0xbd, + 0x96, 0x85, 0x26, 0x62, 0xce, 0x6a, 0x84, 0x7b, 0x19, 0x73, + 0x76, 0x83, 0x01, 0x60, 0xc6, 0xd2, 0xeb, 0x5e, 0x6a, 0x4c, + 0x44, 0xd3, 0x3f, 0x45, 0x3e}, + btcutil.PKFHybrid, chaincfg.TestNet3Params.PubKeyHashAddrID), + f: func() (btcutil.Address, error) { + serializedPubKey := []byte{ + 0x06, 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, 0x0d, 0x45, 0x26, 0x48, 0x38, 0xc0, 0xbd, + 0x96, 0x85, 0x26, 0x62, 0xce, 0x6a, 0x84, 0x7b, 0x19, 0x73, + 0x76, 0x83, 0x01, 0x60, 0xc6, 0xd2, 0xeb, 0x5e, 0x6a, 0x4c, + 0x44, 0xd3, 0x3f, 0x45, 0x3e} + return btcutil.NewAddressPubKey(serializedPubKey, &chaincfg.TestNet3Params) + }, + net: &chaincfg.TestNet3Params, + }, + { + name: "testnet p2pk hybrid (0x07)", + addr: "07b0bd634234abbb1ba1e986e884185c61cf43e001f9137f23c2c409273eb16e6" + + "537a576782eba668a7ef8bd3b3cfb1edb7117ab65129b8a2e681f3c1e0908ef7b", + encoded: "muUnepk5nPPrxUTuTAhRqrpAQuSWS5fVii", + valid: true, + result: btcutil.TstAddressPubKey( + []byte{ + 0x07, 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, 0x37, 0xa5, 0x76, 0x78, 0x2e, 0xba, 0x66, + 0x8a, 0x7e, 0xf8, 0xbd, 0x3b, 0x3c, 0xfb, 0x1e, 0xdb, 0x71, + 0x17, 0xab, 0x65, 0x12, 0x9b, 0x8a, 0x2e, 0x68, 0x1f, 0x3c, + 0x1e, 0x09, 0x08, 0xef, 0x7b}, + btcutil.PKFHybrid, chaincfg.TestNet3Params.PubKeyHashAddrID), + f: func() (btcutil.Address, error) { + serializedPubKey := []byte{ + 0x07, 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, 0x37, 0xa5, 0x76, 0x78, 0x2e, 0xba, 0x66, + 0x8a, 0x7e, 0xf8, 0xbd, 0x3b, 0x3c, 0xfb, 0x1e, 0xdb, 0x71, + 0x17, 0xab, 0x65, 0x12, 0x9b, 0x8a, 0x2e, 0x68, 0x1f, 0x3c, + 0x1e, 0x09, 0x08, 0xef, 0x7b} + 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..8d3c35b7e4 --- /dev/null +++ b/btcutil/go.mod @@ -0,0 +1,13 @@ +module github.com/btcsuite/btcd/btcutil + +go 1.16 + +require ( + github.com/aead/siphash v1.0.1 + github.com/btcsuite/btcd v0.20.1-beta + github.com/davecgh/go-spew v1.1.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..58fe70e411 --- /dev/null +++ b/btcutil/go.sum @@ -0,0 +1,43 @@ +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.20.1-beta h1:Ik4hyJqN8Jfyv3S4AGBOmyouMsYE3EdYODkMbQjwPGw= +github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= +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/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/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= +github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= +github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/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/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/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/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +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/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/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +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.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 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..4145c5c23e --- /dev/null +++ b/btcutil/hdkeychain/extendedkey.go @@ -0,0 +1,706 @@ +// 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" + "github.com/btcsuite/btcd/chaincfg" + "github.com/btcsuite/btcd/chaincfg/chainhash" + "github.com/btcsuite/btcd/btcutil" + "github.com/btcsuite/btcd/btcutil/base58" +) + +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 { + pkx, pky := btcec.S256().ScalarBaseMult(k.key) + pubKey := btcec.PublicKey{Curve: btcec.S256(), X: pkx, Y: pky} + 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. + ilNum := new(big.Int).SetBytes(il) + if ilNum.Cmp(btcec.S256().N) >= 0 || ilNum.Sign() == 0 { + 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 + keyNum := new(big.Int).SetBytes(k.key) + ilNum.Add(ilNum, keyNum) + ilNum.Mod(ilNum, btcec.S256().N) + childKey = ilNum.Bytes() + isPrivate = true + } else { + // Case #3. + // Calculate the corresponding intermediate public key for + // intermediate private key. + ilx, ily := btcec.S256().ScalarBaseMult(il) + if ilx.Sign() == 0 || ily.Sign() == 0 { + 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, btcec.S256()) + if err != nil { + return nil, err + } + + // Add the intermediate public key to the parent public key to + // derive the final child key. + // + // childKey = serP(point(parse256(Il)) + parentKey) + childX, childY := btcec.S256().Add(ilx, ily, pubKey.X, pubKey.Y) + pk := btcec.PublicKey{Curve: btcec.S256(), X: childX, Y: childY} + childKey = pk.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 { + ilx, ily := btcec.S256().ScalarBaseMult(il) + if ilx.Sign() == 0 || ily.Sign() == 0 { + return nil, ErrInvalidChild + } + + pubKey, err := btcec.ParsePubKey(k.key, btcec.S256()) + if err != nil { + return nil, err + } + + childX, childY := btcec.S256().Add(ilx, ily, pubKey.X, pubKey.Y) + pk := btcec.PublicKey{Curve: btcec.S256(), X: childX, Y: childY} + childKey = pk.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(), btcec.S256()) +} + +// 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(btcec.S256(), 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, btcec.S256()) + 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..dd6deb514e --- /dev/null +++ b/btcutil/hdkeychain/extendedkey_test.go @@ -0,0 +1,1209 @@ +// 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" +) + +// 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: errors.New("invalid square root"), + }, + { + name: "unsupported version", + key: "xbad4LfUL9eKmA66w2GJdVMqhvDmYGJpTGjWRAtjHqoUY17sGaymoMV9Cm3ocn9Ud6Hh2vLFVC7KSKCRVVrqc6dsEdsTjRV1WUmkK85YEUujAPX", + err: nil, + neuter: true, + neuterErr: chaincfg.ErrUnknownHDKeyID, + }, + } + + for i, test := range tests { + extKey, err := NewKeyFromString(test.key) + if !reflect.DeepEqual(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 !reflect.DeepEqual(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 = errors.New("pubkey string is empty") + _, err = key.ECPubKey() + if !reflect.DeepEqual(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..6d1efa0199 --- /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" + "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, btcec.S256()) + 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..9fbfc73b61 --- /dev/null +++ b/btcutil/psbt/bip32.go @@ -0,0 +1,77 @@ +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) { + + if len(path)%4 != 0 || len(path)/4-1 < 1 { + 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..0bf9dbb56e --- /dev/null +++ b/btcutil/psbt/finalizer.go @@ -0,0 +1,462 @@ +// 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 ( + "github.com/btcsuite/btcd/txscript" +) + +// 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): + if txscript.IsPayToWitnessScriptHash(pkScript) { + if pInput.WitnessScript == nil || + pInput.RedeemScript != nil { + return false + } + } else { + // 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 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 { + 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: + 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 +} diff --git a/btcutil/psbt/go.mod b/btcutil/psbt/go.mod new file mode 100644 index 0000000000..55ac1ca956 --- /dev/null +++ b/btcutil/psbt/go.mod @@ -0,0 +1,17 @@ +module github.com/btcsuite/btcd/btcutil/psbt + +go 1.17 + +require ( + github.com/btcsuite/btcd v0.20.1-beta + github.com/btcsuite/btcd/btcutil v0.0.0-20190425235716-9e5f4b9a998d + github.com/davecgh/go-spew v1.1.1 +) + +require ( + github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f // indirect + github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d // indirect + golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 // indirect +) + +replace github.com/btcsuite/btcd/btcutil => ../ diff --git a/btcutil/psbt/go.sum b/btcutil/psbt/go.sum new file mode 100644 index 0000000000..4898b254c6 --- /dev/null +++ b/btcutil/psbt/go.sum @@ -0,0 +1,39 @@ +github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= +github.com/btcsuite/btcd v0.20.1-beta h1:Ik4hyJqN8Jfyv3S4AGBOmyouMsYE3EdYODkMbQjwPGw= +github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= +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/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= +github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= +github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= +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 v0.0.0-20171005155431-ecdeabc65495/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/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/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/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +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/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/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +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.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/btcutil/psbt/partial_input.go b/btcutil/psbt/partial_input.go new file mode 100644 index 0000000000..4783c74d31 --- /dev/null +++ b/btcutil/psbt/partial_input.go @@ -0,0 +1,361 @@ +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 + 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 + + 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.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..64d1bd4cae --- /dev/null +++ b/btcutil/psbt/partial_output.go @@ -0,0 +1,139 @@ +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 +} + +// 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, + }, + ) + + 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 + } + } + + return nil +} diff --git a/btcutil/psbt/partialsig.go b/btcutil/psbt/partialsig.go new file mode 100644 index 0000000000..e11bb80de7 --- /dev/null +++ b/btcutil/psbt/partialsig.go @@ -0,0 +1,52 @@ +package psbt + +import ( + "bytes" + + "github.com/btcsuite/btcd/btcec" +) + +// 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, btcec.S256()) + 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 := btcec.ParseDERSignature(sig, btcec.S256()) + return err == nil +} + +// checkValid checks that both the pbukey and sig are valid. See the methods +// (PartialSig, validatePubkey, validateSignature) for more details. +// +// TODO(waxwing): update for Schnorr will be needed here if/when that +// activates. +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..73126c3eb2 --- /dev/null +++ b/btcutil/psbt/psbt.go @@ -0,0 +1,407 @@ +// 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) + err = msgTx.Deserialize(bytes.NewReader(value)) + if err != nil { + // If there are no inputs in this yet incomplete transaction, + // the wire package still incorrectly assumes it's encoded in + // the witness format. We can fix this by just trying the non- + // witness encoding too. If that also fails, it's probably an + // invalid transaction. + msgTx = wire.NewMsgTx(2) + err2 := msgTx.DeserializeNoWitness(bytes.NewReader(value)) + + // If the second attempt also failed, something else is wrong + // and it probably makes more sense to return the original + // error instead of the error from the workaround. + if err2 != 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.Serialize(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..12038fbfa0 --- /dev/null +++ b/btcutil/psbt/psbt_test.go @@ -0,0 +1,1448 @@ +// 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" + "testing" + + "github.com/btcsuite/btcd/chaincfg/chainhash" + "github.com/btcsuite/btcd/txscript" + "github.com/btcsuite/btcd/wire" + "github.com/btcsuite/btcd/btcutil" + "github.com/davecgh/go-spew/spew" +) + +// 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 +var validPsbtHex = map[int]string{ + 0: "70736274ff0100750200000001268171371edff285e937adeea4b37b78000c0566cbb3ad64641713ca42171bf60000000000feffffff02d3dff505000000001976a914d0c59903c5bac2868760e90fd521a4665aa7652088ac00e1f5050000000017a9143545e6e33b832c47050f24d3eeb93c9c03948bc787b32e1300000100fda5010100000000010289a3c71eab4d20e0371bbba4cc698fa295c9463afa2e397f8533ccb62f9567e50100000017160014be18d152a9b012039daf3da7de4f53349eecb985ffffffff86f8aa43a71dff1448893a530a7237ef6b4608bbb2dd2d0171e63aec6a4890b40100000017160014fe3e9ef1a745e974d902c4355943abcb34bd5353ffffffff0200c2eb0b000000001976a91485cff1097fd9e008bb34af709c62197b38978a4888ac72fef84e2c00000017a914339725ba21efd62ac753a9bcd067d6c7a6a39d05870247304402202712be22e0270f394f568311dc7ca9a68970b8025fdd3b240229f07f8a5f3a240220018b38d7dcd314e734c9276bd6fb40f673325bc4baa144c800d2f2f02db2765c012103d2e15674941bad4a996372cb87e1856d3652606d98562fe39c5e9e7e413f210502483045022100d12b852d85dcd961d2f5f4ab660654df6eedcc794c0c33ce5cc309ffb5fce58d022067338a8e0e1725c197fb1a88af59f51e44e4255b20167c8684031c05d1f2592a01210223b72beef0965d10be0778efecd61fcac6f79a4ea169393380734464f84f2ab300000000000000", + 1: "70736274ff0100a00200000002ab0949a08c5af7c49b8212f417e2f15ab3f5c33dcf153821a8139f877a5b7be40000000000feffffffab0949a08c5af7c49b8212f417e2f15ab3f5c33dcf153821a8139f877a5b7be40100000000feffffff02603bea0b000000001976a914768a40bbd740cbe81d988e71de2a4d5c71396b1d88ac8e240000000000001976a9146f4620b553fa095e721b9ee0efe9fa039cca459788ac000000000001076a47304402204759661797c01b036b25928948686218347d89864b719e1f7fcf57d1e511658702205309eabf56aa4d8891ffd111fdf1336f3a29da866d7f8486d75546ceedaf93190121035cdc61fc7ba971c0b501a646a2a83b102cb43881217ca682dc86e2d73fa882920001012000e1f5050000000017a9143545e6e33b832c47050f24d3eeb93c9c03948bc787010416001485d13537f2e265405a34dbafa9e3dda01fb82308000000", + 2: "70736274ff0100750200000001268171371edff285e937adeea4b37b78000c0566cbb3ad64641713ca42171bf60000000000feffffff02d3dff505000000001976a914d0c59903c5bac2868760e90fd521a4665aa7652088ac00e1f5050000000017a9143545e6e33b832c47050f24d3eeb93c9c03948bc787b32e1300000100fda5010100000000010289a3c71eab4d20e0371bbba4cc698fa295c9463afa2e397f8533ccb62f9567e50100000017160014be18d152a9b012039daf3da7de4f53349eecb985ffffffff86f8aa43a71dff1448893a530a7237ef6b4608bbb2dd2d0171e63aec6a4890b40100000017160014fe3e9ef1a745e974d902c4355943abcb34bd5353ffffffff0200c2eb0b000000001976a91485cff1097fd9e008bb34af709c62197b38978a4888ac72fef84e2c00000017a914339725ba21efd62ac753a9bcd067d6c7a6a39d05870247304402202712be22e0270f394f568311dc7ca9a68970b8025fdd3b240229f07f8a5f3a240220018b38d7dcd314e734c9276bd6fb40f673325bc4baa144c800d2f2f02db2765c012103d2e15674941bad4a996372cb87e1856d3652606d98562fe39c5e9e7e413f210502483045022100d12b852d85dcd961d2f5f4ab660654df6eedcc794c0c33ce5cc309ffb5fce58d022067338a8e0e1725c197fb1a88af59f51e44e4255b20167c8684031c05d1f2592a01210223b72beef0965d10be0778efecd61fcac6f79a4ea169393380734464f84f2ab30000000001030401000000000000", + 3: "70736274ff0100a00200000002ab0949a08c5af7c49b8212f417e2f15ab3f5c33dcf153821a8139f877a5b7be40000000000feffffffab0949a08c5af7c49b8212f417e2f15ab3f5c33dcf153821a8139f877a5b7be40100000000feffffff02603bea0b000000001976a914768a40bbd740cbe81d988e71de2a4d5c71396b1d88ac8e240000000000001976a9146f4620b553fa095e721b9ee0efe9fa039cca459788ac00000000000100df0200000001268171371edff285e937adeea4b37b78000c0566cbb3ad64641713ca42171bf6000000006a473044022070b2245123e6bf474d60c5b50c043d4c691a5d2435f09a34a7662a9dc251790a022001329ca9dacf280bdf30740ec0390422422c81cb45839457aeb76fc12edd95b3012102657d118d3357b8e0f4c2cd46db7b39f6d9c38d9a70abcb9b2de5dc8dbfe4ce31feffffff02d3dff505000000001976a914d0c59903c5bac2868760e90fd521a4665aa7652088ac00e1f5050000000017a9143545e6e33b832c47050f24d3eeb93c9c03948bc787b32e13000001012000e1f5050000000017a9143545e6e33b832c47050f24d3eeb93c9c03948bc787010416001485d13537f2e265405a34dbafa9e3dda01fb8230800220202ead596687ca806043edc3de116cdf29d5e9257c196cd055cf698c8d02bf24e9910b4a6ba670000008000000080020000800022020394f62be9df19952c5587768aeb7698061ad2c4a25c894f47d8c162b4d7213d0510b4a6ba6700000080010000800200008000", + 4: "70736274ff0100550200000001279a2323a5dfb51fc45f220fa58b0fc13e1e3342792a85d7e36cd6333b5cbc390000000000ffffffff01a05aea0b000000001976a914ffe9c0061097cc3b636f2cb0460fa4fc427d2b4588ac0000000000010120955eea0b0000000017a9146345200f68d189e1adc0df1c4d16ea8f14c0dbeb87220203b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd4646304302200424b58effaaa694e1559ea5c93bbfd4a89064224055cdf070b6771469442d07021f5c8eb0fea6516d60b8acb33ad64ede60e8785bfb3aa94b99bdf86151db9a9a010104220020771fd18ad459666dd49f3d564e3dbc42f4c84774e360ada16816a8ed488d5681010547522103b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd462103de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd52ae220603b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd4610b4a6ba67000000800000008004000080220603de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd10b4a6ba670000008000000080050000800000", + 5: "70736274ff01003f0200000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffff010000000000000000036a010000000000000a0f0102030405060708090f0102030405060708090a0b0c0d0e0f0000", +} + +// 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", +} + +// This tests that valid PSBT serializations can be parsed +// into Psbt structs. +func TestReadValidPsbtAndReserialize(t *testing.T) { + for _, v := range validPsbtHex { + PsbtBytes, err := hex.DecodeString(v) + if err != nil { + t.Fatalf("Unable to decode hex: %v", err) + } + + testPsbt, err := NewFromRawBytes( + bytes.NewReader(PsbtBytes), false, + ) + if err != nil { + t.Fatalf("unable to parse psbt: %v", err) + } + + t.Logf("Successfully parsed test, got transaction: %v", + spew.Sdump(testPsbt.UnsignedTx)) + + var b bytes.Buffer + err = testPsbt.Serialize(&b) + if err != nil { + t.Fatalf("Unable to serialize created Psbt: %v", err) + } + + raw := b.Bytes() + if !bytes.Equal(raw, PsbtBytes) { + t.Fatalf("Serialized PSBT didn't match: %v", + hex.EncodeToString(raw)) + } + } +} + +func TestReadInvalidPsbt(t *testing.T) { + for _, v := range invalidPsbtHex { + PsbtBytes, err := hex.DecodeString(v) + if err != nil { + t.Fatalf("Unable to decode hex: %v", err) + } + + _, err = NewFromRawBytes(bytes.NewReader(PsbtBytes), false) + if err == nil { + t.Fatalf("Incorrectly validated psbt: %v", + hex.EncodeToString(PsbtBytes)) + } + + 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/types.go b/btcutil/psbt/types.go new file mode 100644 index 0000000000..1b4a26a4dc --- /dev/null +++ b/btcutil/psbt/types.go @@ -0,0 +1,149 @@ +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 + + // 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 + + j // 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 +) diff --git a/btcutil/psbt/updater.go b/btcutil/psbt/updater.go new file mode 100644 index 0000000000..56a33654b6 --- /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/txscript" + "github.com/btcsuite/btcd/wire" + "github.com/btcsuite/btcd/btcutil" +) + +// 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 (p *Updater) AddInNonWitnessUtxo(tx *wire.MsgTx, inIndex int) error { + if inIndex > len(p.Upsbt.Inputs)-1 { + return ErrInvalidPrevOutNonWitnessTransaction + } + + p.Upsbt.Inputs[inIndex].NonWitnessUtxo = tx + + if err := p.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 (p *Updater) AddInWitnessUtxo(txout *wire.TxOut, inIndex int) error { + if inIndex > len(p.Upsbt.Inputs)-1 { + return ErrInvalidPsbtFormat + } + + p.Upsbt.Inputs[inIndex].WitnessUtxo = txout + + if err := p.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 (p *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 := p.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(p.Upsbt.UnsignedTx.TxIn) < inIndex+1 { + return ErrInvalidPrevOutNonWitnessTransaction + } + + if pInput.NonWitnessUtxo.TxHash() != + p.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 := p.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 + } + } + } + + p.Upsbt.Inputs[inIndex].PartialSigs = append( + p.Upsbt.Inputs[inIndex].PartialSigs, &partialSig, + ) + + if err := p.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 (p *Updater) AddInSighashType(sighashType txscript.SigHashType, + inIndex int) error { + + p.Upsbt.Inputs[inIndex].SighashType = sighashType + + if err := p.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 (p *Updater) AddInRedeemScript(redeemScript []byte, + inIndex int) error { + + p.Upsbt.Inputs[inIndex].RedeemScript = redeemScript + + if err := p.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 (p *Updater) AddInWitnessScript(witnessScript []byte, + inIndex int) error { + + p.Upsbt.Inputs[inIndex].WitnessScript = witnessScript + + if err := p.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 (p *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 p.Upsbt.Inputs[inIndex].Bip32Derivation { + if bytes.Equal(x.PubKey, bip32Derivation.PubKey) { + return ErrDuplicateKey + } + } + + p.Upsbt.Inputs[inIndex].Bip32Derivation = append( + p.Upsbt.Inputs[inIndex].Bip32Derivation, &bip32Derivation, + ) + + if err := p.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 (p *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 p.Upsbt.Outputs[outIndex].Bip32Derivation { + if bytes.Equal(x.PubKey, bip32Derivation.PubKey) { + return ErrDuplicateKey + } + } + + p.Upsbt.Outputs[outIndex].Bip32Derivation = append( + p.Upsbt.Outputs[outIndex].Bip32Derivation, &bip32Derivation, + ) + + if err := p.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 (p *Updater) AddOutRedeemScript(redeemScript []byte, + outIndex int) error { + + p.Upsbt.Outputs[outIndex].RedeemScript = redeemScript + + if err := p.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 (p *Updater) AddOutWitnessScript(witnessScript []byte, + outIndex int) error { + + p.Upsbt.Outputs[outIndex].WitnessScript = witnessScript + + if err := p.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..494d04070f --- /dev/null +++ b/btcutil/psbt/utils.go @@ -0,0 +1,422 @@ +// 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) { + var ( + buf bytes.Buffer + witnessItems = [][]byte{sig, pub} + ) + + 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 +} 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..e727a0c44a --- /dev/null +++ b/btcutil/wif.go @@ -0,0 +1,169 @@ +// 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" + "github.com/btcsuite/btcd/chaincfg" + "github.com/btcsuite/btcd/chaincfg/chainhash" + "github.com/btcsuite/btcd/btcutil/base58" +) + +// 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(btcec.S256(), 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) + // Pad and append bytes manually, instead of using Serialize, to + // avoid another call to make. + a = paddedAppend(btcec.PrivKeyBytesLen, a, w.PrivKey.D.Bytes()) + 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 := (*btcec.PublicKey)(&w.PrivKey.PublicKey) + if w.CompressPubKey { + return pk.SerializeCompressed() + } + return pk.SerializeUncompressed() +} + +// 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...) +} diff --git a/btcutil/wif_test.go b/btcutil/wif_test.go new file mode 100644 index 0000000000..1c21b4871b --- /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" + "github.com/btcsuite/btcd/chaincfg" + . "github.com/btcsuite/btcd/btcutil" +) + +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(btcec.S256(), 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(btcec.S256(), 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) + } + }) +} From caac0f821a6731408ba59bfe110b011eb0969c18 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Fri, 24 Dec 2021 16:43:16 -0800 Subject: [PATCH 268/419] multi: update btcutil imports to point to new sub-module In this commit, we update all the btcutil imports to point to the new sub-module. In the same commit, we also modify the recently added `btcutil/go.mod` file as we need to continue pointing to the _old_ version of btcd, until we merge this PR and push a new tag. --- blockchain/accept.go | 2 +- blockchain/bench_test.go | 2 +- blockchain/chain.go | 2 +- blockchain/chain_test.go | 2 +- blockchain/chainio.go | 2 +- blockchain/checkpoints.go | 2 +- blockchain/common_test.go | 2 +- blockchain/example_test.go | 2 +- blockchain/fullblocks_test.go | 2 +- blockchain/fullblocktests/generate.go | 2 +- blockchain/indexers/addrindex.go | 2 +- blockchain/indexers/blocklogger.go | 2 +- blockchain/indexers/cfindex.go | 6 +-- blockchain/indexers/common.go | 2 +- blockchain/indexers/manager.go | 2 +- blockchain/indexers/txindex.go | 2 +- blockchain/merkle.go | 2 +- blockchain/merkle_test.go | 2 +- blockchain/process.go | 2 +- blockchain/scriptval.go | 2 +- blockchain/utxoviewpoint.go | 2 +- blockchain/validate.go | 2 +- blockchain/validate_test.go | 2 +- blockchain/weight.go | 2 +- btcjson/chainsvrresults.go | 2 +- btcjson/chainsvrresults_test.go | 2 +- btcjson/walletsvrcmds.go | 2 +- btcjson/walletsvrcmds_test.go | 2 +- btcutil/go.mod | 2 - btcutil/go.sum | 42 +++++++++++++++++++ chaincfg/README.md | 2 +- chaincfg/doc.go | 2 +- cmd/addblock/config.go | 2 +- cmd/addblock/import.go | 2 +- cmd/btcctl/config.go | 2 +- cmd/findcheckpoint/config.go | 2 +- cmd/gencerts/gencerts.go | 2 +- config.go | 2 +- database/cmd/dbtool/globalconfig.go | 2 +- database/cmd/dbtool/insecureimport.go | 2 +- database/example_test.go | 10 ++++- database/ffldb/bench_test.go | 2 +- database/ffldb/db.go | 2 +- database/ffldb/driver_test.go | 2 +- database/ffldb/interface_test.go | 2 +- database/ffldb/whitebox_test.go | 2 +- database/interface.go | 2 +- docs/developer_resources.md | 2 +- docs/json_rpc_api.md | 6 +-- go.mod | 19 +++++++-- go.sum | 26 ++++-------- integration/csv_fork_test.go | 2 +- integration/rpctest/blockgen.go | 2 +- integration/rpctest/memwallet.go | 4 +- integration/rpctest/node.go | 2 +- integration/rpctest/rpc_harness.go | 2 +- integration/rpctest/rpc_harness_test.go | 2 +- mempool/estimatefee.go | 2 +- mempool/estimatefee_test.go | 2 +- mempool/mempool.go | 2 +- mempool/mempool_test.go | 2 +- mempool/policy.go | 2 +- mempool/policy_test.go | 2 +- mining/cpuminer/cpuminer.go | 2 +- mining/mining.go | 2 +- mining/mining_test.go | 2 +- mining/policy.go | 2 +- mining/policy_test.go | 2 +- netsync/blocklogger.go | 2 +- netsync/interface.go | 2 +- netsync/manager.go | 2 +- rpcadapters.go | 2 +- rpcclient/examples/btcdwebsockets/main.go | 2 +- .../examples/btcwalletwebsockets/main.go | 2 +- rpcclient/extensions.go | 2 +- rpcclient/mining.go | 2 +- rpcclient/notify.go | 2 +- rpcclient/rawtransactions.go | 2 +- rpcclient/wallet.go | 2 +- rpcserver.go | 2 +- rpcwebsocket.go | 2 +- server.go | 4 +- txscript/example_test.go | 2 +- txscript/pkscript.go | 2 +- txscript/reference_test.go | 2 +- txscript/sign.go | 2 +- txscript/sign_test.go | 2 +- txscript/standard.go | 2 +- txscript/standard_test.go | 2 +- 89 files changed, 165 insertions(+), 114 deletions(-) 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 eea603ce8e..92bfb26876 100644 --- a/blockchain/chain.go +++ b/blockchain/chain.go @@ -16,7 +16,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" ) const ( 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 f40ba465e9..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 ( 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..8de699c416 100644 --- a/blockchain/common_test.go +++ b/blockchain/common_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/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/generate.go b/blockchain/fullblocktests/generate.go index 82d3a036e9..9555116842 100644 --- a/blockchain/fullblocktests/generate.go +++ b/blockchain/fullblocktests/generate.go @@ -24,7 +24,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 ( diff --git a/blockchain/indexers/addrindex.go b/blockchain/indexers/addrindex.go index 4a9bf4ec68..2f0e2eeba1 100644 --- a/blockchain/indexers/addrindex.go +++ b/blockchain/indexers/addrindex.go @@ -15,7 +15,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" ) const ( 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..8869e23f27 100644 --- a/blockchain/scriptval.go +++ b/blockchain/scriptval.go @@ -12,7 +12,7 @@ import ( "github.com/btcsuite/btcd/txscript" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) // txValidateItem holds a transaction along with which input to validate. diff --git a/blockchain/utxoviewpoint.go b/blockchain/utxoviewpoint.go index b85765814d..3398693225 100644 --- a/blockchain/utxoviewpoint.go +++ b/blockchain/utxoviewpoint.go @@ -11,7 +11,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" ) // txoFlags is a bitmask defining additional information and state for a diff --git a/blockchain/validate.go b/blockchain/validate.go index f41d54e6b1..575861e2d3 100644 --- a/blockchain/validate.go +++ b/blockchain/validate.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 ( 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/weight.go b/blockchain/weight.go index 6f6292a1b6..5a6f257be5 100644 --- a/blockchain/weight.go +++ b/blockchain/weight.go @@ -9,7 +9,7 @@ import ( "github.com/btcsuite/btcd/txscript" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) const ( diff --git a/btcjson/chainsvrresults.go b/btcjson/chainsvrresults.go index 59f18c74c8..8062d9d990 100644 --- a/btcjson/chainsvrresults.go +++ b/btcjson/chainsvrresults.go @@ -12,7 +12,7 @@ import ( "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) // GetBlockHeaderVerboseResult models the data from the getblockheader command when diff --git a/btcjson/chainsvrresults_test.go b/btcjson/chainsvrresults_test.go index 72dcd8d7ec..aee514a9a4 100644 --- a/btcjson/chainsvrresults_test.go +++ b/btcjson/chainsvrresults_test.go @@ -11,7 +11,7 @@ import ( "github.com/btcsuite/btcd/btcjson" "github.com/btcsuite/btcd/chaincfg/chainhash" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" "github.com/davecgh/go-spew/spew" ) diff --git a/btcjson/walletsvrcmds.go b/btcjson/walletsvrcmds.go index e8ed62372b..1e061529d3 100644 --- a/btcjson/walletsvrcmds.go +++ b/btcjson/walletsvrcmds.go @@ -12,7 +12,7 @@ import ( "encoding/json" "fmt" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) // AddMultisigAddressCmd defines the addmutisigaddress JSON-RPC command. diff --git a/btcjson/walletsvrcmds_test.go b/btcjson/walletsvrcmds_test.go index 9c68d260f6..396153ef04 100644 --- a/btcjson/walletsvrcmds_test.go +++ b/btcjson/walletsvrcmds_test.go @@ -12,7 +12,7 @@ import ( "testing" "github.com/btcsuite/btcd/btcjson" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) // TestWalletSvrCmds tests all of the wallet server commands marshal and diff --git a/btcutil/go.mod b/btcutil/go.mod index 8d3c35b7e4..71014ebed5 100644 --- a/btcutil/go.mod +++ b/btcutil/go.mod @@ -9,5 +9,3 @@ require ( 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 index 58fe70e411..c51f84dd2d 100644 --- a/btcutil/go.sum +++ b/btcutil/go.sum @@ -9,35 +9,77 @@ github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+q 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/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= 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/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= 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 v0.0.0-20171005155431-ecdeabc65495/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/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/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/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +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.7.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.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +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= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= 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-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 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/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.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/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/chaincfg/README.md b/chaincfg/README.md index 72fac2e7dc..d1a534bafe 100644 --- a/chaincfg/README.md +++ b/chaincfg/README.md @@ -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/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/cmd/addblock/config.go b/cmd/addblock/config.go index 90620c8fda..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" ) 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/config.go b/cmd/btcctl/config.go index 1cc2a260f3..3db735c5d8 100644 --- a/cmd/btcctl/config.go +++ b/cmd/btcctl/config.go @@ -15,7 +15,7 @@ import ( "github.com/btcsuite/btcd/btcjson" "github.com/btcsuite/btcd/chaincfg" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" flags "github.com/jessevdk/go-flags" ) diff --git a/cmd/findcheckpoint/config.go b/cmd/findcheckpoint/config.go index 87f04cecd5..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" ) diff --git a/cmd/gencerts/gencerts.go b/cmd/gencerts/gencerts.go index 27d1073e74..c0a27ad37b 100644 --- a/cmd/gencerts/gencerts.go +++ b/cmd/gencerts/gencerts.go @@ -12,7 +12,7 @@ import ( "strings" "time" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" flags "github.com/jessevdk/go-flags" ) diff --git a/config.go b/config.go index 156084bcf9..5eca3f2174 100644 --- a/config.go +++ b/config.go @@ -30,7 +30,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" "github.com/btcsuite/go-socks/socks" flags "github.com/jessevdk/go-flags" ) diff --git a/database/cmd/dbtool/globalconfig.go b/database/cmd/dbtool/globalconfig.go index aa1e0e0483..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 ( 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/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/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/db.go b/database/ffldb/db.go index b499442101..ee36b5b006 100644 --- a/database/ffldb/db.go +++ b/database/ffldb/db.go @@ -18,7 +18,7 @@ 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/btcd/btcutil" "github.com/btcsuite/goleveldb/leveldb" "github.com/btcsuite/goleveldb/leveldb/comparer" ldberrors "github.com/btcsuite/goleveldb/leveldb/errors" diff --git a/database/ffldb/driver_test.go b/database/ffldb/driver_test.go index f3db909d79..ef35f07840 100644 --- a/database/ffldb/driver_test.go +++ b/database/ffldb/driver_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" ) // dbType is the database type name for this driver. diff --git a/database/ffldb/interface_test.go b/database/ffldb/interface_test.go index 1ce991cc09..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 ( diff --git a/database/ffldb/whitebox_test.go b/database/ffldb/whitebox_test.go index 161d866d29..1db69e4215 100644 --- a/database/ffldb/whitebox_test.go +++ b/database/ffldb/whitebox_test.go @@ -20,7 +20,7 @@ import ( "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/database" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" "github.com/btcsuite/goleveldb/leveldb" ldberrors "github.com/btcsuite/goleveldb/leveldb/errors" ) 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/docs/developer_resources.md b/docs/developer_resources.md index cec8ce9972..c595c8330e 100644 --- a/docs/developer_resources.md +++ b/docs/developer_resources.md @@ -28,7 +28,7 @@ * [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 + * [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 diff --git a/docs/json_rpc_api.md b/docs/json_rpc_api.md index db292d2ba2..d1b43ce8c4 100644 --- a/docs/json_rpc_api.md +++ b/docs/json_rpc_api.md @@ -1100,7 +1100,7 @@ import ( "path/filepath" "github.com/btcsuite/btcd/rpcclient" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) func main() { @@ -1164,7 +1164,7 @@ import ( "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/rpcclient" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) func main() { @@ -1256,7 +1256,7 @@ import ( "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/rpcclient" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) func main() { diff --git a/go.mod b/go.mod index 767c2740db..a2e5bed578 100644 --- a/go.mod +++ b/go.mod @@ -1,8 +1,8 @@ module github.com/btcsuite/btcd require ( + github.com/btcsuite/btcd/btcutil v1.0.0 github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f - github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd github.com/btcsuite/goleveldb v1.0.0 github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792 @@ -11,8 +11,21 @@ require ( 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/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 // indirect golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 ) -go 1.16 +require ( + github.com/aead/siphash v1.0.1 // indirect + github.com/btcsuite/snappy-go v1.0.0 // indirect + github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23 // indirect + github.com/onsi/ginkgo v1.14.0 // indirect + github.com/onsi/gomega v1.10.1 // indirect + golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc // indirect + golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed // indirect + golang.org/x/text v0.3.3 // indirect + golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect +) + +replace github.com/btcsuite/btcd/btcutil => ./btcutil + +go 1.17 diff --git a/go.sum b/go.sum index e9ee276db4..a23498435b 100644 --- a/go.sum +++ b/go.sum @@ -4,8 +4,6 @@ github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13P 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/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= -github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= 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/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= @@ -19,12 +17,12 @@ github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtE 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/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -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/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/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/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= @@ -33,11 +31,9 @@ github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrU 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 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= 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= @@ -46,49 +42,46 @@ 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/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.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= 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/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-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37 h1:cg5LA/zNPRzIXIWSCxQW10Rvpy94aQh3LT/ShoCpkHw= -golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= 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-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3 h1:0GoQqolDA55aaLxZyTzK/Y2ePZzZTUrRacwib7cNsYQ= 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/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 h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI= 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 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= 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= @@ -97,11 +90,10 @@ google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miE 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 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= diff --git a/integration/csv_fork_test.go b/integration/csv_fork_test.go index 3146634966..5ffd5d5ab2 100644 --- a/integration/csv_fork_test.go +++ b/integration/csv_fork_test.go @@ -21,7 +21,7 @@ import ( "github.com/btcsuite/btcd/integration/rpctest" "github.com/btcsuite/btcd/txscript" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) const ( diff --git a/integration/rpctest/blockgen.go b/integration/rpctest/blockgen.go index 0d802f5a48..a35c66e6ac 100644 --- a/integration/rpctest/blockgen.go +++ b/integration/rpctest/blockgen.go @@ -17,7 +17,7 @@ import ( "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 diff --git a/integration/rpctest/memwallet.go b/integration/rpctest/memwallet.go index 59b0ef4c08..c94124d82c 100644 --- a/integration/rpctest/memwallet.go +++ b/integration/rpctest/memwallet.go @@ -17,8 +17,8 @@ import ( "github.com/btcsuite/btcd/rpcclient" "github.com/btcsuite/btcd/txscript" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" - "github.com/btcsuite/btcutil/hdkeychain" + "github.com/btcsuite/btcd/btcutil" + "github.com/btcsuite/btcd/btcutil/hdkeychain" ) var ( diff --git a/integration/rpctest/node.go b/integration/rpctest/node.go index 73dc15fca9..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 diff --git a/integration/rpctest/rpc_harness.go b/integration/rpctest/rpc_harness.go index 679ae4e478..cb49e42c26 100644 --- a/integration/rpctest/rpc_harness.go +++ b/integration/rpctest/rpc_harness.go @@ -20,7 +20,7 @@ import ( "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/rpcclient" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) const ( diff --git a/integration/rpctest/rpc_harness_test.go b/integration/rpctest/rpc_harness_test.go index df753e3126..d1184eb6ba 100644 --- a/integration/rpctest/rpc_harness_test.go +++ b/integration/rpctest/rpc_harness_test.go @@ -17,7 +17,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) { diff --git a/mempool/estimatefee.go b/mempool/estimatefee.go index 55fe4810df..f3a7cfe95b 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 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 b54856c8b3..f830a51382 100644 --- a/mempool/mempool.go +++ b/mempool/mempool.go @@ -20,7 +20,7 @@ import ( "github.com/btcsuite/btcd/mining" "github.com/btcsuite/btcd/txscript" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) const ( diff --git a/mempool/mempool_test.go b/mempool/mempool_test.go index 96d5054417..96777b9758 100644 --- a/mempool/mempool_test.go +++ b/mempool/mempool_test.go @@ -18,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" ) // fakeChain is used by the pool harness to provide generated test utxos and diff --git a/mempool/policy.go b/mempool/policy.go index 1fe850797f..edba16ac2e 100644 --- a/mempool/policy.go +++ b/mempool/policy.go @@ -11,7 +11,7 @@ import ( "github.com/btcsuite/btcd/blockchain" "github.com/btcsuite/btcd/txscript" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) const ( diff --git a/mempool/policy_test.go b/mempool/policy_test.go index b9cdbac47a..a81f98ea83 100644 --- a/mempool/policy_test.go +++ b/mempool/policy_test.go @@ -14,7 +14,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" ) // TestCalcMinRequiredTxRelayFee tests the calcMinRequiredTxRelayFee API. 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 e918328df8..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 ( 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/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 2b6c041156..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 ( diff --git a/rpcadapters.go b/rpcadapters.go index ddcdf79bf7..02d33710ac 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 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/extensions.go b/rpcclient/extensions.go index c8615293e3..efb6c1c710 100644 --- a/rpcclient/extensions.go +++ b/rpcclient/extensions.go @@ -15,7 +15,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" ) // FutureDebugLevelResult is a future promise to deliver the result of a diff --git a/rpcclient/mining.go b/rpcclient/mining.go index 717825eeaa..680a63b6d5 100644 --- a/rpcclient/mining.go +++ b/rpcclient/mining.go @@ -11,7 +11,7 @@ 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 diff --git a/rpcclient/notify.go b/rpcclient/notify.go index 6879099acd..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 ( diff --git a/rpcclient/rawtransactions.go b/rpcclient/rawtransactions.go index cfc322c769..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 ( diff --git a/rpcclient/wallet.go b/rpcclient/wallet.go index 71435d99f8..7268ad0a19 100644 --- a/rpcclient/wallet.go +++ b/rpcclient/wallet.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" ) // ***************************** diff --git a/rpcserver.go b/rpcserver.go index 6f60261a9c..8a4ecaac8d 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -40,7 +40,7 @@ import ( "github.com/btcsuite/btcd/peer" "github.com/btcsuite/btcd/txscript" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" "github.com/btcsuite/websocket" ) diff --git a/rpcwebsocket.go b/rpcwebsocket.go index 356a897455..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" ) diff --git a/server.go b/server.go index 746c48dde3..45bfb17ee4 100644 --- a/server.go +++ b/server.go @@ -36,8 +36,8 @@ 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/btcsuite/btcd/btcutil" + "github.com/btcsuite/btcd/btcutil/bloom" ) const ( diff --git a/txscript/example_test.go b/txscript/example_test.go index 6e17341c4a..7983b08ff2 100644 --- a/txscript/example_test.go +++ b/txscript/example_test.go @@ -14,7 +14,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" ) // This example demonstrates creating a script which pays to a bitcoin address. diff --git a/txscript/pkscript.go b/txscript/pkscript.go index f5b11e6d53..f8aa783aef 100644 --- a/txscript/pkscript.go +++ b/txscript/pkscript.go @@ -8,7 +8,7 @@ import ( "github.com/btcsuite/btcd/btcec" "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" "golang.org/x/crypto/ripemd160" ) diff --git a/txscript/reference_test.go b/txscript/reference_test.go index 9d9c8f39ed..3d4c591427 100644 --- a/txscript/reference_test.go +++ b/txscript/reference_test.go @@ -17,7 +17,7 @@ import ( "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) // scriptTestName returns a descriptive test name for the given reference script diff --git a/txscript/sign.go b/txscript/sign.go index 138e31cdd4..84d8d1f3ea 100644 --- a/txscript/sign.go +++ b/txscript/sign.go @@ -11,7 +11,7 @@ import ( "github.com/btcsuite/btcd/btcec" "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) // RawTxInWitnessSignature returns the serialized ECDA signature for the input diff --git a/txscript/sign_test.go b/txscript/sign_test.go index b97a8a64d4..47084f18bf 100644 --- a/txscript/sign_test.go +++ b/txscript/sign_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" ) type addressToKey struct { diff --git a/txscript/standard.go b/txscript/standard.go index 44902971e9..343a9b2727 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -9,7 +9,7 @@ import ( "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) const ( diff --git a/txscript/standard_test.go b/txscript/standard_test.go index 582d30eee4..809bf485d9 100644 --- a/txscript/standard_test.go +++ b/txscript/standard_test.go @@ -13,7 +13,7 @@ import ( "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) // mustParseShortForm parses the passed short form script and returns the From 3cacbd489ecba886a8f9c1d37eca7a6f70ced3d1 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Fri, 24 Dec 2021 16:48:35 -0800 Subject: [PATCH 269/419] build: adapt btcutil Makefile for usage in project In this commit, we adapt the Makefile that was being used for the btcutil project to work for btcd as well. The Makefile is pretty simple, and is just a series of templated commands. Overtime, we can pull in some of the `lnd` additions as well, which we use to handle our reproducible build and verification system. --- .github/workflows/go.yml | 72 +++++++++++++++++------ Makefile | 124 +++++++++++++++++++++++++++++++++++++++ goclean.sh | 19 ------ 3 files changed, 177 insertions(+), 38 deletions(-) create mode 100644 Makefile delete mode 100755 goclean.sh diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 5da1bebc63..b015b3c175 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -1,35 +1,69 @@ 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: - # https://github.blog/changelog/2021-04-20-github-actions-control-permissions-for-github_token/ - permissions: - contents: read - name: Go CI + name: Build runs-on: ubuntu-latest - strategy: - matrix: - go: [1.16.8, 1.17.1] steps: - name: Set up Go uses: actions/setup-go@v2 with: - go-version: ${{ matrix.go }} + go-version: ${{ env.GO_VERSION }} + - name: Check out source uses: actions/checkout@v2 - - name: Install Linters - run: "curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b $(go env GOPATH)/bin v1.26.0" + - name: Build - env: - GO111MODULE: "on" - run: go 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 - env: - GO111MODULE: "on" - run: | - sh ./goclean.sh + run: make unit-cover - - name: Send coverage + - name: Send top-level coverage uses: shogo82148/actions-goveralls@v1 with: - path-to-profile: profile.cov + path-to-profile: coverage.txt + + - name: Send btcutil coverage + uses: shogo82148/actions-goveralls@v1 + with: + path-to-profile: btcutil/coverage.txt + + - name: Send btcutil coverage for psbt package + uses: shogo82148/actions-goveralls@v1 + with: + path-to-profile: btcutil/psbt/coverage.txt + + 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/Makefile b/Makefile new file mode 100644 index 0000000000..5db0871ad1 --- /dev/null +++ b/Makefile @@ -0,0 +1,124 @@ +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 := GO111MODULE=on go test -v -tags=$(DEV_TAGS) + +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) ./... -test.timeout=20m + cd btcutil; $(GOTEST) ./... -test.timeout=20m + cd btcutil/psbt; $(GOTEST) ./... -test.timeout=20m + +unit-cover: $(GOACC_BIN) + @$(call print, "Running unit coverage tests.") + $(GOACC_BIN) ./... + 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 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 btcutil/coverage.txt btcutil/psbt/coverage.txt + +.PHONY: all \ + default \ + build \ + check \ + unit \ + unit-cover \ + unit-race \ + fmt \ + lint \ + clean diff --git a/goclean.sh b/goclean.sh deleted file mode 100755 index dad9f8f1dc..0000000000 --- a/goclean.sh +++ /dev/null @@ -1,19 +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/) -# 3. go vet (http://golang.org/cmd/vet) -# 4. gosimple (https://github.com/dominikh/go-simple) -# 5. unconvert (https://github.com/mdempsky/unconvert) -# 6. race detector (http://blog.golang.org/race-detector) -# 7. test coverage (http://blog.golang.org/cover) - -set -ex - -env GORACE="halt_on_error=1" go test -race -tags="rpctest" -covermode atomic -coverprofile=profile.cov ./... - -# Automatic checks -golangci-lint run --deadline=10m --disable-all \ ---enable=gofmt \ ---enable=vet \ ---enable=gosimple \ ---enable=unconvert From 161863e7fc63c1945be2452e3b7032fde54f9481 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Mon, 10 Jan 2022 19:40:11 -0800 Subject: [PATCH 270/419] btcutil: update modules to replace to top-level btcd repo Now that the new `btcutil/v1.0.0` tag has been pushed, we update the new internal modules to point to the top-level `btcd` repo via replace directives. --- btcutil/go.mod | 4 +++- btcutil/go.sum | 16 +++----------- btcutil/psbt/go.mod | 7 +++--- btcutil/psbt/go.sum | 53 +++++++++++++++++++++++++++++++++++---------- go.mod | 6 ----- go.sum | 10 +-------- 6 files changed, 53 insertions(+), 43 deletions(-) diff --git a/btcutil/go.mod b/btcutil/go.mod index 71014ebed5..eaf71339e1 100644 --- a/btcutil/go.mod +++ b/btcutil/go.mod @@ -4,8 +4,10 @@ go 1.16 require ( github.com/aead/siphash v1.0.1 - github.com/btcsuite/btcd v0.20.1-beta + github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c github.com/davecgh/go-spew v1.1.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 index c51f84dd2d..f4eb4bca26 100644 --- a/btcutil/go.sum +++ b/btcutil/go.sum @@ -1,21 +1,15 @@ 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.20.1-beta h1:Ik4hyJqN8Jfyv3S4AGBOmyouMsYE3EdYODkMbQjwPGw= -github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= +github.com/btcsuite/btcd/btcutil v1.0.0/go.mod h1:Uoxwv0pqYWhD//tfTiipkxNfdhG9UrLwaeswfjfdF0A= 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/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/goleveldb v1.0.0 h1:Tvd0BfvqX9o823q1j2UZ/epQo09eJh6dTcRp79ilIN4= github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= -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/snappy-go v1.0.0 h1:ZxaA6lo2EpxGddsA8JwWOcxlzRybb444sgmeJQMJGQE= github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= 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 v0.0.0-20171005155431-ecdeabc65495/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/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= @@ -32,21 +26,17 @@ github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw 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/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= 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.7.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.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= 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= -golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= 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= diff --git a/btcutil/psbt/go.mod b/btcutil/psbt/go.mod index 55ac1ca956..485abcff67 100644 --- a/btcutil/psbt/go.mod +++ b/btcutil/psbt/go.mod @@ -3,15 +3,16 @@ module github.com/btcsuite/btcd/btcutil/psbt go 1.17 require ( - github.com/btcsuite/btcd v0.20.1-beta - github.com/btcsuite/btcd/btcutil v0.0.0-20190425235716-9e5f4b9a998d + github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c + github.com/btcsuite/btcd/btcutil v1.0.0 github.com/davecgh/go-spew v1.1.1 ) require ( github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f // indirect - github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d // indirect golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 // indirect ) replace github.com/btcsuite/btcd/btcutil => ../ + +replace github.com/btcsuite/btcd => ../.. diff --git a/btcutil/psbt/go.sum b/btcutil/psbt/go.sum index 4898b254c6..921a146260 100644 --- a/btcutil/psbt/go.sum +++ b/btcutil/psbt/go.sum @@ -1,39 +1,70 @@ github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/btcsuite/btcd v0.20.1-beta h1:Ik4hyJqN8Jfyv3S4AGBOmyouMsYE3EdYODkMbQjwPGw= -github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= 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/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= -github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= -github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= +github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= +github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= 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 v0.0.0-20171005155431-ecdeabc65495/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/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/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/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +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.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +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.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +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= 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-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 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/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.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/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/go.mod b/go.mod index a2e5bed578..2c2bb9229f 100644 --- a/go.mod +++ b/go.mod @@ -18,12 +18,6 @@ require ( github.com/aead/siphash v1.0.1 // indirect github.com/btcsuite/snappy-go v1.0.0 // indirect github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23 // indirect - github.com/onsi/ginkgo v1.14.0 // indirect - github.com/onsi/gomega v1.10.1 // indirect - golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc // indirect - golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed // indirect - golang.org/x/text v0.3.3 // indirect - golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect ) replace github.com/btcsuite/btcd/btcutil => ./btcutil diff --git a/go.sum b/go.sum index a23498435b..3b35b00620 100644 --- a/go.sum +++ b/go.sum @@ -1,22 +1,18 @@ 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.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= +github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c/go.mod h1:tjmYdS6MLJ5/s0Fj4DbLgSbDHbEqLJrtnHecBFkdz5M= 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/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/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= github.com/btcsuite/goleveldb v1.0.0 h1:Tvd0BfvqX9o823q1j2UZ/epQo09eJh6dTcRp79ilIN4= github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= -github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= github.com/btcsuite/snappy-go v1.0.0 h1:ZxaA6lo2EpxGddsA8JwWOcxlzRybb444sgmeJQMJGQE= github.com/btcsuite/snappy-go v1.0.0/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/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/lru v1.0.0 h1:Kbsb1SFDsIlaupWPwsPp+dkxiBY1frcS07PCPgotKz8= @@ -35,7 +31,6 @@ github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw 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/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= @@ -45,16 +40,13 @@ github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6 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/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 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= 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= -golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= 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= From dc4dc15d8c89c019847a2bb8df2833825e8403c4 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Fri, 19 Mar 2021 17:12:47 -0700 Subject: [PATCH 271/419] chaincfg: create new abstract deployment starter/ender interfaces In this commit, we create a series of new interfaces that'll allow us to abstract "when" exactly a deployment starts and ends. As is, all deployments start/end based on a unix timestamp, which is compared against the MTP of a given block to determine if a new deployment has started or ended. This works fine for BIP 9 which uses time based timeouts, but not so much for BIP 8. In order to prep a future refactor that allows our version bits implementation to support both time and block based start/end times, this new abstraction has been introduced. --- chaincfg/deployment_time_frame.go | 181 ++++++++++++++++++++++++++++++ 1 file changed, 181 insertions(+) create mode 100644 chaincfg/deployment_time_frame.go diff --git a/chaincfg/deployment_time_frame.go b/chaincfg/deployment_time_frame.go new file mode 100644 index 0000000000..7178d9b26d --- /dev/null +++ b/chaincfg/deployment_time_frame.go @@ -0,0 +1,181 @@ +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. +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. +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) From 2b6370dfd73c010c693270d74fd49cbfde72a234 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Fri, 19 Mar 2021 17:16:26 -0700 Subject: [PATCH 272/419] chaincfg: use DeploymentStarter/DeploymentEnder instead of start/end times In this commit, we utilize the recently added ConsensusDeploymentStarter and ConsensusDeploymentEnder interfaces. Concrete implementations of this interface based on the median time past comparison are used now in the ConsensusDeployment struct instead of hard coded start/end times. Along the way, we had to switch to using the "zero time": time.Time{}, in place of 0 and math.MaxInt64 as comparison (After/Before) seems to be broken in the Go stdlib for times very far in the future. It appears Go isn't ready to handle the heat death of the universe. --- chaincfg/deployment_time_frame.go | 8 +- chaincfg/params.go | 173 ++++++++++++++++++++---------- rpcserver.go | 13 ++- 3 files changed, 134 insertions(+), 60 deletions(-) diff --git a/chaincfg/deployment_time_frame.go b/chaincfg/deployment_time_frame.go index 7178d9b26d..f26d429090 100644 --- a/chaincfg/deployment_time_frame.go +++ b/chaincfg/deployment_time_frame.go @@ -80,7 +80,9 @@ type MedianTimeDeploymentStarter struct { } // NewMedianTimeDeploymentStarter returns a new instance of a -// MedianTimeDeploymentStarter for a given start time. +// 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, @@ -134,7 +136,9 @@ type MedianTimeDeploymentEnder struct { } // NewMedianTimeDeploymentEnder returns a new instance of the -// MedianTimeDeploymentEnder anchored around the passed endTime. +// 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, diff --git a/chaincfg/params.go b/chaincfg/params.go index a6d8d3e551..468106d5e7 100644 --- a/chaincfg/params.go +++ b/chaincfg/params.go @@ -8,7 +8,6 @@ import ( "encoding/binary" "encoding/hex" "errors" - "math" "math/big" "strings" "time" @@ -95,13 +94,13 @@ 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 + // DeploymentStarter is used to determine if the given + // ConsensusDeployment has started or not. + DeploymentStarter ConsensusDeploymentStarter - // ExpireTime is the median block time after which the attempted - // deployment expires. - ExpireTime uint64 + // 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 @@ -320,19 +319,31 @@ 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 + ), }, 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. + ), }, }, @@ -396,19 +407,31 @@ 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 + ), }, 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. + ), }, }, @@ -490,19 +513,31 @@ 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 + ), }, 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. + ), }, }, @@ -570,19 +605,31 @@ 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 + ), }, 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. + ), }, }, @@ -665,24 +712,40 @@ func CustomSignetParams(challenge []byte, dnsSeeds []DNSSeed) 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 + ), }, DeploymentCSV: { - BitNumber: 29, - StartTime: 0, // Always available for vote - ExpireTime: math.MaxInt64, // Never expires + BitNumber: 29, + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Time{}, // Always available for vote + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Time{}, // Never expires + ), }, DeploymentSegwit: { - BitNumber: 29, - StartTime: 0, // Always available for vote - ExpireTime: math.MaxInt64, // Never expires. + BitNumber: 29, + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Time{}, // Always available for vote + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Time{}, // Never expires + ), }, DeploymentTaproot: { - BitNumber: 29, - StartTime: 0, // Always available for vote - ExpireTime: math.MaxInt64, // Never expires. + BitNumber: 29, + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Time{}, // Always available for vote + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Time{}, // Never expires + ), }, }, diff --git a/rpcserver.go b/rpcserver.go index 8a4ecaac8d..1dd0659677 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -31,6 +31,7 @@ import ( "github.com/btcsuite/btcd/blockchain/indexers" "github.com/btcsuite/btcd/btcec" "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/btcd/btcutil" "github.com/btcsuite/websocket" ) @@ -1289,11 +1289,18 @@ 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), + StartTime2: startTime, + Timeout: endTime, } } From 298d6165be603b0efcd9d4ec48508fd1e0fad3fa Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Fri, 19 Mar 2021 17:18:57 -0700 Subject: [PATCH 273/419] blockchain: update version bits logic to use HasStarted/HasEnded for deployments In this commit, we update our version bits logic to use the newly added HasStarted and HasEnded methods for consensus deployments. Along the way, wee modify the thresholdConditionChecker` interface to be based off the new chaincfg interfaces. In addition, we add a new method `PastMedianTime`, in order to allow the chain itself to be used as a `chaincfg.BlockClock`. This serves to make the logic more generic in order to support both block height and time based soft fork timeouts. --- blockchain/chain.go | 16 ++++++++++- blockchain/common_test.go | 18 +++++++++++-- blockchain/thresholdstate.go | 51 ++++++++++++++++++++++------------- blockchain/versionbits.go | 52 ++++++++++++++++++++---------------- 4 files changed, 93 insertions(+), 44 deletions(-) diff --git a/blockchain/chain.go b/blockchain/chain.go index 92bfb26876..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/btcd/btcutil" ) const ( @@ -1757,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/common_test.go b/blockchain/common_test.go index 8de699c416..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/btcd/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/thresholdstate.go b/blockchain/thresholdstate.go index 5da74a95af..6f3841bbe1 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. @@ -121,6 +122,27 @@ 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 +} + // 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 +172,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 } @@ -192,9 +210,7 @@ func (b *BlockChain) thresholdState(prevNode *blockNode, checker thresholdCondit 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() { + if checker.HasEnded(prevNode) { state = ThresholdFailed break } @@ -202,15 +218,14 @@ func (b *BlockChain) thresholdState(prevNode *blockNode, checker thresholdCondit // 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() { + if checker.HasStarted(prevNode) { 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() { + if checker.HasEnded(prevNode) { state = ThresholdFailed break } diff --git a/blockchain/versionbits.go b/blockchain/versionbits.go index 28fcde7b69..dbe4eb1d61 100644 --- a/blockchain/versionbits.go +++ b/blockchain/versionbits.go @@ -5,8 +5,6 @@ package blockchain import ( - "math" - "github.com/btcsuite/btcd/chaincfg" ) @@ -42,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 @@ -123,27 +120,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 From 0556c7084f37418e1223b6e9e2b79a0c86591c95 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Tue, 11 Jan 2022 19:58:44 -0800 Subject: [PATCH 274/419] build: don't run the integration tests w/ -race --- Makefile | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 5db0871ad1..6dc6d9471b 100644 --- a/Makefile +++ b/Makefile @@ -15,7 +15,8 @@ DEPGET := cd /tmp && GO111MODULE=on go get -v GOBUILD := GO111MODULE=on go build -v GOINSTALL := GO111MODULE=on go install -v DEV_TAGS := rpctest -GOTEST := GO111MODULE=on go test -v -tags=$(DEV_TAGS) +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/*") @@ -78,9 +79,9 @@ check: unit unit: @$(call print, "Running unit tests.") - $(GOTEST) ./... -test.timeout=20m - cd btcutil; $(GOTEST) ./... -test.timeout=20m - cd btcutil/psbt; $(GOTEST) ./... -test.timeout=20m + $(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.") From 38737a8ae35cce8f63f2d655c8f3bf02de38036a Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Thu, 13 Jan 2022 17:29:54 -0800 Subject: [PATCH 275/419] chainparams: add new DeploymentTestDummyMinActivation In this commit, we add a new "dummy" deployment that adds the new params used to activate taproot. We chose to add a new deployment as unlike the bitcoind codebase, we don't currently "bury" soft forks that have happened in the past (hard code an activation height). The old taproot deployment has been removed as with the way the array works, a deployment needs to be defined for _all_ networks. --- chaincfg/params.go | 78 ++++++++++++++++++++++++++++++++++++++++------ rpcserver.go | 6 ++-- 2 files changed, 72 insertions(+), 12 deletions(-) diff --git a/chaincfg/params.go b/chaincfg/params.go index 468106d5e7..c8ddc85d69 100644 --- a/chaincfg/params.go +++ b/chaincfg/params.go @@ -94,6 +94,19 @@ type ConsensusDeployment struct { // this particular soft-fork deployment refers to. BitNumber uint8 + // 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 @@ -111,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. @@ -121,11 +140,6 @@ 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. @@ -327,6 +341,17 @@ var MainNetParams = Params{ 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, DeploymentStarter: NewMedianTimeDeploymentStarter( @@ -415,6 +440,17 @@ var RegressionNetParams = Params{ 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, DeploymentStarter: NewMedianTimeDeploymentStarter( @@ -521,6 +557,17 @@ var TestNet3Params = Params{ 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, DeploymentStarter: NewMedianTimeDeploymentStarter( @@ -613,6 +660,17 @@ var SimNetParams = Params{ 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, DeploymentStarter: NewMedianTimeDeploymentStarter( @@ -720,8 +778,10 @@ func CustomSignetParams(challenge []byte, dnsSeeds []DNSSeed) Params { time.Unix(1230767999, 0), // December 31, 2008 UTC ), }, - DeploymentCSV: { - BitNumber: 29, + 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 ), @@ -729,7 +789,7 @@ func CustomSignetParams(challenge []byte, dnsSeeds []DNSSeed) Params { time.Time{}, // Never expires ), }, - DeploymentSegwit: { + DeploymentCSV: { BitNumber: 29, DeploymentStarter: NewMedianTimeDeploymentStarter( time.Time{}, // Always available for vote @@ -738,7 +798,7 @@ func CustomSignetParams(challenge []byte, dnsSeeds []DNSSeed) Params { time.Time{}, // Never expires ), }, - DeploymentTaproot: { + DeploymentSegwit: { BitNumber: 29, DeploymentStarter: NewMedianTimeDeploymentStarter( time.Time{}, // Always available for vote diff --git a/rpcserver.go b/rpcserver.go index 1dd0659677..8c4b765266 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -1250,15 +1250,15 @@ 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, From c6b66ee79c77f3ca41de8844de14ade81d0a1b19 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Thu, 13 Jan 2022 17:42:07 -0800 Subject: [PATCH 276/419] blockchain+integration: add support for min activation height and custom thresholds In this commit, we extend the existing version bits state machine to add support for the new minimum activation height and custom block threshold for activation. We then extend the existing BIP 9 tests (tho this isn't really BIP 9 anymore...) to exercise the new min activation height logic. --- blockchain/thresholdstate.go | 68 +++++++++++++++++++++++++++--------- blockchain/versionbits.go | 63 +++++++++++++++++++++++++++++++++ integration/bip0009_test.go | 44 +++++++++++++++++++++-- 3 files changed, 157 insertions(+), 18 deletions(-) diff --git a/blockchain/thresholdstate.go b/blockchain/thresholdstate.go index 6f3841bbe1..29b62e468f 100644 --- a/blockchain/thresholdstate.go +++ b/blockchain/thresholdstate.go @@ -72,8 +72,8 @@ type thresholdConditionChecker interface { // consensus is eligible for deployment. HasStarted(*blockNode) bool - // HasEnded returns true if the target consensus rule change has expired - // or timed out. + // 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 @@ -84,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) } @@ -208,9 +221,11 @@ func (b *BlockChain) thresholdState(prevNode *blockNode, checker thresholdCondit switch state { case ThresholdDefined: - // The deployment of the rule change fails if it expires - // before it is accepted and locked in. - if checker.HasEnded(prevNode) { + // 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) { state = ThresholdFailed break } @@ -223,9 +238,10 @@ func (b *BlockChain) thresholdState(prevNode *blockNode, checker thresholdCondit } case ThresholdStarted: - // The deployment of the rule change fails if it expires - // before it is accepted and locked in. - if checker.HasEnded(prevNode) { + // 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) { state = ThresholdFailed break } @@ -248,17 +264,37 @@ func (b *BlockChain) thresholdState(prevNode *blockNode, checker thresholdCondit 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. - if count >= checker.RuleChangeActivationThreshold() { + case count >= checker.RuleChangeActivationThreshold(): 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): + state = ThresholdFailed } case ThresholdLockedIn: - // The new rule becomes active when its previous state - // was locked in. - state = ThresholdActive + // 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) { + state = ThresholdLockedIn + + } else { + // 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. diff --git a/blockchain/versionbits.go b/blockchain/versionbits.go index dbe4eb1d61..0d1f898c0a 100644 --- a/blockchain/versionbits.go +++ b/blockchain/versionbits.go @@ -108,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. @@ -160,6 +186,12 @@ func (c deploymentChecker) HasEnded(blkNode *blockNode) bool { // // This is part of the thresholdConditionChecker interface implementation. func (c deploymentChecker) RuleChangeActivationThreshold() uint32 { + // Some deployments like taproot used a custom activation threshold + // that ovverides the network level threshold. + if c.deployment.CustomActivationThreshold != 0 { + return c.deployment.CustomActivationThreshold + } + return c.chain.chainParams.RuleChangeActivationThreshold } @@ -174,6 +206,37 @@ 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 +} + // Condition returns true when the specific bit defined by the deployment // associated with the checker is set. // diff --git a/integration/bip0009_test.go b/integration/bip0009_test.go index 9bdec34fbb..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 @@ -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< Date: Sun, 23 Jan 2022 19:06:21 -0800 Subject: [PATCH 277/419] blockchain: refactor new thresholdState method, test BIP9 transitions In this commit, we extract the BIP 9 state transition logic from the thresholdState method into a new thresholdStateTransition function that allows us to test all the defined state transitions, including the modified "speedy trial" logic. --- blockchain/thresholdstate.go | 182 ++++++++++++++++------------- blockchain/thresholdstate_test.go | 184 ++++++++++++++++++++++++++++++ 2 files changed, 285 insertions(+), 81 deletions(-) diff --git a/blockchain/thresholdstate.go b/blockchain/thresholdstate.go index 29b62e468f..b96c9bd3db 100644 --- a/blockchain/thresholdstate.go +++ b/blockchain/thresholdstate.go @@ -156,6 +156,99 @@ func (b *BlockChain) PastMedianTime(blockHeader *wire.BlockHeader) (time.Time, e 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) { + 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) { + 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) { + 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(): + 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): + state = ThresholdFailed + } + + 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) { + state = ThresholdLockedIn + } else { + // 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. @@ -216,90 +309,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. However - // speed deployments can only transition to failed - // after a confirmation window. - if !checker.IsSpeedy() && checker.HasEnded(prevNode) { - 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) { - 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) { - 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(): - 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): - state = ThresholdFailed - } - - 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) { - state = ThresholdLockedIn - - } else { - // 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: + // 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 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) + } + } +} From 0b245cca4f4c0d091a4466a77b9de70523dc1af0 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Thu, 13 Jan 2022 17:51:30 -0800 Subject: [PATCH 278/419] btcjson+rpc: add min activation height to soft fork RPC response --- btcjson/chainsvrresults.go | 15 ++++++++------- rpcserver.go | 9 +++++---- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/btcjson/chainsvrresults.go b/btcjson/chainsvrresults.go index 8062d9d990..7b771b12f7 100644 --- a/btcjson/chainsvrresults.go +++ b/btcjson/chainsvrresults.go @@ -11,8 +11,8 @@ import ( "github.com/btcsuite/btcd/chaincfg/chainhash" - "github.com/btcsuite/btcd/wire" "github.com/btcsuite/btcd/btcutil" + "github.com/btcsuite/btcd/wire" ) // GetBlockHeaderVerboseResult models the data from the getblockheader command when @@ -172,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. diff --git a/rpcserver.go b/rpcserver.go index 8c4b765266..e000af5a4f 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -1297,10 +1297,11 @@ func handleGetBlockChainInfo(s *rpcServer, cmd interface{}, closeChan <-chan str endTime = ender.EndTime().Unix() } chainInfo.SoftForks.Bip9SoftForks[forkName] = &btcjson.Bip9SoftForkDescription{ - Status: strings.ToLower(statusString), - Bit: deploymentDetails.BitNumber, - StartTime2: startTime, - Timeout: endTime, + Status: strings.ToLower(statusString), + Bit: deploymentDetails.BitNumber, + StartTime2: startTime, + Timeout: endTime, + MinActivationHeight: int32(deploymentDetails.MinActivationHeight), } } From 87e8fe92c9328f971044389ed768ea3cc5c6b3d5 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Thu, 18 Nov 2021 18:25:56 -0800 Subject: [PATCH 279/419] btcec: convert package into go module, alias to dcrec In this commit, we turn the package into a new Go module (version 2), and then port over the current set of types and functions to mainly alias to the more optimized and maintained dcrec variant. Taking a look at the benchmarks, most operations other than normalization (which IIRC is a bit slower now due to constant time fixes) enjoy some nice speeds up: ``` benchcmp is deprecated in favor of benchstat: https://pkg.go.dev/golang.org/x/perf/cmd/benchstat benchmark old ns/op new ns/op delta BenchmarkAddJacobian-8 464 328 -29.20% BenchmarkAddJacobianNotZOne-8 1138 372 -67.27% BenchmarkScalarBaseMult-8 47336 31531 -33.39% BenchmarkScalarBaseMultLarge-8 42465 32057 -24.51% BenchmarkScalarMult-8 123355 117579 -4.68% BenchmarkNAF-8 582 168 -71.12% BenchmarkSigVerify-8 175414 120794 -31.14% BenchmarkFieldNormalize-8 23.8 24.4 +2.39% BenchmarkParseCompressedPubKey-8 24282 10907 -55.08% ``` --- btcec/README.md | 36 +- btcec/bench_test.go | 162 +++-- btcec/btcec.go | 961 +-------------------------- btcec/btcec_test.go | 245 +++---- btcec/ciphering.go | 204 +----- btcec/ciphering_test.go | 147 +---- btcec/curve.go | 60 ++ btcec/error.go | 16 + btcec/example_test.go | 94 +-- btcec/field.go | 1395 ++------------------------------------- btcec/field_test.go | 1048 +++++++++++++---------------- btcec/genprecomps.go | 63 -- btcec/gensecp256k1.go | 203 ------ btcec/go.mod | 9 + btcec/go.sum | 49 ++ btcec/modnscalar.go | 42 ++ btcec/precompute.go | 67 -- btcec/privkey.go | 56 +- btcec/privkey_test.go | 10 +- btcec/pubkey.go | 173 +---- btcec/pubkey_test.go | 6 +- btcec/secp256k1.go | 10 - btcec/signature.go | 493 +++----------- btcec/signature_test.go | 130 ++-- 24 files changed, 1125 insertions(+), 4554 deletions(-) create mode 100644 btcec/curve.go create mode 100644 btcec/error.go delete mode 100644 btcec/genprecomps.go delete mode 100644 btcec/gensecp256k1.go create mode 100644 btcec/go.mod create mode 100644 btcec/go.sum create mode 100644 btcec/modnscalar.go delete mode 100644 btcec/precompute.go delete mode 100644 btcec/secp256k1.go diff --git a/btcec/README.md b/btcec/README.md index a6dd2cf285..cbf63dd045 100644 --- a/btcec/README.md +++ b/btcec/README.md @@ -3,7 +3,7 @@ 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://pkg.go.dev/github.com/btcsuite/btcd/btcec?status.png)](https://pkg.go.dev/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](https://pkg.go.dev/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](https://pkg.go.dev/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](https://pkg.go.dev/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](https://pkg.go.dev/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..475a4afd6e 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,12 +148,20 @@ 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) + } + var scalar ModNScalar + if overflow := scalar.SetByteSlice(b); overflow { + panic("hex in source file overflows mod N scalar: " + s) } + return &scalar } // BenchmarkSigVerify benchmarks how long it takes the secp256k1 curve to @@ -91,27 +170,26 @@ func BenchmarkSigVerify(b *testing.B) { b.StopTimer() // Randomly generated keypair. // Private key: 9e0699c91ca1e3b7e3c9ba71eb71c89890872be97576010fe593fbf3fd57e66d - pubKey := PublicKey{ - Curve: S256(), - X: fromHex("d2e670a19c6d753d1a6d8b20bd045df8a08fb162cf508956c31268c6d81ffdab"), - Y: fromHex("ab65528eefbb8057aa85d597258a3fbd481a24633bc9b47a9aa045c91371de52"), - } + pubKey := NewPublicKey( + hexToFieldVal("d2e670a19c6d753d1a6d8b20bd045df8a08fb162cf508956c31268c6d81ffdab"), + hexToFieldVal("ab65528eefbb8057aa85d597258a3fbd481a24633bc9b47a9aa045c91371de52"), + ) // Double sha256 of []byte{0x01, 0x02, 0x03, 0x04} msgHash := fromHex("8de472e2399610baaa7f84840547cd409434e31f5d3bd71e4d947f283874f9c0") - sig := Signature{ - R: fromHex("fef45d2892953aa5bbcdb057b5e98b208f1617a7498af7eb765574e29b5d9c2c"), - S: fromHex("d47563f52aac6b04b55de236b7c515eb9311757db01e02cff079c3ca6efb063f"), - } + sig := NewSignature( + hexToModNScalar("fef45d2892953aa5bbcdb057b5e98b208f1617a7498af7eb765574e29b5d9c2c"), + hexToModNScalar("d47563f52aac6b04b55de236b7c515eb9311757db01e02cff079c3ca6efb063f"), + ) - if !sig.Verify(msgHash.Bytes(), &pubKey) { + 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) + sig.Verify(msgHash.Bytes(), pubKey) } } @@ -119,7 +197,7 @@ func BenchmarkSigVerify(b *testing.B) { // 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 +216,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 a2e20f4b31..efde8d6a81 100644 --- a/btcec/btcec.go +++ b/btcec/btcec.go @@ -20,959 +20,22 @@ 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) -} - -// 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 - } +// KoblitzCurve provides an implementation for secp256k1 that fits the ECC +// Curve interface from crypto/elliptic. +type KoblitzCurve = secp.KoblitzCurve - // 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 -} - -var initonce sync.Once -var secp256k1 KoblitzCurve - -func initAll() { - initS256() -} - -// 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 +// S256 returns a Curve which implements secp256k1. +func S256() *KoblitzCurve { + return secp.S256() } -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 - // Curve name taken from https://safecurves.cr.yp.to/. - secp256k1.Name = "secp256k1" - 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()) +// CurveParams contains the parameters for the secp256k1 curve. +type CurveParams = secp.CurveParams - // Provided for convenience since this gets computed repeatedly. - secp256k1.byteSize = secp256k1.BitSize / 8 - - // 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 +// Params returns the secp256k1 curve parameters for convenience. +func Params() *CurveParams { + return secp.Params() } diff --git a/btcec/btcec_test.go b/btcec/btcec_test.go index 42a69037bc..5fdd638f22 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) } } @@ -793,15 +852,11 @@ func TestKeyGeneration(t *testing.T) { } func testSignAndVerify(t *testing.T, c *KoblitzCurve, tag string) { - priv, _ := NewPrivateKey(c) + priv, _ := NewPrivateKey() pub := priv.PubKey() hashed := []byte("testing") - sig, err := priv.Sign(hashed) - if err != nil { - t.Errorf("%s: error signing: %s", tag, err) - return - } + sig := Sign(priv, hashed) if !sig.Verify(hashed, pub) { t.Errorf("%s: Verify failed", tag) @@ -817,73 +872,41 @@ func TestSignAndVerify(t *testing.T) { testSignAndVerify(t, S256(), "S256") } -func TestNAF(t *testing.T) { - tests := []string{ - "6df2b5d30854069ccdec40ae022f5c948936324a4e9ebed8eb82cfd5a6b6d766", - "b776e53fb55f6b006a270d42d64ec2b1", - "d6cc32c857f1174b604eefc544f0c7f7", - "45c53aa1bb56fcd68c011e2dad6758e4", - "a2e79d200f27f2360fba57619936159b", +// 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) } - 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) - } + if len(neg) > len(pos) { + return fmt.Errorf("negative has len %d > pos len %d", len(neg), + len(pos)) } -} -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) - } + // 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 } + + // 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) + } + + 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..b86c591374 --- /dev/null +++ b/btcec/curve.go @@ -0,0 +1,60 @@ +package btcec + +import ( + 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 + +// 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) +} diff --git a/btcec/error.go b/btcec/error.go new file mode 100644 index 0000000000..39c9172bc3 --- /dev/null +++ b/btcec/error.go @@ -0,0 +1,16 @@ +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 diff --git a/btcec/example_test.go b/btcec/example_test.go index ca51ee87cc..b73f102c32 100644 --- a/btcec/example_test.go +++ b/btcec/example_test.go @@ -8,7 +8,7 @@ import ( "encoding/hex" "fmt" - "github.com/btcsuite/btcd/btcec" + "github.com/btcsuite/btcd/btcec/v2" "github.com/btcsuite/btcd/chaincfg/chainhash" ) @@ -22,16 +22,12 @@ func Example_signMessage() { fmt.Println(err) return } - privKey, pubKey := btcec.PrivKeyFromBytes(btcec.S256(), pkBytes) + privKey, pubKey := btcec.PrivKeyFromBytes(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 - } + signature := btcec.Sign(privKey, messageHash) // Serialize and display the signature. fmt.Printf("Serialized Signature: %x\n", signature.Serialize()) @@ -56,7 +52,7 @@ func Example_verifySignature() { fmt.Println(err) return } - pubKey, err := btcec.ParsePubKey(pubKeyBytes, btcec.S256()) + pubKey, err := btcec.ParsePubKey(pubKeyBytes) if err != nil { fmt.Println(err) return @@ -71,7 +67,7 @@ func Example_verifySignature() { fmt.Println(err) return } - signature, err := btcec.ParseSignature(sigBytes, btcec.S256()) + signature, err := btcec.ParseSignature(sigBytes) if err != nil { fmt.Println(err) return @@ -86,83 +82,3 @@ func Example_verifySignature() { // 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 98105ed8e4..fef6f345da 100644 --- a/btcec/field.go +++ b/btcec/field.go @@ -1,1356 +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 interprets the provided slice as a 256-bit big-endian unsigned -// integer (meaning it is truncated to the first 32 bytes), packs it into the -// internal field value representation, and returns the updated field value. -// -// Note that since passing a slice with more than 32 bytes is truncated, it is -// possible that the truncated value is less than the field prime. It is up to -// the caller to decide whether it needs to provide numbers of the appropriate -// size or if it is acceptable to use this function with the described -// truncation behavior. -// -// 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 - if len(b) > 32 { - b = b[:32] - } - copy(b32[32-len(b):], b) - 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 4226ba55f9..6ade97a1eb 100644 --- a/btcec/field_test.go +++ b/btcec/field_test.go @@ -6,70 +6,30 @@ package btcec import ( - "crypto/rand" + "math/rand" + "encoding/hex" - "fmt" - "reflect" "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()) } } @@ -147,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 } @@ -313,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 - } + }*/ } } @@ -344,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 } @@ -377,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 } @@ -425,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 } } @@ -813,296 +846,127 @@ 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() -} - -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()), - }) - } - - // 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() - } - - // 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() +// 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() - // 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()), - }) + var buf [32]byte + if _, err := rng.Read(buf[:]); err != nil { + t.Fatalf("failed to read random: %v", err) } - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - testSqrt(t, test) - }) - } + // Create and return both a big integer and a field value. + var fv FieldVal + fv.SetBytes(&buf) + return &fv } -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) - } - - // 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) - } - } -} - -// TestFieldSetBytes ensures that setting a field value to a 256-bit big-endian -// unsigned integer via both the slice and array methods works as expected for -// edge cases. Random cases are tested via the various other tests. -func TestFieldSetBytes(t *testing.T) { +// 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 test value - expected [10]uint32 // expected raw ints + 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: "zero", - in: "00", - expected: [10]uint32{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + name: "secp256k1 prime (as 0 in and out)", + in: "0", + valid: true, + want: "0", }, { - name: "field prime", - in: "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", - expected: [10]uint32{ - 0x03fffc2f, 0x03ffffbf, 0x03ffffff, 0x03ffffff, 0x03ffffff, - 0x03ffffff, 0x03ffffff, 0x03ffffff, 0x03ffffff, 0x003fffff, - }, + name: "secp256k1 prime (direct val with 0 out)", + in: "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + valid: true, + want: "0", }, { - name: "field prime - 1", - in: "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e", - expected: [10]uint32{ - 0x03fffc2e, 0x03ffffbf, 0x03ffffff, 0x03ffffff, 0x03ffffff, - 0x03ffffff, 0x03ffffff, 0x03ffffff, 0x03ffffff, 0x003fffff, - }, + name: "secp256k1 prime (as 0 in direct val out)", + in: "0", + valid: true, + want: "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", }, { - name: "field prime + 1 (overflow in word zero)", - in: "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc30", - expected: [10]uint32{ - 0x03fffc30, 0x03ffffbf, 0x03ffffff, 0x03ffffff, 0x03ffffff, - 0x03ffffff, 0x03ffffff, 0x03ffffff, 0x03ffffff, 0x003fffff, - }, - }, { - name: "field prime first 32 bits", - in: "fffffc2f", - expected: [10]uint32{ - 0x03fffc2f, 0x00000003f, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - }, - }, { - name: "field prime word zero", - in: "03fffc2f", - expected: [10]uint32{ - 0x03fffc2f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - }, + name: "secp256k1 prime-1", + in: "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e", + valid: false, + want: "0000000000000000000000000000000000000000000000000000000000000001", }, { - name: "field prime first 64 bits", - in: "fffffffefffffc2f", - expected: [10]uint32{ - 0x03fffc2f, 0x03ffffbf, 0x00000fff, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - }, + name: "secp256k1 prime-2", + in: "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2d", + valid: false, + want: "210c790573632359b1edb4302c117d8a132654692c3feeb7de3a86ac3f3b53f7", }, { - name: "field prime word zero and one", - in: "0ffffefffffc2f", - expected: [10]uint32{ - 0x03fffc2f, 0x03ffffbf, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - }, + name: "(secp256k1 prime-2)^2", + in: "0000000000000000000000000000000000000000000000000000000000000004", + valid: true, + want: "0000000000000000000000000000000000000000000000000000000000000002", }, { - name: "field prime first 96 bits", - in: "fffffffffffffffefffffc2f", - expected: [10]uint32{ - 0x03fffc2f, 0x03ffffbf, 0x03ffffff, 0x0003ffff, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - }, + name: "value 1", + in: "0000000000000000000000000000000000000000000000000000000000000001", + valid: true, + want: "0000000000000000000000000000000000000000000000000000000000000001", }, { - name: "field prime word zero, one, and two", - in: "3ffffffffffefffffc2f", - expected: [10]uint32{ - 0x03fffc2f, 0x03ffffbf, 0x03ffffff, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - }, + name: "value 2", + in: "0000000000000000000000000000000000000000000000000000000000000002", + valid: true, + want: "210c790573632359b1edb4302c117d8a132654692c3feeb7de3a86ac3f3b53f7", }, { - name: "overflow in word one (prime + 1<<26)", - in: "ffffffffffffffffffffffffffffffffffffffffffffffffffffffff03fffc2f", - expected: [10]uint32{ - 0x03fffc2f, 0x03ffffc0, 0x03ffffff, 0x03ffffff, 0x03ffffff, - 0x03ffffff, 0x03ffffff, 0x03ffffff, 0x03ffffff, 0x003fffff, - }, + name: "random sampling 1", + in: "16fb970147a9acc73654d4be233cc48b875ce20a2122d24f073d29bd28805aca", + valid: false, + want: "6a27dcfca440cf7930a967be533b9620e397f122787c53958aaa7da7ad3d89a4", }, { - name: "(field prime - 1) * 2 NOT mod P, truncated >32 bytes", - in: "01fffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff85c", - expected: [10]uint32{ - 0x01fffff8, 0x03ffffff, 0x03ffffff, 0x03ffffff, 0x03ffffff, - 0x03ffffff, 0x03ffffff, 0x03ffffff, 0x03ffffff, 0x00007fff, - }, + name: "square of random sampling 1", + in: "f4a8c3738ace0a1c3abf77737ae737f07687b5e24c07a643398298bd96893a18", + valid: true, + want: "e90468feb8565338c9ab2b41dcc33b7478a31df5dedd2db0f8c2d641d77fa165", }, { - name: "2^256 - 1", - in: "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - expected: [10]uint32{ - 0x03ffffff, 0x03ffffff, 0x03ffffff, 0x03ffffff, 0x03ffffff, - 0x03ffffff, 0x03ffffff, 0x03ffffff, 0x03ffffff, 0x003fffff, - }, + name: "random sampling 2", + in: "69d1323ce9f1f7b3bd3c7320b0d6311408e30281e273e39a0d8c7ee1c8257919", + valid: true, + want: "61f4a7348274a52d75dfe176b8e3aaff61c1c833b6678260ba73def0fb2ad148", }, { - name: "alternating bits", - in: "a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5", - expected: [10]uint32{ - 0x01a5a5a5, 0x01696969, 0x025a5a5a, 0x02969696, 0x01a5a5a5, - 0x01696969, 0x025a5a5a, 0x02969696, 0x01a5a5a5, 0x00296969, - }, + name: "random sampling 3", + in: "e0debf988ae098ecda07d0b57713e97c6d213db19753e8c95aa12a2fc1cc5272", + valid: false, + want: "6e1cc9c311d33d901670135244f994b1ea39501f38002269b34ce231750cfbac", }, { - name: "alternating bits 2", - in: "5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a", - expected: [10]uint32{ - 0x025a5a5a, 0x02969696, 0x01a5a5a5, 0x01696969, 0x025a5a5a, - 0x02969696, 0x01a5a5a5, 0x01696969, 0x025a5a5a, 0x00169696, - }, + name: "random sampling 4", + in: "dcd394f91f74c2ba16aad74a22bb0ed47fe857774b8f2d6c09e28bfb14642878", + valid: true, + want: "72b22fe6f173f8bcb21898806142ed4c05428601256eafce5d36c1b08fb82bab", }} for _, test := range tests { - inBytes := hexToBytes(test.in) - - // Ensure setting the bytes via the slice method works as expected. - var f fieldVal - f.SetByteSlice(inBytes) - if !reflect.DeepEqual(f.n, test.expected) { - t.Errorf("%s: unexpected result\ngot: %x\nwant: %x", test.name, f.n, - test.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 } - // Ensure setting the bytes via the array method works as expected. - var f2 fieldVal - var b32 [32]byte - truncatedInBytes := inBytes - if len(truncatedInBytes) > 32 { - truncatedInBytes = truncatedInBytes[:32] - } - copy(b32[32-len(truncatedInBytes):], truncatedInBytes) - f2.SetBytes(&b32) - if !reflect.DeepEqual(f2.n, test.expected) { - t.Errorf("%s: unexpected result\ngot: %x\nwant: %x", test.name, - f2.n, test.expected) + // 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 } } 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..ce5eb3321e --- /dev/null +++ b/btcec/go.mod @@ -0,0 +1,9 @@ +module github.com/btcsuite/btcd/btcec/v2 + +go 1.17 + +require ( + github.com/btcsuite/btcd v0.22.0-beta + github.com/davecgh/go-spew v1.1.1 + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 +) diff --git a/btcec/go.sum b/btcec/go.sum new file mode 100644 index 0000000000..a0f9c5b8fa --- /dev/null +++ b/btcec/go.sum @@ -0,0 +1,49 @@ +github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= +github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= +github.com/btcsuite/btcd v0.22.0-beta h1:LTDpDKUM5EeOFBPM8IXpinEcmZ6FWfNZbE3lfrfdnWo= +github.com/btcsuite/btcd v0.22.0-beta/go.mod h1:9n5ntfhhHQBIhUvlhDvD3Qg6fRUj4jkN0VB8L8svzOA= +github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= +github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= +github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= +github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= +github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= +github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= +github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= +github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= +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 v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +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/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/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +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/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +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/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/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +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.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/btcec/modnscalar.go b/btcec/modnscalar.go new file mode 100644 index 0000000000..eb1b8f05f4 --- /dev/null +++ b/btcec/modnscalar.go @@ -0,0 +1,42 @@ +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..6f13990b1f 100644 --- a/btcec/privkey.go +++ b/btcec/privkey.go @@ -5,69 +5,27 @@ 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) -} - -// 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) +func NewPrivateKey() (*PrivateKey, error) { + return secp.GeneratePrivateKey() } // 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 index a2918dc191..71a8bceaa1 100644 --- a/btcec/privkey_test.go +++ b/btcec/privkey_test.go @@ -26,20 +26,16 @@ func TestPrivKeys(t *testing.T) { } for _, test := range tests { - priv, pub := PrivKeyFromBytes(S256(), test.key) + priv, pub := PrivKeyFromBytes(test.key) - _, err := ParsePubKey(pub.SerializeUncompressed(), S256()) + _, err := 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, err := priv.Sign(hash) - if err != nil { - t.Errorf("%s could not sign: %v", test.name, err) - continue - } + sig := Sign(priv, hash) if !sig.Verify(hash, pub) { t.Errorf("%s could not verify: %v", test.name, err) 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 68b61de10b..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", @@ -236,7 +236,7 @@ func TestPubKeys(t *testing.T) { case pubkeyCompressed: pkStr = pk.SerializeCompressed() case pubkeyHybrid: - pkStr = 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/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 index 8a8f8301b7..ddeb4b052f 100644 --- a/btcec/signature.go +++ b/btcec/signature.go @@ -5,15 +5,11 @@ package btcec import ( - "bytes" - "crypto/ecdsa" - "crypto/elliptic" - "crypto/hmac" - "crypto/sha256" "errors" "fmt" - "hash" "math/big" + + secp_ecdsa "github.com/decred/dcrd/dcrec/secp256k1/v4/ecdsa" ) // Errors returned by canonicalPadding. @@ -23,9 +19,11 @@ var ( ) // Signature is a type representing an ecdsa signature. -type Signature struct { - R *big.Int - S *big.Int +type Signature = secp_ecdsa.Signature + +// NewSignature instantiates a new signature given some r and s values. +func NewSignature(r, s *ModNScalar) *Signature { + return secp_ecdsa.NewSignature(r, s) } var ( @@ -37,60 +35,27 @@ var ( 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) { +// 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 @@ -101,8 +66,6 @@ func parseSig(sigStr []byte, curve elliptic.Curve, der bool) (*Signature, error) // 0x30 <0x02> 0x2 // . - signature := &Signature{} - if len(sigStr) < MinSigLen { return nil, errors.New("malformed signature: too short") } @@ -150,7 +113,28 @@ func parseSig(sigStr []byte, curve elliptic.Curve, der bool) (*Signature, error) return nil, errors.New("signature R is excessively padded") } } - signature.R = new(big.Int).SetBytes(rBytes) + + // 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 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 { @@ -176,192 +160,51 @@ func parseSig(sigStr []byte, curve elliptic.Curve, der bool) (*Signature, error) 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)) + // Strip leading zeroes from S. + for len(sBytes) > 0 && sBytes[0] == 0x00 { + sBytes = sBytes[1:] } - // 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") + // 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 ModNScalar + if len(sBytes) > 32 { + str := "invalid signature: S is larger than 256 bits" + return nil, errors.New(str) } - if signature.S.Sign() != 1 { - return nil, errors.New("signature S isn't 1 or more") + if overflow := s.SetByteSlice(sBytes); overflow { + str := "invalid signature: S >= group order" + return nil, errors.New(str) } - if signature.R.Cmp(curve.Params().N) >= 0 { - return nil, errors.New("signature R is >= curve.N") + if s.IsZero() { + str := "invalid signature: S is 0" + return nil, errors.New(str) } - if signature.S.Cmp(curve.Params().N) >= 0 { - return nil, errors.New("signature S is >= curve.N") + 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 signature, nil + 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, curve elliptic.Curve) (*Signature, error) { - return parseSig(sigStr, curve, false) +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, 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) { - // Parse and validate the R and S signature components. - // - // Fail if r and s are not in [1, N-1]. - if sig.R.Cmp(curve.Params().N) != -1 { - return nil, errors.New("signature R is >= curve order") - } - - if sig.R.Sign() == 0 { - return nil, errors.New("signature R is 0") - } - - if sig.S.Cmp(curve.Params().N) != -1 { - return nil, errors.New("signature S is >= curve order") - } - - if sig.S.Sign() == 0 { - return nil, errors.New("signature S is 0") - } - - // 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) - - if Qx.Sign() == 0 && Qy.Sign() == 0 { - return nil, errors.New("point (Qx, Qy) equals the point at infinity") - } - - return &PublicKey{ - Curve: curve, - X: Qx, - Y: Qy, - }, nil +func ParseDERSignature(sigStr []byte) (*Signature, error) { + return parseSig(sigStr, true) } // SignCompact produces a compact signature of the data in hash with the given @@ -371,193 +214,25 @@ func recoverKeyFromSignature(curve *KoblitzCurve, sig *Signature, msg []byte, // 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 - } +func SignCompact(key *PrivateKey, hash []byte, + isCompressedKey bool) ([]byte, error) { - // 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") + 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(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 +func RecoverCompact(signature, hash []byte) (*PublicKey, bool, error) { + return secp_ecdsa.RecoverCompact(signature, hash) } -// 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) +// 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 *PrivateKey, hash []byte) *Signature { + return secp_ecdsa.Sign(key, hash) } diff --git a/btcec/signature_test.go b/btcec/signature_test.go index b58d186775..74ea374784 100644 --- a/btcec/signature_test.go +++ b/btcec/signature_test.go @@ -10,7 +10,6 @@ import ( "crypto/sha256" "encoding/hex" "fmt" - "math/big" "reflect" "testing" ) @@ -337,9 +336,9 @@ 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 { @@ -368,10 +367,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 +387,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 +443,7 @@ func TestSignatureSerialize(t *testing.T) { }, { "zero signature", - &Signature{ - R: big.NewInt(0), - S: big.NewInt(0), - }, + NewSignature(&ModNScalar{}, &ModNScalar{}), []byte{0x30, 0x06, 0x02, 0x01, 0x00, 0x02, 0x01, 0x00}, }, } @@ -464,23 +460,24 @@ func TestSignatureSerialize(t *testing.T) { func testSignCompact(t *testing.T, tag string, curve *KoblitzCurve, data []byte, isCompressed bool) { - priv, _ := NewPrivateKey(curve) + priv, _ := 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 { @@ -497,14 +494,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 { @@ -547,13 +545,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("point (Qx, Qy) equals the point at infinity"), + err: fmt.Errorf("recovered pubkey is the point at infinity"), }, { // Low R and S values. @@ -567,7 +565,7 @@ var recoveryTests = []struct { // Test case contributed by Ethereum Swarm: GH-1651 msg: "3060d2c77c1e192d62ad712fb400e04e6f779914a6876328ff3b213fa85d2012", sig: "65000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000037a3", - err: fmt.Errorf("signature R is 0"), + err: fmt.Errorf("invalid compact signature recovery code"), }, { // Zero R value @@ -581,7 +579,7 @@ var recoveryTests = []struct { // R = N (curve order of secp256k1) msg: "2bcebac60d8a78e520ae81c2ad586792df495ed429bd730dcd897b301932d054", sig: "65fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036414100000000000000000000000000000000000000000000000000000000000037a3", - err: fmt.Errorf("signature R is >= curve order"), + err: fmt.Errorf("invalid compact signature recovery code"), }, { // Zero S value @@ -605,7 +603,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) { @@ -622,7 +620,7 @@ func TestRecoverCompact(t *testing.T) { } // Otherwise, ensure the correct public key was recovered. - exPub, _ := ParsePubKey(decodeHex(test.pub), S256()) + exPub, _ := ParsePubKey(decodeHex(test.pub)) if !exPub.IsEqual(pub) { t.Errorf("unexpected recovered public key #%d: "+ "want %v, got %v", i, exPub, pub) @@ -681,13 +679,13 @@ func TestRFC6979(t *testing.T) { } for i, test := range tests { - privKey, _ := PrivKeyFromBytes(S256(), decodeHex(test.key)) + privKey, _ := 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 := 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) @@ -695,12 +693,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) { @@ -713,14 +707,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 "+ From eee3c3b33760da307d3d9d77a8ed4c2778ea57eb Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Thu, 18 Nov 2021 18:43:53 -0800 Subject: [PATCH 280/419] multi: switch project over to using btcec/v2 --- .github/workflows/go.yml | 5 + .gitignore | 4 + Makefile | 7 +- blockchain/compress.go | 8 +- blockchain/fullblocktests/generate.go | 4 +- btcec/go.mod | 2 +- btcec/go.sum | 47 ++++++++-- btcutil/address.go | 15 +-- btcutil/address_test.go | 118 +----------------------- btcutil/go.mod | 4 + btcutil/go.sum | 48 +--------- btcutil/hdkeychain/extendedkey.go | 103 +++++++++++++++------ btcutil/hdkeychain/extendedkey_test.go | 11 ++- btcutil/internal_test.go | 4 +- btcutil/psbt/go.mod | 4 + btcutil/psbt/go.sum | 48 +--------- btcutil/psbt/partialsig.go | 6 +- btcutil/wif.go | 22 +---- btcutil/wif_test.go | 8 +- go.mod | 4 + go.sum | 4 + integration/csv_fork_test.go | 5 +- integration/rpcserver_test.go | 1 + integration/rpctest/memwallet.go | 11 ++- integration/rpctest/rpc_harness_test.go | 1 + mempool/mempool_test.go | 4 +- mempool/policy_test.go | 4 +- rpcserver.go | 6 +- txscript/engine.go | 2 +- txscript/example_test.go | 4 +- txscript/opcode.go | 16 ++-- txscript/pkscript.go | 2 +- txscript/sigcache.go | 2 +- txscript/sigcache_test.go | 31 ++++--- txscript/sign.go | 21 ++--- txscript/sign_test.go | 114 +++++++++-------------- 36 files changed, 286 insertions(+), 414 deletions(-) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index b015b3c175..aeca7e58be 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -43,6 +43,11 @@ jobs: with: path-to-profile: coverage.txt + - name: Send btcec + uses: shogo82148/actions-goveralls@v1 + with: + path-to-profile: btcec/coverage.txt + - name: Send btcutil coverage uses: shogo82148/actions-goveralls@v1 with: diff --git a/.gitignore b/.gitignore index c3effe5fc7..a92c3ab39d 100644 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,7 @@ _testmain.go # Code coverage files profile.tmp profile.cov +coverage.txt +btcec/coverage.txt +btcutil/coverage.txt +btcutil/psbt/coverage.txt diff --git a/Makefile b/Makefile index 6dc6d9471b..dd34608df6 100644 --- a/Makefile +++ b/Makefile @@ -79,19 +79,22 @@ check: unit unit: @$(call print, "Running unit tests.") - $(GOTEST_DEV) ./... -test.timeout=20m + $(GOTEST) ./... -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) ./... + cd btcec; $(GOACC_BIN) ./... 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 ./... @@ -111,7 +114,7 @@ lint: $(LINT_BIN) clean: @$(call print, "Cleaning source.$(NC)") - $(RM) coverage.txt btcutil/coverage.txt btcutil/psbt/coverage.txt + $(RM) coverage.txt btcec/coverage.txt btcutil/coverage.txt btcutil/psbt/coverage.txt .PHONY: all \ default \ 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/fullblocktests/generate.go b/blockchain/fullblocktests/generate.go index 9555116842..964986dbcf 100644 --- a/blockchain/fullblocktests/generate.go +++ b/blockchain/fullblocktests/generate.go @@ -19,7 +19,7 @@ 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" @@ -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/btcec/go.mod b/btcec/go.mod index ce5eb3321e..8f110664c1 100644 --- a/btcec/go.mod +++ b/btcec/go.mod @@ -3,7 +3,7 @@ module github.com/btcsuite/btcd/btcec/v2 go 1.17 require ( - github.com/btcsuite/btcd v0.22.0-beta + github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c github.com/davecgh/go-spew v1.1.1 github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 ) diff --git a/btcec/go.sum b/btcec/go.sum index a0f9c5b8fa..f70838a70e 100644 --- a/btcec/go.sum +++ b/btcec/go.sum @@ -1,10 +1,10 @@ github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= -github.com/btcsuite/btcd v0.22.0-beta h1:LTDpDKUM5EeOFBPM8IXpinEcmZ6FWfNZbE3lfrfdnWo= -github.com/btcsuite/btcd v0.22.0-beta/go.mod h1:9n5ntfhhHQBIhUvlhDvD3Qg6fRUj4jkN0VB8L8svzOA= +github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c h1:lnAMg3ra/Gw4AkRMxrxYs8nrprWsHowg8H9zaYsJOo4= +github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c/go.mod h1:tjmYdS6MLJ5/s0Fj4DbLgSbDHbEqLJrtnHecBFkdz5M= +github.com/btcsuite/btcd/btcutil v1.0.0/go.mod h1:Uoxwv0pqYWhD//tfTiipkxNfdhG9UrLwaeswfjfdF0A= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= @@ -13,37 +13,72 @@ github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg 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 v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -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/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/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= 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.7.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.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +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= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 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/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.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/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/btcutil/address.go b/btcutil/address.go index 7f7ccbbd7b..d0367abfc8 100644 --- a/btcutil/address.go +++ b/btcutil/address.go @@ -11,10 +11,10 @@ import ( "fmt" "strings" - "github.com/btcsuite/btcd/btcec" - "github.com/btcsuite/btcd/chaincfg" + "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" ) @@ -417,10 +417,6 @@ const ( // PKFCompressed indicates the pay-to-pubkey address format is a // compressed public key. PKFCompressed - - // PKFHybrid indicates the pay-to-pubkey address format is a hybrid - // public key. - PKFHybrid ) // AddressPubKey is an Address for a pay-to-pubkey transaction. @@ -434,7 +430,7 @@ type AddressPubKey struct { // 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, btcec.S256()) + pubKey, err := btcec.ParsePubKey(serializedPubKey) if err != nil { return nil, err } @@ -447,8 +443,6 @@ func NewAddressPubKey(serializedPubKey []byte, net *chaincfg.Params) (*AddressPu switch serializedPubKey[0] { case 0x02, 0x03: pkFormat = PKFCompressed - case 0x06, 0x07: - pkFormat = PKFHybrid } return &AddressPubKey{ @@ -469,9 +463,6 @@ func (a *AddressPubKey) serialize() []byte { case PKFCompressed: return a.pubKey.SerializeCompressed() - - case PKFHybrid: - return a.pubKey.SerializeHybrid() } } diff --git a/btcutil/address_test.go b/btcutil/address_test.go index 52472b7923..f5ae2ac0d5 100644 --- a/btcutil/address_test.go +++ b/btcutil/address_test.go @@ -12,9 +12,9 @@ import ( "strings" "testing" + "github.com/btcsuite/btcd/btcutil" "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcd/btcutil" "golang.org/x/crypto/ripemd160" ) @@ -338,64 +338,6 @@ func TestAddresses(t *testing.T) { }, net: &chaincfg.MainNetParams, }, - { - name: "mainnet p2pk hybrid (0x06)", - addr: "06192d74d0cb94344c9569c2e77901573d8d7903c3ebec3a957724895dca52c6b4" + - "0d45264838c0bd96852662ce6a847b197376830160c6d2eb5e6a4c44d33f453e", - encoded: "1Ja5rs7XBZnK88EuLVcFqYGMEbBitzchmX", - valid: true, - result: btcutil.TstAddressPubKey( - []byte{ - 0x06, 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, 0x0d, 0x45, 0x26, 0x48, 0x38, 0xc0, 0xbd, - 0x96, 0x85, 0x26, 0x62, 0xce, 0x6a, 0x84, 0x7b, 0x19, 0x73, - 0x76, 0x83, 0x01, 0x60, 0xc6, 0xd2, 0xeb, 0x5e, 0x6a, 0x4c, - 0x44, 0xd3, 0x3f, 0x45, 0x3e}, - btcutil.PKFHybrid, chaincfg.MainNetParams.PubKeyHashAddrID), - f: func() (btcutil.Address, error) { - serializedPubKey := []byte{ - 0x06, 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, 0x0d, 0x45, 0x26, 0x48, 0x38, 0xc0, 0xbd, - 0x96, 0x85, 0x26, 0x62, 0xce, 0x6a, 0x84, 0x7b, 0x19, 0x73, - 0x76, 0x83, 0x01, 0x60, 0xc6, 0xd2, 0xeb, 0x5e, 0x6a, 0x4c, - 0x44, 0xd3, 0x3f, 0x45, 0x3e} - return btcutil.NewAddressPubKey(serializedPubKey, &chaincfg.MainNetParams) - }, - net: &chaincfg.MainNetParams, - }, - { - name: "mainnet p2pk hybrid (0x07)", - addr: "07b0bd634234abbb1ba1e986e884185c61cf43e001f9137f23c2c409273eb16e65" + - "37a576782eba668a7ef8bd3b3cfb1edb7117ab65129b8a2e681f3c1e0908ef7b", - encoded: "1ExqMmf6yMxcBMzHjbj41wbqYuqoX6uBLG", - valid: true, - result: btcutil.TstAddressPubKey( - []byte{ - 0x07, 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, 0x37, 0xa5, 0x76, 0x78, 0x2e, 0xba, 0x66, - 0x8a, 0x7e, 0xf8, 0xbd, 0x3b, 0x3c, 0xfb, 0x1e, 0xdb, 0x71, - 0x17, 0xab, 0x65, 0x12, 0x9b, 0x8a, 0x2e, 0x68, 0x1f, 0x3c, - 0x1e, 0x09, 0x08, 0xef, 0x7b}, - btcutil.PKFHybrid, chaincfg.MainNetParams.PubKeyHashAddrID), - f: func() (btcutil.Address, error) { - serializedPubKey := []byte{ - 0x07, 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, 0x37, 0xa5, 0x76, 0x78, 0x2e, 0xba, 0x66, - 0x8a, 0x7e, 0xf8, 0xbd, 0x3b, 0x3c, 0xfb, 0x1e, 0xdb, 0x71, - 0x17, 0xab, 0x65, 0x12, 0x9b, 0x8a, 0x2e, 0x68, 0x1f, 0x3c, - 0x1e, 0x09, 0x08, 0xef, 0x7b} - return btcutil.NewAddressPubKey(serializedPubKey, &chaincfg.MainNetParams) - }, - net: &chaincfg.MainNetParams, - }, { name: "testnet p2pk compressed (0x02)", addr: "02192d74d0cb94344c9569c2e77901573d8d7903c3ebec3a957724895dca52c6b4", @@ -469,64 +411,6 @@ func TestAddresses(t *testing.T) { }, net: &chaincfg.TestNet3Params, }, - { - name: "testnet p2pk hybrid (0x06)", - addr: "06192d74d0cb94344c9569c2e77901573d8d7903c3ebec3a957724895dca52c6b" + - "40d45264838c0bd96852662ce6a847b197376830160c6d2eb5e6a4c44d33f453e", - encoded: "my639vCVzbDZuEiX44adfTUg6anRomZLEP", - valid: true, - result: btcutil.TstAddressPubKey( - []byte{ - 0x06, 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, 0x0d, 0x45, 0x26, 0x48, 0x38, 0xc0, 0xbd, - 0x96, 0x85, 0x26, 0x62, 0xce, 0x6a, 0x84, 0x7b, 0x19, 0x73, - 0x76, 0x83, 0x01, 0x60, 0xc6, 0xd2, 0xeb, 0x5e, 0x6a, 0x4c, - 0x44, 0xd3, 0x3f, 0x45, 0x3e}, - btcutil.PKFHybrid, chaincfg.TestNet3Params.PubKeyHashAddrID), - f: func() (btcutil.Address, error) { - serializedPubKey := []byte{ - 0x06, 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, 0x0d, 0x45, 0x26, 0x48, 0x38, 0xc0, 0xbd, - 0x96, 0x85, 0x26, 0x62, 0xce, 0x6a, 0x84, 0x7b, 0x19, 0x73, - 0x76, 0x83, 0x01, 0x60, 0xc6, 0xd2, 0xeb, 0x5e, 0x6a, 0x4c, - 0x44, 0xd3, 0x3f, 0x45, 0x3e} - return btcutil.NewAddressPubKey(serializedPubKey, &chaincfg.TestNet3Params) - }, - net: &chaincfg.TestNet3Params, - }, - { - name: "testnet p2pk hybrid (0x07)", - addr: "07b0bd634234abbb1ba1e986e884185c61cf43e001f9137f23c2c409273eb16e6" + - "537a576782eba668a7ef8bd3b3cfb1edb7117ab65129b8a2e681f3c1e0908ef7b", - encoded: "muUnepk5nPPrxUTuTAhRqrpAQuSWS5fVii", - valid: true, - result: btcutil.TstAddressPubKey( - []byte{ - 0x07, 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, 0x37, 0xa5, 0x76, 0x78, 0x2e, 0xba, 0x66, - 0x8a, 0x7e, 0xf8, 0xbd, 0x3b, 0x3c, 0xfb, 0x1e, 0xdb, 0x71, - 0x17, 0xab, 0x65, 0x12, 0x9b, 0x8a, 0x2e, 0x68, 0x1f, 0x3c, - 0x1e, 0x09, 0x08, 0xef, 0x7b}, - btcutil.PKFHybrid, chaincfg.TestNet3Params.PubKeyHashAddrID), - f: func() (btcutil.Address, error) { - serializedPubKey := []byte{ - 0x07, 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, 0x37, 0xa5, 0x76, 0x78, 0x2e, 0xba, 0x66, - 0x8a, 0x7e, 0xf8, 0xbd, 0x3b, 0x3c, 0xfb, 0x1e, 0xdb, 0x71, - 0x17, 0xab, 0x65, 0x12, 0x9b, 0x8a, 0x2e, 0x68, 0x1f, 0x3c, - 0x1e, 0x09, 0x08, 0xef, 0x7b} - return btcutil.NewAddressPubKey(serializedPubKey, &chaincfg.TestNet3Params) - }, - net: &chaincfg.TestNet3Params, - }, // Segwit address tests. { name: "segwit mainnet p2wpkh v0", diff --git a/btcutil/go.mod b/btcutil/go.mod index eaf71339e1..36d669b06e 100644 --- a/btcutil/go.mod +++ b/btcutil/go.mod @@ -5,9 +5,13 @@ go 1.16 require ( github.com/aead/siphash v1.0.1 github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c + github.com/btcsuite/btcd/btcec/v2 v2.0.0 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/btcec/v2 => ../btcec + replace github.com/btcsuite/btcd => ../ diff --git a/btcutil/go.sum b/btcutil/go.sum index f4eb4bca26..ac96abce84 100644 --- a/btcutil/go.sum +++ b/btcutil/go.sum @@ -12,64 +12,24 @@ github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtE github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= 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/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.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -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= 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-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -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/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.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/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/btcutil/hdkeychain/extendedkey.go b/btcutil/hdkeychain/extendedkey.go index 4145c5c23e..c44e6a18b4 100644 --- a/btcutil/hdkeychain/extendedkey.go +++ b/btcutil/hdkeychain/extendedkey.go @@ -18,11 +18,11 @@ import ( "fmt" "math/big" - "github.com/btcsuite/btcd/btcec" - "github.com/btcsuite/btcd/chaincfg" - "github.com/btcsuite/btcd/chaincfg/chainhash" + "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 ( @@ -154,8 +154,7 @@ func (k *ExtendedKey) pubKeyBytes() []byte { // This is a private extended key, so calculate and memoize the public // key if needed. if len(k.pubKey) == 0 { - pkx, pky := btcec.S256().ScalarBaseMult(k.key) - pubKey := btcec.PublicKey{Curve: btcec.S256(), X: pkx, Y: pky} + _, pubKey := btcec.PrivKeyFromBytes(k.key) k.pubKey = pubKey.SerializeCompressed() } @@ -292,8 +291,8 @@ func (k *ExtendedKey) Derive(i uint32) (*ExtendedKey, error) { // 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. - ilNum := new(big.Int).SetBytes(il) - if ilNum.Cmp(btcec.S256().N) >= 0 || ilNum.Sign() == 0 { + var ilNum btcec.ModNScalar + if overflow := ilNum.SetByteSlice(il); overflow { return nil, ErrInvalidChild } @@ -313,35 +312,66 @@ func (k *ExtendedKey) Derive(i uint32) (*ExtendedKey, error) { // derive the final child key. // // childKey = parse256(Il) + parenKey - keyNum := new(big.Int).SetBytes(k.key) - ilNum.Add(ilNum, keyNum) - ilNum.Mod(ilNum, btcec.S256().N) - childKey = ilNum.Bytes() + 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 - // intermediate private key. - ilx, ily := btcec.S256().ScalarBaseMult(il) - if ilx.Sign() == 0 || ily.Sign() == 0 { + // 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, btcec.S256()) + 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) - childX, childY := btcec.S256().Add(ilx, ily, pubKey.X, pubKey.Y) - pk := btcec.PublicKey{Curve: btcec.S256(), X: childX, Y: childY} - childKey = pk.SerializeCompressed() + 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 @@ -400,19 +430,36 @@ func (k *ExtendedKey) DeriveNonStandard(i uint32) (*ExtendedKey, error) { childKey = ilNum.Bytes() isPrivate = true } else { - ilx, ily := btcec.S256().ScalarBaseMult(il) - if ilx.Sign() == 0 || ily.Sign() == 0 { + 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, btcec.S256()) + pubKey, err := btcec.ParsePubKey(k.key) if err != nil { return nil, err } - childX, childY := btcec.S256().Add(ilx, ily, pubKey.X, pubKey.Y) - pk := btcec.PublicKey{Curve: btcec.S256(), X: childX, Y: childY} - childKey = pk.SerializeCompressed() + 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] @@ -488,7 +535,7 @@ func (k *ExtendedKey) CloneWithVersion(version []byte) (*ExtendedKey, error) { // 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(), btcec.S256()) + return btcec.ParsePubKey(k.pubKeyBytes()) } // ECPrivKey converts the extended key to a btcec private key and returns it. @@ -500,7 +547,7 @@ func (k *ExtendedKey) ECPrivKey() (*btcec.PrivateKey, error) { return nil, ErrNotPrivExtKey } - privKey, _ := btcec.PrivKeyFromBytes(btcec.S256(), k.key) + privKey, _ := btcec.PrivKeyFromBytes(k.key) return privKey, nil } @@ -674,7 +721,7 @@ func NewKeyFromString(key string) (*ExtendedKey, error) { } else { // Ensure the public key parses correctly and is actually on the // secp256k1 curve. - _, err := btcec.ParsePubKey(keyData, btcec.S256()) + _, err := btcec.ParsePubKey(keyData) if err != nil { return nil, err } diff --git a/btcutil/hdkeychain/extendedkey_test.go b/btcutil/hdkeychain/extendedkey_test.go index dd6deb514e..0721b92480 100644 --- a/btcutil/hdkeychain/extendedkey_test.go +++ b/btcutil/hdkeychain/extendedkey_test.go @@ -18,6 +18,7 @@ import ( "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 @@ -878,7 +879,7 @@ func TestErrors(t *testing.T) { { name: "pubkey not on curve", key: "xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ1hr9Rwbk95YadvBkQXxzHBSngB8ndpW6QH7zhhsXZ2jHyZqPjk", - err: errors.New("invalid square root"), + err: secp_ecdsa.ErrPubKeyNotOnCurve, }, { name: "unsupported version", @@ -891,7 +892,7 @@ func TestErrors(t *testing.T) { for i, test := range tests { extKey, err := NewKeyFromString(test.key) - if !reflect.DeepEqual(err, test.err) { + if !errors.Is(err, test.err) { t.Errorf("NewKeyFromString #%d (%s): mismatched error "+ "-- got: %v, want: %v", i, test.name, err, test.err) @@ -900,7 +901,7 @@ func TestErrors(t *testing.T) { if test.neuter { _, err := extKey.Neuter() - if !reflect.DeepEqual(err, test.neuterErr) { + if !errors.Is(err, test.neuterErr) { t.Errorf("Neuter #%d (%s): mismatched error "+ "-- got: %v, want: %v", i, test.name, err, test.neuterErr) @@ -972,9 +973,9 @@ func TestZero(t *testing.T) { return false } - wantErr = errors.New("pubkey string is empty") + wantErr = secp_ecdsa.ErrPubKeyInvalidLen _, err = key.ECPubKey() - if !reflect.DeepEqual(err, wantErr) { + if !errors.Is(err, wantErr) { t.Errorf("ECPubKey #%d (%s): mismatched error: want "+ "%v, got %v", i, testName, wantErr, err) return false diff --git a/btcutil/internal_test.go b/btcutil/internal_test.go index 6d1efa0199..211b6ae64b 100644 --- a/btcutil/internal_test.go +++ b/btcutil/internal_test.go @@ -12,7 +12,7 @@ interface. The functions are only exported while the tests are being run. package btcutil import ( - "github.com/btcsuite/btcd/btcec" + "github.com/btcsuite/btcd/btcec/v2" "github.com/btcsuite/btcd/btcutil/base58" "github.com/btcsuite/btcd/btcutil/bech32" "golang.org/x/crypto/ripemd160" @@ -99,7 +99,7 @@ func TstAddressTaproot(version byte, program [32]byte, func TstAddressPubKey(serializedPubKey []byte, pubKeyFormat PubKeyFormat, netID byte) *AddressPubKey { - pubKey, _ := btcec.ParsePubKey(serializedPubKey, btcec.S256()) + pubKey, _ := btcec.ParsePubKey(serializedPubKey) return &AddressPubKey{ pubKeyFormat: pubKeyFormat, pubKey: pubKey, diff --git a/btcutil/psbt/go.mod b/btcutil/psbt/go.mod index 485abcff67..fbd9f1b3c2 100644 --- a/btcutil/psbt/go.mod +++ b/btcutil/psbt/go.mod @@ -4,15 +4,19 @@ go 1.17 require ( github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c + github.com/btcsuite/btcd/btcec/v2 v2.0.0 github.com/btcsuite/btcd/btcutil v1.0.0 github.com/davecgh/go-spew v1.1.1 ) require ( github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 // indirect ) +replace github.com/btcsuite/btcd/btcec/v2 => ../../btcec + replace github.com/btcsuite/btcd/btcutil => ../ replace github.com/btcsuite/btcd => ../.. diff --git a/btcutil/psbt/go.sum b/btcutil/psbt/go.sum index 921a146260..08c53e8b09 100644 --- a/btcutil/psbt/go.sum +++ b/btcutil/psbt/go.sum @@ -8,63 +8,23 @@ github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtE github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= 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/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.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -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= 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-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -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/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.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/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/btcutil/psbt/partialsig.go b/btcutil/psbt/partialsig.go index e11bb80de7..26a6dc2d61 100644 --- a/btcutil/psbt/partialsig.go +++ b/btcutil/psbt/partialsig.go @@ -3,7 +3,7 @@ package psbt import ( "bytes" - "github.com/btcsuite/btcd/btcec" + "github.com/btcsuite/btcd/btcec/v2" ) // PartialSig encapsulate a (BTC public key, ECDSA signature) @@ -30,7 +30,7 @@ func (s PartialSigSorter) Less(i, j int) bool { // 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, btcec.S256()) + _, err := btcec.ParsePubKey(pubKey) return err == nil } @@ -38,7 +38,7 @@ func validatePubkey(pubKey []byte) bool { // 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 := btcec.ParseDERSignature(sig, btcec.S256()) + _, err := btcec.ParseDERSignature(sig) return err == nil } diff --git a/btcutil/wif.go b/btcutil/wif.go index e727a0c44a..a28cc8ba8d 100644 --- a/btcutil/wif.go +++ b/btcutil/wif.go @@ -8,10 +8,10 @@ import ( "bytes" "errors" - "github.com/btcsuite/btcd/btcec" + "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/btcutil/base58" "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/chaincfg/chainhash" - "github.com/btcsuite/btcd/btcutil/base58" ) // ErrMalformedPrivateKey describes an error where a WIF-encoded private @@ -117,7 +117,7 @@ func DecodeWIF(wif string) (*WIF, error) { netID := decoded[0] privKeyBytes := decoded[1 : 1+btcec.PrivKeyBytesLen] - privKey, _ := btcec.PrivKeyFromBytes(btcec.S256(), privKeyBytes) + privKey, _ := btcec.PrivKeyFromBytes(privKeyBytes) return &WIF{privKey, compress, netID}, nil } @@ -136,9 +136,7 @@ func (w *WIF) String() string { a := make([]byte, 0, encodeLen) a = append(a, w.netID) - // Pad and append bytes manually, instead of using Serialize, to - // avoid another call to make. - a = paddedAppend(btcec.PrivKeyBytesLen, a, w.PrivKey.D.Bytes()) + a = append(a, w.PrivKey.Serialize()...) if w.CompressPubKey { a = append(a, compressMagic) } @@ -151,19 +149,9 @@ func (w *WIF) String() string { // 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 := (*btcec.PublicKey)(&w.PrivKey.PublicKey) + pk := w.PrivKey.PubKey() if w.CompressPubKey { return pk.SerializeCompressed() } return pk.SerializeUncompressed() } - -// 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...) -} diff --git a/btcutil/wif_test.go b/btcutil/wif_test.go index 1c21b4871b..c255c1b54f 100644 --- a/btcutil/wif_test.go +++ b/btcutil/wif_test.go @@ -9,9 +9,9 @@ import ( "encoding/hex" "testing" - "github.com/btcsuite/btcd/btcec" - "github.com/btcsuite/btcd/chaincfg" + "github.com/btcsuite/btcd/btcec/v2" . "github.com/btcsuite/btcd/btcutil" + "github.com/btcsuite/btcd/chaincfg" ) func TestEncodeDecodeWIF(t *testing.T) { @@ -67,7 +67,7 @@ func TestEncodeDecodeWIF(t *testing.T) { validCase := validCase t.Run(validCase.name, func(t *testing.T) { - priv, _ := btcec.PrivKeyFromBytes(btcec.S256(), validCase.privateKey) + 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) @@ -145,7 +145,7 @@ func TestEncodeDecodeWIF(t *testing.T) { 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(btcec.S256(), privateKey) + priv, _ := btcec.PrivKeyFromBytes(privateKey) wif, err := NewWIF(priv, nil, true) diff --git a/go.mod b/go.mod index 2c2bb9229f..7ed1214d86 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,7 @@ module github.com/btcsuite/btcd require ( + github.com/btcsuite/btcd/btcec/v2 v2.0.0 github.com/btcsuite/btcd/btcutil v1.0.0 github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd @@ -17,9 +18,12 @@ require ( require ( github.com/aead/siphash v1.0.1 // indirect github.com/btcsuite/snappy-go v1.0.0 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23 // indirect ) replace github.com/btcsuite/btcd/btcutil => ./btcutil +replace github.com/btcsuite/btcd/btcec/v2 => ./btcec + go 1.17 diff --git a/go.sum b/go.sum index 3b35b00620..2645b3566c 100644 --- a/go.sum +++ b/go.sum @@ -15,6 +15,10 @@ 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 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= diff --git a/integration/csv_fork_test.go b/integration/csv_fork_test.go index 5ffd5d5ab2..45ab8ad1aa 100644 --- a/integration/csv_fork_test.go +++ b/integration/csv_fork_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 @@ -15,7 +16,7 @@ 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/integration/rpctest" @@ -35,7 +36,7 @@ func makeTestOutput(r *rpctest.Harness, t *testing.T, // Create a fresh key, then send some coins to an address spendable by // that key. - key, err := btcec.NewPrivateKey(btcec.S256()) + key, err := btcec.NewPrivateKey() if err != nil { return nil, nil, nil, err } diff --git a/integration/rpcserver_test.go b/integration/rpcserver_test.go index 13325bc1d7..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 diff --git a/integration/rpctest/memwallet.go b/integration/rpctest/memwallet.go index c94124d82c..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/btcd/btcutil" - "github.com/btcsuite/btcd/btcutil/hdkeychain" ) var ( @@ -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 @@ -514,11 +515,13 @@ func (m *memWallet) CreateTransaction(outputs []*wire.TxOut, 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/rpc_harness_test.go b/integration/rpctest/rpc_harness_test.go index d1184eb6ba..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 diff --git a/mempool/mempool_test.go b/mempool/mempool_test.go index 96777b9758..8df587f8a5 100644 --- a/mempool/mempool_test.go +++ b/mempool/mempool_test.go @@ -13,7 +13,7 @@ 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" @@ -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. diff --git a/mempool/policy_test.go b/mempool/policy_test.go index a81f98ea83..5175b67999 100644 --- a/mempool/policy_test.go +++ b/mempool/policy_test.go @@ -9,7 +9,7 @@ import ( "testing" "time" - "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" @@ -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) diff --git a/rpcserver.go b/rpcserver.go index e000af5a4f..b26074b33b 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -29,7 +29,7 @@ import ( "github.com/btcsuite/btcd/blockchain" "github.com/btcsuite/btcd/blockchain/indexers" - "github.com/btcsuite/btcd/btcec" + "github.com/btcsuite/btcd/btcec/v2" "github.com/btcsuite/btcd/btcjson" "github.com/btcsuite/btcd/btcutil" "github.com/btcsuite/btcd/chaincfg" @@ -3520,7 +3520,7 @@ func handleSignMessageWithPrivKey(s *rpcServer, cmd interface{}, closeChan <-cha wire.WriteVarString(&buf, 0, c.Message) messageHash := chainhash.DoubleHashB(buf.Bytes()) - sig, err := btcec.SignCompact(btcec.S256(), wif.PrivKey, + sig, err := btcec.SignCompact(wif.PrivKey, messageHash, wif.CompressPubKey) if err != nil { return nil, &btcjson.RPCError{ @@ -3715,7 +3715,7 @@ func handleVerifyMessage(s *rpcServer, cmd interface{}, closeChan <-chan struct{ 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 := btcec.RecoverCompact(sig, expectedMessageHash) if err != nil { // Mirror Bitcoin Core behavior, which treats error in diff --git a/txscript/engine.go b/txscript/engine.go index 0814e7eb96..1550579d28 100644 --- a/txscript/engine.go +++ b/txscript/engine.go @@ -12,7 +12,7 @@ import ( "math/big" "strings" - "github.com/btcsuite/btcd/btcec" + "github.com/btcsuite/btcd/btcec/v2" "github.com/btcsuite/btcd/wire" ) diff --git a/txscript/example_test.go b/txscript/example_test.go index 7983b08ff2..f3ff4b873c 100644 --- a/txscript/example_test.go +++ b/txscript/example_test.go @@ -9,7 +9,7 @@ import ( "encoding/hex" "fmt" - "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" @@ -90,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) diff --git a/txscript/opcode.go b/txscript/opcode.go index 4c31be3f75..708bb2370b 100644 --- a/txscript/opcode.go +++ b/txscript/opcode.go @@ -15,7 +15,7 @@ import ( "golang.org/x/crypto/ripemd160" - "github.com/btcsuite/btcd/btcec" + "github.com/btcsuite/btcd/btcec/v2" "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/wire" ) @@ -1929,7 +1929,7 @@ func opcodeCheckSig(op *opcode, data []byte, vm *Engine) error { hash = calcSignatureHash(subScript, hashType, &vm.tx, vm.txIdx) } - pubKey, err := btcec.ParsePubKey(pkBytes, btcec.S256()) + pubKey, err := btcec.ParsePubKey(pkBytes) if err != nil { vm.dstack.PushBool(false) return nil @@ -1939,9 +1939,9 @@ func opcodeCheckSig(op *opcode, data []byte, vm *Engine) error { if vm.hasFlag(ScriptVerifyStrictEncoding) || vm.hasFlag(ScriptVerifyDERSignatures) { - signature, err = btcec.ParseDERSignature(sigBytes, btcec.S256()) + signature, err = btcec.ParseDERSignature(sigBytes) } else { - signature, err = btcec.ParseSignature(sigBytes, btcec.S256()) + signature, err = btcec.ParseSignature(sigBytes) } if err != nil { vm.dstack.PushBool(false) @@ -2148,11 +2148,9 @@ func opcodeCheckMultiSig(op *opcode, data []byte, vm *Engine) error { if vm.hasFlag(ScriptVerifyStrictEncoding) || vm.hasFlag(ScriptVerifyDERSignatures) { - parsedSig, err = btcec.ParseDERSignature(signature, - btcec.S256()) + parsedSig, err = btcec.ParseDERSignature(signature) } else { - parsedSig, err = btcec.ParseSignature(signature, - btcec.S256()) + parsedSig, err = btcec.ParseSignature(signature) } sigInfo.parsed = true if err != nil { @@ -2174,7 +2172,7 @@ func opcodeCheckMultiSig(op *opcode, data []byte, vm *Engine) error { } // Parse the pubkey. - parsedPubKey, err := btcec.ParsePubKey(pubKey, btcec.S256()) + parsedPubKey, err := btcec.ParsePubKey(pubKey) if err != nil { continue } diff --git a/txscript/pkscript.go b/txscript/pkscript.go index f8aa783aef..c5dd2a12a2 100644 --- a/txscript/pkscript.go +++ b/txscript/pkscript.go @@ -5,7 +5,7 @@ import ( "errors" "fmt" - "github.com/btcsuite/btcd/btcec" + "github.com/btcsuite/btcd/btcec/v2" "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/wire" "github.com/btcsuite/btcd/btcutil" diff --git a/txscript/sigcache.go b/txscript/sigcache.go index d9e4fa6ce1..959240c04d 100644 --- a/txscript/sigcache.go +++ b/txscript/sigcache.go @@ -7,7 +7,7 @@ package txscript import ( "sync" - "github.com/btcsuite/btcd/btcec" + "github.com/btcsuite/btcd/btcec/v2" "github.com/btcsuite/btcd/chaincfg/chainhash" ) diff --git a/txscript/sigcache_test.go b/txscript/sigcache_test.go index 5413ea3b2c..f9e9f270ef 100644 --- a/txscript/sigcache_test.go +++ b/txscript/sigcache_test.go @@ -8,7 +8,7 @@ import ( "crypto/rand" "testing" - "github.com/btcsuite/btcd/btcec" + "github.com/btcsuite/btcd/btcec/v2" "github.com/btcsuite/btcd/chaincfg/chainhash" ) @@ -16,7 +16,7 @@ import ( // 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()) + privKey, err := btcec.NewPrivateKey() if err != nil { return nil, nil, nil, err } @@ -26,10 +26,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 := btcec.Sign(privKey, msgHash[:]) return &msgHash, sig, privKey.PubKey(), nil } @@ -49,8 +46,8 @@ func TestSigCacheAddExists(t *testing.T) { sigCache.Add(*msg1, sig1, key1) // 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()) + sig1Copy, _ := btcec.ParseSignature(sig1.Serialize()) + key1Copy, _ := btcec.ParsePubKey(key1.SerializeCompressed()) if !sigCache.Exists(*msg1, sig1Copy, key1Copy) { t.Errorf("previously added item not found in signature cache") } @@ -73,8 +70,14 @@ func TestSigCacheAddEvictEntry(t *testing.T) { sigCache.Add(*msg, sig, key) - sigCopy, _ := btcec.ParseSignature(sig.Serialize(), btcec.S256()) - keyCopy, _ := btcec.ParsePubKey(key.SerializeCompressed(), btcec.S256()) + sigCopy, err := btcec.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, keyCopy) { t.Errorf("previously added item not found in signature" + "cache") @@ -102,8 +105,8 @@ 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()) + sigNewCopy, _ := btcec.ParseSignature(sigNew.Serialize()) + keyNewCopy, _ := btcec.ParsePubKey(keyNew.SerializeCompressed()) if !sigCache.Exists(*msgNew, sigNewCopy, keyNewCopy) { t.Fatalf("previously added item not found in signature cache") } @@ -125,8 +128,8 @@ func TestSigCacheAddMaxEntriesZeroOrNegative(t *testing.T) { sigCache.Add(*msg1, sig1, key1) // The generated triplet should not be found. - sig1Copy, _ := btcec.ParseSignature(sig1.Serialize(), btcec.S256()) - key1Copy, _ := btcec.ParsePubKey(key1.SerializeCompressed(), btcec.S256()) + sig1Copy, _ := btcec.ParseSignature(sig1.Serialize()) + key1Copy, _ := btcec.ParsePubKey(key1.SerializeCompressed()) if sigCache.Exists(*msg1, sig1Copy, key1Copy) { t.Errorf("previously added signature found in sigcache, but" + "shouldn't have been") diff --git a/txscript/sign.go b/txscript/sign.go index 84d8d1f3ea..e5335ce366 100644 --- a/txscript/sign.go +++ b/txscript/sign.go @@ -6,12 +6,11 @@ package txscript import ( "errors" - "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/wire" - "github.com/btcsuite/btcd/btcutil" ) // RawTxInWitnessSignature returns the serialized ECDA signature for the input @@ -28,10 +27,7 @@ func RawTxInWitnessSignature(tx *wire.MsgTx, sigHashes *TxSigHashes, idx int, return nil, err } - signature, err := key.Sign(hash) - if err != nil { - return nil, fmt.Errorf("cannot sign tx input: %s", err) - } + signature := btcec.Sign(key, hash) return append(signature.Serialize(), byte(hashType)), nil } @@ -51,7 +47,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() @@ -73,10 +69,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 := btcec.Sign(key, hash) return append(signature.Serialize(), byte(hashType)), nil } @@ -95,7 +88,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() @@ -270,7 +263,7 @@ sigLoop: tSig := sig[:len(sig)-1] hashType := SigHashType(sig[len(sig)-1]) - pSig, err := btcec.ParseDERSignature(tSig, btcec.S256()) + pSig, err := btcec.ParseDERSignature(tSig) if err != nil { continue } diff --git a/txscript/sign_test.go b/txscript/sign_test.go index 47084f18bf..637ccef10d 100644 --- a/txscript/sign_test.go +++ b/txscript/sign_test.go @@ -9,7 +9,7 @@ import ( "fmt" "testing" - "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/wire" @@ -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 { From d2960c83ccf84e99be86df087a99bbc16e87dc18 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Tue, 11 Jan 2022 19:58:44 -0800 Subject: [PATCH 281/419] build: don't run the integration tests w/ -race --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index dd34608df6..24667def7c 100644 --- a/Makefile +++ b/Makefile @@ -79,7 +79,7 @@ check: unit unit: @$(call print, "Running unit tests.") - $(GOTEST) ./... -test.timeout=20m + $(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 From 3ee1211e78ccfdd6ec085d1d38e5abf82bbeb1ab Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Thu, 2 Dec 2021 16:54:42 -0800 Subject: [PATCH 282/419] btcec/v2: retain copyright notices from decred developers for all files --- btcec/curve.go | 3 +++ btcec/error.go | 3 +++ btcec/modnscalar.go | 3 +++ 3 files changed, 9 insertions(+) diff --git a/btcec/curve.go b/btcec/curve.go index b86c591374..5224e35c8e 100644 --- a/btcec/curve.go +++ b/btcec/curve.go @@ -1,3 +1,6 @@ +// Copyright (c) 2015-2021 The btcsuite developers +// Copyright (c) 2015-2021 The Decred developers + package btcec import ( diff --git a/btcec/error.go b/btcec/error.go index 39c9172bc3..81ca2b044d 100644 --- a/btcec/error.go +++ b/btcec/error.go @@ -1,3 +1,6 @@ +// Copyright (c) 2013-2021 The btcsuite developers +// Copyright (c) 2015-2021 The Decred developers + package btcec import ( diff --git a/btcec/modnscalar.go b/btcec/modnscalar.go index eb1b8f05f4..b18b2c1d43 100644 --- a/btcec/modnscalar.go +++ b/btcec/modnscalar.go @@ -1,3 +1,6 @@ +// Copyright (c) 2013-2021 The btcsuite developers +// Copyright (c) 2015-2021 The Decred developers + package btcec import ( From b3d263e902e14e3491a8513cc8b0784597a61700 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Wed, 26 Jan 2022 16:31:54 -0800 Subject: [PATCH 283/419] build: use sed to remove v2 path from btcec/coverage.txt The `goveralls` tool we use to handle code coverage upload seems to not understand that a `v2 module can exist, without having a v2 file path on disk. We use a `sed` command to remove the `v2` module prefix so the tool can reach into the correct file to extract the source code. --- Makefile | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 24667def7c..2e967ba0f6 100644 --- a/Makefile +++ b/Makefile @@ -87,8 +87,13 @@ unit: unit-cover: $(GOACC_BIN) @$(call print, "Running unit coverage tests.") $(GOACC_BIN) ./... - cd btcec; $(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: From eb61742c5dc54b2fe5fae0cbde814d2ddd6a59e5 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Thu, 2 Dec 2021 18:33:04 -0800 Subject: [PATCH 284/419] btcec/v2: create new ecdsa package In this commit, we create a new package to house the ECDSA-specific logic in the new `btcec/v2` pacakge. Thsi c hange is meant to mirror the structure of the `dcrec` package, as we'll soon slot in our own custom BIP-340 implementation. --- btcec/bench_test.go | 29 ---- btcec/btcec_test.go | 21 --- btcec/ecdsa/bench_test.go | 210 ++++++++++++++++++++++++++++ btcec/ecdsa/error.go | 18 +++ btcec/{ => ecdsa}/example_test.go | 7 +- btcec/{ => ecdsa}/signature.go | 16 ++- btcec/{ => ecdsa}/signature_test.go | 85 +++++++++-- btcec/go.mod | 6 + btcec/go.sum | 56 +------- btcec/privkey_test.go | 51 ------- btcutil/psbt/partialsig.go | 3 +- rpcserver.go | 6 +- txscript/opcode.go | 15 +- txscript/pkscript.go | 3 +- txscript/sigcache.go | 7 +- txscript/sigcache_test.go | 13 +- txscript/sign.go | 8 +- 17 files changed, 353 insertions(+), 201 deletions(-) create mode 100644 btcec/ecdsa/bench_test.go create mode 100644 btcec/ecdsa/error.go rename btcec/{ => ecdsa}/example_test.go (93%) rename btcec/{ => ecdsa}/signature.go (95%) rename btcec/{ => ecdsa}/signature_test.go (92%) delete mode 100644 btcec/privkey_test.go diff --git a/btcec/bench_test.go b/btcec/bench_test.go index 475a4afd6e..89e2bc2cce 100644 --- a/btcec/bench_test.go +++ b/btcec/bench_test.go @@ -164,35 +164,6 @@ func hexToModNScalar(s string) *ModNScalar { return &scalar } -// 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 := 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) - } -} - // BenchmarkFieldNormalize benchmarks how long it takes the internal field // to perform normalization (which includes modular reduction). func BenchmarkFieldNormalize(b *testing.B) { diff --git a/btcec/btcec_test.go b/btcec/btcec_test.go index 5fdd638f22..3113a1b553 100644 --- a/btcec/btcec_test.go +++ b/btcec/btcec_test.go @@ -851,27 +851,6 @@ func TestKeyGeneration(t *testing.T) { testKeyGeneration(t, S256(), "S256") } -func testSignAndVerify(t *testing.T, c *KoblitzCurve, tag string) { - priv, _ := 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, S256(), "S256") -} - // 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. 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/example_test.go b/btcec/ecdsa/example_test.go similarity index 93% rename from btcec/example_test.go rename to btcec/ecdsa/example_test.go index b73f102c32..409a95bd23 100644 --- a/btcec/example_test.go +++ b/btcec/ecdsa/example_test.go @@ -2,13 +2,14 @@ // Use of this source code is governed by an ISC // license that can be found in the LICENSE file. -package btcec_test +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" ) @@ -27,7 +28,7 @@ func Example_signMessage() { // Sign a message using the private key. message := "test message" messageHash := chainhash.DoubleHashB([]byte(message)) - signature := btcec.Sign(privKey, messageHash) + signature := ecdsa.Sign(privKey, messageHash) // Serialize and display the signature. fmt.Printf("Serialized Signature: %x\n", signature.Serialize()) @@ -67,7 +68,7 @@ func Example_verifySignature() { fmt.Println(err) return } - signature, err := btcec.ParseSignature(sigBytes) + signature, err := ecdsa.ParseSignature(sigBytes) if err != nil { fmt.Println(err) return diff --git a/btcec/signature.go b/btcec/ecdsa/signature.go similarity index 95% rename from btcec/signature.go rename to btcec/ecdsa/signature.go index ddeb4b052f..092e4ceb1c 100644 --- a/btcec/signature.go +++ b/btcec/ecdsa/signature.go @@ -1,14 +1,16 @@ // 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 ( "errors" "fmt" "math/big" + "github.com/btcsuite/btcd/btcec/v2" secp_ecdsa "github.com/decred/dcrd/dcrec/secp256k1/v4/ecdsa" ) @@ -22,7 +24,7 @@ var ( type Signature = secp_ecdsa.Signature // NewSignature instantiates a new signature given some r and s values. -func NewSignature(r, s *ModNScalar) *Signature { +func NewSignature(r, s *btcec.ModNScalar) *Signature { return secp_ecdsa.NewSignature(r, s) } @@ -122,7 +124,7 @@ func parseSig(sigStr []byte, der bool) (*Signature, error) { // 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 ModNScalar + var r btcec.ModNScalar if len(rBytes) > 32 { str := "invalid signature: R is larger than 256 bits" return nil, errors.New(str) @@ -169,7 +171,7 @@ func parseSig(sigStr []byte, der bool) (*Signature, error) { // 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 ModNScalar + var s btcec.ModNScalar if len(sBytes) > 32 { str := "invalid signature: S is larger than 256 bits" return nil, errors.New(str) @@ -214,7 +216,7 @@ func ParseDERSignature(sigStr []byte) (*Signature, error) { // 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 *PrivateKey, hash []byte, +func SignCompact(key *btcec.PrivateKey, hash []byte, isCompressedKey bool) ([]byte, error) { return secp_ecdsa.SignCompact(key, hash, isCompressedKey), nil @@ -224,7 +226,7 @@ func SignCompact(key *PrivateKey, hash []byte, // 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) (*PublicKey, bool, error) { +func RecoverCompact(signature, hash []byte) (*btcec.PublicKey, bool, error) { return secp_ecdsa.RecoverCompact(signature, hash) } @@ -233,6 +235,6 @@ func RecoverCompact(signature, hash []byte) (*PublicKey, bool, error) { // 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 *PrivateKey, hash []byte) *Signature { +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 92% rename from btcec/signature_test.go rename to btcec/ecdsa/signature_test.go index 74ea374784..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" @@ -12,6 +13,8 @@ import ( "fmt" "reflect" "testing" + + "github.com/btcsuite/btcd/btcec/v2" ) type signatureTest struct { @@ -344,9 +347,7 @@ func TestSignatures(t *testing.T) { 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 { @@ -443,7 +444,7 @@ func TestSignatureSerialize(t *testing.T) { }, { "zero signature", - NewSignature(&ModNScalar{}, &ModNScalar{}), + NewSignature(&btcec.ModNScalar{}, &btcec.ModNScalar{}), []byte{0x30, 0x06, 0x02, 0x01, 0x00, 0x02, 0x01, 0x00}, }, } @@ -458,9 +459,9 @@ 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) { - priv, _ := NewPrivateKey() + priv, _ := btcec.NewPrivateKey() hashed := []byte("testing") sig, err := SignCompact(priv, hashed, isCompressed) @@ -523,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) } } @@ -620,7 +621,7 @@ func TestRecoverCompact(t *testing.T) { } // Otherwise, ensure the correct public key was recovered. - exPub, _ := ParsePubKey(decodeHex(test.pub)) + exPub, _ := btcec.ParsePubKey(decodeHex(test.pub)) if !exPub.IsEqual(pub) { t.Errorf("unexpected recovered public key #%d: "+ "want %v, got %v", i, exPub, pub) @@ -679,11 +680,11 @@ func TestRFC6979(t *testing.T) { } for i, test := range tests { - privKey, _ := PrivKeyFromBytes(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.Serialize(), hash[:], nil, nil, 0).Bytes() + gotNonce := btcec.NonceRFC6979(privKey.Serialize(), hash[:], nil, nil, 0).Bytes() wantNonce := decodeHex(test.nonce) if !bytes.Equal(gotNonce[:], wantNonce) { t.Errorf("NonceRFC6979 #%d (%s): Nonce is incorrect: "+ @@ -726,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/go.mod b/btcec/go.mod index 8f110664c1..53e4a1f5cb 100644 --- a/btcec/go.mod +++ b/btcec/go.mod @@ -7,3 +7,9 @@ require ( github.com/davecgh/go-spew v1.1.1 github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 ) + +require github.com/decred/dcrd/crypto/blake256 v1.0.0 // indirect + +// We depend on chainhash as is, so we need to replace to use the version of +// chainhash included in the version of btcd we're building in. +replace github.com/btcsuite/btcd => ../ diff --git a/btcec/go.sum b/btcec/go.sum index f70838a70e..dcbbc98cc5 100644 --- a/btcec/go.sum +++ b/btcec/go.sum @@ -1,18 +1,12 @@ github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= -github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c h1:lnAMg3ra/Gw4AkRMxrxYs8nrprWsHowg8H9zaYsJOo4= -github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c/go.mod h1:tjmYdS6MLJ5/s0Fj4DbLgSbDHbEqLJrtnHecBFkdz5M= +github.com/btcsuite/btcd/btcec/v2 v2.0.0/go.mod h1:vu+77Lro3alBlmsmlDnkZtgGiNo6OBwMHSb1XTGDwGo= github.com/btcsuite/btcd/btcutil v1.0.0/go.mod h1:Uoxwv0pqYWhD//tfTiipkxNfdhG9UrLwaeswfjfdF0A= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= -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/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= -github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= -github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= 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 v0.0.0-20171005155431-ecdeabc65495/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= @@ -20,65 +14,17 @@ github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn 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/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/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= 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.7.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.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -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= -golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -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/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.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/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/btcec/privkey_test.go b/btcec/privkey_test.go deleted file mode 100644 index 71a8bceaa1..0000000000 --- a/btcec/privkey_test.go +++ /dev/null @@ -1,51 +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(test.key) - - _, err := 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/btcutil/psbt/partialsig.go b/btcutil/psbt/partialsig.go index 26a6dc2d61..71cb63cdbf 100644 --- a/btcutil/psbt/partialsig.go +++ b/btcutil/psbt/partialsig.go @@ -4,6 +4,7 @@ import ( "bytes" "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/btcec/v2/ecdsa" ) // PartialSig encapsulate a (BTC public key, ECDSA signature) @@ -38,7 +39,7 @@ func validatePubkey(pubKey []byte) bool { // 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 := btcec.ParseDERSignature(sig) + _, err := ecdsa.ParseDERSignature(sig) return err == nil } diff --git a/rpcserver.go b/rpcserver.go index b26074b33b..b8012b2b01 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -29,7 +29,7 @@ import ( "github.com/btcsuite/btcd/blockchain" "github.com/btcsuite/btcd/blockchain/indexers" - "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/btcec/v2/ecdsa" "github.com/btcsuite/btcd/btcjson" "github.com/btcsuite/btcd/btcutil" "github.com/btcsuite/btcd/chaincfg" @@ -3520,7 +3520,7 @@ func handleSignMessageWithPrivKey(s *rpcServer, cmd interface{}, closeChan <-cha wire.WriteVarString(&buf, 0, c.Message) messageHash := chainhash.DoubleHashB(buf.Bytes()) - sig, err := btcec.SignCompact(wif.PrivKey, + sig, err := ecdsa.SignCompact(wif.PrivKey, messageHash, wif.CompressPubKey) if err != nil { return nil, &btcjson.RPCError{ @@ -3715,7 +3715,7 @@ func handleVerifyMessage(s *rpcServer, cmd interface{}, closeChan <-chan struct{ wire.WriteVarString(&buf, 0, messageSignatureHeader) wire.WriteVarString(&buf, 0, c.Message) expectedMessageHash := chainhash.DoubleHashB(buf.Bytes()) - pk, wasCompressed, err := btcec.RecoverCompact(sig, + pk, wasCompressed, err := ecdsa.RecoverCompact(sig, expectedMessageHash) if err != nil { // Mirror Bitcoin Core behavior, which treats error in diff --git a/txscript/opcode.go b/txscript/opcode.go index 708bb2370b..64e46fbf74 100644 --- a/txscript/opcode.go +++ b/txscript/opcode.go @@ -16,6 +16,7 @@ import ( "golang.org/x/crypto/ripemd160" "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/btcec/v2/ecdsa" "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/wire" ) @@ -1935,13 +1936,13 @@ func opcodeCheckSig(op *opcode, data []byte, vm *Engine) error { return nil } - var signature *btcec.Signature + var signature *ecdsa.Signature if vm.hasFlag(ScriptVerifyStrictEncoding) || vm.hasFlag(ScriptVerifyDERSignatures) { - signature, err = btcec.ParseDERSignature(sigBytes) + signature, err = ecdsa.ParseDERSignature(sigBytes) } else { - signature, err = btcec.ParseSignature(sigBytes) + signature, err = ecdsa.ParseSignature(sigBytes) } if err != nil { vm.dstack.PushBool(false) @@ -1989,7 +1990,7 @@ func opcodeCheckSigVerify(op *opcode, data []byte, vm *Engine) error { // the same signature multiple times when verifying a multisig. type parsedSigInfo struct { signature []byte - parsedSignature *btcec.Signature + parsedSignature *ecdsa.Signature parsed bool } @@ -2134,7 +2135,7 @@ func opcodeCheckMultiSig(op *opcode, data []byte, 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 @@ -2148,9 +2149,9 @@ func opcodeCheckMultiSig(op *opcode, data []byte, vm *Engine) error { if vm.hasFlag(ScriptVerifyStrictEncoding) || vm.hasFlag(ScriptVerifyDERSignatures) { - parsedSig, err = btcec.ParseDERSignature(signature) + parsedSig, err = ecdsa.ParseDERSignature(signature) } else { - parsedSig, err = btcec.ParseSignature(signature) + parsedSig, err = ecdsa.ParseSignature(signature) } sigInfo.parsed = true if err != nil { diff --git a/txscript/pkscript.go b/txscript/pkscript.go index c5dd2a12a2..d89c244e41 100644 --- a/txscript/pkscript.go +++ b/txscript/pkscript.go @@ -6,6 +6,7 @@ import ( "fmt" "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/btcec/v2/ecdsa" "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/wire" "github.com/btcsuite/btcd/btcutil" @@ -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: diff --git a/txscript/sigcache.go b/txscript/sigcache.go index 959240c04d..fc9f627127 100644 --- a/txscript/sigcache.go +++ b/txscript/sigcache.go @@ -8,6 +8,7 @@ import ( "sync" "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/btcec/v2/ecdsa" "github.com/btcsuite/btcd/chaincfg/chainhash" ) @@ -18,7 +19,7 @@ import ( // match. In the occasion that two sigHashes collide, the newer sigHash will // simply overwrite the existing entry. type sigCacheEntry struct { - sig *btcec.Signature + sig *ecdsa.Signature pubKey *btcec.PublicKey } @@ -55,7 +56,7 @@ 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 *ecdsa.Signature, pubKey *btcec.PublicKey) bool { s.RLock() entry, ok := s.validSigs[sigHash] s.RUnlock() @@ -70,7 +71,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 *ecdsa.Signature, pubKey *btcec.PublicKey) { s.Lock() defer s.Unlock() diff --git a/txscript/sigcache_test.go b/txscript/sigcache_test.go index f9e9f270ef..d0a3c4b973 100644 --- a/txscript/sigcache_test.go +++ b/txscript/sigcache_test.go @@ -9,13 +9,14 @@ import ( "testing" "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) { +func genRandomSig() (*chainhash.Hash, *ecdsa.Signature, *btcec.PublicKey, error) { privKey, err := btcec.NewPrivateKey() if err != nil { return nil, nil, nil, err @@ -26,7 +27,7 @@ func genRandomSig() (*chainhash.Hash, *btcec.Signature, *btcec.PublicKey, error) return nil, nil, nil, err } - sig := btcec.Sign(privKey, msgHash[:]) + sig := ecdsa.Sign(privKey, msgHash[:]) return &msgHash, sig, privKey.PubKey(), nil } @@ -46,7 +47,7 @@ func TestSigCacheAddExists(t *testing.T) { sigCache.Add(*msg1, sig1, key1) // The previously added triplet should now be found within the sigcache. - sig1Copy, _ := btcec.ParseSignature(sig1.Serialize()) + sig1Copy, _ := ecdsa.ParseSignature(sig1.Serialize()) key1Copy, _ := btcec.ParsePubKey(key1.SerializeCompressed()) if !sigCache.Exists(*msg1, sig1Copy, key1Copy) { t.Errorf("previously added item not found in signature cache") @@ -70,7 +71,7 @@ func TestSigCacheAddEvictEntry(t *testing.T) { sigCache.Add(*msg, sig, key) - sigCopy, err := btcec.ParseSignature(sig.Serialize()) + sigCopy, err := ecdsa.ParseSignature(sig.Serialize()) if err != nil { t.Fatalf("unable to parse sig: %v", err) } @@ -105,7 +106,7 @@ func TestSigCacheAddEvictEntry(t *testing.T) { } // The entry added above should be found within the sigcache. - sigNewCopy, _ := btcec.ParseSignature(sigNew.Serialize()) + sigNewCopy, _ := ecdsa.ParseSignature(sigNew.Serialize()) keyNewCopy, _ := btcec.ParsePubKey(keyNew.SerializeCompressed()) if !sigCache.Exists(*msgNew, sigNewCopy, keyNewCopy) { t.Fatalf("previously added item not found in signature cache") @@ -128,7 +129,7 @@ func TestSigCacheAddMaxEntriesZeroOrNegative(t *testing.T) { sigCache.Add(*msg1, sig1, key1) // The generated triplet should not be found. - sig1Copy, _ := btcec.ParseSignature(sig1.Serialize()) + sig1Copy, _ := ecdsa.ParseSignature(sig1.Serialize()) key1Copy, _ := btcec.ParsePubKey(key1.SerializeCompressed()) if sigCache.Exists(*msg1, sig1Copy, key1Copy) { t.Errorf("previously added signature found in sigcache, but" + diff --git a/txscript/sign.go b/txscript/sign.go index e5335ce366..f52214f371 100644 --- a/txscript/sign.go +++ b/txscript/sign.go @@ -7,6 +7,8 @@ package txscript import ( "errors" + "github.com/btcsuite/btcd/btcec/v2/ecdsa" + "github.com/btcsuite/btcd/btcec/v2" "github.com/btcsuite/btcd/btcutil" "github.com/btcsuite/btcd/chaincfg" @@ -27,7 +29,7 @@ func RawTxInWitnessSignature(tx *wire.MsgTx, sigHashes *TxSigHashes, idx int, return nil, err } - signature := btcec.Sign(key, hash) + signature := ecdsa.Sign(key, hash) return append(signature.Serialize(), byte(hashType)), nil } @@ -69,7 +71,7 @@ func RawTxInSignature(tx *wire.MsgTx, idx int, subScript []byte, if err != nil { return nil, err } - signature := btcec.Sign(key, hash) + signature := ecdsa.Sign(key, hash) return append(signature.Serialize(), byte(hashType)), nil } @@ -263,7 +265,7 @@ sigLoop: tSig := sig[:len(sig)-1] hashType := SigHashType(sig[len(sig)-1]) - pSig, err := btcec.ParseDERSignature(tSig) + pSig, err := ecdsa.ParseDERSignature(tSig) if err != nil { continue } From 3b3a6fc671b9e1cbc54d8c89aa7dfaf287fc7e75 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Sat, 4 Dec 2021 16:01:16 -0800 Subject: [PATCH 285/419] chaincfg: add BIP-340 tagged hash implementation In this commit, we add an implementation of the BIP-340 tagged hash scheme. This initial version can be optimized quite a bit, for example, we can hard code the output of frequently used `sha256(tag)` values and save two `sha256` invocations. --- chaincfg/chainhash/hash.go | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/chaincfg/chainhash/hash.go b/chaincfg/chainhash/hash.go index 2b1cec022b..2859680fe8 100644 --- a/chaincfg/chainhash/hash.go +++ b/chaincfg/chainhash/hash.go @@ -6,6 +6,7 @@ package chainhash import ( + "crypto/sha256" "encoding/hex" "fmt" ) @@ -80,6 +81,32 @@ 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). +// +// TODO(roasbeef): add fast paths for common known tags +func TaggedHash(tag []byte, msgs ...[]byte) *Hash { + 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. From d6d38ad4aeff5af5e32dd0197b36809c957463a7 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Sat, 4 Dec 2021 16:03:12 -0800 Subject: [PATCH 286/419] btcec/v2/schnorr: add initial BIP-340 schnorr sig implementation In this commit, we add an initial implementation of BIP-340. Mirroring the recently added `ecsda` package, we create a new `schnorr` package with a unique `Signature` type and `ParsePubkey` function. The new `Signature` type implements the fixed-sized 64-byte signatures, and the `ParsePubkey` method only accepts pubkeys that are 32-bytes in length, with an implicit sign byte. The signing implementation by default, deviates from BIP-340 as it opts to use rfc6979 deterministic signatures by default, which means callers don't need to always pass in their own `auxNonce` randomness. A set of functional arguments allows callers to pass in their own value, which is the way all the included test vectors function. The other optional functional argument added is the `FastSign` option that allows callers to skip the final step of verifying each signature they generate. --- btcec/schnorr/error.go | 25 ++ btcec/schnorr/pubkey.go | 49 +++ btcec/schnorr/signature.go | 556 ++++++++++++++++++++++++++++++++ btcec/schnorr/signature_test.go | 256 +++++++++++++++ btcutil/go.sum | 17 - 5 files changed, 886 insertions(+), 17 deletions(-) create mode 100644 btcec/schnorr/error.go create mode 100644 btcec/schnorr/pubkey.go create mode 100644 btcec/schnorr/signature.go create mode 100644 btcec/schnorr/signature_test.go 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/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..d6be341a8e --- /dev/null +++ b/btcec/schnorr/signature.go @@ -0,0 +1,556 @@ +// 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" + "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 ( + tagHashAux = []byte("BIP0340/aux") + + tagHashNonce = []byte("BIP0340/nonce") + + tagHashChallenge = []byte("BIP0340/challenge") +) + +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( + tagHashChallenge, 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( + tagHashChallenge, 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(tagHashAux, (*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( + tagHashNonce, 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/btcutil/go.sum b/btcutil/go.sum index ac96abce84..e67b3253c3 100644 --- a/btcutil/go.sum +++ b/btcutil/go.sum @@ -16,20 +16,3 @@ github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK 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/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/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -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-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -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/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= From 0bbc8310402a239b7e8adccce9950bafd095cb3e Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Wed, 26 Jan 2022 17:26:25 -0800 Subject: [PATCH 287/419] build: run go mod tidy to refresh go.sum for btcutil --- btcutil/go.sum | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/btcutil/go.sum b/btcutil/go.sum index e67b3253c3..ac96abce84 100644 --- a/btcutil/go.sum +++ b/btcutil/go.sum @@ -16,3 +16,20 @@ github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK 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/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/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +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-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +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/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= From 973fb3760099752cf242f1344036ceca7ba6131d Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Mon, 31 Jan 2022 14:39:32 -0800 Subject: [PATCH 288/419] btcec/schnorr: add benchmarks for sign/verify Benchmarks run w/o fast sign (always verify after you generate a sig): ``` goos: darwin goarch: amd64 pkg: github.com/btcsuite/btcd/btcec/v2/schnorr cpu: VirtualApple @ 2.50GHz BenchmarkSigVerify-8 8000 152468 ns/op 960 B/op 16 allocs/op BenchmarkSign-8 4939 215489 ns/op 1408 B/op 27 allocs/op BenchmarkSignRfc6979-8 5106 217416 ns/op 2129 B/op 37 allocs/op PASS ok github.com/btcsuite/btcd/btcec/v2/schnorr 4.629s ``` Benchmarks w/ fast sign: ``` goos: darwin goarch: amd64 pkg: github.com/btcsuite/btcd/btcec/v2/schnorr cpu: VirtualApple @ 2.50GHz BenchmarkSigVerify-8 7982 142826 ns/op 960 B/op 16 allocs/op BenchmarkSign-8 18210 65908 ns/op 496 B/op 12 allocs/op BenchmarkSignRfc6979-8 16537 78161 ns/op 1216 B/op 22 allocs/op PASS ok github.com/btcsuite/btcd/btcec/v2/schnorr 5.418s ``` --- btcec/schnorr/bench_test.go | 169 ++++++++++++++++++++++++++++++++++++ 1 file changed, 169 insertions(+) create mode 100644 btcec/schnorr/bench_test.go 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 +} From b7a4622a6b75b412be1e0acf72f2081eb4b19957 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Mon, 31 Jan 2022 14:54:12 -0800 Subject: [PATCH 289/419] btcec+chaincfg: use pre-computed tag hash values In this commit, we optimize our signature implementation slightly, by defining pre-computed sha256(tag) variables for the commonly used values. If a tag matches this, then we'll use that hash value to avoid an extra round of hashing. --- btcec/schnorr/signature.go | 18 ++++++------------ chaincfg/chainhash/hash.go | 28 +++++++++++++++++++++++++--- 2 files changed, 31 insertions(+), 15 deletions(-) diff --git a/btcec/schnorr/signature.go b/btcec/schnorr/signature.go index d6be341a8e..ed4b9cb5bf 100644 --- a/btcec/schnorr/signature.go +++ b/btcec/schnorr/signature.go @@ -22,14 +22,6 @@ const ( scalarSize = 32 ) -var ( - tagHashAux = []byte("BIP0340/aux") - - tagHashNonce = []byte("BIP0340/nonce") - - tagHashChallenge = []byte("BIP0340/challenge") -) - var ( // rfc6979ExtraDataV0 is the extra data to feed to RFC6979 when // generating the deterministic nonce for the BIP-340 scheme. This @@ -183,7 +175,7 @@ func schnorrVerify(sig *Signature, hash []byte, pubKeyBytes []byte) error { pBytes := SerializePubKey(pubKey) commitment := chainhash.TaggedHash( - tagHashChallenge, rBytes[:], pBytes, hash, + chainhash.TagBIP0340Challenge, rBytes[:], pBytes, hash, ) var e btcec.ModNScalar @@ -325,7 +317,7 @@ func schnorrSign(privKey, nonce *btcec.ModNScalar, pubKey *btcec.PublicKey, hash pBytes := SerializePubKey(pubKey) commitment := chainhash.TaggedHash( - tagHashChallenge, rBytes[:], pBytes, hash, + chainhash.TagBIP0340Challenge, rBytes[:], pBytes, hash, ) var e btcec.ModNScalar @@ -492,7 +484,9 @@ func Sign(privKey *btcec.PrivateKey, hash []byte, // // t = bytes(d) xor tagged_hash("BIP0340/aux", a) privBytes := privKeyScalar.Bytes() - t := chainhash.TaggedHash(tagHashAux, (*opts.authNonce)[:]) + t := chainhash.TaggedHash( + chainhash.TagBIP0340Aux, (*opts.authNonce)[:], + ) for i := 0; i < len(t); i++ { t[i] ^= privBytes[i] } @@ -504,7 +498,7 @@ func Sign(privKey *btcec.PrivateKey, hash []byte, // 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( - tagHashNonce, t[:], pubKeyBytes[1:], hash, + chainhash.TagBIP0340Nonce, t[:], pubKeyBytes[1:], hash, ) // Step 8. diff --git a/chaincfg/chainhash/hash.go b/chaincfg/chainhash/hash.go index 2859680fe8..b7a2d8a7f8 100644 --- a/chaincfg/chainhash/hash.go +++ b/chaincfg/chainhash/hash.go @@ -17,6 +17,25 @@ 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") + + // 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), + } +) + // 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) @@ -84,10 +103,13 @@ func NewHash(newHash []byte) (*Hash, error) { // 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). -// -// TODO(roasbeef): add fast paths for common known tags func TaggedHash(tag []byte, msgs ...[]byte) *Hash { - shaTag := sha256.Sum256(tag) + // 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() From 0847f7a476df16757c4e35a45b966f89a8b9e2df Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Tue, 1 Feb 2022 12:51:19 -0800 Subject: [PATCH 290/419] build: update to btcec v2.1.0 This was the version tagged that created the new `ecdsa` and `schnorr` packages. Updating these pinned version lets importers properly use these packages and build. Things build as is since we use replace directive to point to the latest version _in the repo_ when we build. --- btcutil/go.mod | 2 +- btcutil/psbt/go.mod | 2 +- go.mod | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/btcutil/go.mod b/btcutil/go.mod index 36d669b06e..d3e460e53d 100644 --- a/btcutil/go.mod +++ b/btcutil/go.mod @@ -5,7 +5,7 @@ go 1.16 require ( github.com/aead/siphash v1.0.1 github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c - github.com/btcsuite/btcd/btcec/v2 v2.0.0 + github.com/btcsuite/btcd/btcec/v2 v2.1.0 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 diff --git a/btcutil/psbt/go.mod b/btcutil/psbt/go.mod index fbd9f1b3c2..7b07854505 100644 --- a/btcutil/psbt/go.mod +++ b/btcutil/psbt/go.mod @@ -4,7 +4,7 @@ go 1.17 require ( github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c - github.com/btcsuite/btcd/btcec/v2 v2.0.0 + github.com/btcsuite/btcd/btcec/v2 v2.1.0 github.com/btcsuite/btcd/btcutil v1.0.0 github.com/davecgh/go-spew v1.1.1 ) diff --git a/go.mod b/go.mod index 7ed1214d86..cdd5a0d89f 100644 --- a/go.mod +++ b/go.mod @@ -1,7 +1,7 @@ module github.com/btcsuite/btcd require ( - github.com/btcsuite/btcd/btcec/v2 v2.0.0 + github.com/btcsuite/btcd/btcec/v2 v2.1.0 github.com/btcsuite/btcd/btcutil v1.0.0 github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd From 342f4f8845c80c0d9e66b49aa824e6eefc46ad55 Mon Sep 17 00:00:00 2001 From: eugene Date: Fri, 4 Feb 2022 15:33:12 -0500 Subject: [PATCH 291/419] Revert "reduce redundant memory allocatio - resolves btcsuite/btcd#1699" This reverts commit 780cc0889fd2f326e4a2a9b513d8d30ff37e0cd2. --- connmgr/tor.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/connmgr/tor.go b/connmgr/tor.go index a2e512dba1..2b22ae51f2 100644 --- a/connmgr/tor.go +++ b/connmgr/tor.go @@ -76,7 +76,7 @@ func TorLookupIP(host, proxy string) ([]net.IP, error) { return nil, ErrTorUnrecognizedAuthMethod } - buf = make([]byte, 6+len(host)) + buf = make([]byte, 7+len(host)) buf[0] = 5 // protocol version buf[1] = '\xF0' // Tor Resolve buf[2] = 0 // reserved From 7572beb481dddd7f572c42e0305afcdc69af6d61 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Fri, 4 Feb 2022 15:44:53 -0800 Subject: [PATCH 292/419] build: retract bogus tags from btcd fork Fixes https://github.com/btcsuite/btcd/issues/1791. --- btcec/go.sum | 4 ++-- btcutil/go.sum | 2 +- btcutil/psbt/go.mod | 2 +- go.mod | 34 +++++++++++++++++++++++++++++++++- 4 files changed, 37 insertions(+), 5 deletions(-) diff --git a/btcec/go.sum b/btcec/go.sum index dcbbc98cc5..8ee9102772 100644 --- a/btcec/go.sum +++ b/btcec/go.sum @@ -1,6 +1,6 @@ github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/btcsuite/btcd/btcec/v2 v2.0.0/go.mod h1:vu+77Lro3alBlmsmlDnkZtgGiNo6OBwMHSb1XTGDwGo= -github.com/btcsuite/btcd/btcutil v1.0.0/go.mod h1:Uoxwv0pqYWhD//tfTiipkxNfdhG9UrLwaeswfjfdF0A= +github.com/btcsuite/btcd/btcec/v2 v2.1.0/go.mod h1:2VzYrv4Gm4apmbVVsSq5bqf1Ec8v56E48Vt0Y/umPgA= +github.com/btcsuite/btcd/btcutil v1.1.0/go.mod h1:5OapHB7A2hBBWLm48mmw4MOHNJCcUBTwmWH/0Jn8VHE= 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/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= diff --git a/btcutil/go.sum b/btcutil/go.sum index ac96abce84..823b9bb378 100644 --- a/btcutil/go.sum +++ b/btcutil/go.sum @@ -1,6 +1,6 @@ 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/btcutil v1.0.0/go.mod h1:Uoxwv0pqYWhD//tfTiipkxNfdhG9UrLwaeswfjfdF0A= +github.com/btcsuite/btcd/btcutil v1.1.0/go.mod h1:5OapHB7A2hBBWLm48mmw4MOHNJCcUBTwmWH/0Jn8VHE= 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= diff --git a/btcutil/psbt/go.mod b/btcutil/psbt/go.mod index 7b07854505..3897bf9916 100644 --- a/btcutil/psbt/go.mod +++ b/btcutil/psbt/go.mod @@ -5,7 +5,7 @@ go 1.17 require ( github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c github.com/btcsuite/btcd/btcec/v2 v2.1.0 - github.com/btcsuite/btcd/btcutil v1.0.0 + github.com/btcsuite/btcd/btcutil v1.1.0 github.com/davecgh/go-spew v1.1.1 ) diff --git a/go.mod b/go.mod index cdd5a0d89f..2b88125054 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,7 @@ module github.com/btcsuite/btcd require ( github.com/btcsuite/btcd/btcec/v2 v2.1.0 - github.com/btcsuite/btcd/btcutil v1.0.0 + github.com/btcsuite/btcd/btcutil v1.1.0 github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd github.com/btcsuite/goleveldb v1.0.0 @@ -26,4 +26,36 @@ replace github.com/btcsuite/btcd/btcutil => ./btcutil replace github.com/btcsuite/btcd/btcec/v2 => ./btcec +// 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.17 From 2ce1c60ee4a1c9cd66022a3d85399408c24d92d7 Mon Sep 17 00:00:00 2001 From: Calvin Kim Date: Wed, 22 Dec 2021 03:16:25 +0900 Subject: [PATCH 293/419] mempool/estimatefee: Fix negative index bug Fixes a negative index bug that makes the node crash on chain reorganizations. The bug is detailed in github.com/btcsuite/btcd/issues/1660. A better design than just skipping the transaction would make the fee estimator more accurate and that should implemented at a later date. --- mempool/estimatefee.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/mempool/estimatefee.go b/mempool/estimatefee.go index f3a7cfe95b..a71ce42f12 100644 --- a/mempool/estimatefee.go +++ b/mempool/estimatefee.go @@ -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 } From 1ec4a1e77ffb1c64fea6a87112ba58db9fda6cfe Mon Sep 17 00:00:00 2001 From: eugene Date: Thu, 3 Feb 2022 13:38:41 -0500 Subject: [PATCH 294/419] wire: netaddressv2 and tests --- wire/netaddressv2.go | 588 ++++++++++++++++++++++++++++++++++++++ wire/netaddressv2_test.go | 285 ++++++++++++++++++ 2 files changed, 873 insertions(+) create mode 100644 wire/netaddressv2.go create mode 100644 wire/netaddressv2_test.go 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()) + } + } +} From 201c0836ec9a0ed3523a2eaee87a8370129702a1 Mon Sep 17 00:00:00 2001 From: eugene Date: Thu, 3 Feb 2022 14:02:46 -0500 Subject: [PATCH 295/419] multi: update addrmgr, server to use NetAddressV2 instead of legacy --- addrmgr/addrmanager.go | 182 +++++++++++++++++---------- addrmgr/addrmanager_internal_test.go | 32 +++-- addrmgr/addrmanager_test.go | 175 ++++++++++++++++++-------- addrmgr/internal_test.go | 2 +- addrmgr/knownaddress.go | 8 +- addrmgr/knownaddress_test.go | 18 +-- addrmgr/network.go | 55 +++++--- addrmgr/network_test.go | 12 +- connmgr/seed.go | 6 +- rpcadapters.go | 2 +- rpcserver.go | 4 +- server.go | 80 ++++++++---- 12 files changed, 381 insertions(+), 195 deletions(-) diff --git a/addrmgr/addrmanager.go b/addrmgr/addrmanager.go index 4c737b937e..bdfe9094ce 100644 --- a/addrmgr/addrmanager.go +++ b/addrmgr/addrmanager.go @@ -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) { @@ -296,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 @@ -318,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{} @@ -550,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 { @@ -599,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() @@ -611,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() @@ -635,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 } @@ -664,7 +664,7 @@ func (a *AddrManager) NeedMoreAddresses() bool { // 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 @@ -686,7 +686,7 @@ 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 { +func (a *AddrManager) getAddresses() []*wire.NetAddressV2 { a.mtx.RLock() defer a.mtx.RUnlock() @@ -695,7 +695,7 @@ func (a *AddrManager) getAddresses() []*wire.NetAddress { return nil } - addrs := make([]*wire.NetAddress, 0, addrIndexLen) + addrs := make([]*wire.NetAddressV2, 0, addrIndexLen) for _, v := range a.addrIndex { addrs = append(addrs, v.na) } @@ -722,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 { @@ -745,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 @@ -842,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() @@ -869,7 +885,7 @@ func (a *AddrManager) Attempt(addr *wire.NetAddress) { // 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() @@ -894,7 +910,7 @@ func (a *AddrManager) Connected(addr *wire.NetAddress) { // 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() @@ -983,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() @@ -1005,9 +1021,11 @@ func (a *AddrManager) SetServices(addr *wire.NetAddress, services wire.ServiceFl // 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() @@ -1030,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 @@ -1045,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 @@ -1083,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 } @@ -1091,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 } @@ -1109,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 || @@ -1126,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 5a7674f45b..b045365508 100644 --- a/addrmgr/knownaddress.go +++ b/addrmgr/knownaddress.go @@ -15,8 +15,8 @@ import ( // to determine how viable an address is. type KnownAddress struct { mtx sync.RWMutex // na and lastattempt - na *wire.NetAddress - srcAddr *wire.NetAddress + na *wire.NetAddressV2 + srcAddr *wire.NetAddressV2 attempts int lastattempt time.Time lastsuccess time.Time @@ -24,9 +24,9 @@ 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 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/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/rpcadapters.go b/rpcadapters.go index 02d33710ac..487574a81c 100644 --- a/rpcadapters.go +++ b/rpcadapters.go @@ -228,7 +228,7 @@ func (cm *rpcConnManager) RelayTransactions(txns []*mempool.TxDesc) { // // This function is safe for concurrent access and is part of the // rpcserverConnManager interface implementation. -func (cm *rpcConnManager) NodeAddresses() []*wire.NetAddress { +func (cm *rpcConnManager) NodeAddresses() []*wire.NetAddressV2 { return cm.server.addrManager.AddressCache() } diff --git a/rpcserver.go b/rpcserver.go index b8012b2b01..4bbeb29ae9 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -2518,7 +2518,7 @@ func handleGetNodeAddresses(s *rpcServer, cmd interface{}, closeChan <-chan stru address := &btcjson.GetNodeAddressesResult{ Time: node.Timestamp.Unix(), Services: uint64(node.Services), - Address: node.IP.String(), + Address: node.Addr.String(), Port: node.Port, } addresses = append(addresses, address) @@ -4524,7 +4524,7 @@ type rpcserverConnManager interface { // NodeAddresses returns an array consisting node addresses which can // potentially be used to find new nodes in the network. - NodeAddresses() []*wire.NetAddress + NodeAddresses() []*wire.NetAddressV2 } // rpcserverSyncManager represents a sync manager for use with the RPC server. diff --git a/server.go b/server.go index 45bfb17ee4..2b5cc0ff42 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/btcd/btcutil" - "github.com/btcsuite/btcd/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,45 @@ 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) { 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 @@ -1272,6 +1295,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() { @@ -1286,8 +1310,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 @@ -1295,7 +1325,7 @@ 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(msg.AddrList, sp.NA()) + sp.server.addrManager.AddAddresses(addrs, sp.NA()) } // OnRead is invoked when a peer receives a message and it is used to update @@ -1700,7 +1730,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) } } @@ -2152,7 +2182,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. @@ -2543,8 +2573,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? @@ -3117,7 +3147,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 { From cb6f21b598e90c8b1ea55e569b838797e9b37efe Mon Sep 17 00:00:00 2001 From: eugene Date: Thu, 3 Feb 2022 14:04:43 -0500 Subject: [PATCH 296/419] peer+wire: add addrv2 message, protocol negotiation --- peer/peer.go | 231 ++++++++++++++++++++++++++------ peer/peer_test.go | 290 ++++++++++++++++++++++++++++++++++++----- server.go | 68 ++++++++++ wire/message.go | 18 ++- wire/message_test.go | 4 +- wire/msgaddrv2.go | 102 +++++++++++++++ wire/msgaddrv2_test.go | 73 +++++++++++ wire/protocol.go | 9 +- 8 files changed, 714 insertions(+), 81 deletions(-) create mode 100644 wire/msgaddrv2.go create mode 100644 wire/msgaddrv2_test.go diff --git a/peer/peer.go b/peer/peer.go index a7b925802f..6d34c5f822 100644 --- a/peer/peer.go +++ b/peer/peer.go @@ -29,7 +29,7 @@ import ( 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. @@ -102,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) @@ -197,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 @@ -399,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 @@ -445,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 @@ -455,6 +461,7 @@ type Peer struct { sendHeadersPreferred bool // peer sent a sendheaders message verAckReceived bool witnessEnabled bool + sendAddrV2 bool wireEncoding wire.MessageEncoding @@ -585,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() @@ -820,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 @@ -856,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. // @@ -1363,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. @@ -1404,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) @@ -1414,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 { @@ -1986,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() @@ -2016,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 @@ -2032,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 @@ -2040,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) } @@ -2092,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 @@ -2109,12 +2223,22 @@ 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) } // negotiateOutboundProtocol performs the negotiation protocol for an outbound @@ -2123,8 +2247,11 @@ func (p *Peer) negotiateInboundProtocol() error { // // 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 @@ -2134,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. @@ -2201,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() { @@ -2267,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 @@ -2289,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 dd7f36aa3a..9df90c233d 100644 --- a/peer/peer_test.go +++ b/peer/peer_test.go @@ -289,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 { @@ -315,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 { @@ -359,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) { @@ -447,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", @@ -456,12 +458,7 @@ func TestPeerListeners(t *testing.T) { 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) { @@ -473,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 { @@ -597,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 { @@ -881,17 +891,17 @@ func TestDuplicateVersionMsg(t *testing.T) { 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 { @@ -947,17 +957,16 @@ func TestUpdateLastBlockHeight(t *testing.T) { remotePeerCfg.NewestBlock = func() (*chainhash.Hash, int32, error) { return &chainhash.Hash{}, remotePeerHeight, nil } - 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"}, - ) - localPeer, err := peer.NewOutboundPeer(&peerCfg, inConn.laddr) + localPeer, err := peer.NewOutboundPeer(&peerCfg, "10.0.0.2:8333") if err != nil { t.Fatalf("NewOutboundPeer: unexpected err: %v\n", err) } - localPeer.AssociateConnection(outConn) inPeer := peer.NewInboundPeer(&remotePeerCfg) - inPeer.AssociateConnection(inConn) + + 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++ { @@ -989,3 +998,214 @@ func TestUpdateLastBlockHeight(t *testing.T) { 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/server.go b/server.go index 2b5cc0ff42..5cef434292 100644 --- a/server.go +++ b/server.go @@ -344,6 +344,34 @@ func (sp *serverPeer) relayTxDisabled() bool { // 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 { // Filter addresses already known to the peer. @@ -1328,6 +1356,45 @@ func (sp *serverPeer) OnAddr(_ *peer.Peer, msg *wire.MsgAddr) { 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()) +} + // OnRead is invoked when a peer receives a message and it is used to update // the bytes received by the server. func (sp *serverPeer) OnRead(_ *peer.Peer, bytesRead int, msg wire.Message, err error) { @@ -2074,6 +2141,7 @@ 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, diff --git a/wire/message.go b/wire/message.go index 6d3147a81d..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" @@ -78,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 @@ -109,6 +117,9 @@ func makeEmptyMessage(command string) (Message, error) { case CmdAddr: msg = &MsgAddr{} + case CmdAddrV2: + msg = &MsgAddrV2{} + case CmdGetBlocks: msg = &MsgGetBlocks{} @@ -185,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 } @@ -378,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 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/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. From 87e3d7e2786b7c5af66b99cfde6be3e3e87035a5 Mon Sep 17 00:00:00 2001 From: Anup Chenthamarakshan Date: Tue, 7 Dec 2021 21:47:27 -0800 Subject: [PATCH 297/419] Replace github.com/btcsuite/goleveldb with github.com/syndtr/goleveldb --- btcec/go.sum | 51 +++++++++++++++++++++++++++--- btcutil/go.sum | 55 ++++++++++++++++++++++++++++----- btcutil/psbt/go.sum | 51 +++++++++++++++++++++++++++--- database/ffldb/db.go | 14 ++++----- database/ffldb/dbcache.go | 6 ++-- database/ffldb/ldbtreapiter.go | 4 +-- database/ffldb/whitebox_test.go | 4 +-- go.mod | 4 +-- go.sum | 6 ++-- 9 files changed, 160 insertions(+), 35 deletions(-) diff --git a/btcec/go.sum b/btcec/go.sum index 8ee9102772..3b9835fee9 100644 --- a/btcec/go.sum +++ b/btcec/go.sum @@ -3,8 +3,6 @@ github.com/btcsuite/btcd/btcec/v2 v2.1.0/go.mod h1:2VzYrv4Gm4apmbVVsSq5bqf1Ec8v5 github.com/btcsuite/btcd/btcutil v1.1.0/go.mod h1:5OapHB7A2hBBWLm48mmw4MOHNJCcUBTwmWH/0Jn8VHE= 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/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= -github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= 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.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= @@ -14,17 +12,60 @@ github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn 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/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +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/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/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +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/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/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +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= diff --git a/btcutil/go.sum b/btcutil/go.sum index 823b9bb378..f6c63a9002 100644 --- a/btcutil/go.sum +++ b/btcutil/go.sum @@ -4,10 +4,6 @@ github.com/btcsuite/btcd/btcutil v1.1.0/go.mod h1:5OapHB7A2hBBWLm48mmw4MOHNJCcUB 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/goleveldb v1.0.0 h1:Tvd0BfvqX9o823q1j2UZ/epQo09eJh6dTcRp79ilIN4= -github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= -github.com/btcsuite/snappy-go v1.0.0 h1:ZxaA6lo2EpxGddsA8JwWOcxlzRybb444sgmeJQMJGQE= -github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= 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.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= @@ -17,19 +13,64 @@ github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn 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/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +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/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-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +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/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/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +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= diff --git a/btcutil/psbt/go.sum b/btcutil/psbt/go.sum index 08c53e8b09..876c6e94e4 100644 --- a/btcutil/psbt/go.sum +++ b/btcutil/psbt/go.sum @@ -2,8 +2,6 @@ github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBA 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/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= -github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= 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.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= @@ -13,18 +11,61 @@ github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn 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/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +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/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-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +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/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/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +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= diff --git a/database/ffldb/db.go b/database/ffldb/db.go index ee36b5b006..f571d3889b 100644 --- a/database/ffldb/db.go +++ b/database/ffldb/db.go @@ -19,13 +19,13 @@ import ( "github.com/btcsuite/btcd/database/internal/treap" "github.com/btcsuite/btcd/wire" "github.com/btcsuite/btcd/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/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 ( 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/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 1db69e4215..f2eae8ce09 100644 --- a/database/ffldb/whitebox_test.go +++ b/database/ffldb/whitebox_test.go @@ -21,8 +21,8 @@ import ( "github.com/btcsuite/btcd/database" "github.com/btcsuite/btcd/wire" "github.com/btcsuite/btcd/btcutil" - "github.com/btcsuite/goleveldb/leveldb" - ldberrors "github.com/btcsuite/goleveldb/leveldb/errors" + "github.com/syndtr/goleveldb/leveldb" + ldberrors "github.com/syndtr/goleveldb/leveldb/errors" ) var ( diff --git a/go.mod b/go.mod index 2b88125054..7158ca2477 100644 --- a/go.mod +++ b/go.mod @@ -5,20 +5,20 @@ require ( github.com/btcsuite/btcd/btcutil v1.1.0 github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd - github.com/btcsuite/goleveldb v1.0.0 github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792 github.com/btcsuite/winsvc v1.0.0 github.com/davecgh/go-spew v1.1.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/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 ) require ( github.com/aead/siphash v1.0.1 // indirect - github.com/btcsuite/snappy-go v1.0.0 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect + github.com/golang/snappy v0.0.4 // indirect github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23 // indirect ) diff --git a/go.sum b/go.sum index 2645b3566c..ef7c066684 100644 --- a/go.sum +++ b/go.sum @@ -5,9 +5,7 @@ github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f h1:bAs4lUbRJpnnkd9 github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= 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 v1.0.0 h1:Tvd0BfvqX9o823q1j2UZ/epQo09eJh6dTcRp79ilIN4= github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= -github.com/btcsuite/snappy-go v1.0.0 h1:ZxaA6lo2EpxGddsA8JwWOcxlzRybb444sgmeJQMJGQE= github.com/btcsuite/snappy-go v1.0.0/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= @@ -31,6 +29,8 @@ github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrU 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= @@ -51,6 +51,8 @@ github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5 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/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= From 7cc824e9b5768375d8d0770258f35bd67845698e Mon Sep 17 00:00:00 2001 From: Oliver Gugger Date: Sat, 12 Feb 2022 22:08:08 +0100 Subject: [PATCH 298/419] chainhash: make module --- chaincfg/chainhash/go.mod | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 chaincfg/chainhash/go.mod 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 From 4ad74cd4c261ab6cbb81b9ee441fc5b0e83be58b Mon Sep 17 00:00:00 2001 From: Oliver Gugger Date: Tue, 8 Mar 2022 16:09:59 +0100 Subject: [PATCH 299/419] mod: use chaincfg/chainhash module --- btcec/go.mod | 6 +----- btcutil/go.mod | 1 + btcutil/psbt/go.mod | 1 + go.mod | 1 + 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/btcec/go.mod b/btcec/go.mod index 53e4a1f5cb..bc8cf721e3 100644 --- a/btcec/go.mod +++ b/btcec/go.mod @@ -3,13 +3,9 @@ module github.com/btcsuite/btcd/btcec/v2 go 1.17 require ( - github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c + github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0 github.com/davecgh/go-spew v1.1.1 github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 ) require github.com/decred/dcrd/crypto/blake256 v1.0.0 // indirect - -// We depend on chainhash as is, so we need to replace to use the version of -// chainhash included in the version of btcd we're building in. -replace github.com/btcsuite/btcd => ../ diff --git a/btcutil/go.mod b/btcutil/go.mod index d3e460e53d..50fe915db3 100644 --- a/btcutil/go.mod +++ b/btcutil/go.mod @@ -6,6 +6,7 @@ require ( github.com/aead/siphash v1.0.1 github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c github.com/btcsuite/btcd/btcec/v2 v2.1.0 + github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0 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 diff --git a/btcutil/psbt/go.mod b/btcutil/psbt/go.mod index 3897bf9916..fbf3fe60f9 100644 --- a/btcutil/psbt/go.mod +++ b/btcutil/psbt/go.mod @@ -6,6 +6,7 @@ require ( github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c github.com/btcsuite/btcd/btcec/v2 v2.1.0 github.com/btcsuite/btcd/btcutil v1.1.0 + github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0 github.com/davecgh/go-spew v1.1.1 ) diff --git a/go.mod b/go.mod index 7158ca2477..d0825bf986 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module github.com/btcsuite/btcd require ( github.com/btcsuite/btcd/btcec/v2 v2.1.0 github.com/btcsuite/btcd/btcutil v1.1.0 + github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0 github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792 From 56dfa0f7e21b00b87d95bf3b28e490d4e57de292 Mon Sep 17 00:00:00 2001 From: Oliver Gugger Date: Tue, 8 Mar 2022 16:10:12 +0100 Subject: [PATCH 300/419] mod: add temporary replace --- btcec/go.mod | 5 +++++ btcutil/go.mod | 5 +++++ btcutil/psbt/go.mod | 5 +++++ go.mod | 5 +++++ 4 files changed, 20 insertions(+) diff --git a/btcec/go.mod b/btcec/go.mod index bc8cf721e3..55485cabcc 100644 --- a/btcec/go.mod +++ b/btcec/go.mod @@ -9,3 +9,8 @@ require ( ) require github.com/decred/dcrd/crypto/blake256 v1.0.0 // indirect + +// We depend on chainhash as is, so we need to replace to use the version of +// chainhash included in the version of btcd we're building in. +// TODO(guggero): Remove this as soon as we have a tagged version of chainhash. +replace github.com/btcsuite/btcd/chaincfg/chainhash => ../chaincfg/chainhash diff --git a/btcutil/go.mod b/btcutil/go.mod index 50fe915db3..142db484d5 100644 --- a/btcutil/go.mod +++ b/btcutil/go.mod @@ -16,3 +16,8 @@ require ( replace github.com/btcsuite/btcd/btcec/v2 => ../btcec replace github.com/btcsuite/btcd => ../ + +// We depend on chainhash as is, so we need to replace to use the version of +// chainhash included in the version of btcd we're building in. +// TODO(guggero): Remove this as soon as we have a tagged version of chainhash. +replace github.com/btcsuite/btcd/chaincfg/chainhash => ../chaincfg/chainhash diff --git a/btcutil/psbt/go.mod b/btcutil/psbt/go.mod index fbf3fe60f9..bd209d071c 100644 --- a/btcutil/psbt/go.mod +++ b/btcutil/psbt/go.mod @@ -21,3 +21,8 @@ replace github.com/btcsuite/btcd/btcec/v2 => ../../btcec replace github.com/btcsuite/btcd/btcutil => ../ replace github.com/btcsuite/btcd => ../.. + +// We depend on chainhash as is, so we need to replace to use the version of +// chainhash included in the version of btcd we're building in. +// TODO(guggero): Remove this as soon as we have a tagged version of chainhash. +replace github.com/btcsuite/btcd/chaincfg/chainhash => ../../chaincfg/chainhash diff --git a/go.mod b/go.mod index d0825bf986..a38e644d38 100644 --- a/go.mod +++ b/go.mod @@ -27,6 +27,11 @@ replace github.com/btcsuite/btcd/btcutil => ./btcutil replace github.com/btcsuite/btcd/btcec/v2 => ./btcec +// We depend on chainhash as is, so we need to replace to use the version of +// chainhash included in the version of btcd we're building in. +// TODO(guggero): Remove this as soon as we have a tagged version of chainhash. +replace github.com/btcsuite/btcd/chaincfg/chainhash => ./chaincfg/chainhash + // The retract statements below fixes an accidental push of the tags of a btcd // fork. retract ( From 46f5eec021208616a05691362458912caa2d16c1 Mon Sep 17 00:00:00 2001 From: Oliver Gugger Date: Tue, 8 Mar 2022 16:15:14 +0100 Subject: [PATCH 301/419] mod: bump btcec/v2 module version --- btcutil/go.mod | 2 +- btcutil/psbt/go.mod | 2 +- go.mod | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/btcutil/go.mod b/btcutil/go.mod index 142db484d5..b8de1c3ffd 100644 --- a/btcutil/go.mod +++ b/btcutil/go.mod @@ -5,7 +5,7 @@ go 1.16 require ( github.com/aead/siphash v1.0.1 github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c - github.com/btcsuite/btcd/btcec/v2 v2.1.0 + github.com/btcsuite/btcd/btcec/v2 v2.1.1 github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0 github.com/davecgh/go-spew v1.1.1 github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 diff --git a/btcutil/psbt/go.mod b/btcutil/psbt/go.mod index bd209d071c..ffd187018e 100644 --- a/btcutil/psbt/go.mod +++ b/btcutil/psbt/go.mod @@ -4,7 +4,7 @@ go 1.17 require ( github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c - github.com/btcsuite/btcd/btcec/v2 v2.1.0 + github.com/btcsuite/btcd/btcec/v2 v2.1.1 github.com/btcsuite/btcd/btcutil v1.1.0 github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0 github.com/davecgh/go-spew v1.1.1 diff --git a/go.mod b/go.mod index a38e644d38..77d930dd14 100644 --- a/go.mod +++ b/go.mod @@ -1,7 +1,7 @@ module github.com/btcsuite/btcd require ( - github.com/btcsuite/btcd/btcec/v2 v2.1.0 + github.com/btcsuite/btcd/btcec/v2 v2.1.1 github.com/btcsuite/btcd/btcutil v1.1.0 github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0 github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f From 999514c1fe1e3338c3f6f3597186726f7c08f343 Mon Sep 17 00:00:00 2001 From: Oliver Gugger Date: Tue, 8 Mar 2022 16:16:16 +0100 Subject: [PATCH 302/419] mod: add TODOs for removing local replaces --- btcutil/go.mod | 1 + btcutil/psbt/go.mod | 1 + go.mod | 1 + 3 files changed, 3 insertions(+) diff --git a/btcutil/go.mod b/btcutil/go.mod index b8de1c3ffd..e6451e4e7a 100644 --- a/btcutil/go.mod +++ b/btcutil/go.mod @@ -13,6 +13,7 @@ require ( golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 ) +// TODO(guggero): Remove this as soon as we have a tagged version of btcec/v2. replace github.com/btcsuite/btcd/btcec/v2 => ../btcec replace github.com/btcsuite/btcd => ../ diff --git a/btcutil/psbt/go.mod b/btcutil/psbt/go.mod index ffd187018e..7ae2dcb86d 100644 --- a/btcutil/psbt/go.mod +++ b/btcutil/psbt/go.mod @@ -16,6 +16,7 @@ require ( golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 // indirect ) +// TODO(guggero): Remove this as soon as we have a tagged version of btcec/v2. replace github.com/btcsuite/btcd/btcec/v2 => ../../btcec replace github.com/btcsuite/btcd/btcutil => ../ diff --git a/go.mod b/go.mod index 77d930dd14..e56d76e3e0 100644 --- a/go.mod +++ b/go.mod @@ -25,6 +25,7 @@ require ( replace github.com/btcsuite/btcd/btcutil => ./btcutil +// TODO(guggero): Remove this as soon as we have a tagged version of btcec/v2. replace github.com/btcsuite/btcd/btcec/v2 => ./btcec // We depend on chainhash as is, so we need to replace to use the version of From 3baa09f33e3c2ab3e2323ad4d04cbbaf150a56af Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Wed, 9 Mar 2022 18:53:47 -0800 Subject: [PATCH 303/419] build: update to btcec/v2.1.1 and chaincfg/chainhash/v1.00 --- btcec/go.mod | 5 ---- btcec/go.sum | 67 ++------------------------------------------- btcutil/go.mod | 8 ------ btcutil/go.sum | 5 ++++ btcutil/psbt/go.mod | 8 ------ btcutil/psbt/go.sum | 4 +++ go.mod | 8 ------ go.sum | 4 +++ 8 files changed, 15 insertions(+), 94 deletions(-) diff --git a/btcec/go.mod b/btcec/go.mod index 55485cabcc..bc8cf721e3 100644 --- a/btcec/go.mod +++ b/btcec/go.mod @@ -9,8 +9,3 @@ require ( ) require github.com/decred/dcrd/crypto/blake256 v1.0.0 // indirect - -// We depend on chainhash as is, so we need to replace to use the version of -// chainhash included in the version of btcd we're building in. -// TODO(guggero): Remove this as soon as we have a tagged version of chainhash. -replace github.com/btcsuite/btcd/chaincfg/chainhash => ../chaincfg/chainhash diff --git a/btcec/go.sum b/btcec/go.sum index 3b9835fee9..00af17624d 100644 --- a/btcec/go.sum +++ b/btcec/go.sum @@ -1,71 +1,8 @@ -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/btcutil v1.1.0/go.mod h1:5OapHB7A2hBBWLm48mmw4MOHNJCcUBTwmWH/0Jn8VHE= -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/btcsuite/btcd/chaincfg/chainhash v1.0.0 h1:MSskdM4/xJYcFzy0altH/C/xHopifpWzHUi1JeVI34Q= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= 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/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/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/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= diff --git a/btcutil/go.mod b/btcutil/go.mod index e6451e4e7a..ba110830fa 100644 --- a/btcutil/go.mod +++ b/btcutil/go.mod @@ -13,12 +13,4 @@ require ( golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 ) -// TODO(guggero): Remove this as soon as we have a tagged version of btcec/v2. -replace github.com/btcsuite/btcd/btcec/v2 => ../btcec - replace github.com/btcsuite/btcd => ../ - -// We depend on chainhash as is, so we need to replace to use the version of -// chainhash included in the version of btcd we're building in. -// TODO(guggero): Remove this as soon as we have a tagged version of chainhash. -replace github.com/btcsuite/btcd/chaincfg/chainhash => ../chaincfg/chainhash diff --git a/btcutil/go.sum b/btcutil/go.sum index f6c63a9002..69c701ee18 100644 --- a/btcutil/go.sum +++ b/btcutil/go.sum @@ -1,6 +1,11 @@ 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.1 h1:xxivBG6pU3wwxx9qPNZP+2K0PXO9VmFLaSrwOFr24Hw= +github.com/btcsuite/btcd/btcec/v2 v2.1.1/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 h1:MSskdM4/xJYcFzy0altH/C/xHopifpWzHUi1JeVI34Q= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/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= diff --git a/btcutil/psbt/go.mod b/btcutil/psbt/go.mod index 7ae2dcb86d..4aa9d394c5 100644 --- a/btcutil/psbt/go.mod +++ b/btcutil/psbt/go.mod @@ -16,14 +16,6 @@ require ( golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 // indirect ) -// TODO(guggero): Remove this as soon as we have a tagged version of btcec/v2. -replace github.com/btcsuite/btcd/btcec/v2 => ../../btcec - replace github.com/btcsuite/btcd/btcutil => ../ replace github.com/btcsuite/btcd => ../.. - -// We depend on chainhash as is, so we need to replace to use the version of -// chainhash included in the version of btcd we're building in. -// TODO(guggero): Remove this as soon as we have a tagged version of chainhash. -replace github.com/btcsuite/btcd/chaincfg/chainhash => ../../chaincfg/chainhash diff --git a/btcutil/psbt/go.sum b/btcutil/psbt/go.sum index 876c6e94e4..40bb0c16ed 100644 --- a/btcutil/psbt/go.sum +++ b/btcutil/psbt/go.sum @@ -1,4 +1,8 @@ github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= +github.com/btcsuite/btcd/btcec/v2 v2.1.1 h1:xxivBG6pU3wwxx9qPNZP+2K0PXO9VmFLaSrwOFr24Hw= +github.com/btcsuite/btcd/btcec/v2 v2.1.1/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0 h1:MSskdM4/xJYcFzy0altH/C/xHopifpWzHUi1JeVI34Q= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/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= diff --git a/go.mod b/go.mod index e56d76e3e0..a006d957dc 100644 --- a/go.mod +++ b/go.mod @@ -25,14 +25,6 @@ require ( replace github.com/btcsuite/btcd/btcutil => ./btcutil -// TODO(guggero): Remove this as soon as we have a tagged version of btcec/v2. -replace github.com/btcsuite/btcd/btcec/v2 => ./btcec - -// We depend on chainhash as is, so we need to replace to use the version of -// chainhash included in the version of btcd we're building in. -// TODO(guggero): Remove this as soon as we have a tagged version of chainhash. -replace github.com/btcsuite/btcd/chaincfg/chainhash => ./chaincfg/chainhash - // The retract statements below fixes an accidental push of the tags of a btcd // fork. retract ( diff --git a/go.sum b/go.sum index ef7c066684..51aa052060 100644 --- a/go.sum +++ b/go.sum @@ -1,6 +1,10 @@ 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.22.0-beta.0.20220111032746-97732e52810c/go.mod h1:tjmYdS6MLJ5/s0Fj4DbLgSbDHbEqLJrtnHecBFkdz5M= +github.com/btcsuite/btcd/btcec/v2 v2.1.1 h1:xxivBG6pU3wwxx9qPNZP+2K0PXO9VmFLaSrwOFr24Hw= +github.com/btcsuite/btcd/btcec/v2 v2.1.1/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0 h1:MSskdM4/xJYcFzy0altH/C/xHopifpWzHUi1JeVI34Q= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/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 h1:R/opQEbFEy9JGkIguV40SvRY1uliPX8ifOvi6ICsFCw= From 10cff8777a4fcd7aa3b193f9f865786f0fd1259d Mon Sep 17 00:00:00 2001 From: vpereira01 <42812459+vpereira01@users.noreply.github.com> Date: Tue, 22 Feb 2022 14:59:23 +0000 Subject: [PATCH 304/419] Fixes coveralls coverage report With PR #1785 multiple coverage reports are sent to coveralls. This makes coveralls only consider the last report sent. This fix treat all reports has parallel reports so they can all be compiled later by coveralls. --- .github/workflows/go.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index aeca7e58be..c1625428d3 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -42,21 +42,34 @@ jobs: 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 From 6aac863a252ec9f4fe0fd492922b9006d795274a Mon Sep 17 00:00:00 2001 From: Marnix <93143998+MarnixCroes@users.noreply.github.com> Date: Wed, 9 Feb 2022 00:11:38 +0100 Subject: [PATCH 305/419] Update LICENSE Update LICENSE to 2022 --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From bfd0f4a492d7d79030f884198dbabc54fd1592ed Mon Sep 17 00:00:00 2001 From: Brian Stafford Date: Mon, 1 Nov 2021 13:42:22 -0500 Subject: [PATCH 306/419] txscript: add taproot script type Add the WitnessV1TaprootTy script class and return it from GetScriptClass / typeOfScript. Bump the btcutil dep to leverage new taproot address type. --- txscript/pkscript.go | 11 +++- txscript/pkscript_test.go | 8 +-- txscript/script.go | 5 +- txscript/script_test.go | 3 +- txscript/standard.go | 132 ++++++++++++++++++++++++-------------- 5 files changed, 103 insertions(+), 56 deletions(-) diff --git a/txscript/pkscript.go b/txscript/pkscript.go index d89c244e41..4998f97b2f 100644 --- a/txscript/pkscript.go +++ b/txscript/pkscript.go @@ -7,9 +7,9 @@ import ( "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/btcd/btcutil" "golang.org/x/crypto/ripemd160" ) @@ -48,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 ) @@ -100,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 @@ -133,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 diff --git a/txscript/pkscript_test.go b/txscript/pkscript_test.go index 49e2db8afa..c82ab04e62 100644 --- a/txscript/pkscript_test.go +++ b/txscript/pkscript_test.go @@ -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/script.go b/txscript/script.go index 696bfe2d17..1c60b1c55d 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -651,7 +651,7 @@ func countSigOpsV0(script []byte, precise bool) int { // 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 Bitcion consensus rules, due to historical + // 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 @@ -799,6 +799,9 @@ func getWitnessSigOps(pkScript []byte, witness wire.TxWitness) int { witnessScript := witness[len(witness)-1] return countSigOpsV0(witnessScript, true) } + case 1: + // https://github.com/bitcoin/bitcoin/blob/368831371d97a642beb54b5c4eb6eb0fedaa16b4/src/script/interpreter.cpp#L2090 + return 0 } return 0 diff --git a/txscript/script_test.go b/txscript/script_test.go index 86f94d84f4..a90e1940e5 100644 --- a/txscript/script_test.go +++ b/txscript/script_test.go @@ -173,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 @@ -182,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", diff --git a/txscript/standard.go b/txscript/standard.go index 343a9b2727..1488cd2853 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -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/btcd/btcutil" ) const ( @@ -58,6 +58,7 @@ const ( WitnessV0ScriptHashTy // Pay to witness script hash. MultiSigTy // Multi signature. NullDataTy // Empty data-only (provably prunable). + WitnessV1TaprootTy // Taproot output WitnessUnknownTy // Witness unknown ) @@ -72,6 +73,7 @@ var scriptClassToName = []string{ WitnessV0ScriptHashTy: "witness_v0_scripthash", MultiSigTy: "multisig", NullDataTy: "nulldata", + WitnessV1TaprootTy: "witness_v1_taproot", WitnessUnknownTy: "witness_unknown", } @@ -349,11 +351,11 @@ func IsMultisigSigScript(script []byte) bool { 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) == 22 && + if len(script) == witnessV0PubKeyHashLen && script[0] == OP_0 && script[1] == OP_DATA_20 { - return script[2:22] + return script[2:witnessV0PubKeyHashLen] } return nil @@ -365,13 +367,13 @@ func isWitnessPubKeyHashScript(script []byte) bool { return extractWitnessPubKeyHash(script) != nil } -// extractWitnessScriptHash extracts the witness script hash from the passed +// 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 extractWitnessScriptHash(script []byte) []byte { +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) == 34 && + if len(script) == witnessV0ScriptHashLen && script[0] == OP_0 && script[1] == OP_DATA_32 { @@ -381,10 +383,26 @@ func extractWitnessScriptHash(script []byte) []byte { return nil } +// extractWitnessV1ScriptHash 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 extractWitnessV1ScriptHash(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 extractWitnessScriptHash(script) != nil + return extractWitnessV0ScriptHash(script) != nil } // extractWitnessProgramInfo returns the version and program if the passed @@ -435,15 +453,28 @@ func extractWitnessProgramInfo(script []byte) (int, []byte, bool) { // 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. -// -// 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 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 extractWitnessV1ScriptHash(script) != nil +} + +// isAnnexedWitness returns true if the passed witness has a final push +// that is a witness annex. +func isAnnexedWitness(witness [][]byte) bool { + const OP_ANNEX = 0x50 + if len(witness) < 2 { + return false + } + lastElement := witness[len(witness)-1] + return len(lastElement) > 0 && lastElement[0] == OP_ANNEX +} + // isNullDataScript returns whether or not the passed script is a standard // null data script. // @@ -480,41 +511,49 @@ func isNullDataScript(scriptVersion uint16, script []byte) bool { } // scriptType returns the type of the script being inspected from the known -// standard types. -// -// NOTE: All scripts that are not version 0 are currently considered non -// standard. +// 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 { - if scriptVersion != 0 { - return NonStandardTy - } - - 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 - default: - return NonStandardTy + switch scriptVersion { + case 0: + 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 1: + switch { + case isWitnessTaprootScript(script): + return WitnessV1TaprootTy + } } + return NonStandardTy } // GetScriptClass returns the class of the script passed. // // NonStandardTy will be returned when the script does not parse. func GetScriptClass(script []byte) ScriptClass { - const scriptVersion = 0 - return typeOfScript(scriptVersion, script) + const scriptVersionSegWit = 0 + classSegWit := typeOfScript(scriptVersionSegWit, script) + + if classSegWit != NonStandardTy { + return classSegWit + } + + const scriptVersionTaproot = 1 + return typeOfScript(scriptVersionTaproot, script) } // NewScriptClass returns the ScriptClass corresponding to the string name @@ -561,6 +600,10 @@ func expectedInputs(script []byte, 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 @@ -848,10 +891,6 @@ 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. -// -// 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 PushedData(script []byte) ([][]byte, error) { const scriptVersion = 0 @@ -900,11 +939,8 @@ func scriptHashToAddrs(hash []byte, params *chaincfg.Params) []btcutil.Address { // 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. -// -// NOTE: This function only attempts to identify version 0 scripts. The return -// value will indicate a nonstandard script type for other script versions along -// with an invalid script version error. -func ExtractPkScriptAddrs(pkScript []byte, chainParams *chaincfg.Params) (ScriptClass, []btcutil.Address, int, error) { +func ExtractPkScriptAddrs(pkScript []byte, + chainParams *chaincfg.Params) (ScriptClass, []btcutil.Address, int, error) { // Check for pay-to-pubkey-hash script. if hash := extractPubKeyHash(pkScript); hash != nil { @@ -956,7 +992,7 @@ func ExtractPkScriptAddrs(pkScript []byte, chainParams *chaincfg.Params) (Script return WitnessV0PubKeyHashTy, addrs, 1, nil } - if hash := extractWitnessScriptHash(pkScript); hash != nil { + if hash := extractWitnessV0ScriptHash(pkScript); hash != nil { var addrs []btcutil.Address addr, err := btcutil.NewAddressWitnessScriptHash(hash, chainParams) if err == nil { From 37964e550b4a143edb26411a15ed48f44ad8e285 Mon Sep 17 00:00:00 2001 From: Brian Stafford Date: Mon, 8 Nov 2021 08:25:44 -0600 Subject: [PATCH 307/419] txscript: add some txscript support for parsing taproot scripts --- txscript/standard.go | 9 +++++++++ txscript/standard_test.go | 28 +++++++++++++++++++++++++--- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/txscript/standard.go b/txscript/standard.go index 1488cd2853..996177e34e 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -1001,6 +1001,15 @@ func ExtractPkScriptAddrs(pkScript []byte, return WitnessV0ScriptHashTy, addrs, 1, nil } + if hash := extractWitnessV1ScriptHash(pkScript); hash != nil { + var addrs []btcutil.Address + addr, err := btcutil.NewAddressTaproot(hash, chainParams) + if err == nil { + addrs = append(addrs, addr) + } + return WitnessV1TaprootTy, addrs, 1, nil + } + // If none of the above passed, then the address must be non-standard. return NonStandardTy, nil, 0, nil } diff --git a/txscript/standard_test.go b/txscript/standard_test.go index 809bf485d9..d7e209505c 100644 --- a/txscript/standard_test.go +++ b/txscript/standard_test.go @@ -11,9 +11,9 @@ import ( "reflect" "testing" + "github.com/btcsuite/btcd/btcutil" "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcd/btcutil" ) // mustParseShortForm parses the passed short form script and returns the @@ -71,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) { @@ -311,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" + From 3ddf1b51a62f9d1f33ba90971b4c26750e6ac866 Mon Sep 17 00:00:00 2001 From: Brian Stafford Date: Mon, 22 Nov 2021 21:52:54 -0600 Subject: [PATCH 308/419] txscript: add taproot support to PayToAddrScript Add taproot address handling in PayToAddrScript. Adds a test and also some missing tests for p2wsh and p2wpkh addresses. --- txscript/standard.go | 12 +++++++++++ txscript/standard_test.go | 44 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/txscript/standard.go b/txscript/standard.go index 996177e34e..4a3097a4d4 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -801,6 +801,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(scriptHash []byte) ([]byte, error) { + return NewScriptBuilder().AddOp(OP_1).AddData(scriptHash).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) { @@ -847,6 +853,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 "+ diff --git a/txscript/standard_test.go b/txscript/standard_test.go index d7e209505c..283e2ccb7b 100644 --- a/txscript/standard_test.go +++ b/txscript/standard_test.go @@ -659,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, "") @@ -705,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}, From cfe801fe2e0930c1a8532ff6d126ec88ffd21be2 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Thu, 6 Jan 2022 17:10:36 -0800 Subject: [PATCH 309/419] txscript: move hash cache mid-state computation to hashcache.go file --- txscript/hashcache.go | 56 +++++++++++++++++++++++++++++++++++++++++++ txscript/script.go | 54 ----------------------------------------- 2 files changed, 56 insertions(+), 54 deletions(-) diff --git a/txscript/hashcache.go b/txscript/hashcache.go index f9c2caf76c..6db734992e 100644 --- a/txscript/hashcache.go +++ b/txscript/hashcache.go @@ -5,12 +5,68 @@ package txscript import ( + "bytes" + "encoding/binary" "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()) +} + // 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 diff --git a/txscript/script.go b/txscript/script.go index 1c60b1c55d..233f62bd33 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -292,60 +292,6 @@ func removeOpcodeByData(script []byte, dataToRemove []byte) []byte { return result } -// 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()) -} - // 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. From 81a546bdedfdb6e5f6dded3ecde2fc9342b4a436 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Thu, 6 Jan 2022 17:30:28 -0800 Subject: [PATCH 310/419] wire: export WriteOutPoint to public module --- wire/bench_test.go | 2 +- wire/msgtx.go | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/wire/bench_test.go b/wire/bench_test.go index f6637d4210..c183df56e5 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) } } diff --git a/wire/msgtx.go b/wire/msgtx.go index 1e2f69fad4..6cd591e3be 100644 --- a/wire/msgtx.go +++ b/wire/msgtx.go @@ -930,9 +930,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 @@ -992,7 +992,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 } From 30d93272a8e6056c58f54a1f1be7dde52697adb3 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Thu, 6 Jan 2022 17:22:49 -0800 Subject: [PATCH 311/419] txscript: add new IsPayToTaproot utility func --- txscript/script.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/txscript/script.go b/txscript/script.go index 233f62bd33..d6ae2f5e2f 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -90,6 +90,12 @@ func IsPayToWitnessPubKeyHash(script []byte) bool { return isWitnessPubKeyHashScript(script) } +// 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 // program which is encoded according to the passed witness program version. A // witness program must be a small integer (from 0-16), followed by 2-40 bytes From 6ecc72e5e63dd148b7260bca351caf701558b62c Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Sun, 20 Feb 2022 16:05:14 -0800 Subject: [PATCH 312/419] txscript: move sighash computations to new file --- txscript/script.go | 265 ----------------------------------------- txscript/sighash.go | 280 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 280 insertions(+), 265 deletions(-) create mode 100644 txscript/sighash.go diff --git a/txscript/script.go b/txscript/script.go index d6ae2f5e2f..e2d708247c 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -7,12 +7,10 @@ package txscript import ( "bytes" - "encoding/binary" "fmt" "strings" "time" - "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/wire" ) @@ -298,269 +296,6 @@ func removeOpcodeByData(script []byte, dataToRemove []byte) []byte { return result } -// 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(scriptSig []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. - 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 isWitnessPubKeyHashScript(scriptSig) { - // 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(scriptSig)) - 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, scriptSig) - } - - // 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) { - - const scriptVersion = 0 - if err := checkScriptParses(scriptVersion, script); err != nil { - return nil, err - } - - return calcWitnessSignatureHashRaw(script, 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. -// -// 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()) -} - // asSmallInt returns the passed opcode, which must be true according to // isSmallInt(), as an integer. func asSmallInt(op byte) int { diff --git a/txscript/sighash.go b/txscript/sighash.go new file mode 100644 index 0000000000..1cee804b96 --- /dev/null +++ b/txscript/sighash.go @@ -0,0 +1,280 @@ +// 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" + "encoding/binary" + "fmt" + + "github.com/btcsuite/btcd/chaincfg/chainhash" + "github.com/btcsuite/btcd/wire" +) + +// 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.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 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.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) { + + const scriptVersion = 0 + if err := checkScriptParses(scriptVersion, script); err != nil { + return nil, err + } + + return calcWitnessSignatureHashRaw(script, sigHashes, hType, tx, idx, amt) +} From e781b66e2fb9a354a14bfa7fbdd44038450cc13f Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Thu, 6 Jan 2022 17:15:57 -0800 Subject: [PATCH 313/419] txscript: implement BIP 341+342 segwit v1 taproot+tapscript In this commit, we implement the new BIP 341+342 taproot sighash digest computation. The digest is similar, but re-orders some fragments and also starts to commit to the input values of all the transactions in the SIGHASH_ALL case. A new implicit sighash flag, SIGHASH_DEFAULT has been added that allows signatures to always be 64-bytes for the common case. The hashcache has been updated as well to store both the v0 and v1 mid state hashes. The v0 hashes are a double-sha of the contents, while the v1 hash is a single sha. As a result, if a transaction spends both v0 and v1 inputs, then we 're able to re-use all the intermediate hashes. As the sighash computation needs the input values and scripts, we create an abstraction: the PrevOutFetcher to give the caller flexibility w.r.t how this is done. We also create a `CannedPrevOutputFetcher` that holds the information in a map for a single input. A series of function options are also added to allow re-use of the same base sig hash calculation for both BIP 341 and 342. --- blockchain/scriptval.go | 18 +- blockchain/utxoviewpoint.go | 19 +- chaincfg/chainhash/hash.go | 5 + txscript/bench_test.go | 3 +- txscript/engine.go | 28 ++- txscript/engine_test.go | 6 +- txscript/example_test.go | 4 +- txscript/hashcache.go | 229 ++++++++++++++++++++++- txscript/hashcache_test.go | 46 +++-- txscript/opcode.go | 4 +- txscript/reference_test.go | 58 +++--- txscript/script.go | 23 +-- txscript/sigcache_test.go | 16 +- txscript/sighash.go | 354 +++++++++++++++++++++++++++++++++++- txscript/sign_test.go | 6 +- txscript/standard.go | 18 +- 16 files changed, 732 insertions(+), 105 deletions(-) diff --git a/blockchain/scriptval.go b/blockchain/scriptval.go index 8869e23f27..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/btcd/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/utxoviewpoint.go b/blockchain/utxoviewpoint.go index 3398693225..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/btcd/btcutil" ) // txoFlags is a bitmask defining additional information and state for a @@ -159,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/chaincfg/chainhash/hash.go b/chaincfg/chainhash/hash.go index b7a2d8a7f8..1371e2fca7 100644 --- a/chaincfg/chainhash/hash.go +++ b/chaincfg/chainhash/hash.go @@ -27,12 +27,17 @@ var ( // 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") + // 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), } ) diff --git a/txscript/bench_test.go b/txscript/bench_test.go index cac2920280..0d1aa91468 100644 --- a/txscript/bench_test.go +++ b/txscript/bench_test.go @@ -55,7 +55,8 @@ func BenchmarkCalcSigHash(b *testing.B) { // 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) { - sigHashes := NewTxSigHashes(&manyInputsBenchTx) + prevOutFetcher := NewCannedPrevOutputFetcher(prevOutScript, 5) + sigHashes := NewTxSigHashes(&manyInputsBenchTx, prevOutFetcher) b.ResetTimer() b.ReportAllocs() diff --git a/txscript/engine.go b/txscript/engine.go index 1550579d28..b576165ee0 100644 --- a/txscript/engine.go +++ b/txscript/engine.go @@ -145,13 +145,14 @@ type Engine struct { // 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). - flags ScriptFlags - tx wire.MsgTx - txIdx int - version uint16 - bip16 bool - sigCache *SigCache - hashCache *TxSigHashes + 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. @@ -1117,7 +1118,9 @@ 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, + prevOuts PrevOutputFetcher) (*Engine, error) { + const scriptVersion = 0 // The provided transaction input index must refer to a valid input. @@ -1147,8 +1150,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: prevOuts, + } if vm.hasFlag(ScriptVerifyCleanStack) && (!vm.hasFlag(ScriptBip16) && !vm.hasFlag(ScriptVerifyWitness)) { return nil, scriptError(ErrInvalidFlags, diff --git a/txscript/engine_test.go b/txscript/engine_test.go index 5818080dfd..51a899be33 100644 --- a/txscript/engine_test.go +++ b/txscript/engine_test.go @@ -55,7 +55,7 @@ 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) } @@ -112,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) } @@ -188,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/example_test.go b/txscript/example_test.go index f3ff4b873c..b8c7104b5a 100644 --- a/txscript/example_test.go +++ b/txscript/example_test.go @@ -10,11 +10,11 @@ import ( "fmt" "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/btcd/btcutil" ) // This example demonstrates creating a script which pays to a bitcoin address. @@ -167,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 diff --git a/txscript/hashcache.go b/txscript/hashcache.go index 6db734992e..4a5f88fb24 100644 --- a/txscript/hashcache.go +++ b/txscript/hashcache.go @@ -7,6 +7,7 @@ package txscript import ( "bytes" "encoding/binary" + "math" "sync" "github.com/btcsuite/btcd/chaincfg/chainhash" @@ -67,24 +68,230 @@ func calcHashOutputs(tx *wire.MsgTx) chainhash.Hash { 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 @@ -108,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 cee59b9956..8d731820ec 100644 --- a/txscript/hashcache_test.go +++ b/txscript/hashcache_test.go @@ -18,10 +18,12 @@ func init() { } // 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() + prevOuts := NewMultiPrevOutFetcher(nil) + numTxins := 1 + rand.Intn(11) for i := 0; i < numTxins; i++ { randTxIn := wire.TxIn{ @@ -32,10 +34,14 @@ 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 := 1 + rand.Intn(11) @@ -45,12 +51,12 @@ func genTestTx() (*wire.MsgTx, error) { 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 @@ -62,23 +68,29 @@ func TestHashCacheAddContainsHashes(t *testing.T) { 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 @@ -91,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) } @@ -115,14 +127,14 @@ func TestHashCacheAddGet(t *testing.T) { // 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() @@ -146,19 +158,25 @@ func TestHashCachePurge(t *testing.T) { 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 64e46fbf74..b315d03016 100644 --- a/txscript/opcode.go +++ b/txscript/opcode.go @@ -1914,7 +1914,7 @@ func opcodeCheckSig(op *opcode, data []byte, vm *Engine) error { if vm.hashCache != nil { sigHashes = vm.hashCache } else { - sigHashes = NewTxSigHashes(&vm.tx) + sigHashes = NewTxSigHashes(&vm.tx, vm.prevOutFetcher) } hash, err = calcWitnessSignatureHashRaw(subScript, sigHashes, hashType, @@ -2185,7 +2185,7 @@ func opcodeCheckMultiSig(op *opcode, data []byte, vm *Engine) error { if vm.hashCache != nil { sigHashes = vm.hashCache } else { - sigHashes = NewTxSigHashes(&vm.tx) + sigHashes = NewTxSigHashes(&vm.tx, vm.prevOutFetcher) } hash, err = calcWitnessSignatureHashRaw(script, sigHashes, hashType, diff --git a/txscript/reference_test.go b/txscript/reference_test.go index 3d4c591427..d1f516ee2d 100644 --- a/txscript/reference_test.go +++ b/txscript/reference_test.go @@ -15,9 +15,9 @@ import ( "strings" "testing" + "github.com/btcsuite/btcd/btcutil" "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcd/btcutil" ) // scriptTestName returns a descriptive test name for the given reference script @@ -441,10 +441,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 +576,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 +637,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 +656,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 +733,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 +794,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) diff --git a/txscript/script.go b/txscript/script.go index e2d708247c..7d169e633e 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -19,20 +19,17 @@ 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 versions of the taproot script leaf being spent. + TaprootLeafMask = 0xfe ) // These are the constants specified for maximums in individual scripts. diff --git a/txscript/sigcache_test.go b/txscript/sigcache_test.go index d0a3c4b973..f83b8350b1 100644 --- a/txscript/sigcache_test.go +++ b/txscript/sigcache_test.go @@ -44,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, _ := ecdsa.ParseSignature(sig1.Serialize()) key1Copy, _ := btcec.ParsePubKey(key1.SerializeCompressed()) - if !sigCache.Exists(*msg1, sig1Copy, key1Copy) { + if !sigCache.Exists(*msg1, sig1Copy.Serialize(), key1Copy.SerializeCompressed()) { t.Errorf("previously added item not found in signature cache") } } @@ -69,7 +69,7 @@ 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, err := ecdsa.ParseSignature(sig.Serialize()) if err != nil { @@ -79,7 +79,7 @@ func TestSigCacheAddEvictEntry(t *testing.T) { if err != nil { t.Fatalf("unable to parse key: %v", err) } - if !sigCache.Exists(*msg, sigCopy, keyCopy) { + if !sigCache.Exists(*msg, sigCopy.Serialize(), keyCopy.SerializeCompressed()) { t.Errorf("previously added item not found in signature" + "cache") } @@ -97,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 { @@ -108,7 +108,7 @@ func TestSigCacheAddEvictEntry(t *testing.T) { // The entry added above should be found within the sigcache. sigNewCopy, _ := ecdsa.ParseSignature(sigNew.Serialize()) keyNewCopy, _ := btcec.ParsePubKey(keyNew.SerializeCompressed()) - if !sigCache.Exists(*msgNew, sigNewCopy, keyNewCopy) { + if !sigCache.Exists(*msgNew, sigNewCopy.Serialize(), keyNewCopy.SerializeCompressed()) { t.Fatalf("previously added item not found in signature cache") } } @@ -126,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, _ := ecdsa.ParseSignature(sig1.Serialize()) key1Copy, _ := btcec.ParsePubKey(key1.SerializeCompressed()) - if sigCache.Exists(*msg1, sig1Copy, key1Copy) { + 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 index 1cee804b96..eaae070d5c 100644 --- a/txscript/sighash.go +++ b/txscript/sighash.go @@ -7,13 +7,39 @@ 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 @@ -188,7 +214,7 @@ func calcWitnessSignatureHashRaw(subScript []byte, sigHashes *TxSigHashes, // 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[:]) + sigHash.Write(sigHashes.HashPrevOutsV0[:]) } else { sigHash.Write(zeroHash[:]) } @@ -199,7 +225,7 @@ func calcWitnessSignatureHashRaw(subScript []byte, sigHashes *TxSigHashes, if hashType&SigHashAnyOneCanPay == 0 && hashType&sigHashMask != SigHashSingle && hashType&sigHashMask != SigHashNone { - sigHash.Write(sigHashes.HashSequence[:]) + sigHash.Write(sigHashes.HashSequenceV0[:]) } else { sigHash.Write(zeroHash[:]) } @@ -245,7 +271,7 @@ func calcWitnessSignatureHashRaw(subScript []byte, sigHashes *TxSigHashes, // pre-image. if hashType&sigHashMask != SigHashSingle && hashType&sigHashMask != SigHashNone { - sigHash.Write(sigHashes.HashOutputs[:]) + 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]) @@ -278,3 +304,325 @@ func CalcWitnessSigHash(script []byte, sigHashes *TxSigHashes, hType SigHashType 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_test.go b/txscript/sign_test.go index 637ccef10d..ae10ba17d8 100644 --- a/txscript/sign_test.go +++ b/txscript/sign_test.go @@ -10,10 +10,10 @@ import ( "testing" "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/btcd/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) @@ -1672,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/standard.go b/txscript/standard.go index 4a3097a4d4..10689a9f72 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -466,13 +466,25 @@ func isWitnessTaprootScript(script []byte) bool { // isAnnexedWitness returns true if the passed witness has a final push // that is a witness annex. -func isAnnexedWitness(witness [][]byte) bool { - const OP_ANNEX = 0x50 +func isAnnexedWitness(witness wire.TxWitness) bool { if len(witness) < 2 { 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) { + // TODO(roasbeef): make into actual type + return nil, fmt.Errorf("no witness annex") + } + lastElement := witness[len(witness)-1] - return len(lastElement) > 0 && lastElement[0] == OP_ANNEX + return lastElement, nil } // isNullDataScript returns whether or not the passed script is a standard From 1cd509d9a5e1811b528fc1dee55e2c5794f1c7b0 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Thu, 6 Jan 2022 17:30:02 -0800 Subject: [PATCH 314/419] txscript: update SigCache to cache both ECDSA and Schnorr signatures In this commit, we make the sigCache slightly more general in order to be able to cache both ECDSA and Schnorr signatures. The cache is now based off of byte slices (the values) rather than the direct objects. We rely on the fact that the sighash for ecdsa and the schnorr types are distinct, so we can keep using the same top-level sighash key. In the future with Go type params, we can use a type param here instead as they all have an `IsEqual` method. --- txscript/opcode.go | 8 ++++---- txscript/sigcache.go | 28 +++++++++++++++------------- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/txscript/opcode.go b/txscript/opcode.go index b315d03016..922d073b00 100644 --- a/txscript/opcode.go +++ b/txscript/opcode.go @@ -1954,9 +1954,9 @@ func opcodeCheckSig(op *opcode, data []byte, vm *Engine) error { var sigHash chainhash.Hash copy(sigHash[:], hash) - valid = vm.sigCache.Exists(sigHash, signature, pubKey) + valid = vm.sigCache.Exists(sigHash, sigBytes, pkBytes) if !valid && signature.Verify(hash, pubKey) { - vm.sigCache.Add(sigHash, signature, pubKey) + vm.sigCache.Add(sigHash, sigBytes, pkBytes) valid = true } } else { @@ -2202,9 +2202,9 @@ func opcodeCheckMultiSig(op *opcode, data []byte, 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 { diff --git a/txscript/sigcache.go b/txscript/sigcache.go index fc9f627127..b7b1308968 100644 --- a/txscript/sigcache.go +++ b/txscript/sigcache.go @@ -5,10 +5,9 @@ package txscript import ( + "bytes" "sync" - "github.com/btcsuite/btcd/btcec/v2" - "github.com/btcsuite/btcd/btcec/v2/ecdsa" "github.com/btcsuite/btcd/chaincfg/chainhash" ) @@ -19,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 *ecdsa.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 @@ -56,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 *ecdsa.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' @@ -71,7 +73,7 @@ func (s *SigCache) Exists(sigHash chainhash.Hash, sig *ecdsa.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 *ecdsa.Signature, pubKey *btcec.PublicKey) { +func (s *SigCache) Add(sigHash chainhash.Hash, sig []byte, pubKey []byte) { s.Lock() defer s.Unlock() From abeaf4e334311ff3687af358448370eb74ec235d Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Thu, 6 Jan 2022 17:19:53 -0800 Subject: [PATCH 315/419] txscript: introduce new signatureVerifier interface to abstract over schnorr/ecdsa In this commit, we add a new signatureVerifier interface that will allow us to consolidate a lot of code as we'll now have 4 distinct sig+sighash types to verify: 1. pre-segwit 2. segwit v0 3. segwit v1 (taproot key spend) 4. tapscript spends We'll need to be able to handle 3 of the cases for the modified OP_CHECKSIG operator. This new abstraction allows us to keep the implementation of the function somewhat succinct. In this commit we implement a verifier for #3 which is needed to verify the top-level taproot keyspend. We expose the verifier using a new VerifyTaprootKeySpend function. --- go.mod | 1 + txscript/engine.go | 42 ++++ txscript/sigvalidate.go | 480 ++++++++++++++++++++++++++++++++++++++++ txscript/taproot.go | 50 +++++ 4 files changed, 573 insertions(+) create mode 100644 txscript/sigvalidate.go create mode 100644 txscript/taproot.go diff --git a/go.mod b/go.mod index a006d957dc..6962080350 100644 --- a/go.mod +++ b/go.mod @@ -18,6 +18,7 @@ require ( require ( github.com/aead/siphash v1.0.1 // indirect + github.com/decred/dcrd/crypto/blake256 v1.0.0 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23 // indirect diff --git a/txscript/engine.go b/txscript/engine.go index b576165ee0..d9df0d99ab 100644 --- a/txscript/engine.go +++ b/txscript/engine.go @@ -13,6 +13,7 @@ import ( "strings" "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/wire" ) @@ -117,6 +118,46 @@ const ( // 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 uint32 +} + +// 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 fmt.Errorf("max sig ops exceeded") + } + + return nil +} + +// newTaprootExecutionCtx returns a fresh instance of the taproot execution +// context. +func newTaprootExecutionCtx(inputWitnessSize uint32) *taprootExecutionCtx { + return &taprootExecutionCtx{ + codeSepPos: blankCodeSepValue, + sigOpsBudget: sigOpsDelta + inputWitnessSize, + } +} + // Engine is the virtual machine that executes scripts. type Engine struct { // The following fields are set when the engine is created and must not be @@ -201,6 +242,7 @@ type Engine struct { witnessVersion int witnessProgram []byte inputAmount int64 + taprootCtx *taprootExecutionCtx } // hasFlag returns whether the script engine instance has the passed flag set. diff --git a/txscript/sigvalidate.go b/txscript/sigvalidate.go new file mode 100644 index 0000000000..7f4b6f83a7 --- /dev/null +++ b/txscript/sigvalidate.go @@ -0,0 +1,480 @@ +// 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: + // TODO(roasbeef): do proper error here + return nil, nil, 0, fmt.Errorf("invalid sig len: %v", len(rawSig)) + } + + 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: + // TODO(roasbeef): better erro + return nil, fmt.Errorf("pubkey is zero bytes") + + // 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("puybkey 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/taproot.go b/txscript/taproot.go new file mode 100644 index 0000000000..c086cfbc54 --- /dev/null +++ b/txscript/taproot.go @@ -0,0 +1,50 @@ +package txscript + +import ( + "fmt" + + "github.com/btcsuite/btcd/wire" +) + +// 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 + } + + // TODO(roasbeef): add proper error + return fmt.Errorf("invalid sig") +} From 1ac34b75dc2c3eeba279452fb9cb9a3000150c94 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Thu, 6 Jan 2022 17:34:19 -0800 Subject: [PATCH 316/419] txscript: use new signature verifiers for existing CHECKSIG ops In this commit, we use the recently added checksig verifiers to validate signatures for pre-segwit, and segwit v0 scripts. --- txscript/opcode.go | 110 +++++++++++++--------------------------- txscript/sigvalidate.go | 2 +- 2 files changed, 35 insertions(+), 77 deletions(-) diff --git a/txscript/opcode.go b/txscript/opcode.go index 922d073b00..b78516bc58 100644 --- a/txscript/opcode.go +++ b/txscript/opcode.go @@ -9,6 +9,7 @@ import ( "crypto/sha1" "crypto/sha256" "encoding/hex" + "errors" "fmt" "hash" "strings" @@ -1880,90 +1881,47 @@ func opcodeCheckSig(op *opcode, data []byte, vm *Engine) error { 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.prevOutFetcher) + vm.dstack.PushBool(false) + return nil } - hash, err = calcWitnessSignatureHashRaw(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) - } - - pubKey, err := btcec.ParsePubKey(pkBytes) - if err != nil { - vm.dstack.PushBool(false) - return nil - } - - var signature *ecdsa.Signature - if vm.hasFlag(ScriptVerifyStrictEncoding) || - vm.hasFlag(ScriptVerifyDERSignatures) { - - signature, err = ecdsa.ParseDERSignature(sigBytes) - } else { - signature, err = ecdsa.ParseSignature(sigBytes) - } - if err != nil { - vm.dstack.PushBool(false) - return nil - } - - var valid bool - if vm.sigCache != nil { - var sigHash chainhash.Hash - copy(sigHash[:], hash) + var scriptErr Error + if errors.As(err, &scriptErr) { + return err + } - valid = vm.sigCache.Exists(sigHash, sigBytes, pkBytes) - if !valid && signature.Verify(hash, pubKey) { - vm.sigCache.Add(sigHash, sigBytes, pkBytes) - valid = true + vm.dstack.PushBool(false) + return nil } - } else { - valid = signature.Verify(hash, pubKey) } - if !valid && vm.hasFlag(ScriptVerifyNullFail) && len(sigBytes) > 0 { + // TODO(roasbeef): verify NULLFAIL semantics as relates to constructors + // above and empty sig vectors + valid := sigVerifier.Verify() + + switch { + case !valid && vm.hasFlag(ScriptVerifyNullFail) && len(fullSigBytes[1:]) > 0: str := "signature not empty on failed checksig" return scriptError(ErrNullFail, str) } diff --git a/txscript/sigvalidate.go b/txscript/sigvalidate.go index 7f4b6f83a7..8d5a8eb590 100644 --- a/txscript/sigvalidate.go +++ b/txscript/sigvalidate.go @@ -427,7 +427,7 @@ func newBaseTapscriptSigVerifier(pkBytes, rawSig []byte, // 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("puybkey of length %v was used", + str := fmt.Sprintf("pubkey of length %v was used", len(pkBytes)) return nil, scriptError( ErrDiscourageUpgradeablePubKeyType, str, From 938c1930dac92b32d00c0060760dd18dc0bafbfa Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Thu, 6 Jan 2022 17:21:43 -0800 Subject: [PATCH 317/419] txscript: add new functions for signing a top-level taproot output In this commit, we add two new functions: one for signing a raw top-level taproot keyspend, and another for generating a valid witness for a keyspend. --- txscript/sign.go | 56 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 54 insertions(+), 2 deletions(-) diff --git a/txscript/sign.go b/txscript/sign.go index f52214f371..de829d7e28 100644 --- a/txscript/sign.go +++ b/txscript/sign.go @@ -7,10 +7,11 @@ package txscript import ( "errors" - "github.com/btcsuite/btcd/btcec/v2/ecdsa" - "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" ) @@ -62,6 +63,57 @@ func WitnessSignature(tx *wire.MsgTx, sigHashes *TxSigHashes, idx int, amt int64 return wire.TxWitness{sig, pkData}, nil } +// RawTxInWitnessSignature returns a valid schnorr signature required to +// perform a taproot key-spend of the specified input. An explicit sighash is +// always attached, which can be removed by a caller if they wish to +// implicitly use the "default" sighash with a 64-byte signature. +// +// TODO(roasbeef): also need a tapscript version of this as well +func RawTxInTaprootSignature(tx *wire.MsgTx, sigHashes *TxSigHashes, idx int, + amt int64, pkScript []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 + } + + // With the sighash constructed, we can sign it with the specified + // private key. + signature, err := schnorr.Sign(key, sigHash) + if err != nil { + return nil, err + } + + // Finally, append the sighash type to the final sig. + return append(signature.Serialize(), 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. +// +// 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) { + + sig, err := RawTxInTaprootSignature( + tx, sigHashes, idx, amt, pkScript, 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 +} + // 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, From 2ac743dc9fe14e4361c3175bc82d2dc302b57f59 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Thu, 6 Jan 2022 17:28:30 -0800 Subject: [PATCH 318/419] txscript: add VM verification logic for top-level taproot keyspends In this commit, we add the initial verification logic for top-level taproot keyspends. Keyspends use the base BIP 341 sighash digest and don't require any tapscript level functionality for validation. --- txscript/engine.go | 153 +++++++++++++++++++++++++++++++++-------- txscript/error_test.go | 4 ++ 2 files changed, 129 insertions(+), 28 deletions(-) diff --git a/txscript/engine.go b/txscript/engine.go index d9df0d99ab..972e639e3b 100644 --- a/txscript/engine.go +++ b/txscript/engine.go @@ -96,6 +96,10 @@ 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 ) const ( @@ -113,6 +117,21 @@ 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). @@ -186,6 +205,13 @@ type Engine struct { // 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 @@ -451,8 +477,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 @@ -531,30 +561,95 @@ func (vm *Engine) verifyWitnessProgram(witness [][]byte) error { len(vm.witnessProgram)) return scriptError(ErrWitnessProgramWrongLength, errStr) } - } else if vm.hasFlag(ScriptVerifyDiscourageUpgradeableWitnessProgram) { - errStr := fmt.Sprintf("new witness program versions "+ - "invalid: %v", vm.witnessProgram) - return scriptError(ErrDiscourageUpgradableWitnessProgram, errStr) - } else { - // 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 - // the remainder of execution. - vm.witnessProgram = nil - } - - if vm.isWitnessVersionActive(0) { - // All elements within the witness stack must not be greater - // than the maximum bytes which are allowed to be pushed onto - // the stack. - for _, witElement := range vm.GetStack() { - if len(witElement) > MaxScriptElementSize { - str := fmt.Sprintf("element size %d exceeds "+ - "max allowed size %d", len(witElement), - MaxScriptElementSize) - return scriptError(ErrElementTooBig, str) + + // 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( + uint32(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) { + // TODO(roasbeef): need the annex stored somewhere? + // * compute annex hash: sha(sizeAnnex || annex) + 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 } + + case vm.hasFlag(ScriptVerifyDiscourageUpgradeableWitnessProgram): + errStr := fmt.Sprintf("new witness program versions "+ + "invalid: %v", vm.witnessProgram) + return scriptError(ErrDiscourageUpgradableWitnessProgram, errStr) + + 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 + // the remainder of execution. + vm.witnessProgram = nil } + + // TODO(roasbeef): other sanity checks here + switch { + 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. + for _, witElement := range vm.GetStack() { + if len(witElement) > MaxScriptElementSize { + str := fmt.Sprintf("element size %d exceeds "+ + "max allowed size %d", len(witElement), + MaxScriptElementSize) + return scriptError(ErrElementTooBig, str) + } + } + } + + return nil } return nil @@ -639,7 +734,8 @@ 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") } @@ -891,7 +987,8 @@ func isStrictPubKeyEncoding(pubKey []byte) bool { // 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 compressed keys are accepted post-segwit" return scriptError(ErrWitnessPubKeyType, str) @@ -1161,7 +1258,7 @@ func (vm *Engine) SetAltStack(data [][]byte) { // 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, - prevOuts PrevOutputFetcher) (*Engine, error) { + prevOutFetcher PrevOutputFetcher) (*Engine, error) { const scriptVersion = 0 @@ -1197,7 +1294,7 @@ func NewEngine(scriptPubKey []byte, tx *wire.MsgTx, txIdx int, flags ScriptFlags sigCache: sigCache, hashCache: hashCache, inputAmount: inputAmount, - prevOutFetcher: prevOuts, + prevOutFetcher: prevOutFetcher, } if vm.hasFlag(ScriptVerifyCleanStack) && (!vm.hasFlag(ScriptBip16) && !vm.hasFlag(ScriptVerifyWitness)) { diff --git a/txscript/error_test.go b/txscript/error_test.go index abfa156577..8a9cef0926 100644 --- a/txscript/error_test.go +++ b/txscript/error_test.go @@ -81,7 +81,11 @@ func TestErrorCodeStringer(t *testing.T) { {ErrWitnessUnexpected, "ErrWitnessUnexpected"}, {ErrMinimalIf, "ErrMinimalIf"}, {ErrWitnessPubKeyType, "ErrWitnessPubKeyType"}, + {ErrDiscourageOpSuccess, "ErrDiscourageOpSuccess"}, + {ErrDiscourageUpgradeableTaprootVersion, "ErrDiscourageUpgradeableTaprootVersion"}, + {ErrTapscriptCheckMultisig, "ErrTapscriptCheckMultisig"}, {ErrDiscourageUpgradableWitnessProgram, "ErrDiscourageUpgradableWitnessProgram"}, + {ErrDiscourageUpgradeablePubKeyType, "ErrDiscourageUpgradeablePubKeyType"}, {0xffff, "Unknown ErrorCode (65535)"}, } From a7c3db40af2e65a445c359f85de62113092c5f70 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Thu, 6 Jan 2022 17:31:16 -0800 Subject: [PATCH 319/419] txscript: use keyBytes instead of ScriptHash for segwit utilities --- txscript/standard.go | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/txscript/standard.go b/txscript/standard.go index 10689a9f72..53f9f4ebbb 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -383,10 +383,9 @@ func extractWitnessV0ScriptHash(script []byte) []byte { return nil } -// extractWitnessV1ScriptHash 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 extractWitnessV1ScriptHash(script []byte) []byte { +// 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 && @@ -461,7 +460,7 @@ func isWitnessProgramScript(script []byte) bool { // isWitnessTaprootScript returns true if the passed script is for a // pay-to-witness-taproot output, false otherwise. func isWitnessTaprootScript(script []byte) bool { - return extractWitnessV1ScriptHash(script) != nil + return extractWitnessV1KeyBytes(script) != nil } // isAnnexedWitness returns true if the passed witness has a final push @@ -504,7 +503,7 @@ func isNullDataScript(scriptVersion uint16, script []byte) bool { // 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 a null data script if it doesn't start + // 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 @@ -527,7 +526,7 @@ func isNullDataScript(scriptVersion uint16, script []byte) bool { // or prior, and 1 for segwit v1 (taproot) scripts. func typeOfScript(scriptVersion uint16, script []byte) ScriptClass { switch scriptVersion { - case 0: + case BaseSegwitWitnessVersion: switch { case isPubKeyScript(script): return PubKeyTy @@ -544,12 +543,13 @@ func typeOfScript(scriptVersion uint16, script []byte) ScriptClass { case isNullDataScript(scriptVersion, script): return NullDataTy } - case 1: + case TaprootWitnessVersion: switch { case isWitnessTaprootScript(script): return WitnessV1TaprootTy } } + return NonStandardTy } @@ -815,8 +815,8 @@ func payToWitnessScriptHashScript(scriptHash []byte) ([]byte, error) { // payToWitnessTaprootScript creates a new script to pay to a version 1 // (taproot) witness program. The passed hash is expected to be valid. -func payToWitnessTaprootScript(scriptHash []byte) ([]byte, error) { - return NewScriptBuilder().AddOp(OP_1).AddData(scriptHash).Script() +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 @@ -1025,9 +1025,9 @@ func ExtractPkScriptAddrs(pkScript []byte, return WitnessV0ScriptHashTy, addrs, 1, nil } - if hash := extractWitnessV1ScriptHash(pkScript); hash != nil { + if rawKey := extractWitnessV1KeyBytes(pkScript); rawKey != nil { var addrs []btcutil.Address - addr, err := btcutil.NewAddressTaproot(hash, chainParams) + addr, err := btcutil.NewAddressTaproot(rawKey, chainParams) if err == nil { addrs = append(addrs, addr) } From 11dd8207409b4a0df4404f28b48ccc8a048ae3c8 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Thu, 6 Jan 2022 17:32:35 -0800 Subject: [PATCH 320/419] txscript: add new ScriptHasOpSuccess utility method We'll use this to examine if a script has any OP_SUCCESS op codes during pre-processing before we attempt full tapscript execution. --- txscript/opcode.go | 93 ++++++++++++++++++++++++++++++++++++++++++++++ txscript/script.go | 18 +++++++++ 2 files changed, 111 insertions(+) diff --git a/txscript/opcode.go b/txscript/opcode.go index b78516bc58..516fba164b 100644 --- a/txscript/opcode.go +++ b/txscript/opcode.go @@ -613,6 +613,99 @@ var opcodeOnelineRepls = map[string]string{ "OP_16": "16", } +// 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 diff --git a/txscript/script.go b/txscript/script.go index 7d169e633e..4a04c434c2 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -522,3 +522,21 @@ func IsUnspendable(pkScript []byte) bool { 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 +} From 5c4a29b9d19e1483bb810134713a7ad6f431436d Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Thu, 6 Jan 2022 17:39:55 -0800 Subject: [PATCH 321/419] txscript: introduce new ControlBlock struct along w/ parsing routine In this commit, we add a new struct to represent the ControlBlock structure used to feed in the tapscript leaf inclusion proof into the witness tack. The `ParseControlBlock` parses a would-be control block and returns an error if it's incorrectly formatted. --- txscript/script.go | 3 +- txscript/taproot.go | 152 +++++++++++++++++++++++++++++++++++++++ txscript/taproot_test.go | 133 ++++++++++++++++++++++++++++++++++ 3 files changed, 287 insertions(+), 1 deletion(-) create mode 100644 txscript/taproot_test.go diff --git a/txscript/script.go b/txscript/script.go index 4a04c434c2..aa9645e9b2 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -28,7 +28,8 @@ const ( TaprootAnnexTag = 0x50 // TaprootLeafMask is the mask applied to the control block to extract - // the leaf versions of the taproot script leaf being spent. + // the leaf version and parity of the y-coordinate of the output key if + // the taproot script leaf being spent. TaprootLeafMask = 0xfe ) diff --git a/txscript/taproot.go b/txscript/taproot.go index c086cfbc54..37f4aa882d 100644 --- a/txscript/taproot.go +++ b/txscript/taproot.go @@ -1,11 +1,53 @@ +// 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" + secp "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/btcec/v2/schnorr" "github.com/btcsuite/btcd/wire" ) +// 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 @@ -48,3 +90,113 @@ func VerifyTaprootKeySpend(witnessProgram []byte, rawSig []byte, tx *wire.MsgTx, // TODO(roasbeef): add proper error return fmt.Errorf("invalid sig") } + +// 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. +type ControlBlock struct { + // InternalKey is the internal public key in the taproot commitment. + InternalKey *secp.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 +} + +// 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: + return nil, fmt.Errorf("invalid control block size") + + // 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: + return nil, fmt.Errorf("invalid max block size") + + // 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: + return nil, fmt.Errorf("invalid max block size") + } + + // 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 +} diff --git a/txscript/taproot_test.go b/txscript/taproot_test.go new file mode 100644 index 0000000000..fd5ec217d0 --- /dev/null +++ b/txscript/taproot_test.go @@ -0,0 +1,133 @@ +// 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" + "testing" + + "github.com/btcsuite/btcd/btcec/v2/schnorr" + secp "github.com/decred/dcrd/dcrec/secp256k1/v4" +) + +var ( + testPubBytes, _ = hex.DecodeString("F9308A019258C31049344F85F89D5229B531C845836F99B08601F113BCE036F9") +) + +// 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) + } + } +} From 37f8c8ba0acaab2720766d510d8a9ae7c077ae82 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Thu, 6 Jan 2022 17:42:41 -0800 Subject: [PATCH 322/419] txscript: add VerifyTaprootLeafCommitment function In this commit, we add a new function to verify the taproot merkle commitment of a given tapscript leaf. Along the way we add some helper functions which can be used to construct a taproot output given the raw script root. --- chaincfg/chainhash/hash.go | 16 +++ txscript/taproot.go | 248 +++++++++++++++++++++++++++++++++++++ 2 files changed, 264 insertions(+) diff --git a/chaincfg/chainhash/hash.go b/chaincfg/chainhash/hash.go index 1371e2fca7..764ec3c40a 100644 --- a/chaincfg/chainhash/hash.go +++ b/chaincfg/chainhash/hash.go @@ -31,6 +31,19 @@ var ( // 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{ @@ -38,6 +51,9 @@ var ( 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), } ) diff --git a/txscript/taproot.go b/txscript/taproot.go index 37f4aa882d..4f132e4082 100644 --- a/txscript/taproot.go +++ b/txscript/taproot.go @@ -8,8 +8,10 @@ import ( "bytes" "fmt" + "github.com/btcsuite/btcd/btcec/v2" secp "github.com/btcsuite/btcd/btcec/v2" "github.com/btcsuite/btcd/btcec/v2/schnorr" + "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/wire" ) @@ -146,6 +148,33 @@ func (c *ControlBlock) ToBytes() ([]byte, error) { 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. @@ -200,3 +229,222 @@ func ParseControlBlock(ctrlBlock []byte) (*ControlBlock, error) { 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) +} + +// 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 fmt.Errorf("invalid witness commitment") + } + + // 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 { + // 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 + + // 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 { + return ControlBlock{ + InternalKey: internalKey, + LeafVersion: t.TapLeaf.LeafVersion, + InclusionProof: t.InclusionProof, + } +} From 6fc4199ee479a1ca313a8c2ec5f071c755461277 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Thu, 6 Jan 2022 18:14:49 -0800 Subject: [PATCH 323/419] txscript: add new RawTxInTapscriptSignature to generate tapsript sigs In this commit, we add a new function `RawTxInTapscriptSignature` that will be used to generate signatures in the _tapscript_ context. Note that this differs from top-level taproot as a distinct sighash is used, and we _always_ accept a root hash to perform the proper tweak. --- btcec/privkey.go | 6 ++ btcutil/go.sum | 8 +++ btcutil/psbt/go.mod | 1 + btcutil/psbt/go.sum | 8 +++ go.mod | 5 +- go.sum | 9 +++ txscript/sign.go | 82 +++++++++++++++++++++++---- txscript/taproot.go | 51 +++++++++++++++++ txscript/taproot_test.go | 116 ++++++++++++++++++++++++++++++++++++++- 9 files changed, 272 insertions(+), 14 deletions(-) diff --git a/btcec/privkey.go b/btcec/privkey.go index 6f13990b1f..4efa806c5f 100644 --- a/btcec/privkey.go +++ b/btcec/privkey.go @@ -27,5 +27,11 @@ func NewPrivateKey() (*PrivateKey, error) { return secp.GeneratePrivateKey() } +// 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 diff --git a/btcutil/go.sum b/btcutil/go.sum index 69c701ee18..8617dd8351 100644 --- a/btcutil/go.sum +++ b/btcutil/go.sum @@ -11,6 +11,7 @@ github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufo 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= @@ -43,6 +44,11 @@ github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108 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= @@ -79,3 +85,5 @@ gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMy 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/go.mod b/btcutil/psbt/go.mod index 4aa9d394c5..059bdab55c 100644 --- a/btcutil/psbt/go.mod +++ b/btcutil/psbt/go.mod @@ -12,6 +12,7 @@ require ( 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 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 // indirect ) diff --git a/btcutil/psbt/go.sum b/btcutil/psbt/go.sum index 40bb0c16ed..3056278f02 100644 --- a/btcutil/psbt/go.sum +++ b/btcutil/psbt/go.sum @@ -8,6 +8,7 @@ github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufo 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= @@ -38,6 +39,11 @@ github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108 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= @@ -73,3 +79,5 @@ gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMy 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/go.mod b/go.mod index 6962080350..732ed420c8 100644 --- a/go.mod +++ b/go.mod @@ -9,9 +9,11 @@ require ( github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792 github.com/btcsuite/winsvc v1.0.0 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 ) @@ -19,9 +21,10 @@ require ( require ( github.com/aead/siphash v1.0.1 // indirect github.com/decred/dcrd/crypto/blake256 v1.0.0 // indirect - github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23 // indirect + 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 diff --git a/go.sum b/go.sum index 51aa052060..604e50543e 100644 --- a/go.sum +++ b/go.sum @@ -15,6 +15,7 @@ github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792 h1:R8vQdOQdZ9Y3 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 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= @@ -55,6 +56,11 @@ github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5 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= @@ -91,6 +97,7 @@ google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQ 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 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= @@ -99,3 +106,5 @@ 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/txscript/sign.go b/txscript/sign.go index de829d7e28..fc89312f20 100644 --- a/txscript/sign.go +++ b/txscript/sign.go @@ -63,14 +63,12 @@ func WitnessSignature(tx *wire.MsgTx, sigHashes *TxSigHashes, idx int, amt int64 return wire.TxWitness{sig, pkData}, nil } -// RawTxInWitnessSignature returns a valid schnorr signature required to -// perform a taproot key-spend of the specified input. An explicit sighash is -// always attached, which can be removed by a caller if they wish to -// implicitly use the "default" sighash with a 64-byte signature. -// -// TODO(roasbeef): also need a tapscript version of this as well +// 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, hashType SigHashType, + amt int64, pkScript []byte, tapScriptRootHash []byte, hashType SigHashType, key *btcec.PrivateKey) ([]byte, error) { // First, we'll start by compute the top-level taproot sighash. @@ -82,27 +80,48 @@ func RawTxInTaprootSignature(tx *wire.MsgTx, sigHashes *TxSigHashes, idx int, 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(key, sigHash) + signature, err := schnorr.Sign(privKeyTweak, sigHash) if err != nil { return nil, err } - // Finally, append the sighash type to the final sig. - return append(signature.Serialize(), byte(hashType)), nil + 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. +// 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, hashType, key, + tx, sigHashes, idx, amt, pkScript, fakeTapscriptRootHash, + hashType, key, ) if err != nil { return nil, err @@ -114,6 +133,45 @@ func TaprootWitnessSignature(tx *wire.MsgTx, sigHashes *TxSigHashes, idx int, 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, diff --git a/txscript/taproot.go b/txscript/taproot.go index 4f132e4082..5bd7aef619 100644 --- a/txscript/taproot.go +++ b/txscript/taproot.go @@ -96,6 +96,9 @@ func VerifyTaprootKeySpend(witnessProgram []byte, rawSig []byte, tx *wire.MsgTx, // 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 *secp.PublicKey @@ -272,6 +275,54 @@ func ComputeTaprootOutputKey(pubKey *btcec.PublicKey, 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] == btcec.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 diff --git a/txscript/taproot_test.go b/txscript/taproot_test.go index fd5ec217d0..2a458551cc 100644 --- a/txscript/taproot_test.go +++ b/txscript/taproot_test.go @@ -8,13 +8,40 @@ import ( "bytes" "encoding/hex" "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("F9308A019258C31049344F85F89D5229B531C845836F99B08601F113BCE036F9") + 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 @@ -131,3 +158,90 @@ func TestControlBlockParsing(t *testing.T) { } } } + +// 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 +} From 17e46094944733feeb38b7571d2a22b6d4e0ca03 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Thu, 6 Jan 2022 18:16:09 -0800 Subject: [PATCH 324/419] txscript: add AssembleTaprootScriptTree func for creating input witnesses In this commit, we add a new AssembleTaprootScriptTree function that given a list of tapscript leaves, generates a valid tapscript root, along with the auxiliary proof data needed to spend each output. --- txscript/taproot.go | 282 +++++++++++++++++++++++++++++++++++++-- txscript/taproot_test.go | 116 ++++++++++++++++ 2 files changed, 390 insertions(+), 8 deletions(-) diff --git a/txscript/taproot.go b/txscript/taproot.go index 5bd7aef619..f07e4d015a 100644 --- a/txscript/taproot.go +++ b/txscript/taproot.go @@ -9,10 +9,10 @@ import ( "fmt" "github.com/btcsuite/btcd/btcec/v2" - secp "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 @@ -101,7 +101,7 @@ func VerifyTaprootKeySpend(witnessProgram []byte, rawSig []byte, tx *wire.MsgTx, // 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 *secp.PublicKey + InternalKey *btcec.PublicKey // OutputKeyYIsOdd denotes if the y coordinate of the output key (the // key placed in the actual taproot output is odd. @@ -298,7 +298,7 @@ func TweakTaprootPrivKey(privKey *btcec.PrivateKey, // negate the private key as specified in BIP 341. privKeyScalar := &privKey.Key pubKeyBytes := privKey.PubKey().SerializeCompressed() - if pubKeyBytes[0] == btcec.PubKeyFormatCompressedOdd { + if pubKeyBytes[0] == secp.PubKeyFormatCompressedOdd { privKeyScalar.Negate() } @@ -350,6 +350,14 @@ func VerifyTaprootLeafCommitment(controlBlock *ControlBlock, return fmt.Errorf("invalid witness commitment") } + // 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 { + return fmt.Errorf("invalid witness commitment") + } + // Otherwise, if we reach here, the commitment opening is valid and // execution can continue. return nil @@ -415,6 +423,9 @@ func NewTapLeaf(leafVersion TapscriptLeafVersion, script []byte) TapLeaf { // 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. @@ -469,8 +480,7 @@ func (t TapBranch) TapHash() chainhash.Hash { // 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 + l, r = r, l } return *chainhash.TaggedHash( @@ -484,6 +494,10 @@ 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. @@ -493,9 +507,261 @@ type TapscriptProof struct { // 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, - LeafVersion: t.TapLeaf.LeafVersion, - InclusionProof: t.InclusionProof, + 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 index 2a458551cc..178405b526 100644 --- a/txscript/taproot_test.go +++ b/txscript/taproot_test.go @@ -7,6 +7,8 @@ package txscript import ( "bytes" "encoding/hex" + "fmt" + prand "math/rand" "testing" "testing/quick" @@ -245,3 +247,117 @@ func derivePath(key *hdkeychain.ExtendedKey, path []uint32) ( } 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 + }) + } +} From c1eb15044e76f4ce7618ff71c807920b6727730e Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Thu, 6 Jan 2022 18:17:11 -0800 Subject: [PATCH 325/419] txscript: implement script path verification In this commit, we use the recently added control block and script tree verification+generation routines to implement full script path verification within the VM. This includes verifying the script reveal commitment, and recursing one layer deeper to execute the revealed witness script as specified by BIP 342. --- txscript/engine.go | 191 +++++++++++++++++++++++++++++++++++-------- txscript/error.go | 158 ++++++++++++++++++++--------------- txscript/standard.go | 6 +- 3 files changed, 256 insertions(+), 99 deletions(-) diff --git a/txscript/engine.go b/txscript/engine.go index 972e639e3b..3c8f207636 100644 --- a/txscript/engine.go +++ b/txscript/engine.go @@ -100,6 +100,20 @@ const ( // 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 ( @@ -147,7 +161,9 @@ type taprootExecutionCtx struct { tapLeafHash chainhash.Hash - sigOpsBudget uint32 + sigOpsBudget int32 + + mustSucceed bool } // sigOpsDelta is both the starting budget for sig ops for tapscript @@ -161,7 +177,7 @@ const sigOpsDelta = 50 func (t *taprootExecutionCtx) tallysigOp() error { t.sigOpsBudget -= sigOpsDelta - if t.sigOpsBudget == 0 { + if t.sigOpsBudget < 0 { return fmt.Errorf("max sig ops exceeded") } @@ -170,7 +186,7 @@ func (t *taprootExecutionCtx) tallysigOp() error { // newTaprootExecutionCtx returns a fresh instance of the taproot execution // context. -func newTaprootExecutionCtx(inputWitnessSize uint32) *taprootExecutionCtx { +func newTaprootExecutionCtx(inputWitnessSize int32) *taprootExecutionCtx { return &taprootExecutionCtx{ codeSepPos: blankCodeSepValue, sigOpsBudget: sigOpsDelta + inputWitnessSize, @@ -424,7 +440,7 @@ func (vm *Engine) executeOpcode(op *opcode, data []byte) error { } // Note that this includes OP_RESERVED which counts as a push operation. - if op.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", @@ -586,17 +602,15 @@ func (vm *Engine) verifyWitnessProgram(witness wire.TxWitness) error { // At this point, we know taproot is active, so we'll populate // the taproot execution context. vm.taprootCtx = newTaprootExecutionCtx( - uint32(witness.SerializeSize()), + 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) { - // TODO(roasbeef): need the annex stored somewhere? - // * compute annex hash: sha(sizeAnnex || annex) vm.taprootCtx.annex, _ = extractAnnex(witness) - // Snip the annex off the end of the witness stack . + // Snip the annex off the end of the witness stack. witness = witness[:len(witness)-1] } @@ -620,32 +634,137 @@ func (vm *Engine) verifyWitnessProgram(witness wire.TxWitness) error { return err } - case vm.hasFlag(ScriptVerifyDiscourageUpgradeableWitnessProgram): - errStr := fmt.Sprintf("new witness program versions "+ - "invalid: %v", vm.witnessProgram) - return scriptError(ErrDiscourageUpgradableWitnessProgram, errStr) + // 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: - // 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 - // the remainder of execution. - vm.witnessProgram = nil - } + // 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 + } - // TODO(roasbeef): other sanity checks here - switch { - 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. - for _, witElement := range vm.GetStack() { - if len(witElement) > MaxScriptElementSize { - str := fmt.Sprintf("element size %d exceeds "+ - "max allowed size %d", len(witElement), - MaxScriptElementSize) - return scriptError(ErrElementTooBig, str) + // 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) + 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 + // the remainder of execution. + vm.witnessProgram = nil + } + + // 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. + for _, witElement := range vm.GetStack() { + if len(witElement) > MaxScriptElementSize { + str := fmt.Sprintf("element size %d exceeds "+ + "max allowed size %d", len(witElement), + MaxScriptElementSize) + return scriptError(ErrElementTooBig, str) } } @@ -724,6 +843,10 @@ func (vm *Engine) DisasmScript(idx int) (string, error) { // 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 { + 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) { @@ -743,8 +866,8 @@ func (vm *Engine) CheckErrorCondition(finalScript bool) error { // 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. - if finalScript && vm.hasFlag(ScriptVerifyCleanStack) && - vm.dstack.Depth() != 1 { + cleanStackActive := vm.hasFlag(ScriptVerifyCleanStack) || vm.taprootCtx != nil + if finalScript && cleanStackActive && vm.dstack.Depth() != 1 { str := fmt.Sprintf("stack must contain exactly one item (contains %d)", vm.dstack.Depth()) @@ -1398,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 } diff --git a/txscript/error.go b/txscript/error.go index f42b893ea4..9170895425 100644 --- a/txscript/error.go +++ b/txscript/error.go @@ -343,6 +343,30 @@ 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 + // numErrorCodes is the maximum error code number used in tests. This // entry MUST be the last entry in the enum. numErrorCodes @@ -350,71 +374,75 @@ 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", - 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", + 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", } // String returns the ErrorCode as a human-readable name. diff --git a/txscript/standard.go b/txscript/standard.go index 53f9f4ebbb..2ad658304b 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -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. From a7a8ad7d3791f116736866e7dabbd301cd330023 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Thu, 6 Jan 2022 18:21:23 -0800 Subject: [PATCH 326/419] txscript: disable OP_CHECKMULTISIG and OP_CHECKMULTISIGVERIFY for tapscript --- txscript/opcode.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/txscript/opcode.go b/txscript/opcode.go index 516fba164b..bb8cb43717 100644 --- a/txscript/opcode.go +++ b/txscript/opcode.go @@ -2065,6 +2065,14 @@ type parsedSigInfo struct { // Stack transformation: // [... dummy [sig ...] numsigs [pubkey ...] numpubkeys] -> [... bool] 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 @@ -2236,7 +2244,9 @@ func opcodeCheckMultiSig(op *opcode, data []byte, vm *Engine) error { if vm.hashCache != nil { sigHashes = vm.hashCache } else { - sigHashes = NewTxSigHashes(&vm.tx, vm.prevOutFetcher) + sigHashes = NewTxSigHashes( + &vm.tx, vm.prevOutFetcher, + ) } hash, err = calcWitnessSignatureHashRaw(script, sigHashes, hashType, From 3c6be738ed7a2de7e619d81f0d462efbc41a435c Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Thu, 6 Jan 2022 18:21:59 -0800 Subject: [PATCH 327/419] txscript: always enforce MINIMAL_IF during tapscript execution --- txscript/opcode.go | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/txscript/opcode.go b/txscript/opcode.go index bb8cb43717..4d775cc818 100644 --- a/txscript/opcode.go +++ b/txscript/opcode.go @@ -839,15 +839,27 @@ func opcodeNop(op *opcode, data []byte, 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 From a4beed9f7245d71fd1aaf218fbbe341d6702f903 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Thu, 6 Jan 2022 18:22:54 -0800 Subject: [PATCH 328/419] txscript: add new OpcodePosition method to tokenizer to save code sep position We'll need this to properly generate the sighash during tapscript validation later --- txscript/opcode.go | 5 +++++ txscript/tokenizer.go | 37 ++++++++++++++++++++++++++++++------- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/txscript/opcode.go b/txscript/opcode.go index 4d775cc818..1a4a5335d4 100644 --- a/txscript/opcode.go +++ b/txscript/opcode.go @@ -1950,6 +1950,11 @@ func opcodeHash256(op *opcode, data []byte, vm *Engine) error { // This opcode does not change the contents of the data stack. 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 } diff --git a/txscript/tokenizer.go b/txscript/tokenizer.go index 72e00f07e2..4c7c883a27 100644 --- a/txscript/tokenizer.go +++ b/txscript/tokenizer.go @@ -29,12 +29,13 @@ func init() { // 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 - op *opcode - data []byte - err error + 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 @@ -64,6 +65,12 @@ func (t *ScriptTokenizer) Next() bool { 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, @@ -152,6 +159,16 @@ 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 @@ -182,5 +199,11 @@ func MakeScriptTokenizer(scriptVersion uint16, script []byte) ScriptTokenizer { err = scriptError(ErrUnsupportedScriptVersion, str) } - return ScriptTokenizer{version: scriptVersion, script: script, err: err} + 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, + } } From 3ce6130ee4b5335da700652da696eb22149f3a27 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Thu, 6 Jan 2022 18:27:00 -0800 Subject: [PATCH 329/419] txscript: implement OP_CHECKSIG semantics for tapscript validation In this commit, we implement the new checksig semantics as part of tapscript validation. Namely: * OP_CHECKSIGVERIFY no longer pops the OP_TRUE off the stack (TODO(roasbeef): verify)) * the new sig ops semantics are added where each sig deducts 50 from a starting budget of 50+the weight of the witness * NULLFAIL is always enforced, meaning invalid sigs MUST be an empty sig array --- txscript/opcode.go | 57 ++++++++++++++++++++++++++++++++++++++++++---- txscript/script.go | 8 ++++--- 2 files changed, 58 insertions(+), 7 deletions(-) diff --git a/txscript/opcode.go b/txscript/opcode.go index 1a4a5335d4..7475e3dda5 100644 --- a/txscript/opcode.go +++ b/txscript/opcode.go @@ -1986,7 +1986,10 @@ func opcodeCheckSig(op *opcode, data []byte, 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 } @@ -2024,14 +2027,60 @@ func opcodeCheckSig(op *opcode, data []byte, vm *Engine) error { vm.dstack.PushBool(false) return nil } + + // 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 + } + } + + // Empty public keys immeidately cause execution to fail. + if len(pkBytes) == 0 { + return fmt.Errorf("nil pub key") + } + + // If this is tapscript execution, and the signature was + // actually an empty vector, then we push on an empty vector + // and continue execution from ther, but only if the pubkey + // isn't empty. + if len(fullSigBytes) == 0 { + vm.dstack.PushByteArray([]byte{}) + return nil + } + + // 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 + } + + 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? } - // TODO(roasbeef): verify NULLFAIL semantics as relates to constructors - // above and empty sig vectors valid := sigVerifier.Verify() switch { - case !valid && vm.hasFlag(ScriptVerifyNullFail) && len(fullSigBytes[1:]) > 0: + // 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) } diff --git a/txscript/script.go b/txscript/script.go index aa9645e9b2..602c1fced1 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -474,7 +474,7 @@ func getWitnessSigOps(pkScript []byte, witness wire.TxWitness) int { } switch witnessVersion { - case 0: + case BaseSegwitWitnessVersion: switch { case len(witnessProgram) == payToWitnessPubKeyHashDataSize: return 1 @@ -484,8 +484,10 @@ func getWitnessSigOps(pkScript []byte, witness wire.TxWitness) int { witnessScript := witness[len(witness)-1] return countSigOpsV0(witnessScript, true) } - case 1: - // https://github.com/bitcoin/bitcoin/blob/368831371d97a642beb54b5c4eb6eb0fedaa16b4/src/script/interpreter.cpp#L2090 + + // 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 } From 5f8660e5c37e744fa9f8b9fae7df2a9e0b60c199 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Thu, 6 Jan 2022 18:28:11 -0800 Subject: [PATCH 330/419] txscript: implement OP_CHECKSIGADD In this commit, we implement OP_CHECKSIGADD which replaces OP_CHECKMULTISIG* in the tapscript execution environment. --- txscript/opcode.go | 84 ++++++++++++++++++++++++++++++++++++++++- txscript/opcode_test.go | 12 ++++-- 2 files changed, 91 insertions(+), 5 deletions(-) diff --git a/txscript/opcode.go b/txscript/opcode.go index 7475e3dda5..9819ee6510 100644 --- a/txscript/opcode.go +++ b/txscript/opcode.go @@ -227,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 @@ -501,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}, @@ -513,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}, @@ -2102,6 +2102,86 @@ func opcodeCheckSigVerify(op *opcode, data []byte, vm *Engine) error { 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 immeidately cause execution to fail. + if len(pubKeyBytes) == 0 { + return fmt.Errorf("nil pubkey") + } + + // 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. diff --git a/txscript/opcode_test.go b/txscript/opcode_test.go index 91263c21b1..15c62907aa 100644 --- a/txscript/opcode_test.go +++ b/txscript/opcode_test.go @@ -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,7 +123,7 @@ func TestOpcodeDisasm(t *testing.T) { } // OP_UNKNOWN#. - case opcodeVal >= 0xba && opcodeVal <= 0xf9 || opcodeVal == 0xfc: + case opcodeVal >= 0xbb && opcodeVal <= 0xf9 || opcodeVal == 0xfc: expectedStr = "OP_UNKNOWN" + strconv.Itoa(opcodeVal) } @@ -191,7 +191,13 @@ func TestOpcodeDisasm(t *testing.T) { // OP_UNKNOWN#. case opcodeVal >= 0xba && opcodeVal <= 0xf9 || opcodeVal == 0xfc: - expectedStr = "OP_UNKNOWN" + strconv.Itoa(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) + } } var buf strings.Builder From 79c314d5035aa8e6e8df19d8284780615dc6da0e Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Sun, 20 Feb 2022 14:55:32 -0800 Subject: [PATCH 331/419] txscript: add taproot JSON success/fail reference tests In this commit, we add a total of 2760 taproot reference tests generated by the bitcoind functional tests located at: https://github.com/bitcoin/bitcoin/blob/master/test/functional/feature_taproot.py. The tests aren't deterministic (fresh private keys are generated), so we time we go to update the set of tests, we'll end up with fresh hashes (the file name is the sha1 of the raw json test) and tests. --- .../003af31dd0b5a50c2723531e8ca22ae8ca6e7089 | 1 + .../005e61a50014d33f7309097490534db3c0dc65fe | 1 + .../007f313a1a53428b7fc9eaf54c5d51be20e10567 | 1 + .../00850c1cc564bd0dcbb02c3398f9fc8e0219a317 | 1 + .../0089a0f18b0647cf2bfae0c93e9ae39b345d1611 | 1 + .../00b6fe5a14ee4fb3bb65e0aa28e70cb57f0cd0b0 | 1 + .../00cd1f1ac746e81ae27bfe1e9a383975d0bba949 | 1 + .../00d07d91c86c11dbbd14f4edf55c1f496ffaf010 | 1 + .../00dc037c98e799a31facfab68fce3187ad7a0f68 | 1 + .../00e2723c3cce5d6fa2b7db987e5fbc1d75297650 | 1 + .../00eb1a2b8aed4a406ee59371fa0a50e6679857c1 | 1 + .../0108a92da87f766ee005ac0bb220f78b50d04101 | 1 + .../010cc78772e75503cf488b6267f5891e1495c962 | 1 + .../014aca010656e76077fe517e999ea589e88307d7 | 1 + .../01686c55b9d9f3d0c2d9dc8c0911de32df21a864 | 1 + .../016e25aa492396c1f2937c07dac87f3bce812041 | 1 + .../017f425514c38506670a6136985cf2f693c1851b | 1 + .../0181b63b032265ff6a54d3acaf33d2efc67028ca | 1 + .../018284c1e780a7aacea0d945603d5f06254c5cfe | 1 + .../01ca217ccf1ea0e39003e90d0d3573454b370bd0 | 1 + .../01cc26fa177761f2440d4f78790adfdcb27c9321 | 1 + .../0224ee3efd6d6c2e6024db65267c008a3786f0b2 | 1 + .../0234f23ded5600eb13895b83e3d3208daa621654 | 1 + .../026745c2e6a71ca361cb3f37fe3f4e9c3029688e | 1 + .../026f12b427239f4351f951644afdf9e483ddc4bd | 1 + .../0274119160b74eb12e8b0ea869012528e5c8c64a | 1 + .../02a2d45e622dec5a4342e4be185659da883e8d6d | 1 + .../02bb3113c2f000ec71e0cac539468d820cfa2df6 | 1 + .../02c77525ae2279633746cc24153272f0cbebb2cf | 1 + .../02d1c1fa4446780154693993cbb3b3357d7dc38f | 1 + .../02f4d455a5e5230510c642f46a00e2819cbd49fa | 1 + .../02fcf2313f765802ff09c238af833842580fe461 | 1 + .../0313e7c2127076391d6fd9696d30081eb2c9bfb5 | 1 + .../0325cc06523d6b80529e7b67ea669a8cacc195a1 | 1 + .../032b54a2e80454a2b7039f32a4974095c2f018b0 | 1 + .../035336c778f096bfe56ccd9c44ca36a275649299 | 1 + .../038d58e7a5bd8cd3c42dbd68c099f5900b90ceef | 1 + .../03ac2fb4ae30f213cec9edbaf2796b086134d050 | 1 + .../03b65143f1009a2a8a2f6b758fd8559f040d207c | 1 + .../03bc1ab1714e0ffffffd3593268beb217c603b54 | 1 + .../03bf93a96878a9f8ab6cdeabb7da6656971299e2 | 1 + .../03ec899fb91c58bbb5676ebce177b0b63fa704a1 | 1 + .../03edb43f652ba7e0ad56e117bab26ed1b3cc0b66 | 1 + .../0401cdbd85422acd1857a2cf6024ba4b7b5d909e | 1 + .../040d05cbd66190be71c513b0ebd00bbc34debe8b | 1 + .../04369027c0cf8f61083f8faeaf5d15a4bba2cb26 | 1 + .../043ee2fa352668d08af2912ea4c7dc868039dd7c | 1 + .../046dee126274f9efbec0b1803cf0483b40e0bc0a | 1 + .../047736248915b6ec7bb882618f4c6428dc10bc32 | 1 + .../0496f56b7283138d77bd26aa97936a80588bc908 | 1 + .../04a0415662e8fe755a1cad7e31e996b0f9553a15 | 1 + .../04a9e5bdcdafa1f723281d72593020692f3b5004 | 1 + .../04bb5c8ad218b2ea6cbabde04b776a727cb804d3 | 1 + .../04c14170bf3650e0dee112ba4b888f2e76fc3b69 | 1 + .../04f498a7f3cfb530edcae02afc0d1476b8fbcd8a | 1 + .../0526255fad6bcad83e0f38f3e175d8b55d0113d3 | 1 + .../0530510aa69fa36a6377468b144a6daefe9e0779 | 1 + .../05645a121a9dee2f1e618d22d9c0e11f1729c008 | 1 + .../05723fdb3ecd4a3d4acc01d8ce541e74f11ba38f | 1 + .../0576b0175f23da9546b0ed7d213c1bdf55941dcd | 1 + .../05a7b91a73da2203e485ff51426532165c688040 | 1 + .../05d3a449ff645092d95ff6fa07d433d341861837 | 1 + .../05e7d1f74a0f0d69935dcee5b60fd0b08ff396cf | 1 + .../05f2dfea38b07d623e2947cc2c7963f25a45e24e | 1 + .../05ff688173b90131ed218e693cd3e0735c88955a | 1 + .../060f27e89600b0edaefb344b00420aa71360fd11 | 1 + .../0621f65ed4f98e0fc3ba2caa915de84ac2773b64 | 1 + .../064cb40080f9955f34713af8c9ccd370c7ce8d39 | 1 + .../064f3862567d3645a67ad42e8f1234919491ef00 | 1 + .../06689eea577fd577cf0ed48baa3396126bb6f1b5 | 1 + .../0672af82ea3c78b3ade4b7424ecf5c00466fba2e | 1 + .../06882dd6d50dc8061c56b887fa16764a4db5cc51 | 1 + .../06aa8b12e6ae5c391fb3d92c4050218d552b6923 | 1 + .../06b7ea9f43da11b479b267aca3bdd7cf6fb9cfa7 | 1 + .../06e74af8b10a6ab9ce11036f2747f8034ec3febf | 1 + .../06f54531f7cc822f36462b303f5eed8313ca07f5 | 1 + .../07249b6446b452a9005766194cb824b77c6ed600 | 1 + .../0725dac7b6c36d404b706902e2a350065ba66fbd | 1 + .../073b21ccb622912fef49f0555d5ed7b6ea85ad7e | 1 + .../07904e76401a888153be57bdc173982a4396aea3 | 1 + .../079662a69dfd16ca9215a4e0c822fc44641e72ed | 1 + .../07991f2bbd7bbe3fad499b0c428f795590321613 | 1 + .../07a56716b603afd041d05639404b37744bc2b83c | 1 + .../07aa3010d9cc23f67f6962a7c18f7dedccd7855b | 1 + .../07ae5671fc31d245f515f5c967b4e7cfed38567b | 1 + .../07b8ee857d10f18474e7471c3c27d10be12c5f25 | 1 + .../07cbbc0e4129794730bb9bb49d334b497f11b422 | 1 + .../07d68512aa206614c478ec869a8b7d4f7c32333b | 1 + .../07ff10e93b7bf06e8da854a647ad08d5bc902326 | 1 + .../08106eb8543994958b201f3ce5f42dbbf19adf37 | 1 + .../081a75fb52ef536975050ff3192f6c516b3b557a | 1 + .../08421b069ef3b27abeb764e8412aa879c8bfb0cd | 1 + .../08630f23c6a755790aea6ed91128183d6ddc8291 | 1 + .../086661b19fe6034d3748295413e2b4d4251157aa | 1 + .../08a0635b26ef56d2f6ddd4c31295a8bbde840584 | 1 + .../08a19ba6422f65b65cacb3f20b5507bca39fffc3 | 1 + .../08b5c0ff184e15e9c21e4949e2382b9a71623d3c | 1 + .../08b74fd5e5bdcfc0a22933abb14c20399138f612 | 1 + .../08cb0cb08cfb93d7ca744dbf018072b119fbc650 | 1 + .../08cefa50635850a5a6caa88ddae4d4e4c5178f8b | 1 + .../0918ed067691e99a0ac65b680c99b8a0bd6d2dc2 | 1 + .../0920b0864e2f856ec01587533e768fdc9f982a59 | 1 + .../092dfb3e8b68e6142fcb0a354c4d02c23428b870 | 1 + .../09342cfa6e3461e698ef1f6aceb83fd4a3ccbf35 | 1 + .../0942d800ed811d505130b0e5cca50e722fc4f19b | 1 + .../095bca4fc65d75681b759e14d34e7a5987625ab4 | 1 + .../097dbe987c217c3d9b230bc0e634a9e3f0bab2fd | 1 + .../09b3e7123f40c4ddb240073a912a440a18168c13 | 1 + .../09c225b7d61512e189a466c46243a4511b6eae8d | 1 + .../09cd349f59ff286840fb04789da01062c5d83ba2 | 1 + .../09d7f478f35e48679ca5a97a08febfa49d510081 | 1 + .../0a3e2dd5f11a2182d7b86b927a600bde565229a8 | 1 + .../0a9a9a6e04b0e55c5a90ca23c2586a07ae1fc542 | 1 + .../0aaeeea67c9e79315c703c56429535fd670ef5aa | 1 + .../0abded429f191b0375a464688f06bd465af7c644 | 1 + .../0abdf3a09f88ee47573f9509a323dfd8af89e021 | 1 + .../0ad139668541c092541da58168e6488a1191ff58 | 1 + .../0b0a37b5c9ef3c034545cbefc3e8de97c8b5ea05 | 1 + .../0b0f9ae5467a2c8d14e86527b264cacbf4871500 | 1 + .../0b37dc29cfcef1377a94a17297a0525504b5a9d2 | 1 + .../0b7236484ffa4dee58a006bc3b9e51c30e5cc903 | 1 + .../0b727481698d5b6e33b991da896215f0527335a6 | 1 + .../0b931370dfff16b9e6d9a7a333e61cabe23290eb | 1 + .../0bc98deaaa9007629b3338d906d73f87abce0b62 | 1 + .../0bf313616424ee4fc95cf71286563567fc87c472 | 1 + .../0bfc8b69a3702ac6986ce61b00e837a148e7d0eb | 1 + .../0c00a8351b02f2185ea30aa4052174b38417e0ff | 1 + .../0c02f78d8dd01b33e94abaa865ee6a9792f4ccfa | 1 + .../0c043c49e6d5aafcf072e6be1be89160111fcb16 | 1 + .../0c10be31ac329baf66d4d083563e6a9c3ab9ee59 | 1 + .../0c12817899b35dadda1aee2d0a376b1e6fca73d8 | 1 + .../0c2099a1366325dfb20d310e00b1c1554e93defd | 1 + .../0c4d9a60206c9ad9b61b6120b3b5495408989e96 | 1 + .../0c6dc14de0b80f72306e015b7560fef8a12f722c | 1 + .../0c860ba9e47e23ac7ceaaa948e710e0253317ad1 | 1 + .../0c90542e3f64cf4c09f66ad39471bbed839d46af | 1 + .../0c91906e6830ed3ad8eba843f2cd7c66205a7981 | 1 + .../0cbaaae8f169bef4c71cd090d475e96cc8277741 | 1 + .../0cfce5f569e35c19633d12676981cda0b47a34b9 | 1 + .../0d1dfc0136b588b721884040ebf5911514ebb74f | 1 + .../0d25d4167a2171b28beda354bc7a6b814d718e10 | 1 + .../0d265e43ba90ce1827ee538563c6a293b0b03ff8 | 1 + .../0d3ce2afc206b93ee7c40177e168a295fc3e5ce0 | 1 + .../0d4d3db873cac71185de9e2fa4462b2f3ba96462 | 1 + .../0d5ecc8d0c063c2641c3a8e7adff9ecb0323914a | 1 + .../0d65edb0c2f57a76df2b15cd2c722b18edffbacc | 1 + .../0d687e26341ba489f3d7be5d0b46f4beacaf8358 | 1 + .../0d6ac2e508ad66fe5e2ceb784535d11ee75cbe2f | 1 + .../0d75732bc24cbac5dc017bb967142c5648d55bfd | 1 + .../0d89c8dca6b7a1af5614348af7dd5ae2f65190bf | 1 + .../0dd2ab05d7639afe71f965b79bd7092a935732e5 | 1 + .../0debebb3108bcd03c6d5ce9c5c2ce1a64f8da172 | 1 + .../0e03e6819458e3a55e6655f8ac2fb5cb9b28406b | 1 + .../0e1d5cb6786009b8f3825aeb3f4c7eecc240bf0b | 1 + .../0e1f79030f3681187ce4b16bf43133d56c470a63 | 1 + .../0e229a80fe4e2619a4b272d19ce5815986d08fa2 | 1 + .../0e27294bb1dafe333a689bcad39dff7fb6f9cddf | 1 + .../0e28329dee72cdf3ca474e54b4eae5fb8c42ce45 | 1 + .../0e292d3b3af29268349fe695e0f7ad74c422612d | 1 + .../0e41c7f53cff3726f8dbca36445f5bb99cc7515f | 1 + .../0e73fd872d8f71896397723287ddf1497ea61297 | 1 + .../0ea17004d718ec4b5b84011a18828cf136f86973 | 1 + .../0ea4e4491ee2abc4ea52e48ba33eeccf62d5f85d | 1 + .../0ea84a4a5eee9c0cfe8bd52347d11c08b97d6640 | 1 + .../0eb26606cb3895e3e7c3160a2acb1dd55cfde903 | 1 + .../0ec71de4446b68520af7b2f5cb5495f2f7d56bbc | 1 + .../0ecc927da181cd3e4cf9d00b158c6acd0700b7c0 | 1 + .../0ef9e684b87a52e1d2ec2b274d91ca104093f268 | 1 + .../0f0de5c345a12934d91427634192d4040e5bd1fe | 1 + .../0f1aee7720bb0ab848210f3e547b18c4431e3651 | 1 + .../0f2ec0ef703ae34c9801d778277b221e6ec19ba7 | 1 + .../0f51e2a5ab57413a930a436edf258d17d6ae7de2 | 1 + .../0f7b105b71e9cb68726584b4fa24c0ebd801c4ca | 1 + .../0fa616a640ec4b881c4c4ea08e1a39f481403fe6 | 1 + .../0fabe142a692b593ed073f5db1ef2aca01dbd689 | 1 + .../1000a469dfca1be2144a6563e3bc8e3f5ceb2448 | 1 + .../1007d21149445ee61da9ad4413d7acefa9ede7e3 | 1 + .../100be162498b413ca391dea2387d07097432e64b | 1 + .../101afec325ccd0ecfd32b22bcb5ddb64cbc1c497 | 1 + .../102f84dec76aa32c7c32a67b8398d3433fd9c124 | 1 + .../10549677366e93a6b247cf85ef6b109794e927a0 | 1 + .../10624dd984bc11b57e154d0125049824624ef4b9 | 1 + .../106f9a1f4925d539eab0171af97bfe996099ad01 | 1 + .../107e2cdcdfabb3aca2ab5aa2fd3c97288ca30c94 | 1 + .../109b57979771e9a623eab0dbd365a6eb604e4d39 | 1 + .../10a884685231a301c2628f0607b449081b250ab5 | 1 + .../10e147455c54d7bb8f4395e8f52666ee498a10a3 | 1 + .../10e2ba2a40c7f4b5bbe26a0ae7a814ef9883672e | 1 + .../10fefd7899096dc27cf05039ac9a172231d52173 | 1 + .../1113b16ac0b3e4b76353eb896e7272061f03ff8c | 1 + .../1131434b4bb6f2acbd59abb881c239975a1116af | 1 + .../117e130d533574c601aab37e70b93bae134a6527 | 1 + .../1184f4a41ef45af98fbb77736bcca10e157c347c | 1 + .../118b63929e90757c8ca1ec818ecf53f8b71c70fb | 1 + .../11b1f9db49bba588d8f418e89843ef901274fe93 | 1 + .../11e26aa15592a14b6f7dc59ed4225b0ceeca2418 | 1 + .../11ef5be6a614ca068f2c89bc602378f8ce71d763 | 1 + .../121e9e0d61998a2f829c791e9f23a065b8ce683d | 1 + .../122e57288341172f17f63e1689fc9a205e9e5905 | 1 + .../1260bed4953f82e80f379c79bc4484db28c58d8a | 1 + .../126e5c88c57ce073bc1e63e4306d21823db4b99a | 1 + .../12bcaf48556b4780abcb73c4f32bd274ea7861bb | 1 + .../12e033c1a8f3298a775b13078a77bc8befe4567c | 1 + .../12e5f4d526a722bc9b8f2af83ae028c8ee6b9027 | 1 + .../12fada550b4d90c67f307a0d563ae38283c008fa | 1 + .../13080e256b05f38789902f0dbbc437401d15a3f2 | 1 + .../1318e44a20cde77432578f5126e255855a0f8104 | 1 + .../131ec09b5ca700e6a035eb50138f6a7f62fe3f91 | 1 + .../1337852e30e2d514c14e8123b84fadb9d4aa882f | 1 + .../136bc03e80bca2dc5f71c4fdf91e7d690eac78e2 | 1 + .../1390c111cc1ca46caab6bdee16d74dd49519fb4f | 1 + .../1395575564b7da66e3b458131eaed79bc605b605 | 1 + .../13c9792e4f626e8f900acfa50cf122a5f5f15030 | 1 + .../13d37de420974d4290a6029f20175feb02e1106e | 1 + .../13d9b1cfc7b7864ec3f85c71a1046df30cc17b62 | 1 + .../13ecc0464cacec7245082422e8f3212d959e0fa9 | 1 + .../14450718a3a9e2266004b863df27746606f071ae | 1 + .../146b0be5a219a70b803fc5f82ded6f34e4cf7a6e | 1 + .../1477a76ad0e64b74908b0f8a89549c7cf7190288 | 1 + .../1493716a3ca7c3194959cd177b8dd531b04b0b9f | 1 + .../149679a6778ca49110eaeac21b33cd449242eb91 | 1 + .../149bceae555709818ddc8eb34d3cf4b508780b88 | 1 + .../14a9e9b7200758410bd419f2b0954ec253e17889 | 1 + .../14b46e9b808aa20b426e21803aebd6efffef133f | 1 + .../14b583f6a2bb67ac548a6daf674748880c14916c | 1 + .../14bac90ea6a6692cf7202b96a1c18e47f81a055a | 1 + .../14d0d7bc3443d31977bc6035b1a9bce2c6dc9114 | 1 + .../14d9a8a4291206e2c4d73120dc485bd077e5f66d | 1 + .../14ffecf99f50d1adde6ff14120965c878f744781 | 1 + .../15032320c16e26b0069cf1571846247d073f2efe | 1 + .../150b2d12becd542c0352fdc80bbd85c2901d8228 | 1 + .../152491c8478252c98640ae41d5813cd6cc4800a4 | 1 + .../1532d9cb1517dd25a5c8a93eb64d3962a52cf4cd | 1 + .../154147c0c82e41a7cfdb7b8295df125020cd7113 | 1 + .../154b30ae55351cbd129d9b1b6a6311572840bb26 | 1 + .../15541041a721e558c8cfa7f4ee5f4d09fa6c9065 | 1 + .../157183c1796c9575b6c576a29c98f58fbd42356c | 1 + .../1571fe984911dc73398ce28defbf71e715958a81 | 1 + .../157aebc161b66c638243c0a814262c48979b21de | 1 + .../15b38d795c9bb9ef573b4d2b1ec4af8fc0cd8fb6 | 1 + .../15bed2762ca16694fce3754fdcb0fe404484b18c | 1 + .../15d389f49e1f412ed725252d3ee81230a2e81cd0 | 1 + .../15fcafcc7469d59709774013df0fd9633e820008 | 1 + .../16128f27ae921b87284e0eab75845884e009c865 | 1 + .../1630122f5bef1592ca6b6280297bd620d8ce0ab9 | 1 + .../164113b42e586e2e8ce7bb6fccef9f52a5136708 | 1 + .../164178c636e1e1ccfbe67f53e9209ff1c0e8584a | 1 + .../16431b60ce2185dc8a3e19f1b9325a1078131515 | 1 + .../1658b5c8f7c6d3672d694462a7f53ad3f3596d38 | 1 + .../166cd55c33178000f9e3e3b366ace5266964a5c3 | 1 + .../167a4033a1f4c30b87898758c3868c1025df1694 | 1 + .../167fe32905b764460a1199e4a4ab3d84ef186e2e | 1 + .../1680d648bb0d496b0b5cdc71bd31f42d092b5e31 | 1 + .../168c2988106ea01a8121eba649b024715de5122f | 1 + .../16acfa58909fa72c2eecfaacc8866e7dd1f42fda | 1 + .../16b2bf568fa5aa6e4b5de39fd290f6de49b091ec | 1 + .../16c6bf5c5a6caf8746580f9e01ec4e218a4c0e39 | 1 + .../16ecdda3d618db946d6033f96c780764642e0471 | 1 + .../16f6f25ce07eadca0f3c82818b8910b5006b6aa5 | 1 + .../1715e26f824103c322e360c6d3c237781724ca4e | 1 + .../172062063b7ae63dcffacdd6b98414054d06633e | 1 + .../172b85f2524cbd3f0ca1a41380566b1648c8c405 | 1 + .../172ff5cf4d0d01f9ac160be767a1b233dea05ffa | 1 + .../17405fca2ae8f08cec8849c6a750217abef9ff89 | 1 + .../177f3355a5b98fe40607bd5da8383d7129c515d5 | 1 + .../177f56a1fdc5cc3198a785f6f5e7a55d8c324f16 | 1 + .../179b29b5e6ade731ba119866f25b6743232bd3ec | 1 + .../17b2c3c5c8f5c6d4e3b517021c8e26c982fc552f | 1 + .../17cd80eebaac8182716c6996ad037efac35af699 | 1 + .../17fccd13627419da75dd075f405d0c40a09c652d | 1 + .../184dbb048070da2a1db945f29853600246189da2 | 1 + .../186d4e3b056dbde38d01af9a2095f2b550b930bb | 1 + .../1870a7b0cbdbdbcb7e9f1d248928fe0dca885fbe | 1 + .../1878d0c6c90056867949699c2702dab1671a5739 | 1 + .../187dc420ad18b5fb75f0f40dcfa22e824b23bbd4 | 1 + .../18822bf70764f3c01f808cd81031bdaa811edcaa | 1 + .../189034044dacfcbaac5a98bbd0a33a369683d2d8 | 1 + .../1891c772f3ce8c760b0cf1b52164fe1d2e4ce605 | 1 + .../1894c4ad4a51725e14a4b3ca4124be935f442f98 | 1 + .../1899c6c029807a2b6fb9c8709343768c03f3405b | 1 + .../18ae04d1c49da35415f8e30e1757321ada62e83c | 1 + .../18cd769c18f505e8bc05856ed71e114b5bd9a022 | 1 + .../19056ae532d1819a4355eff6310ab655a5030df5 | 1 + .../190cfc23dd00d10a83315e6bc368d40445cd322f | 1 + .../190dca39f195f8973c60e414fa6fa6aacd3d9290 | 1 + .../191602968fa2af7edef6e40a0c4e4b9e4ef4cd75 | 1 + .../194da7e8add6b9a1ecf41a75f040b4611f016a09 | 1 + .../1969e36c75fe223b6de50a2e92c6ce56dd4915a3 | 1 + .../1970570c77db050bc51d853165e59487dd05c1a7 | 1 + .../197071c336e5f96eeccaa2d253d5c00e0ac7febc | 1 + .../197a3fa4a03436efcb2a86e1f8cbb45de1371615 | 1 + .../19928329d12601dfd9c4a12541e9799fefb5439e | 1 + .../19a982b7ff350572fab07d8c7397bd3e8f2cc04b | 1 + .../19b94494f911d6c8dffa42a0570e686d8d385d0e | 1 + .../19ce749d29e4620af1b8364a70b233842f7e9d56 | 1 + .../1a199a3cd2f3a67e25e36bd4711b535ae3d24e31 | 1 + .../1a3a8c18a8e82421d33989ed4d05f5485999b0db | 1 + .../1a83bda864530d8086caf59fe1272ad5768d34c7 | 1 + .../1a9368b5d21e42219df4751485b7f522507fdefa | 1 + .../1ab6d3c20509931b1abf61a6b45d8069679b66fe | 1 + .../1af45f5f9b4d38fa9b4e939f3e3622bcdf2d29d6 | 1 + .../1afbe3f769c38b8e8b6210ef4c1e57bc6cfd7f8d | 1 + .../1b13c8bd9a345bdcf71eaa1078ef4cb752b3da96 | 1 + .../1b2543854748d5b37077ed3e53a36309f5330a50 | 1 + .../1b3c874362224cdb658666354aa6fb9efff9b371 | 1 + .../1b4bc136aef0b80666d85ce3d93b7996d0ce7ab5 | 1 + .../1b5a41cda693f9d63f77b9b053dbac3106aea789 | 1 + .../1b68c33f2aa26138257e984d7c57524a609332e4 | 1 + .../1b79cd4b2e7a4b311359e56e468853036d3681d5 | 1 + .../1b8f51ede6850bb667b5fd80d78e02cd4832d753 | 1 + .../1bbde099bad78eb5021b57eaf4e9fecec63162ce | 1 + .../1bc3e95ef1ef57164dee0340314916513b071491 | 1 + .../1bc5747eb674dd470ce9e8f236e8c461bd9f5491 | 1 + .../1bc76532e1949261ee2079d9ce81e5bd2ee2c56a | 1 + .../1bfe6046e6cdc344b877ad37196692f2724dfb96 | 1 + .../1c0b90070d5af0e0da662d27418affd7255bb328 | 1 + .../1c1b10df48009861e679c78f57233fcbab1c9c74 | 1 + .../1c1c68f02884233862b5ace3f063b648ef1a8f5b | 1 + .../1c2a334bb5693def73177ba056d467309d1a592a | 1 + .../1c34962adc291e2c8bf6dae66b8fb9c765b86439 | 1 + .../1c385e281c4e1f86fe4c3b41f133fe0f1ad20791 | 1 + .../1c561097325c97828153532b8c7b95b14e46dff4 | 1 + .../1c7cf3e3c8d41ca4743e00d88ec0434c6f31d4c9 | 1 + .../1c903f96be3cd8956476fb915624fb89666a187c | 1 + .../1c929a0b875b383b7f3db0d168424cf2ba6d3cd5 | 1 + .../1c974326af0bc49a9f389a9c91eda58bdb47ef17 | 1 + .../1caae5c5cd8d5b5cbaed34c3bffbfa19df6aa109 | 1 + .../1cb39f47f10b248d485afd4c83fa450fe4dcf928 | 1 + .../1cc704edb370c2b52aa731bd30ea881ee0b2eb53 | 1 + .../1cf397672140f803d1c48c64b7a9b55ed395d983 | 1 + .../1d396736b3bc9203fa55467a0775f7a058a44b05 | 1 + .../1d4be0ac5b202d439cadb143602ea3459a3eea33 | 1 + .../1d66bb4f8ee00895bb9533eb0329de6d26b4e395 | 1 + .../1d6b45d432e1a9f7bcf2692c87fd3865d9e96451 | 1 + .../1d6c3731bc1125e0c52a0356e80d994f891c5e9c | 1 + .../1d83703eed5baa3599b3562c9ea6f395f0ecacbd | 1 + .../1da56d6e6d60e92c14472e47b665a85be68598f1 | 1 + .../1dd5926d9df81e85da3075d37f0702718c88900e | 1 + .../1ddf875ca22b308639d7b1cab6ee74ea77bc6bce | 1 + .../1de45c6257377171ec1383ff685db7ce8e13d8c4 | 1 + .../1de7bbede303fc60efdde225de97fe6e4cfb88ef | 1 + .../1df8c615c5b7d5080d1019801137bdc97c72d639 | 1 + .../1e2b8ba68f2655f0f5159ba8ee446f920bd6f384 | 1 + .../1e2f14f392e271b5a594679f83b4847d83b8109a | 1 + .../1e2fa5e498506cf0c5adee563fba8cdb0900cb86 | 1 + .../1e32a9cc12b73e8a61aaf4c846d1cd0ffa78bf93 | 1 + .../1e5a2d83584c4f1ccd8746aa4cc87f3b5c520e63 | 1 + .../1e754a40c050fe3c356b0e253ed22633f2c5edb5 | 1 + .../1e841722ec03b5be4c1001e90d8019bf9e01d892 | 1 + .../1ea62bf92cf8078007e5cd279d0ac921980c1395 | 1 + .../1ec26ee9e524029b8cf64e318125007a12c085d1 | 1 + .../1eed48f62357914c0650cba567a06e37071db51e | 1 + .../1f06a021e51a7104e4b8be0ce9c51232c8fd6c77 | 1 + .../1f21715d338b4550c3e7e74321d26de8853626f0 | 1 + .../1f33b328ec921a865dddc299139161f27b477147 | 1 + .../1f59389661d72064b929ee2bac0a3f2782c99fb1 | 1 + .../1f7d7d9cf1ac6252c762a06bdb35e619ce77741d | 1 + .../1fa141a9352d1d89d10a4d09abf044c9506a4bac | 1 + .../1fa4445b8704e72f4df267622d688919d1c6a44e | 1 + .../1fbfc728d51680fcfeadde2a9e6fa7d1ac3996ec | 1 + .../1fcd778862db2069278171a2ee940bf756a2bdab | 1 + .../1fcd7eddbae73818ef08042df1c443c53fab0c49 | 1 + .../1fd0cbef8f091c8edefa214a32625302e2f3a6d8 | 1 + .../1fe16cf825c0f639b3abd120fa85f9a344d3e514 | 1 + .../1fe6f643a391a7f73e3577d1f4e57935064e1c84 | 1 + .../1fe7d8f0f7839c475eb9dbd113d0ac120b1301fa | 1 + .../1ff8cc1006122254a00dc42299f828366e65b691 | 1 + .../202c9cc0aac7d6c5172f0818c8d0d3405649d29b | 1 + .../20372276860410d8622c60d5ec72e5716e313dfc | 1 + .../203cda36559f2e342d3921d1f1f5ab05e330fe7f | 1 + .../2068fcad81b42ac14a337456c1c0e850bc5567e8 | 1 + .../2071f151f52b689e1e3c9f2b0372a3c1ca4c6dc9 | 1 + .../2089f610f91855cc26e8760f3910284181dc1b86 | 1 + .../209d75465a4314536f2bbabf6ada3622bec989d5 | 1 + .../20cd1af7438c223f49d33ed3693631c63f6c3234 | 1 + .../21227867cfe4806f692be272ca5b865dcecc1894 | 1 + .../213cd49c2b13fe3ee6d2220f5f96b63c748d1add | 1 + .../2152488b729a3937e9f4e83bbefbb36d961013ca | 1 + .../215ddb94c508c11099b9268dbf4ce0d7f7d18977 | 1 + .../21a38194825eb39a4a0ae99128be4409c90d420d | 1 + .../21a967d5a754fe4909db382de1d7debbb040d069 | 1 + .../21b086a0fcb5394bca5e13730e9801a167031fd3 | 1 + .../21b915be35d2383f8baacd2d513b5cdd06836ebd | 1 + .../21c64c51dc34976712f8356ed25d28cb2506a3bd | 1 + .../21cd99bcb03828e0395286a09e866684d6c569f0 | 1 + .../21f06e9520e734ab7974353357c55b81e5ee87a9 | 1 + .../22089449f264bdccac5901669554a20c01c7632d | 1 + .../223d492bc034d65fae5c76008697dc6455711a0b | 1 + .../227dc7dc4b5fedba0f90b82d69d0f8f6785c49f3 | 1 + .../228fadb4fab77130e6a42578be8c100758962a74 | 1 + .../229254c58edf03c88b0434f339de04542e82f168 | 1 + .../229a032ed00e20e08e27892cc81b53b28e1d245d | 1 + .../22a01d7a209edd8694bd9edb1c95de74dbed6fc4 | 1 + .../22b9de25667093d760c9e17c5477dead3043b33e | 1 + .../23157f2fc305799762478817c79fe62d896edd22 | 1 + .../2334138f3c633d853dbab847307d9950c227ac09 | 1 + .../2341c37b333e27f887345a539b3a46aa15fe6738 | 1 + .../234eb0340c07ea7d86dcfac62e971eae6dbc359d | 1 + .../2363727c5d55ff4d6eaaf41f33d420d94aa0259e | 1 + .../2364ebc1025f0c764130435a3da1d5febf1ac0a5 | 1 + .../23873275d271cfb7c8271e4058054ab8102b18bd | 1 + .../23ce0a835c3fef13acabbe51379451af1bad4377 | 1 + .../23ee2abacaf9004b59fb4b0c0bf4fb0518c0b719 | 1 + .../24189b1ed398f5834d414ec0517d0e4ec49e5123 | 1 + .../2447d402d9160d103faa8fce8f16b8201a516a4c | 1 + .../244d1fe0151e8979539727b36d9efd4236889b85 | 1 + .../24b9d083b99a1fda505df14b9b98cadbf34618a3 | 1 + .../24bbb3bb32575090a29c31c6d367e46898dc602a | 1 + .../24d0fbfa8bd2c68fd6ee1e4839bb0d5bb73ef21a | 1 + .../24e2153d05b71ded99689e64661aa90af06300e2 | 1 + .../24f5f696fe56cb9b25c9d12a9606b6d6f531d6db | 1 + .../24f8bbbbf4e945080301e930844b08d263783100 | 1 + .../250db3e160a3b1e5fb27d5880463b82d2da450a9 | 1 + .../253542d32b85965ac57232e3741542be2aa8d091 | 1 + .../25452194c45988fdb9442f977481e8fb95b4ad75 | 1 + .../2546c1139a14d6b2b3d6b9918c96de6e589fbf07 | 1 + .../255e0819d8c9639459a4e49579fbd923cdf9240e | 1 + .../25608654bdece6361519480d9115afff3312cb31 | 1 + .../25bdf9d085288589dbb23f1fc7d98f7783cb09fe | 1 + .../25e7910e53d821321fab3c8bb9db847f37fff616 | 1 + .../25f13dc685e40d3fb22819356cbba4a5a6789e15 | 1 + .../25fd25289846f102771af05c1445e63acb583b93 | 1 + .../2619632226257817c56eb288a9d2075e56dd0e34 | 1 + .../26300a1704f502625832730a36d0088f21a46e2f | 1 + .../265d0640e2752abb03fbe0a1b150f575f8469aa5 | 1 + .../2669c9c65bf3af74d4482204c70ea69545d8babf | 1 + .../266c1691a90b2a342849d25e3704659308c45951 | 1 + .../2670c894e879a8499f50e08ae018e501b6693152 | 1 + .../2692015cba943bdfa1b324204d53284234754d15 | 1 + .../26fbe1c5bd294a3fc35af2e36f46c951b25e5cc3 | 1 + .../2721ca2fc08ca7ae38cc809a3799bf618ce5a75d | 1 + .../2756fd453011fa7471613114061631b066029dc5 | 1 + .../278eb959a30cf3ec8163a007eb3f89ef107765ea | 1 + .../27ab4c447f840d27a13d145eb27c80db511a400a | 1 + .../27aff0ad61d128505e22df766c0492e316fbd9a9 | 1 + .../27b9b3e3bde2958e048cee68f2493d41648987d3 | 1 + .../27be24f0f9eb749b51dc6e83c6ab5c8637349a25 | 1 + .../27d37797fa4bb9c3bba68f9967eab892fec70642 | 1 + .../27f1dbe3a65014c59ae266af3346177a5a57d4e5 | 1 + .../2807a46ba9b453c2f9e4af2406b26ed38137b216 | 1 + .../280d6a9607ad78d3eb40f04e5b5a76c6f8eb4c02 | 1 + .../28259bbbf78c881c7400ac4602722df51776ffe0 | 1 + .../284cac89d0553dfdc596ce4bfc4251fd2115cb15 | 1 + .../2872201824aca727042b22cae049102582283dd9 | 1 + .../288e61a59fe0099d03730d5c9d59712f743123a2 | 1 + .../28a21b4f4afeb9c978b1290c620548f1f33e127e | 1 + .../28b1a2ce5cf374a3ce64a6c7853fdbb6a15d1e25 | 1 + .../28f223ee6f9c2562b1e382ea899bc7f88e63490e | 1 + .../28f4e044d59009036250527f061daea52c6b5917 | 1 + .../290325a794a4307e35ab570d847c9854f6d63001 | 1 + .../290a1cf15d24d80b8dba0ba4397f5a7eb13382d0 | 1 + .../29186f53cff8c33b62ccd1cec92b4c6b02c8c2c8 | 1 + .../29306f00a438f213a01ebd7a7b0d04ae25d239ad | 1 + .../297a3281b6d5be24c14d7ff51f2fbfe46ed86f1a | 1 + .../297a666c7fc982a83775114d7c6821fb42031e06 | 1 + .../299581f978295f5b97afd9102abe9746f3633e76 | 1 + .../29cceb8deed87738d060e1bd5338ab0536f8d2a6 | 1 + .../29ce41699e783cf1ab6b5b84bcc1f8da679ce8cd | 1 + .../29d289d23bf6e34dbfac501041222a1978cc95d2 | 1 + .../29dc54df002663eb3874c3fb7d3952e70b1d1779 | 1 + .../29dd1cab8fbe87bf2eba3c671a6054c32e47ee9f | 1 + .../29ec9ea0cab2025b952a31c864a85546c8a8f032 | 1 + .../29ef22549cd23bb217da411a3ca72d83c71150d6 | 1 + .../29f6acfc391f9db2fecb96ea0a708da396ed202e | 1 + .../2a46178ff8d5794433a794e9fe86b9b5fc268cc7 | 1 + .../2a479685fd7da722bb6722ebc37d68cccb881ee6 | 1 + .../2a4e458a761d418129aa4d22bbbd076927fcef77 | 1 + .../2a4e61567a20b2e90af1a0fb476b1ba0154b0a8c | 1 + .../2a7da9157e1527a2190bce26d0a1303d7f239f9f | 1 + .../2aa0596f17f2698bdfd51894a7dc1e1241cd3ae9 | 1 + .../2aa48f72c81f73267919baef97d2c186ffc36882 | 1 + .../2aa72eaeb2dee91742e3412f9e1ec464ecc22161 | 1 + .../2ab67ca0e8401c63810a011ea1b9b40ef8573922 | 1 + .../2ae84cabbb3a18b00167af69886696809a07a86a | 1 + .../2aef8c06dd7c0aa09e6494194a3b812e4b7b2221 | 1 + .../2b1075a4c09b4d3aa3be48cb1ce2571ab06a86a7 | 1 + .../2b168b93f7f916976567d85cf8e7ca0d6dbbf32e | 1 + .../2b229e9febea1749971fa08007b52b574b3046fb | 1 + .../2b4be33fed42ff17f8c6910629b0e2183d109eb9 | 1 + .../2b609a197a87b5e2d1507c9acbaf2e2ab79ce53a | 1 + .../2b9f2b2856d6b4e70d3b3d8e2d4ffcc6048847d9 | 1 + .../2ba9b396adf10109648ab2f9856ca66b6fc5b688 | 1 + .../2baded8ac492d5bbd1dcece9f3d4a2f0458c778d | 1 + .../2bde7ad09804a986048db6aa7983bf552f327e9d | 1 + .../2be1d596003c42e91c2a03626c93ce8259dc64ad | 1 + .../2bed09f85647ccc7b26bbdedb9cbf18167240799 | 1 + .../2c2132ba18413a6ac05a486fd72669aa4293e784 | 1 + .../2c24b83fa75f9fc91269d9be43a5c14f9a0c8adb | 1 + .../2c2615f5ff25527bb1609bacc940eda0c32b8d28 | 1 + .../2c2686017a35729961e5b4064e6ea9b58c073505 | 1 + .../2c28303252e327e51e1e99036e9c4fcc97b10d8e | 1 + .../2c3a119d1d9da7d4fe68883d95e8f11060a9def5 | 1 + .../2c3a775a5deae4555f3af3537c8a4195c6e5354f | 1 + .../2c62f7a3d90b30d6f1b1804f6bf0a916d3305efc | 1 + .../2c67e0be52a7389f103f44944fe8d8913c973b48 | 1 + .../2c7c5497a7e7f81979773204f099b9f23323698e | 1 + .../2cc2506d179d284634729bf9fbd8c05239f90ca9 | 1 + .../2ccd61243d6bba96a68b774617b9d76c97662ff0 | 1 + .../2cd0311c121154bc8385767e5893c92ee5aa2c05 | 1 + .../2d240420d7f8e429cb31120c7bf532805423084e | 1 + .../2d2a878308fd10775f477107b478ca6993799763 | 1 + .../2d50c7d765d0137b5bc9bd78ac8e39437d22fc0f | 1 + .../2d562228e60c1a1e62b21379cc97a7cf96852b48 | 1 + .../2dafca8d1802bbb6ce3ae1196aa647ee3c9e418e | 1 + .../2db945824c150b91aa78265f9e3701bd991fcf10 | 1 + .../2dc10a9c76952430b8601993c330b88bd0e19cb0 | 1 + .../2dc5b1536be7b443c27e763739595c42dc34998e | 1 + .../2dc9f8f8cf217ccac41228917cb739aee23f3b55 | 1 + .../2dcae1af8317442bc492bd0899984f32bf30396d | 1 + .../2dd9b9584d97aeda14030c0cb94034e5a64e1e33 | 1 + .../2de7782cb97bcd10b69053268684420a0022efd6 | 1 + .../2df7793cf7520895ea4121850c34c16bd1874c22 | 1 + .../2e15993224f1d73378824cbd1780f6d25e85740a | 1 + .../2e2b8acfc93c65c04508d0730229d6beb1760346 | 1 + .../2e4630df1ac360494322a4300b3a916bf4a7aa42 | 1 + .../2e9a37abf29713e5bf564831df0206b134ed9e23 | 1 + .../2ecab25cfb72ae137a881589719a53343a030263 | 1 + .../2eccff6ea763376046948b3876b0d9b3e8b28c87 | 1 + .../2ef7e082ae22ffb03fec01772b442b4b8d19cf06 | 1 + .../2f1b30aed18276568d11bfeb997aac3246d57017 | 1 + .../2f63727a65eb7f7437ab5c39d3f16671518719e6 | 1 + .../2f6a3e29b8be29ea5949fb1b5a71679b5cadc8d8 | 1 + .../2f718ebe5d9460ba98f7815e59bfffe1cd1f3bc6 | 1 + .../2f92c5daf5b1fc8c65563916bd77ad58dc8ffdab | 1 + .../2fc6756b64916b520df4a5d7eed9bc7c1ee85753 | 1 + .../2fe9ee314e024619b228c81cae27f4bd50141a36 | 1 + .../30060e7ffc388552b8bae73eb28705b637f7685a | 1 + .../3012845a3aa7dc757cc4778e5334769c9239ab60 | 1 + .../3015e994a3e16567397bea00a92ff97eb53971e6 | 1 + .../3031aef9ccb0cb566246e72e7f976a7cf00b9898 | 1 + .../305b7d52e8b2e5b62f366d1fe9aca1b4c31a2e51 | 1 + .../30733f314d77a04fcfb55b009f72a5a1a94cc1e5 | 1 + .../312a2eaf5a3bbccf69b97e292f665b53846038f5 | 1 + .../3177278ccbc91f49567f80c0b575882edaf4556b | 1 + .../31a7241822ef819833b51d86a78d83bbb4d58136 | 1 + .../31b4933ee39bc4133c6a36b1e309775c87a96c23 | 1 + .../31bf684d25c7125e85ce524a607eb2a52cb7bdca | 1 + .../31c15818563bf9247178dcf6aa28b033af2bb447 | 1 + .../31c6f3973f706c7761a06718934fbee33a007e9d | 1 + .../31c88595514658ef1b8ff73277244b8f007c505d | 1 + .../31d4c861644fc9edae1f7e2e4f31aa06c7517889 | 1 + .../31f076334b0a05c6d42d3ee64880af4288a1a071 | 1 + .../31f2c4c02978ae42e16425ad8313162bbbba6fc1 | 1 + .../322e55f03866ad2580881660af953e8169abf66a | 1 + .../32465695f8a85d30402f9b194bdf25dd6e21729d | 1 + .../3296dbebd697c68468c1215ff252b1da046d3d4c | 1 + .../32aba46093e0c1405d3a8229f68cefd6de6d9767 | 1 + .../32abfd2efb454436ddc75cd07a406d88aabceb2a | 1 + .../32ba176293211377a9ca30f7b1742a3102758b7a | 1 + .../32bcf37b6b3d15680600c81db467e1dfff6ce375 | 1 + .../333dafc1d96971e2ccab51c8ee0d9e479decf78b | 1 + .../334e3a237339fce576119749a9aa81f3d65211cd | 1 + .../3352986afb9bc33fc67eaf72f47be64e3c6ccba3 | 1 + .../335b7a860725ca4f2c467a8b034060d0ce6b3bb4 | 1 + .../33848da9a02cc62be9f5a84c5ce6e33bb6aa8a29 | 1 + .../33aa1588445e9cbbedd1d4a629780bcc8b4a8e9d | 1 + .../33aa91e75b0cc39daae8eb7a1f0889075a667617 | 1 + .../33d0d39d6ce6ced2a0a8dc5d8c47e5f5098d7aaf | 1 + .../33efade4e6970da9cea78a726935e5443e0d1ba3 | 1 + .../33fe1028443f16cce6d9858c8501dfb0a7ae5816 | 1 + .../33ff2ff9d9aabf2865009fc3701058f954184c4a | 1 + .../3400d35bd94547fb613f1aa5cd2073fdca146533 | 1 + .../34038f296d87d228ac46a39bb072cc03e4e585bb | 1 + .../34264b99b16c56793e013d7d2ac3dc83c0c07da6 | 1 + .../342a92cea02c320154d0894d36811870581b660e | 1 + .../346b40c03454e4740323b5b0422908722f9a4ed8 | 1 + .../348d5c1f7c9f5084425a506f649c65b2f31946a0 | 1 + .../349341420dbe9b22120760aa5b91a9099c7cdcea | 1 + .../349bf68e15d8f14b4a471b7ab402784c1077db21 | 1 + .../349dc9e7f879b45a530ea9ac4a5ee92a83b80b64 | 1 + .../34dee51305402e7e6b502025f00f29abbde3cb18 | 1 + .../34e0f433a921b809a71c9924e9c0956dc34bc220 | 1 + .../34ebf584d708a418710a1466a3dbc67b82146196 | 1 + .../34ed3c4ed5af89953d2e81d21f7c1e45d2c7dc87 | 1 + .../34fe51570c93ab7b56e8955a00795a7af3eb88c3 | 1 + .../350219ab2d9d1993c2e0ad903f92eaaf6318f133 | 1 + .../351979da8be9a1fded3861db5068a083d50516e7 | 1 + .../35210e4f9eb6f063e680746037b199244fe0997c | 1 + .../3569acb6b68f7aed0054e44b1fa854e2ef33b96d | 1 + .../3572c1cebe263656185dea9403422e9884954499 | 1 + .../3574aa7865915325c364ab1364ae532d35ec2952 | 1 + .../357c3aca3897a104f6b209ff00a90eb8f93c11e9 | 1 + .../357f1e298d27372ed2fdb360e6ecf4b4f93bf38f | 1 + .../3585f3da19dc73f07d513f4d5e06b3af35381aab | 1 + .../35995d78575bb81724c123126ae84f04c1ef1324 | 1 + .../36107f7e7692414cd4ae5e7ee06a1e46821b107a | 1 + .../361314e0baab060ff8fb2888efad4f841ee2e65d | 1 + .../361c2bf607441dd9ae1d9e592d08aff1c4423aec | 1 + .../361e67ace54dd8058e82517e87d5a294ff0e2430 | 1 + .../36225523764ce0fcf4a54ecc157c7a9ee0ca5e1c | 1 + .../363516e81c7327e6e8535e74da1cf78a4a939bf2 | 1 + .../363d3439b183bb0f2c6a0d1238057e9beb398f18 | 1 + .../36415fab25c89139e82b030657b2f8d9f5d9bfc4 | 1 + .../36608fb81d55d07d46c2f7849cd926ee3b2544c0 | 1 + .../367c9b1f3074839cbe7794421f5a5a30b5392887 | 1 + .../368c81b84650d4644c983e3209d93ebe140d375a | 1 + .../36918d3941b615417b367e0dda84482198335469 | 1 + .../36a94d7bc5dc9af664df029d9cacb70d1662178f | 1 + .../36bc60267ff97612610797a43fa5e7b371687229 | 1 + .../36bd6cf68074e03b5642284ce7d493af28e048a2 | 1 + .../36c7fd31d411d45f3d03143f9a36158791a29660 | 1 + .../36cefffcad6493e933315f78db381ff7ecc43bfd | 1 + .../36db1eaf5e186f36042dd8afeeebfabe675c620a | 1 + .../36e7b1c9920f0e9a7c1c52c380c61f6b44246ce8 | 1 + .../370f93aec0042473af8eda625b8e55afa266cf0a | 1 + .../3711e5aa1c94f1b0f835504e4dc9cfac933f247d | 1 + .../37178f03fde09a06a32ec4e778874ec6ff11c8c3 | 1 + .../3722cdc62a8920daf88999d381d42a7424417843 | 1 + .../3745a800a4b496404473a26dd593f84588194471 | 1 + .../374e3814357798251b0430dc4cfb9f212c1dddd3 | 1 + .../375599a0689231a316462d64f42ec6b33ccca33e | 1 + .../3771c3d9e542f846b3c206c6719246bde5cb472d | 1 + .../3774905200290499adbbac9b674c43b82c3af04d | 1 + .../379b89135a99972794096065de8e1072473b7cdf | 1 + .../37a26cf98e0cb201f2e241d6a41e267821078fc2 | 1 + .../37cfd491e753f20291c4606a4bb007cf1aa69eaa | 1 + .../37fdd34d221df947a4dc6a40f91fe044f88c8ca2 | 1 + .../381cf7c5a9c44f989bb97ebca54137b24a0c5102 | 1 + .../381d7b2c554124f48f833d5bb44cb65d6a4e69ae | 1 + .../3849d609dcd2299e85caef8d7aaf0dc4cbda60ea | 1 + .../385fb0d2eeda5f4790eeab09a29ec612150cd115 | 1 + .../3862864a68546884d4ae2ef7644d75b814fd279e | 1 + .../38633120561625bae7ecb1c951acd585717ee56e | 1 + .../387db60867784e48a23882557f34fd3e8df5fe60 | 1 + .../38a77bbe28f3ce750b32c16df488eb5970d28d51 | 1 + .../38b2b86e0814487d32eb0a49aaa091c527c67a39 | 1 + .../38b7d993272a54c03a7adb7a046e8485546ebd0a | 1 + .../38bce0395152e8d2a60a95b4642bf3700934e4e9 | 1 + .../38cd5b3045252d1ad4ff3cad40d838874891506c | 1 + .../38cf290b09eac905ac4bdc5ffd7fbeb55b28d0b1 | 1 + .../38fa5cb2147069b9e33e21d621935d45486c5345 | 1 + .../39016f47ee6449811c8a18548ba14d36d60f1a15 | 1 + .../39095ad3e086951d38e9de71ed6390bf4a910ada | 1 + .../391ae71a3b29dc703963bfe3a4d96555cac94848 | 1 + .../391b89f7a6069cedebf4da40cbd2e894c4e4e161 | 1 + .../39261d0b29bcefd21020cd2c24c872c070c66ae7 | 1 + .../39427d9b3326e6d242f88c30c5337e28e60ba2cc | 1 + .../395284f8211e771929c6abd17a1e39b471bad2ac | 1 + .../39702f9a29cc5985ccdbae18da3583e3a98271be | 1 + .../39a530e81b2ae6640a22eade59df3f302ebb0806 | 1 + .../39c2d78974b78a945ee5325ec03d2a9842678371 | 1 + .../39c6fd26ec7474a9addfe549df2cb8ee610ecb51 | 1 + .../3a48de373b5922e0287dcbaa10361aa1464b3eff | 1 + .../3a4b7a4a72ab611ede23f7e04e2c7e0300d1c7b6 | 1 + .../3a5d1711382ce031d27b85c9d0db96a8d322c0a5 | 1 + .../3a8258d488d60df9cd2d2e0f3fbfda5aa2916b1a | 1 + .../3ad5eb51c8c2ea66907d5c7b40ef6cccaee711ce | 1 + .../3b055324162a840bb031e742e417383a3c2b9fff | 1 + .../3b6174c02c9421bd7512cb0b507ee81cbe621e8f | 1 + .../3b756b29419004b37c85b3e93c13d3f231e1eb67 | 1 + .../3b7aa5f0f9d0fc31f7be3558e9eae22f13652d33 | 1 + .../3b964cb9d3464c3949a2e8a0f9edb54a4a9ce6c7 | 1 + .../3ba14a20059a5c8f8e184fb6d08736296adf21fd | 1 + .../3ba4a606e430170b23a098c2ac6ee7213be618ca | 1 + .../3baa61730ba406d7fad296d7df24a9629ae0240c | 1 + .../3bacefe15c3e633f44d830137c6fe22c074b155d | 1 + .../3bc46b0f49e132b39a7468c0eeae4f18c15a9e46 | 1 + .../3bd1e196feb0c029ad908a2c989b46a4c75e87e4 | 1 + .../3c0a722d83c61bffb4712e8bdb67f68d6757d30e | 1 + .../3c11357c518486213b14a41e23ce85acfc7225b9 | 1 + .../3c20247465b4757bf0758627c8b5e4839dd819cc | 1 + .../3c4f81b3cab5b54ca2ec122fa809fca650b47db6 | 1 + .../3c695558731a219357e99fced06f0c24b38b6c11 | 1 + .../3c6b79f35456c42d2578553948e940b494865ac5 | 1 + .../3c78b5bf3e8a594974afba095afac84660219f6c | 1 + .../3c986463576a17cc12996a738a2cc479d1198df8 | 1 + .../3cb4479d7f4d2911b165d8e388cda3c7da36bd62 | 1 + .../3cb7605604a629153b71183c4083311f53f6fee1 | 1 + .../3cd91b4c3a1d21d1c90b1e6542ae78fd35091778 | 1 + .../3d4082e12a369fee00a97f5ee6a3b72ea6f15238 | 1 + .../3d4137ffad2b1c85003d032d19a2150f4b6517c9 | 1 + .../3d65682b1f434030f11d6815360c3d269d231474 | 1 + .../3d6fb8e46d4f9e03d6de0e295ec2e0e50df1aa5f | 1 + .../3d75756c8dd79c4efe056dd5435cfb6a2457207c | 1 + .../3da479f176b53c08e1248502a5bc75aed6c71746 | 1 + .../3db85c10d9886a1d664d6d3db26ae7961d66a4be | 1 + .../3dc41a3a65eecfb088cf236466ab9fb737a19b57 | 1 + .../3dcd87542c1fe27ba922187001739130ac6c6c5c | 1 + .../3dd2c473cd54ea601b15cc9840f01e6cec72fbd3 | 1 + .../3e0593c1054f6598bbf8297623874e58ed4f2f9e | 1 + .../3e1e6aa2f96548cfbcb05311c5d24990bb96a8ef | 1 + .../3e2370ff2103895a7c13f394468b1d7588a525a0 | 1 + .../3e30536558f547b9ad4f09f367634b969078f719 | 1 + .../3ea9b3574203d1cc954fbb5b93f7588b765a4d0f | 1 + .../3eabc6ab34a7c9a974850c1dd22c428aa05b1b1a | 1 + .../3eb9a6cfe1aa2c1c02424702999504c5b096248f | 1 + .../3ebde48f5439e084e28144fd489296408e0dac44 | 1 + .../3ef5bed9863d50fbfa4dee5c776d36177e888adb | 1 + .../3efcb90f4a83944731d1cbf69fcde8147549f8ff | 1 + .../3f08853267dab46c6370068cbb68b228923ff0b3 | 1 + .../3f1549e9384322e64380cd38621193a46900a116 | 1 + .../3f1d506b154892f06d439bb90ba5202e723507eb | 1 + .../3f512330103073dbd4f58e82fee2f316a4b0c171 | 1 + .../3f513698f389965cd3f800cde5d06d6742166c96 | 1 + .../3f6985d5b0c8658ee84900aef20ad6b450f6f3e9 | 1 + .../3f6a1b44037f9a0ecf95cd3d23ce8bde0b02ff8e | 1 + .../3f6da0ebdeff4ba77b33c2c2d3b962e7dc353570 | 1 + .../3f7737e152b00480f6b1e13136938142db63c3bb | 1 + .../3f7dd25efaad7cb28967f110fe74e5e38a763ca8 | 1 + .../3f827b95772a69cca7924e0a2e6ed2cef8755536 | 1 + .../3f86932b9bd5a8f673b4dd4243ebb78bef50c888 | 1 + .../3f8e06a01cdada6071275fb451a2ba624eecf6b8 | 1 + .../3f9e6c510733a54871b5b12db956530901898fe5 | 1 + .../3faa53c6eda1becad9cec3442b7069bc2083f057 | 1 + .../3fed18356adbd733c605b538f4fbe6434ecad6df | 1 + .../4017ac5f35612181926802d0cfd9e7f6a5aed8a7 | 1 + .../40198d56b45470dd3064ec201e05ca4e3cdca930 | 1 + .../405cc03a69b95e49ca66bdd71055159a13f437eb | 1 + .../405ecda072acc56c38f0eae072ad858ec1097d36 | 1 + .../40637530cf642a13aaddd88b9e805ab9eed711f1 | 1 + .../40815dacf70ec14f7b8a062c9faaf258058731fe | 1 + .../4088fa75fe995a05522f18f9b0e6945552611611 | 1 + .../40c7820188392556b1df313d7fe8ad00eac4965f | 1 + .../40cdd6d34a71ec60c962c3ce8c6408731acebed3 | 1 + .../410f4c522606d7e3dd362eafa5a5ab9d9811a338 | 1 + .../41114b51cf4fbb2b1beee4e0cc3047fcddd88c2e | 1 + .../416cc4828a6c9b5f1667ac7ad0d2684eb23cac38 | 1 + .../4184d22015b6c9b7656f411782a4484efd87060b | 1 + .../4186f82b0ef77212271ae59a07d75a5f370f8add | 1 + .../4194caf8692db4d7109076c5dece284d07e06cbf | 1 + .../41a24f98a0882fe70484f5006c4b6b9a37bc85f0 | 1 + .../41bb837acd47aa639c62f7986ff46af86a6c36d1 | 1 + .../420a24fcbd56a2a2791e7238666b8aa34e2ccf16 | 1 + .../42c6d3a78f584cc355a0bac6f309e105089332b8 | 1 + .../42da32b7dda49d356987402249a3bb67a0b53529 | 1 + .../42e412a1e895536ef1264d7ee08902b8e37a53a0 | 1 + .../42eddccf89cbef79a5adffb7eb5ea1523de5b3b7 | 1 + .../42f1cfaa89e0e558cc339a4adfc253b4108d5843 | 1 + .../43532b914ad45faf56c91ef34b9b696012326b2d | 1 + .../43a09bc93d6d45b6cef903b1341a287624b825ca | 1 + .../43a12820d4dfa937dfdbaa0843372e901ec73944 | 1 + .../43b19c13ed8e58e70071e063750e8fca7a9f05e0 | 1 + .../43bfb11c19ea9173f4b0185fbc6a622fd0787c68 | 1 + .../43d1fadc7620820efcc941a68f7696480649c13d | 1 + .../43dae97b688afba43b6d88389a78b979f1181c34 | 1 + .../43eea0f55cf11052527d14c3cf0f96e55882c4d5 | 1 + .../43f8e70fd6ed448f6cd62609f6e4a9d03a0e083a | 1 + .../4407ad4a37ac5667b725ef07db2b1b0ebbe6db1e | 1 + .../4422ccfb3a652df26350f5fd43cab32b4a6db9bc | 1 + .../443de93ae646f545525c4a8177964caee78a499e | 1 + .../444bdbc8e2a3f36427b9ee3bb33b639f3d06010d | 1 + .../44513b5ccd5d2993d98b0f606e24c3363080118d | 1 + .../447e0a4f2c9391201bd7abdb3935d959277ac93d | 1 + .../4493e5053e8c93d7133c12033db30ab0fad02eea | 1 + .../44b2a5681330965efa5dadccd65e4296cb9bb54c | 1 + .../44bf61ffe86491dc47531baea9f4722fed205885 | 1 + .../44c41d5a9ee6d3836c4cd959feb9946950a93097 | 1 + .../44d03ac572cc57f5a15470cd97f15bcb5b9aae1e | 1 + .../44d081e51884f8d702e4373433bcf56a8a7ad583 | 1 + .../44d277dff113e85feb1b0da733079ba007e9ce3c | 1 + .../44f204855343e69fdcf5529e0a6cb7ea5dee9741 | 1 + .../452689d60be7f0c8bbd02b65a8c9841ac076b913 | 1 + .../456d04cce86b68e35302afe4c3345e7531aa7304 | 1 + .../457a9522f60a63cad613ce6f45ab52147b5a1871 | 1 + .../45afd60d642320c756621d0d193cd27de023f243 | 1 + .../45b86557bbe4fb210901de818886b7536f396562 | 1 + .../45babb1803fdc9834a37bce496e989425e2fe9b9 | 1 + .../45c14cf9149717468bed37e1e419020555c5f927 | 1 + .../45c97ab53324162e66ed1d4c64371055d966b691 | 1 + .../461af17d337077781b7e49d203e17cf7cdd7781b | 1 + .../464a9d31b63ef5f4fe0f193acff3f7a8251adb7f | 1 + .../4656d9b9e1003224e094622d9723247d8e53ca72 | 1 + .../467ac05fa481edab9bf207738a0fdf308bb097c5 | 1 + .../469213f3d0a4e2171977ef67184aa5af2a7d259a | 1 + .../46a14a2d2ab594d5d1917b16120cf28258bcd02b | 1 + .../46b30a46669909d38ddfd379180d9b9e4b032d30 | 1 + .../46bf3a742f868512007f33d6092b25ad9851abc5 | 1 + .../46faed608cd8553355e705736f5883a865bdd1c0 | 1 + .../476140a4869c363ff59de15ca0b3dddb33ee16ea | 1 + .../47678ed5dae9d91220f82b512192c03161458d96 | 1 + .../476e1eb3a45bcd3c87728f4a5f152341fc41c6d6 | 1 + .../4775847b1966e3acdf5bf21407d223d54512c0aa | 1 + .../477812c3aa633968c3f508ea4a64f6240b7c1282 | 1 + .../4786bab5e3fdd53811fa094d64658a869323943d | 1 + .../47975b43d53b5ddfe8aebbb719cb70af90f9ca56 | 1 + .../479ddb4cda1c95a66132ba2891f8deed16e1e31a | 1 + .../47c96a95d6bd928e3390068b3c94db28d219e9c7 | 1 + .../47d2125494edd0e8f737339160fc2c2bbff13239 | 1 + .../47d754aabbae7b0b019240479e872ec641a71606 | 1 + .../47f82c71674923da07b7c082409faecaa9d932d1 | 1 + .../4849670c7437aabe38ac365b533b2cae10e1c316 | 1 + .../4877a47b68dcd97455dcb8cd52e27309ec642b93 | 1 + .../487deb88a57dc3cabdf497fe30220136e593d23d | 1 + .../48a74bc4e405cef7fd774039eb79bdfaeafeea6b | 1 + .../48aba9a0a8d38583f02db4ffbfe46b11affd2459 | 1 + .../48ba4204d31335006c77c0a0c393c5424c5c89fd | 1 + .../48bb02ef59af281b015aba26344a918d3e949c98 | 1 + .../4907d4a7edab4d2d57ded00e95a654d47f9d823b | 1 + .../491492c2f48c07bca9ef88c9fd36bbd272563b73 | 1 + .../494a7c765d815e6adc6d4e66a57225322bccde6b | 1 + .../496ed2b73e932787fe91d418b240c466ab6a4075 | 1 + .../496f687a93323cea34ef1249059c862f9397c645 | 1 + .../499184ec78a677697ab3ce5b0a87dfbb5ecce65e | 1 + .../499f8c99044f5a7eb9940853f276e5ed7a9894f3 | 1 + .../4a015d179a6415548a65aa75d68b1927fe2b0738 | 1 + .../4a46cdc5c3a288a4eead1245fd3b0bfea974ea21 | 1 + .../4a729815cf7a0f3947cdf502e425da1b2392d6b8 | 1 + .../4a7e2f54a225b7edfc7761d52940b39a3702b9d8 | 1 + .../4a8d82dfb1750aa99deb48b58f8c91a30cc703b0 | 1 + .../4ab1d0f5d83d7343f225dc40c2a3a9940dbe3f7c | 1 + .../4ab5fb6756c937560dc91ad579231800bcb605f0 | 1 + .../4ab75e6d0cbfec5617026ca0e5622cb4be8d69ea | 1 + .../4aef881f37b09a5f41876628452dac08c70a5c3e | 1 + .../4af1e59e48ecbb8bcf5f8c2a739ffe2d47054b4a | 1 + .../4b22e5ee8f595d1440ed41006d8e611da06d0c13 | 1 + .../4b537d79f1a6255185126b99325e3917dfdc7885 | 1 + .../4b57985dbb3b797fd0788cfb9513abc07ddad003 | 1 + .../4b72ce01f999a32aedc950dd1804a8795ff98723 | 1 + .../4b7e7a47d519d00fb5bb9332b6fb49586a4134f8 | 1 + .../4b8ea927af2611b4cf7fbab90c9f8ffb8bea3ab2 | 1 + .../4ba2921581f7a3560b6ec87297653fb165ccf969 | 1 + .../4ba8a95b0f39aae1daf6e664542420657da72fa0 | 1 + .../4be8d76134fd3aa72fd3ecc702e88a4530fcab53 | 1 + .../4c0186fb62257335535a95ddfc34807b1f836154 | 1 + .../4c0a1b11b6e6b7691c115aa09cd92e8ee09a5076 | 1 + .../4c117e356638d628e5b841bc413e67c8bbf10384 | 1 + .../4c2d2d7bdc708a582093d11d189f7addae41c5b4 | 1 + .../4c66ad58c30b6404b73490df6a7aabdb4eb995b2 | 1 + .../4c749139f91d4268578b998b4fc4742cfa968495 | 1 + .../4c9126df811790be522891686bd1fcd0a7fae560 | 1 + .../4cafaf85ab316a592878f9e83a2be01cfcdf738f | 1 + .../4cb7d23ad1e01a5e42d3c8d927936db03801ab95 | 1 + .../4cff2a8e93a415e0cd8f16313427db2dceea582a | 1 + .../4d21f89d57587583f18ad029ffd268e08c6deaed | 1 + .../4d2c30084bbdec620ff06379849a52ea2e10b97f | 1 + .../4d72ed31959a5c8b48c6c9de682cb5364bf0cafe | 1 + .../4d9a093d9de04fcd9c74eeb3fb252b4f762f048e | 1 + .../4db56aa4ef26d2fbb9c74967c01012f86fb5c60e | 1 + .../4dd64e2309c3e9efee2d5404d847b644329d1f7f | 1 + .../4df3d74d147d4bb7144799be7f96196f44def06d | 1 + .../4e1c650230dc5d5f622303dbdb697b39acc5953d | 1 + .../4e27213b2fb3cbd2c324c9d967eb6837151c512b | 1 + .../4e442bf704b5166ed40da217a4f0a6103e117487 | 1 + .../4e6bb871c5b2e524530d3675221cf34b2e598538 | 1 + .../4e7f6d1d5ff623f2b978feb61b0905320a14cea2 | 1 + .../4e8673f1a272e7a4846b2b13fd4d6d699de0dd4d | 1 + .../4e8dce29e5e8dce89954f8535e95a66c4dec52d0 | 1 + .../4e98f79b12c1bcc786816c990038e187b1881a2b | 1 + .../4ebc10c30a1a1250dc40fd49051eb8cadd3eb677 | 1 + .../4ed19b212daaac7d9ddf8fbed04bd645b3540c87 | 1 + .../4ed948d6df09636962a55dc16fa8141b57caf0a8 | 1 + .../4f01eb0e5c5b453e93d7259acca78110e06e0cdc | 1 + .../4f043f492b006187a12d4a27a2fb711e089c21cb | 1 + .../4f31274445bc35aaf35c1fc3838142b83f4e4dbb | 1 + .../4f3b0d3de5e5a892c662d05f7df9b836b5083f4e | 1 + .../4f3eb1205832e452025bc7463ab84f005ccd56a6 | 1 + .../4f444cefd89a49cf66c69836b968e18c893e6243 | 1 + .../4f4de778bdec3be4e7cc1f875680330eb9edda65 | 1 + .../4f54816eeaa1958560b3411df01fd36e2cc3cf78 | 1 + .../4f5d2d6eb42d852d85a2d40419830ff372017208 | 1 + .../4f692f08e2284094269303792599c3ca996925a1 | 1 + .../4f967edf0f22d51ce89c007d5351844488bfc1d4 | 1 + .../4f9df26c7948631ce06cb7292bcc481337bff811 | 1 + .../4faee5238fb7a4ab5d716bcfb441ef4b0ab3f888 | 1 + .../4fc70db2882c50f92cbf554605f20aa8afdc9e7b | 1 + .../4fd09ff1c3fd39676f5029f8a82082c4a788cbe7 | 1 + .../4fd67112498e9041d549dca8902b4b18f4151e0a | 1 + .../4fdbb01ee1c89fea2c908ade5230cbf49b493184 | 1 + .../4fe78456cf82ee1f4f6bf880baf672a53376c62d | 1 + .../4fe9d51c1a4a51db63ace4b7593bf4d0179da70e | 1 + .../5008a5b791ae73ec29ac0e451b2193e921d7d91e | 1 + .../50197b1f963b6c70cf02494a68b83252169b58f8 | 1 + .../501c6aa901d9b79489250b1e7c008dad90b998ba | 1 + .../501cdfc8b8bfd47787c30328084cb44010d48a2a | 1 + .../5020bfad68bbf3d62a9901f11d582b9367ff01a8 | 1 + .../5027b63206364f920f33ae41d244998d60e6d000 | 1 + .../502ba5490df10d7b64842c917be0cc8dce168153 | 1 + .../5040561743c74062906a64802db725e7cb87b572 | 1 + .../5047a7a4c5f22dc492d73a6de284a0603fc06171 | 1 + .../50701ea0af2da8b084ea4a3566db2cedf8dcc2b9 | 1 + .../50765c36b2c5b67d14ed6d3f1006bcac492b9d7e | 1 + .../50ade4cb2bfd78d63959c0c196702463020ec1a7 | 1 + .../50e97f4dc4e78ccd7491b23a05fec77e705d6d17 | 1 + .../512819dc5f866c4c52a96393d1dc161a298b58cf | 1 + .../5134a98d252e038c84c184e2a60b3ab15541c32f | 1 + .../513b5b1cd7ae4a18b0684e98b8bea2445f0f267c | 1 + .../5145a2f823d50829addf9a923816226e49b73772 | 1 + .../51585e660838f7655a9d3f8e62673ed896abc1b1 | 1 + .../5159ef1765261a6a8967fe22b91be23bc4f7c672 | 1 + .../516e8f247c632cc97a34b088b9b9c5522f6b4b7b | 1 + .../51902d7c0dc3e60282faf7c3bed70ad3588b79cc | 1 + .../51cb6bd8e208996ef5816ab2e4a5f0a4392acd9f | 1 + .../51d22c9e318035b292b06c7e92cff7a7dcd2ef46 | 1 + .../51df77e1f5047cc73d62f6a82b06c76b2f2dfcf2 | 1 + .../51f4a12afbc5c09d84488a09c1ec4fad2f8ad55b | 1 + .../5201220ebf5a752ed230ba1c4660d6768ea0ab37 | 1 + .../52406f743dd8cf468c8739e0e49a5e8c2abe890d | 1 + .../524a8fbae511284a4b3feffd7e69391eebfe5fe3 | 1 + .../525afb4266fbfcb9a9457044ffa429e6345aca74 | 1 + .../526b41de4d7b2b6cca5b8cca2aff4e05e1edd180 | 1 + .../528808e08755d1c4badf200ea1e46b471e697367 | 1 + .../5292dd4bbfc4ed134ecca359a50042487bdab8de | 1 + .../529e15d7495022b3928ad252f217ff7066f4a8c4 | 1 + .../529e417f9521111e7e2b214bbe3a009fb241e0e3 | 1 + .../52a46ce5d115709464d927bd868cb66e64d5d890 | 1 + .../52b71f15e64724663db04868b953a0dd6f8ab01a | 1 + .../52c7e56d194272214280372b7dbacf979b86a714 | 1 + .../52da571031bbcc150454dd6be63a21c6a2dca5e5 | 1 + .../53045f62216e6dd1d7b2d1c05dbda813f59f4d38 | 1 + .../53090ff0e10b029e37a0eab690a757a5f4c346ea | 1 + .../530e0b9098674994a45495cf1eb8c3fd36b04ef3 | 1 + .../53123aee1da68a8b9619edd5140ab5c6aae10886 | 1 + .../53234e0beefd772757294c48658a6fb1b632e5f3 | 1 + .../5349c13d7b8dd8f692718b4ef221a21825fb04f3 | 1 + .../5366b2cab843c6f4979214e27b561d35321bd2a6 | 1 + .../5379718fd6733c3194547aea3041303f46159862 | 1 + .../5394689c5e237d677fa75daa48d897e73a858ecf | 1 + .../539798847b99eee00985bc1951275a98b55dd7fd | 1 + .../53a808e42f754a6b97d63d9648f1e9a70ef36421 | 1 + .../53c007e4c811059c16e10ba22c2b8c0f4ce3d99d | 1 + .../53c3edf3601218d001c1e5074a2e608ca903fa25 | 1 + .../53c8c5901bf8077df2161336a0fc9a5f774e1a5d | 1 + .../53d0cafdef4e74e058c9073bbd755b723f71207d | 1 + .../53dc16200f550b0ebabb6c5c132ae4191e1a1482 | 1 + .../53f7ba7985ea8688080ed30b57d08c4ab91d4a7c | 1 + .../53fd1406ce1667cf7d7de3b444b90660d76871fb | 1 + .../540c6dd899720dbbc04e0f316f56549b4c1ea925 | 1 + .../542c02db48e5517905eab16fd96de2d76702fe3a | 1 + .../54305f14909100e1757674ae16a759d855c4a647 | 1 + .../5445a326ed6ffd6f95dc9cb3c9514a0e53f4868a | 1 + .../545537c377201418fedef933281d2dcbea90a159 | 1 + .../547539d40d65ab39026f065bc9152d96c7c4ad43 | 1 + .../54ab5c42625d4869197c04f218c443750527c92e | 1 + .../54b4f9842dadbaeb2ac90b0f6d8177f76ce3f9a1 | 1 + .../54b9966d625700d7ab8b6fb6e1c3e019b5a09f6c | 1 + .../54bb653bb1662d8b2730bde1e4a255606fea193d | 1 + .../54c4a1f796d9ff3acf74d30faba1654e46cb8e87 | 1 + .../54db865605c4886df424d455f6674d7c9f904922 | 1 + .../54eef01ce1e7ec1e6b58bb1a7e192b0e5d3a98e8 | 1 + .../54fe044e4c6d4dfed594e15518f9550df3910bc9 | 1 + .../55222bbf499234ced0243f0c54a06a8e01ee78e8 | 1 + .../55296a40c4a4eec0b8b959e6e4af29fbf647774b | 1 + .../554254ae450e17abd46d3c290600e3620f888246 | 1 + .../554ee85d50ac67df97fb01a2eb533f4a62a41c9f | 1 + .../555fcf75ef7ac731ace1cd81886b6cc1b013e911 | 1 + .../555fe6827560beb47e96016c2aae78850a4e345c | 1 + .../556a65730f4092db6fd77c12b631d10117d47033 | 1 + .../556db9cb87763f9c127e87edfb88a8e8443c00d6 | 1 + .../5581fa4307ec84b987cdfaee72db964e4a304876 | 1 + .../55944a2b94a2ca58cff331e3ef254a2869f5fb50 | 1 + .../55b0896604f6a6b38c17cf95f8c053e19d26090c | 1 + .../55c61e7a6bf6a7b27176d90e85c792e38fa47d95 | 1 + .../55c9ce0b7ccbe8ff676abebe7761bee66f38e3bc | 1 + .../55cabf94b48b77fc7b0a87efd62377c6a44cfd3d | 1 + .../55db8d546fc7e337dd899c328c82a60b6102a7b5 | 1 + .../55f99e2d68ee85b75133f78cb948a5b7466cb4ea | 1 + .../55faab0c69903138a86beca8e6ebc3e7a2010e0b | 1 + .../55fc38b7d593fc118d407fcbd2ed49e3ea890734 | 1 + .../56397a2ccd392deb6d3ed52e0a065fdde579e9d6 | 1 + .../56567e4be5618770bb97f61b1487c7d47cf8192c | 1 + .../5658a8d8fb388e7c7e5f7c7fc8630d3de961b676 | 1 + .../5687a5e9c47486c4d2f24f74e09c95a9b9139145 | 1 + .../56c988fc520dc9a5bafa28ad83eb0e972fd70567 | 1 + .../56cc448ba82bed7220a831c4b05eabed0406386b | 1 + .../56ed4007baeecebd4a8905063055ace47704a0dc | 1 + .../56ff467c9c6b5e3079baa559955ba107d89d77fc | 1 + .../570fb69de8afa341b54dd79455b6d21085c0334f | 1 + .../570fc65b0c81c1473fc82b8545f5ae6efeb839ff | 1 + .../57267f8aca1eeab5fdc28ec5f2cdbd6ce0d150ae | 1 + .../572c410d27df3156ea85e726a966af51c9cadf8f | 1 + .../576476370370b5501ea6a61ac033110ea83ed7c6 | 1 + .../57731bef67046b96aa1a3f92ffbb41851e7b3353 | 1 + .../5777068b6f7170fa6a505e9144aa3f6fc8625b74 | 1 + .../578701a27b2e9321384f3e516f48fe5d2ebfad6d | 1 + .../57ba07044f687929674d01d0c501e408072f02f8 | 1 + .../57e2edb6bce9815f7e92a1cacf2c42a1d8a5ed21 | 1 + .../580742d9b18b0603cb29360f8e7cbfef479c00c6 | 1 + .../5876822a1e4504b3dcd7a3ddd10ca0dafc4c9ce7 | 1 + .../58d98ae03e7b63b61749dae272899a7f41a89c30 | 1 + .../58dd5844bf68fb5f47e929bf24c7d8dc2cab5791 | 1 + .../58e9cc8b18e2ee0f4ef6cfa6222d9ba9c4e6999e | 1 + .../58f607b447f90cc1f1f8626ebec53c5173658a3b | 1 + .../58fb9dddb99befb27e93f61cc7346e2e320d4124 | 1 + .../5901e4b94bc2da63a3099505728106aad680aaf1 | 1 + .../59170b1799ffe9d1e085f2b8c38cf655ca14f1bb | 1 + .../592e17797674340048f2ec49023bde0febe810f4 | 1 + .../5930d2e1ddc70c728b1f219bfa14e4053fe56dbc | 1 + .../59357c2c93a40183682393a898e6b58d6e81cb14 | 1 + .../5951e8f0a0cafab1db40426b854148481b762ce2 | 1 + .../595901e13730319ffed24982bd4ea8c12e89bc96 | 1 + .../597a6a03965d41f1179d6a45268ac32531a9c209 | 1 + .../5981777edd562076958d2a1e4c80225a425eb08e | 1 + .../598b73c14cf25c235e0cc5c5a3bf6a5add3b0b66 | 1 + .../5991f803b4df614fde19c2f5742b860c1a14d33c | 1 + .../59a01c32eca07dea482bf25537b7d52b7bc5aaca | 1 + .../59aa7a8b1146af0061b9b9478ffb499b5e7f3229 | 1 + .../59b9a0e1dfe394504f08eae69abd47bfab092572 | 1 + .../5a198317abb136510b17c59de5eaa7c880152f8b | 1 + .../5a53b6c3fb03892958b022df8a6e0a4cd3d8e51c | 1 + .../5a5abab97631cffda0f11fd3ecd87d86dc325f8f | 1 + .../5a5d03ff40bbb94cac9b06c3d47e693d8db5af67 | 1 + .../5a5efe209bb7d1e1b0085b1515836fcb2144c5f7 | 1 + .../5a81cfc3ec9bfa6d49dcb19b411b6a4b6043df15 | 1 + .../5a9d9ae70e2df49baefc66227ea1c1604902038d | 1 + .../5a9f746ca2d826a621e61152c995893027ae3dff | 1 + .../5b000b738705bfd4a6198d22129f7e9f2ccf1708 | 1 + .../5b08bfcfc4f7317c5e45fbc3a683064ae85a3794 | 1 + .../5b33a7895ef81de11965a513bcadc8ee53993d21 | 1 + .../5b718764a0b56ae1705be7dcf35a2c639fbee6f4 | 1 + .../5b72a3d1797578b12f235ecdfb8305d928514960 | 1 + .../5b831888d2299bcbbe9bb60f6812a461f2da8720 | 1 + .../5b89dad22b6b9ad7d97be2de400eaaa8ab2a03e9 | 1 + .../5b9296392fbbb89f20c46a8276795c3b237a921b | 1 + .../5b9476567b263e9cd4c8455b1383c48f559cdd5c | 1 + .../5b95416a6aeb72fb134a6149c2103c7b4b8af54a | 1 + .../5bc0284515461bcb5e3ebafccc633649bb1ec2fd | 1 + .../5bdb30e6f918889383a02c0269f0e346fb129035 | 1 + .../5be7de136c7e263729c299d1617ae86dd468f91d | 1 + .../5c2aec0e280cc6dccb0aa9c3d4c5354a71c3d8e8 | 1 + .../5c2cccde1ba71ca24440e1be3fe94d8b2abc9ba0 | 1 + .../5c414ad191f1a4f17701285f026d3be386795f46 | 1 + .../5c4b2bd5199eaae65eb1b50ff2282715f285525d | 1 + .../5c4e02eac5ec6bfd2aacdf25eb5606e7f1f8d245 | 1 + .../5c58efa0b606fd3a9f5c4149f78312e37884f070 | 1 + .../5c7526188d4edba67f479317b2da9ebd815e25d8 | 1 + .../5c82173fb5f60e67f6c570773d0e7ca501b2ef2a | 1 + .../5cb8c6d32062773a2963b39820bf5c9c9d4d14f4 | 1 + .../5ccd74670aa8f9270b7b6d1ec35f26366e24af92 | 1 + .../5ccf6b63be9a26dc12ed0d8d9fcf8f9bd4d32aae | 1 + .../5cd441bea952394300fbb2b175630e939f70734a | 1 + .../5cd9d11e72f21213a0cd5e3b000d85ffc71a267a | 1 + .../5cf79ca7fb6c27351843e8929c62c99f6d116b3e | 1 + .../5d460d2d593010e8b116c549316144cec213da3d | 1 + .../5d547488bdc33c4ba9f4eb64d9e510fe10c43b64 | 1 + .../5d5955b5c12cb917cf3b4b20cef145f61555cebb | 1 + .../5d5d395b7d0d39e7e061299a0ac6d887b277e7f6 | 1 + .../5d67205500c9fd9a4b6a49b76f5ba2c4bc80f718 | 1 + .../5d979fc0c97f4b30b22b3b449446ef2dad2f94fd | 1 + .../5da06db4c347f603cf5309c3456c26cc7ff974ad | 1 + .../5dccc42ff618aec2747273439401c4901ac182b8 | 1 + .../5e1b24b8be80cb985494cc5e6aad6e0169f302a9 | 1 + .../5e29c824e31a38432a78e51cb6163effbc1b7632 | 1 + .../5e5cf1d19425ce321d71cf332626bab6bf9e5c44 | 1 + .../5e7998196110af78479912905025c638163deb00 | 1 + .../5ec7eb46ae8e0891018b9848bc2341e3ef6ee62c | 1 + .../5ef0bcd2fc8dc128e8583e90e1d3848ad698670d | 1 + .../5f065a6b9d7bf300aef6fc736b6256c582fa075b | 1 + .../5f06fb75a8156e71669ca65d0d928c7effc223ff | 1 + .../5f148693c5a6505500494101603fb4754464594f | 1 + .../5f1c481f15b7e89e16871d58cd5784dc2fbfc8f0 | 1 + .../5f33c80c85ea079ca0e803f9157053bb5cc26ce9 | 1 + .../5f49d9e42303e9fd5d3b3beb8b4f91d1d295e920 | 1 + .../5f617801a71e54b50b37fa8715f4acb9c710bc1d | 1 + .../5fae0f3d4ccf63a68fa6fc6ed2f605c153bc568e | 1 + .../5fd0ea816791d944d140a7f5a132e628c4df41cf | 1 + .../5fd72300746767ed3942898b20e747b5e468bf3f | 1 + .../600a49efd1ef275dd0d15886970d34f50ceb2cb5 | 1 + .../600aee354a6065175892343ec14dc1eced5c33d7 | 1 + .../60157ba4a7cd240aad985554d23dafcb6b99be47 | 1 + .../601bf2a7aa8b6c3a9adef4933fc515d494f4a95c | 1 + .../6030146df9ff31d1d977c2672cfc3792ad81865d | 1 + .../60350336430acbd30d2f4a7afd671e1a676249b8 | 1 + .../604aa389e1cdb7844558781a66e69bb80e5f7ed4 | 1 + .../6070c8050e46e845c5170ec25daefa937dbbdd11 | 1 + .../608151513d665821b3914810e70e9c1f957da187 | 1 + .../60a40b71e2980d806f6e3f1f604e1c25d8d684a9 | 1 + .../60c433ddebf0bd6ec3f44d608946aed9e843587f | 1 + .../616a7fdb9927448c5c9e34f94d4f6d784f55ccf8 | 1 + .../617d47ec32a898ac6e2b5bdd9b8e643408054596 | 1 + .../61ac7af8ebd0ac559618d67f23d159b57dce5577 | 1 + .../61ad3f5b692481700ab46b1c77ecf7e1590f4f72 | 1 + .../61ad53ecbb9e93b9d193624ee3222dd39af8c8a4 | 1 + .../61af1bfa70f27db871da9994cee2a1fa6dbfe915 | 1 + .../61cb3c37ef29bf5abdbf60157dd9334ea8578716 | 1 + .../61cca434775b13627deda2ffc7b421cc834c16ee | 1 + .../61cd2f257a7e5a750b8f03f5aac0ffb2badc3aef | 1 + .../61dfcc18f9bbed9da1c93970d11da1509777d17c | 1 + .../622454dc9deabc8438f95f3e6280211c37369c04 | 1 + .../626dec99c8f47a95e864b2a31b4ca6b916ee594c | 1 + .../629399f535a4b780a7126fd274938c9e1bdd9b94 | 1 + .../629683fa749137e2dfd6e82633d304ea6c124ce3 | 1 + .../62c572a03d69a6b40d25947abae19bf6ce5eb385 | 1 + .../62d04745f9fcb76848b12153a162a268f14abeca | 1 + .../62f4696a4d80fd4c0dc13ef75f8bacef6743b8d7 | 1 + .../62f8cb127c31b1882150c0c8effbd39c09119e5f | 1 + .../630f756a29287a797ffb5586566bc1d25758573d | 1 + .../63167cb8ba3874badf57f0e855e7f02478cfd49f | 1 + .../6316bbbc6a41808b00262eab5f5262fcfa97066b | 1 + .../63254af008fbdb6301cc07058a867abb97610c66 | 1 + .../633faf2de8dd00d4d8b3bbdda4d9f2125613a89d | 1 + .../63428d34338ada0748fdd95dc5f6db204de7543a | 1 + .../634458fa7be2820b5e56c8ae2c193b953af0ad40 | 1 + .../6360d46053a73eb3d4ae1cc875f022d5d461f571 | 1 + .../636131ac174bfe63b118e739bb030a2fae2ae0ed | 1 + .../6391af63a3bab91b1f963e133bbb54d1ec7814cb | 1 + .../639afaf27cd09001a498697b15842c3394f9535d | 1 + .../63b0cec5acbe499ece5bd821c8af36dd0de95819 | 1 + .../63b754b26183ec079fd02af865aea1d5c49d93cb | 1 + .../63c6cb5ef992299a9604582c39c7f956c65860b3 | 1 + .../63c8bbd564a4a1648edf9f05d80a6b089c40883c | 1 + .../63cc94dee9c6256ddfe004eb9fcabb932627fcce | 1 + .../63e781018cd701d6d445dc7c4ea28f9a53de825f | 1 + .../642e1fbd4f64d1ba035193a0100aefc8d436121a | 1 + .../642f40f85c3e92c672ec038a2e238351c6c24178 | 1 + .../643386ed0f556a2227416f5b32e310b70a2cf743 | 1 + .../643f751fa11ea6d366ace6319feda720f2e8accd | 1 + .../64537ec43a7b2b59f2b936c7247b94e44e1bb551 | 1 + .../648fef1a9a568a6e98c2cb836193a18ec11b60ce | 1 + .../64b6416da57fa74cb892f8728aac8bc6064ac5dc | 1 + .../64c1ab90001da13422d892838a22208f71109eb2 | 1 + .../64c86a5fba96a19af3d7f98cb11533d79ff4433f | 1 + .../64c9c1019b362e31675420967685e3e5e1d92f06 | 1 + .../64e713b456a3f23cd86eeb23d796639b7c85d2b6 | 1 + .../650b0fcd68979a929ceb682e9024fb7beb57c2b1 | 1 + .../652f7178db85a30195aec38e5bed56f8d492b18c | 1 + .../6536f2a8bf497dc4fb07e6344571b041ddf3e9ce | 1 + .../6552bfcd6579a934948b7068b4c551a0117ad0f9 | 1 + .../657e868eb96e89c02af5430fd6fd6b371011ad19 | 1 + .../65883b58c6b3dd90d25b39f5ccc47be52f17c9fc | 1 + .../658ae5cbb0d9d2acbdf007a1d56b7a8d343343c5 | 1 + .../659a2dd2fa1b9d801f3241e5ff84637ce06ccb77 | 1 + .../65a933e1d1978ba3bd2f831c22458a755de9ba53 | 1 + .../65b54fb91b4a1cb8c833485f4d132f6e676256e0 | 1 + .../65b5fce87c9d43529bc25317899f3d88952342f0 | 1 + .../65e72ac1ffd20fc948eb9fd0715334a200044fb6 | 1 + .../65f7ef2d10a182c5af3e4c60b4f23f13770b1d2f | 1 + .../660b8322660c10bb3072efbf02a01b028869f3ed | 1 + .../660ef1c053328676703178f6c1f1a9eab0eba34d | 1 + .../66252c3d296124f1a894a2bef80eb0b8d2780c58 | 1 + .../6652466b4852d5b5fdaaa69e10880f1a3b76c3fa | 1 + .../665eb41953197df4c60f261f2844052bbd0c48b6 | 1 + .../66726b80715835e1ff8fad96f3c76a0309586a88 | 1 + .../6699c94d11593280e700614b550ad835b0025476 | 1 + .../669ff69c2c67c7765c32e86e0eda8fcf04bcdbdd | 1 + .../66bbe506485ecc1f5f29905e93bbc326b119a9db | 1 + .../66cb36473c4a75d094b0c109710f2456a52e3ac0 | 1 + .../66e881b64f9e9007cc27f9ae6ea1d9c09b7ff1dd | 1 + .../66fd2e2f42f7b15c03f46c8f5852fc2b2a1288d4 | 1 + .../6723a627907cb1d91034b75d6a69d055a9d2a9b2 | 1 + .../674c86a431b193721af73dfdf07aeef65a7ef508 | 1 + .../674e2feab074ca0240a6ca55826b14e434793461 | 1 + .../6766fbe9f961609fc3c2e2dbb922ddf1dc771d96 | 1 + .../677c2fb0bd66dbf157aed281b05b92ad2c197c37 | 1 + .../6790425ac6ab89b1bf9e69e61d0a23def2470c84 | 1 + .../679748203674073239d2e5a0f7f9da26bc60feb9 | 1 + .../67cfc5cf8010d9b1c152301eae06d149589112ba | 1 + .../67f26334e58a0356529496d89738359b7a8dd136 | 1 + .../68052b4483af39b51b45980874124e3793c72420 | 1 + .../680f37fd69b7d65b2bea1f6968d0d19d60d93bb6 | 1 + .../682b9ef29382e2d77b5242e0860693527c825702 | 1 + .../68560332b36281ab2ef6e177361019a087666119 | 1 + .../685bad2808b9ebb6dd3bebf554aba2916e169a21 | 1 + .../685c94cdfdc42c71493f0fbf86f6cc75a2bfe7f5 | 1 + .../6864a32b8e40345c0b76999afe5f1c070d474908 | 1 + .../6864d1927bc63a92a60460a41b2a104d48d49e0a | 1 + .../687590a8d9eb9f62d77022572d103d4c5adc9867 | 1 + .../687648741dc59ceab592c14d35fa96ac27ef98d1 | 1 + .../6890f89ae85a96d458a2e92ae84db78ff5a3d8e4 | 1 + .../6893c34edde19b9be594417a3321f7522c83713a | 1 + .../68ae4d6748f33706497031526da5fa76f0c923a1 | 1 + .../68b62ec5b8680759a52e8934526dbf400162c104 | 1 + .../68c6c0d42504385245c61282657b3afb267a068a | 1 + .../68ebe4901e5b73c0d6c376b14ab93cb27b6b9b29 | 1 + .../68f2022142d8ce6c1188c67a635ce455d70e8668 | 1 + .../68f3ade32553e6641d33ffec7c4bbbe70c966a75 | 1 + .../692178574c30ecc0fe297e53225c7fe6b7047923 | 1 + .../692a5e26fd84eb7c487336a8ad5a27bbf550d3e5 | 1 + .../693b4e80b442d5871a480b72fc7f154489eada7b | 1 + .../693f1072f030299b192b97d19cba8ff9e045ceba | 1 + .../696eb3cf37f866313a3dbf40b4af77d45f827d98 | 1 + .../69763ca3d19be4c3d360ac96f990730c211450f4 | 1 + .../6977dc4cb03457ddcfe3fb5e4ebd32c7a60a4f4e | 1 + .../697a7f07151aad714b88aad13a439841eb1d849b | 1 + .../69c1c268224ffcce5d6dc13b49962a3c8887c2ba | 1 + .../69d24f5639ca8a5eaf58924722cc313b9936c330 | 1 + .../69f36a1e1c567e1d5e44edc58c355abb92e23f68 | 1 + .../6a35130e1e9674f6d1c241fd478fe85332fbdbb1 | 1 + .../6a37620db708370995281cf6c46512cd60efeda8 | 1 + .../6a8e8effd233033afabfdaf9d971d772b2bf9ecd | 1 + .../6abb0ece7e16ec849987f8c8acf3aee7013ec5de | 1 + .../6addba1d7123769bf9727a6a4106110126f36086 | 1 + .../6aff050ffc62f58100aca0e5b1839f097fe65155 | 1 + .../6aff0519662314531494b8b3319e2768ebd40a35 | 1 + .../6b14353e2b7d7788062623a8ab274c36f8e8bf3b | 1 + .../6b611309b991acee95b55b4b19539f65ceccf76b | 1 + .../6b861044122a6b081803e3a99f47b40277743d06 | 1 + .../6b8790739dcd1f8d3ef41a03c6508717d78feb52 | 1 + .../6ba407f0a422507bed18c1d5b52f1f550c278fcb | 1 + .../6bc93c9d2144506aeb9dbbe41a5b4a095f8fe9cb | 1 + .../6bde125fedeb05208eb8991bab6ad0713a60d9e4 | 1 + .../6be0d8042ea3f474de849bc8205c65b017a3d587 | 1 + .../6c1bef32f6ca0cfaee1705746902336e4fd67e96 | 1 + .../6c3db2c6ab0b6b80838387b923869561f9e1cf11 | 1 + .../6c7e6cdda9913347f0ba8eed8f914941cec5b2c1 | 1 + .../6c8a1b2ea553e6dfa5f653afeeb135465732aa6e | 1 + .../6c8acc451d0c73e74ad6918585d0c8776498affd | 1 + .../6ca4ca112dc6f3b82a4ee1dcb539f5412b61802e | 1 + .../6ca7072324326a43f42b641dd4cc2d785bfbb7d6 | 1 + .../6cbefe4b22649c02c818e52d3142c768ae99b9eb | 1 + .../6cdb87bebca9057c621affd2eddfbe726630b1c6 | 1 + .../6ceffd0098b1fadf6f95341e39b6b1486b6e2dab | 1 + .../6d1ad01f9d4765e28554608aaaaf7f86d7fee48a | 1 + .../6d2c53b612c9e3931c251808123e215918c34b60 | 1 + .../6d6cb592531f25b7c0a1a607342e2c3dcf35ac1f | 1 + .../6d776b8dcea06b627feb06e8e07e6455f48086d2 | 1 + .../6d807824d43b2e677fee210fcdda1e52cabbbbc5 | 1 + .../6d874714ddd3706018c9051c55abbcf1210b4643 | 1 + .../6d9b8efdf33eb396820e03892263d3b784e5dcf5 | 1 + .../6de00eee762e4ed839eb40fe1f0e25de0071e584 | 1 + .../6e0058983c03e5e6a363e64deb28a252b20617c1 | 1 + .../6e20107c698b7f36b9163a7db7382e068caca218 | 1 + .../6e41239fdb2bae4970f0a9787e683e94dcfb1760 | 1 + .../6e59dc43f59b064311d89a689dd58f9a905d10e3 | 1 + .../6e85ec4ec7f9980d8de6d6892d1415072155eb5f | 1 + .../6e99af85369d8643f1c91d6e46c038af402d368c | 1 + .../6eb985be69c6686dbcfaa0cfeba04cbc68dd5298 | 1 + .../6f3e92cd7c0bd1c759a5d1ec589fa593028c2f27 | 1 + .../6f52449eba2cea1fa19799e7de8f931e69c70cdb | 1 + .../6f56fca6cc1c01fee921e3ebec30d918b7e84af1 | 1 + .../6f6d754696a56d367c058bd6cef710ac92a36c4d | 1 + .../6f7390dad86b309a8464acc781b7a22cdc6164de | 1 + .../6f775290762b949c8416b8db72a80fd4f625aeeb | 1 + .../6f8393bbb9d02857705efc61028b43ee819ae6ef | 1 + .../6f8e2a9cd5725921d637323d42b65faaa53b2d0c | 1 + .../6f9c6ccc8504bc417cff64152e5d55f2da6384f6 | 1 + .../6fae620fa980b4c2193b8d1ca489fecb771da643 | 1 + .../6fd7c011c1e087678c2fc502f6049d5a1610b285 | 1 + .../6fda74aa278e18be569d89d76d2b7d189719fc9b | 1 + .../6fe4cc6bb00f0db22fe4cf7e68170752bf9e1f7d | 1 + .../6ff3146da9ac0acb6f0c208976dc39290b684b16 | 1 + .../6ffb4a945d04f8b031049d6b6fa49f15f19568e5 | 1 + .../70103c6bfa6033fc750d73a791d50375a1b86fea | 1 + .../70294d4a0a0438dea998f982369933dacc66aacd | 1 + .../708f0996354e7df20b2aef4b10bc9586dcaa5db0 | 1 + .../70c7802de56e11939701cba269f74c5c54434e61 | 1 + .../70cd3f4760a280eac2806e6373034a5e750cb013 | 1 + .../70e123fe2099ae69883a84234ee7d2c67ffae902 | 1 + .../70f98e7683065de833f78e968b12a17560c6d145 | 1 + .../7125c24e3079aa7ecd8a075096657aa41cbf32aa | 1 + .../712c593d655c49212ff38704eff4d5d68d14506d | 1 + .../713565a78c4f0eefe92a042e831427511dd4f5b9 | 1 + .../715cf3f1edec8508d34687cba9eb9735c4113fc8 | 1 + .../716e9a2309a2d14f0b54d759df166270321962ca | 1 + .../71807ffa82a2c8190651c69c857cb71bcb08e301 | 1 + .../71a2de6544779c774612b1f87277375ae9792a62 | 1 + .../71d2976410e52b3891d47b0bf5daf36223655072 | 1 + .../71d3d5be815413f81a15e1f21d82fa46ce4eeab9 | 1 + .../71ea7e6e573f89e2a23138bfbd547d888bdb7c55 | 1 + .../71f13e97734a6166d08d71982621f3785ea5ae3d | 1 + .../7217d80b5053a43d6fb6822470d12e76b42b2764 | 1 + .../7222bfdff7231c2aa5afe88a9b8860e057c947b7 | 1 + .../722914ef8c3dfacc1243877cf6bc0be5cc3eb6c2 | 1 + .../7275e47aff6a2c0f8bacb56d065aaba591e02a30 | 1 + .../72790cb9d6895411ac13e44b9be62c5cb05584e7 | 1 + .../7282e73fa9d18fc99fa2f10c51211fe1079693fe | 1 + .../72893e972bd42b8697f75e7ac80c8885bf7c3a45 | 1 + .../728c6175ed68889cfe3f359471f509fd1da1623a | 1 + .../729abe2b4cc9df53668a78ea8236ae421f3b5173 | 1 + .../729bc90d92d1235d6d3bc4c56bfc5a7cb1532e39 | 1 + .../72a19edf12311bc49d7e72f4ce0d25f68b5ba472 | 1 + .../72b351e21f164a536ef913cda1b95716c0de23ce | 1 + .../72b831f893332ad3733b0af04ea0e76cac65b5dc | 1 + .../72bd024e4b285894458f234b460fcaf90e8445cb | 1 + .../72de723051c80828a6318b2251cdaf29db2600f1 | 1 + .../72e0280dc174679a75da3799cbb41ffe349f9f46 | 1 + .../72f423c06f55b024fcd60e3acd20f596205615ab | 1 + .../73319dedec7db18100aca1acbdf582d38ed80c64 | 1 + .../733a381bc9e56cec2e4a856413e56d0bb7972662 | 1 + .../734891576e6360feb0a79e5f6326f4a0f3310853 | 1 + .../73617507f1dbe680e93caaef1d078ac92ad846ba | 1 + .../739b15f40bb87a9e4f1a8399ce654d068bd0d30b | 1 + .../739c724fbc1d946d981066a3f82cfb09a034ba1f | 1 + .../73a2aaa511c3c79634f98183fed1aa515112c30c | 1 + .../73ee1a7d0acd1f7e6a29e2cc9de52adf757c34f3 | 1 + .../74033d1959e62921897648eae99b7576a518dcbb | 1 + .../74068e2edea30ca07fc3d6536b7beb1e73610c5e | 1 + .../74077dff1318da9fbe3c8ecbcf570fa2b161a310 | 1 + .../742166e63d37f163f9bfa53c3d1ca1c432028519 | 1 + .../742c9cda5fd595f2f4acc988670128b67aa2cce0 | 1 + .../743bd395e890e120441210e9d92579d0c7fd94d9 | 1 + .../74433925d2da6bb3c3edcc954a98eca9eeb57abd | 1 + .../746569f919dd66a45ca13b1e18824a0afdb22d9e | 1 + .../74685cb831119333da8b5a7c83e055eedbef944e | 1 + .../7482f850ee397dd25bd1687e64b7eea626e9c608 | 1 + .../748b5f0d6e2f9fa4665f7445654524ae50ffc8ad | 1 + .../748ece6f6568749de6856f4e101f00d04a22d979 | 1 + .../74965c4ae1074a7c5d80f0889dda62db64f0d7d3 | 1 + .../74b0040c6bed65b152921df24d1d78125695306f | 1 + .../74ba2f22626f43b6a2563b0cb35c620433682d40 | 1 + .../74dba0abfcd70931e9e189f44c9fe76cb1cdbb0a | 1 + .../74e0dd99e051486e796a28c6482f0b52f0af67a1 | 1 + .../75255d425818aa4e45fa7a8ce30896b30e5f57bf | 1 + .../75362838d1ed152f60dc3cb74924d167c1b0fd2b | 1 + .../7559c841c04c474bc9ff45fe8504abb5d4e8f57d | 1 + .../757adad4f7dd459070f4f1b1f4f4f2374a57ec6c | 1 + .../75ed237efa308c478c8ee1faa516c94e45f17495 | 1 + .../75f1856401af3c6957b627bba156ed076e49ef5a | 1 + .../762487d62765bf58b6c712ce69edfc2a9d91f23c | 1 + .../767dc9730435e95ff0446a5e08a10843c28b5e4d | 1 + .../76967f9679742d07c45801b75cdb5ec88f3ea2e6 | 1 + .../7697ccd8a0cbc267875cf87e7ce982f8dbffa82b | 1 + .../769cf64713d5676b0d7823f406502b750f29f48a | 1 + .../76adb95f40dd46b0cd442f82b7eb70ed237f1676 | 1 + .../76ba7be2b975f49a68b47d255757883a4fe65358 | 1 + .../76bc86d13bce32da92769372e37076c675520959 | 1 + .../76c17c551bd5e5ae2efbb26f2e05d12c9c8181b3 | 1 + .../76c565f5646ff08d8c740ffe4cf133d9c8a3fe65 | 1 + .../76f5c55837a53eb0781baf11e0de07184a6d08ee | 1 + .../76f83799d26fbfe8607158f4718d6f5cfdc8621b | 1 + .../7705fd1f70110abbefb84b8bb3679338dc85008b | 1 + .../7722142222386c62ee3cf0d244202e77b759f34b | 1 + .../77258dc253bbfcab9ac3a990bda4f20592f9c651 | 1 + .../7726ec0c41e3e97e7d617065e6504efb8f024cd4 | 1 + .../773d0e073333f130bcff75d37d1111faaebee058 | 1 + .../774784914f2077e1681344cb01340a934be26ba4 | 1 + .../77907cfa0df9ad35b28a28dc974519599031d5b7 | 1 + .../77a416c6802644089ebc937712578c64cd114e2e | 1 + .../77b1d215fef8b044b5354a64c3541f96a5eed3ef | 1 + .../77bc35d370a04908ca4a6126a011623e2b09442d | 1 + .../77d0cc6e1223f82ea66b45b7eefc97601034b9bb | 1 + .../77faf5783504d2bd51c625bcecb48b8f87e8e165 | 1 + .../78251c5d9b329e36203639010c03798c0e1dcf20 | 1 + .../78536c856a97d639ec3c9e87656c03a486180cb2 | 1 + .../78a8516593c8bad79e4092b1b3fc0a850a266c4e | 1 + .../78a85c295a5f5c62f56d7eba74225f31406a0b51 | 1 + .../78aa0f27c839d5f0b6120545131237373c9ae941 | 1 + .../78bb53d71409ce127d2a0ea2bb3fe8ab857c3db0 | 1 + .../78f579fb1bbed4948a321bcad1a70116b995076e | 1 + .../7929ee70089306f9173670db39ef247d71e6d01c | 1 + .../79348dfc973141bd7bee5f470ac28ffd56e6591c | 1 + .../794d2929ccd4a9f38151fa274b7bba0a898aa30c | 1 + .../79693f140367ae963c396d7952f2b07e3e603755 | 1 + .../7988534604fb11aa559428f200cd7631d266dcdc | 1 + .../7993ab06fc93824943100f468b83a388dc8396fc | 1 + .../79a78205700940deac5a3af06b37f7a837ba5d0c | 1 + .../79dcbe312ec0cae55271acea3fbcad77eb51a258 | 1 + .../79ed5f67b23082b621f1d3d307cbb3833df70b36 | 1 + .../79ee5f66d93ee0d29f8b42ccf65fc760525867d6 | 1 + .../7a043102c33d83ed36e9879386a6e618668535d9 | 1 + .../7a111af866866f2de4ef478fd546fb1c0fc25d0a | 1 + .../7a1820d857c8a49a2db73ca33ae771ff2942dccf | 1 + .../7a490995df2d5f17d023de70297a3ccd20b7e9f0 | 1 + .../7a4a6b8236fc89f7d9e11728eab5f34c87b831ca | 1 + .../7a59b37e047189062f0abaf0d629290ecfb35f75 | 1 + .../7a69a216cc5a6c99a19546872d16973b864b8ec6 | 1 + .../7a6afdaaff4560a33eba5ebd9df662b110b72dc2 | 1 + .../7a87119e2369843226572e9e9603e14022ad565d | 1 + .../7aa3606e89e98945870fd6072bc248da2ac00194 | 1 + .../7ab6a9ca3af298309556e392c5a2145121ecad20 | 1 + .../7ac66a26b371216e55464bd620f00f9b3cabf539 | 1 + .../7adcfb6ec993d4f55872e19410191727163f6958 | 1 + .../7ae9dff22041f4c1fe093655030d83341a775789 | 1 + .../7b1eb9664a41baa7f5e742f91eba9581bd509407 | 1 + .../7b242c6392ed925c411f5a03c01a5b224498873d | 1 + .../7b302c63a0c095634d5b99d885e31d50d348915f | 1 + .../7b385bf3549519df825d01ede2e8d9864af0d4f1 | 1 + .../7b8328e1cf64ee86aed185c42ef2d58842a86505 | 1 + .../7b9f95b7241f7c9902e959452e13b67e26806ad6 | 1 + .../7ba72ec40b0c475f5d75c1845b6a75ce8fa2c003 | 1 + .../7bcb414301b9d095183f9b852a0c948309483542 | 1 + .../7bd191b72e7ea5e8407c5a81557fb3489574834c | 1 + .../7c0066094d3af7d6ae9649b1e0d8c4f65d29d5b7 | 1 + .../7c3defc5ef17cddbacd31b76689e0f6d0737ac57 | 1 + .../7c7017c2b46f27580791e590ff2536195830225d | 1 + .../7c7b7ccbaea2f13ad6524f8a286a5a8e5de67e21 | 1 + .../7c81f44f5bced662dae488456a190a2b5b68c852 | 1 + .../7cc6f39aa5cdd7a9af8b06f6627638b3bb770f40 | 1 + .../7cfcff79af9057d0133f2b5da206b608722bd025 | 1 + .../7d568d459cf98a02f42d26cf7a40def28f45c07c | 1 + .../7d77c20b635f8d363cafef80ce333359495fddeb | 1 + .../7dbdb91634696f23cadac0af049ca2841cbf75df | 1 + .../7dca132115921f6d0134e317bc0c5b2e5b97934d | 1 + .../7dd14622cf7fe1695e710f01b45d90250043dea6 | 1 + .../7ddf0e4fc007dcceddccc60c7634ce32af1c1782 | 1 + .../7de80c1c4a6415b28404560b4e476f7ff798b292 | 1 + .../7e165223d7af3c0a9b55423a23a84315b3549c34 | 1 + .../7e2b8b5d88ab86a02660c9f930b1dc7bc915500f | 1 + .../7e2f0de68af4544f103e74bd384b74b2e2f85241 | 1 + .../7e4029c06ed03535d5f51420d860c7da16cc155e | 1 + .../7e70e8a2a78ad2b7e350dc4a07651a5bf027cb57 | 1 + .../7e874b33beab6c09e8cdbcdcf34c226d959f53a7 | 1 + .../7e926dc258ef73747c6dee6961a01976f75e194f | 1 + .../7e952aa0d4d919ea11291440bf1f5548858938d6 | 1 + .../7e95b122591089fda778a2dbd434c55672c92346 | 1 + .../7eaf9980118567289bdc91759abbffb031b64227 | 1 + .../7eca413996ccecf266e5bf306d63db50903b1ec0 | 1 + .../7eeec8eac2847cfc829b4f04a7732871fa5b33bb | 1 + .../7f31dda7857641eb43ac8f245109af960b934c86 | 1 + .../7f36ff093686c198384796967779e512b39b0067 | 1 + .../7f37fc6f46dfd2056c23dce7388e996b2e007166 | 1 + .../7f5fb097a29a27b116140b9366006e578d1139ce | 1 + .../7f6b5c7e454d101b3d586c7653b251e1aaa8404d | 1 + .../7f76a08aef5329137e1c80a8f4fc7245375849d9 | 1 + .../7f7be6c8663be7951320cb6c651781e5583ed65e | 1 + .../7f8f81d1bf5547aca3adaba322cccf59977c80b0 | 1 + .../7f9d1a52ba029c7f6e88ff84575df1fcb1075619 | 1 + .../7fc1bf414713fa9f80c252358021f9f97b15c792 | 1 + .../7fdcc6c41ae23f27834e5e1303ac7e3a7a01c43f | 1 + .../801315c10fe0fcc26c0c57bc8f631cd93596168d | 1 + .../80333b40950b8f22b44ba7c383dc625b1b094df3 | 1 + .../80376b2b822b9baaef72428ca022d2e8ad5fab95 | 1 + .../803cd5f12d095d218780ad627b0b82b0bab86370 | 1 + .../8046cd7645e89a0fda7d8f8378e8425fefabb6e8 | 1 + .../804b90af698434a3596956677aba5a5f73dbaed0 | 1 + .../808bb1522f5aa5de2dee150c5fe9b2240c76f14e | 1 + .../809f182745ce2d04f2ed1126bbd41c71d290955e | 1 + .../80b5c3a4f3efc732cfad5a798289e246619f8977 | 1 + .../80b9b953d5d211827d5046ddef05778d9e6fe889 | 1 + .../80ce5e7fb2b5a1cf0cf9bb4b9a786e4bf6735056 | 1 + .../80d98df3c15079be160fd7897dc74ef9a9b4774b | 1 + .../80dfc8a9fc0fe40ea7577dfd42a34b367905756e | 1 + .../80ed8061d1dc94f53f2e897f7421f7e7109037ef | 1 + .../8114bd4cff1787b06e5836915e62486478f693d1 | 1 + .../8114ee0d2c07fd933798fcf7febf9e08b6cf1043 | 1 + .../813b01314937089f22d1d64ac7030c5da92ac36d | 1 + .../814755d13f451119bbd6e341778fcca05d023f99 | 1 + .../8152fa388ef907459fca58c6382e7cf481e8b03f | 1 + .../816316a3b73af9b70141fff8b2deda8269d38d34 | 1 + .../81639ecf4a65a0d2972d186cbca46aa48c408a2b | 1 + .../817d2dc89f753f1b403cbbdd6c078eeee50563d1 | 1 + .../81873f88c2fbdb0a58e15e3492b63cb1eeebd61d | 1 + .../818a1e4250991ce3f414e0f7215308cf2f23f7fd | 1 + .../82050e725b7ee8e6090dcb98775499dc19017c4d | 1 + .../826b8362320fe6f06ab5a2f4b4fbf5c94448170f | 1 + .../8283d17b50ed5619f147c5b35a8f94626b7d5b26 | 1 + .../829c3ad6c8ab04d87634c91b6fcd79faa92656fb | 1 + .../82a84993b98a8fb62799914dc21be4be700e7b5d | 1 + .../82e6db8a76fd387b0eb64cb1d7bf968ef761fb96 | 1 + .../82ec131b824b4c3f3757e1edd238735d0656fc37 | 1 + .../8336cc9fb782ee91ec2fca64631271cf0078de20 | 1 + .../833a14196d27bc959251f1d19b9e4e6829d267d5 | 1 + .../8366f34c8cc56c4971befa8d4905f0f436bf6cda | 1 + .../8393e8cc899fa71d1c638c5cb8eea55c40342700 | 1 + .../83945bfa970aa433de420b7ac4f4efcc297ec972 | 1 + .../83970d72a6907256d4feab8e061182642c3d4b24 | 1 + .../83b00e365af084f70ba64981a783c5ec81c0e650 | 1 + .../8434ef7375003e0e049d9248cca04a7d89a51736 | 1 + .../8442ffd276255dd9c5995c977f30f700234f866f | 1 + .../8462f1863bdba9f38df24dbeb39d9be31a8b3d93 | 1 + .../8478b1cc13202df27bd080e55410e541629423e8 | 1 + .../847ca904186295e8fd47a4e29885615907cb992e | 1 + .../847d38e6322523b12583cde1ac03aa9cb6c11494 | 1 + .../8485b7daa7b9582b7257e4ad6aa767ad9b2c7173 | 1 + .../848ef68b2028c2d1d2c774427baef8811e6973c6 | 1 + .../84b78b9ad073a948405f0b7ab62f9f69118ba8f0 | 1 + .../84c54f3da6a5e6fab8e1f0e9e437a602b838b808 | 1 + .../84d1cf1063766590aee538d2b55b7bd3698c0de7 | 1 + .../84dce9fa92c533d455e0c1f97179960220f0a855 | 1 + .../84f74ecd7dcd980cbe8f5c5df3e9de9eb9e2198b | 1 + .../855137df77e723cfc86499f4fdb99f284ce7dfb2 | 1 + .../857a099c2b46ccc02b866b3d0c0eb37858af7f6b | 1 + .../857c4d2b4cbe976e614059e4d9eeb613c69a523b | 1 + .../858fcb46fd11dfff505511ab32c43de93cb923ab | 1 + .../8592c80000cf304bf52753ab309ceb04e2652ec5 | 1 + .../859bf525139277f5088a3ce814f120ba25928ba7 | 1 + .../85c3b1c5bc8469eb9f51ee2b19c514d2dcc9d4e5 | 1 + .../85c9ddc38fbb85bd175bf3ac00a626752b964461 | 1 + .../85cd37fe2c7301fdbdedfe4eee2559a27232c9e1 | 1 + .../85db7ff2b922cfebbf367553f67005a39f7c7481 | 1 + .../85f392952d2f71a976ea2c35e174e534ade34805 | 1 + .../863c74afe345aa2460edf06abd9aa101ade521bf | 1 + .../8641c37d6051843e6ca2af00b13ec220650722d5 | 1 + .../86808a5b2f495881fed3418379a96faec86f72a3 | 1 + .../869a1712bd79edfc9d95461a25217f1b4b203e29 | 1 + .../869e9e9fd462fca683f8b432da94616198c8eb41 | 1 + .../86e9313b4a88cc4785b502796f36bd97f1174856 | 1 + .../871647145b6c79309648164fe2e9294d7ba23b0b | 1 + .../871b6052e7f9a98779e47518bd5f8bf607a0e268 | 1 + .../87360adcbd85bcb0816fa5f993fc9a5e14182074 | 1 + .../874116a3fba0e5b88378c9825e5b2cd8fe9707c6 | 1 + .../874498dbd2d21fb6b01edf60814088feb89dc02e | 1 + .../874b8f129a3df7a4c057a29c6d71bfa99137ed88 | 1 + .../874c302461e364f71a8f6570728f98611a5c96ce | 1 + .../8753f414b84b9ccd0c62553961f88f7c0264c379 | 1 + .../8768655b2d8b6e0cca092c104735354aee0c9b0a | 1 + .../87d794de1dead52b89760fa5e136596c5b59bc40 | 1 + .../87dcc971a3beea2e91a4d7e9643a5539ff94d52f | 1 + .../87e1e382d129600c7e7f842f983fa6e87de06c9c | 1 + .../87f0c2e540270b3692ef13bc2b91234c893bea37 | 1 + .../87f8602bd7dcfb5af1052f424e7403550ff631de | 1 + .../87ffa0846cd9a6bebb41a9d3d719ba376c69285f | 1 + .../880f03671efb6dcc3f3fdaae9491625f46f6e4ac | 1 + .../8829fdc647553393e0d223a098067bdf44dd2c3e | 1 + .../882c32949367f4f504b543399fa13b4f4118344d | 1 + .../884b9c73958e305260b7aa5b9969660166f550c3 | 1 + .../885db56c9eb82324c5a0f7e7aebd3d215505a5d3 | 1 + .../88684adb319365b522f644e785033cac77380e06 | 1 + .../88797c1357072ec5f6d7a77f8f554fdf14935742 | 1 + .../88d3c033edc04d341651610ce654caab89f0c589 | 1 + .../88e2041ce84c5a5fd2b056669856844691b520a5 | 1 + .../88e2266275388545e1f8f54b8fdbe89bbac43274 | 1 + .../88ec99f421c2381e497fe2fc13b4f6dd8e8786d1 | 1 + .../88f24d3d0ee361f07b6a968b39726f1326ec9166 | 1 + .../89063488083093835287b1f9c18b2a7944664176 | 1 + .../892cc3023c1245c75dd88475a0e49fe4d5063dd9 | 1 + .../8951f7b39335a2e501908ed76548372ea5979b19 | 1 + .../895da8e67657010ab55eddf2b5e50156498f59c1 | 1 + .../89843a3d7b0d8895dac3541e10e30e0400dc0f5e | 1 + .../899da8e446fd56d043e8d9fbd5821c09500c8654 | 1 + .../89c130024a3230c8800c10efba7110244146ea67 | 1 + .../89d3b93983fbc2ea121d1407d7944b74f44c67ae | 1 + .../89db7a1ad6220b1635de9734c32a76ab69bb70e3 | 1 + .../89df1562d15e81161f4c47827c0802d44a116dcd | 1 + .../89e008ea516ef46108ee4b85055e4cba034e75c2 | 1 + .../89fa19afc7b932f3749a095009d1bf1c6162c607 | 1 + .../8a0a41ec1bffbaf105b7b5b3784d680d00446960 | 1 + .../8a0ad7fc3cf79a721233622b6ae7a4bfc52c228a | 1 + .../8a2775fc1b4fdf627698087dbc89fc1a3b0943be | 1 + .../8a289fe11f09a8013015d4bdd383c4d26de1f483 | 1 + .../8a29d68c4034560207bd08a36c47e26953bebe3f | 1 + .../8a3477e0575b2a93269f750c0395201cd0f19a37 | 1 + .../8a3c9306c70ceb610d6f1f738df6679eabff4238 | 1 + .../8a52da0771f3d868955501e901d2540538f4d521 | 1 + .../8a7bd56f4854fd39ca2b9dac03cf4e4f92a1b93d | 1 + .../8a8928f98f7dd800744cfcdbefeff96b97543b76 | 1 + .../8a95cc474b746e69625f0fe8c262c07a37a82a7d | 1 + .../8ab6f611cd721ca128cb8f5ea3078c1b431d5704 | 1 + .../8abdd04f7c724f0a762d03fb6fb80e698280ae9c | 1 + .../8b08333db48411d829619458a66585a39efcbb11 | 1 + .../8b2cadafb5c90652623fe20f1da4fa65454b1764 | 1 + .../8b379a5db43a90e8d77da62355f3ac86f95b1422 | 1 + .../8b436810adfe76e9f0a84f1a2382284cefc4128a | 1 + .../8b4a8862bbb6306cc7b4473bba476bcaf6383aee | 1 + .../8b5c3d67f71726b53372b58a37b41fce4a30a5ac | 1 + .../8b5c7dbd04ac3065bf6c8164f3068ebc910ddc30 | 1 + .../8b714927de7515d6467407861bea2d1b6816f769 | 1 + .../8b7781da37cae546b0800cc96db74dfb1988fa5d | 1 + .../8b8235aeb63d5111ff81b6406893e2c114f3d163 | 1 + .../8b926866858180ba6c9e1a87ace930fdf129b59b | 1 + .../8b9de640b20beae0f41a3d88dacf8e7c8c00e4a9 | 1 + .../8babec8da5a26469095793b097811d07f256a5e9 | 1 + .../8c4cbb21d02e5d466fb2539022255760626149f2 | 1 + .../8c504464b5b4239a47fd8d4b185c3e0e1b6c1af0 | 1 + .../8c716ab740c917b4df170efbc22b4e47873d8e3d | 1 + .../8c7dc16b0e4c9ef242cc7ca7264ea3a4cb62a9bd | 1 + .../8c87d28e9f82d8cb2da362853cbfd7f6ed73becd | 1 + .../8cac7b8d77d23a0085a03a673ee2021520fbabea | 1 + .../8cd544fbd46d49e76648955888fc3047bf5e24bc | 1 + .../8cde25f4590bc7a0cb88896228ad8d28ecb9641a | 1 + .../8cf7c389a03e6d9d8cdd4dc0ee8615f54cccd395 | 1 + .../8cfbcd30e59e458884ca65687215ef8a39fa420b | 1 + .../8d2e1d4e20c8a37b8483b0636a53106414b2e098 | 1 + .../8d84c17e2d2a5f1b483ec417d4084cff8a83bd8b | 1 + .../8dad5eca9780e98722de60bdf4209e99730b7ce0 | 1 + .../8db878b9f4d8758552ba375e70b1c319d8ca0248 | 1 + .../8dceab2924460f1a418835afa3ff5d4bde00914a | 1 + .../8dd1413b2a30d480170c4918b00b9b7abe7ae2c6 | 1 + .../8de4d54ede6f78c61866173f8b1096d7f5e3f478 | 1 + .../8e0a71d16611cdac906bb4dece9fbf87d1a0fc8b | 1 + .../8e1a1f4379046e33058d6b3df5184a181b98a2b5 | 1 + .../8e38afa0e7c920bbb4aec155f70d1940028204ee | 1 + .../8ea1e2b4445b668065a333641c17f3c6038f2f27 | 1 + .../8eb143cfc057b1ffa8e90069a1d1ff91a90ac794 | 1 + .../8ebc6173196e2c3ad4ea6d665b4893fd67690d70 | 1 + .../8ee6b6a7957bf8ed03aa4b95dbc232e5ba56ead5 | 1 + .../8ef96afc00349b4248ec31f4755d1020b7fdda03 | 1 + .../8f07475a5f9d43a948b3b96452aea50918e4b9b7 | 1 + .../8f0862b153c849b8d035fa189f7ec654f8b3e862 | 1 + .../8f0aa9d861c14d5c32d60092ba04c2253666c4c5 | 1 + .../8f4ba01ca74a466747b89a116a26047e58536ef9 | 1 + .../8f56d7ddb9c736b9c89113453c379ec0a21341f9 | 1 + .../8f7ed4f89eb5a042d9a19a78e61c47e5c984a9fa | 1 + .../8f94c8c6a37bcc91d7a39416023f9d78ff08129a | 1 + .../8fc0dcb82f3f88e6c20e123adddbce9afa79dd7e | 1 + .../901261518c53841cdeb55041f748183f25fbdb6f | 1 + .../9014cd1a175ea66532264c818ac4692ed805357f | 1 + .../902fc67f6a0dd7c17809ac0002972da218f32b8c | 1 + .../90439abb1bce7df95926ac69fbe35e9a75849704 | 1 + .../906de10a0641d6cd4c0dd422fe885c2f9691128a | 1 + .../9076f59736d1a417df0e4e53465ba7f80da49859 | 1 + .../909f04b9af20cf2cb275ec1cf722f9a40b234fdf | 1 + .../90b75e22907115340a987929a776f6f3bea1d9b5 | 1 + .../90cddd59c8cf3bcac6b2fb6df29c9362c3a69855 | 1 + .../90e012902ea03831fe652fb98c2f284c57217115 | 1 + .../910480b0cfba5cfd886687f687f8a73d081c0b15 | 1 + .../9143eec00e7c0dcba52a44c54c7fea4ca90ac9db | 1 + .../914d626c074a269b3a9d1451d77761c9b6e8db28 | 1 + .../91b3598a2ceedd0e45722fd9287672a13bf221e1 | 1 + .../91deadec3dc6c425ddc903b195066184526341bb | 1 + .../91eb11de4a9b1c364da7e342da879d0915930da6 | 1 + .../91ed8c8f6952e9dfd27a3d45454432bd4886c8d1 | 1 + .../91f11c0a3851e5a1b473cfd412ff28fcd7903c39 | 1 + .../91f5456cb58ea9371b0fc9864e05767c7a8ee7e4 | 1 + .../921d11cbd9a6ba01c1bbfcc40c1205f6ef275acb | 1 + .../9238fc472251c9a3c817ab6cc5ea4e97c3d05410 | 1 + .../9250a8a685e1f24b96edf202f1204a332bcb0ba3 | 1 + .../9266cfa0d3adb02eaa15bc09db296fa853d6deed | 1 + .../92848420c5779bd1c6d954bfc933383296c73c07 | 1 + .../92886f1a44cabcf2e2c4dcef68ee37caa458c47b | 1 + .../9289711f9cf1406a577387a27b8bd4930e29fd38 | 1 + .../92bddaa4b62dfceaf980ba7a89bb0cc57e8fc52c | 1 + .../92c132ca1fe8044c1317c18feaca645a54713ffb | 1 + .../92e0a98f523af81899be75f9371608fd9948b337 | 1 + .../9309be25161f4e02117ef32870ded9650d0e4f7a | 1 + .../930d453e2c53ce2b64bd0f4b950552f988bdbc20 | 1 + .../934c8ad33d4e9c5c13372bc93bf26cf3107839a5 | 1 + .../935a6ed5b994d0bfdaf42bf6dd6fef4ccdbfee4a | 1 + .../935dfd118a575d599a75b00db37955c92ef6471b | 1 + .../936af0357943e249bd7e428753fc79b7870c4f96 | 1 + .../937fe4be2d5689c59d7c617e65996d41cfafdef5 | 1 + .../938f94084baf3b93faae268cc5e094df56f01f7a | 1 + .../939a2a924292c7f549cc8f8be939826a3de6b820 | 1 + .../93aa13626c3895c12d82d3763e8e916a16a4fd52 | 1 + .../93c0123f1118e26a15aba5739d9f8db784f21efa | 1 + .../93c6f793e89f2bbe200dcd083729e8e2af40c2f2 | 1 + .../93c799f74d4e3a3b8dafa975cb2453af687a8872 | 1 + .../93cedb385de6371ec85a3086d53c93ba0e1c6926 | 1 + .../93d43e9d7f08eba5daa4d394a95703498c7e2139 | 1 + .../93db6d7b5e262a03c9f6ccf71ef4e8de7acf6fb6 | 1 + .../940254cd6f8f945bc5f1edcef83ba2afc7edfdef | 1 + .../94136714739c4978945621f669ecaf025dff07f8 | 1 + .../942302c74767926cf73be9bc6753fc422157855d | 1 + .../94232b6796277453192019999be8b0fce849e3c3 | 1 + .../944304c86610b738afbff55026632249b735f401 | 1 + .../9447c6b9ffec17e55cc04961dec9cc9affec21dc | 1 + .../94862fb03e48c18301c8d883c0b89da06351e369 | 1 + .../948c81d5b83d1cdb3423d9e81a61becd8bf2a7bf | 1 + .../9499a40681e896adc4c45047502a358ed7cf1237 | 1 + .../94a9f7a609640945c820b281c9b05d992b0ac4c2 | 1 + .../94f8b89ee92aa4c7d64eb59fa7c8811ee71c5de1 | 1 + .../9506e2eb82ae6c5a245403a82c8c36c49e7dd19a | 1 + .../9512c13d6e0d292adb68e6b0ed8f466ba396e30a | 1 + .../95285e78757c883cf8644bfcd7749e4b08cb59c4 | 1 + .../9528c094e6823258fc43686ee4fdc5d619021a94 | 1 + .../95418ddbd4a17ea011fd39c57c1e4389b711dd7e | 1 + .../954e0aead2f1448d168416547f795dc8baa7eb10 | 1 + .../958966b97201943c2831502b3f5bbcccc2d1b2f3 | 1 + .../95957430f0fd0b98963bf7080efffaa2efc45563 | 1 + .../959b1c7bccd9efde5105f9deaa24262e6171f127 | 1 + .../959ef5c1dfba6621fcd8365261b27885ba0eedfb | 1 + .../95a04b0c50967b773d91751126d1ffe273287347 | 1 + .../95afe9b1e8db35a5924aabbffc0a617e6862a1d3 | 1 + .../95b65f78191ad63ba2149f216ad4b1f3a404ee82 | 1 + .../95bc7b2db1ac665317576e24031e551189f4efe7 | 1 + .../95da825d4132e9de80a280c89ba82724643b74f2 | 1 + .../95e7d15b24fad0c2e4780004a45b735813a6d457 | 1 + .../96089d3e37c85cc3e1727b58cbcd209157529a71 | 1 + .../96197c6b417cdc946b9a34b57ac7c50feea0ada4 | 1 + .../962bb09ab095bcd35f7f34055ed0fa8ae434af02 | 1 + .../962d79802cab79d4bd0c5d840a5f94281465c290 | 1 + .../966f41ea0609c64925ecaee5ba1af166ae43fdda | 1 + .../96735cbde31cd1fbca452de029d3f77a7072dd87 | 1 + .../967784fbda80e2586d2566b1d20422c209de8e3a | 1 + .../968b512c074558ddde3b21c60e2886fd579c950b | 1 + .../96a0422936b6ca5c4077e1e8fceea23c5dd146fe | 1 + .../96aac36c65d79125e3ee07ec601f71c0c09b0cb2 | 1 + .../96c1bbeb23affbc8ce9c5703062a448e21a42eeb | 1 + .../96f5f4a5b64b8e8462a72eb1d259066fce9fbe2f | 1 + .../9700352a9f17c39165256df2f2f7e4fa2ec9de61 | 1 + .../9749e874bbbae2a0dce118ef7501ad135ea6cddc | 1 + .../975509735c405d7f26b8bd4c00a32158c4f2911b | 1 + .../976fab0e9af7ab44ebc738f13b377d23ab763465 | 1 + .../97703896dfbc748c76753b9dc807252baa7d17ab | 1 + .../978c3a312999502111000de7dfe47b35516164f4 | 1 + .../97aba204ef02b37a3627221d61d8e55c8a4e1c89 | 1 + .../97cc85297ae928c35b606a80f058ab18ea5187d1 | 1 + .../97f61b6d98c9ffe5ca701f864969608db86c81fe | 1 + .../982a43466eb400711eaa92486fd3a9b22d4ed22c | 1 + .../984d407c9a0781d661b22c64ad915a555d3bf64d | 1 + .../98500d46f789f6e67f2c3e2f6af290db2fc124cd | 1 + .../9886f8415dd6095f89ff7e519af7516c9b7dc352 | 1 + .../98bd202ec6667081b4a70e2f6b929af634ac6d68 | 1 + .../98c6e09cd9cdc3967e01f4842102de38d4cda1a9 | 1 + .../98c83bcdb5956bb94639dc29099871c76564d6bf | 1 + .../98d122b2f88e6c5326c77b7a643d054909d0e33a | 1 + .../98d39d50572a07ce2b34b997b11f0801efe034d0 | 1 + .../98e6557609649d2edfa5303dc85da6929b3e46cb | 1 + .../990480b357aeb905cfea6ff646718d101978e980 | 1 + .../990924cc189ea41b110bc4dd575460c49374f23d | 1 + .../99621f82461534b8907da50ed4c7020620244c46 | 1 + .../996fd99ab96f9643d5e5713a831995b17e7a3d6a | 1 + .../99d1d11e7c7797862b2f093aecd2482708213a46 | 1 + .../99dec7b1a061c754594c315d70173856ee38ca53 | 1 + .../99e6e3dc68bf0e9973d9cda82f1300e98c4d58a0 | 1 + .../99e8319b516c140aa7badd1e9ef03d1ff1c3bee0 | 1 + .../9a11c2fda7b9c43e2b7720bd72c00e2503c9dd88 | 1 + .../9a309f12e7243094d23099f5433d19602252797b | 1 + .../9a89b6f3139174829b27ab6ead21acbf001ee2be | 1 + .../9abdf13e2635797e12d342e2dfb31a9c80d0edd9 | 1 + .../9adf5a63b8158c84d6bc327d0b1ac1b5964a3ac4 | 1 + .../9ae58507a65058e0fe31de871c7a34bab5415ae9 | 1 + .../9aece0f0260af3664b7ed391226bcf127e9fd163 | 1 + .../9af8af68c2f18bca7d94dd8b48ce8692c89ffb04 | 1 + .../9afe6dae1af7cdc07ef615de0c3d2ebdd4f68c15 | 1 + .../9b42d222b18945ea05823e8a6dbcb0d54a364700 | 1 + .../9b4d35c34d31ab2b9e6a0becef710c9b00ec976c | 1 + .../9b51c6d0b56ce78a3dd7924a0c74626beea4b529 | 1 + .../9b62911307d4c57e65b67719613737ad5d45433f | 1 + .../9ba6a6cf62c5826ffc6fcd084371c29d51f194c7 | 1 + .../9baed9539fb0ad3446fb36b9804e562244aec18f | 1 + .../9bb0ba96392a718e713162631e2036c2a0708ce2 | 1 + .../9bb98651acde18815c952146548c472023a22072 | 1 + .../9bbe3f1ede4caaf74b619e6e82cb6b6f779f366d | 1 + .../9beb9170ecc8bc4e97002efea295cafc58d55688 | 1 + .../9c1a6591aef6efd4346aa9f750f87940a9783107 | 1 + .../9c3a7896381a924c326a82a884be65e632a9f190 | 1 + .../9ce105ac118fb5187b993ba8e83d9b199dc86fe9 | 1 + .../9ce973c4df052f54b32f61eb27b74cff377e6752 | 1 + .../9cf29382585d7d87b68e19e5244cd47ddedf35c0 | 1 + .../9cffb02f79fc72e41c0ac0b800b862fb39b0a7fd | 1 + .../9d13b7a6b273e9242c1092d047290e60291087da | 1 + .../9d2325335a737991316f3231a676fb415c357be8 | 1 + .../9d3dab224014b620dde2b56cee3fec23463cb909 | 1 + .../9d6211da7d3f0bda14d5067af27a1abd46dd187d | 1 + .../9d6647e7af1e10de1b3c608d829400e5663b3d7e | 1 + .../9d86f6cf43b5947de7d50f80fec0483a9072ee0a | 1 + .../9d8bf71616bca5ac31e24117c80dad52352d5c2a | 1 + .../9da24604599fa08b01181b48265429ebf1cb213a | 1 + .../9db297bad5b8a7a06f76713a5b05cdf2148f3b19 | 1 + .../9dc1141da1d44addec511e26f89d5046f97da2c6 | 1 + .../9de0c2afad49fa532a8fea5e4dad68a5f1ab8a22 | 1 + .../9de4c3db0a099c27c523988b4b750ce3ee2c0ffc | 1 + .../9e080c9060b0017ebfc6f81bd854014a8fc88ee8 | 1 + .../9e0885e261051e23c61d7b6859e9c25f16f9aa73 | 1 + .../9e533595a0cd03757f4ce00ca1a54a38453f6274 | 1 + .../9e7cd3ed8c99ea2f99c6c55da41e1a2e4c56fb9b | 1 + .../9e94137b564120169fc22f85678cc20df3a1128c | 1 + .../9ea50ae0758462d0e77fe1397a5af6f83ad15f39 | 1 + .../9eafe1e70dda380dee958b8ae1138ab758f76857 | 1 + .../9ee645ca92c85ae4515e7e01d35579bbc6cb046f | 1 + .../9efceb8b8d6841f20ca0f194b19427087f5a97ea | 1 + .../9f0427c58e85128c73cd97a9ba41519871d70331 | 1 + .../9f07a530e3bc65a6d0a8da0a8ad697b5dc9ab202 | 1 + .../9f0aaa42e73656b0fce8443aea84266d564470e9 | 1 + .../9f1fe443098130f838ce7d5c1460cdc0f13bb12e | 1 + .../9f282d2e013696b3d63d9269bf869f906bd8cef4 | 1 + .../9f78e819952e56d7b1961320d611fdc489b34e51 | 1 + .../9f9bfc59905231b990a2d55faaa21a4cf26c8781 | 1 + .../9fd2c2accbc395448a7b5d7d8bcafd190ce329a7 | 1 + .../9fda11dcb9654da892e82b6566c4aeab962c8278 | 1 + .../9fe5d577717a9a11e4740f29f231fa15b9f4d01c | 1 + .../a01b0232919914b0a33ff87262f8ba59543b0ab6 | 1 + .../a027f0c1c564bf78407eed47f2a9f03c60eadc02 | 1 + .../a0482c5ebc234aebacf836bed890b373827b5958 | 1 + .../a04e38678141417445359665f17e2c444cc55835 | 1 + .../a05131b921bd9d6b4ea47f249e51ee98efc05f54 | 1 + .../a080874cf108744cedfbb712de9629eed229ec49 | 1 + .../a086f46eaeca09d3649d592dc5a55044d8de1f41 | 1 + .../a0951cc6042b25d64914d945c4e3758a0407ea87 | 1 + .../a0c092d70e81d7131ac1cb03d9ac8db9d2c0709b | 1 + .../a0d64b88f7e1a35f28c08292725d25214520f7a6 | 1 + .../a1258cbda9cc624bb9f238882cc84253a1dc87c2 | 1 + .../a1430a0798548b8c620d89157e6f2a54d9f94f2e | 1 + .../a16835f468084695f51026fc26ce3f842fc97714 | 1 + .../a17272e8d29e6c955e3b27761ff0e3908e202ff1 | 1 + .../a175484c1508738494b7c85ab928bb65c4a07f42 | 1 + .../a17a5140033f84e309aac8415b2a580b4050203c | 1 + .../a1b572d1fe5a9c9111033297ae5ff70014c256ce | 1 + .../a1e666afd74df95cb5c06318730dff9116d6a22f | 1 + .../a1e97b7bd972796aecfd4b83180776a015f64a8e | 1 + .../a2124d0d2b17ee1f1e0998338eea25cffadf437c | 1 + .../a2135bcd7d491b07a72fbd501a3b0be1b9f3bdc2 | 1 + .../a21f2d7b6393cda8bcff8df7034062e8925f6377 | 1 + .../a2452fe77f45ef6a612ce676a6ad9d9002b9331e | 1 + .../a25b4431040ecd4aca97dad2844cf0080a40800b | 1 + .../a26f67d81684b9007a2109269de4afe49d23f938 | 1 + .../a293d31bc0cff7b14f873a325579ef283c8e2068 | 1 + .../a2a3d1e6a386b04424a390d174bdd394f0b88602 | 1 + .../a2ad73830bfcdf027adbf16721e9d3b54303b060 | 1 + .../a2c43c8aa3d41b7eab2ae20fb1f9e973802d902e | 1 + .../a2c7ad1b00fd60ced001c83967d4fb945e86a28a | 1 + .../a2ccb0337cf44bc0b3562bbf7dcdd792989d5faa | 1 + .../a2f70a0c20b111ca1ab34de6f2319109527a564e | 1 + .../a32041608e8afe0ca18b503f0e9c30cd1480f6e2 | 1 + .../a32cec9ef7fd885815ad4d76f8a45026473405b3 | 1 + .../a34ff67c5e9162f46fa22c082d21a7ac7a23c3a9 | 1 + .../a3770de2569e6bc576e5a3947ac08e8bbe24cb5b | 1 + .../a3823af6285ec27ac5824bddb591a1f209bc4018 | 1 + .../a38819d7d0147d7cfd3e537fe3756def5a12274d | 1 + .../a3ad36fa2c2c376afbf409d8fb83e076d6d87bac | 1 + .../a3af8000afdeacd1c3d6137959029e3b260c72ad | 1 + .../a3b21dcd0e4adb6a0ef920d74555d2f699917d39 | 1 + .../a3ce74eabac11a8d8a11955afa3ad09d86b22961 | 1 + .../a3d08eda208b96260cb5b47c1478e155264ff8c1 | 1 + .../a3e5f143cabf7cdb1f6111fd744b4230796b6064 | 1 + .../a42eb9002c5144273a55bdd736db4fde19aee488 | 1 + .../a446bc4e40187735edce2ecd8fcd0e7ed43952ee | 1 + .../a45d7d60a1eef620afd536f4d69cd4196a0fa6e8 | 1 + .../a460475c32082067af4eb3aca7203a69381aec6f | 1 + .../a47eeeeb9c724e0247b882207d4598df2b1f9db0 | 1 + .../a4b22b3869f32433a3caeafcc3e2dd92c010757d | 1 + .../a4b538f21947ef1c76087aab101911f7a2cd4ab0 | 1 + .../a4bb5997e547796263c8fda8ffb4c87967e2ea43 | 1 + .../a4c0daa47b25c77cdc37c485b2ddaf4db6edaac6 | 1 + .../a4d7bdb95ff0421ff9f027700815f81ebac50d03 | 1 + .../a4e49ce4052c6a3e72232ff2f764b972159ce65e | 1 + .../a4e87c35b253e9246a0bd98cbe936ecccbf2d89a | 1 + .../a4e89f79f42904ee1b600ddd79f2d3e27c855da0 | 1 + .../a4f449044130b59be750db18b3dd9cfd3bae5588 | 1 + .../a4f68b87043e04396cfebc9287c9d7280448eacb | 1 + .../a4faeb187eb7094b39e0f0699026cacbbb9d2ea7 | 1 + .../a4fb1b9f52700ffd6bf24f06e73666810b0e3260 | 1 + .../a506dd32985fc68730bdda9ec17bd68456455ba2 | 1 + .../a51dfad994645830ec06457aa99a3680c881234f | 1 + .../a52cb7e463be1bd639929b2d3988c313fb4189b5 | 1 + .../a545cc27e2d474a7a7b7ae974d6c61935d3bdfb6 | 1 + .../a547e004e80194fef36be8b3932bb2a42502c7b9 | 1 + .../a54e57e8c7e474bf56e54f46813916ef373a9d88 | 1 + .../a56763f3af3e1d367ff0097d69c129ed4bae7f00 | 1 + .../a5706ef86f9f5e79c7eb3a0ed8168f28bdc25f87 | 1 + .../a574eeebf64538810c2a45c5864f3209361e1c96 | 1 + .../a59cd78a997d502a498c2b597cda9c8cb9b435e4 | 1 + .../a5aaae5e5cc3955871ba97a7c41d307fef2b72eb | 1 + .../a5ace5adf4a44f04399e15b18f44e6a83e13b549 | 1 + .../a5b907c867904b2e2631128c5f637988bef1282b | 1 + .../a5c7d3a86b0f7fd48476aea167e188ad2e930dac | 1 + .../a5ccdd516198da910321185e29de6f20d9be2985 | 1 + .../a5d4903bde9105b510f48ef3783702f402c38289 | 1 + .../a5f0f80d6202449807c3c23b59496812943f4d12 | 1 + .../a610da0c9997c31b63719e6fe71e9b82d48595ec | 1 + .../a63c8dad9a5b7049824ad507266f11ef32fef7c3 | 1 + .../a65e2a892ee1771cf4861f2c1bc2d5f505645c14 | 1 + .../a66d01f6351976b51603542719f7e00648878dc0 | 1 + .../a686f07063eda38bb50a12b8bff95eb203e492e2 | 1 + .../a6932b59aafceeb75607a7b5c0b5d93b3f2e17dc | 1 + .../a6b7a9259b013c7a8613e1a5291dff6a4c46e85d | 1 + .../a6ba23753e57cd1a1f2d7e37472e4679a0f113a7 | 1 + .../a6c5d8b49fda54f8534027bba1269af6af46da1f | 1 + .../a6ccf2fabae7c6419459beefef87fd1e78fb2d4f | 1 + .../a6f23c5bb6dad507a24fea1ceecc0df2a026481c | 1 + .../a708a2f8ec818a38ec29e17b587179a32b43d704 | 1 + .../a70da8709e12ffb27292ce7290967a40c89cf126 | 1 + .../a72f0993c4460fa269fecd7c19909f1a8f319d4a | 1 + .../a732f61f7a104110a42397e2f2bcff054f17f50d | 1 + .../a736014c5e879818948ab14c8851770efe5d5fbb | 1 + .../a73a44e1dbbda1a5482aab336034e0f3b2631b86 | 1 + .../a742d0a1cc22ae97a4d67dae7649bce1710b89db | 1 + .../a758aa7b471d865a094148a124f948d84c1137bd | 1 + .../a76b07ca76b8129996817bda9c15cfe6c801c496 | 1 + .../a777b3aa2b4eb6ca1a87d04550c620145fe1fd1d | 1 + .../a78c1ce484d2b06f18054390abe8ba3738befc47 | 1 + .../a7ca771886a4f3f8ef1274e272ed3b75f1c52957 | 1 + .../a7d8752018d8cded7995daa9e4cd387a0f75eafc | 1 + .../a7edc21f3d053cf490a4f0032887dd77602ce962 | 1 + .../a80117d2623452c4c4d047ad5ffdcd2cfd707957 | 1 + .../a814c0230632e5c08f097102f2033615293348b7 | 1 + .../a83603464a89b1ff53b86c47af7c54b0f8a72405 | 1 + .../a858130542274ac050eecd7df40f62a22f2af3e5 | 1 + .../a87851edeb5a5db0f65fd04d5730500bf77c3e76 | 1 + .../a8a3b52078ade562edb5a7dc6ab61ce4b3cca2ab | 1 + .../a8b03c8e24ef968616c561f18edd3944caccbc5f | 1 + .../a8b6c76ee96d3aab811609a8979cfcc67cff79c6 | 1 + .../a8cd8ebe1c92a5ce01cb9d553c32988d450e82c9 | 1 + .../a8f6f74ddb0e0e8e8361ea297e0abac830cc1dfd | 1 + .../a912b73ec5ce6f1628bcb8d8e2dca4f96fb71c5a | 1 + .../a91984528078da07c39af230d966ecfa33124d9d | 1 + .../a98e2c1c0077687fbc9166f61a386e4a7023ae4f | 1 + .../a99032acc713604176f8d95263865e2c6dd015fe | 1 + .../a9b04af95ae95e9a60941ab351fb387c007938a2 | 1 + .../a9b58c8a3ebf4f2c3c8af6242b20c43aa733d6c5 | 1 + .../a9b81c4e5e52ddeed6c3bb9ecb2f67d7e056eb1f | 1 + .../aa0024897deb20273f4fad0f856967621953d402 | 1 + .../aa0d4dde043c88d76ca0b51949f90e102187198f | 1 + .../aa17922f64ff7cd6d4aeb56bfab8af47218a86d1 | 1 + .../aa376ce844fe5f3d69f1047c99cbef99e732dbdd | 1 + .../aa471973e1dc517ae959d5706167622da05bab46 | 1 + .../aa56f625476b200e65ada22557c871b0993ff86e | 1 + .../aa76c2e6c5a061d0580802966b8efb8804164d68 | 1 + .../aa8eac8fb7ebd4e613d8bdbce660665b3f45fa66 | 1 + .../aaa6693d92f9027513267fd416bd6201171873ac | 1 + .../aab859864bc25e0a7b430273941b291f2b765ba7 | 1 + .../ab1a9283d7a85a42aff52d1937193ca27a794187 | 1 + .../ab3899ee5c2ed560ae6beb77e71e4950fc17aab3 | 1 + .../ab3bd8d93632f274ea33e6bac92fec9215c4f20f | 1 + .../ab3f300e2417c10f0eedeee88f719e82892e53a2 | 1 + .../ab5267db0c03e93e08f51b597821900db93ae75c | 1 + .../ab8bd300852ee0d05f0c8d476f4205347466c6e3 | 1 + .../ab8ffe370320d075a8c7b9daefaf545d29b7ac1b | 1 + .../ab9b4c72f3a16b2e16d40652ec33ca2a8ee4d3ef | 1 + .../ab9c711cf8bbafb6cdfd30f945bfcb03cf0272b6 | 1 + .../ac0b35cbd93f63ed7452d6acebde72ca9fcc3d81 | 1 + .../ac2088d883a0a84ac9d499824adcbd32f90b53c8 | 1 + .../ac3cd67c26d777875eeebe2e90c716e8bd592ff4 | 1 + .../ac93b3ca2d9c1ec6e07725af461ea07bb19c4dee | 1 + .../acef576be556d6720814253fa450ffd2684c3c7b | 1 + .../acf314897698e9e208634f10df880184d9a7754d | 1 + .../ad1589197b44cb0c659b26869de6c66b103e9682 | 1 + .../ad16650f9e472fb459eb487a9f883c894760b565 | 1 + .../ad382a856cee976ed155aa5fae9828cd059ccb26 | 1 + .../ad4069abc0712cf1f3c8508b699379282bbf556a | 1 + .../ad58a3216af0b6f002972233963f6be39c7aee60 | 1 + .../ad67e4cfbdacd913d6561d8fe08f456a4341a88b | 1 + .../ad705acdd20e8da3a2171681cbf04df9fa98a3f7 | 1 + .../ad8af6e7441c7a1e3628b69f1ca22b74068a2278 | 1 + .../ad9cdf2ad4d35e3f1e5279c581d0394ae2aa6972 | 1 + .../ada6178e8321efd51626a855bc6e5557d68ca3fa | 1 + .../add98ecf3dbbc875a84ca24db0f18c054af38335 | 1 + .../ade2c248d7512985cd0840191f643e986e49db2e | 1 + .../aded7ddfdd7ffa25f49bad4502033ca4a8591786 | 1 + .../adf617416382c5deb595144ff94dce09117c3181 | 1 + .../adfe9ae4df4e249a66eb91fd2f8b26ee063e6f76 | 1 + .../ae32aa63248b35fca6503c67fb4fd2acf15a98ad | 1 + .../ae87ecd86f7053ab8d71a8f1fc84c2d2c62b472b | 1 + .../ae887143b966f102e6e5967f76ea3c041af92e65 | 1 + .../aea2776fad1a4341ceaff3aa6cf21d9c37587a96 | 1 + .../aeabf0753dee7e4de87a4ffe6e1414931333b32a | 1 + .../aeaf78544ff09661df34acf0ab140ca8f6834d93 | 1 + .../aeb2510aa3d77a9c6dcf533982e3925d74a03591 | 1 + .../af3246dfb5ebe1bed3d537e239a99af7422239e7 | 1 + .../af39e152ec29cf6ef9124bc09c621887cea05402 | 1 + .../af4d15714a467c338537aaa00108e2bee33e8426 | 1 + .../af58cb52355f4201682a37056445b679070634b3 | 1 + .../af5fe2e1f2c809eb47dbe26c8a45e6a55718cce6 | 1 + .../af7648fbe02efa3d9188b9b61ce6422012612477 | 1 + .../afa5c3718b0a518cee419488c60f2f2741ba28ff | 1 + .../afb161887b4215368f593a2d8d8b6bc32170698d | 1 + .../afb93dea86c318802ea31536847bc3786c8bb47c | 1 + .../afcc94478400491055613ccd42f75d4fa9c1ceab | 1 + .../afea0adf1a155b6acd7f6a1aac9dcfd781f953f1 | 1 + .../b0225ebc20fa76a5b5efb83881756503681565fa | 1 + .../b02921b398ef06202f6f3b3f652c3c8f10888607 | 1 + .../b068dde987664207f704c5b73a6444bd16d46da8 | 1 + .../b06a48e5c2bc5a6b1fc1fec7273e5642a15c8c13 | 1 + .../b075dfb300337efeb5bdabad39fff800ee516fa3 | 1 + .../b085cb29b4ab162f71d870e1b8f890fd0cf23cd6 | 1 + .../b08ac583665d8a49691a3a09c1d5cc1ee3b8a416 | 1 + .../b0a4831326c413d2804c49788050b9f91a6403f7 | 1 + .../b0ad1929e6a50924bb0dc2de48e23ed645f857f7 | 1 + .../b0c00b0f653fb7d6d9c6d10a355b006e90bfdefd | 1 + .../b0c6d5f594246c874ab683269116303a280482fe | 1 + .../b0c73ceab30b62cfa56f40cdfd49c1ce58f55a01 | 1 + .../b0d9006bd4700ed6403142773e914c7bb257d345 | 1 + .../b0e3df60a56490ae4dccf3851d020b40b21b8b7b | 1 + .../b0ec063bde9113e41cd5590763cc5a80a27e57df | 1 + .../b105a50748888b6356015fc47a88bc2be5715d6d | 1 + .../b14851f777181f4d6991a19eb5faf986f6c5d922 | 1 + .../b16c3acf4e0fdb0086f5e645c0abf5248401f236 | 1 + .../b1776090f6173a9a430ec315e3ed5aabd24b1b72 | 1 + .../b1a7636cf60adfde2e1358221f019b1e6b4155d6 | 1 + .../b1ad5a93a73ac48400168c0d0d6867c722e2ee94 | 1 + .../b1b4eed63248ce097e83d9f1723c6762b7de9c27 | 1 + .../b1bf9f8b4545db1b4c96961e0e20f15216c0e8b5 | 1 + .../b1c08a839cd0acb873c5f79044f09ba166bfa26d | 1 + .../b1d288dfd536ad13a01041e19c9c11fead33ff91 | 1 + .../b1e426a1d9ca218fe8dfbd94e4f84deb69cf3add | 1 + .../b21f2a634774a50314c4e0ef19018373cfff5761 | 1 + .../b25b243c1918bd286e71165a606917ad6566dcb9 | 1 + .../b279bf9258b4c48220f05e2e891b91c7b13e0572 | 1 + .../b2bf386739903299a1cce995ba58544747eee3f9 | 1 + .../b34497bedf19b0567d48c3bb9d3c6c6b7285bf56 | 1 + .../b354cb571d5964e5709107acf8b69b7a52691648 | 1 + .../b3621ec700f1905ab8a89bd0dc990c56dc5b2619 | 1 + .../b36fa07023f7e2c301fca71c92d63d4b9d3dbfe8 | 1 + .../b3acffc7854d876acec4be4e8f02c5785c9786cc | 1 + .../b3b35af21b57765c4439d83505e2c122bcd9d159 | 1 + .../b3e2b23acbebfcbc2e5f4e54d4fd7005740cae7f | 1 + .../b3f7745d61088bde2d2244a961085a6e8ca22a22 | 1 + .../b3fb8896212c7278ddd055ebe8806a9aadfbdbf4 | 1 + .../b42a78220d5bf6c02b4d64f379b4963da854ecf8 | 1 + .../b471b7933c10f89f075ebd244fc7dce18cc064ec | 1 + .../b4881b1ab0b628b8e08950b8799b2a7b2f90f6bb | 1 + .../b4b0e6e8de840a729657842fc3f326a51926695a | 1 + .../b4c0e993f516711b0d2941c1993f065eee0512a5 | 1 + .../b4d27baa0c7f4d587689db8a9529b71fa55341ec | 1 + .../b535e18acfb42d8eca463e3d005649eeec97a029 | 1 + .../b537477b73545075fe86dcab51eee08a1eff1f93 | 1 + .../b545791a846adc504218666c3218bfaa83bc90d2 | 1 + .../b56d0867bbc5b009c7f592e99f5d598f728cda80 | 1 + .../b571a84a7a61d25a217f263add5e84836c981aad | 1 + .../b592aa01c9d16fda0673296c91e16d85378ef308 | 1 + .../b594302e03843a9f9c9551e5065d334f5788b18f | 1 + .../b5c23ef36f914bfe6734a376e3ff23afa4056cdf | 1 + .../b5f858c267b5596e80a4ca9e1d9d9fc97493a161 | 1 + .../b5f894878cea25475b042e2e6dccf49267130d0f | 1 + .../b605240fb46dc5b5a62d8e4fe44362074c17cd79 | 1 + .../b62a40520073f939f2c0c9f173f5df055dbcfe5e | 1 + .../b646f8b3b9e38907889dca9d182ffcb148c5eb86 | 1 + .../b64c6d5ba93dfc04d7a168f3316abb231668ca1a | 1 + .../b66c4be98c84d4c925dd2af48a775cc657d0344d | 1 + .../b6737bb08c29b827385850c321cf5d8413acfef6 | 1 + .../b67e4f02f0ff506105dfa4a0171d89ceb6d26cfa | 1 + .../b68b738158b1aed99780946dcf5925a67eb68cca | 1 + .../b6df4711f8c031a1f3fc609594a2746d2d4e3d62 | 1 + .../b6e1970eedbfd9c6a474d94f15274687adf86c2e | 1 + .../b71c95db43c402381d9a9673ab063f0735eb1d31 | 1 + .../b71ebb4f48a1c213c17c8b1e9166cc38b072dc9d | 1 + .../b72daece9e0661e0bd4c8a41d26c73ba8eef4882 | 1 + .../b795709244b876a1f75a1d801c74732832748ebb | 1 + .../b7a501079daff65d0e768364b11ab44c69980aa7 | 1 + .../b7b1691a7efc0fca08ac5b931ccb3dbf5aa891d8 | 1 + .../b7cc907a8b0d3c3e1994be68a40873b4e99a5f78 | 1 + .../b8079c5bdcff63a0f477e2f79dd8aaf4928abda7 | 1 + .../b809617c671f07711eb77d11353900df3a1020b0 | 1 + .../b83c1c0b8c3121745e8e5a5de023dfb379736329 | 1 + .../b83df399d9754f536f1c099dfad005119a65be7a | 1 + .../b83ffefda146d967a06f51678c18eff540980695 | 1 + .../b84cd36f16a07a3e7153b397d87779a08b904316 | 1 + .../b8500830a3e73890fbb7f1b5e546f8dd9a851acb | 1 + .../b8684e0746d02b30dd7444f365d9552810403e85 | 1 + .../b8a16da4c5a5e56d3c75e8933ac8d444b9d06ecc | 1 + .../b8a400a5412cc152b17a2cda851c5874dd5ead2d | 1 + .../b8a97f2ecce17499487b6afbfd74dcdb69711ff3 | 1 + .../b8b534195cd5db1dd0cc83d99d7face7ebae029d | 1 + .../b8ba77481215495fefc3d9c89e8e4251b1514f9b | 1 + .../b8c25103015cf79375d6f576186c9bf014842e27 | 1 + .../b8c863f970b2f3c39e353171b5902be0355002ed | 1 + .../b8daa1c785e390cba67ca10da7ee578c00efb805 | 1 + .../b90034052330d016cb6261caaff33ff9b2007d1d | 1 + .../b953ae08ca074cfcfeda2be630b7eabb0a0feef0 | 1 + .../b95d3cec25b96ed5bf972cb98ca8c6476eac7630 | 1 + .../b95e31c70d4e1c7f52eb020450f422dc69f2b3f1 | 1 + .../b960c57badc5a9291e8064176397f05700f998c2 | 1 + .../b98b3ae70f7b3075d295829a4a779d63ac54efc1 | 1 + .../b9c4f033e767c62469be7d0c9837ff7976269c03 | 1 + .../ba1c9764d8c0c80309b24333c675854c1e92edf6 | 1 + .../ba1e6bbaa2a233a2a9e108339e2a03d15db6c21a | 1 + .../ba213f9e83bc18ee5d889ce921f71786661cdb49 | 1 + .../ba60320519e241dc303d027571c1b6b6677274ef | 1 + .../ba66a56ebc2679a2d9e33cd52effe2bf5657ba63 | 1 + .../ba71d7ae4697eea6a410b7c4d7d542ded867b329 | 1 + .../ba830627ab470b34e7d889cad07110a91669d64b | 1 + .../ba88104330b37c0458b14c5d53739d04527f803a | 1 + .../baa4d60cb12ba51a47909ac8227ee6df6d0dc0b2 | 1 + .../baa96c5298845a9d61eb221acb395d2256d66ee5 | 1 + .../baa9d2ad62a330c543ec07ad2137ad8de21565a1 | 1 + .../bab370c81fa011cfbd5f4933e8e203b69b4613b9 | 1 + .../bae295c693b97cb9ce1c49550985444f7083bf7d | 1 + .../baf106403ddec9a4e35d93e4d7e9c8858a1db975 | 1 + .../baf7af0bebc3219aa43e93f239abf44c3c75cc84 | 1 + .../bb00878c7c40b024bd20fd9e026f76cc0f01bda7 | 1 + .../bb06616585d2cf60ef82187fc0334f6ddea3aafc | 1 + .../bb0848b612e67f32638209d33374606f9f878516 | 1 + .../bb213f4cc6adea71bcd254acd7a66de7a21a8fb5 | 1 + .../bb4c46289dbd303f6704b3a08d9e02f4c48b84e6 | 1 + .../bb4cc97eb2c8303964e3730c003f85cb88a0211d | 1 + .../bb7141b532ed1aa0b98bd58bc84ec2e08f2e47c0 | 1 + .../bb7fc95bb6e35ae77514934a3e4ffa53a6516e13 | 1 + .../bb85f9b909ffd0ec974d57b8e96a0afe8031c95f | 1 + .../bbb302be328567aed2f8a9548699284ede429dc6 | 1 + .../bbc60e9c8fe20335286b1b4c11f2554bf44bde1c | 1 + .../bbd6a4aa19b13347c78851a8c39dc87ba2c6cc26 | 1 + .../bc18a41aa534670b3eb06ea552eeaa43a8bf670b | 1 + .../bc44929f9083ce895cef6e68e78c51d907624850 | 1 + .../bc61d16fcfe7499f1dda3e1aebd61701783f32bb | 1 + .../bc63fef6a6e1da11f5ad9cdc8c82557d301f7f93 | 1 + .../bc94c09d187af83d11bc158ffad91041ae1cccf5 | 1 + .../bcd93267863bf6c12c490fdca519c9a6fb257676 | 1 + .../bcdee1bf1b6f002a01bcb15b07e1ceef6be9c962 | 1 + .../bcfbb863f9751dbc9e52565fa18f52d7cfc28dc0 | 1 + .../bd06f79eb234682d1b026c5b614cea268261d69b | 1 + .../bd10e29dccdef5c1bc2693b295ca9c3ee1a5e9fb | 1 + .../bd4570befca425281b554426e78e723b29b91aeb | 1 + .../bd4b0d5ede1b9b28ba821e22b21d2e67eb35fb46 | 1 + .../bd5b6bd1cba3b3c9511abe6e7ba85869cc7271a8 | 1 + .../bd647eceba7eb445528903854da69225eb46a33b | 1 + .../bd806dc6dd950acd2fb4799772f9284b52b3eefd | 1 + .../bd90aa727c6f46c0b214029c4cc55665db207ed4 | 1 + .../bdb75495237a21c1632a1d8002a2de43c75cbece | 1 + .../be342f285479f59388d4ad299b262298ea0a194a | 1 + .../be4056e6d4621f67f649cc023b36d0616763fb74 | 1 + .../be5fa21ede21c3ae07d18916186307eb0dbd0b20 | 1 + .../be6dd32445672ad01a41728099573f056d19f11b | 1 + .../beaac08761cf0537284bd2fb73e52c21bf944e0e | 1 + .../bebcb9f288f4fe614ba1fcc940d72dd3a2e9182c | 1 + .../bf0031c6d9edfce82c4f7c49f277cbf11c628084 | 1 + .../bf1ad139661581e23e01c40061ebbcbdbce507e7 | 1 + .../bf2b441671494bdd813cbde459c3f201b5dc132d | 1 + .../bf34c8983707b06356e258d949ea5d5b386f793c | 1 + .../bf699d29a3431d6314083edeeb34fd0d30d0e88a | 1 + .../bf79de65a5198ccae719f56cd87e06ebfa963388 | 1 + .../bf8f7dfface9a3a19ae105b018ef9c8464a7766a | 1 + .../bff5be66a4aacf336f6a1a8aabdf35a37bd49c75 | 1 + .../c0039aba73061b1e9d1b5673c11d9a6fec6c2d2b | 1 + .../c0201387de1a365edea3ae462c8e87757ac56e21 | 1 + .../c0264fc040cf13b7e91a6413eb4b7c76c194b45c | 1 + .../c02fa738eb666819f177a296b855df242f3744a5 | 1 + .../c04290c4f9037a6b82b7d2392c6c80c1ae11f80c | 1 + .../c066693ba1a2191967ded9338dab201a79f31370 | 1 + .../c06e8cd4278bfe18806835f29e8892fe38588b77 | 1 + .../c09fc10086b95973815a1c9f85b9e89af0b68a27 | 1 + .../c0c65b781da778eab58a96c85067f90b2d4d1f4c | 1 + .../c0d2b1edf6f56cba1a8e2d0b100cb918fd7f803d | 1 + .../c0d30a73338909cf56a6d97fed0221e78bb7731d | 1 + .../c0ea13628224c7cfa08a24dfe6cac5360c02d61f | 1 + .../c0f5b91a651c2d181d2e204758d6556b2d362c11 | 1 + .../c128857e0f643e229c430eb8ef7d3f5aaad861fb | 1 + .../c12b71a60e309ebef55284d493cfd3665116ac35 | 1 + .../c146489c520399688a56c27fa5210f00c10e9e5b | 1 + .../c180a8fea16357ccb1c9e9a5b1fcde5e0137ba39 | 1 + .../c195e2cf967dde5160c0de3b6a514dbb2ff8485c | 1 + .../c19c13729ac0ec5c7e396da5494a3f513d31d8e8 | 1 + .../c1b84b02f4cf106428923ebb095dd6888ae0ac50 | 1 + .../c1bff9e88ae4e9b8bfd1976fa22c1802e6db3962 | 1 + .../c1e5922d5f60798c78f4d0d669795bdad1a0801b | 1 + .../c1eeed88c600ab669ef89bb18d5ef6a6830d4f0e | 1 + .../c21065afa4b19740633e3c552a080169d12b4afb | 1 + .../c2268af10452034a5d5f9268c6f6797ab805a459 | 1 + .../c22963b5f52cca482bd79213fd1c9fd9819b85dc | 1 + .../c23bb15b95f0283493b5e9660535131e08c4b442 | 1 + .../c23dc3dee1bab058e9dda39e357268464aff6993 | 1 + .../c259be6e071636a46f638dc71fbf337480a65d62 | 1 + .../c2606a81031cc7d45d665ff29e83009cdaeb09b4 | 1 + .../c2615fefcd8c48ae15d7cdf715cb7cbe15365bb4 | 1 + .../c274fc041bc18ec36b6fc361335ee8c903ba6539 | 1 + .../c2b521f99f9142ffd0f06f35fdbf0a1e6db3b411 | 1 + .../c2bc316e1620048c72dc6375bd6c4de0d175594b | 1 + .../c2ccbe9e06e6c7ce6e43c0b381322fc7dc10a2c2 | 1 + .../c2cdbf0cad554855e5a2c77ade2426042fd077d0 | 1 + .../c2fc3139b18939587fa9376d426b5ed6e5a7d384 | 1 + .../c30440e2e36842767c6880d3419ffd67d8fc65e5 | 1 + .../c30828b92e910f121013ae0e7e80f112ff29c40a | 1 + .../c30e1db5cebdf16c793ac3774df5940ba0cbd27f | 1 + .../c34e8364c057d48255c31d4626eee97cb90971f7 | 1 + .../c34ea38700b3874b1fc56b98fba764e26e442bbf | 1 + .../c36f9ecac75a1f8369062bd659d7be8116d9426f | 1 + .../c3759872dcc57d4041c64cfe3164f0beae9647dd | 1 + .../c37b0f05074e165869fb4e36093d5d05e7f5cd58 | 1 + .../c38df517f192e8ee8b749587f2286408e1add7af | 1 + .../c3a855f0999c9f0c734c21ec479b4a2de052c197 | 1 + .../c3ca44e765c59aef19ebc14444cb23801ff338d4 | 1 + .../c3f3469ae6022ba9a824d15d3e5c6966ecd2729f | 1 + .../c42ba6332f5103b6c07a6d7b7c7a96e1345fcad3 | 1 + .../c4499beb83fe2bbc215490890a252106247a0d03 | 1 + .../c46f7002e386e4c4fd5c63195b15a2720dc604c6 | 1 + .../c4b2c2074e18699523a8e60939dabe323e8cfcc8 | 1 + .../c4c19d4cee5d79334aa9c0ff61f19d321cc3941e | 1 + .../c4e28343af816c29311d37b8559a05b14d797dd9 | 1 + .../c5c550da4ca7e932cdd65a9656f2f7c611148d24 | 1 + .../c62a6dec1ec0c7508b82a35dfbcc1d66455eb241 | 1 + .../c62d08fa40199eb68353dc3045f6c961f21f080c | 1 + .../c63b3815a0dae098fa0dce37acfd79f213436d49 | 1 + .../c63fa7c5e9f3cfa3be54296de8fcb8c5bae42ab6 | 1 + .../c66c43a4b77a41b0bcafd8714216e0e515ea32c1 | 1 + .../c671d0d61110d22335aeeff604afc7a78832a1f0 | 1 + .../c684723b339ed9a247b5fe843d2111fcb009cbf2 | 1 + .../c6911c815fc4eb1fdd0b9ab9cd09d3f6af2c6188 | 1 + .../c69155ad942486c3313ec96fba99eb4b629b0b7e | 1 + .../c694a3b9670b92c47faef2482e1c373a96c84b7b | 1 + .../c6a2dc24e570bc2a810731231121944aa2c4a595 | 1 + .../c6fa56d9a3cfa039c883bb5289ea577b65e788ce | 1 + .../c709197b022538558c64745e06cce6340703a73d | 1 + .../c70d23ebccdc1ea73e6448b1df58f62d71582adf | 1 + .../c71d9516b42225f3514b4d1df627c022e4817ee0 | 1 + .../c7252d6f48851dc47f8c3177537e12abe69a084c | 1 + .../c75d0a897f9c6981d81da8b49be331ba03439313 | 1 + .../c761e8c4c51ea45aa6c56b949fdc22e5d4c60cf1 | 1 + .../c763c8080d8e8e78651eaf9140b7aa3fef1d52d4 | 1 + .../c77f06b7f82e62ac50865f5ee4163ae369969020 | 1 + .../c785d388c9a15886ab980f88b666d4945c7ee4a6 | 1 + .../c79333ec6723390b7f1563f388c7a50d86f860b2 | 1 + .../c7946ca286a4c1e04861f5fe7ff7982618728e8f | 1 + .../c7a2d84c0203fa2c48f932ed3cdb57e9bc3d4cd3 | 1 + .../c7aa7f6d958c6e29a221a767f1d7b3c103fe86b2 | 1 + .../c7b48c2518d6d2a2a5acd628f2fb397cad2ac0ea | 1 + .../c814f8c932eb8ff0b1b54d8a85929406a22a72f6 | 1 + .../c8172ac90dca46ddecfcb6abf992c70d492bdaf0 | 1 + .../c8203a41b6f45793c2150ed5554ab5bf5c7eae94 | 1 + .../c82943e824916226a82dbcda450c1cf3f21df1da | 1 + .../c83f86babe52fc934414d829d4969407bdaa8de9 | 1 + .../c85880f71216bacfb5f45a917040c76a5b933f5e | 1 + .../c85ec330c8ffb17623ec929fd4a198c3b768811a | 1 + .../c86c77b200bac67eba1a81988b36e0764528deef | 1 + .../c8e586d3f61c1ad22568794bbfcb69f57cb8b000 | 1 + .../c8ef39151618f6cc8716604cb9c29f93559b5a3d | 1 + .../c908a5304c6a71d150881ee923df19a58e37c8e9 | 1 + .../c91a0b63271792838de6f8620c116c19028be7d3 | 1 + .../c92d0b7830a59c91b7478b9bc6537abc9104ab24 | 1 + .../c94bf93a205b5120777d3d7dedacadaf6c732df5 | 1 + .../c95a348b7638eb340903fe3cc3532859ffe5403f | 1 + .../c965920ad9808bd3f6a009ce5335213895163c4a | 1 + .../c968d693525b4f56eb70b070dbf41555841fa170 | 1 + .../c97c22cac658b5a97d90aab28ef2a0126a80ce6e | 1 + .../c9810cb06137edb22aba29ce495e0f5e87073b06 | 1 + .../c9888f4ae613d1778de5399e9c17e6e517df9292 | 1 + .../c9a84f25b1d55cfc33df56ee356e86772a479352 | 1 + .../c9addf4f9fd1a956c97c9babd5981d0c8295e152 | 1 + .../c9b398e28803f0f2e675448f50d7f4d8c39e8991 | 1 + .../c9d4c34b8cbf8c16d5b1e01af0f0541cdd36456b | 1 + .../c9dd51e291d1902fcc5389ef9f70290ea166e35b | 1 + .../c9ed258ea27321037ce42d665a00191863c1ddce | 1 + .../c9f4f38c06357e5794c082ee3a691a02193ff1e2 | 1 + .../c9ff164d902f41698dc1714ef130057761a13f8c | 1 + .../ca067c02b5a5e0209c277a0cea71db50a16d380f | 1 + .../ca0a2329b586ff39d07383acaecfac1982afe0df | 1 + .../ca10907ed5b956b8d7c600609307e951fa48d8e6 | 1 + .../ca10ab334b15fc1a219962a002ba20266142420e | 1 + .../ca3a2137d38c1e9a98dd585fbb1e5e6483a855d0 | 1 + .../ca4f72eced8e3ace4cb06faea7d35e7831c1e5ce | 1 + .../ca4f932e8cc3a4b016fedf455e955c89cd7237bf | 1 + .../ca67aeff72a1ca354129ea9f32b49e63219b5d98 | 1 + .../ca8e90d773aaf3a6cc447fa963353434f82c0e50 | 1 + .../ca8ead844b2d1ee6d2526ed1a548996bc943ea68 | 1 + .../ca9fc42da81222da6dec277f6346109bf564fefb | 1 + .../cab98434bc48379e0a365fff01d6b79bf577457a | 1 + .../cab9a4b9aa0799313bf8c71e90011d910fd2eca4 | 1 + .../cabd7d24e6498c820ccd2a79a03cc481607909e5 | 1 + .../cafd0a9a6dab6200dcb88ecbf7e265de1ad5d317 | 1 + .../cb181959ea829e3c8e81c95a1bbce81b35f8d2fd | 1 + .../cb1b57e08db865390f1b4cf22118530463b721aa | 1 + .../cb5cd2d881a8e8202863c29e2d692b6245167dd1 | 1 + .../cb7c58b77b079764dd1fdd95626fced2ad539c7c | 1 + .../cbdd9f9ee3d06ce2cdfe2000194d0fa14bb03cb0 | 1 + .../cbe16c2c588c6bc7000fbb04188632167236d008 | 1 + .../cbfe3b47d8728af1b60451af99e980f90dc89668 | 1 + .../cc06cd6c0a43860436758eaf21a715c3ecebb6f4 | 1 + .../cc13210738ed00cc6f24c6bdcc72bc63f13783e2 | 1 + .../cc3fcfad22ff1374fc57610045f054311fc92f6d | 1 + .../ccb6fc2bd7df140d0acaa9fa4f6c64be65339a60 | 1 + .../cd083f5472e5c5b1f0a2910e5400ed9fb0e38379 | 1 + .../cd2bb450b14d6d4aeb2383f17d0b52532a6d60bc | 1 + .../cd2f80cd83fdc9c096ed0c6e1e02112a0e62dd16 | 1 + .../cd4a620abc44efff9ec16d12232d21d35383be02 | 1 + .../cd536df731fdebe8bbafa86ebef1f6c819648a78 | 1 + .../cd553bbac6c8bd33ad432ca2077facbf41604f68 | 1 + .../cd8b40b4ffe13dc923550924d4133d5ac918ecc4 | 1 + .../cd8ca448ef6a3c3fa7536eee563579389b399c7f | 1 + .../cd935e81f7b958dc94cbb682f2c926e1e63fc213 | 1 + .../cd9562d304291faf33b2752268819af3d9fdd593 | 1 + .../cda64a68115a3ca8971a2747b360b387fbe1d1ec | 1 + .../cdaa800ed715e873d65a75ff494c085689777769 | 1 + .../cdae175fecf9783890ad4364fcdb7e9a26312c86 | 1 + .../cdbb9c9c88d727637e88c5e5f34b796e03a77c9a | 1 + .../cdd70dfc5c39ec02e5e48d747003dccc345d9c35 | 1 + .../ce08102de2f440a689645ebc57829a604424b751 | 1 + .../ce29a0262edb0e4c4a3905e19cb08c9a4e8318ba | 1 + .../ce4f3f6725a58e41e3545de8f93475f0f9402a52 | 1 + .../ce5a6e30faecc2d2f249b1bb1b0a21cbffc46674 | 1 + .../ce5c007dab411a6a225c1b09181578eaf6edf364 | 1 + .../cea069b190b73ea7c41e48275d6d0841d7fdd8f3 | 1 + .../cec62d6028ecb0885e4adbb89b0c33222ed71d55 | 1 + .../cedf97481d67a8a89199abfe8c15570cd253967d | 1 + .../cef118940d5799540be8721e2453120639fbe14e | 1 + .../cef395bb5063aba1aeaafde86a8bfd4c3ae80b8f | 1 + .../cf1726d92ba0a57e5cb508f7f38cf8c30c31572a | 1 + .../cf19361572439227ba12b4d90a84b45c9c77a6dd | 1 + .../cf1b9fbc48a705e782d90e0caefa83731663957e | 1 + .../cf3ddc0d11192bb67b1d1a9c46dba9cb99e1ab37 | 1 + .../cf87f1c7fe8d84db93cab39e5ec4fc004b0daf45 | 1 + .../cf99a5aabda5c420d162ea57e1d44c83b4a5f444 | 1 + .../d01804b3f650a230ba4caf6f35710074094ef4bc | 1 + .../d018c44a4a260f0faa1c368b22e6fd2da47b4279 | 1 + .../d023d686290f14c19a40f74a18a2c183ac38c02f | 1 + .../d07029fee875ecd9778957b1eb1b6ed3ba90c94a | 1 + .../d076c78276e47d5f2551df88390966202a644ad4 | 1 + .../d0a5a7631c5914f69f44abe8d926e7ec265b3853 | 1 + .../d0b362a6e10e2e3ca3df573c3918408d11230109 | 1 + .../d0c14f7b59f5b7c5e2348a842c4f17589992edef | 1 + .../d0d80b81785e11a47eb4778cde0392ceee57d442 | 1 + .../d10cc817535fbf7ed3ccccfffd59542e31fd811c | 1 + .../d120192543d7524d72dbae6640c1fd01b655ba8b | 1 + .../d13e9dcbf612e2b605c913bf461a40c14c78981c | 1 + .../d145e690ead8e8b91dcf655a058473fba40e05c4 | 1 + .../d1624ab2e4dceb28dc1e7d8f042d85271b474f44 | 1 + .../d17443611cb2c74ecfda516700477ecdd4ccd1e8 | 1 + .../d17802655b5504bb0405ee7934ae6e14c9c2f6af | 1 + .../d17b2da02d1d622d7b71dade71d9adc392999c5b | 1 + .../d17e92c55da82ddc95d75ddd15779fff2868ff46 | 1 + .../d209841a9bb6b9ed3a4954465f454a0d304ef888 | 1 + .../d263cabcd95f3dae465820283cf9b428e89c02f6 | 1 + .../d27d3711e16baa8c89ff9c90b6ed0622ca86ff8e | 1 + .../d2957d9af2c85119d0e66bf643c7eb85bda86170 | 1 + .../d2c7c0da2861f14114f11766107a7b8aa6efd73b | 1 + .../d2d896106278d4a3d97f13f67d9366baca387121 | 1 + .../d2e69860ee1527c081669b81f428a0dee46fe218 | 1 + .../d2f56cc722b3fc0ac3792e7c09a53592a22039af | 1 + .../d2f8f204891c46f5ba28af13b77da60a054ed30f | 1 + .../d33cb0c2e7c01d420f375159f3d266e71d9c3bcf | 1 + .../d34c8b66d9e51e1f51b9432c19d0d95ce51aa297 | 1 + .../d35d96943b798f0362dee33b1c9dd9f5ce520bf7 | 1 + .../d386337a1d0705a7cc519dc2e044e51c1831c3f8 | 1 + .../d3918bf85a56fd7561082f401a5ebd4a0d642f87 | 1 + .../d3abb997507d97ede96a2ca419dd8554e22db558 | 1 + .../d3ad578f5f3076aa52c4e35e8a0002582433fef9 | 1 + .../d3ae88e79c1801c2da2ca48244ec5455bb3abe76 | 1 + .../d3d3e2a151a062b9f319dd5ba2d382d38c8c95d4 | 1 + .../d3e5ffbc18b1ff4b1db6426ef3962f8c9cf5cdf0 | 1 + .../d411fdd25ef73e64648572aee57803f358cf4bb2 | 1 + .../d4208a5824d1318820b3784412f424db595f35ae | 1 + .../d42eec126dd7b1e4c2c574ddba68f4d0228c3d09 | 1 + .../d48d445fdf8825eb982e112320fe51da22271d30 | 1 + .../d49f2424f7e47981e92cdca8a120fad3b5b46351 | 1 + .../d4a61c1883d529642358ce1ad476eae28f347140 | 1 + .../d4b2d30318741bf9642c79ca255322762ff5a669 | 1 + .../d4bdc84c656fc906c865b5369626edd1bc0d575d | 1 + .../d4bfa057df6de164cf5907d1054f7b8f37dc55ca | 1 + .../d4d9f5cbd1cf9b75c9821d5d4746491e46efecb0 | 1 + .../d4eb08a9f93ac1b16665f4266fcd570b760e0b41 | 1 + .../d4f11edc0601915ee85baffdd4721b1d1b3b60d0 | 1 + .../d4f65e281be1feebd4750e113b05138a9c44f486 | 1 + .../d5048f880c8259302815a101c17c687a6ddbb1d7 | 1 + .../d52e561715cddf6ccf811873e1d9570a5b25b677 | 1 + .../d5466e451d61467e6bd45f66d7608457be8a656f | 1 + .../d54c6961bb95000149d7cffd738f1f34eaf1d825 | 1 + .../d54fe454199d96dd8e1ab2d0069417d2b9be7cf7 | 1 + .../d573fa9122441a358ecf4c86ea6af4d26e08d93a | 1 + .../d5892cc02088b2b7e11febc39b2d7cd9ed96fec6 | 1 + .../d58b0cd6e4cd0f7d08d8c5cd8f64fb89bc6c77b3 | 1 + .../d5ad81a47205ca9893336dfcc66e370ee84776ce | 1 + .../d5f073d2ccb1d4bc1f4bb2d64971cda535f3abc4 | 1 + .../d60ddd04ef59ce7655ce0640bb9f05a050c50572 | 1 + .../d6114c41966cf276af2ac91a43b0dcfdde3ff6ec | 1 + .../d64045b67fe7d9bbac6b1955c9709dc8f62c2574 | 1 + .../d65a0ff7ac01950da5c822d87cd1f1b94663c71f | 1 + .../d66bdc15b3bc47537708b688679685d7823933ec | 1 + .../d6a9e0d913d7e024afc093007237124f4a34364c | 1 + .../d6bb41e59dad21fc3ff2d5bb0c784b27307ee4d3 | 1 + .../d6e668abcd05531d83ec0bdff606bec2368882a8 | 1 + .../d6e9b28f9645fdf80b2547f4a875bc298680a83f | 1 + .../d70c950a9b6157fdddbd8eb01fed07f12638844f | 1 + .../d71a3d01673ec097d7272cd0fcf4fc12f19a90e8 | 1 + .../d72363609fde245d8d04d59c1d9e2386e97f61ec | 1 + .../d73e808e6fe07bbd4cac3998bbd227cb333f3860 | 1 + .../d7435dd29bb609d8a757deda3c46bae9522fafb0 | 1 + .../d747c65611d3195e76faeea3dbaca70f0255d690 | 1 + .../d7482427db68b72ab957e74167dbc8c28842b070 | 1 + .../d7491a450345ac8fd8bd2da583d6974224917a83 | 1 + .../d750ca1379d7933d2b0750e621fad549663516ca | 1 + .../d762cef9eb8735ca5282dea549336970c32f0470 | 1 + .../d784977d5fa21c31f0f510f5a1e2d50f7815c63e | 1 + .../d78a59aa9fae45d7cbfb5d42a6d57744818f4f3c | 1 + .../d78b2cc4912fce258a371b34976f623504f00bf5 | 1 + .../d796184dcd2791587af889f67ff0bd146da22bf6 | 1 + .../d7a0524afa7b58f919577fc272101adacde12154 | 1 + .../d7ae7546c73cd724ed329a7e111b1874f3fad3a3 | 1 + .../d7c12a570bce792607b3d5f23fc34ef6392109de | 1 + .../d7d1782dc0b7c5e12cccab548a33619bf58a1db8 | 1 + .../d7ed3928aecf2d3acbca2fb8d2ee7775f7f52ccf | 1 + .../d7f54f75c60667b7fd883f34d666d917d0b88809 | 1 + .../d80fa30ad1a0824f0da7b212e606ac5496c0715c | 1 + .../d86ea65d288be1fd03e9e19e503b17612c637374 | 1 + .../d8ac2a246d17295baa73602fa55f5ef1d6edd095 | 1 + .../d8d54db51b8f8299982f8136c6058c9e8063811b | 1 + .../d8def6ae46c2ae1d19b457603e2015ddad467ad3 | 1 + .../d8df811ed2f11c79fe945f4943ea3299a251ecb0 | 1 + .../d8e4caa314d508c3062410f0d680eb589488140f | 1 + .../d8f77e44fa8aab802aa9131ae9f319611a054835 | 1 + .../d915944728f949574638f5527cabdee757340ecc | 1 + .../d92c58e19437f5a57d606edb988ebe5449b4db1d | 1 + .../d93387aa595f09f4e40642c715176275012422f9 | 1 + .../d93dd1d6d2d9b39d77cd72571effaec51dad73cf | 1 + .../d9462d451520aea896848f14167cad63f8eb631b | 1 + .../d9632d4e4f8d7cc9db523291bb7442332d7c588c | 1 + .../d96eb1935933e5d8a16bab96d06d05f8b1ab6619 | 1 + .../d9721f612be2c4596ef2507879885c69a5e6e58d | 1 + .../d975fa857300c644b1b8b86b9e5579116325e3b6 | 1 + .../d97fad7ecab4d8f234efc71d9e0019d3cd6866be | 1 + .../d9d8525ff675d165e7bd245edb10bef8ffbabf37 | 1 + .../da15d30445dcabf73491b38ff9b7fd6ebf09fabb | 1 + .../da20174fe1299204fdf8cca351a424cf681308a2 | 1 + .../da3eafaf969feb19889dd744b3407db1aa866e06 | 1 + .../da802c4897e37a5e51f367edd23444c11faa33aa | 1 + .../da8a14b376513348d7ee34b10ff6883f15cc6fd5 | 1 + .../da91d607fd954405726ab36fa5677e8163634ff7 | 1 + .../daad29bf36401da76f1b83f5cd1cc0335bf5c14f | 1 + .../dacc869b2d12c823c9a4bb00e5edcd51d35c5978 | 1 + .../dacf3352a5bdd39737fb53affdf284ce61f4e97e | 1 + .../dadf4bbba1d78a438712afd4e84df10275987f0a | 1 + .../daf266d227dfb92686b3d8cb80cb4d2c4e849468 | 1 + .../dafea52d56a314eff0b38df4ddd35be40d4f6d24 | 1 + .../db01c81c34e5e86ae44bef70289a143173916fb4 | 1 + .../db06c61fa468b40855c83db915cf67df55dddeb9 | 1 + .../db191d70ebee38a520718fe3a295896a1840f111 | 1 + .../db2f754795e1478498a59b3071a7852a32a70b8e | 1 + .../db41febcaac001cb453d4a2ca2a285784d5a9cd8 | 1 + .../db5b9f12551bfc0e07e9c89d6d5971df6e4eea17 | 1 + .../db715816bbafa4a288124a98d0cb4df6a364cb3e | 1 + .../db81d6ad0913097959d953bb6c2e7d576f846a11 | 1 + .../db9eba0b2b563ba067b7fd8e8ee5ddad9b770dce | 1 + .../dba31a12d1adba28878c2a0b52b782a5c72d9972 | 1 + .../dbef858a545baf2d110f1d0e917e4ad258acf993 | 1 + .../dc01bbbcdac6b5bb939e4be9ca56e5b8c3d165af | 1 + .../dc0806f74a893b88a54642a35cd820535fde3ed1 | 1 + .../dc161355dcd6047181d0cf4e25b6a5525f6fe50e | 1 + .../dc3539d6d3a6a1eaf48ce5185a088eb43b9e383e | 1 + .../dc480267e0ef9ce538b42b77872f2b3532c35322 | 1 + .../dc57d8ffab2a6632708a04cb288629b09aa5c82e | 1 + .../dc593bc1e5ac44230400eae2d39c99148ad34e4b | 1 + .../dc6dcb26e66c42982855aa1a52a31fd33b250e19 | 1 + .../dc9395f17d85f800578e0d6e8bf89ad9746befb7 | 1 + .../dc9899ac6fe73116d5e9f16eb5d414386eaf20b6 | 1 + .../dc99d264d246e0de31744757d56e34f81e69221e | 1 + .../dca299a0e651d9aa555003ff4a5031f3fccf9743 | 1 + .../dcaa02212efb1b1d7b35ccd1cd382be6b3e66e71 | 1 + .../dcbd31842dac9e7cdaf7ca65e510582bfd1d1a9b | 1 + .../dccaf2fc47adc1a3b05f03d5fac2a95f989db10c | 1 + .../dccd7c4272928f022003ea9c7aaa12dcc004a54c | 1 + .../dcd041ba07357566b4ee1ed3cbca6574c6154f10 | 1 + .../dcf7577a80ecef6f3ca732dc2e3adaa48e682fdb | 1 + .../dd000d20a2f313c18520373a1f18e05ed9a150e2 | 1 + .../dd0b6ef4b264cf0858480a3460b856a1c8f6dc1d | 1 + .../dd51571565035f293d86c40ad779317f87aedf8a | 1 + .../dd6e129061e453f9a72be030e9baeee3e56fcf0f | 1 + .../dd8c174c7b3d3ef26b6db13442b39a50c7f55222 | 1 + .../dda325195c906944f23de872fa78b2af88631c09 | 1 + .../ddaf37dc11a8574b722f076f36e746bc7c60e215 | 1 + .../ddd4994f43b538ffca8eb9b28ca5fb499238d0b9 | 1 + .../dde699e331a7df59bcdada620624b5ba61dc5dd0 | 1 + .../ddebb704471c13ddfaf31413aae6c013515a3717 | 1 + .../ddedd372fed9df45da4d1a59cf4f5cb35009e49f | 1 + .../ddf80ae28fa37fbe9cd6a838ae2c428932ef3961 | 1 + .../de08cbb895403680951a2ebc90561ac53b1a1f4e | 1 + .../de2a5caabe3e3b0b1b01533e95ed8f482c6ba0fc | 1 + .../de4f89a55a6d907d16952ca4e4166a5979c39c8b | 1 + .../de5a7c1447572e08c6b28e753fe662ac083fd6d1 | 1 + .../de5adc575b18b1c34a68e95cecf166f402e523ff | 1 + .../de5af33427175b7548895fa5441e430afe11d1d5 | 1 + .../de6875a737b7c8020f44b1c99b70c4853e661ecf | 1 + .../de6cf2f6180404aa31b1db7d09cf2baddd601d44 | 1 + .../de8a035daf19e89e29ba0bbdd71dffd1f9cadc5c | 1 + .../dea753eea55e305608844a4f00655549302ce7dd | 1 + .../decd88daf9600a38bc143777492f37dad4565eaf | 1 + .../ded66ffb0cbf19f233f516bd3c63fe712650ef33 | 1 + .../ded72412b30434c168fa06e48b7e054269d006c0 | 1 + .../dedc75c0c2ee756e9070605ce546167cacfbcaca | 1 + .../dee101172e339916048ad363fb6995306d7dd142 | 1 + .../def37ff0a6957f0a571488b66a768f20f7079048 | 1 + .../def74495863bbdf9d1af666161152708f2ba582d | 1 + .../df029e9ebb9e83aace8f0071d2840c27c3ceda07 | 1 + .../df085e9114f63f74c86f24312e70f7b5318ad9fc | 1 + .../df12a4966bab2fafa4ffe3a2ffbbbe8d697046c2 | 1 + .../df16a0297efbbe308fa83a0f3e6ad417689b028b | 1 + .../df865486869273fb5f7adede25fcadcb18ce2221 | 1 + .../df8de808e45c8839831abd0deb0cabf9143753a4 | 1 + .../df8e03791d82b6610c2c15664032e32589ea35a8 | 1 + .../dfa3c5fef1b463d98f523033ec70daf8d4bf8803 | 1 + .../dfb36ff8904f4e8107d8ba666de3e5f94f741bfe | 1 + .../dfca4159ab78bba17ae0d77f088b5aaeb3144266 | 1 + .../dfe3a4307a38993f68b0c2518ea2e3e590b0c9d1 | 1 + .../e0128963856adfa8520b26e571a93610b5355887 | 1 + .../e03443f852b194c164bc4732fb9c5cc86effe4f6 | 1 + .../e0588caa737bfbd960ff3fd219ca062193aa6bf0 | 1 + .../e0aaba61fbc722b30669314cc389d44b8f989110 | 1 + .../e0bbbcbab18f481daf5b315491e268254f4983fb | 1 + .../e0da4e0fe645f0a953ac5735fde4706cca9e1197 | 1 + .../e0ebae4900e11a9672f2ae78e61178aa6247650c | 1 + .../e1087672834b43c44e37cba854b5b9c9f7179a84 | 1 + .../e10bddf4873386e1fe3f6dc0f2b20f5c151c89e1 | 1 + .../e11d98e0003ce918a6fad19f550ea0702a879911 | 1 + .../e1326c178bf8e7b80cda8ea9f9dd86938329c849 | 1 + .../e147111796d5b53a6bf6dc9458c50027b4d09f87 | 1 + .../e14960a185290ebe95ae6279b9e869e837251710 | 1 + .../e170c4afc7cf3aa9e0e5c2670686778994fa4f11 | 1 + .../e184bc711398d7c0c1fa6934192fda6c555a1cb3 | 1 + .../e1b11848fd01dfa0ba32bf126463d9d364ab4313 | 1 + .../e1ba585df080f7b1a7f8f2c7db5dd610f19174de | 1 + .../e1d952db862331ca79b0a9c72c162374fb1857d7 | 1 + .../e1e49dcfb28496b89f4ea5ce3dc0d76d880076e4 | 1 + .../e1f0807d7b3a4bba613963e80beb7c74850d5c28 | 1 + .../e22480aebb82f3343403252198ba68a247b6d046 | 1 + .../e24851678d123d31e1507cb51348f5b1dc101d4c | 1 + .../e2496a88dd988d4f3ef82308c3cca33a874d45aa | 1 + .../e255d1877a2010d7fcfc04ed18a7a010df14a2c0 | 1 + .../e25fb2f6402ada66247ba900b01f074eb85ba330 | 1 + .../e279990fd5d183e1d8b4f404ff9bb849d49c365a | 1 + .../e2d5ca40d2c53fc997406f6b09aab24c3df0d72c | 1 + .../e2eeef8ece1fd34ca3dc565f6c64e1e27ffe4394 | 1 + .../e3196566970071a5ddde94e45545b255dbb827b6 | 1 + .../e31f0de61f44c1cdc4d261d497cf718662ce97d4 | 1 + .../e3201e6cef5abb4e32884e254d83db6c48c0c98e | 1 + .../e3588db1c621c20dd15839f0a47a91d2b3a7c779 | 1 + .../e35adac42c2fa3fac81b5b56415001d9ef213aa9 | 1 + .../e36c31c772e822a277d29a41f45a505e97121618 | 1 + .../e37bd80d8483f80595f8de680651a88967e6b765 | 1 + .../e385046269e21e18e9615b10675db2b779814ea6 | 1 + .../e3cb84cf87cf0a5a0e394a62331f15e54cde54f5 | 1 + .../e3e431ac9b495d6b12f584909dd0891e732ef378 | 1 + .../e3e86951be6edc4911741f8779b8b81f8e19669e | 1 + .../e3ee89b296eda3cdf6b73af88989c9879d826a5c | 1 + .../e43e0f4dd6d04ff5cb7feb566ac7effde65eabaf | 1 + .../e4400ed471cfae79f01e699c1535a927cd7db111 | 1 + .../e4403314230ec5266c263c14b3167d0495467abb | 1 + .../e4476c9611f68d7aed1329b54ac787a7dc19d3c1 | 1 + .../e4549906b6821c9cfd2bdad13fcedc9f2ce44c8f | 1 + .../e46150bc653c31e407e6428aa1a6ebf50bf84aea | 1 + .../e4a1dbfb8711c43befec064b8fd396058b0c54af | 1 + .../e4ac1ef7380b8d2111b6763169a1743b27f8990e | 1 + .../e4be0b4404267bdc3cff4674612fa0aafae17da8 | 1 + .../e4ed5b23d5de1068cbbde995bd4acee64e91aa7e | 1 + .../e4f857e19db4cfd96f2d5054dbf40b5a9e492dff | 1 + .../e4f9951077eb874d4585b5156eb27d51d2efbfd3 | 1 + .../e50744f139df817035a18b49f300ba44cb0343d3 | 1 + .../e50e205a1d18fcdba7e8e5fcee9033cc4707f9c7 | 1 + .../e52cfe3453de9b1d75444df456949cb75040b8b6 | 1 + .../e531badf585946f2d8e4ca711ad08bfab23b255d | 1 + .../e556fbc1cbc098965abc9f19de4e699a65701b97 | 1 + .../e5a06372794c8a0907ebcab73767cf918aac39aa | 1 + .../e5c2adb3e9fbf1cd914078ec2a63b5eb9a6e3abe | 1 + .../e5d4d4aeaf98b811a93af7c9329c6daf9589e991 | 1 + .../e5d756b155e51281410e56562a664673b0c34fcd | 1 + .../e60ac2a186190f5f41d0f98adb9107b436491c32 | 1 + .../e617e275740cca2c1002733c0b62505410149814 | 1 + .../e62e88a5e5a9d90dbb6072f7ccea09b105b0f310 | 1 + .../e638e75f42344b0c3f6564246955fb5d040cf293 | 1 + .../e649d79b9010e5f76ed8c6e317e55e0e91802bac | 1 + .../e660a993ca6c73039fade4ba3407920ada89923e | 1 + .../e66bd9898efc98f464bdb5ece0b4f62d602dc737 | 1 + .../e677ad001a80f4218fcb1f38a8705f1d1caeb999 | 1 + .../e68c741fb9f3bd4beb774a6295165f0719b15942 | 1 + .../e69ec7f55ad3c08cfcb37946cda5c9e8bd2f23d4 | 1 + .../e69f704fabb54c278ef86ba0a840cc8b462fd273 | 1 + .../e6a0539a6bf9730e9f7197aac29cee83936137c2 | 1 + .../e6beac0076a3f98639e16833588cb1f7c3630b56 | 1 + .../e6c4139fc79b0036b50c35d40646356790b47698 | 1 + .../e6d6a1ae86f60f1e63f309397a0008e6d4943d50 | 1 + .../e6f3612a73d29882780cefe3d036f68100cf0c7b | 1 + .../e721205c821d1cfd009e603052b5cee6c677c52a | 1 + .../e72d5da834d577e08d8919888da3491b1cfc2395 | 1 + .../e73715f248773b481cfeb2552aceaf18e4b03797 | 1 + .../e7865be06886b6e888fd9d883d55c5faee586ef4 | 1 + .../e7a375809c225d5450a212abb59a2046d1b5e007 | 1 + .../e7c4905ac16a9774e7e810abf68b112d641b2d9e | 1 + .../e7c5c79c85fb153f7749dd5dcfa97ac1401ef95c | 1 + .../e7ccede981bb4c65fa47e7fa310a9348a7109ba3 | 1 + .../e7d9419f6cc1411629e9a09076e350aef3f0adbb | 1 + .../e7e9f1bdab686670c7fd4b590aaad6feacbbeb73 | 1 + .../e7fc7fe2e56e39aff52a6c1a3f3ddb20c48651d6 | 1 + .../e81dc94c8743dc71b11667a65c76c5ef0e8eaef8 | 1 + .../e81ee8a9a2165602a74cee1bdc447e2da39ab762 | 1 + .../e84308cd3dc05d65738bf940c73e11c1342f53dd | 1 + .../e8597fda210c9006c4eb35f55099dd53f0804f47 | 1 + .../e85ebbbabefe13b277bdb7bb290e81d48aaae843 | 1 + .../e87e2014a5a0695a3cdffdfe859201eb8beb9fb0 | 1 + .../e8ac301abd5dee5dd4ef8cb0670844bca13f0323 | 1 + .../e8de8be751822aa2e8bcf086b89ae6ca68052255 | 1 + .../e91b8692e5e50d7452d085b3580b9cdd1676e122 | 1 + .../e93758815f2e92fcae33eeb424961ee124cec2c7 | 1 + .../e9501001531cf5569b3b23daa63df0825b2e06f3 | 1 + .../e98353914c5de48ee650dfff9741c1285bf29368 | 1 + .../e9a85210b1a1018e7666d51f88430bb5d8bfdb3e | 1 + .../e9b76d10a6eebe9f37aaf17e3c71921c02524b86 | 1 + .../e9bf6e5a4cbd00e35ecd77dc39c1f9264b9f4dc1 | 1 + .../e9c730fdf2c5807b82dd1e4d042e404651d4c118 | 1 + .../e9d4196818fdc0fa92415cb4a2aff1b96c783b8b | 1 + .../e9dbacbd2e05c550b025911cfa3ca5803dae805e | 1 + .../e9ddf35ff01ae9bc71730f02a17a6079411fde98 | 1 + .../ea1fa2cb1864ebe376683d33d94b64f0f54a43dd | 1 + .../ea224ce2e986d690db2a198af3f98a8408cdb30e | 1 + .../ea3247c42e38f93b6d8af0e43d7f34cc4bc25070 | 1 + .../ea3a67eab454450f7603fe0cd98a27c731eb5d00 | 1 + .../ea3f5822d3ff42dc536ca2f868583167e04fcb24 | 1 + .../ea9383c734b03a942fd3c33b4cd6172b0c606aeb | 1 + .../eaa2ec29b35602bac1202162cc43997d10f21ed3 | 1 + .../eaa7b118760debbe1d5a3d4a62d81d966ab89097 | 1 + .../eab77792be235dec9f3313676498d907e560b5cc | 1 + .../eae489d9b326b6e764166ddf53140f5ddb3b425c | 1 + .../eae7770e2a494f15bf0e76460740c8d2e1cbd22e | 1 + .../eaee09f4a0e178165105cf2ccf81513fc80541b9 | 1 + .../eaee80bfbe65037b08eeecc39e40e2b8276a958d | 1 + .../eb0e20fe944dc77d38b2fc2582d02c80d3d9628f | 1 + .../eb372b84ca640e23188861d0efa04be45ee5f243 | 1 + .../eba9b48ee4b2ed1d213ff803ba46409241800f53 | 1 + .../ebaab3cbf799854c56be5ea1c8570b79e12530d3 | 1 + .../ec0558d3bd9826dcf5a547231702b26bb029d5b3 | 1 + .../ec11e48dae90b65ac226a309a6ab974cfc87474a | 1 + .../ec236a1ba693a15d7cd145cb072b03a9edafd25d | 1 + .../ec2d9171350303a508d3a35306e1da95e2d45a8c | 1 + .../ec3dc1b7325240192c1e37e75c29831fa68e98d4 | 1 + .../ec4c99541792d43b2c11d31a995e9d4e6494735e | 1 + .../ec5f10d715ff4121c9af8001b65d91bde62f884b | 1 + .../ec7ac5952f631f170c9cf5ab7afb10a2800e3be7 | 1 + .../ecc052cec3d69b0b941945fcfee7fcca160fee0f | 1 + .../ed414b2d37754fddb26883baa6399318c130524f | 1 + .../ed5648d424b5a21a684d02bc55bdcfab06ec276e | 1 + .../edb0a385324372442f7d831b7fa747c2a2ba5d40 | 1 + .../ede245d24c4ccbe651f556667d1de8b18984e6bf | 1 + .../edf48d71ea536f47f2ebae0ef4c1a54805cfd2bf | 1 + .../ee216fd86ba1f2f2eecc6892dba069f1fa7e2566 | 1 + .../ee227dd2c697b5ad500c732edea24bd9f2ec08a7 | 1 + .../ee39d37f93b56b4c318cb83ca60e411ee5c1abbb | 1 + .../ee4391649d8b6cf1ed2a18eef419b54a19d2f481 | 1 + .../ee4b75d279f94af5208664797cc453ca45044806 | 1 + .../ee537050d4b74465e99c77d79aec50879344edb4 | 1 + .../ee666d81fc0411dbdbf38406d49ba05685bee495 | 1 + .../ee92d4d96303e7296f561d5b3efe262b3993bc85 | 1 + .../eeb6e1a4eebe04ce7814c38efaf8b5b7e910296f | 1 + .../eef8d1a1e8c3a9566015b3ae089052a50d3c3ddb | 1 + .../ef1b9627be8307d947f73d84910a2d343187898a | 1 + .../ef34d2a06ed043b1d7aa5c55d07e649a98e022d0 | 1 + .../ef5018ccc4d868e150c22f85faea02a352f124d9 | 1 + .../ef588660a2f4df9f52c4f476036ae92b435dd8be | 1 + .../ef7b84160b7025ab4d29b8bb32de27500874c4e0 | 1 + .../efab9adce18cdbdd285db520ec08c755b0916a2f | 1 + .../efb25951d890dbd071c4a3811042fdb8e0bc4326 | 1 + .../efb757b9644c060f72a7441ae9f0dbb05935ddee | 1 + .../efbdf30300adcc55d7c50d4ec76a75496d6d7b7d | 1 + .../efc4b323ebe3c0b9e2f2fd7168ab4437570a54e8 | 1 + .../efce2a5687afc47a9a7951b0d14a86559eccd8af | 1 + .../f00c95582e31d9827eabb236ee8b4b776907a667 | 1 + .../f015ec4058e4e7ae0d1a64823882e2e3fe9f8bbd | 1 + .../f04d521c21ed8372ae0bcf98ee15b6ca83c85bc2 | 1 + .../f052250556f0a305782ffc367c106bf8213e5199 | 1 + .../f0b8804a6b3fa0ab08fb2e07758480377e212f0b | 1 + .../f0f31b265d33a5adb67af2f1fec8248f8855469e | 1 + .../f111543d0f442f268353dbbbf00ebe24c21f930e | 1 + .../f1439b2e5f242df93c3d5fd61e367f850098495b | 1 + .../f150268fcc20d8c1e1607d773fe9c2af148e9e8e | 1 + .../f1728d0e4771e35b1cb1998adc82e22eb67a65c9 | 1 + .../f172e0269b4ce4678ade6f0ac95a9448d2453792 | 1 + .../f17ba688055f4e28c6c763a1a67b55ffd27ab22b | 1 + .../f18786606f38657d15f1d007fa2934ea6034a605 | 1 + .../f1ab87a390b003a1f262909e41e5d3853c0dee70 | 1 + .../f1ac308d98f3a982e3c86ebf022541b3c7a53857 | 1 + .../f1b42b68e02cd3503158c2cedbad9f43b4a782fc | 1 + .../f1b9e75c583d069af4d354379ec7cbf02e95c41d | 1 + .../f1cfa6ecbcc68ba081804e6b531a970f6cc70cee | 1 + .../f1d42d84bf3c0ea75c9ac6babfdb06afac572bfa | 1 + .../f1e479e1e2ba063168c4201bc568c60b601c98f8 | 1 + .../f20f49c8c8a09c2b68a66d3640886588c1e95299 | 1 + .../f281cfc9b564fceae1f18905886e1a2ea6a79f8f | 1 + .../f29cde4e4d18f502a83e953d7e6aafc162b49fb0 | 1 + .../f2a7b6785e4184b100bb118d537c3e1fe7deed13 | 1 + .../f2aed5fc63d1322cbfa59dc10fc63c5c13905bad | 1 + .../f2b01b12b747c63ff84c1d178f5cd881a09d61d3 | 1 + .../f2cf8fc04a84276827038c4814930bd1166dcb83 | 1 + .../f306f010650c1ce3662a988f2d5c8848a114b742 | 1 + .../f311f3194f27d91bd26c7ac20214d331ade7f1c9 | 1 + .../f32541dee791305368453ac147924b5c2d9dfff7 | 1 + .../f34aa9739565ceed4d2a67fa8e24e1cffda032d0 | 1 + .../f36797074db1a3316cf9f79b8cedbea196a94883 | 1 + .../f3a1124f0e210f773fcb446a4c6325838f796dcd | 1 + .../f3abe34a0b2b561230223ebd55fa58c1abfa4752 | 1 + .../f3aefeaaf417737c9b08ddb588ac8f34f1bfd7c0 | 1 + .../f3b9a054bd33583afbecffad0407dcd117b60cb8 | 1 + .../f3c37d9c9bc7bbacd5acc05ecfa2dd6b3e4079be | 1 + .../f3dbd1cd81a692630c41a036e51a108069161d76 | 1 + .../f41b245dc4b63227dcd52bf8df204c69ef2c632d | 1 + .../f43a467e1ed501e4fae97b23c7ac5f51943b4a60 | 1 + .../f4466a6264c406cffaf61cd062c6954b8145b827 | 1 + .../f45bfc326aa2978cf872bbd25ac92e74c51b222c | 1 + .../f4604f24ef1262cff35502c140d3a3ab09e62650 | 1 + .../f47e1dd86121d4d47b5e315b8bc8f941d5c890ba | 1 + .../f49204f8e85d64be3490b7843476939194bca10c | 1 + .../f4cc235e3a3e0f11b34f866c952d52ba470ce96c | 1 + .../f4e60bca3a955a55d00e4186db841023ceef4e20 | 1 + .../f50995c18b1bea7d6e8f78c8db8139687517a781 | 1 + .../f50bbc9cda906042a1e0c756df37b20c36a36df6 | 1 + .../f54e6bed090f658f483733605be1def47c4a00f1 | 1 + .../f5584e332423dfd006828addcbd73f040328b087 | 1 + .../f558bde45b06e08703659c22eb17a9b25f4941d1 | 1 + .../f560ba3291103bb7f5cc015586c6946d5f9e8857 | 1 + .../f58c6d8117f18e36e7e31efdf23c18aea2a31b7c | 1 + .../f5a0c3cda376e7bd8f7a27caa053bef8617f451b | 1 + .../f5a0cbe081c8037a7f36d438e758b6bcd92abcbc | 1 + .../f5a7ff2dc8ee9ec1ef36b73c60de71d7978d3d27 | 1 + .../f5b5807a9afa7c7b8351abe9a32cdd85d696c15e | 1 + .../f5bbca8f5a7339d3dab2b5f758f426cdb744dd6d | 1 + .../f5bcbe0530388a9d1b0ddeb9fd52bbf9553589c1 | 1 + .../f5d29c01f03e55e2269af62ed6364a98353003af | 1 + .../f5d9f6f2aa6f7e44a24ecb63e2ccbe34ba6eecfe | 1 + .../f5f01b555c46d9d86c043b50cdf0dc05ea4c3d08 | 1 + .../f5f4bc663f8ff671a51d503c89c7a5659c0c37ab | 1 + .../f614cb3aadb14fc4cea6a3fa949cf1c4a5aa490a | 1 + .../f62efd7cbffa78cde24f12d7daf90b120c6b3e5f | 1 + .../f6389882692a6a18e427b73ca3a0a34f645e476b | 1 + .../f63afc3910d5b449d7d26586af8681218677fd6d | 1 + .../f64c19e45d11b07f585d65dd6f72bcd502d95a0a | 1 + .../f6514adef6dcf766ba7179320ec6c88126688614 | 1 + .../f6765d4b30feb17d15d4bd81601ea5788d8d26ed | 1 + .../f678ee4a403b466dde13be7e941db7ff7684a932 | 1 + .../f67b572dbad35568f4ec9ba53cafa2997991340e | 1 + .../f6840c641bb58cad923fc4f9c092164413ff4ce6 | 1 + .../f6907b785c509927b03981052c87de1c9ae5f772 | 1 + .../f69458974b285f9c2ac48a1bd10b3dff2d042a8d | 1 + .../f6a06f14f3641278ceae3733db1a7eff71fb3629 | 1 + .../f6c823a2b3203faddc06a15a61e6f0e3f3e7fe8e | 1 + .../f6d3771166a0c4e00527b2be21466030fb499521 | 1 + .../f6d618ef7f588f9fc237b18f4ad42a84337ec67e | 1 + .../f6e85bce5c033f269bbb51eb480ff58e9d814ed5 | 1 + .../f6f146c32b1b724af896fdd11df580e1dc8f0e35 | 1 + .../f70b704bb277d70481b756371e4d92b9dadb2d85 | 1 + .../f747e1181b2e9303715bc0aea1cfca3babf00705 | 1 + .../f75c71bf10464658e79f72142b2c327cd6ca3347 | 1 + .../f77abd655150de8bda3b775fd291d5b2bf27a1e6 | 1 + .../f77e7d751660a7149e80488c8245aeb9be6eeb1d | 1 + .../f796e5b0c5ce67017c553a21907fd6a51a1058eb | 1 + .../f798f952feda25e6fc4b37a429dc368f73d0d158 | 1 + .../f7a5375d5d273e7eda804ac9335745a3fcc568ae | 1 + .../f7ab44a4e73a9b24bfff6a263c608abce5696639 | 1 + .../f7b76430a96ffa6355eaf12167d0ef405e2669d8 | 1 + .../f7bc805d350c55cd8e24def5b79ca3b2fe88ae80 | 1 + .../f7c02de0b4f89c043a3ebcb28bcb0e1396fe0e23 | 1 + .../f7c0db2c2ed3c1e6f19acace4e10c0a99df88018 | 1 + .../f7dad92963bb917f67c0a5d9a11c7a623157603e | 1 + .../f7e399c76d4ec4bad55a5e054f90aaefbbefd54a | 1 + .../f7eb97d1c42b9d53be75b54f5a30490ace43fa77 | 1 + .../f7f77a67d9bea0dcf7942ed62f29985930122ff0 | 1 + .../f803ece8ba109526994448413d0b5389e89fec0b | 1 + .../f808813d157995b8d10c3cffd1f2616528fdad1f | 1 + .../f8136e4e492396052082b2d3eb7f45ce735b580e | 1 + .../f82150120ceb9a7b6d24c8144a2fc40fca6c7ded | 1 + .../f846835025106a0f7d7d18630b87f4321e626835 | 1 + .../f84d4edb22fee2109b5e00fd5ac471e49c15e25c | 1 + .../f86da2aa3ec8718d5308b84e38864225dfeb6819 | 1 + .../f880da185f238333598d20ee2e139229db739f94 | 1 + .../f881895a273c1bb8b76313a9f0ff65520ad27975 | 1 + .../f8835febdb55dca918a36795f2203f4ee4a6b841 | 1 + .../f8930f55c55efa927ccec4a3a273d7af679fe190 | 1 + .../f8d8d11d95153ea9449df09e90a108d0d46dd36a | 1 + .../f8e2668d6408cd99bb9b4144dccc869b5b5c3995 | 1 + .../f8f8928329f1f5ae3c966fb5ec2113e076eafcfe | 1 + .../f8f9451ddef15046ebb34b8ada8344e100e77c6b | 1 + .../f90c809fa2d5593e55f0033ebff4eb6de3bf7a4d | 1 + .../f92ae6d39d23d890f0a4bbb1700628cf97bfd5a6 | 1 + .../f92ff19d417dd30243bf0048d8947d33b4bf7064 | 1 + .../f950057a3fe68206273e224b1a0c92d75bf4cffd | 1 + .../f9527f53e0c01295c939d322769c4900690eac47 | 1 + .../f953c76798af4534303b789774638f6750bf064f | 1 + .../f95a0a2fc49acea853b2fa634e154189153c8e19 | 1 + .../f9ae968bede9072e9913f275110691863b21d704 | 1 + .../f9e9604adf8a8fa70a8a2d8699243ba825c4c268 | 1 + .../f9f75f9ba55d66c16536a85bc2406112ffaef2ff | 1 + .../f9fc9e2a4f2af623fc883937402f30bb39d7194c | 1 + .../f9fe421cb9a3952dc45c8d26a7ddd2f53b952533 | 1 + .../fa167d1943fe2df543ef85cf25a11984cbd5a5a2 | 1 + .../fa18264203439b69d71bc0bf47eb42c09a0276b5 | 1 + .../fa2f957cce50a9e152ca7a429346901042de9fc5 | 1 + .../fa49e364b5b789a639515d469e423d52b4437393 | 1 + .../fa4c5cdf26645ea0534a498e6eed0980cfb7a7c8 | 1 + .../fa597ee663f096b76cd93b293bc4d7f7aaefc262 | 1 + .../fa5f468e5077c7552905d4b235d938ba656a8956 | 1 + .../fa6ab5df5a5d808c4d736244d69510fa6e17f904 | 1 + .../fa7d0a81564418a5df2eae24548c51be6486a4aa | 1 + .../fa862d772ea0c551e8a2b2e955c3a314343a9249 | 1 + .../fa8814b8ee8c8c0b59933c5df3e62bc70882f43c | 1 + .../fa90b9f27b4ef61835f27c23a72f15ab0bc2f8d4 | 1 + .../fab23300d1e8e0ac77217a22517738b6de5afead | 1 + .../fac25d9ab05e1c85b45aa41798674daebf462237 | 1 + .../fad3ceab7d42e3ad2e07e8e88420e42ecf4dd0b8 | 1 + .../fae57409d88f4b4a8521c3bbd0560991c2a8986b | 1 + .../fb0c60f40b98f2127746a9a359165bc8d41dcb8c | 1 + .../fb18611c9ee4a416896469762bdeb28572310087 | 1 + .../fb193ee81245f14d9b19cacbf56cbcb01dec02be | 1 + .../fb3a40b01dd182dc32fd94d86be6aeec9cfda7dc | 1 + .../fb3feed4650211ed4fd84c29e022288219979e4a | 1 + .../fb47b82833fbb82a6a9844bcfa75012bfc49c9cf | 1 + .../fb56305966435f548db004e141dd614dcb71150d | 1 + .../fb6bbbb8192f592ebde7d1bb37924cade63c96c8 | 1 + .../fb803c7f3034af611f6dd19c6cd55245f319dd86 | 1 + .../fb84f0eaf5bbab71df0de66b8e502f2e52604fac | 1 + .../fb964d7fe5e195fa98766d8c4058c8258646e95a | 1 + .../fb9e6ec52fad74ca4a775818f110ba219adaadbb | 1 + .../fba8bb171f6333a2f8f8099ed7061ca7507012bc | 1 + .../fbae541afc8fd2842b660a15ba61db2dbd26dca5 | 1 + .../fbd1df6484bc96485135c2b29c3b125355c62848 | 1 + .../fbeb89304a55a7ab8a338b807ad02b8dd2ab9c28 | 1 + .../fc1908d2145aa6f1cf830f6aeb9bf24470454805 | 1 + .../fc6ad6441d0d3ba1260efa94e68b4af0576bf63f | 1 + .../fc6e7fbd1048ad4d4f9eadb18d79a7ddaddee244 | 1 + .../fc72b1ff88ff0bb9a8e7a27d860b1e727bc825b0 | 1 + .../fc833899bb452572fe6f3e84efd6737cca4eb786 | 1 + .../fc9c2ac36745e20f981008bf5f85f146b9c9dbb1 | 1 + .../fcc3f72c08a026d3c0f4cc50227793a26fc3efeb | 1 + .../fcd03d953e3452f116e4035d2029de953e62334d | 1 + .../fcd91aa7ad2c0011f8f2516f5687f9e91aa76b71 | 1 + .../fcda2ec36cb7652d368098a0c2ac64665164601f | 1 + .../fd03276208dbd6219a958f47d888d22fa303e89e | 1 + .../fd14286e8c496b3f62dea79de42d57a7b02b22fc | 1 + .../fd1a057fd69f2113eeeafc133d9d51c7cded9125 | 1 + .../fd1c6cdb67bcc23e0920c0b2724591695d7e88b1 | 1 + .../fd1d4fb758440d51c0db63f8a401ad4f7dd1ba6d | 1 + .../fd1f6bb68c1a0317e7fb3e9c65ce2b765717f38f | 1 + .../fd275d920066468018b3ec78708e01bbf4634f89 | 1 + .../fd30d1fabe3c70d63ebf6eb08fcc889f2062dd96 | 1 + .../fd4b486776c7fc4e964a57db37f46b6fb893446f | 1 + .../fde4e348195fef4158d57bce09b8132261e53404 | 1 + .../fe3a254545ba65877f7f12c1957e6983a9540725 | 1 + .../fe4991f96a4078203ed82f3dc9d57b0f5c8d7c31 | 1 + .../fe5a94896e814e80a5d4f0d17825ea303d136807 | 1 + .../fe754dfb4207b538736ac33f4d6d3a8b39ed7eb8 | 1 + .../fe8a403b551fce23551c1a364c5d7a9bdf4082b4 | 1 + .../fead4cb9efe769ed34fc79a6f7f7c301fa44b950 | 1 + .../fec0428a7d5b4dd2f894abbef22a4fd55b125e79 | 1 + .../fed7b4e8b0ffa8ba7ee920409e365993f8f23423 | 1 + .../ff02cab52406b52d736534063539b815a83e9ec9 | 1 + .../ff0c9a3fa047cac34488cf6902e39ceb0b31a1f2 | 1 + .../ff0ecc250f060fadb2dfbc788f027f6c46ef6c40 | 1 + .../ff269c4192d92ee1330ca6cb368ffaf3dec65d44 | 1 + .../ffba9a51f35e6cfeb9726e3eb3551989a55a2ab6 | 1 + .../ffbfc4371313a95615a944ca1fb473bf2569d7aa | 1 + .../ffc6076c34629ad5d440389f97bac8efcd2db5b7 | 1 + txscript/reference_test.go | 190 ++++++++++++++++++ wire/bench_test.go | 2 +- wire/msgtx.go | 6 +- 2763 files changed, 2954 insertions(+), 4 deletions(-) create mode 100644 txscript/data/taproot-ref/003af31dd0b5a50c2723531e8ca22ae8ca6e7089 create mode 100644 txscript/data/taproot-ref/005e61a50014d33f7309097490534db3c0dc65fe create mode 100644 txscript/data/taproot-ref/007f313a1a53428b7fc9eaf54c5d51be20e10567 create mode 100644 txscript/data/taproot-ref/00850c1cc564bd0dcbb02c3398f9fc8e0219a317 create mode 100644 txscript/data/taproot-ref/0089a0f18b0647cf2bfae0c93e9ae39b345d1611 create mode 100644 txscript/data/taproot-ref/00b6fe5a14ee4fb3bb65e0aa28e70cb57f0cd0b0 create mode 100644 txscript/data/taproot-ref/00cd1f1ac746e81ae27bfe1e9a383975d0bba949 create mode 100644 txscript/data/taproot-ref/00d07d91c86c11dbbd14f4edf55c1f496ffaf010 create mode 100644 txscript/data/taproot-ref/00dc037c98e799a31facfab68fce3187ad7a0f68 create mode 100644 txscript/data/taproot-ref/00e2723c3cce5d6fa2b7db987e5fbc1d75297650 create mode 100644 txscript/data/taproot-ref/00eb1a2b8aed4a406ee59371fa0a50e6679857c1 create mode 100644 txscript/data/taproot-ref/0108a92da87f766ee005ac0bb220f78b50d04101 create mode 100644 txscript/data/taproot-ref/010cc78772e75503cf488b6267f5891e1495c962 create mode 100644 txscript/data/taproot-ref/014aca010656e76077fe517e999ea589e88307d7 create mode 100644 txscript/data/taproot-ref/01686c55b9d9f3d0c2d9dc8c0911de32df21a864 create mode 100644 txscript/data/taproot-ref/016e25aa492396c1f2937c07dac87f3bce812041 create mode 100644 txscript/data/taproot-ref/017f425514c38506670a6136985cf2f693c1851b create mode 100644 txscript/data/taproot-ref/0181b63b032265ff6a54d3acaf33d2efc67028ca create mode 100644 txscript/data/taproot-ref/018284c1e780a7aacea0d945603d5f06254c5cfe create mode 100644 txscript/data/taproot-ref/01ca217ccf1ea0e39003e90d0d3573454b370bd0 create mode 100644 txscript/data/taproot-ref/01cc26fa177761f2440d4f78790adfdcb27c9321 create mode 100644 txscript/data/taproot-ref/0224ee3efd6d6c2e6024db65267c008a3786f0b2 create mode 100644 txscript/data/taproot-ref/0234f23ded5600eb13895b83e3d3208daa621654 create mode 100644 txscript/data/taproot-ref/026745c2e6a71ca361cb3f37fe3f4e9c3029688e create mode 100644 txscript/data/taproot-ref/026f12b427239f4351f951644afdf9e483ddc4bd create mode 100644 txscript/data/taproot-ref/0274119160b74eb12e8b0ea869012528e5c8c64a create mode 100644 txscript/data/taproot-ref/02a2d45e622dec5a4342e4be185659da883e8d6d create mode 100644 txscript/data/taproot-ref/02bb3113c2f000ec71e0cac539468d820cfa2df6 create mode 100644 txscript/data/taproot-ref/02c77525ae2279633746cc24153272f0cbebb2cf create mode 100644 txscript/data/taproot-ref/02d1c1fa4446780154693993cbb3b3357d7dc38f create mode 100644 txscript/data/taproot-ref/02f4d455a5e5230510c642f46a00e2819cbd49fa create mode 100644 txscript/data/taproot-ref/02fcf2313f765802ff09c238af833842580fe461 create mode 100644 txscript/data/taproot-ref/0313e7c2127076391d6fd9696d30081eb2c9bfb5 create mode 100644 txscript/data/taproot-ref/0325cc06523d6b80529e7b67ea669a8cacc195a1 create mode 100644 txscript/data/taproot-ref/032b54a2e80454a2b7039f32a4974095c2f018b0 create mode 100644 txscript/data/taproot-ref/035336c778f096bfe56ccd9c44ca36a275649299 create mode 100644 txscript/data/taproot-ref/038d58e7a5bd8cd3c42dbd68c099f5900b90ceef create mode 100644 txscript/data/taproot-ref/03ac2fb4ae30f213cec9edbaf2796b086134d050 create mode 100644 txscript/data/taproot-ref/03b65143f1009a2a8a2f6b758fd8559f040d207c create mode 100644 txscript/data/taproot-ref/03bc1ab1714e0ffffffd3593268beb217c603b54 create mode 100644 txscript/data/taproot-ref/03bf93a96878a9f8ab6cdeabb7da6656971299e2 create mode 100644 txscript/data/taproot-ref/03ec899fb91c58bbb5676ebce177b0b63fa704a1 create mode 100644 txscript/data/taproot-ref/03edb43f652ba7e0ad56e117bab26ed1b3cc0b66 create mode 100644 txscript/data/taproot-ref/0401cdbd85422acd1857a2cf6024ba4b7b5d909e create mode 100644 txscript/data/taproot-ref/040d05cbd66190be71c513b0ebd00bbc34debe8b create mode 100644 txscript/data/taproot-ref/04369027c0cf8f61083f8faeaf5d15a4bba2cb26 create mode 100644 txscript/data/taproot-ref/043ee2fa352668d08af2912ea4c7dc868039dd7c create mode 100644 txscript/data/taproot-ref/046dee126274f9efbec0b1803cf0483b40e0bc0a create mode 100644 txscript/data/taproot-ref/047736248915b6ec7bb882618f4c6428dc10bc32 create mode 100644 txscript/data/taproot-ref/0496f56b7283138d77bd26aa97936a80588bc908 create mode 100644 txscript/data/taproot-ref/04a0415662e8fe755a1cad7e31e996b0f9553a15 create mode 100644 txscript/data/taproot-ref/04a9e5bdcdafa1f723281d72593020692f3b5004 create mode 100644 txscript/data/taproot-ref/04bb5c8ad218b2ea6cbabde04b776a727cb804d3 create mode 100644 txscript/data/taproot-ref/04c14170bf3650e0dee112ba4b888f2e76fc3b69 create mode 100644 txscript/data/taproot-ref/04f498a7f3cfb530edcae02afc0d1476b8fbcd8a create mode 100644 txscript/data/taproot-ref/0526255fad6bcad83e0f38f3e175d8b55d0113d3 create mode 100644 txscript/data/taproot-ref/0530510aa69fa36a6377468b144a6daefe9e0779 create mode 100644 txscript/data/taproot-ref/05645a121a9dee2f1e618d22d9c0e11f1729c008 create mode 100644 txscript/data/taproot-ref/05723fdb3ecd4a3d4acc01d8ce541e74f11ba38f create mode 100644 txscript/data/taproot-ref/0576b0175f23da9546b0ed7d213c1bdf55941dcd create mode 100644 txscript/data/taproot-ref/05a7b91a73da2203e485ff51426532165c688040 create mode 100644 txscript/data/taproot-ref/05d3a449ff645092d95ff6fa07d433d341861837 create mode 100644 txscript/data/taproot-ref/05e7d1f74a0f0d69935dcee5b60fd0b08ff396cf create mode 100644 txscript/data/taproot-ref/05f2dfea38b07d623e2947cc2c7963f25a45e24e create mode 100644 txscript/data/taproot-ref/05ff688173b90131ed218e693cd3e0735c88955a create mode 100644 txscript/data/taproot-ref/060f27e89600b0edaefb344b00420aa71360fd11 create mode 100644 txscript/data/taproot-ref/0621f65ed4f98e0fc3ba2caa915de84ac2773b64 create mode 100644 txscript/data/taproot-ref/064cb40080f9955f34713af8c9ccd370c7ce8d39 create mode 100644 txscript/data/taproot-ref/064f3862567d3645a67ad42e8f1234919491ef00 create mode 100644 txscript/data/taproot-ref/06689eea577fd577cf0ed48baa3396126bb6f1b5 create mode 100644 txscript/data/taproot-ref/0672af82ea3c78b3ade4b7424ecf5c00466fba2e create mode 100644 txscript/data/taproot-ref/06882dd6d50dc8061c56b887fa16764a4db5cc51 create mode 100644 txscript/data/taproot-ref/06aa8b12e6ae5c391fb3d92c4050218d552b6923 create mode 100644 txscript/data/taproot-ref/06b7ea9f43da11b479b267aca3bdd7cf6fb9cfa7 create mode 100644 txscript/data/taproot-ref/06e74af8b10a6ab9ce11036f2747f8034ec3febf create mode 100644 txscript/data/taproot-ref/06f54531f7cc822f36462b303f5eed8313ca07f5 create mode 100644 txscript/data/taproot-ref/07249b6446b452a9005766194cb824b77c6ed600 create mode 100644 txscript/data/taproot-ref/0725dac7b6c36d404b706902e2a350065ba66fbd create mode 100644 txscript/data/taproot-ref/073b21ccb622912fef49f0555d5ed7b6ea85ad7e create mode 100644 txscript/data/taproot-ref/07904e76401a888153be57bdc173982a4396aea3 create mode 100644 txscript/data/taproot-ref/079662a69dfd16ca9215a4e0c822fc44641e72ed create mode 100644 txscript/data/taproot-ref/07991f2bbd7bbe3fad499b0c428f795590321613 create mode 100644 txscript/data/taproot-ref/07a56716b603afd041d05639404b37744bc2b83c create mode 100644 txscript/data/taproot-ref/07aa3010d9cc23f67f6962a7c18f7dedccd7855b create mode 100644 txscript/data/taproot-ref/07ae5671fc31d245f515f5c967b4e7cfed38567b create mode 100644 txscript/data/taproot-ref/07b8ee857d10f18474e7471c3c27d10be12c5f25 create mode 100644 txscript/data/taproot-ref/07cbbc0e4129794730bb9bb49d334b497f11b422 create mode 100644 txscript/data/taproot-ref/07d68512aa206614c478ec869a8b7d4f7c32333b create mode 100644 txscript/data/taproot-ref/07ff10e93b7bf06e8da854a647ad08d5bc902326 create mode 100644 txscript/data/taproot-ref/08106eb8543994958b201f3ce5f42dbbf19adf37 create mode 100644 txscript/data/taproot-ref/081a75fb52ef536975050ff3192f6c516b3b557a create mode 100644 txscript/data/taproot-ref/08421b069ef3b27abeb764e8412aa879c8bfb0cd create mode 100644 txscript/data/taproot-ref/08630f23c6a755790aea6ed91128183d6ddc8291 create mode 100644 txscript/data/taproot-ref/086661b19fe6034d3748295413e2b4d4251157aa create mode 100644 txscript/data/taproot-ref/08a0635b26ef56d2f6ddd4c31295a8bbde840584 create mode 100644 txscript/data/taproot-ref/08a19ba6422f65b65cacb3f20b5507bca39fffc3 create mode 100644 txscript/data/taproot-ref/08b5c0ff184e15e9c21e4949e2382b9a71623d3c create mode 100644 txscript/data/taproot-ref/08b74fd5e5bdcfc0a22933abb14c20399138f612 create mode 100644 txscript/data/taproot-ref/08cb0cb08cfb93d7ca744dbf018072b119fbc650 create mode 100644 txscript/data/taproot-ref/08cefa50635850a5a6caa88ddae4d4e4c5178f8b create mode 100644 txscript/data/taproot-ref/0918ed067691e99a0ac65b680c99b8a0bd6d2dc2 create mode 100644 txscript/data/taproot-ref/0920b0864e2f856ec01587533e768fdc9f982a59 create mode 100644 txscript/data/taproot-ref/092dfb3e8b68e6142fcb0a354c4d02c23428b870 create mode 100644 txscript/data/taproot-ref/09342cfa6e3461e698ef1f6aceb83fd4a3ccbf35 create mode 100644 txscript/data/taproot-ref/0942d800ed811d505130b0e5cca50e722fc4f19b create mode 100644 txscript/data/taproot-ref/095bca4fc65d75681b759e14d34e7a5987625ab4 create mode 100644 txscript/data/taproot-ref/097dbe987c217c3d9b230bc0e634a9e3f0bab2fd create mode 100644 txscript/data/taproot-ref/09b3e7123f40c4ddb240073a912a440a18168c13 create mode 100644 txscript/data/taproot-ref/09c225b7d61512e189a466c46243a4511b6eae8d create mode 100644 txscript/data/taproot-ref/09cd349f59ff286840fb04789da01062c5d83ba2 create mode 100644 txscript/data/taproot-ref/09d7f478f35e48679ca5a97a08febfa49d510081 create mode 100644 txscript/data/taproot-ref/0a3e2dd5f11a2182d7b86b927a600bde565229a8 create mode 100644 txscript/data/taproot-ref/0a9a9a6e04b0e55c5a90ca23c2586a07ae1fc542 create mode 100644 txscript/data/taproot-ref/0aaeeea67c9e79315c703c56429535fd670ef5aa create mode 100644 txscript/data/taproot-ref/0abded429f191b0375a464688f06bd465af7c644 create mode 100644 txscript/data/taproot-ref/0abdf3a09f88ee47573f9509a323dfd8af89e021 create mode 100644 txscript/data/taproot-ref/0ad139668541c092541da58168e6488a1191ff58 create mode 100644 txscript/data/taproot-ref/0b0a37b5c9ef3c034545cbefc3e8de97c8b5ea05 create mode 100644 txscript/data/taproot-ref/0b0f9ae5467a2c8d14e86527b264cacbf4871500 create mode 100644 txscript/data/taproot-ref/0b37dc29cfcef1377a94a17297a0525504b5a9d2 create mode 100644 txscript/data/taproot-ref/0b7236484ffa4dee58a006bc3b9e51c30e5cc903 create mode 100644 txscript/data/taproot-ref/0b727481698d5b6e33b991da896215f0527335a6 create mode 100644 txscript/data/taproot-ref/0b931370dfff16b9e6d9a7a333e61cabe23290eb create mode 100644 txscript/data/taproot-ref/0bc98deaaa9007629b3338d906d73f87abce0b62 create mode 100644 txscript/data/taproot-ref/0bf313616424ee4fc95cf71286563567fc87c472 create mode 100644 txscript/data/taproot-ref/0bfc8b69a3702ac6986ce61b00e837a148e7d0eb create mode 100644 txscript/data/taproot-ref/0c00a8351b02f2185ea30aa4052174b38417e0ff create mode 100644 txscript/data/taproot-ref/0c02f78d8dd01b33e94abaa865ee6a9792f4ccfa create mode 100644 txscript/data/taproot-ref/0c043c49e6d5aafcf072e6be1be89160111fcb16 create mode 100644 txscript/data/taproot-ref/0c10be31ac329baf66d4d083563e6a9c3ab9ee59 create mode 100644 txscript/data/taproot-ref/0c12817899b35dadda1aee2d0a376b1e6fca73d8 create mode 100644 txscript/data/taproot-ref/0c2099a1366325dfb20d310e00b1c1554e93defd create mode 100644 txscript/data/taproot-ref/0c4d9a60206c9ad9b61b6120b3b5495408989e96 create mode 100644 txscript/data/taproot-ref/0c6dc14de0b80f72306e015b7560fef8a12f722c create mode 100644 txscript/data/taproot-ref/0c860ba9e47e23ac7ceaaa948e710e0253317ad1 create mode 100644 txscript/data/taproot-ref/0c90542e3f64cf4c09f66ad39471bbed839d46af create mode 100644 txscript/data/taproot-ref/0c91906e6830ed3ad8eba843f2cd7c66205a7981 create mode 100644 txscript/data/taproot-ref/0cbaaae8f169bef4c71cd090d475e96cc8277741 create mode 100644 txscript/data/taproot-ref/0cfce5f569e35c19633d12676981cda0b47a34b9 create mode 100644 txscript/data/taproot-ref/0d1dfc0136b588b721884040ebf5911514ebb74f create mode 100644 txscript/data/taproot-ref/0d25d4167a2171b28beda354bc7a6b814d718e10 create mode 100644 txscript/data/taproot-ref/0d265e43ba90ce1827ee538563c6a293b0b03ff8 create mode 100644 txscript/data/taproot-ref/0d3ce2afc206b93ee7c40177e168a295fc3e5ce0 create mode 100644 txscript/data/taproot-ref/0d4d3db873cac71185de9e2fa4462b2f3ba96462 create mode 100644 txscript/data/taproot-ref/0d5ecc8d0c063c2641c3a8e7adff9ecb0323914a create mode 100644 txscript/data/taproot-ref/0d65edb0c2f57a76df2b15cd2c722b18edffbacc create mode 100644 txscript/data/taproot-ref/0d687e26341ba489f3d7be5d0b46f4beacaf8358 create mode 100644 txscript/data/taproot-ref/0d6ac2e508ad66fe5e2ceb784535d11ee75cbe2f create mode 100644 txscript/data/taproot-ref/0d75732bc24cbac5dc017bb967142c5648d55bfd create mode 100644 txscript/data/taproot-ref/0d89c8dca6b7a1af5614348af7dd5ae2f65190bf create mode 100644 txscript/data/taproot-ref/0dd2ab05d7639afe71f965b79bd7092a935732e5 create mode 100644 txscript/data/taproot-ref/0debebb3108bcd03c6d5ce9c5c2ce1a64f8da172 create mode 100644 txscript/data/taproot-ref/0e03e6819458e3a55e6655f8ac2fb5cb9b28406b create mode 100644 txscript/data/taproot-ref/0e1d5cb6786009b8f3825aeb3f4c7eecc240bf0b create mode 100644 txscript/data/taproot-ref/0e1f79030f3681187ce4b16bf43133d56c470a63 create mode 100644 txscript/data/taproot-ref/0e229a80fe4e2619a4b272d19ce5815986d08fa2 create mode 100644 txscript/data/taproot-ref/0e27294bb1dafe333a689bcad39dff7fb6f9cddf create mode 100644 txscript/data/taproot-ref/0e28329dee72cdf3ca474e54b4eae5fb8c42ce45 create mode 100644 txscript/data/taproot-ref/0e292d3b3af29268349fe695e0f7ad74c422612d create mode 100644 txscript/data/taproot-ref/0e41c7f53cff3726f8dbca36445f5bb99cc7515f create mode 100644 txscript/data/taproot-ref/0e73fd872d8f71896397723287ddf1497ea61297 create mode 100644 txscript/data/taproot-ref/0ea17004d718ec4b5b84011a18828cf136f86973 create mode 100644 txscript/data/taproot-ref/0ea4e4491ee2abc4ea52e48ba33eeccf62d5f85d create mode 100644 txscript/data/taproot-ref/0ea84a4a5eee9c0cfe8bd52347d11c08b97d6640 create mode 100644 txscript/data/taproot-ref/0eb26606cb3895e3e7c3160a2acb1dd55cfde903 create mode 100644 txscript/data/taproot-ref/0ec71de4446b68520af7b2f5cb5495f2f7d56bbc create mode 100644 txscript/data/taproot-ref/0ecc927da181cd3e4cf9d00b158c6acd0700b7c0 create mode 100644 txscript/data/taproot-ref/0ef9e684b87a52e1d2ec2b274d91ca104093f268 create mode 100644 txscript/data/taproot-ref/0f0de5c345a12934d91427634192d4040e5bd1fe create mode 100644 txscript/data/taproot-ref/0f1aee7720bb0ab848210f3e547b18c4431e3651 create mode 100644 txscript/data/taproot-ref/0f2ec0ef703ae34c9801d778277b221e6ec19ba7 create mode 100644 txscript/data/taproot-ref/0f51e2a5ab57413a930a436edf258d17d6ae7de2 create mode 100644 txscript/data/taproot-ref/0f7b105b71e9cb68726584b4fa24c0ebd801c4ca create mode 100644 txscript/data/taproot-ref/0fa616a640ec4b881c4c4ea08e1a39f481403fe6 create mode 100644 txscript/data/taproot-ref/0fabe142a692b593ed073f5db1ef2aca01dbd689 create mode 100644 txscript/data/taproot-ref/1000a469dfca1be2144a6563e3bc8e3f5ceb2448 create mode 100644 txscript/data/taproot-ref/1007d21149445ee61da9ad4413d7acefa9ede7e3 create mode 100644 txscript/data/taproot-ref/100be162498b413ca391dea2387d07097432e64b create mode 100644 txscript/data/taproot-ref/101afec325ccd0ecfd32b22bcb5ddb64cbc1c497 create mode 100644 txscript/data/taproot-ref/102f84dec76aa32c7c32a67b8398d3433fd9c124 create mode 100644 txscript/data/taproot-ref/10549677366e93a6b247cf85ef6b109794e927a0 create mode 100644 txscript/data/taproot-ref/10624dd984bc11b57e154d0125049824624ef4b9 create mode 100644 txscript/data/taproot-ref/106f9a1f4925d539eab0171af97bfe996099ad01 create mode 100644 txscript/data/taproot-ref/107e2cdcdfabb3aca2ab5aa2fd3c97288ca30c94 create mode 100644 txscript/data/taproot-ref/109b57979771e9a623eab0dbd365a6eb604e4d39 create mode 100644 txscript/data/taproot-ref/10a884685231a301c2628f0607b449081b250ab5 create mode 100644 txscript/data/taproot-ref/10e147455c54d7bb8f4395e8f52666ee498a10a3 create mode 100644 txscript/data/taproot-ref/10e2ba2a40c7f4b5bbe26a0ae7a814ef9883672e create mode 100644 txscript/data/taproot-ref/10fefd7899096dc27cf05039ac9a172231d52173 create mode 100644 txscript/data/taproot-ref/1113b16ac0b3e4b76353eb896e7272061f03ff8c create mode 100644 txscript/data/taproot-ref/1131434b4bb6f2acbd59abb881c239975a1116af create mode 100644 txscript/data/taproot-ref/117e130d533574c601aab37e70b93bae134a6527 create mode 100644 txscript/data/taproot-ref/1184f4a41ef45af98fbb77736bcca10e157c347c create mode 100644 txscript/data/taproot-ref/118b63929e90757c8ca1ec818ecf53f8b71c70fb create mode 100644 txscript/data/taproot-ref/11b1f9db49bba588d8f418e89843ef901274fe93 create mode 100644 txscript/data/taproot-ref/11e26aa15592a14b6f7dc59ed4225b0ceeca2418 create mode 100644 txscript/data/taproot-ref/11ef5be6a614ca068f2c89bc602378f8ce71d763 create mode 100644 txscript/data/taproot-ref/121e9e0d61998a2f829c791e9f23a065b8ce683d create mode 100644 txscript/data/taproot-ref/122e57288341172f17f63e1689fc9a205e9e5905 create mode 100644 txscript/data/taproot-ref/1260bed4953f82e80f379c79bc4484db28c58d8a create mode 100644 txscript/data/taproot-ref/126e5c88c57ce073bc1e63e4306d21823db4b99a create mode 100644 txscript/data/taproot-ref/12bcaf48556b4780abcb73c4f32bd274ea7861bb create mode 100644 txscript/data/taproot-ref/12e033c1a8f3298a775b13078a77bc8befe4567c create mode 100644 txscript/data/taproot-ref/12e5f4d526a722bc9b8f2af83ae028c8ee6b9027 create mode 100644 txscript/data/taproot-ref/12fada550b4d90c67f307a0d563ae38283c008fa create mode 100644 txscript/data/taproot-ref/13080e256b05f38789902f0dbbc437401d15a3f2 create mode 100644 txscript/data/taproot-ref/1318e44a20cde77432578f5126e255855a0f8104 create mode 100644 txscript/data/taproot-ref/131ec09b5ca700e6a035eb50138f6a7f62fe3f91 create mode 100644 txscript/data/taproot-ref/1337852e30e2d514c14e8123b84fadb9d4aa882f create mode 100644 txscript/data/taproot-ref/136bc03e80bca2dc5f71c4fdf91e7d690eac78e2 create mode 100644 txscript/data/taproot-ref/1390c111cc1ca46caab6bdee16d74dd49519fb4f create mode 100644 txscript/data/taproot-ref/1395575564b7da66e3b458131eaed79bc605b605 create mode 100644 txscript/data/taproot-ref/13c9792e4f626e8f900acfa50cf122a5f5f15030 create mode 100644 txscript/data/taproot-ref/13d37de420974d4290a6029f20175feb02e1106e create mode 100644 txscript/data/taproot-ref/13d9b1cfc7b7864ec3f85c71a1046df30cc17b62 create mode 100644 txscript/data/taproot-ref/13ecc0464cacec7245082422e8f3212d959e0fa9 create mode 100644 txscript/data/taproot-ref/14450718a3a9e2266004b863df27746606f071ae create mode 100644 txscript/data/taproot-ref/146b0be5a219a70b803fc5f82ded6f34e4cf7a6e create mode 100644 txscript/data/taproot-ref/1477a76ad0e64b74908b0f8a89549c7cf7190288 create mode 100644 txscript/data/taproot-ref/1493716a3ca7c3194959cd177b8dd531b04b0b9f create mode 100644 txscript/data/taproot-ref/149679a6778ca49110eaeac21b33cd449242eb91 create mode 100644 txscript/data/taproot-ref/149bceae555709818ddc8eb34d3cf4b508780b88 create mode 100644 txscript/data/taproot-ref/14a9e9b7200758410bd419f2b0954ec253e17889 create mode 100644 txscript/data/taproot-ref/14b46e9b808aa20b426e21803aebd6efffef133f create mode 100644 txscript/data/taproot-ref/14b583f6a2bb67ac548a6daf674748880c14916c create mode 100644 txscript/data/taproot-ref/14bac90ea6a6692cf7202b96a1c18e47f81a055a create mode 100644 txscript/data/taproot-ref/14d0d7bc3443d31977bc6035b1a9bce2c6dc9114 create mode 100644 txscript/data/taproot-ref/14d9a8a4291206e2c4d73120dc485bd077e5f66d create mode 100644 txscript/data/taproot-ref/14ffecf99f50d1adde6ff14120965c878f744781 create mode 100644 txscript/data/taproot-ref/15032320c16e26b0069cf1571846247d073f2efe create mode 100644 txscript/data/taproot-ref/150b2d12becd542c0352fdc80bbd85c2901d8228 create mode 100644 txscript/data/taproot-ref/152491c8478252c98640ae41d5813cd6cc4800a4 create mode 100644 txscript/data/taproot-ref/1532d9cb1517dd25a5c8a93eb64d3962a52cf4cd create mode 100644 txscript/data/taproot-ref/154147c0c82e41a7cfdb7b8295df125020cd7113 create mode 100644 txscript/data/taproot-ref/154b30ae55351cbd129d9b1b6a6311572840bb26 create mode 100644 txscript/data/taproot-ref/15541041a721e558c8cfa7f4ee5f4d09fa6c9065 create mode 100644 txscript/data/taproot-ref/157183c1796c9575b6c576a29c98f58fbd42356c create mode 100644 txscript/data/taproot-ref/1571fe984911dc73398ce28defbf71e715958a81 create mode 100644 txscript/data/taproot-ref/157aebc161b66c638243c0a814262c48979b21de create mode 100644 txscript/data/taproot-ref/15b38d795c9bb9ef573b4d2b1ec4af8fc0cd8fb6 create mode 100644 txscript/data/taproot-ref/15bed2762ca16694fce3754fdcb0fe404484b18c create mode 100644 txscript/data/taproot-ref/15d389f49e1f412ed725252d3ee81230a2e81cd0 create mode 100644 txscript/data/taproot-ref/15fcafcc7469d59709774013df0fd9633e820008 create mode 100644 txscript/data/taproot-ref/16128f27ae921b87284e0eab75845884e009c865 create mode 100644 txscript/data/taproot-ref/1630122f5bef1592ca6b6280297bd620d8ce0ab9 create mode 100644 txscript/data/taproot-ref/164113b42e586e2e8ce7bb6fccef9f52a5136708 create mode 100644 txscript/data/taproot-ref/164178c636e1e1ccfbe67f53e9209ff1c0e8584a create mode 100644 txscript/data/taproot-ref/16431b60ce2185dc8a3e19f1b9325a1078131515 create mode 100644 txscript/data/taproot-ref/1658b5c8f7c6d3672d694462a7f53ad3f3596d38 create mode 100644 txscript/data/taproot-ref/166cd55c33178000f9e3e3b366ace5266964a5c3 create mode 100644 txscript/data/taproot-ref/167a4033a1f4c30b87898758c3868c1025df1694 create mode 100644 txscript/data/taproot-ref/167fe32905b764460a1199e4a4ab3d84ef186e2e create mode 100644 txscript/data/taproot-ref/1680d648bb0d496b0b5cdc71bd31f42d092b5e31 create mode 100644 txscript/data/taproot-ref/168c2988106ea01a8121eba649b024715de5122f create mode 100644 txscript/data/taproot-ref/16acfa58909fa72c2eecfaacc8866e7dd1f42fda create mode 100644 txscript/data/taproot-ref/16b2bf568fa5aa6e4b5de39fd290f6de49b091ec create mode 100644 txscript/data/taproot-ref/16c6bf5c5a6caf8746580f9e01ec4e218a4c0e39 create mode 100644 txscript/data/taproot-ref/16ecdda3d618db946d6033f96c780764642e0471 create mode 100644 txscript/data/taproot-ref/16f6f25ce07eadca0f3c82818b8910b5006b6aa5 create mode 100644 txscript/data/taproot-ref/1715e26f824103c322e360c6d3c237781724ca4e create mode 100644 txscript/data/taproot-ref/172062063b7ae63dcffacdd6b98414054d06633e create mode 100644 txscript/data/taproot-ref/172b85f2524cbd3f0ca1a41380566b1648c8c405 create mode 100644 txscript/data/taproot-ref/172ff5cf4d0d01f9ac160be767a1b233dea05ffa create mode 100644 txscript/data/taproot-ref/17405fca2ae8f08cec8849c6a750217abef9ff89 create mode 100644 txscript/data/taproot-ref/177f3355a5b98fe40607bd5da8383d7129c515d5 create mode 100644 txscript/data/taproot-ref/177f56a1fdc5cc3198a785f6f5e7a55d8c324f16 create mode 100644 txscript/data/taproot-ref/179b29b5e6ade731ba119866f25b6743232bd3ec create mode 100644 txscript/data/taproot-ref/17b2c3c5c8f5c6d4e3b517021c8e26c982fc552f create mode 100644 txscript/data/taproot-ref/17cd80eebaac8182716c6996ad037efac35af699 create mode 100644 txscript/data/taproot-ref/17fccd13627419da75dd075f405d0c40a09c652d create mode 100644 txscript/data/taproot-ref/184dbb048070da2a1db945f29853600246189da2 create mode 100644 txscript/data/taproot-ref/186d4e3b056dbde38d01af9a2095f2b550b930bb create mode 100644 txscript/data/taproot-ref/1870a7b0cbdbdbcb7e9f1d248928fe0dca885fbe create mode 100644 txscript/data/taproot-ref/1878d0c6c90056867949699c2702dab1671a5739 create mode 100644 txscript/data/taproot-ref/187dc420ad18b5fb75f0f40dcfa22e824b23bbd4 create mode 100644 txscript/data/taproot-ref/18822bf70764f3c01f808cd81031bdaa811edcaa create mode 100644 txscript/data/taproot-ref/189034044dacfcbaac5a98bbd0a33a369683d2d8 create mode 100644 txscript/data/taproot-ref/1891c772f3ce8c760b0cf1b52164fe1d2e4ce605 create mode 100644 txscript/data/taproot-ref/1894c4ad4a51725e14a4b3ca4124be935f442f98 create mode 100644 txscript/data/taproot-ref/1899c6c029807a2b6fb9c8709343768c03f3405b create mode 100644 txscript/data/taproot-ref/18ae04d1c49da35415f8e30e1757321ada62e83c create mode 100644 txscript/data/taproot-ref/18cd769c18f505e8bc05856ed71e114b5bd9a022 create mode 100644 txscript/data/taproot-ref/19056ae532d1819a4355eff6310ab655a5030df5 create mode 100644 txscript/data/taproot-ref/190cfc23dd00d10a83315e6bc368d40445cd322f create mode 100644 txscript/data/taproot-ref/190dca39f195f8973c60e414fa6fa6aacd3d9290 create mode 100644 txscript/data/taproot-ref/191602968fa2af7edef6e40a0c4e4b9e4ef4cd75 create mode 100644 txscript/data/taproot-ref/194da7e8add6b9a1ecf41a75f040b4611f016a09 create mode 100644 txscript/data/taproot-ref/1969e36c75fe223b6de50a2e92c6ce56dd4915a3 create mode 100644 txscript/data/taproot-ref/1970570c77db050bc51d853165e59487dd05c1a7 create mode 100644 txscript/data/taproot-ref/197071c336e5f96eeccaa2d253d5c00e0ac7febc create mode 100644 txscript/data/taproot-ref/197a3fa4a03436efcb2a86e1f8cbb45de1371615 create mode 100644 txscript/data/taproot-ref/19928329d12601dfd9c4a12541e9799fefb5439e create mode 100644 txscript/data/taproot-ref/19a982b7ff350572fab07d8c7397bd3e8f2cc04b create mode 100644 txscript/data/taproot-ref/19b94494f911d6c8dffa42a0570e686d8d385d0e create mode 100644 txscript/data/taproot-ref/19ce749d29e4620af1b8364a70b233842f7e9d56 create mode 100644 txscript/data/taproot-ref/1a199a3cd2f3a67e25e36bd4711b535ae3d24e31 create mode 100644 txscript/data/taproot-ref/1a3a8c18a8e82421d33989ed4d05f5485999b0db create mode 100644 txscript/data/taproot-ref/1a83bda864530d8086caf59fe1272ad5768d34c7 create mode 100644 txscript/data/taproot-ref/1a9368b5d21e42219df4751485b7f522507fdefa create mode 100644 txscript/data/taproot-ref/1ab6d3c20509931b1abf61a6b45d8069679b66fe create mode 100644 txscript/data/taproot-ref/1af45f5f9b4d38fa9b4e939f3e3622bcdf2d29d6 create mode 100644 txscript/data/taproot-ref/1afbe3f769c38b8e8b6210ef4c1e57bc6cfd7f8d create mode 100644 txscript/data/taproot-ref/1b13c8bd9a345bdcf71eaa1078ef4cb752b3da96 create mode 100644 txscript/data/taproot-ref/1b2543854748d5b37077ed3e53a36309f5330a50 create mode 100644 txscript/data/taproot-ref/1b3c874362224cdb658666354aa6fb9efff9b371 create mode 100644 txscript/data/taproot-ref/1b4bc136aef0b80666d85ce3d93b7996d0ce7ab5 create mode 100644 txscript/data/taproot-ref/1b5a41cda693f9d63f77b9b053dbac3106aea789 create mode 100644 txscript/data/taproot-ref/1b68c33f2aa26138257e984d7c57524a609332e4 create mode 100644 txscript/data/taproot-ref/1b79cd4b2e7a4b311359e56e468853036d3681d5 create mode 100644 txscript/data/taproot-ref/1b8f51ede6850bb667b5fd80d78e02cd4832d753 create mode 100644 txscript/data/taproot-ref/1bbde099bad78eb5021b57eaf4e9fecec63162ce create mode 100644 txscript/data/taproot-ref/1bc3e95ef1ef57164dee0340314916513b071491 create mode 100644 txscript/data/taproot-ref/1bc5747eb674dd470ce9e8f236e8c461bd9f5491 create mode 100644 txscript/data/taproot-ref/1bc76532e1949261ee2079d9ce81e5bd2ee2c56a create mode 100644 txscript/data/taproot-ref/1bfe6046e6cdc344b877ad37196692f2724dfb96 create mode 100644 txscript/data/taproot-ref/1c0b90070d5af0e0da662d27418affd7255bb328 create mode 100644 txscript/data/taproot-ref/1c1b10df48009861e679c78f57233fcbab1c9c74 create mode 100644 txscript/data/taproot-ref/1c1c68f02884233862b5ace3f063b648ef1a8f5b create mode 100644 txscript/data/taproot-ref/1c2a334bb5693def73177ba056d467309d1a592a create mode 100644 txscript/data/taproot-ref/1c34962adc291e2c8bf6dae66b8fb9c765b86439 create mode 100644 txscript/data/taproot-ref/1c385e281c4e1f86fe4c3b41f133fe0f1ad20791 create mode 100644 txscript/data/taproot-ref/1c561097325c97828153532b8c7b95b14e46dff4 create mode 100644 txscript/data/taproot-ref/1c7cf3e3c8d41ca4743e00d88ec0434c6f31d4c9 create mode 100644 txscript/data/taproot-ref/1c903f96be3cd8956476fb915624fb89666a187c create mode 100644 txscript/data/taproot-ref/1c929a0b875b383b7f3db0d168424cf2ba6d3cd5 create mode 100644 txscript/data/taproot-ref/1c974326af0bc49a9f389a9c91eda58bdb47ef17 create mode 100644 txscript/data/taproot-ref/1caae5c5cd8d5b5cbaed34c3bffbfa19df6aa109 create mode 100644 txscript/data/taproot-ref/1cb39f47f10b248d485afd4c83fa450fe4dcf928 create mode 100644 txscript/data/taproot-ref/1cc704edb370c2b52aa731bd30ea881ee0b2eb53 create mode 100644 txscript/data/taproot-ref/1cf397672140f803d1c48c64b7a9b55ed395d983 create mode 100644 txscript/data/taproot-ref/1d396736b3bc9203fa55467a0775f7a058a44b05 create mode 100644 txscript/data/taproot-ref/1d4be0ac5b202d439cadb143602ea3459a3eea33 create mode 100644 txscript/data/taproot-ref/1d66bb4f8ee00895bb9533eb0329de6d26b4e395 create mode 100644 txscript/data/taproot-ref/1d6b45d432e1a9f7bcf2692c87fd3865d9e96451 create mode 100644 txscript/data/taproot-ref/1d6c3731bc1125e0c52a0356e80d994f891c5e9c create mode 100644 txscript/data/taproot-ref/1d83703eed5baa3599b3562c9ea6f395f0ecacbd create mode 100644 txscript/data/taproot-ref/1da56d6e6d60e92c14472e47b665a85be68598f1 create mode 100644 txscript/data/taproot-ref/1dd5926d9df81e85da3075d37f0702718c88900e create mode 100644 txscript/data/taproot-ref/1ddf875ca22b308639d7b1cab6ee74ea77bc6bce create mode 100644 txscript/data/taproot-ref/1de45c6257377171ec1383ff685db7ce8e13d8c4 create mode 100644 txscript/data/taproot-ref/1de7bbede303fc60efdde225de97fe6e4cfb88ef create mode 100644 txscript/data/taproot-ref/1df8c615c5b7d5080d1019801137bdc97c72d639 create mode 100644 txscript/data/taproot-ref/1e2b8ba68f2655f0f5159ba8ee446f920bd6f384 create mode 100644 txscript/data/taproot-ref/1e2f14f392e271b5a594679f83b4847d83b8109a create mode 100644 txscript/data/taproot-ref/1e2fa5e498506cf0c5adee563fba8cdb0900cb86 create mode 100644 txscript/data/taproot-ref/1e32a9cc12b73e8a61aaf4c846d1cd0ffa78bf93 create mode 100644 txscript/data/taproot-ref/1e5a2d83584c4f1ccd8746aa4cc87f3b5c520e63 create mode 100644 txscript/data/taproot-ref/1e754a40c050fe3c356b0e253ed22633f2c5edb5 create mode 100644 txscript/data/taproot-ref/1e841722ec03b5be4c1001e90d8019bf9e01d892 create mode 100644 txscript/data/taproot-ref/1ea62bf92cf8078007e5cd279d0ac921980c1395 create mode 100644 txscript/data/taproot-ref/1ec26ee9e524029b8cf64e318125007a12c085d1 create mode 100644 txscript/data/taproot-ref/1eed48f62357914c0650cba567a06e37071db51e create mode 100644 txscript/data/taproot-ref/1f06a021e51a7104e4b8be0ce9c51232c8fd6c77 create mode 100644 txscript/data/taproot-ref/1f21715d338b4550c3e7e74321d26de8853626f0 create mode 100644 txscript/data/taproot-ref/1f33b328ec921a865dddc299139161f27b477147 create mode 100644 txscript/data/taproot-ref/1f59389661d72064b929ee2bac0a3f2782c99fb1 create mode 100644 txscript/data/taproot-ref/1f7d7d9cf1ac6252c762a06bdb35e619ce77741d create mode 100644 txscript/data/taproot-ref/1fa141a9352d1d89d10a4d09abf044c9506a4bac create mode 100644 txscript/data/taproot-ref/1fa4445b8704e72f4df267622d688919d1c6a44e create mode 100644 txscript/data/taproot-ref/1fbfc728d51680fcfeadde2a9e6fa7d1ac3996ec create mode 100644 txscript/data/taproot-ref/1fcd778862db2069278171a2ee940bf756a2bdab create mode 100644 txscript/data/taproot-ref/1fcd7eddbae73818ef08042df1c443c53fab0c49 create mode 100644 txscript/data/taproot-ref/1fd0cbef8f091c8edefa214a32625302e2f3a6d8 create mode 100644 txscript/data/taproot-ref/1fe16cf825c0f639b3abd120fa85f9a344d3e514 create mode 100644 txscript/data/taproot-ref/1fe6f643a391a7f73e3577d1f4e57935064e1c84 create mode 100644 txscript/data/taproot-ref/1fe7d8f0f7839c475eb9dbd113d0ac120b1301fa create mode 100644 txscript/data/taproot-ref/1ff8cc1006122254a00dc42299f828366e65b691 create mode 100644 txscript/data/taproot-ref/202c9cc0aac7d6c5172f0818c8d0d3405649d29b create mode 100644 txscript/data/taproot-ref/20372276860410d8622c60d5ec72e5716e313dfc create mode 100644 txscript/data/taproot-ref/203cda36559f2e342d3921d1f1f5ab05e330fe7f create mode 100644 txscript/data/taproot-ref/2068fcad81b42ac14a337456c1c0e850bc5567e8 create mode 100644 txscript/data/taproot-ref/2071f151f52b689e1e3c9f2b0372a3c1ca4c6dc9 create mode 100644 txscript/data/taproot-ref/2089f610f91855cc26e8760f3910284181dc1b86 create mode 100644 txscript/data/taproot-ref/209d75465a4314536f2bbabf6ada3622bec989d5 create mode 100644 txscript/data/taproot-ref/20cd1af7438c223f49d33ed3693631c63f6c3234 create mode 100644 txscript/data/taproot-ref/21227867cfe4806f692be272ca5b865dcecc1894 create mode 100644 txscript/data/taproot-ref/213cd49c2b13fe3ee6d2220f5f96b63c748d1add create mode 100644 txscript/data/taproot-ref/2152488b729a3937e9f4e83bbefbb36d961013ca create mode 100644 txscript/data/taproot-ref/215ddb94c508c11099b9268dbf4ce0d7f7d18977 create mode 100644 txscript/data/taproot-ref/21a38194825eb39a4a0ae99128be4409c90d420d create mode 100644 txscript/data/taproot-ref/21a967d5a754fe4909db382de1d7debbb040d069 create mode 100644 txscript/data/taproot-ref/21b086a0fcb5394bca5e13730e9801a167031fd3 create mode 100644 txscript/data/taproot-ref/21b915be35d2383f8baacd2d513b5cdd06836ebd create mode 100644 txscript/data/taproot-ref/21c64c51dc34976712f8356ed25d28cb2506a3bd create mode 100644 txscript/data/taproot-ref/21cd99bcb03828e0395286a09e866684d6c569f0 create mode 100644 txscript/data/taproot-ref/21f06e9520e734ab7974353357c55b81e5ee87a9 create mode 100644 txscript/data/taproot-ref/22089449f264bdccac5901669554a20c01c7632d create mode 100644 txscript/data/taproot-ref/223d492bc034d65fae5c76008697dc6455711a0b create mode 100644 txscript/data/taproot-ref/227dc7dc4b5fedba0f90b82d69d0f8f6785c49f3 create mode 100644 txscript/data/taproot-ref/228fadb4fab77130e6a42578be8c100758962a74 create mode 100644 txscript/data/taproot-ref/229254c58edf03c88b0434f339de04542e82f168 create mode 100644 txscript/data/taproot-ref/229a032ed00e20e08e27892cc81b53b28e1d245d create mode 100644 txscript/data/taproot-ref/22a01d7a209edd8694bd9edb1c95de74dbed6fc4 create mode 100644 txscript/data/taproot-ref/22b9de25667093d760c9e17c5477dead3043b33e create mode 100644 txscript/data/taproot-ref/23157f2fc305799762478817c79fe62d896edd22 create mode 100644 txscript/data/taproot-ref/2334138f3c633d853dbab847307d9950c227ac09 create mode 100644 txscript/data/taproot-ref/2341c37b333e27f887345a539b3a46aa15fe6738 create mode 100644 txscript/data/taproot-ref/234eb0340c07ea7d86dcfac62e971eae6dbc359d create mode 100644 txscript/data/taproot-ref/2363727c5d55ff4d6eaaf41f33d420d94aa0259e create mode 100644 txscript/data/taproot-ref/2364ebc1025f0c764130435a3da1d5febf1ac0a5 create mode 100644 txscript/data/taproot-ref/23873275d271cfb7c8271e4058054ab8102b18bd create mode 100644 txscript/data/taproot-ref/23ce0a835c3fef13acabbe51379451af1bad4377 create mode 100644 txscript/data/taproot-ref/23ee2abacaf9004b59fb4b0c0bf4fb0518c0b719 create mode 100644 txscript/data/taproot-ref/24189b1ed398f5834d414ec0517d0e4ec49e5123 create mode 100644 txscript/data/taproot-ref/2447d402d9160d103faa8fce8f16b8201a516a4c create mode 100644 txscript/data/taproot-ref/244d1fe0151e8979539727b36d9efd4236889b85 create mode 100644 txscript/data/taproot-ref/24b9d083b99a1fda505df14b9b98cadbf34618a3 create mode 100644 txscript/data/taproot-ref/24bbb3bb32575090a29c31c6d367e46898dc602a create mode 100644 txscript/data/taproot-ref/24d0fbfa8bd2c68fd6ee1e4839bb0d5bb73ef21a create mode 100644 txscript/data/taproot-ref/24e2153d05b71ded99689e64661aa90af06300e2 create mode 100644 txscript/data/taproot-ref/24f5f696fe56cb9b25c9d12a9606b6d6f531d6db create mode 100644 txscript/data/taproot-ref/24f8bbbbf4e945080301e930844b08d263783100 create mode 100644 txscript/data/taproot-ref/250db3e160a3b1e5fb27d5880463b82d2da450a9 create mode 100644 txscript/data/taproot-ref/253542d32b85965ac57232e3741542be2aa8d091 create mode 100644 txscript/data/taproot-ref/25452194c45988fdb9442f977481e8fb95b4ad75 create mode 100644 txscript/data/taproot-ref/2546c1139a14d6b2b3d6b9918c96de6e589fbf07 create mode 100644 txscript/data/taproot-ref/255e0819d8c9639459a4e49579fbd923cdf9240e create mode 100644 txscript/data/taproot-ref/25608654bdece6361519480d9115afff3312cb31 create mode 100644 txscript/data/taproot-ref/25bdf9d085288589dbb23f1fc7d98f7783cb09fe create mode 100644 txscript/data/taproot-ref/25e7910e53d821321fab3c8bb9db847f37fff616 create mode 100644 txscript/data/taproot-ref/25f13dc685e40d3fb22819356cbba4a5a6789e15 create mode 100644 txscript/data/taproot-ref/25fd25289846f102771af05c1445e63acb583b93 create mode 100644 txscript/data/taproot-ref/2619632226257817c56eb288a9d2075e56dd0e34 create mode 100644 txscript/data/taproot-ref/26300a1704f502625832730a36d0088f21a46e2f create mode 100644 txscript/data/taproot-ref/265d0640e2752abb03fbe0a1b150f575f8469aa5 create mode 100644 txscript/data/taproot-ref/2669c9c65bf3af74d4482204c70ea69545d8babf create mode 100644 txscript/data/taproot-ref/266c1691a90b2a342849d25e3704659308c45951 create mode 100644 txscript/data/taproot-ref/2670c894e879a8499f50e08ae018e501b6693152 create mode 100644 txscript/data/taproot-ref/2692015cba943bdfa1b324204d53284234754d15 create mode 100644 txscript/data/taproot-ref/26fbe1c5bd294a3fc35af2e36f46c951b25e5cc3 create mode 100644 txscript/data/taproot-ref/2721ca2fc08ca7ae38cc809a3799bf618ce5a75d create mode 100644 txscript/data/taproot-ref/2756fd453011fa7471613114061631b066029dc5 create mode 100644 txscript/data/taproot-ref/278eb959a30cf3ec8163a007eb3f89ef107765ea create mode 100644 txscript/data/taproot-ref/27ab4c447f840d27a13d145eb27c80db511a400a create mode 100644 txscript/data/taproot-ref/27aff0ad61d128505e22df766c0492e316fbd9a9 create mode 100644 txscript/data/taproot-ref/27b9b3e3bde2958e048cee68f2493d41648987d3 create mode 100644 txscript/data/taproot-ref/27be24f0f9eb749b51dc6e83c6ab5c8637349a25 create mode 100644 txscript/data/taproot-ref/27d37797fa4bb9c3bba68f9967eab892fec70642 create mode 100644 txscript/data/taproot-ref/27f1dbe3a65014c59ae266af3346177a5a57d4e5 create mode 100644 txscript/data/taproot-ref/2807a46ba9b453c2f9e4af2406b26ed38137b216 create mode 100644 txscript/data/taproot-ref/280d6a9607ad78d3eb40f04e5b5a76c6f8eb4c02 create mode 100644 txscript/data/taproot-ref/28259bbbf78c881c7400ac4602722df51776ffe0 create mode 100644 txscript/data/taproot-ref/284cac89d0553dfdc596ce4bfc4251fd2115cb15 create mode 100644 txscript/data/taproot-ref/2872201824aca727042b22cae049102582283dd9 create mode 100644 txscript/data/taproot-ref/288e61a59fe0099d03730d5c9d59712f743123a2 create mode 100644 txscript/data/taproot-ref/28a21b4f4afeb9c978b1290c620548f1f33e127e create mode 100644 txscript/data/taproot-ref/28b1a2ce5cf374a3ce64a6c7853fdbb6a15d1e25 create mode 100644 txscript/data/taproot-ref/28f223ee6f9c2562b1e382ea899bc7f88e63490e create mode 100644 txscript/data/taproot-ref/28f4e044d59009036250527f061daea52c6b5917 create mode 100644 txscript/data/taproot-ref/290325a794a4307e35ab570d847c9854f6d63001 create mode 100644 txscript/data/taproot-ref/290a1cf15d24d80b8dba0ba4397f5a7eb13382d0 create mode 100644 txscript/data/taproot-ref/29186f53cff8c33b62ccd1cec92b4c6b02c8c2c8 create mode 100644 txscript/data/taproot-ref/29306f00a438f213a01ebd7a7b0d04ae25d239ad create mode 100644 txscript/data/taproot-ref/297a3281b6d5be24c14d7ff51f2fbfe46ed86f1a create mode 100644 txscript/data/taproot-ref/297a666c7fc982a83775114d7c6821fb42031e06 create mode 100644 txscript/data/taproot-ref/299581f978295f5b97afd9102abe9746f3633e76 create mode 100644 txscript/data/taproot-ref/29cceb8deed87738d060e1bd5338ab0536f8d2a6 create mode 100644 txscript/data/taproot-ref/29ce41699e783cf1ab6b5b84bcc1f8da679ce8cd create mode 100644 txscript/data/taproot-ref/29d289d23bf6e34dbfac501041222a1978cc95d2 create mode 100644 txscript/data/taproot-ref/29dc54df002663eb3874c3fb7d3952e70b1d1779 create mode 100644 txscript/data/taproot-ref/29dd1cab8fbe87bf2eba3c671a6054c32e47ee9f create mode 100644 txscript/data/taproot-ref/29ec9ea0cab2025b952a31c864a85546c8a8f032 create mode 100644 txscript/data/taproot-ref/29ef22549cd23bb217da411a3ca72d83c71150d6 create mode 100644 txscript/data/taproot-ref/29f6acfc391f9db2fecb96ea0a708da396ed202e create mode 100644 txscript/data/taproot-ref/2a46178ff8d5794433a794e9fe86b9b5fc268cc7 create mode 100644 txscript/data/taproot-ref/2a479685fd7da722bb6722ebc37d68cccb881ee6 create mode 100644 txscript/data/taproot-ref/2a4e458a761d418129aa4d22bbbd076927fcef77 create mode 100644 txscript/data/taproot-ref/2a4e61567a20b2e90af1a0fb476b1ba0154b0a8c create mode 100644 txscript/data/taproot-ref/2a7da9157e1527a2190bce26d0a1303d7f239f9f create mode 100644 txscript/data/taproot-ref/2aa0596f17f2698bdfd51894a7dc1e1241cd3ae9 create mode 100644 txscript/data/taproot-ref/2aa48f72c81f73267919baef97d2c186ffc36882 create mode 100644 txscript/data/taproot-ref/2aa72eaeb2dee91742e3412f9e1ec464ecc22161 create mode 100644 txscript/data/taproot-ref/2ab67ca0e8401c63810a011ea1b9b40ef8573922 create mode 100644 txscript/data/taproot-ref/2ae84cabbb3a18b00167af69886696809a07a86a create mode 100644 txscript/data/taproot-ref/2aef8c06dd7c0aa09e6494194a3b812e4b7b2221 create mode 100644 txscript/data/taproot-ref/2b1075a4c09b4d3aa3be48cb1ce2571ab06a86a7 create mode 100644 txscript/data/taproot-ref/2b168b93f7f916976567d85cf8e7ca0d6dbbf32e create mode 100644 txscript/data/taproot-ref/2b229e9febea1749971fa08007b52b574b3046fb create mode 100644 txscript/data/taproot-ref/2b4be33fed42ff17f8c6910629b0e2183d109eb9 create mode 100644 txscript/data/taproot-ref/2b609a197a87b5e2d1507c9acbaf2e2ab79ce53a create mode 100644 txscript/data/taproot-ref/2b9f2b2856d6b4e70d3b3d8e2d4ffcc6048847d9 create mode 100644 txscript/data/taproot-ref/2ba9b396adf10109648ab2f9856ca66b6fc5b688 create mode 100644 txscript/data/taproot-ref/2baded8ac492d5bbd1dcece9f3d4a2f0458c778d create mode 100644 txscript/data/taproot-ref/2bde7ad09804a986048db6aa7983bf552f327e9d create mode 100644 txscript/data/taproot-ref/2be1d596003c42e91c2a03626c93ce8259dc64ad create mode 100644 txscript/data/taproot-ref/2bed09f85647ccc7b26bbdedb9cbf18167240799 create mode 100644 txscript/data/taproot-ref/2c2132ba18413a6ac05a486fd72669aa4293e784 create mode 100644 txscript/data/taproot-ref/2c24b83fa75f9fc91269d9be43a5c14f9a0c8adb create mode 100644 txscript/data/taproot-ref/2c2615f5ff25527bb1609bacc940eda0c32b8d28 create mode 100644 txscript/data/taproot-ref/2c2686017a35729961e5b4064e6ea9b58c073505 create mode 100644 txscript/data/taproot-ref/2c28303252e327e51e1e99036e9c4fcc97b10d8e create mode 100644 txscript/data/taproot-ref/2c3a119d1d9da7d4fe68883d95e8f11060a9def5 create mode 100644 txscript/data/taproot-ref/2c3a775a5deae4555f3af3537c8a4195c6e5354f create mode 100644 txscript/data/taproot-ref/2c62f7a3d90b30d6f1b1804f6bf0a916d3305efc create mode 100644 txscript/data/taproot-ref/2c67e0be52a7389f103f44944fe8d8913c973b48 create mode 100644 txscript/data/taproot-ref/2c7c5497a7e7f81979773204f099b9f23323698e create mode 100644 txscript/data/taproot-ref/2cc2506d179d284634729bf9fbd8c05239f90ca9 create mode 100644 txscript/data/taproot-ref/2ccd61243d6bba96a68b774617b9d76c97662ff0 create mode 100644 txscript/data/taproot-ref/2cd0311c121154bc8385767e5893c92ee5aa2c05 create mode 100644 txscript/data/taproot-ref/2d240420d7f8e429cb31120c7bf532805423084e create mode 100644 txscript/data/taproot-ref/2d2a878308fd10775f477107b478ca6993799763 create mode 100644 txscript/data/taproot-ref/2d50c7d765d0137b5bc9bd78ac8e39437d22fc0f create mode 100644 txscript/data/taproot-ref/2d562228e60c1a1e62b21379cc97a7cf96852b48 create mode 100644 txscript/data/taproot-ref/2dafca8d1802bbb6ce3ae1196aa647ee3c9e418e create mode 100644 txscript/data/taproot-ref/2db945824c150b91aa78265f9e3701bd991fcf10 create mode 100644 txscript/data/taproot-ref/2dc10a9c76952430b8601993c330b88bd0e19cb0 create mode 100644 txscript/data/taproot-ref/2dc5b1536be7b443c27e763739595c42dc34998e create mode 100644 txscript/data/taproot-ref/2dc9f8f8cf217ccac41228917cb739aee23f3b55 create mode 100644 txscript/data/taproot-ref/2dcae1af8317442bc492bd0899984f32bf30396d create mode 100644 txscript/data/taproot-ref/2dd9b9584d97aeda14030c0cb94034e5a64e1e33 create mode 100644 txscript/data/taproot-ref/2de7782cb97bcd10b69053268684420a0022efd6 create mode 100644 txscript/data/taproot-ref/2df7793cf7520895ea4121850c34c16bd1874c22 create mode 100644 txscript/data/taproot-ref/2e15993224f1d73378824cbd1780f6d25e85740a create mode 100644 txscript/data/taproot-ref/2e2b8acfc93c65c04508d0730229d6beb1760346 create mode 100644 txscript/data/taproot-ref/2e4630df1ac360494322a4300b3a916bf4a7aa42 create mode 100644 txscript/data/taproot-ref/2e9a37abf29713e5bf564831df0206b134ed9e23 create mode 100644 txscript/data/taproot-ref/2ecab25cfb72ae137a881589719a53343a030263 create mode 100644 txscript/data/taproot-ref/2eccff6ea763376046948b3876b0d9b3e8b28c87 create mode 100644 txscript/data/taproot-ref/2ef7e082ae22ffb03fec01772b442b4b8d19cf06 create mode 100644 txscript/data/taproot-ref/2f1b30aed18276568d11bfeb997aac3246d57017 create mode 100644 txscript/data/taproot-ref/2f63727a65eb7f7437ab5c39d3f16671518719e6 create mode 100644 txscript/data/taproot-ref/2f6a3e29b8be29ea5949fb1b5a71679b5cadc8d8 create mode 100644 txscript/data/taproot-ref/2f718ebe5d9460ba98f7815e59bfffe1cd1f3bc6 create mode 100644 txscript/data/taproot-ref/2f92c5daf5b1fc8c65563916bd77ad58dc8ffdab create mode 100644 txscript/data/taproot-ref/2fc6756b64916b520df4a5d7eed9bc7c1ee85753 create mode 100644 txscript/data/taproot-ref/2fe9ee314e024619b228c81cae27f4bd50141a36 create mode 100644 txscript/data/taproot-ref/30060e7ffc388552b8bae73eb28705b637f7685a create mode 100644 txscript/data/taproot-ref/3012845a3aa7dc757cc4778e5334769c9239ab60 create mode 100644 txscript/data/taproot-ref/3015e994a3e16567397bea00a92ff97eb53971e6 create mode 100644 txscript/data/taproot-ref/3031aef9ccb0cb566246e72e7f976a7cf00b9898 create mode 100644 txscript/data/taproot-ref/305b7d52e8b2e5b62f366d1fe9aca1b4c31a2e51 create mode 100644 txscript/data/taproot-ref/30733f314d77a04fcfb55b009f72a5a1a94cc1e5 create mode 100644 txscript/data/taproot-ref/312a2eaf5a3bbccf69b97e292f665b53846038f5 create mode 100644 txscript/data/taproot-ref/3177278ccbc91f49567f80c0b575882edaf4556b create mode 100644 txscript/data/taproot-ref/31a7241822ef819833b51d86a78d83bbb4d58136 create mode 100644 txscript/data/taproot-ref/31b4933ee39bc4133c6a36b1e309775c87a96c23 create mode 100644 txscript/data/taproot-ref/31bf684d25c7125e85ce524a607eb2a52cb7bdca create mode 100644 txscript/data/taproot-ref/31c15818563bf9247178dcf6aa28b033af2bb447 create mode 100644 txscript/data/taproot-ref/31c6f3973f706c7761a06718934fbee33a007e9d create mode 100644 txscript/data/taproot-ref/31c88595514658ef1b8ff73277244b8f007c505d create mode 100644 txscript/data/taproot-ref/31d4c861644fc9edae1f7e2e4f31aa06c7517889 create mode 100644 txscript/data/taproot-ref/31f076334b0a05c6d42d3ee64880af4288a1a071 create mode 100644 txscript/data/taproot-ref/31f2c4c02978ae42e16425ad8313162bbbba6fc1 create mode 100644 txscript/data/taproot-ref/322e55f03866ad2580881660af953e8169abf66a create mode 100644 txscript/data/taproot-ref/32465695f8a85d30402f9b194bdf25dd6e21729d create mode 100644 txscript/data/taproot-ref/3296dbebd697c68468c1215ff252b1da046d3d4c create mode 100644 txscript/data/taproot-ref/32aba46093e0c1405d3a8229f68cefd6de6d9767 create mode 100644 txscript/data/taproot-ref/32abfd2efb454436ddc75cd07a406d88aabceb2a create mode 100644 txscript/data/taproot-ref/32ba176293211377a9ca30f7b1742a3102758b7a create mode 100644 txscript/data/taproot-ref/32bcf37b6b3d15680600c81db467e1dfff6ce375 create mode 100644 txscript/data/taproot-ref/333dafc1d96971e2ccab51c8ee0d9e479decf78b create mode 100644 txscript/data/taproot-ref/334e3a237339fce576119749a9aa81f3d65211cd create mode 100644 txscript/data/taproot-ref/3352986afb9bc33fc67eaf72f47be64e3c6ccba3 create mode 100644 txscript/data/taproot-ref/335b7a860725ca4f2c467a8b034060d0ce6b3bb4 create mode 100644 txscript/data/taproot-ref/33848da9a02cc62be9f5a84c5ce6e33bb6aa8a29 create mode 100644 txscript/data/taproot-ref/33aa1588445e9cbbedd1d4a629780bcc8b4a8e9d create mode 100644 txscript/data/taproot-ref/33aa91e75b0cc39daae8eb7a1f0889075a667617 create mode 100644 txscript/data/taproot-ref/33d0d39d6ce6ced2a0a8dc5d8c47e5f5098d7aaf create mode 100644 txscript/data/taproot-ref/33efade4e6970da9cea78a726935e5443e0d1ba3 create mode 100644 txscript/data/taproot-ref/33fe1028443f16cce6d9858c8501dfb0a7ae5816 create mode 100644 txscript/data/taproot-ref/33ff2ff9d9aabf2865009fc3701058f954184c4a create mode 100644 txscript/data/taproot-ref/3400d35bd94547fb613f1aa5cd2073fdca146533 create mode 100644 txscript/data/taproot-ref/34038f296d87d228ac46a39bb072cc03e4e585bb create mode 100644 txscript/data/taproot-ref/34264b99b16c56793e013d7d2ac3dc83c0c07da6 create mode 100644 txscript/data/taproot-ref/342a92cea02c320154d0894d36811870581b660e create mode 100644 txscript/data/taproot-ref/346b40c03454e4740323b5b0422908722f9a4ed8 create mode 100644 txscript/data/taproot-ref/348d5c1f7c9f5084425a506f649c65b2f31946a0 create mode 100644 txscript/data/taproot-ref/349341420dbe9b22120760aa5b91a9099c7cdcea create mode 100644 txscript/data/taproot-ref/349bf68e15d8f14b4a471b7ab402784c1077db21 create mode 100644 txscript/data/taproot-ref/349dc9e7f879b45a530ea9ac4a5ee92a83b80b64 create mode 100644 txscript/data/taproot-ref/34dee51305402e7e6b502025f00f29abbde3cb18 create mode 100644 txscript/data/taproot-ref/34e0f433a921b809a71c9924e9c0956dc34bc220 create mode 100644 txscript/data/taproot-ref/34ebf584d708a418710a1466a3dbc67b82146196 create mode 100644 txscript/data/taproot-ref/34ed3c4ed5af89953d2e81d21f7c1e45d2c7dc87 create mode 100644 txscript/data/taproot-ref/34fe51570c93ab7b56e8955a00795a7af3eb88c3 create mode 100644 txscript/data/taproot-ref/350219ab2d9d1993c2e0ad903f92eaaf6318f133 create mode 100644 txscript/data/taproot-ref/351979da8be9a1fded3861db5068a083d50516e7 create mode 100644 txscript/data/taproot-ref/35210e4f9eb6f063e680746037b199244fe0997c create mode 100644 txscript/data/taproot-ref/3569acb6b68f7aed0054e44b1fa854e2ef33b96d create mode 100644 txscript/data/taproot-ref/3572c1cebe263656185dea9403422e9884954499 create mode 100644 txscript/data/taproot-ref/3574aa7865915325c364ab1364ae532d35ec2952 create mode 100644 txscript/data/taproot-ref/357c3aca3897a104f6b209ff00a90eb8f93c11e9 create mode 100644 txscript/data/taproot-ref/357f1e298d27372ed2fdb360e6ecf4b4f93bf38f create mode 100644 txscript/data/taproot-ref/3585f3da19dc73f07d513f4d5e06b3af35381aab create mode 100644 txscript/data/taproot-ref/35995d78575bb81724c123126ae84f04c1ef1324 create mode 100644 txscript/data/taproot-ref/36107f7e7692414cd4ae5e7ee06a1e46821b107a create mode 100644 txscript/data/taproot-ref/361314e0baab060ff8fb2888efad4f841ee2e65d create mode 100644 txscript/data/taproot-ref/361c2bf607441dd9ae1d9e592d08aff1c4423aec create mode 100644 txscript/data/taproot-ref/361e67ace54dd8058e82517e87d5a294ff0e2430 create mode 100644 txscript/data/taproot-ref/36225523764ce0fcf4a54ecc157c7a9ee0ca5e1c create mode 100644 txscript/data/taproot-ref/363516e81c7327e6e8535e74da1cf78a4a939bf2 create mode 100644 txscript/data/taproot-ref/363d3439b183bb0f2c6a0d1238057e9beb398f18 create mode 100644 txscript/data/taproot-ref/36415fab25c89139e82b030657b2f8d9f5d9bfc4 create mode 100644 txscript/data/taproot-ref/36608fb81d55d07d46c2f7849cd926ee3b2544c0 create mode 100644 txscript/data/taproot-ref/367c9b1f3074839cbe7794421f5a5a30b5392887 create mode 100644 txscript/data/taproot-ref/368c81b84650d4644c983e3209d93ebe140d375a create mode 100644 txscript/data/taproot-ref/36918d3941b615417b367e0dda84482198335469 create mode 100644 txscript/data/taproot-ref/36a94d7bc5dc9af664df029d9cacb70d1662178f create mode 100644 txscript/data/taproot-ref/36bc60267ff97612610797a43fa5e7b371687229 create mode 100644 txscript/data/taproot-ref/36bd6cf68074e03b5642284ce7d493af28e048a2 create mode 100644 txscript/data/taproot-ref/36c7fd31d411d45f3d03143f9a36158791a29660 create mode 100644 txscript/data/taproot-ref/36cefffcad6493e933315f78db381ff7ecc43bfd create mode 100644 txscript/data/taproot-ref/36db1eaf5e186f36042dd8afeeebfabe675c620a create mode 100644 txscript/data/taproot-ref/36e7b1c9920f0e9a7c1c52c380c61f6b44246ce8 create mode 100644 txscript/data/taproot-ref/370f93aec0042473af8eda625b8e55afa266cf0a create mode 100644 txscript/data/taproot-ref/3711e5aa1c94f1b0f835504e4dc9cfac933f247d create mode 100644 txscript/data/taproot-ref/37178f03fde09a06a32ec4e778874ec6ff11c8c3 create mode 100644 txscript/data/taproot-ref/3722cdc62a8920daf88999d381d42a7424417843 create mode 100644 txscript/data/taproot-ref/3745a800a4b496404473a26dd593f84588194471 create mode 100644 txscript/data/taproot-ref/374e3814357798251b0430dc4cfb9f212c1dddd3 create mode 100644 txscript/data/taproot-ref/375599a0689231a316462d64f42ec6b33ccca33e create mode 100644 txscript/data/taproot-ref/3771c3d9e542f846b3c206c6719246bde5cb472d create mode 100644 txscript/data/taproot-ref/3774905200290499adbbac9b674c43b82c3af04d create mode 100644 txscript/data/taproot-ref/379b89135a99972794096065de8e1072473b7cdf create mode 100644 txscript/data/taproot-ref/37a26cf98e0cb201f2e241d6a41e267821078fc2 create mode 100644 txscript/data/taproot-ref/37cfd491e753f20291c4606a4bb007cf1aa69eaa create mode 100644 txscript/data/taproot-ref/37fdd34d221df947a4dc6a40f91fe044f88c8ca2 create mode 100644 txscript/data/taproot-ref/381cf7c5a9c44f989bb97ebca54137b24a0c5102 create mode 100644 txscript/data/taproot-ref/381d7b2c554124f48f833d5bb44cb65d6a4e69ae create mode 100644 txscript/data/taproot-ref/3849d609dcd2299e85caef8d7aaf0dc4cbda60ea create mode 100644 txscript/data/taproot-ref/385fb0d2eeda5f4790eeab09a29ec612150cd115 create mode 100644 txscript/data/taproot-ref/3862864a68546884d4ae2ef7644d75b814fd279e create mode 100644 txscript/data/taproot-ref/38633120561625bae7ecb1c951acd585717ee56e create mode 100644 txscript/data/taproot-ref/387db60867784e48a23882557f34fd3e8df5fe60 create mode 100644 txscript/data/taproot-ref/38a77bbe28f3ce750b32c16df488eb5970d28d51 create mode 100644 txscript/data/taproot-ref/38b2b86e0814487d32eb0a49aaa091c527c67a39 create mode 100644 txscript/data/taproot-ref/38b7d993272a54c03a7adb7a046e8485546ebd0a create mode 100644 txscript/data/taproot-ref/38bce0395152e8d2a60a95b4642bf3700934e4e9 create mode 100644 txscript/data/taproot-ref/38cd5b3045252d1ad4ff3cad40d838874891506c create mode 100644 txscript/data/taproot-ref/38cf290b09eac905ac4bdc5ffd7fbeb55b28d0b1 create mode 100644 txscript/data/taproot-ref/38fa5cb2147069b9e33e21d621935d45486c5345 create mode 100644 txscript/data/taproot-ref/39016f47ee6449811c8a18548ba14d36d60f1a15 create mode 100644 txscript/data/taproot-ref/39095ad3e086951d38e9de71ed6390bf4a910ada create mode 100644 txscript/data/taproot-ref/391ae71a3b29dc703963bfe3a4d96555cac94848 create mode 100644 txscript/data/taproot-ref/391b89f7a6069cedebf4da40cbd2e894c4e4e161 create mode 100644 txscript/data/taproot-ref/39261d0b29bcefd21020cd2c24c872c070c66ae7 create mode 100644 txscript/data/taproot-ref/39427d9b3326e6d242f88c30c5337e28e60ba2cc create mode 100644 txscript/data/taproot-ref/395284f8211e771929c6abd17a1e39b471bad2ac create mode 100644 txscript/data/taproot-ref/39702f9a29cc5985ccdbae18da3583e3a98271be create mode 100644 txscript/data/taproot-ref/39a530e81b2ae6640a22eade59df3f302ebb0806 create mode 100644 txscript/data/taproot-ref/39c2d78974b78a945ee5325ec03d2a9842678371 create mode 100644 txscript/data/taproot-ref/39c6fd26ec7474a9addfe549df2cb8ee610ecb51 create mode 100644 txscript/data/taproot-ref/3a48de373b5922e0287dcbaa10361aa1464b3eff create mode 100644 txscript/data/taproot-ref/3a4b7a4a72ab611ede23f7e04e2c7e0300d1c7b6 create mode 100644 txscript/data/taproot-ref/3a5d1711382ce031d27b85c9d0db96a8d322c0a5 create mode 100644 txscript/data/taproot-ref/3a8258d488d60df9cd2d2e0f3fbfda5aa2916b1a create mode 100644 txscript/data/taproot-ref/3ad5eb51c8c2ea66907d5c7b40ef6cccaee711ce create mode 100644 txscript/data/taproot-ref/3b055324162a840bb031e742e417383a3c2b9fff create mode 100644 txscript/data/taproot-ref/3b6174c02c9421bd7512cb0b507ee81cbe621e8f create mode 100644 txscript/data/taproot-ref/3b756b29419004b37c85b3e93c13d3f231e1eb67 create mode 100644 txscript/data/taproot-ref/3b7aa5f0f9d0fc31f7be3558e9eae22f13652d33 create mode 100644 txscript/data/taproot-ref/3b964cb9d3464c3949a2e8a0f9edb54a4a9ce6c7 create mode 100644 txscript/data/taproot-ref/3ba14a20059a5c8f8e184fb6d08736296adf21fd create mode 100644 txscript/data/taproot-ref/3ba4a606e430170b23a098c2ac6ee7213be618ca create mode 100644 txscript/data/taproot-ref/3baa61730ba406d7fad296d7df24a9629ae0240c create mode 100644 txscript/data/taproot-ref/3bacefe15c3e633f44d830137c6fe22c074b155d create mode 100644 txscript/data/taproot-ref/3bc46b0f49e132b39a7468c0eeae4f18c15a9e46 create mode 100644 txscript/data/taproot-ref/3bd1e196feb0c029ad908a2c989b46a4c75e87e4 create mode 100644 txscript/data/taproot-ref/3c0a722d83c61bffb4712e8bdb67f68d6757d30e create mode 100644 txscript/data/taproot-ref/3c11357c518486213b14a41e23ce85acfc7225b9 create mode 100644 txscript/data/taproot-ref/3c20247465b4757bf0758627c8b5e4839dd819cc create mode 100644 txscript/data/taproot-ref/3c4f81b3cab5b54ca2ec122fa809fca650b47db6 create mode 100644 txscript/data/taproot-ref/3c695558731a219357e99fced06f0c24b38b6c11 create mode 100644 txscript/data/taproot-ref/3c6b79f35456c42d2578553948e940b494865ac5 create mode 100644 txscript/data/taproot-ref/3c78b5bf3e8a594974afba095afac84660219f6c create mode 100644 txscript/data/taproot-ref/3c986463576a17cc12996a738a2cc479d1198df8 create mode 100644 txscript/data/taproot-ref/3cb4479d7f4d2911b165d8e388cda3c7da36bd62 create mode 100644 txscript/data/taproot-ref/3cb7605604a629153b71183c4083311f53f6fee1 create mode 100644 txscript/data/taproot-ref/3cd91b4c3a1d21d1c90b1e6542ae78fd35091778 create mode 100644 txscript/data/taproot-ref/3d4082e12a369fee00a97f5ee6a3b72ea6f15238 create mode 100644 txscript/data/taproot-ref/3d4137ffad2b1c85003d032d19a2150f4b6517c9 create mode 100644 txscript/data/taproot-ref/3d65682b1f434030f11d6815360c3d269d231474 create mode 100644 txscript/data/taproot-ref/3d6fb8e46d4f9e03d6de0e295ec2e0e50df1aa5f create mode 100644 txscript/data/taproot-ref/3d75756c8dd79c4efe056dd5435cfb6a2457207c create mode 100644 txscript/data/taproot-ref/3da479f176b53c08e1248502a5bc75aed6c71746 create mode 100644 txscript/data/taproot-ref/3db85c10d9886a1d664d6d3db26ae7961d66a4be create mode 100644 txscript/data/taproot-ref/3dc41a3a65eecfb088cf236466ab9fb737a19b57 create mode 100644 txscript/data/taproot-ref/3dcd87542c1fe27ba922187001739130ac6c6c5c create mode 100644 txscript/data/taproot-ref/3dd2c473cd54ea601b15cc9840f01e6cec72fbd3 create mode 100644 txscript/data/taproot-ref/3e0593c1054f6598bbf8297623874e58ed4f2f9e create mode 100644 txscript/data/taproot-ref/3e1e6aa2f96548cfbcb05311c5d24990bb96a8ef create mode 100644 txscript/data/taproot-ref/3e2370ff2103895a7c13f394468b1d7588a525a0 create mode 100644 txscript/data/taproot-ref/3e30536558f547b9ad4f09f367634b969078f719 create mode 100644 txscript/data/taproot-ref/3ea9b3574203d1cc954fbb5b93f7588b765a4d0f create mode 100644 txscript/data/taproot-ref/3eabc6ab34a7c9a974850c1dd22c428aa05b1b1a create mode 100644 txscript/data/taproot-ref/3eb9a6cfe1aa2c1c02424702999504c5b096248f create mode 100644 txscript/data/taproot-ref/3ebde48f5439e084e28144fd489296408e0dac44 create mode 100644 txscript/data/taproot-ref/3ef5bed9863d50fbfa4dee5c776d36177e888adb create mode 100644 txscript/data/taproot-ref/3efcb90f4a83944731d1cbf69fcde8147549f8ff create mode 100644 txscript/data/taproot-ref/3f08853267dab46c6370068cbb68b228923ff0b3 create mode 100644 txscript/data/taproot-ref/3f1549e9384322e64380cd38621193a46900a116 create mode 100644 txscript/data/taproot-ref/3f1d506b154892f06d439bb90ba5202e723507eb create mode 100644 txscript/data/taproot-ref/3f512330103073dbd4f58e82fee2f316a4b0c171 create mode 100644 txscript/data/taproot-ref/3f513698f389965cd3f800cde5d06d6742166c96 create mode 100644 txscript/data/taproot-ref/3f6985d5b0c8658ee84900aef20ad6b450f6f3e9 create mode 100644 txscript/data/taproot-ref/3f6a1b44037f9a0ecf95cd3d23ce8bde0b02ff8e create mode 100644 txscript/data/taproot-ref/3f6da0ebdeff4ba77b33c2c2d3b962e7dc353570 create mode 100644 txscript/data/taproot-ref/3f7737e152b00480f6b1e13136938142db63c3bb create mode 100644 txscript/data/taproot-ref/3f7dd25efaad7cb28967f110fe74e5e38a763ca8 create mode 100644 txscript/data/taproot-ref/3f827b95772a69cca7924e0a2e6ed2cef8755536 create mode 100644 txscript/data/taproot-ref/3f86932b9bd5a8f673b4dd4243ebb78bef50c888 create mode 100644 txscript/data/taproot-ref/3f8e06a01cdada6071275fb451a2ba624eecf6b8 create mode 100644 txscript/data/taproot-ref/3f9e6c510733a54871b5b12db956530901898fe5 create mode 100644 txscript/data/taproot-ref/3faa53c6eda1becad9cec3442b7069bc2083f057 create mode 100644 txscript/data/taproot-ref/3fed18356adbd733c605b538f4fbe6434ecad6df create mode 100644 txscript/data/taproot-ref/4017ac5f35612181926802d0cfd9e7f6a5aed8a7 create mode 100644 txscript/data/taproot-ref/40198d56b45470dd3064ec201e05ca4e3cdca930 create mode 100644 txscript/data/taproot-ref/405cc03a69b95e49ca66bdd71055159a13f437eb create mode 100644 txscript/data/taproot-ref/405ecda072acc56c38f0eae072ad858ec1097d36 create mode 100644 txscript/data/taproot-ref/40637530cf642a13aaddd88b9e805ab9eed711f1 create mode 100644 txscript/data/taproot-ref/40815dacf70ec14f7b8a062c9faaf258058731fe create mode 100644 txscript/data/taproot-ref/4088fa75fe995a05522f18f9b0e6945552611611 create mode 100644 txscript/data/taproot-ref/40c7820188392556b1df313d7fe8ad00eac4965f create mode 100644 txscript/data/taproot-ref/40cdd6d34a71ec60c962c3ce8c6408731acebed3 create mode 100644 txscript/data/taproot-ref/410f4c522606d7e3dd362eafa5a5ab9d9811a338 create mode 100644 txscript/data/taproot-ref/41114b51cf4fbb2b1beee4e0cc3047fcddd88c2e create mode 100644 txscript/data/taproot-ref/416cc4828a6c9b5f1667ac7ad0d2684eb23cac38 create mode 100644 txscript/data/taproot-ref/4184d22015b6c9b7656f411782a4484efd87060b create mode 100644 txscript/data/taproot-ref/4186f82b0ef77212271ae59a07d75a5f370f8add create mode 100644 txscript/data/taproot-ref/4194caf8692db4d7109076c5dece284d07e06cbf create mode 100644 txscript/data/taproot-ref/41a24f98a0882fe70484f5006c4b6b9a37bc85f0 create mode 100644 txscript/data/taproot-ref/41bb837acd47aa639c62f7986ff46af86a6c36d1 create mode 100644 txscript/data/taproot-ref/420a24fcbd56a2a2791e7238666b8aa34e2ccf16 create mode 100644 txscript/data/taproot-ref/42c6d3a78f584cc355a0bac6f309e105089332b8 create mode 100644 txscript/data/taproot-ref/42da32b7dda49d356987402249a3bb67a0b53529 create mode 100644 txscript/data/taproot-ref/42e412a1e895536ef1264d7ee08902b8e37a53a0 create mode 100644 txscript/data/taproot-ref/42eddccf89cbef79a5adffb7eb5ea1523de5b3b7 create mode 100644 txscript/data/taproot-ref/42f1cfaa89e0e558cc339a4adfc253b4108d5843 create mode 100644 txscript/data/taproot-ref/43532b914ad45faf56c91ef34b9b696012326b2d create mode 100644 txscript/data/taproot-ref/43a09bc93d6d45b6cef903b1341a287624b825ca create mode 100644 txscript/data/taproot-ref/43a12820d4dfa937dfdbaa0843372e901ec73944 create mode 100644 txscript/data/taproot-ref/43b19c13ed8e58e70071e063750e8fca7a9f05e0 create mode 100644 txscript/data/taproot-ref/43bfb11c19ea9173f4b0185fbc6a622fd0787c68 create mode 100644 txscript/data/taproot-ref/43d1fadc7620820efcc941a68f7696480649c13d create mode 100644 txscript/data/taproot-ref/43dae97b688afba43b6d88389a78b979f1181c34 create mode 100644 txscript/data/taproot-ref/43eea0f55cf11052527d14c3cf0f96e55882c4d5 create mode 100644 txscript/data/taproot-ref/43f8e70fd6ed448f6cd62609f6e4a9d03a0e083a create mode 100644 txscript/data/taproot-ref/4407ad4a37ac5667b725ef07db2b1b0ebbe6db1e create mode 100644 txscript/data/taproot-ref/4422ccfb3a652df26350f5fd43cab32b4a6db9bc create mode 100644 txscript/data/taproot-ref/443de93ae646f545525c4a8177964caee78a499e create mode 100644 txscript/data/taproot-ref/444bdbc8e2a3f36427b9ee3bb33b639f3d06010d create mode 100644 txscript/data/taproot-ref/44513b5ccd5d2993d98b0f606e24c3363080118d create mode 100644 txscript/data/taproot-ref/447e0a4f2c9391201bd7abdb3935d959277ac93d create mode 100644 txscript/data/taproot-ref/4493e5053e8c93d7133c12033db30ab0fad02eea create mode 100644 txscript/data/taproot-ref/44b2a5681330965efa5dadccd65e4296cb9bb54c create mode 100644 txscript/data/taproot-ref/44bf61ffe86491dc47531baea9f4722fed205885 create mode 100644 txscript/data/taproot-ref/44c41d5a9ee6d3836c4cd959feb9946950a93097 create mode 100644 txscript/data/taproot-ref/44d03ac572cc57f5a15470cd97f15bcb5b9aae1e create mode 100644 txscript/data/taproot-ref/44d081e51884f8d702e4373433bcf56a8a7ad583 create mode 100644 txscript/data/taproot-ref/44d277dff113e85feb1b0da733079ba007e9ce3c create mode 100644 txscript/data/taproot-ref/44f204855343e69fdcf5529e0a6cb7ea5dee9741 create mode 100644 txscript/data/taproot-ref/452689d60be7f0c8bbd02b65a8c9841ac076b913 create mode 100644 txscript/data/taproot-ref/456d04cce86b68e35302afe4c3345e7531aa7304 create mode 100644 txscript/data/taproot-ref/457a9522f60a63cad613ce6f45ab52147b5a1871 create mode 100644 txscript/data/taproot-ref/45afd60d642320c756621d0d193cd27de023f243 create mode 100644 txscript/data/taproot-ref/45b86557bbe4fb210901de818886b7536f396562 create mode 100644 txscript/data/taproot-ref/45babb1803fdc9834a37bce496e989425e2fe9b9 create mode 100644 txscript/data/taproot-ref/45c14cf9149717468bed37e1e419020555c5f927 create mode 100644 txscript/data/taproot-ref/45c97ab53324162e66ed1d4c64371055d966b691 create mode 100644 txscript/data/taproot-ref/461af17d337077781b7e49d203e17cf7cdd7781b create mode 100644 txscript/data/taproot-ref/464a9d31b63ef5f4fe0f193acff3f7a8251adb7f create mode 100644 txscript/data/taproot-ref/4656d9b9e1003224e094622d9723247d8e53ca72 create mode 100644 txscript/data/taproot-ref/467ac05fa481edab9bf207738a0fdf308bb097c5 create mode 100644 txscript/data/taproot-ref/469213f3d0a4e2171977ef67184aa5af2a7d259a create mode 100644 txscript/data/taproot-ref/46a14a2d2ab594d5d1917b16120cf28258bcd02b create mode 100644 txscript/data/taproot-ref/46b30a46669909d38ddfd379180d9b9e4b032d30 create mode 100644 txscript/data/taproot-ref/46bf3a742f868512007f33d6092b25ad9851abc5 create mode 100644 txscript/data/taproot-ref/46faed608cd8553355e705736f5883a865bdd1c0 create mode 100644 txscript/data/taproot-ref/476140a4869c363ff59de15ca0b3dddb33ee16ea create mode 100644 txscript/data/taproot-ref/47678ed5dae9d91220f82b512192c03161458d96 create mode 100644 txscript/data/taproot-ref/476e1eb3a45bcd3c87728f4a5f152341fc41c6d6 create mode 100644 txscript/data/taproot-ref/4775847b1966e3acdf5bf21407d223d54512c0aa create mode 100644 txscript/data/taproot-ref/477812c3aa633968c3f508ea4a64f6240b7c1282 create mode 100644 txscript/data/taproot-ref/4786bab5e3fdd53811fa094d64658a869323943d create mode 100644 txscript/data/taproot-ref/47975b43d53b5ddfe8aebbb719cb70af90f9ca56 create mode 100644 txscript/data/taproot-ref/479ddb4cda1c95a66132ba2891f8deed16e1e31a create mode 100644 txscript/data/taproot-ref/47c96a95d6bd928e3390068b3c94db28d219e9c7 create mode 100644 txscript/data/taproot-ref/47d2125494edd0e8f737339160fc2c2bbff13239 create mode 100644 txscript/data/taproot-ref/47d754aabbae7b0b019240479e872ec641a71606 create mode 100644 txscript/data/taproot-ref/47f82c71674923da07b7c082409faecaa9d932d1 create mode 100644 txscript/data/taproot-ref/4849670c7437aabe38ac365b533b2cae10e1c316 create mode 100644 txscript/data/taproot-ref/4877a47b68dcd97455dcb8cd52e27309ec642b93 create mode 100644 txscript/data/taproot-ref/487deb88a57dc3cabdf497fe30220136e593d23d create mode 100644 txscript/data/taproot-ref/48a74bc4e405cef7fd774039eb79bdfaeafeea6b create mode 100644 txscript/data/taproot-ref/48aba9a0a8d38583f02db4ffbfe46b11affd2459 create mode 100644 txscript/data/taproot-ref/48ba4204d31335006c77c0a0c393c5424c5c89fd create mode 100644 txscript/data/taproot-ref/48bb02ef59af281b015aba26344a918d3e949c98 create mode 100644 txscript/data/taproot-ref/4907d4a7edab4d2d57ded00e95a654d47f9d823b create mode 100644 txscript/data/taproot-ref/491492c2f48c07bca9ef88c9fd36bbd272563b73 create mode 100644 txscript/data/taproot-ref/494a7c765d815e6adc6d4e66a57225322bccde6b create mode 100644 txscript/data/taproot-ref/496ed2b73e932787fe91d418b240c466ab6a4075 create mode 100644 txscript/data/taproot-ref/496f687a93323cea34ef1249059c862f9397c645 create mode 100644 txscript/data/taproot-ref/499184ec78a677697ab3ce5b0a87dfbb5ecce65e create mode 100644 txscript/data/taproot-ref/499f8c99044f5a7eb9940853f276e5ed7a9894f3 create mode 100644 txscript/data/taproot-ref/4a015d179a6415548a65aa75d68b1927fe2b0738 create mode 100644 txscript/data/taproot-ref/4a46cdc5c3a288a4eead1245fd3b0bfea974ea21 create mode 100644 txscript/data/taproot-ref/4a729815cf7a0f3947cdf502e425da1b2392d6b8 create mode 100644 txscript/data/taproot-ref/4a7e2f54a225b7edfc7761d52940b39a3702b9d8 create mode 100644 txscript/data/taproot-ref/4a8d82dfb1750aa99deb48b58f8c91a30cc703b0 create mode 100644 txscript/data/taproot-ref/4ab1d0f5d83d7343f225dc40c2a3a9940dbe3f7c create mode 100644 txscript/data/taproot-ref/4ab5fb6756c937560dc91ad579231800bcb605f0 create mode 100644 txscript/data/taproot-ref/4ab75e6d0cbfec5617026ca0e5622cb4be8d69ea create mode 100644 txscript/data/taproot-ref/4aef881f37b09a5f41876628452dac08c70a5c3e create mode 100644 txscript/data/taproot-ref/4af1e59e48ecbb8bcf5f8c2a739ffe2d47054b4a create mode 100644 txscript/data/taproot-ref/4b22e5ee8f595d1440ed41006d8e611da06d0c13 create mode 100644 txscript/data/taproot-ref/4b537d79f1a6255185126b99325e3917dfdc7885 create mode 100644 txscript/data/taproot-ref/4b57985dbb3b797fd0788cfb9513abc07ddad003 create mode 100644 txscript/data/taproot-ref/4b72ce01f999a32aedc950dd1804a8795ff98723 create mode 100644 txscript/data/taproot-ref/4b7e7a47d519d00fb5bb9332b6fb49586a4134f8 create mode 100644 txscript/data/taproot-ref/4b8ea927af2611b4cf7fbab90c9f8ffb8bea3ab2 create mode 100644 txscript/data/taproot-ref/4ba2921581f7a3560b6ec87297653fb165ccf969 create mode 100644 txscript/data/taproot-ref/4ba8a95b0f39aae1daf6e664542420657da72fa0 create mode 100644 txscript/data/taproot-ref/4be8d76134fd3aa72fd3ecc702e88a4530fcab53 create mode 100644 txscript/data/taproot-ref/4c0186fb62257335535a95ddfc34807b1f836154 create mode 100644 txscript/data/taproot-ref/4c0a1b11b6e6b7691c115aa09cd92e8ee09a5076 create mode 100644 txscript/data/taproot-ref/4c117e356638d628e5b841bc413e67c8bbf10384 create mode 100644 txscript/data/taproot-ref/4c2d2d7bdc708a582093d11d189f7addae41c5b4 create mode 100644 txscript/data/taproot-ref/4c66ad58c30b6404b73490df6a7aabdb4eb995b2 create mode 100644 txscript/data/taproot-ref/4c749139f91d4268578b998b4fc4742cfa968495 create mode 100644 txscript/data/taproot-ref/4c9126df811790be522891686bd1fcd0a7fae560 create mode 100644 txscript/data/taproot-ref/4cafaf85ab316a592878f9e83a2be01cfcdf738f create mode 100644 txscript/data/taproot-ref/4cb7d23ad1e01a5e42d3c8d927936db03801ab95 create mode 100644 txscript/data/taproot-ref/4cff2a8e93a415e0cd8f16313427db2dceea582a create mode 100644 txscript/data/taproot-ref/4d21f89d57587583f18ad029ffd268e08c6deaed create mode 100644 txscript/data/taproot-ref/4d2c30084bbdec620ff06379849a52ea2e10b97f create mode 100644 txscript/data/taproot-ref/4d72ed31959a5c8b48c6c9de682cb5364bf0cafe create mode 100644 txscript/data/taproot-ref/4d9a093d9de04fcd9c74eeb3fb252b4f762f048e create mode 100644 txscript/data/taproot-ref/4db56aa4ef26d2fbb9c74967c01012f86fb5c60e create mode 100644 txscript/data/taproot-ref/4dd64e2309c3e9efee2d5404d847b644329d1f7f create mode 100644 txscript/data/taproot-ref/4df3d74d147d4bb7144799be7f96196f44def06d create mode 100644 txscript/data/taproot-ref/4e1c650230dc5d5f622303dbdb697b39acc5953d create mode 100644 txscript/data/taproot-ref/4e27213b2fb3cbd2c324c9d967eb6837151c512b create mode 100644 txscript/data/taproot-ref/4e442bf704b5166ed40da217a4f0a6103e117487 create mode 100644 txscript/data/taproot-ref/4e6bb871c5b2e524530d3675221cf34b2e598538 create mode 100644 txscript/data/taproot-ref/4e7f6d1d5ff623f2b978feb61b0905320a14cea2 create mode 100644 txscript/data/taproot-ref/4e8673f1a272e7a4846b2b13fd4d6d699de0dd4d create mode 100644 txscript/data/taproot-ref/4e8dce29e5e8dce89954f8535e95a66c4dec52d0 create mode 100644 txscript/data/taproot-ref/4e98f79b12c1bcc786816c990038e187b1881a2b create mode 100644 txscript/data/taproot-ref/4ebc10c30a1a1250dc40fd49051eb8cadd3eb677 create mode 100644 txscript/data/taproot-ref/4ed19b212daaac7d9ddf8fbed04bd645b3540c87 create mode 100644 txscript/data/taproot-ref/4ed948d6df09636962a55dc16fa8141b57caf0a8 create mode 100644 txscript/data/taproot-ref/4f01eb0e5c5b453e93d7259acca78110e06e0cdc create mode 100644 txscript/data/taproot-ref/4f043f492b006187a12d4a27a2fb711e089c21cb create mode 100644 txscript/data/taproot-ref/4f31274445bc35aaf35c1fc3838142b83f4e4dbb create mode 100644 txscript/data/taproot-ref/4f3b0d3de5e5a892c662d05f7df9b836b5083f4e create mode 100644 txscript/data/taproot-ref/4f3eb1205832e452025bc7463ab84f005ccd56a6 create mode 100644 txscript/data/taproot-ref/4f444cefd89a49cf66c69836b968e18c893e6243 create mode 100644 txscript/data/taproot-ref/4f4de778bdec3be4e7cc1f875680330eb9edda65 create mode 100644 txscript/data/taproot-ref/4f54816eeaa1958560b3411df01fd36e2cc3cf78 create mode 100644 txscript/data/taproot-ref/4f5d2d6eb42d852d85a2d40419830ff372017208 create mode 100644 txscript/data/taproot-ref/4f692f08e2284094269303792599c3ca996925a1 create mode 100644 txscript/data/taproot-ref/4f967edf0f22d51ce89c007d5351844488bfc1d4 create mode 100644 txscript/data/taproot-ref/4f9df26c7948631ce06cb7292bcc481337bff811 create mode 100644 txscript/data/taproot-ref/4faee5238fb7a4ab5d716bcfb441ef4b0ab3f888 create mode 100644 txscript/data/taproot-ref/4fc70db2882c50f92cbf554605f20aa8afdc9e7b create mode 100644 txscript/data/taproot-ref/4fd09ff1c3fd39676f5029f8a82082c4a788cbe7 create mode 100644 txscript/data/taproot-ref/4fd67112498e9041d549dca8902b4b18f4151e0a create mode 100644 txscript/data/taproot-ref/4fdbb01ee1c89fea2c908ade5230cbf49b493184 create mode 100644 txscript/data/taproot-ref/4fe78456cf82ee1f4f6bf880baf672a53376c62d create mode 100644 txscript/data/taproot-ref/4fe9d51c1a4a51db63ace4b7593bf4d0179da70e create mode 100644 txscript/data/taproot-ref/5008a5b791ae73ec29ac0e451b2193e921d7d91e create mode 100644 txscript/data/taproot-ref/50197b1f963b6c70cf02494a68b83252169b58f8 create mode 100644 txscript/data/taproot-ref/501c6aa901d9b79489250b1e7c008dad90b998ba create mode 100644 txscript/data/taproot-ref/501cdfc8b8bfd47787c30328084cb44010d48a2a create mode 100644 txscript/data/taproot-ref/5020bfad68bbf3d62a9901f11d582b9367ff01a8 create mode 100644 txscript/data/taproot-ref/5027b63206364f920f33ae41d244998d60e6d000 create mode 100644 txscript/data/taproot-ref/502ba5490df10d7b64842c917be0cc8dce168153 create mode 100644 txscript/data/taproot-ref/5040561743c74062906a64802db725e7cb87b572 create mode 100644 txscript/data/taproot-ref/5047a7a4c5f22dc492d73a6de284a0603fc06171 create mode 100644 txscript/data/taproot-ref/50701ea0af2da8b084ea4a3566db2cedf8dcc2b9 create mode 100644 txscript/data/taproot-ref/50765c36b2c5b67d14ed6d3f1006bcac492b9d7e create mode 100644 txscript/data/taproot-ref/50ade4cb2bfd78d63959c0c196702463020ec1a7 create mode 100644 txscript/data/taproot-ref/50e97f4dc4e78ccd7491b23a05fec77e705d6d17 create mode 100644 txscript/data/taproot-ref/512819dc5f866c4c52a96393d1dc161a298b58cf create mode 100644 txscript/data/taproot-ref/5134a98d252e038c84c184e2a60b3ab15541c32f create mode 100644 txscript/data/taproot-ref/513b5b1cd7ae4a18b0684e98b8bea2445f0f267c create mode 100644 txscript/data/taproot-ref/5145a2f823d50829addf9a923816226e49b73772 create mode 100644 txscript/data/taproot-ref/51585e660838f7655a9d3f8e62673ed896abc1b1 create mode 100644 txscript/data/taproot-ref/5159ef1765261a6a8967fe22b91be23bc4f7c672 create mode 100644 txscript/data/taproot-ref/516e8f247c632cc97a34b088b9b9c5522f6b4b7b create mode 100644 txscript/data/taproot-ref/51902d7c0dc3e60282faf7c3bed70ad3588b79cc create mode 100644 txscript/data/taproot-ref/51cb6bd8e208996ef5816ab2e4a5f0a4392acd9f create mode 100644 txscript/data/taproot-ref/51d22c9e318035b292b06c7e92cff7a7dcd2ef46 create mode 100644 txscript/data/taproot-ref/51df77e1f5047cc73d62f6a82b06c76b2f2dfcf2 create mode 100644 txscript/data/taproot-ref/51f4a12afbc5c09d84488a09c1ec4fad2f8ad55b create mode 100644 txscript/data/taproot-ref/5201220ebf5a752ed230ba1c4660d6768ea0ab37 create mode 100644 txscript/data/taproot-ref/52406f743dd8cf468c8739e0e49a5e8c2abe890d create mode 100644 txscript/data/taproot-ref/524a8fbae511284a4b3feffd7e69391eebfe5fe3 create mode 100644 txscript/data/taproot-ref/525afb4266fbfcb9a9457044ffa429e6345aca74 create mode 100644 txscript/data/taproot-ref/526b41de4d7b2b6cca5b8cca2aff4e05e1edd180 create mode 100644 txscript/data/taproot-ref/528808e08755d1c4badf200ea1e46b471e697367 create mode 100644 txscript/data/taproot-ref/5292dd4bbfc4ed134ecca359a50042487bdab8de create mode 100644 txscript/data/taproot-ref/529e15d7495022b3928ad252f217ff7066f4a8c4 create mode 100644 txscript/data/taproot-ref/529e417f9521111e7e2b214bbe3a009fb241e0e3 create mode 100644 txscript/data/taproot-ref/52a46ce5d115709464d927bd868cb66e64d5d890 create mode 100644 txscript/data/taproot-ref/52b71f15e64724663db04868b953a0dd6f8ab01a create mode 100644 txscript/data/taproot-ref/52c7e56d194272214280372b7dbacf979b86a714 create mode 100644 txscript/data/taproot-ref/52da571031bbcc150454dd6be63a21c6a2dca5e5 create mode 100644 txscript/data/taproot-ref/53045f62216e6dd1d7b2d1c05dbda813f59f4d38 create mode 100644 txscript/data/taproot-ref/53090ff0e10b029e37a0eab690a757a5f4c346ea create mode 100644 txscript/data/taproot-ref/530e0b9098674994a45495cf1eb8c3fd36b04ef3 create mode 100644 txscript/data/taproot-ref/53123aee1da68a8b9619edd5140ab5c6aae10886 create mode 100644 txscript/data/taproot-ref/53234e0beefd772757294c48658a6fb1b632e5f3 create mode 100644 txscript/data/taproot-ref/5349c13d7b8dd8f692718b4ef221a21825fb04f3 create mode 100644 txscript/data/taproot-ref/5366b2cab843c6f4979214e27b561d35321bd2a6 create mode 100644 txscript/data/taproot-ref/5379718fd6733c3194547aea3041303f46159862 create mode 100644 txscript/data/taproot-ref/5394689c5e237d677fa75daa48d897e73a858ecf create mode 100644 txscript/data/taproot-ref/539798847b99eee00985bc1951275a98b55dd7fd create mode 100644 txscript/data/taproot-ref/53a808e42f754a6b97d63d9648f1e9a70ef36421 create mode 100644 txscript/data/taproot-ref/53c007e4c811059c16e10ba22c2b8c0f4ce3d99d create mode 100644 txscript/data/taproot-ref/53c3edf3601218d001c1e5074a2e608ca903fa25 create mode 100644 txscript/data/taproot-ref/53c8c5901bf8077df2161336a0fc9a5f774e1a5d create mode 100644 txscript/data/taproot-ref/53d0cafdef4e74e058c9073bbd755b723f71207d create mode 100644 txscript/data/taproot-ref/53dc16200f550b0ebabb6c5c132ae4191e1a1482 create mode 100644 txscript/data/taproot-ref/53f7ba7985ea8688080ed30b57d08c4ab91d4a7c create mode 100644 txscript/data/taproot-ref/53fd1406ce1667cf7d7de3b444b90660d76871fb create mode 100644 txscript/data/taproot-ref/540c6dd899720dbbc04e0f316f56549b4c1ea925 create mode 100644 txscript/data/taproot-ref/542c02db48e5517905eab16fd96de2d76702fe3a create mode 100644 txscript/data/taproot-ref/54305f14909100e1757674ae16a759d855c4a647 create mode 100644 txscript/data/taproot-ref/5445a326ed6ffd6f95dc9cb3c9514a0e53f4868a create mode 100644 txscript/data/taproot-ref/545537c377201418fedef933281d2dcbea90a159 create mode 100644 txscript/data/taproot-ref/547539d40d65ab39026f065bc9152d96c7c4ad43 create mode 100644 txscript/data/taproot-ref/54ab5c42625d4869197c04f218c443750527c92e create mode 100644 txscript/data/taproot-ref/54b4f9842dadbaeb2ac90b0f6d8177f76ce3f9a1 create mode 100644 txscript/data/taproot-ref/54b9966d625700d7ab8b6fb6e1c3e019b5a09f6c create mode 100644 txscript/data/taproot-ref/54bb653bb1662d8b2730bde1e4a255606fea193d create mode 100644 txscript/data/taproot-ref/54c4a1f796d9ff3acf74d30faba1654e46cb8e87 create mode 100644 txscript/data/taproot-ref/54db865605c4886df424d455f6674d7c9f904922 create mode 100644 txscript/data/taproot-ref/54eef01ce1e7ec1e6b58bb1a7e192b0e5d3a98e8 create mode 100644 txscript/data/taproot-ref/54fe044e4c6d4dfed594e15518f9550df3910bc9 create mode 100644 txscript/data/taproot-ref/55222bbf499234ced0243f0c54a06a8e01ee78e8 create mode 100644 txscript/data/taproot-ref/55296a40c4a4eec0b8b959e6e4af29fbf647774b create mode 100644 txscript/data/taproot-ref/554254ae450e17abd46d3c290600e3620f888246 create mode 100644 txscript/data/taproot-ref/554ee85d50ac67df97fb01a2eb533f4a62a41c9f create mode 100644 txscript/data/taproot-ref/555fcf75ef7ac731ace1cd81886b6cc1b013e911 create mode 100644 txscript/data/taproot-ref/555fe6827560beb47e96016c2aae78850a4e345c create mode 100644 txscript/data/taproot-ref/556a65730f4092db6fd77c12b631d10117d47033 create mode 100644 txscript/data/taproot-ref/556db9cb87763f9c127e87edfb88a8e8443c00d6 create mode 100644 txscript/data/taproot-ref/5581fa4307ec84b987cdfaee72db964e4a304876 create mode 100644 txscript/data/taproot-ref/55944a2b94a2ca58cff331e3ef254a2869f5fb50 create mode 100644 txscript/data/taproot-ref/55b0896604f6a6b38c17cf95f8c053e19d26090c create mode 100644 txscript/data/taproot-ref/55c61e7a6bf6a7b27176d90e85c792e38fa47d95 create mode 100644 txscript/data/taproot-ref/55c9ce0b7ccbe8ff676abebe7761bee66f38e3bc create mode 100644 txscript/data/taproot-ref/55cabf94b48b77fc7b0a87efd62377c6a44cfd3d create mode 100644 txscript/data/taproot-ref/55db8d546fc7e337dd899c328c82a60b6102a7b5 create mode 100644 txscript/data/taproot-ref/55f99e2d68ee85b75133f78cb948a5b7466cb4ea create mode 100644 txscript/data/taproot-ref/55faab0c69903138a86beca8e6ebc3e7a2010e0b create mode 100644 txscript/data/taproot-ref/55fc38b7d593fc118d407fcbd2ed49e3ea890734 create mode 100644 txscript/data/taproot-ref/56397a2ccd392deb6d3ed52e0a065fdde579e9d6 create mode 100644 txscript/data/taproot-ref/56567e4be5618770bb97f61b1487c7d47cf8192c create mode 100644 txscript/data/taproot-ref/5658a8d8fb388e7c7e5f7c7fc8630d3de961b676 create mode 100644 txscript/data/taproot-ref/5687a5e9c47486c4d2f24f74e09c95a9b9139145 create mode 100644 txscript/data/taproot-ref/56c988fc520dc9a5bafa28ad83eb0e972fd70567 create mode 100644 txscript/data/taproot-ref/56cc448ba82bed7220a831c4b05eabed0406386b create mode 100644 txscript/data/taproot-ref/56ed4007baeecebd4a8905063055ace47704a0dc create mode 100644 txscript/data/taproot-ref/56ff467c9c6b5e3079baa559955ba107d89d77fc create mode 100644 txscript/data/taproot-ref/570fb69de8afa341b54dd79455b6d21085c0334f create mode 100644 txscript/data/taproot-ref/570fc65b0c81c1473fc82b8545f5ae6efeb839ff create mode 100644 txscript/data/taproot-ref/57267f8aca1eeab5fdc28ec5f2cdbd6ce0d150ae create mode 100644 txscript/data/taproot-ref/572c410d27df3156ea85e726a966af51c9cadf8f create mode 100644 txscript/data/taproot-ref/576476370370b5501ea6a61ac033110ea83ed7c6 create mode 100644 txscript/data/taproot-ref/57731bef67046b96aa1a3f92ffbb41851e7b3353 create mode 100644 txscript/data/taproot-ref/5777068b6f7170fa6a505e9144aa3f6fc8625b74 create mode 100644 txscript/data/taproot-ref/578701a27b2e9321384f3e516f48fe5d2ebfad6d create mode 100644 txscript/data/taproot-ref/57ba07044f687929674d01d0c501e408072f02f8 create mode 100644 txscript/data/taproot-ref/57e2edb6bce9815f7e92a1cacf2c42a1d8a5ed21 create mode 100644 txscript/data/taproot-ref/580742d9b18b0603cb29360f8e7cbfef479c00c6 create mode 100644 txscript/data/taproot-ref/5876822a1e4504b3dcd7a3ddd10ca0dafc4c9ce7 create mode 100644 txscript/data/taproot-ref/58d98ae03e7b63b61749dae272899a7f41a89c30 create mode 100644 txscript/data/taproot-ref/58dd5844bf68fb5f47e929bf24c7d8dc2cab5791 create mode 100644 txscript/data/taproot-ref/58e9cc8b18e2ee0f4ef6cfa6222d9ba9c4e6999e create mode 100644 txscript/data/taproot-ref/58f607b447f90cc1f1f8626ebec53c5173658a3b create mode 100644 txscript/data/taproot-ref/58fb9dddb99befb27e93f61cc7346e2e320d4124 create mode 100644 txscript/data/taproot-ref/5901e4b94bc2da63a3099505728106aad680aaf1 create mode 100644 txscript/data/taproot-ref/59170b1799ffe9d1e085f2b8c38cf655ca14f1bb create mode 100644 txscript/data/taproot-ref/592e17797674340048f2ec49023bde0febe810f4 create mode 100644 txscript/data/taproot-ref/5930d2e1ddc70c728b1f219bfa14e4053fe56dbc create mode 100644 txscript/data/taproot-ref/59357c2c93a40183682393a898e6b58d6e81cb14 create mode 100644 txscript/data/taproot-ref/5951e8f0a0cafab1db40426b854148481b762ce2 create mode 100644 txscript/data/taproot-ref/595901e13730319ffed24982bd4ea8c12e89bc96 create mode 100644 txscript/data/taproot-ref/597a6a03965d41f1179d6a45268ac32531a9c209 create mode 100644 txscript/data/taproot-ref/5981777edd562076958d2a1e4c80225a425eb08e create mode 100644 txscript/data/taproot-ref/598b73c14cf25c235e0cc5c5a3bf6a5add3b0b66 create mode 100644 txscript/data/taproot-ref/5991f803b4df614fde19c2f5742b860c1a14d33c create mode 100644 txscript/data/taproot-ref/59a01c32eca07dea482bf25537b7d52b7bc5aaca create mode 100644 txscript/data/taproot-ref/59aa7a8b1146af0061b9b9478ffb499b5e7f3229 create mode 100644 txscript/data/taproot-ref/59b9a0e1dfe394504f08eae69abd47bfab092572 create mode 100644 txscript/data/taproot-ref/5a198317abb136510b17c59de5eaa7c880152f8b create mode 100644 txscript/data/taproot-ref/5a53b6c3fb03892958b022df8a6e0a4cd3d8e51c create mode 100644 txscript/data/taproot-ref/5a5abab97631cffda0f11fd3ecd87d86dc325f8f create mode 100644 txscript/data/taproot-ref/5a5d03ff40bbb94cac9b06c3d47e693d8db5af67 create mode 100644 txscript/data/taproot-ref/5a5efe209bb7d1e1b0085b1515836fcb2144c5f7 create mode 100644 txscript/data/taproot-ref/5a81cfc3ec9bfa6d49dcb19b411b6a4b6043df15 create mode 100644 txscript/data/taproot-ref/5a9d9ae70e2df49baefc66227ea1c1604902038d create mode 100644 txscript/data/taproot-ref/5a9f746ca2d826a621e61152c995893027ae3dff create mode 100644 txscript/data/taproot-ref/5b000b738705bfd4a6198d22129f7e9f2ccf1708 create mode 100644 txscript/data/taproot-ref/5b08bfcfc4f7317c5e45fbc3a683064ae85a3794 create mode 100644 txscript/data/taproot-ref/5b33a7895ef81de11965a513bcadc8ee53993d21 create mode 100644 txscript/data/taproot-ref/5b718764a0b56ae1705be7dcf35a2c639fbee6f4 create mode 100644 txscript/data/taproot-ref/5b72a3d1797578b12f235ecdfb8305d928514960 create mode 100644 txscript/data/taproot-ref/5b831888d2299bcbbe9bb60f6812a461f2da8720 create mode 100644 txscript/data/taproot-ref/5b89dad22b6b9ad7d97be2de400eaaa8ab2a03e9 create mode 100644 txscript/data/taproot-ref/5b9296392fbbb89f20c46a8276795c3b237a921b create mode 100644 txscript/data/taproot-ref/5b9476567b263e9cd4c8455b1383c48f559cdd5c create mode 100644 txscript/data/taproot-ref/5b95416a6aeb72fb134a6149c2103c7b4b8af54a create mode 100644 txscript/data/taproot-ref/5bc0284515461bcb5e3ebafccc633649bb1ec2fd create mode 100644 txscript/data/taproot-ref/5bdb30e6f918889383a02c0269f0e346fb129035 create mode 100644 txscript/data/taproot-ref/5be7de136c7e263729c299d1617ae86dd468f91d create mode 100644 txscript/data/taproot-ref/5c2aec0e280cc6dccb0aa9c3d4c5354a71c3d8e8 create mode 100644 txscript/data/taproot-ref/5c2cccde1ba71ca24440e1be3fe94d8b2abc9ba0 create mode 100644 txscript/data/taproot-ref/5c414ad191f1a4f17701285f026d3be386795f46 create mode 100644 txscript/data/taproot-ref/5c4b2bd5199eaae65eb1b50ff2282715f285525d create mode 100644 txscript/data/taproot-ref/5c4e02eac5ec6bfd2aacdf25eb5606e7f1f8d245 create mode 100644 txscript/data/taproot-ref/5c58efa0b606fd3a9f5c4149f78312e37884f070 create mode 100644 txscript/data/taproot-ref/5c7526188d4edba67f479317b2da9ebd815e25d8 create mode 100644 txscript/data/taproot-ref/5c82173fb5f60e67f6c570773d0e7ca501b2ef2a create mode 100644 txscript/data/taproot-ref/5cb8c6d32062773a2963b39820bf5c9c9d4d14f4 create mode 100644 txscript/data/taproot-ref/5ccd74670aa8f9270b7b6d1ec35f26366e24af92 create mode 100644 txscript/data/taproot-ref/5ccf6b63be9a26dc12ed0d8d9fcf8f9bd4d32aae create mode 100644 txscript/data/taproot-ref/5cd441bea952394300fbb2b175630e939f70734a create mode 100644 txscript/data/taproot-ref/5cd9d11e72f21213a0cd5e3b000d85ffc71a267a create mode 100644 txscript/data/taproot-ref/5cf79ca7fb6c27351843e8929c62c99f6d116b3e create mode 100644 txscript/data/taproot-ref/5d460d2d593010e8b116c549316144cec213da3d create mode 100644 txscript/data/taproot-ref/5d547488bdc33c4ba9f4eb64d9e510fe10c43b64 create mode 100644 txscript/data/taproot-ref/5d5955b5c12cb917cf3b4b20cef145f61555cebb create mode 100644 txscript/data/taproot-ref/5d5d395b7d0d39e7e061299a0ac6d887b277e7f6 create mode 100644 txscript/data/taproot-ref/5d67205500c9fd9a4b6a49b76f5ba2c4bc80f718 create mode 100644 txscript/data/taproot-ref/5d979fc0c97f4b30b22b3b449446ef2dad2f94fd create mode 100644 txscript/data/taproot-ref/5da06db4c347f603cf5309c3456c26cc7ff974ad create mode 100644 txscript/data/taproot-ref/5dccc42ff618aec2747273439401c4901ac182b8 create mode 100644 txscript/data/taproot-ref/5e1b24b8be80cb985494cc5e6aad6e0169f302a9 create mode 100644 txscript/data/taproot-ref/5e29c824e31a38432a78e51cb6163effbc1b7632 create mode 100644 txscript/data/taproot-ref/5e5cf1d19425ce321d71cf332626bab6bf9e5c44 create mode 100644 txscript/data/taproot-ref/5e7998196110af78479912905025c638163deb00 create mode 100644 txscript/data/taproot-ref/5ec7eb46ae8e0891018b9848bc2341e3ef6ee62c create mode 100644 txscript/data/taproot-ref/5ef0bcd2fc8dc128e8583e90e1d3848ad698670d create mode 100644 txscript/data/taproot-ref/5f065a6b9d7bf300aef6fc736b6256c582fa075b create mode 100644 txscript/data/taproot-ref/5f06fb75a8156e71669ca65d0d928c7effc223ff create mode 100644 txscript/data/taproot-ref/5f148693c5a6505500494101603fb4754464594f create mode 100644 txscript/data/taproot-ref/5f1c481f15b7e89e16871d58cd5784dc2fbfc8f0 create mode 100644 txscript/data/taproot-ref/5f33c80c85ea079ca0e803f9157053bb5cc26ce9 create mode 100644 txscript/data/taproot-ref/5f49d9e42303e9fd5d3b3beb8b4f91d1d295e920 create mode 100644 txscript/data/taproot-ref/5f617801a71e54b50b37fa8715f4acb9c710bc1d create mode 100644 txscript/data/taproot-ref/5fae0f3d4ccf63a68fa6fc6ed2f605c153bc568e create mode 100644 txscript/data/taproot-ref/5fd0ea816791d944d140a7f5a132e628c4df41cf create mode 100644 txscript/data/taproot-ref/5fd72300746767ed3942898b20e747b5e468bf3f create mode 100644 txscript/data/taproot-ref/600a49efd1ef275dd0d15886970d34f50ceb2cb5 create mode 100644 txscript/data/taproot-ref/600aee354a6065175892343ec14dc1eced5c33d7 create mode 100644 txscript/data/taproot-ref/60157ba4a7cd240aad985554d23dafcb6b99be47 create mode 100644 txscript/data/taproot-ref/601bf2a7aa8b6c3a9adef4933fc515d494f4a95c create mode 100644 txscript/data/taproot-ref/6030146df9ff31d1d977c2672cfc3792ad81865d create mode 100644 txscript/data/taproot-ref/60350336430acbd30d2f4a7afd671e1a676249b8 create mode 100644 txscript/data/taproot-ref/604aa389e1cdb7844558781a66e69bb80e5f7ed4 create mode 100644 txscript/data/taproot-ref/6070c8050e46e845c5170ec25daefa937dbbdd11 create mode 100644 txscript/data/taproot-ref/608151513d665821b3914810e70e9c1f957da187 create mode 100644 txscript/data/taproot-ref/60a40b71e2980d806f6e3f1f604e1c25d8d684a9 create mode 100644 txscript/data/taproot-ref/60c433ddebf0bd6ec3f44d608946aed9e843587f create mode 100644 txscript/data/taproot-ref/616a7fdb9927448c5c9e34f94d4f6d784f55ccf8 create mode 100644 txscript/data/taproot-ref/617d47ec32a898ac6e2b5bdd9b8e643408054596 create mode 100644 txscript/data/taproot-ref/61ac7af8ebd0ac559618d67f23d159b57dce5577 create mode 100644 txscript/data/taproot-ref/61ad3f5b692481700ab46b1c77ecf7e1590f4f72 create mode 100644 txscript/data/taproot-ref/61ad53ecbb9e93b9d193624ee3222dd39af8c8a4 create mode 100644 txscript/data/taproot-ref/61af1bfa70f27db871da9994cee2a1fa6dbfe915 create mode 100644 txscript/data/taproot-ref/61cb3c37ef29bf5abdbf60157dd9334ea8578716 create mode 100644 txscript/data/taproot-ref/61cca434775b13627deda2ffc7b421cc834c16ee create mode 100644 txscript/data/taproot-ref/61cd2f257a7e5a750b8f03f5aac0ffb2badc3aef create mode 100644 txscript/data/taproot-ref/61dfcc18f9bbed9da1c93970d11da1509777d17c create mode 100644 txscript/data/taproot-ref/622454dc9deabc8438f95f3e6280211c37369c04 create mode 100644 txscript/data/taproot-ref/626dec99c8f47a95e864b2a31b4ca6b916ee594c create mode 100644 txscript/data/taproot-ref/629399f535a4b780a7126fd274938c9e1bdd9b94 create mode 100644 txscript/data/taproot-ref/629683fa749137e2dfd6e82633d304ea6c124ce3 create mode 100644 txscript/data/taproot-ref/62c572a03d69a6b40d25947abae19bf6ce5eb385 create mode 100644 txscript/data/taproot-ref/62d04745f9fcb76848b12153a162a268f14abeca create mode 100644 txscript/data/taproot-ref/62f4696a4d80fd4c0dc13ef75f8bacef6743b8d7 create mode 100644 txscript/data/taproot-ref/62f8cb127c31b1882150c0c8effbd39c09119e5f create mode 100644 txscript/data/taproot-ref/630f756a29287a797ffb5586566bc1d25758573d create mode 100644 txscript/data/taproot-ref/63167cb8ba3874badf57f0e855e7f02478cfd49f create mode 100644 txscript/data/taproot-ref/6316bbbc6a41808b00262eab5f5262fcfa97066b create mode 100644 txscript/data/taproot-ref/63254af008fbdb6301cc07058a867abb97610c66 create mode 100644 txscript/data/taproot-ref/633faf2de8dd00d4d8b3bbdda4d9f2125613a89d create mode 100644 txscript/data/taproot-ref/63428d34338ada0748fdd95dc5f6db204de7543a create mode 100644 txscript/data/taproot-ref/634458fa7be2820b5e56c8ae2c193b953af0ad40 create mode 100644 txscript/data/taproot-ref/6360d46053a73eb3d4ae1cc875f022d5d461f571 create mode 100644 txscript/data/taproot-ref/636131ac174bfe63b118e739bb030a2fae2ae0ed create mode 100644 txscript/data/taproot-ref/6391af63a3bab91b1f963e133bbb54d1ec7814cb create mode 100644 txscript/data/taproot-ref/639afaf27cd09001a498697b15842c3394f9535d create mode 100644 txscript/data/taproot-ref/63b0cec5acbe499ece5bd821c8af36dd0de95819 create mode 100644 txscript/data/taproot-ref/63b754b26183ec079fd02af865aea1d5c49d93cb create mode 100644 txscript/data/taproot-ref/63c6cb5ef992299a9604582c39c7f956c65860b3 create mode 100644 txscript/data/taproot-ref/63c8bbd564a4a1648edf9f05d80a6b089c40883c create mode 100644 txscript/data/taproot-ref/63cc94dee9c6256ddfe004eb9fcabb932627fcce create mode 100644 txscript/data/taproot-ref/63e781018cd701d6d445dc7c4ea28f9a53de825f create mode 100644 txscript/data/taproot-ref/642e1fbd4f64d1ba035193a0100aefc8d436121a create mode 100644 txscript/data/taproot-ref/642f40f85c3e92c672ec038a2e238351c6c24178 create mode 100644 txscript/data/taproot-ref/643386ed0f556a2227416f5b32e310b70a2cf743 create mode 100644 txscript/data/taproot-ref/643f751fa11ea6d366ace6319feda720f2e8accd create mode 100644 txscript/data/taproot-ref/64537ec43a7b2b59f2b936c7247b94e44e1bb551 create mode 100644 txscript/data/taproot-ref/648fef1a9a568a6e98c2cb836193a18ec11b60ce create mode 100644 txscript/data/taproot-ref/64b6416da57fa74cb892f8728aac8bc6064ac5dc create mode 100644 txscript/data/taproot-ref/64c1ab90001da13422d892838a22208f71109eb2 create mode 100644 txscript/data/taproot-ref/64c86a5fba96a19af3d7f98cb11533d79ff4433f create mode 100644 txscript/data/taproot-ref/64c9c1019b362e31675420967685e3e5e1d92f06 create mode 100644 txscript/data/taproot-ref/64e713b456a3f23cd86eeb23d796639b7c85d2b6 create mode 100644 txscript/data/taproot-ref/650b0fcd68979a929ceb682e9024fb7beb57c2b1 create mode 100644 txscript/data/taproot-ref/652f7178db85a30195aec38e5bed56f8d492b18c create mode 100644 txscript/data/taproot-ref/6536f2a8bf497dc4fb07e6344571b041ddf3e9ce create mode 100644 txscript/data/taproot-ref/6552bfcd6579a934948b7068b4c551a0117ad0f9 create mode 100644 txscript/data/taproot-ref/657e868eb96e89c02af5430fd6fd6b371011ad19 create mode 100644 txscript/data/taproot-ref/65883b58c6b3dd90d25b39f5ccc47be52f17c9fc create mode 100644 txscript/data/taproot-ref/658ae5cbb0d9d2acbdf007a1d56b7a8d343343c5 create mode 100644 txscript/data/taproot-ref/659a2dd2fa1b9d801f3241e5ff84637ce06ccb77 create mode 100644 txscript/data/taproot-ref/65a933e1d1978ba3bd2f831c22458a755de9ba53 create mode 100644 txscript/data/taproot-ref/65b54fb91b4a1cb8c833485f4d132f6e676256e0 create mode 100644 txscript/data/taproot-ref/65b5fce87c9d43529bc25317899f3d88952342f0 create mode 100644 txscript/data/taproot-ref/65e72ac1ffd20fc948eb9fd0715334a200044fb6 create mode 100644 txscript/data/taproot-ref/65f7ef2d10a182c5af3e4c60b4f23f13770b1d2f create mode 100644 txscript/data/taproot-ref/660b8322660c10bb3072efbf02a01b028869f3ed create mode 100644 txscript/data/taproot-ref/660ef1c053328676703178f6c1f1a9eab0eba34d create mode 100644 txscript/data/taproot-ref/66252c3d296124f1a894a2bef80eb0b8d2780c58 create mode 100644 txscript/data/taproot-ref/6652466b4852d5b5fdaaa69e10880f1a3b76c3fa create mode 100644 txscript/data/taproot-ref/665eb41953197df4c60f261f2844052bbd0c48b6 create mode 100644 txscript/data/taproot-ref/66726b80715835e1ff8fad96f3c76a0309586a88 create mode 100644 txscript/data/taproot-ref/6699c94d11593280e700614b550ad835b0025476 create mode 100644 txscript/data/taproot-ref/669ff69c2c67c7765c32e86e0eda8fcf04bcdbdd create mode 100644 txscript/data/taproot-ref/66bbe506485ecc1f5f29905e93bbc326b119a9db create mode 100644 txscript/data/taproot-ref/66cb36473c4a75d094b0c109710f2456a52e3ac0 create mode 100644 txscript/data/taproot-ref/66e881b64f9e9007cc27f9ae6ea1d9c09b7ff1dd create mode 100644 txscript/data/taproot-ref/66fd2e2f42f7b15c03f46c8f5852fc2b2a1288d4 create mode 100644 txscript/data/taproot-ref/6723a627907cb1d91034b75d6a69d055a9d2a9b2 create mode 100644 txscript/data/taproot-ref/674c86a431b193721af73dfdf07aeef65a7ef508 create mode 100644 txscript/data/taproot-ref/674e2feab074ca0240a6ca55826b14e434793461 create mode 100644 txscript/data/taproot-ref/6766fbe9f961609fc3c2e2dbb922ddf1dc771d96 create mode 100644 txscript/data/taproot-ref/677c2fb0bd66dbf157aed281b05b92ad2c197c37 create mode 100644 txscript/data/taproot-ref/6790425ac6ab89b1bf9e69e61d0a23def2470c84 create mode 100644 txscript/data/taproot-ref/679748203674073239d2e5a0f7f9da26bc60feb9 create mode 100644 txscript/data/taproot-ref/67cfc5cf8010d9b1c152301eae06d149589112ba create mode 100644 txscript/data/taproot-ref/67f26334e58a0356529496d89738359b7a8dd136 create mode 100644 txscript/data/taproot-ref/68052b4483af39b51b45980874124e3793c72420 create mode 100644 txscript/data/taproot-ref/680f37fd69b7d65b2bea1f6968d0d19d60d93bb6 create mode 100644 txscript/data/taproot-ref/682b9ef29382e2d77b5242e0860693527c825702 create mode 100644 txscript/data/taproot-ref/68560332b36281ab2ef6e177361019a087666119 create mode 100644 txscript/data/taproot-ref/685bad2808b9ebb6dd3bebf554aba2916e169a21 create mode 100644 txscript/data/taproot-ref/685c94cdfdc42c71493f0fbf86f6cc75a2bfe7f5 create mode 100644 txscript/data/taproot-ref/6864a32b8e40345c0b76999afe5f1c070d474908 create mode 100644 txscript/data/taproot-ref/6864d1927bc63a92a60460a41b2a104d48d49e0a create mode 100644 txscript/data/taproot-ref/687590a8d9eb9f62d77022572d103d4c5adc9867 create mode 100644 txscript/data/taproot-ref/687648741dc59ceab592c14d35fa96ac27ef98d1 create mode 100644 txscript/data/taproot-ref/6890f89ae85a96d458a2e92ae84db78ff5a3d8e4 create mode 100644 txscript/data/taproot-ref/6893c34edde19b9be594417a3321f7522c83713a create mode 100644 txscript/data/taproot-ref/68ae4d6748f33706497031526da5fa76f0c923a1 create mode 100644 txscript/data/taproot-ref/68b62ec5b8680759a52e8934526dbf400162c104 create mode 100644 txscript/data/taproot-ref/68c6c0d42504385245c61282657b3afb267a068a create mode 100644 txscript/data/taproot-ref/68ebe4901e5b73c0d6c376b14ab93cb27b6b9b29 create mode 100644 txscript/data/taproot-ref/68f2022142d8ce6c1188c67a635ce455d70e8668 create mode 100644 txscript/data/taproot-ref/68f3ade32553e6641d33ffec7c4bbbe70c966a75 create mode 100644 txscript/data/taproot-ref/692178574c30ecc0fe297e53225c7fe6b7047923 create mode 100644 txscript/data/taproot-ref/692a5e26fd84eb7c487336a8ad5a27bbf550d3e5 create mode 100644 txscript/data/taproot-ref/693b4e80b442d5871a480b72fc7f154489eada7b create mode 100644 txscript/data/taproot-ref/693f1072f030299b192b97d19cba8ff9e045ceba create mode 100644 txscript/data/taproot-ref/696eb3cf37f866313a3dbf40b4af77d45f827d98 create mode 100644 txscript/data/taproot-ref/69763ca3d19be4c3d360ac96f990730c211450f4 create mode 100644 txscript/data/taproot-ref/6977dc4cb03457ddcfe3fb5e4ebd32c7a60a4f4e create mode 100644 txscript/data/taproot-ref/697a7f07151aad714b88aad13a439841eb1d849b create mode 100644 txscript/data/taproot-ref/69c1c268224ffcce5d6dc13b49962a3c8887c2ba create mode 100644 txscript/data/taproot-ref/69d24f5639ca8a5eaf58924722cc313b9936c330 create mode 100644 txscript/data/taproot-ref/69f36a1e1c567e1d5e44edc58c355abb92e23f68 create mode 100644 txscript/data/taproot-ref/6a35130e1e9674f6d1c241fd478fe85332fbdbb1 create mode 100644 txscript/data/taproot-ref/6a37620db708370995281cf6c46512cd60efeda8 create mode 100644 txscript/data/taproot-ref/6a8e8effd233033afabfdaf9d971d772b2bf9ecd create mode 100644 txscript/data/taproot-ref/6abb0ece7e16ec849987f8c8acf3aee7013ec5de create mode 100644 txscript/data/taproot-ref/6addba1d7123769bf9727a6a4106110126f36086 create mode 100644 txscript/data/taproot-ref/6aff050ffc62f58100aca0e5b1839f097fe65155 create mode 100644 txscript/data/taproot-ref/6aff0519662314531494b8b3319e2768ebd40a35 create mode 100644 txscript/data/taproot-ref/6b14353e2b7d7788062623a8ab274c36f8e8bf3b create mode 100644 txscript/data/taproot-ref/6b611309b991acee95b55b4b19539f65ceccf76b create mode 100644 txscript/data/taproot-ref/6b861044122a6b081803e3a99f47b40277743d06 create mode 100644 txscript/data/taproot-ref/6b8790739dcd1f8d3ef41a03c6508717d78feb52 create mode 100644 txscript/data/taproot-ref/6ba407f0a422507bed18c1d5b52f1f550c278fcb create mode 100644 txscript/data/taproot-ref/6bc93c9d2144506aeb9dbbe41a5b4a095f8fe9cb create mode 100644 txscript/data/taproot-ref/6bde125fedeb05208eb8991bab6ad0713a60d9e4 create mode 100644 txscript/data/taproot-ref/6be0d8042ea3f474de849bc8205c65b017a3d587 create mode 100644 txscript/data/taproot-ref/6c1bef32f6ca0cfaee1705746902336e4fd67e96 create mode 100644 txscript/data/taproot-ref/6c3db2c6ab0b6b80838387b923869561f9e1cf11 create mode 100644 txscript/data/taproot-ref/6c7e6cdda9913347f0ba8eed8f914941cec5b2c1 create mode 100644 txscript/data/taproot-ref/6c8a1b2ea553e6dfa5f653afeeb135465732aa6e create mode 100644 txscript/data/taproot-ref/6c8acc451d0c73e74ad6918585d0c8776498affd create mode 100644 txscript/data/taproot-ref/6ca4ca112dc6f3b82a4ee1dcb539f5412b61802e create mode 100644 txscript/data/taproot-ref/6ca7072324326a43f42b641dd4cc2d785bfbb7d6 create mode 100644 txscript/data/taproot-ref/6cbefe4b22649c02c818e52d3142c768ae99b9eb create mode 100644 txscript/data/taproot-ref/6cdb87bebca9057c621affd2eddfbe726630b1c6 create mode 100644 txscript/data/taproot-ref/6ceffd0098b1fadf6f95341e39b6b1486b6e2dab create mode 100644 txscript/data/taproot-ref/6d1ad01f9d4765e28554608aaaaf7f86d7fee48a create mode 100644 txscript/data/taproot-ref/6d2c53b612c9e3931c251808123e215918c34b60 create mode 100644 txscript/data/taproot-ref/6d6cb592531f25b7c0a1a607342e2c3dcf35ac1f create mode 100644 txscript/data/taproot-ref/6d776b8dcea06b627feb06e8e07e6455f48086d2 create mode 100644 txscript/data/taproot-ref/6d807824d43b2e677fee210fcdda1e52cabbbbc5 create mode 100644 txscript/data/taproot-ref/6d874714ddd3706018c9051c55abbcf1210b4643 create mode 100644 txscript/data/taproot-ref/6d9b8efdf33eb396820e03892263d3b784e5dcf5 create mode 100644 txscript/data/taproot-ref/6de00eee762e4ed839eb40fe1f0e25de0071e584 create mode 100644 txscript/data/taproot-ref/6e0058983c03e5e6a363e64deb28a252b20617c1 create mode 100644 txscript/data/taproot-ref/6e20107c698b7f36b9163a7db7382e068caca218 create mode 100644 txscript/data/taproot-ref/6e41239fdb2bae4970f0a9787e683e94dcfb1760 create mode 100644 txscript/data/taproot-ref/6e59dc43f59b064311d89a689dd58f9a905d10e3 create mode 100644 txscript/data/taproot-ref/6e85ec4ec7f9980d8de6d6892d1415072155eb5f create mode 100644 txscript/data/taproot-ref/6e99af85369d8643f1c91d6e46c038af402d368c create mode 100644 txscript/data/taproot-ref/6eb985be69c6686dbcfaa0cfeba04cbc68dd5298 create mode 100644 txscript/data/taproot-ref/6f3e92cd7c0bd1c759a5d1ec589fa593028c2f27 create mode 100644 txscript/data/taproot-ref/6f52449eba2cea1fa19799e7de8f931e69c70cdb create mode 100644 txscript/data/taproot-ref/6f56fca6cc1c01fee921e3ebec30d918b7e84af1 create mode 100644 txscript/data/taproot-ref/6f6d754696a56d367c058bd6cef710ac92a36c4d create mode 100644 txscript/data/taproot-ref/6f7390dad86b309a8464acc781b7a22cdc6164de create mode 100644 txscript/data/taproot-ref/6f775290762b949c8416b8db72a80fd4f625aeeb create mode 100644 txscript/data/taproot-ref/6f8393bbb9d02857705efc61028b43ee819ae6ef create mode 100644 txscript/data/taproot-ref/6f8e2a9cd5725921d637323d42b65faaa53b2d0c create mode 100644 txscript/data/taproot-ref/6f9c6ccc8504bc417cff64152e5d55f2da6384f6 create mode 100644 txscript/data/taproot-ref/6fae620fa980b4c2193b8d1ca489fecb771da643 create mode 100644 txscript/data/taproot-ref/6fd7c011c1e087678c2fc502f6049d5a1610b285 create mode 100644 txscript/data/taproot-ref/6fda74aa278e18be569d89d76d2b7d189719fc9b create mode 100644 txscript/data/taproot-ref/6fe4cc6bb00f0db22fe4cf7e68170752bf9e1f7d create mode 100644 txscript/data/taproot-ref/6ff3146da9ac0acb6f0c208976dc39290b684b16 create mode 100644 txscript/data/taproot-ref/6ffb4a945d04f8b031049d6b6fa49f15f19568e5 create mode 100644 txscript/data/taproot-ref/70103c6bfa6033fc750d73a791d50375a1b86fea create mode 100644 txscript/data/taproot-ref/70294d4a0a0438dea998f982369933dacc66aacd create mode 100644 txscript/data/taproot-ref/708f0996354e7df20b2aef4b10bc9586dcaa5db0 create mode 100644 txscript/data/taproot-ref/70c7802de56e11939701cba269f74c5c54434e61 create mode 100644 txscript/data/taproot-ref/70cd3f4760a280eac2806e6373034a5e750cb013 create mode 100644 txscript/data/taproot-ref/70e123fe2099ae69883a84234ee7d2c67ffae902 create mode 100644 txscript/data/taproot-ref/70f98e7683065de833f78e968b12a17560c6d145 create mode 100644 txscript/data/taproot-ref/7125c24e3079aa7ecd8a075096657aa41cbf32aa create mode 100644 txscript/data/taproot-ref/712c593d655c49212ff38704eff4d5d68d14506d create mode 100644 txscript/data/taproot-ref/713565a78c4f0eefe92a042e831427511dd4f5b9 create mode 100644 txscript/data/taproot-ref/715cf3f1edec8508d34687cba9eb9735c4113fc8 create mode 100644 txscript/data/taproot-ref/716e9a2309a2d14f0b54d759df166270321962ca create mode 100644 txscript/data/taproot-ref/71807ffa82a2c8190651c69c857cb71bcb08e301 create mode 100644 txscript/data/taproot-ref/71a2de6544779c774612b1f87277375ae9792a62 create mode 100644 txscript/data/taproot-ref/71d2976410e52b3891d47b0bf5daf36223655072 create mode 100644 txscript/data/taproot-ref/71d3d5be815413f81a15e1f21d82fa46ce4eeab9 create mode 100644 txscript/data/taproot-ref/71ea7e6e573f89e2a23138bfbd547d888bdb7c55 create mode 100644 txscript/data/taproot-ref/71f13e97734a6166d08d71982621f3785ea5ae3d create mode 100644 txscript/data/taproot-ref/7217d80b5053a43d6fb6822470d12e76b42b2764 create mode 100644 txscript/data/taproot-ref/7222bfdff7231c2aa5afe88a9b8860e057c947b7 create mode 100644 txscript/data/taproot-ref/722914ef8c3dfacc1243877cf6bc0be5cc3eb6c2 create mode 100644 txscript/data/taproot-ref/7275e47aff6a2c0f8bacb56d065aaba591e02a30 create mode 100644 txscript/data/taproot-ref/72790cb9d6895411ac13e44b9be62c5cb05584e7 create mode 100644 txscript/data/taproot-ref/7282e73fa9d18fc99fa2f10c51211fe1079693fe create mode 100644 txscript/data/taproot-ref/72893e972bd42b8697f75e7ac80c8885bf7c3a45 create mode 100644 txscript/data/taproot-ref/728c6175ed68889cfe3f359471f509fd1da1623a create mode 100644 txscript/data/taproot-ref/729abe2b4cc9df53668a78ea8236ae421f3b5173 create mode 100644 txscript/data/taproot-ref/729bc90d92d1235d6d3bc4c56bfc5a7cb1532e39 create mode 100644 txscript/data/taproot-ref/72a19edf12311bc49d7e72f4ce0d25f68b5ba472 create mode 100644 txscript/data/taproot-ref/72b351e21f164a536ef913cda1b95716c0de23ce create mode 100644 txscript/data/taproot-ref/72b831f893332ad3733b0af04ea0e76cac65b5dc create mode 100644 txscript/data/taproot-ref/72bd024e4b285894458f234b460fcaf90e8445cb create mode 100644 txscript/data/taproot-ref/72de723051c80828a6318b2251cdaf29db2600f1 create mode 100644 txscript/data/taproot-ref/72e0280dc174679a75da3799cbb41ffe349f9f46 create mode 100644 txscript/data/taproot-ref/72f423c06f55b024fcd60e3acd20f596205615ab create mode 100644 txscript/data/taproot-ref/73319dedec7db18100aca1acbdf582d38ed80c64 create mode 100644 txscript/data/taproot-ref/733a381bc9e56cec2e4a856413e56d0bb7972662 create mode 100644 txscript/data/taproot-ref/734891576e6360feb0a79e5f6326f4a0f3310853 create mode 100644 txscript/data/taproot-ref/73617507f1dbe680e93caaef1d078ac92ad846ba create mode 100644 txscript/data/taproot-ref/739b15f40bb87a9e4f1a8399ce654d068bd0d30b create mode 100644 txscript/data/taproot-ref/739c724fbc1d946d981066a3f82cfb09a034ba1f create mode 100644 txscript/data/taproot-ref/73a2aaa511c3c79634f98183fed1aa515112c30c create mode 100644 txscript/data/taproot-ref/73ee1a7d0acd1f7e6a29e2cc9de52adf757c34f3 create mode 100644 txscript/data/taproot-ref/74033d1959e62921897648eae99b7576a518dcbb create mode 100644 txscript/data/taproot-ref/74068e2edea30ca07fc3d6536b7beb1e73610c5e create mode 100644 txscript/data/taproot-ref/74077dff1318da9fbe3c8ecbcf570fa2b161a310 create mode 100644 txscript/data/taproot-ref/742166e63d37f163f9bfa53c3d1ca1c432028519 create mode 100644 txscript/data/taproot-ref/742c9cda5fd595f2f4acc988670128b67aa2cce0 create mode 100644 txscript/data/taproot-ref/743bd395e890e120441210e9d92579d0c7fd94d9 create mode 100644 txscript/data/taproot-ref/74433925d2da6bb3c3edcc954a98eca9eeb57abd create mode 100644 txscript/data/taproot-ref/746569f919dd66a45ca13b1e18824a0afdb22d9e create mode 100644 txscript/data/taproot-ref/74685cb831119333da8b5a7c83e055eedbef944e create mode 100644 txscript/data/taproot-ref/7482f850ee397dd25bd1687e64b7eea626e9c608 create mode 100644 txscript/data/taproot-ref/748b5f0d6e2f9fa4665f7445654524ae50ffc8ad create mode 100644 txscript/data/taproot-ref/748ece6f6568749de6856f4e101f00d04a22d979 create mode 100644 txscript/data/taproot-ref/74965c4ae1074a7c5d80f0889dda62db64f0d7d3 create mode 100644 txscript/data/taproot-ref/74b0040c6bed65b152921df24d1d78125695306f create mode 100644 txscript/data/taproot-ref/74ba2f22626f43b6a2563b0cb35c620433682d40 create mode 100644 txscript/data/taproot-ref/74dba0abfcd70931e9e189f44c9fe76cb1cdbb0a create mode 100644 txscript/data/taproot-ref/74e0dd99e051486e796a28c6482f0b52f0af67a1 create mode 100644 txscript/data/taproot-ref/75255d425818aa4e45fa7a8ce30896b30e5f57bf create mode 100644 txscript/data/taproot-ref/75362838d1ed152f60dc3cb74924d167c1b0fd2b create mode 100644 txscript/data/taproot-ref/7559c841c04c474bc9ff45fe8504abb5d4e8f57d create mode 100644 txscript/data/taproot-ref/757adad4f7dd459070f4f1b1f4f4f2374a57ec6c create mode 100644 txscript/data/taproot-ref/75ed237efa308c478c8ee1faa516c94e45f17495 create mode 100644 txscript/data/taproot-ref/75f1856401af3c6957b627bba156ed076e49ef5a create mode 100644 txscript/data/taproot-ref/762487d62765bf58b6c712ce69edfc2a9d91f23c create mode 100644 txscript/data/taproot-ref/767dc9730435e95ff0446a5e08a10843c28b5e4d create mode 100644 txscript/data/taproot-ref/76967f9679742d07c45801b75cdb5ec88f3ea2e6 create mode 100644 txscript/data/taproot-ref/7697ccd8a0cbc267875cf87e7ce982f8dbffa82b create mode 100644 txscript/data/taproot-ref/769cf64713d5676b0d7823f406502b750f29f48a create mode 100644 txscript/data/taproot-ref/76adb95f40dd46b0cd442f82b7eb70ed237f1676 create mode 100644 txscript/data/taproot-ref/76ba7be2b975f49a68b47d255757883a4fe65358 create mode 100644 txscript/data/taproot-ref/76bc86d13bce32da92769372e37076c675520959 create mode 100644 txscript/data/taproot-ref/76c17c551bd5e5ae2efbb26f2e05d12c9c8181b3 create mode 100644 txscript/data/taproot-ref/76c565f5646ff08d8c740ffe4cf133d9c8a3fe65 create mode 100644 txscript/data/taproot-ref/76f5c55837a53eb0781baf11e0de07184a6d08ee create mode 100644 txscript/data/taproot-ref/76f83799d26fbfe8607158f4718d6f5cfdc8621b create mode 100644 txscript/data/taproot-ref/7705fd1f70110abbefb84b8bb3679338dc85008b create mode 100644 txscript/data/taproot-ref/7722142222386c62ee3cf0d244202e77b759f34b create mode 100644 txscript/data/taproot-ref/77258dc253bbfcab9ac3a990bda4f20592f9c651 create mode 100644 txscript/data/taproot-ref/7726ec0c41e3e97e7d617065e6504efb8f024cd4 create mode 100644 txscript/data/taproot-ref/773d0e073333f130bcff75d37d1111faaebee058 create mode 100644 txscript/data/taproot-ref/774784914f2077e1681344cb01340a934be26ba4 create mode 100644 txscript/data/taproot-ref/77907cfa0df9ad35b28a28dc974519599031d5b7 create mode 100644 txscript/data/taproot-ref/77a416c6802644089ebc937712578c64cd114e2e create mode 100644 txscript/data/taproot-ref/77b1d215fef8b044b5354a64c3541f96a5eed3ef create mode 100644 txscript/data/taproot-ref/77bc35d370a04908ca4a6126a011623e2b09442d create mode 100644 txscript/data/taproot-ref/77d0cc6e1223f82ea66b45b7eefc97601034b9bb create mode 100644 txscript/data/taproot-ref/77faf5783504d2bd51c625bcecb48b8f87e8e165 create mode 100644 txscript/data/taproot-ref/78251c5d9b329e36203639010c03798c0e1dcf20 create mode 100644 txscript/data/taproot-ref/78536c856a97d639ec3c9e87656c03a486180cb2 create mode 100644 txscript/data/taproot-ref/78a8516593c8bad79e4092b1b3fc0a850a266c4e create mode 100644 txscript/data/taproot-ref/78a85c295a5f5c62f56d7eba74225f31406a0b51 create mode 100644 txscript/data/taproot-ref/78aa0f27c839d5f0b6120545131237373c9ae941 create mode 100644 txscript/data/taproot-ref/78bb53d71409ce127d2a0ea2bb3fe8ab857c3db0 create mode 100644 txscript/data/taproot-ref/78f579fb1bbed4948a321bcad1a70116b995076e create mode 100644 txscript/data/taproot-ref/7929ee70089306f9173670db39ef247d71e6d01c create mode 100644 txscript/data/taproot-ref/79348dfc973141bd7bee5f470ac28ffd56e6591c create mode 100644 txscript/data/taproot-ref/794d2929ccd4a9f38151fa274b7bba0a898aa30c create mode 100644 txscript/data/taproot-ref/79693f140367ae963c396d7952f2b07e3e603755 create mode 100644 txscript/data/taproot-ref/7988534604fb11aa559428f200cd7631d266dcdc create mode 100644 txscript/data/taproot-ref/7993ab06fc93824943100f468b83a388dc8396fc create mode 100644 txscript/data/taproot-ref/79a78205700940deac5a3af06b37f7a837ba5d0c create mode 100644 txscript/data/taproot-ref/79dcbe312ec0cae55271acea3fbcad77eb51a258 create mode 100644 txscript/data/taproot-ref/79ed5f67b23082b621f1d3d307cbb3833df70b36 create mode 100644 txscript/data/taproot-ref/79ee5f66d93ee0d29f8b42ccf65fc760525867d6 create mode 100644 txscript/data/taproot-ref/7a043102c33d83ed36e9879386a6e618668535d9 create mode 100644 txscript/data/taproot-ref/7a111af866866f2de4ef478fd546fb1c0fc25d0a create mode 100644 txscript/data/taproot-ref/7a1820d857c8a49a2db73ca33ae771ff2942dccf create mode 100644 txscript/data/taproot-ref/7a490995df2d5f17d023de70297a3ccd20b7e9f0 create mode 100644 txscript/data/taproot-ref/7a4a6b8236fc89f7d9e11728eab5f34c87b831ca create mode 100644 txscript/data/taproot-ref/7a59b37e047189062f0abaf0d629290ecfb35f75 create mode 100644 txscript/data/taproot-ref/7a69a216cc5a6c99a19546872d16973b864b8ec6 create mode 100644 txscript/data/taproot-ref/7a6afdaaff4560a33eba5ebd9df662b110b72dc2 create mode 100644 txscript/data/taproot-ref/7a87119e2369843226572e9e9603e14022ad565d create mode 100644 txscript/data/taproot-ref/7aa3606e89e98945870fd6072bc248da2ac00194 create mode 100644 txscript/data/taproot-ref/7ab6a9ca3af298309556e392c5a2145121ecad20 create mode 100644 txscript/data/taproot-ref/7ac66a26b371216e55464bd620f00f9b3cabf539 create mode 100644 txscript/data/taproot-ref/7adcfb6ec993d4f55872e19410191727163f6958 create mode 100644 txscript/data/taproot-ref/7ae9dff22041f4c1fe093655030d83341a775789 create mode 100644 txscript/data/taproot-ref/7b1eb9664a41baa7f5e742f91eba9581bd509407 create mode 100644 txscript/data/taproot-ref/7b242c6392ed925c411f5a03c01a5b224498873d create mode 100644 txscript/data/taproot-ref/7b302c63a0c095634d5b99d885e31d50d348915f create mode 100644 txscript/data/taproot-ref/7b385bf3549519df825d01ede2e8d9864af0d4f1 create mode 100644 txscript/data/taproot-ref/7b8328e1cf64ee86aed185c42ef2d58842a86505 create mode 100644 txscript/data/taproot-ref/7b9f95b7241f7c9902e959452e13b67e26806ad6 create mode 100644 txscript/data/taproot-ref/7ba72ec40b0c475f5d75c1845b6a75ce8fa2c003 create mode 100644 txscript/data/taproot-ref/7bcb414301b9d095183f9b852a0c948309483542 create mode 100644 txscript/data/taproot-ref/7bd191b72e7ea5e8407c5a81557fb3489574834c create mode 100644 txscript/data/taproot-ref/7c0066094d3af7d6ae9649b1e0d8c4f65d29d5b7 create mode 100644 txscript/data/taproot-ref/7c3defc5ef17cddbacd31b76689e0f6d0737ac57 create mode 100644 txscript/data/taproot-ref/7c7017c2b46f27580791e590ff2536195830225d create mode 100644 txscript/data/taproot-ref/7c7b7ccbaea2f13ad6524f8a286a5a8e5de67e21 create mode 100644 txscript/data/taproot-ref/7c81f44f5bced662dae488456a190a2b5b68c852 create mode 100644 txscript/data/taproot-ref/7cc6f39aa5cdd7a9af8b06f6627638b3bb770f40 create mode 100644 txscript/data/taproot-ref/7cfcff79af9057d0133f2b5da206b608722bd025 create mode 100644 txscript/data/taproot-ref/7d568d459cf98a02f42d26cf7a40def28f45c07c create mode 100644 txscript/data/taproot-ref/7d77c20b635f8d363cafef80ce333359495fddeb create mode 100644 txscript/data/taproot-ref/7dbdb91634696f23cadac0af049ca2841cbf75df create mode 100644 txscript/data/taproot-ref/7dca132115921f6d0134e317bc0c5b2e5b97934d create mode 100644 txscript/data/taproot-ref/7dd14622cf7fe1695e710f01b45d90250043dea6 create mode 100644 txscript/data/taproot-ref/7ddf0e4fc007dcceddccc60c7634ce32af1c1782 create mode 100644 txscript/data/taproot-ref/7de80c1c4a6415b28404560b4e476f7ff798b292 create mode 100644 txscript/data/taproot-ref/7e165223d7af3c0a9b55423a23a84315b3549c34 create mode 100644 txscript/data/taproot-ref/7e2b8b5d88ab86a02660c9f930b1dc7bc915500f create mode 100644 txscript/data/taproot-ref/7e2f0de68af4544f103e74bd384b74b2e2f85241 create mode 100644 txscript/data/taproot-ref/7e4029c06ed03535d5f51420d860c7da16cc155e create mode 100644 txscript/data/taproot-ref/7e70e8a2a78ad2b7e350dc4a07651a5bf027cb57 create mode 100644 txscript/data/taproot-ref/7e874b33beab6c09e8cdbcdcf34c226d959f53a7 create mode 100644 txscript/data/taproot-ref/7e926dc258ef73747c6dee6961a01976f75e194f create mode 100644 txscript/data/taproot-ref/7e952aa0d4d919ea11291440bf1f5548858938d6 create mode 100644 txscript/data/taproot-ref/7e95b122591089fda778a2dbd434c55672c92346 create mode 100644 txscript/data/taproot-ref/7eaf9980118567289bdc91759abbffb031b64227 create mode 100644 txscript/data/taproot-ref/7eca413996ccecf266e5bf306d63db50903b1ec0 create mode 100644 txscript/data/taproot-ref/7eeec8eac2847cfc829b4f04a7732871fa5b33bb create mode 100644 txscript/data/taproot-ref/7f31dda7857641eb43ac8f245109af960b934c86 create mode 100644 txscript/data/taproot-ref/7f36ff093686c198384796967779e512b39b0067 create mode 100644 txscript/data/taproot-ref/7f37fc6f46dfd2056c23dce7388e996b2e007166 create mode 100644 txscript/data/taproot-ref/7f5fb097a29a27b116140b9366006e578d1139ce create mode 100644 txscript/data/taproot-ref/7f6b5c7e454d101b3d586c7653b251e1aaa8404d create mode 100644 txscript/data/taproot-ref/7f76a08aef5329137e1c80a8f4fc7245375849d9 create mode 100644 txscript/data/taproot-ref/7f7be6c8663be7951320cb6c651781e5583ed65e create mode 100644 txscript/data/taproot-ref/7f8f81d1bf5547aca3adaba322cccf59977c80b0 create mode 100644 txscript/data/taproot-ref/7f9d1a52ba029c7f6e88ff84575df1fcb1075619 create mode 100644 txscript/data/taproot-ref/7fc1bf414713fa9f80c252358021f9f97b15c792 create mode 100644 txscript/data/taproot-ref/7fdcc6c41ae23f27834e5e1303ac7e3a7a01c43f create mode 100644 txscript/data/taproot-ref/801315c10fe0fcc26c0c57bc8f631cd93596168d create mode 100644 txscript/data/taproot-ref/80333b40950b8f22b44ba7c383dc625b1b094df3 create mode 100644 txscript/data/taproot-ref/80376b2b822b9baaef72428ca022d2e8ad5fab95 create mode 100644 txscript/data/taproot-ref/803cd5f12d095d218780ad627b0b82b0bab86370 create mode 100644 txscript/data/taproot-ref/8046cd7645e89a0fda7d8f8378e8425fefabb6e8 create mode 100644 txscript/data/taproot-ref/804b90af698434a3596956677aba5a5f73dbaed0 create mode 100644 txscript/data/taproot-ref/808bb1522f5aa5de2dee150c5fe9b2240c76f14e create mode 100644 txscript/data/taproot-ref/809f182745ce2d04f2ed1126bbd41c71d290955e create mode 100644 txscript/data/taproot-ref/80b5c3a4f3efc732cfad5a798289e246619f8977 create mode 100644 txscript/data/taproot-ref/80b9b953d5d211827d5046ddef05778d9e6fe889 create mode 100644 txscript/data/taproot-ref/80ce5e7fb2b5a1cf0cf9bb4b9a786e4bf6735056 create mode 100644 txscript/data/taproot-ref/80d98df3c15079be160fd7897dc74ef9a9b4774b create mode 100644 txscript/data/taproot-ref/80dfc8a9fc0fe40ea7577dfd42a34b367905756e create mode 100644 txscript/data/taproot-ref/80ed8061d1dc94f53f2e897f7421f7e7109037ef create mode 100644 txscript/data/taproot-ref/8114bd4cff1787b06e5836915e62486478f693d1 create mode 100644 txscript/data/taproot-ref/8114ee0d2c07fd933798fcf7febf9e08b6cf1043 create mode 100644 txscript/data/taproot-ref/813b01314937089f22d1d64ac7030c5da92ac36d create mode 100644 txscript/data/taproot-ref/814755d13f451119bbd6e341778fcca05d023f99 create mode 100644 txscript/data/taproot-ref/8152fa388ef907459fca58c6382e7cf481e8b03f create mode 100644 txscript/data/taproot-ref/816316a3b73af9b70141fff8b2deda8269d38d34 create mode 100644 txscript/data/taproot-ref/81639ecf4a65a0d2972d186cbca46aa48c408a2b create mode 100644 txscript/data/taproot-ref/817d2dc89f753f1b403cbbdd6c078eeee50563d1 create mode 100644 txscript/data/taproot-ref/81873f88c2fbdb0a58e15e3492b63cb1eeebd61d create mode 100644 txscript/data/taproot-ref/818a1e4250991ce3f414e0f7215308cf2f23f7fd create mode 100644 txscript/data/taproot-ref/82050e725b7ee8e6090dcb98775499dc19017c4d create mode 100644 txscript/data/taproot-ref/826b8362320fe6f06ab5a2f4b4fbf5c94448170f create mode 100644 txscript/data/taproot-ref/8283d17b50ed5619f147c5b35a8f94626b7d5b26 create mode 100644 txscript/data/taproot-ref/829c3ad6c8ab04d87634c91b6fcd79faa92656fb create mode 100644 txscript/data/taproot-ref/82a84993b98a8fb62799914dc21be4be700e7b5d create mode 100644 txscript/data/taproot-ref/82e6db8a76fd387b0eb64cb1d7bf968ef761fb96 create mode 100644 txscript/data/taproot-ref/82ec131b824b4c3f3757e1edd238735d0656fc37 create mode 100644 txscript/data/taproot-ref/8336cc9fb782ee91ec2fca64631271cf0078de20 create mode 100644 txscript/data/taproot-ref/833a14196d27bc959251f1d19b9e4e6829d267d5 create mode 100644 txscript/data/taproot-ref/8366f34c8cc56c4971befa8d4905f0f436bf6cda create mode 100644 txscript/data/taproot-ref/8393e8cc899fa71d1c638c5cb8eea55c40342700 create mode 100644 txscript/data/taproot-ref/83945bfa970aa433de420b7ac4f4efcc297ec972 create mode 100644 txscript/data/taproot-ref/83970d72a6907256d4feab8e061182642c3d4b24 create mode 100644 txscript/data/taproot-ref/83b00e365af084f70ba64981a783c5ec81c0e650 create mode 100644 txscript/data/taproot-ref/8434ef7375003e0e049d9248cca04a7d89a51736 create mode 100644 txscript/data/taproot-ref/8442ffd276255dd9c5995c977f30f700234f866f create mode 100644 txscript/data/taproot-ref/8462f1863bdba9f38df24dbeb39d9be31a8b3d93 create mode 100644 txscript/data/taproot-ref/8478b1cc13202df27bd080e55410e541629423e8 create mode 100644 txscript/data/taproot-ref/847ca904186295e8fd47a4e29885615907cb992e create mode 100644 txscript/data/taproot-ref/847d38e6322523b12583cde1ac03aa9cb6c11494 create mode 100644 txscript/data/taproot-ref/8485b7daa7b9582b7257e4ad6aa767ad9b2c7173 create mode 100644 txscript/data/taproot-ref/848ef68b2028c2d1d2c774427baef8811e6973c6 create mode 100644 txscript/data/taproot-ref/84b78b9ad073a948405f0b7ab62f9f69118ba8f0 create mode 100644 txscript/data/taproot-ref/84c54f3da6a5e6fab8e1f0e9e437a602b838b808 create mode 100644 txscript/data/taproot-ref/84d1cf1063766590aee538d2b55b7bd3698c0de7 create mode 100644 txscript/data/taproot-ref/84dce9fa92c533d455e0c1f97179960220f0a855 create mode 100644 txscript/data/taproot-ref/84f74ecd7dcd980cbe8f5c5df3e9de9eb9e2198b create mode 100644 txscript/data/taproot-ref/855137df77e723cfc86499f4fdb99f284ce7dfb2 create mode 100644 txscript/data/taproot-ref/857a099c2b46ccc02b866b3d0c0eb37858af7f6b create mode 100644 txscript/data/taproot-ref/857c4d2b4cbe976e614059e4d9eeb613c69a523b create mode 100644 txscript/data/taproot-ref/858fcb46fd11dfff505511ab32c43de93cb923ab create mode 100644 txscript/data/taproot-ref/8592c80000cf304bf52753ab309ceb04e2652ec5 create mode 100644 txscript/data/taproot-ref/859bf525139277f5088a3ce814f120ba25928ba7 create mode 100644 txscript/data/taproot-ref/85c3b1c5bc8469eb9f51ee2b19c514d2dcc9d4e5 create mode 100644 txscript/data/taproot-ref/85c9ddc38fbb85bd175bf3ac00a626752b964461 create mode 100644 txscript/data/taproot-ref/85cd37fe2c7301fdbdedfe4eee2559a27232c9e1 create mode 100644 txscript/data/taproot-ref/85db7ff2b922cfebbf367553f67005a39f7c7481 create mode 100644 txscript/data/taproot-ref/85f392952d2f71a976ea2c35e174e534ade34805 create mode 100644 txscript/data/taproot-ref/863c74afe345aa2460edf06abd9aa101ade521bf create mode 100644 txscript/data/taproot-ref/8641c37d6051843e6ca2af00b13ec220650722d5 create mode 100644 txscript/data/taproot-ref/86808a5b2f495881fed3418379a96faec86f72a3 create mode 100644 txscript/data/taproot-ref/869a1712bd79edfc9d95461a25217f1b4b203e29 create mode 100644 txscript/data/taproot-ref/869e9e9fd462fca683f8b432da94616198c8eb41 create mode 100644 txscript/data/taproot-ref/86e9313b4a88cc4785b502796f36bd97f1174856 create mode 100644 txscript/data/taproot-ref/871647145b6c79309648164fe2e9294d7ba23b0b create mode 100644 txscript/data/taproot-ref/871b6052e7f9a98779e47518bd5f8bf607a0e268 create mode 100644 txscript/data/taproot-ref/87360adcbd85bcb0816fa5f993fc9a5e14182074 create mode 100644 txscript/data/taproot-ref/874116a3fba0e5b88378c9825e5b2cd8fe9707c6 create mode 100644 txscript/data/taproot-ref/874498dbd2d21fb6b01edf60814088feb89dc02e create mode 100644 txscript/data/taproot-ref/874b8f129a3df7a4c057a29c6d71bfa99137ed88 create mode 100644 txscript/data/taproot-ref/874c302461e364f71a8f6570728f98611a5c96ce create mode 100644 txscript/data/taproot-ref/8753f414b84b9ccd0c62553961f88f7c0264c379 create mode 100644 txscript/data/taproot-ref/8768655b2d8b6e0cca092c104735354aee0c9b0a create mode 100644 txscript/data/taproot-ref/87d794de1dead52b89760fa5e136596c5b59bc40 create mode 100644 txscript/data/taproot-ref/87dcc971a3beea2e91a4d7e9643a5539ff94d52f create mode 100644 txscript/data/taproot-ref/87e1e382d129600c7e7f842f983fa6e87de06c9c create mode 100644 txscript/data/taproot-ref/87f0c2e540270b3692ef13bc2b91234c893bea37 create mode 100644 txscript/data/taproot-ref/87f8602bd7dcfb5af1052f424e7403550ff631de create mode 100644 txscript/data/taproot-ref/87ffa0846cd9a6bebb41a9d3d719ba376c69285f create mode 100644 txscript/data/taproot-ref/880f03671efb6dcc3f3fdaae9491625f46f6e4ac create mode 100644 txscript/data/taproot-ref/8829fdc647553393e0d223a098067bdf44dd2c3e create mode 100644 txscript/data/taproot-ref/882c32949367f4f504b543399fa13b4f4118344d create mode 100644 txscript/data/taproot-ref/884b9c73958e305260b7aa5b9969660166f550c3 create mode 100644 txscript/data/taproot-ref/885db56c9eb82324c5a0f7e7aebd3d215505a5d3 create mode 100644 txscript/data/taproot-ref/88684adb319365b522f644e785033cac77380e06 create mode 100644 txscript/data/taproot-ref/88797c1357072ec5f6d7a77f8f554fdf14935742 create mode 100644 txscript/data/taproot-ref/88d3c033edc04d341651610ce654caab89f0c589 create mode 100644 txscript/data/taproot-ref/88e2041ce84c5a5fd2b056669856844691b520a5 create mode 100644 txscript/data/taproot-ref/88e2266275388545e1f8f54b8fdbe89bbac43274 create mode 100644 txscript/data/taproot-ref/88ec99f421c2381e497fe2fc13b4f6dd8e8786d1 create mode 100644 txscript/data/taproot-ref/88f24d3d0ee361f07b6a968b39726f1326ec9166 create mode 100644 txscript/data/taproot-ref/89063488083093835287b1f9c18b2a7944664176 create mode 100644 txscript/data/taproot-ref/892cc3023c1245c75dd88475a0e49fe4d5063dd9 create mode 100644 txscript/data/taproot-ref/8951f7b39335a2e501908ed76548372ea5979b19 create mode 100644 txscript/data/taproot-ref/895da8e67657010ab55eddf2b5e50156498f59c1 create mode 100644 txscript/data/taproot-ref/89843a3d7b0d8895dac3541e10e30e0400dc0f5e create mode 100644 txscript/data/taproot-ref/899da8e446fd56d043e8d9fbd5821c09500c8654 create mode 100644 txscript/data/taproot-ref/89c130024a3230c8800c10efba7110244146ea67 create mode 100644 txscript/data/taproot-ref/89d3b93983fbc2ea121d1407d7944b74f44c67ae create mode 100644 txscript/data/taproot-ref/89db7a1ad6220b1635de9734c32a76ab69bb70e3 create mode 100644 txscript/data/taproot-ref/89df1562d15e81161f4c47827c0802d44a116dcd create mode 100644 txscript/data/taproot-ref/89e008ea516ef46108ee4b85055e4cba034e75c2 create mode 100644 txscript/data/taproot-ref/89fa19afc7b932f3749a095009d1bf1c6162c607 create mode 100644 txscript/data/taproot-ref/8a0a41ec1bffbaf105b7b5b3784d680d00446960 create mode 100644 txscript/data/taproot-ref/8a0ad7fc3cf79a721233622b6ae7a4bfc52c228a create mode 100644 txscript/data/taproot-ref/8a2775fc1b4fdf627698087dbc89fc1a3b0943be create mode 100644 txscript/data/taproot-ref/8a289fe11f09a8013015d4bdd383c4d26de1f483 create mode 100644 txscript/data/taproot-ref/8a29d68c4034560207bd08a36c47e26953bebe3f create mode 100644 txscript/data/taproot-ref/8a3477e0575b2a93269f750c0395201cd0f19a37 create mode 100644 txscript/data/taproot-ref/8a3c9306c70ceb610d6f1f738df6679eabff4238 create mode 100644 txscript/data/taproot-ref/8a52da0771f3d868955501e901d2540538f4d521 create mode 100644 txscript/data/taproot-ref/8a7bd56f4854fd39ca2b9dac03cf4e4f92a1b93d create mode 100644 txscript/data/taproot-ref/8a8928f98f7dd800744cfcdbefeff96b97543b76 create mode 100644 txscript/data/taproot-ref/8a95cc474b746e69625f0fe8c262c07a37a82a7d create mode 100644 txscript/data/taproot-ref/8ab6f611cd721ca128cb8f5ea3078c1b431d5704 create mode 100644 txscript/data/taproot-ref/8abdd04f7c724f0a762d03fb6fb80e698280ae9c create mode 100644 txscript/data/taproot-ref/8b08333db48411d829619458a66585a39efcbb11 create mode 100644 txscript/data/taproot-ref/8b2cadafb5c90652623fe20f1da4fa65454b1764 create mode 100644 txscript/data/taproot-ref/8b379a5db43a90e8d77da62355f3ac86f95b1422 create mode 100644 txscript/data/taproot-ref/8b436810adfe76e9f0a84f1a2382284cefc4128a create mode 100644 txscript/data/taproot-ref/8b4a8862bbb6306cc7b4473bba476bcaf6383aee create mode 100644 txscript/data/taproot-ref/8b5c3d67f71726b53372b58a37b41fce4a30a5ac create mode 100644 txscript/data/taproot-ref/8b5c7dbd04ac3065bf6c8164f3068ebc910ddc30 create mode 100644 txscript/data/taproot-ref/8b714927de7515d6467407861bea2d1b6816f769 create mode 100644 txscript/data/taproot-ref/8b7781da37cae546b0800cc96db74dfb1988fa5d create mode 100644 txscript/data/taproot-ref/8b8235aeb63d5111ff81b6406893e2c114f3d163 create mode 100644 txscript/data/taproot-ref/8b926866858180ba6c9e1a87ace930fdf129b59b create mode 100644 txscript/data/taproot-ref/8b9de640b20beae0f41a3d88dacf8e7c8c00e4a9 create mode 100644 txscript/data/taproot-ref/8babec8da5a26469095793b097811d07f256a5e9 create mode 100644 txscript/data/taproot-ref/8c4cbb21d02e5d466fb2539022255760626149f2 create mode 100644 txscript/data/taproot-ref/8c504464b5b4239a47fd8d4b185c3e0e1b6c1af0 create mode 100644 txscript/data/taproot-ref/8c716ab740c917b4df170efbc22b4e47873d8e3d create mode 100644 txscript/data/taproot-ref/8c7dc16b0e4c9ef242cc7ca7264ea3a4cb62a9bd create mode 100644 txscript/data/taproot-ref/8c87d28e9f82d8cb2da362853cbfd7f6ed73becd create mode 100644 txscript/data/taproot-ref/8cac7b8d77d23a0085a03a673ee2021520fbabea create mode 100644 txscript/data/taproot-ref/8cd544fbd46d49e76648955888fc3047bf5e24bc create mode 100644 txscript/data/taproot-ref/8cde25f4590bc7a0cb88896228ad8d28ecb9641a create mode 100644 txscript/data/taproot-ref/8cf7c389a03e6d9d8cdd4dc0ee8615f54cccd395 create mode 100644 txscript/data/taproot-ref/8cfbcd30e59e458884ca65687215ef8a39fa420b create mode 100644 txscript/data/taproot-ref/8d2e1d4e20c8a37b8483b0636a53106414b2e098 create mode 100644 txscript/data/taproot-ref/8d84c17e2d2a5f1b483ec417d4084cff8a83bd8b create mode 100644 txscript/data/taproot-ref/8dad5eca9780e98722de60bdf4209e99730b7ce0 create mode 100644 txscript/data/taproot-ref/8db878b9f4d8758552ba375e70b1c319d8ca0248 create mode 100644 txscript/data/taproot-ref/8dceab2924460f1a418835afa3ff5d4bde00914a create mode 100644 txscript/data/taproot-ref/8dd1413b2a30d480170c4918b00b9b7abe7ae2c6 create mode 100644 txscript/data/taproot-ref/8de4d54ede6f78c61866173f8b1096d7f5e3f478 create mode 100644 txscript/data/taproot-ref/8e0a71d16611cdac906bb4dece9fbf87d1a0fc8b create mode 100644 txscript/data/taproot-ref/8e1a1f4379046e33058d6b3df5184a181b98a2b5 create mode 100644 txscript/data/taproot-ref/8e38afa0e7c920bbb4aec155f70d1940028204ee create mode 100644 txscript/data/taproot-ref/8ea1e2b4445b668065a333641c17f3c6038f2f27 create mode 100644 txscript/data/taproot-ref/8eb143cfc057b1ffa8e90069a1d1ff91a90ac794 create mode 100644 txscript/data/taproot-ref/8ebc6173196e2c3ad4ea6d665b4893fd67690d70 create mode 100644 txscript/data/taproot-ref/8ee6b6a7957bf8ed03aa4b95dbc232e5ba56ead5 create mode 100644 txscript/data/taproot-ref/8ef96afc00349b4248ec31f4755d1020b7fdda03 create mode 100644 txscript/data/taproot-ref/8f07475a5f9d43a948b3b96452aea50918e4b9b7 create mode 100644 txscript/data/taproot-ref/8f0862b153c849b8d035fa189f7ec654f8b3e862 create mode 100644 txscript/data/taproot-ref/8f0aa9d861c14d5c32d60092ba04c2253666c4c5 create mode 100644 txscript/data/taproot-ref/8f4ba01ca74a466747b89a116a26047e58536ef9 create mode 100644 txscript/data/taproot-ref/8f56d7ddb9c736b9c89113453c379ec0a21341f9 create mode 100644 txscript/data/taproot-ref/8f7ed4f89eb5a042d9a19a78e61c47e5c984a9fa create mode 100644 txscript/data/taproot-ref/8f94c8c6a37bcc91d7a39416023f9d78ff08129a create mode 100644 txscript/data/taproot-ref/8fc0dcb82f3f88e6c20e123adddbce9afa79dd7e create mode 100644 txscript/data/taproot-ref/901261518c53841cdeb55041f748183f25fbdb6f create mode 100644 txscript/data/taproot-ref/9014cd1a175ea66532264c818ac4692ed805357f create mode 100644 txscript/data/taproot-ref/902fc67f6a0dd7c17809ac0002972da218f32b8c create mode 100644 txscript/data/taproot-ref/90439abb1bce7df95926ac69fbe35e9a75849704 create mode 100644 txscript/data/taproot-ref/906de10a0641d6cd4c0dd422fe885c2f9691128a create mode 100644 txscript/data/taproot-ref/9076f59736d1a417df0e4e53465ba7f80da49859 create mode 100644 txscript/data/taproot-ref/909f04b9af20cf2cb275ec1cf722f9a40b234fdf create mode 100644 txscript/data/taproot-ref/90b75e22907115340a987929a776f6f3bea1d9b5 create mode 100644 txscript/data/taproot-ref/90cddd59c8cf3bcac6b2fb6df29c9362c3a69855 create mode 100644 txscript/data/taproot-ref/90e012902ea03831fe652fb98c2f284c57217115 create mode 100644 txscript/data/taproot-ref/910480b0cfba5cfd886687f687f8a73d081c0b15 create mode 100644 txscript/data/taproot-ref/9143eec00e7c0dcba52a44c54c7fea4ca90ac9db create mode 100644 txscript/data/taproot-ref/914d626c074a269b3a9d1451d77761c9b6e8db28 create mode 100644 txscript/data/taproot-ref/91b3598a2ceedd0e45722fd9287672a13bf221e1 create mode 100644 txscript/data/taproot-ref/91deadec3dc6c425ddc903b195066184526341bb create mode 100644 txscript/data/taproot-ref/91eb11de4a9b1c364da7e342da879d0915930da6 create mode 100644 txscript/data/taproot-ref/91ed8c8f6952e9dfd27a3d45454432bd4886c8d1 create mode 100644 txscript/data/taproot-ref/91f11c0a3851e5a1b473cfd412ff28fcd7903c39 create mode 100644 txscript/data/taproot-ref/91f5456cb58ea9371b0fc9864e05767c7a8ee7e4 create mode 100644 txscript/data/taproot-ref/921d11cbd9a6ba01c1bbfcc40c1205f6ef275acb create mode 100644 txscript/data/taproot-ref/9238fc472251c9a3c817ab6cc5ea4e97c3d05410 create mode 100644 txscript/data/taproot-ref/9250a8a685e1f24b96edf202f1204a332bcb0ba3 create mode 100644 txscript/data/taproot-ref/9266cfa0d3adb02eaa15bc09db296fa853d6deed create mode 100644 txscript/data/taproot-ref/92848420c5779bd1c6d954bfc933383296c73c07 create mode 100644 txscript/data/taproot-ref/92886f1a44cabcf2e2c4dcef68ee37caa458c47b create mode 100644 txscript/data/taproot-ref/9289711f9cf1406a577387a27b8bd4930e29fd38 create mode 100644 txscript/data/taproot-ref/92bddaa4b62dfceaf980ba7a89bb0cc57e8fc52c create mode 100644 txscript/data/taproot-ref/92c132ca1fe8044c1317c18feaca645a54713ffb create mode 100644 txscript/data/taproot-ref/92e0a98f523af81899be75f9371608fd9948b337 create mode 100644 txscript/data/taproot-ref/9309be25161f4e02117ef32870ded9650d0e4f7a create mode 100644 txscript/data/taproot-ref/930d453e2c53ce2b64bd0f4b950552f988bdbc20 create mode 100644 txscript/data/taproot-ref/934c8ad33d4e9c5c13372bc93bf26cf3107839a5 create mode 100644 txscript/data/taproot-ref/935a6ed5b994d0bfdaf42bf6dd6fef4ccdbfee4a create mode 100644 txscript/data/taproot-ref/935dfd118a575d599a75b00db37955c92ef6471b create mode 100644 txscript/data/taproot-ref/936af0357943e249bd7e428753fc79b7870c4f96 create mode 100644 txscript/data/taproot-ref/937fe4be2d5689c59d7c617e65996d41cfafdef5 create mode 100644 txscript/data/taproot-ref/938f94084baf3b93faae268cc5e094df56f01f7a create mode 100644 txscript/data/taproot-ref/939a2a924292c7f549cc8f8be939826a3de6b820 create mode 100644 txscript/data/taproot-ref/93aa13626c3895c12d82d3763e8e916a16a4fd52 create mode 100644 txscript/data/taproot-ref/93c0123f1118e26a15aba5739d9f8db784f21efa create mode 100644 txscript/data/taproot-ref/93c6f793e89f2bbe200dcd083729e8e2af40c2f2 create mode 100644 txscript/data/taproot-ref/93c799f74d4e3a3b8dafa975cb2453af687a8872 create mode 100644 txscript/data/taproot-ref/93cedb385de6371ec85a3086d53c93ba0e1c6926 create mode 100644 txscript/data/taproot-ref/93d43e9d7f08eba5daa4d394a95703498c7e2139 create mode 100644 txscript/data/taproot-ref/93db6d7b5e262a03c9f6ccf71ef4e8de7acf6fb6 create mode 100644 txscript/data/taproot-ref/940254cd6f8f945bc5f1edcef83ba2afc7edfdef create mode 100644 txscript/data/taproot-ref/94136714739c4978945621f669ecaf025dff07f8 create mode 100644 txscript/data/taproot-ref/942302c74767926cf73be9bc6753fc422157855d create mode 100644 txscript/data/taproot-ref/94232b6796277453192019999be8b0fce849e3c3 create mode 100644 txscript/data/taproot-ref/944304c86610b738afbff55026632249b735f401 create mode 100644 txscript/data/taproot-ref/9447c6b9ffec17e55cc04961dec9cc9affec21dc create mode 100644 txscript/data/taproot-ref/94862fb03e48c18301c8d883c0b89da06351e369 create mode 100644 txscript/data/taproot-ref/948c81d5b83d1cdb3423d9e81a61becd8bf2a7bf create mode 100644 txscript/data/taproot-ref/9499a40681e896adc4c45047502a358ed7cf1237 create mode 100644 txscript/data/taproot-ref/94a9f7a609640945c820b281c9b05d992b0ac4c2 create mode 100644 txscript/data/taproot-ref/94f8b89ee92aa4c7d64eb59fa7c8811ee71c5de1 create mode 100644 txscript/data/taproot-ref/9506e2eb82ae6c5a245403a82c8c36c49e7dd19a create mode 100644 txscript/data/taproot-ref/9512c13d6e0d292adb68e6b0ed8f466ba396e30a create mode 100644 txscript/data/taproot-ref/95285e78757c883cf8644bfcd7749e4b08cb59c4 create mode 100644 txscript/data/taproot-ref/9528c094e6823258fc43686ee4fdc5d619021a94 create mode 100644 txscript/data/taproot-ref/95418ddbd4a17ea011fd39c57c1e4389b711dd7e create mode 100644 txscript/data/taproot-ref/954e0aead2f1448d168416547f795dc8baa7eb10 create mode 100644 txscript/data/taproot-ref/958966b97201943c2831502b3f5bbcccc2d1b2f3 create mode 100644 txscript/data/taproot-ref/95957430f0fd0b98963bf7080efffaa2efc45563 create mode 100644 txscript/data/taproot-ref/959b1c7bccd9efde5105f9deaa24262e6171f127 create mode 100644 txscript/data/taproot-ref/959ef5c1dfba6621fcd8365261b27885ba0eedfb create mode 100644 txscript/data/taproot-ref/95a04b0c50967b773d91751126d1ffe273287347 create mode 100644 txscript/data/taproot-ref/95afe9b1e8db35a5924aabbffc0a617e6862a1d3 create mode 100644 txscript/data/taproot-ref/95b65f78191ad63ba2149f216ad4b1f3a404ee82 create mode 100644 txscript/data/taproot-ref/95bc7b2db1ac665317576e24031e551189f4efe7 create mode 100644 txscript/data/taproot-ref/95da825d4132e9de80a280c89ba82724643b74f2 create mode 100644 txscript/data/taproot-ref/95e7d15b24fad0c2e4780004a45b735813a6d457 create mode 100644 txscript/data/taproot-ref/96089d3e37c85cc3e1727b58cbcd209157529a71 create mode 100644 txscript/data/taproot-ref/96197c6b417cdc946b9a34b57ac7c50feea0ada4 create mode 100644 txscript/data/taproot-ref/962bb09ab095bcd35f7f34055ed0fa8ae434af02 create mode 100644 txscript/data/taproot-ref/962d79802cab79d4bd0c5d840a5f94281465c290 create mode 100644 txscript/data/taproot-ref/966f41ea0609c64925ecaee5ba1af166ae43fdda create mode 100644 txscript/data/taproot-ref/96735cbde31cd1fbca452de029d3f77a7072dd87 create mode 100644 txscript/data/taproot-ref/967784fbda80e2586d2566b1d20422c209de8e3a create mode 100644 txscript/data/taproot-ref/968b512c074558ddde3b21c60e2886fd579c950b create mode 100644 txscript/data/taproot-ref/96a0422936b6ca5c4077e1e8fceea23c5dd146fe create mode 100644 txscript/data/taproot-ref/96aac36c65d79125e3ee07ec601f71c0c09b0cb2 create mode 100644 txscript/data/taproot-ref/96c1bbeb23affbc8ce9c5703062a448e21a42eeb create mode 100644 txscript/data/taproot-ref/96f5f4a5b64b8e8462a72eb1d259066fce9fbe2f create mode 100644 txscript/data/taproot-ref/9700352a9f17c39165256df2f2f7e4fa2ec9de61 create mode 100644 txscript/data/taproot-ref/9749e874bbbae2a0dce118ef7501ad135ea6cddc create mode 100644 txscript/data/taproot-ref/975509735c405d7f26b8bd4c00a32158c4f2911b create mode 100644 txscript/data/taproot-ref/976fab0e9af7ab44ebc738f13b377d23ab763465 create mode 100644 txscript/data/taproot-ref/97703896dfbc748c76753b9dc807252baa7d17ab create mode 100644 txscript/data/taproot-ref/978c3a312999502111000de7dfe47b35516164f4 create mode 100644 txscript/data/taproot-ref/97aba204ef02b37a3627221d61d8e55c8a4e1c89 create mode 100644 txscript/data/taproot-ref/97cc85297ae928c35b606a80f058ab18ea5187d1 create mode 100644 txscript/data/taproot-ref/97f61b6d98c9ffe5ca701f864969608db86c81fe create mode 100644 txscript/data/taproot-ref/982a43466eb400711eaa92486fd3a9b22d4ed22c create mode 100644 txscript/data/taproot-ref/984d407c9a0781d661b22c64ad915a555d3bf64d create mode 100644 txscript/data/taproot-ref/98500d46f789f6e67f2c3e2f6af290db2fc124cd create mode 100644 txscript/data/taproot-ref/9886f8415dd6095f89ff7e519af7516c9b7dc352 create mode 100644 txscript/data/taproot-ref/98bd202ec6667081b4a70e2f6b929af634ac6d68 create mode 100644 txscript/data/taproot-ref/98c6e09cd9cdc3967e01f4842102de38d4cda1a9 create mode 100644 txscript/data/taproot-ref/98c83bcdb5956bb94639dc29099871c76564d6bf create mode 100644 txscript/data/taproot-ref/98d122b2f88e6c5326c77b7a643d054909d0e33a create mode 100644 txscript/data/taproot-ref/98d39d50572a07ce2b34b997b11f0801efe034d0 create mode 100644 txscript/data/taproot-ref/98e6557609649d2edfa5303dc85da6929b3e46cb create mode 100644 txscript/data/taproot-ref/990480b357aeb905cfea6ff646718d101978e980 create mode 100644 txscript/data/taproot-ref/990924cc189ea41b110bc4dd575460c49374f23d create mode 100644 txscript/data/taproot-ref/99621f82461534b8907da50ed4c7020620244c46 create mode 100644 txscript/data/taproot-ref/996fd99ab96f9643d5e5713a831995b17e7a3d6a create mode 100644 txscript/data/taproot-ref/99d1d11e7c7797862b2f093aecd2482708213a46 create mode 100644 txscript/data/taproot-ref/99dec7b1a061c754594c315d70173856ee38ca53 create mode 100644 txscript/data/taproot-ref/99e6e3dc68bf0e9973d9cda82f1300e98c4d58a0 create mode 100644 txscript/data/taproot-ref/99e8319b516c140aa7badd1e9ef03d1ff1c3bee0 create mode 100644 txscript/data/taproot-ref/9a11c2fda7b9c43e2b7720bd72c00e2503c9dd88 create mode 100644 txscript/data/taproot-ref/9a309f12e7243094d23099f5433d19602252797b create mode 100644 txscript/data/taproot-ref/9a89b6f3139174829b27ab6ead21acbf001ee2be create mode 100644 txscript/data/taproot-ref/9abdf13e2635797e12d342e2dfb31a9c80d0edd9 create mode 100644 txscript/data/taproot-ref/9adf5a63b8158c84d6bc327d0b1ac1b5964a3ac4 create mode 100644 txscript/data/taproot-ref/9ae58507a65058e0fe31de871c7a34bab5415ae9 create mode 100644 txscript/data/taproot-ref/9aece0f0260af3664b7ed391226bcf127e9fd163 create mode 100644 txscript/data/taproot-ref/9af8af68c2f18bca7d94dd8b48ce8692c89ffb04 create mode 100644 txscript/data/taproot-ref/9afe6dae1af7cdc07ef615de0c3d2ebdd4f68c15 create mode 100644 txscript/data/taproot-ref/9b42d222b18945ea05823e8a6dbcb0d54a364700 create mode 100644 txscript/data/taproot-ref/9b4d35c34d31ab2b9e6a0becef710c9b00ec976c create mode 100644 txscript/data/taproot-ref/9b51c6d0b56ce78a3dd7924a0c74626beea4b529 create mode 100644 txscript/data/taproot-ref/9b62911307d4c57e65b67719613737ad5d45433f create mode 100644 txscript/data/taproot-ref/9ba6a6cf62c5826ffc6fcd084371c29d51f194c7 create mode 100644 txscript/data/taproot-ref/9baed9539fb0ad3446fb36b9804e562244aec18f create mode 100644 txscript/data/taproot-ref/9bb0ba96392a718e713162631e2036c2a0708ce2 create mode 100644 txscript/data/taproot-ref/9bb98651acde18815c952146548c472023a22072 create mode 100644 txscript/data/taproot-ref/9bbe3f1ede4caaf74b619e6e82cb6b6f779f366d create mode 100644 txscript/data/taproot-ref/9beb9170ecc8bc4e97002efea295cafc58d55688 create mode 100644 txscript/data/taproot-ref/9c1a6591aef6efd4346aa9f750f87940a9783107 create mode 100644 txscript/data/taproot-ref/9c3a7896381a924c326a82a884be65e632a9f190 create mode 100644 txscript/data/taproot-ref/9ce105ac118fb5187b993ba8e83d9b199dc86fe9 create mode 100644 txscript/data/taproot-ref/9ce973c4df052f54b32f61eb27b74cff377e6752 create mode 100644 txscript/data/taproot-ref/9cf29382585d7d87b68e19e5244cd47ddedf35c0 create mode 100644 txscript/data/taproot-ref/9cffb02f79fc72e41c0ac0b800b862fb39b0a7fd create mode 100644 txscript/data/taproot-ref/9d13b7a6b273e9242c1092d047290e60291087da create mode 100644 txscript/data/taproot-ref/9d2325335a737991316f3231a676fb415c357be8 create mode 100644 txscript/data/taproot-ref/9d3dab224014b620dde2b56cee3fec23463cb909 create mode 100644 txscript/data/taproot-ref/9d6211da7d3f0bda14d5067af27a1abd46dd187d create mode 100644 txscript/data/taproot-ref/9d6647e7af1e10de1b3c608d829400e5663b3d7e create mode 100644 txscript/data/taproot-ref/9d86f6cf43b5947de7d50f80fec0483a9072ee0a create mode 100644 txscript/data/taproot-ref/9d8bf71616bca5ac31e24117c80dad52352d5c2a create mode 100644 txscript/data/taproot-ref/9da24604599fa08b01181b48265429ebf1cb213a create mode 100644 txscript/data/taproot-ref/9db297bad5b8a7a06f76713a5b05cdf2148f3b19 create mode 100644 txscript/data/taproot-ref/9dc1141da1d44addec511e26f89d5046f97da2c6 create mode 100644 txscript/data/taproot-ref/9de0c2afad49fa532a8fea5e4dad68a5f1ab8a22 create mode 100644 txscript/data/taproot-ref/9de4c3db0a099c27c523988b4b750ce3ee2c0ffc create mode 100644 txscript/data/taproot-ref/9e080c9060b0017ebfc6f81bd854014a8fc88ee8 create mode 100644 txscript/data/taproot-ref/9e0885e261051e23c61d7b6859e9c25f16f9aa73 create mode 100644 txscript/data/taproot-ref/9e533595a0cd03757f4ce00ca1a54a38453f6274 create mode 100644 txscript/data/taproot-ref/9e7cd3ed8c99ea2f99c6c55da41e1a2e4c56fb9b create mode 100644 txscript/data/taproot-ref/9e94137b564120169fc22f85678cc20df3a1128c create mode 100644 txscript/data/taproot-ref/9ea50ae0758462d0e77fe1397a5af6f83ad15f39 create mode 100644 txscript/data/taproot-ref/9eafe1e70dda380dee958b8ae1138ab758f76857 create mode 100644 txscript/data/taproot-ref/9ee645ca92c85ae4515e7e01d35579bbc6cb046f create mode 100644 txscript/data/taproot-ref/9efceb8b8d6841f20ca0f194b19427087f5a97ea create mode 100644 txscript/data/taproot-ref/9f0427c58e85128c73cd97a9ba41519871d70331 create mode 100644 txscript/data/taproot-ref/9f07a530e3bc65a6d0a8da0a8ad697b5dc9ab202 create mode 100644 txscript/data/taproot-ref/9f0aaa42e73656b0fce8443aea84266d564470e9 create mode 100644 txscript/data/taproot-ref/9f1fe443098130f838ce7d5c1460cdc0f13bb12e create mode 100644 txscript/data/taproot-ref/9f282d2e013696b3d63d9269bf869f906bd8cef4 create mode 100644 txscript/data/taproot-ref/9f78e819952e56d7b1961320d611fdc489b34e51 create mode 100644 txscript/data/taproot-ref/9f9bfc59905231b990a2d55faaa21a4cf26c8781 create mode 100644 txscript/data/taproot-ref/9fd2c2accbc395448a7b5d7d8bcafd190ce329a7 create mode 100644 txscript/data/taproot-ref/9fda11dcb9654da892e82b6566c4aeab962c8278 create mode 100644 txscript/data/taproot-ref/9fe5d577717a9a11e4740f29f231fa15b9f4d01c create mode 100644 txscript/data/taproot-ref/a01b0232919914b0a33ff87262f8ba59543b0ab6 create mode 100644 txscript/data/taproot-ref/a027f0c1c564bf78407eed47f2a9f03c60eadc02 create mode 100644 txscript/data/taproot-ref/a0482c5ebc234aebacf836bed890b373827b5958 create mode 100644 txscript/data/taproot-ref/a04e38678141417445359665f17e2c444cc55835 create mode 100644 txscript/data/taproot-ref/a05131b921bd9d6b4ea47f249e51ee98efc05f54 create mode 100644 txscript/data/taproot-ref/a080874cf108744cedfbb712de9629eed229ec49 create mode 100644 txscript/data/taproot-ref/a086f46eaeca09d3649d592dc5a55044d8de1f41 create mode 100644 txscript/data/taproot-ref/a0951cc6042b25d64914d945c4e3758a0407ea87 create mode 100644 txscript/data/taproot-ref/a0c092d70e81d7131ac1cb03d9ac8db9d2c0709b create mode 100644 txscript/data/taproot-ref/a0d64b88f7e1a35f28c08292725d25214520f7a6 create mode 100644 txscript/data/taproot-ref/a1258cbda9cc624bb9f238882cc84253a1dc87c2 create mode 100644 txscript/data/taproot-ref/a1430a0798548b8c620d89157e6f2a54d9f94f2e create mode 100644 txscript/data/taproot-ref/a16835f468084695f51026fc26ce3f842fc97714 create mode 100644 txscript/data/taproot-ref/a17272e8d29e6c955e3b27761ff0e3908e202ff1 create mode 100644 txscript/data/taproot-ref/a175484c1508738494b7c85ab928bb65c4a07f42 create mode 100644 txscript/data/taproot-ref/a17a5140033f84e309aac8415b2a580b4050203c create mode 100644 txscript/data/taproot-ref/a1b572d1fe5a9c9111033297ae5ff70014c256ce create mode 100644 txscript/data/taproot-ref/a1e666afd74df95cb5c06318730dff9116d6a22f create mode 100644 txscript/data/taproot-ref/a1e97b7bd972796aecfd4b83180776a015f64a8e create mode 100644 txscript/data/taproot-ref/a2124d0d2b17ee1f1e0998338eea25cffadf437c create mode 100644 txscript/data/taproot-ref/a2135bcd7d491b07a72fbd501a3b0be1b9f3bdc2 create mode 100644 txscript/data/taproot-ref/a21f2d7b6393cda8bcff8df7034062e8925f6377 create mode 100644 txscript/data/taproot-ref/a2452fe77f45ef6a612ce676a6ad9d9002b9331e create mode 100644 txscript/data/taproot-ref/a25b4431040ecd4aca97dad2844cf0080a40800b create mode 100644 txscript/data/taproot-ref/a26f67d81684b9007a2109269de4afe49d23f938 create mode 100644 txscript/data/taproot-ref/a293d31bc0cff7b14f873a325579ef283c8e2068 create mode 100644 txscript/data/taproot-ref/a2a3d1e6a386b04424a390d174bdd394f0b88602 create mode 100644 txscript/data/taproot-ref/a2ad73830bfcdf027adbf16721e9d3b54303b060 create mode 100644 txscript/data/taproot-ref/a2c43c8aa3d41b7eab2ae20fb1f9e973802d902e create mode 100644 txscript/data/taproot-ref/a2c7ad1b00fd60ced001c83967d4fb945e86a28a create mode 100644 txscript/data/taproot-ref/a2ccb0337cf44bc0b3562bbf7dcdd792989d5faa create mode 100644 txscript/data/taproot-ref/a2f70a0c20b111ca1ab34de6f2319109527a564e create mode 100644 txscript/data/taproot-ref/a32041608e8afe0ca18b503f0e9c30cd1480f6e2 create mode 100644 txscript/data/taproot-ref/a32cec9ef7fd885815ad4d76f8a45026473405b3 create mode 100644 txscript/data/taproot-ref/a34ff67c5e9162f46fa22c082d21a7ac7a23c3a9 create mode 100644 txscript/data/taproot-ref/a3770de2569e6bc576e5a3947ac08e8bbe24cb5b create mode 100644 txscript/data/taproot-ref/a3823af6285ec27ac5824bddb591a1f209bc4018 create mode 100644 txscript/data/taproot-ref/a38819d7d0147d7cfd3e537fe3756def5a12274d create mode 100644 txscript/data/taproot-ref/a3ad36fa2c2c376afbf409d8fb83e076d6d87bac create mode 100644 txscript/data/taproot-ref/a3af8000afdeacd1c3d6137959029e3b260c72ad create mode 100644 txscript/data/taproot-ref/a3b21dcd0e4adb6a0ef920d74555d2f699917d39 create mode 100644 txscript/data/taproot-ref/a3ce74eabac11a8d8a11955afa3ad09d86b22961 create mode 100644 txscript/data/taproot-ref/a3d08eda208b96260cb5b47c1478e155264ff8c1 create mode 100644 txscript/data/taproot-ref/a3e5f143cabf7cdb1f6111fd744b4230796b6064 create mode 100644 txscript/data/taproot-ref/a42eb9002c5144273a55bdd736db4fde19aee488 create mode 100644 txscript/data/taproot-ref/a446bc4e40187735edce2ecd8fcd0e7ed43952ee create mode 100644 txscript/data/taproot-ref/a45d7d60a1eef620afd536f4d69cd4196a0fa6e8 create mode 100644 txscript/data/taproot-ref/a460475c32082067af4eb3aca7203a69381aec6f create mode 100644 txscript/data/taproot-ref/a47eeeeb9c724e0247b882207d4598df2b1f9db0 create mode 100644 txscript/data/taproot-ref/a4b22b3869f32433a3caeafcc3e2dd92c010757d create mode 100644 txscript/data/taproot-ref/a4b538f21947ef1c76087aab101911f7a2cd4ab0 create mode 100644 txscript/data/taproot-ref/a4bb5997e547796263c8fda8ffb4c87967e2ea43 create mode 100644 txscript/data/taproot-ref/a4c0daa47b25c77cdc37c485b2ddaf4db6edaac6 create mode 100644 txscript/data/taproot-ref/a4d7bdb95ff0421ff9f027700815f81ebac50d03 create mode 100644 txscript/data/taproot-ref/a4e49ce4052c6a3e72232ff2f764b972159ce65e create mode 100644 txscript/data/taproot-ref/a4e87c35b253e9246a0bd98cbe936ecccbf2d89a create mode 100644 txscript/data/taproot-ref/a4e89f79f42904ee1b600ddd79f2d3e27c855da0 create mode 100644 txscript/data/taproot-ref/a4f449044130b59be750db18b3dd9cfd3bae5588 create mode 100644 txscript/data/taproot-ref/a4f68b87043e04396cfebc9287c9d7280448eacb create mode 100644 txscript/data/taproot-ref/a4faeb187eb7094b39e0f0699026cacbbb9d2ea7 create mode 100644 txscript/data/taproot-ref/a4fb1b9f52700ffd6bf24f06e73666810b0e3260 create mode 100644 txscript/data/taproot-ref/a506dd32985fc68730bdda9ec17bd68456455ba2 create mode 100644 txscript/data/taproot-ref/a51dfad994645830ec06457aa99a3680c881234f create mode 100644 txscript/data/taproot-ref/a52cb7e463be1bd639929b2d3988c313fb4189b5 create mode 100644 txscript/data/taproot-ref/a545cc27e2d474a7a7b7ae974d6c61935d3bdfb6 create mode 100644 txscript/data/taproot-ref/a547e004e80194fef36be8b3932bb2a42502c7b9 create mode 100644 txscript/data/taproot-ref/a54e57e8c7e474bf56e54f46813916ef373a9d88 create mode 100644 txscript/data/taproot-ref/a56763f3af3e1d367ff0097d69c129ed4bae7f00 create mode 100644 txscript/data/taproot-ref/a5706ef86f9f5e79c7eb3a0ed8168f28bdc25f87 create mode 100644 txscript/data/taproot-ref/a574eeebf64538810c2a45c5864f3209361e1c96 create mode 100644 txscript/data/taproot-ref/a59cd78a997d502a498c2b597cda9c8cb9b435e4 create mode 100644 txscript/data/taproot-ref/a5aaae5e5cc3955871ba97a7c41d307fef2b72eb create mode 100644 txscript/data/taproot-ref/a5ace5adf4a44f04399e15b18f44e6a83e13b549 create mode 100644 txscript/data/taproot-ref/a5b907c867904b2e2631128c5f637988bef1282b create mode 100644 txscript/data/taproot-ref/a5c7d3a86b0f7fd48476aea167e188ad2e930dac create mode 100644 txscript/data/taproot-ref/a5ccdd516198da910321185e29de6f20d9be2985 create mode 100644 txscript/data/taproot-ref/a5d4903bde9105b510f48ef3783702f402c38289 create mode 100644 txscript/data/taproot-ref/a5f0f80d6202449807c3c23b59496812943f4d12 create mode 100644 txscript/data/taproot-ref/a610da0c9997c31b63719e6fe71e9b82d48595ec create mode 100644 txscript/data/taproot-ref/a63c8dad9a5b7049824ad507266f11ef32fef7c3 create mode 100644 txscript/data/taproot-ref/a65e2a892ee1771cf4861f2c1bc2d5f505645c14 create mode 100644 txscript/data/taproot-ref/a66d01f6351976b51603542719f7e00648878dc0 create mode 100644 txscript/data/taproot-ref/a686f07063eda38bb50a12b8bff95eb203e492e2 create mode 100644 txscript/data/taproot-ref/a6932b59aafceeb75607a7b5c0b5d93b3f2e17dc create mode 100644 txscript/data/taproot-ref/a6b7a9259b013c7a8613e1a5291dff6a4c46e85d create mode 100644 txscript/data/taproot-ref/a6ba23753e57cd1a1f2d7e37472e4679a0f113a7 create mode 100644 txscript/data/taproot-ref/a6c5d8b49fda54f8534027bba1269af6af46da1f create mode 100644 txscript/data/taproot-ref/a6ccf2fabae7c6419459beefef87fd1e78fb2d4f create mode 100644 txscript/data/taproot-ref/a6f23c5bb6dad507a24fea1ceecc0df2a026481c create mode 100644 txscript/data/taproot-ref/a708a2f8ec818a38ec29e17b587179a32b43d704 create mode 100644 txscript/data/taproot-ref/a70da8709e12ffb27292ce7290967a40c89cf126 create mode 100644 txscript/data/taproot-ref/a72f0993c4460fa269fecd7c19909f1a8f319d4a create mode 100644 txscript/data/taproot-ref/a732f61f7a104110a42397e2f2bcff054f17f50d create mode 100644 txscript/data/taproot-ref/a736014c5e879818948ab14c8851770efe5d5fbb create mode 100644 txscript/data/taproot-ref/a73a44e1dbbda1a5482aab336034e0f3b2631b86 create mode 100644 txscript/data/taproot-ref/a742d0a1cc22ae97a4d67dae7649bce1710b89db create mode 100644 txscript/data/taproot-ref/a758aa7b471d865a094148a124f948d84c1137bd create mode 100644 txscript/data/taproot-ref/a76b07ca76b8129996817bda9c15cfe6c801c496 create mode 100644 txscript/data/taproot-ref/a777b3aa2b4eb6ca1a87d04550c620145fe1fd1d create mode 100644 txscript/data/taproot-ref/a78c1ce484d2b06f18054390abe8ba3738befc47 create mode 100644 txscript/data/taproot-ref/a7ca771886a4f3f8ef1274e272ed3b75f1c52957 create mode 100644 txscript/data/taproot-ref/a7d8752018d8cded7995daa9e4cd387a0f75eafc create mode 100644 txscript/data/taproot-ref/a7edc21f3d053cf490a4f0032887dd77602ce962 create mode 100644 txscript/data/taproot-ref/a80117d2623452c4c4d047ad5ffdcd2cfd707957 create mode 100644 txscript/data/taproot-ref/a814c0230632e5c08f097102f2033615293348b7 create mode 100644 txscript/data/taproot-ref/a83603464a89b1ff53b86c47af7c54b0f8a72405 create mode 100644 txscript/data/taproot-ref/a858130542274ac050eecd7df40f62a22f2af3e5 create mode 100644 txscript/data/taproot-ref/a87851edeb5a5db0f65fd04d5730500bf77c3e76 create mode 100644 txscript/data/taproot-ref/a8a3b52078ade562edb5a7dc6ab61ce4b3cca2ab create mode 100644 txscript/data/taproot-ref/a8b03c8e24ef968616c561f18edd3944caccbc5f create mode 100644 txscript/data/taproot-ref/a8b6c76ee96d3aab811609a8979cfcc67cff79c6 create mode 100644 txscript/data/taproot-ref/a8cd8ebe1c92a5ce01cb9d553c32988d450e82c9 create mode 100644 txscript/data/taproot-ref/a8f6f74ddb0e0e8e8361ea297e0abac830cc1dfd create mode 100644 txscript/data/taproot-ref/a912b73ec5ce6f1628bcb8d8e2dca4f96fb71c5a create mode 100644 txscript/data/taproot-ref/a91984528078da07c39af230d966ecfa33124d9d create mode 100644 txscript/data/taproot-ref/a98e2c1c0077687fbc9166f61a386e4a7023ae4f create mode 100644 txscript/data/taproot-ref/a99032acc713604176f8d95263865e2c6dd015fe create mode 100644 txscript/data/taproot-ref/a9b04af95ae95e9a60941ab351fb387c007938a2 create mode 100644 txscript/data/taproot-ref/a9b58c8a3ebf4f2c3c8af6242b20c43aa733d6c5 create mode 100644 txscript/data/taproot-ref/a9b81c4e5e52ddeed6c3bb9ecb2f67d7e056eb1f create mode 100644 txscript/data/taproot-ref/aa0024897deb20273f4fad0f856967621953d402 create mode 100644 txscript/data/taproot-ref/aa0d4dde043c88d76ca0b51949f90e102187198f create mode 100644 txscript/data/taproot-ref/aa17922f64ff7cd6d4aeb56bfab8af47218a86d1 create mode 100644 txscript/data/taproot-ref/aa376ce844fe5f3d69f1047c99cbef99e732dbdd create mode 100644 txscript/data/taproot-ref/aa471973e1dc517ae959d5706167622da05bab46 create mode 100644 txscript/data/taproot-ref/aa56f625476b200e65ada22557c871b0993ff86e create mode 100644 txscript/data/taproot-ref/aa76c2e6c5a061d0580802966b8efb8804164d68 create mode 100644 txscript/data/taproot-ref/aa8eac8fb7ebd4e613d8bdbce660665b3f45fa66 create mode 100644 txscript/data/taproot-ref/aaa6693d92f9027513267fd416bd6201171873ac create mode 100644 txscript/data/taproot-ref/aab859864bc25e0a7b430273941b291f2b765ba7 create mode 100644 txscript/data/taproot-ref/ab1a9283d7a85a42aff52d1937193ca27a794187 create mode 100644 txscript/data/taproot-ref/ab3899ee5c2ed560ae6beb77e71e4950fc17aab3 create mode 100644 txscript/data/taproot-ref/ab3bd8d93632f274ea33e6bac92fec9215c4f20f create mode 100644 txscript/data/taproot-ref/ab3f300e2417c10f0eedeee88f719e82892e53a2 create mode 100644 txscript/data/taproot-ref/ab5267db0c03e93e08f51b597821900db93ae75c create mode 100644 txscript/data/taproot-ref/ab8bd300852ee0d05f0c8d476f4205347466c6e3 create mode 100644 txscript/data/taproot-ref/ab8ffe370320d075a8c7b9daefaf545d29b7ac1b create mode 100644 txscript/data/taproot-ref/ab9b4c72f3a16b2e16d40652ec33ca2a8ee4d3ef create mode 100644 txscript/data/taproot-ref/ab9c711cf8bbafb6cdfd30f945bfcb03cf0272b6 create mode 100644 txscript/data/taproot-ref/ac0b35cbd93f63ed7452d6acebde72ca9fcc3d81 create mode 100644 txscript/data/taproot-ref/ac2088d883a0a84ac9d499824adcbd32f90b53c8 create mode 100644 txscript/data/taproot-ref/ac3cd67c26d777875eeebe2e90c716e8bd592ff4 create mode 100644 txscript/data/taproot-ref/ac93b3ca2d9c1ec6e07725af461ea07bb19c4dee create mode 100644 txscript/data/taproot-ref/acef576be556d6720814253fa450ffd2684c3c7b create mode 100644 txscript/data/taproot-ref/acf314897698e9e208634f10df880184d9a7754d create mode 100644 txscript/data/taproot-ref/ad1589197b44cb0c659b26869de6c66b103e9682 create mode 100644 txscript/data/taproot-ref/ad16650f9e472fb459eb487a9f883c894760b565 create mode 100644 txscript/data/taproot-ref/ad382a856cee976ed155aa5fae9828cd059ccb26 create mode 100644 txscript/data/taproot-ref/ad4069abc0712cf1f3c8508b699379282bbf556a create mode 100644 txscript/data/taproot-ref/ad58a3216af0b6f002972233963f6be39c7aee60 create mode 100644 txscript/data/taproot-ref/ad67e4cfbdacd913d6561d8fe08f456a4341a88b create mode 100644 txscript/data/taproot-ref/ad705acdd20e8da3a2171681cbf04df9fa98a3f7 create mode 100644 txscript/data/taproot-ref/ad8af6e7441c7a1e3628b69f1ca22b74068a2278 create mode 100644 txscript/data/taproot-ref/ad9cdf2ad4d35e3f1e5279c581d0394ae2aa6972 create mode 100644 txscript/data/taproot-ref/ada6178e8321efd51626a855bc6e5557d68ca3fa create mode 100644 txscript/data/taproot-ref/add98ecf3dbbc875a84ca24db0f18c054af38335 create mode 100644 txscript/data/taproot-ref/ade2c248d7512985cd0840191f643e986e49db2e create mode 100644 txscript/data/taproot-ref/aded7ddfdd7ffa25f49bad4502033ca4a8591786 create mode 100644 txscript/data/taproot-ref/adf617416382c5deb595144ff94dce09117c3181 create mode 100644 txscript/data/taproot-ref/adfe9ae4df4e249a66eb91fd2f8b26ee063e6f76 create mode 100644 txscript/data/taproot-ref/ae32aa63248b35fca6503c67fb4fd2acf15a98ad create mode 100644 txscript/data/taproot-ref/ae87ecd86f7053ab8d71a8f1fc84c2d2c62b472b create mode 100644 txscript/data/taproot-ref/ae887143b966f102e6e5967f76ea3c041af92e65 create mode 100644 txscript/data/taproot-ref/aea2776fad1a4341ceaff3aa6cf21d9c37587a96 create mode 100644 txscript/data/taproot-ref/aeabf0753dee7e4de87a4ffe6e1414931333b32a create mode 100644 txscript/data/taproot-ref/aeaf78544ff09661df34acf0ab140ca8f6834d93 create mode 100644 txscript/data/taproot-ref/aeb2510aa3d77a9c6dcf533982e3925d74a03591 create mode 100644 txscript/data/taproot-ref/af3246dfb5ebe1bed3d537e239a99af7422239e7 create mode 100644 txscript/data/taproot-ref/af39e152ec29cf6ef9124bc09c621887cea05402 create mode 100644 txscript/data/taproot-ref/af4d15714a467c338537aaa00108e2bee33e8426 create mode 100644 txscript/data/taproot-ref/af58cb52355f4201682a37056445b679070634b3 create mode 100644 txscript/data/taproot-ref/af5fe2e1f2c809eb47dbe26c8a45e6a55718cce6 create mode 100644 txscript/data/taproot-ref/af7648fbe02efa3d9188b9b61ce6422012612477 create mode 100644 txscript/data/taproot-ref/afa5c3718b0a518cee419488c60f2f2741ba28ff create mode 100644 txscript/data/taproot-ref/afb161887b4215368f593a2d8d8b6bc32170698d create mode 100644 txscript/data/taproot-ref/afb93dea86c318802ea31536847bc3786c8bb47c create mode 100644 txscript/data/taproot-ref/afcc94478400491055613ccd42f75d4fa9c1ceab create mode 100644 txscript/data/taproot-ref/afea0adf1a155b6acd7f6a1aac9dcfd781f953f1 create mode 100644 txscript/data/taproot-ref/b0225ebc20fa76a5b5efb83881756503681565fa create mode 100644 txscript/data/taproot-ref/b02921b398ef06202f6f3b3f652c3c8f10888607 create mode 100644 txscript/data/taproot-ref/b068dde987664207f704c5b73a6444bd16d46da8 create mode 100644 txscript/data/taproot-ref/b06a48e5c2bc5a6b1fc1fec7273e5642a15c8c13 create mode 100644 txscript/data/taproot-ref/b075dfb300337efeb5bdabad39fff800ee516fa3 create mode 100644 txscript/data/taproot-ref/b085cb29b4ab162f71d870e1b8f890fd0cf23cd6 create mode 100644 txscript/data/taproot-ref/b08ac583665d8a49691a3a09c1d5cc1ee3b8a416 create mode 100644 txscript/data/taproot-ref/b0a4831326c413d2804c49788050b9f91a6403f7 create mode 100644 txscript/data/taproot-ref/b0ad1929e6a50924bb0dc2de48e23ed645f857f7 create mode 100644 txscript/data/taproot-ref/b0c00b0f653fb7d6d9c6d10a355b006e90bfdefd create mode 100644 txscript/data/taproot-ref/b0c6d5f594246c874ab683269116303a280482fe create mode 100644 txscript/data/taproot-ref/b0c73ceab30b62cfa56f40cdfd49c1ce58f55a01 create mode 100644 txscript/data/taproot-ref/b0d9006bd4700ed6403142773e914c7bb257d345 create mode 100644 txscript/data/taproot-ref/b0e3df60a56490ae4dccf3851d020b40b21b8b7b create mode 100644 txscript/data/taproot-ref/b0ec063bde9113e41cd5590763cc5a80a27e57df create mode 100644 txscript/data/taproot-ref/b105a50748888b6356015fc47a88bc2be5715d6d create mode 100644 txscript/data/taproot-ref/b14851f777181f4d6991a19eb5faf986f6c5d922 create mode 100644 txscript/data/taproot-ref/b16c3acf4e0fdb0086f5e645c0abf5248401f236 create mode 100644 txscript/data/taproot-ref/b1776090f6173a9a430ec315e3ed5aabd24b1b72 create mode 100644 txscript/data/taproot-ref/b1a7636cf60adfde2e1358221f019b1e6b4155d6 create mode 100644 txscript/data/taproot-ref/b1ad5a93a73ac48400168c0d0d6867c722e2ee94 create mode 100644 txscript/data/taproot-ref/b1b4eed63248ce097e83d9f1723c6762b7de9c27 create mode 100644 txscript/data/taproot-ref/b1bf9f8b4545db1b4c96961e0e20f15216c0e8b5 create mode 100644 txscript/data/taproot-ref/b1c08a839cd0acb873c5f79044f09ba166bfa26d create mode 100644 txscript/data/taproot-ref/b1d288dfd536ad13a01041e19c9c11fead33ff91 create mode 100644 txscript/data/taproot-ref/b1e426a1d9ca218fe8dfbd94e4f84deb69cf3add create mode 100644 txscript/data/taproot-ref/b21f2a634774a50314c4e0ef19018373cfff5761 create mode 100644 txscript/data/taproot-ref/b25b243c1918bd286e71165a606917ad6566dcb9 create mode 100644 txscript/data/taproot-ref/b279bf9258b4c48220f05e2e891b91c7b13e0572 create mode 100644 txscript/data/taproot-ref/b2bf386739903299a1cce995ba58544747eee3f9 create mode 100644 txscript/data/taproot-ref/b34497bedf19b0567d48c3bb9d3c6c6b7285bf56 create mode 100644 txscript/data/taproot-ref/b354cb571d5964e5709107acf8b69b7a52691648 create mode 100644 txscript/data/taproot-ref/b3621ec700f1905ab8a89bd0dc990c56dc5b2619 create mode 100644 txscript/data/taproot-ref/b36fa07023f7e2c301fca71c92d63d4b9d3dbfe8 create mode 100644 txscript/data/taproot-ref/b3acffc7854d876acec4be4e8f02c5785c9786cc create mode 100644 txscript/data/taproot-ref/b3b35af21b57765c4439d83505e2c122bcd9d159 create mode 100644 txscript/data/taproot-ref/b3e2b23acbebfcbc2e5f4e54d4fd7005740cae7f create mode 100644 txscript/data/taproot-ref/b3f7745d61088bde2d2244a961085a6e8ca22a22 create mode 100644 txscript/data/taproot-ref/b3fb8896212c7278ddd055ebe8806a9aadfbdbf4 create mode 100644 txscript/data/taproot-ref/b42a78220d5bf6c02b4d64f379b4963da854ecf8 create mode 100644 txscript/data/taproot-ref/b471b7933c10f89f075ebd244fc7dce18cc064ec create mode 100644 txscript/data/taproot-ref/b4881b1ab0b628b8e08950b8799b2a7b2f90f6bb create mode 100644 txscript/data/taproot-ref/b4b0e6e8de840a729657842fc3f326a51926695a create mode 100644 txscript/data/taproot-ref/b4c0e993f516711b0d2941c1993f065eee0512a5 create mode 100644 txscript/data/taproot-ref/b4d27baa0c7f4d587689db8a9529b71fa55341ec create mode 100644 txscript/data/taproot-ref/b535e18acfb42d8eca463e3d005649eeec97a029 create mode 100644 txscript/data/taproot-ref/b537477b73545075fe86dcab51eee08a1eff1f93 create mode 100644 txscript/data/taproot-ref/b545791a846adc504218666c3218bfaa83bc90d2 create mode 100644 txscript/data/taproot-ref/b56d0867bbc5b009c7f592e99f5d598f728cda80 create mode 100644 txscript/data/taproot-ref/b571a84a7a61d25a217f263add5e84836c981aad create mode 100644 txscript/data/taproot-ref/b592aa01c9d16fda0673296c91e16d85378ef308 create mode 100644 txscript/data/taproot-ref/b594302e03843a9f9c9551e5065d334f5788b18f create mode 100644 txscript/data/taproot-ref/b5c23ef36f914bfe6734a376e3ff23afa4056cdf create mode 100644 txscript/data/taproot-ref/b5f858c267b5596e80a4ca9e1d9d9fc97493a161 create mode 100644 txscript/data/taproot-ref/b5f894878cea25475b042e2e6dccf49267130d0f create mode 100644 txscript/data/taproot-ref/b605240fb46dc5b5a62d8e4fe44362074c17cd79 create mode 100644 txscript/data/taproot-ref/b62a40520073f939f2c0c9f173f5df055dbcfe5e create mode 100644 txscript/data/taproot-ref/b646f8b3b9e38907889dca9d182ffcb148c5eb86 create mode 100644 txscript/data/taproot-ref/b64c6d5ba93dfc04d7a168f3316abb231668ca1a create mode 100644 txscript/data/taproot-ref/b66c4be98c84d4c925dd2af48a775cc657d0344d create mode 100644 txscript/data/taproot-ref/b6737bb08c29b827385850c321cf5d8413acfef6 create mode 100644 txscript/data/taproot-ref/b67e4f02f0ff506105dfa4a0171d89ceb6d26cfa create mode 100644 txscript/data/taproot-ref/b68b738158b1aed99780946dcf5925a67eb68cca create mode 100644 txscript/data/taproot-ref/b6df4711f8c031a1f3fc609594a2746d2d4e3d62 create mode 100644 txscript/data/taproot-ref/b6e1970eedbfd9c6a474d94f15274687adf86c2e create mode 100644 txscript/data/taproot-ref/b71c95db43c402381d9a9673ab063f0735eb1d31 create mode 100644 txscript/data/taproot-ref/b71ebb4f48a1c213c17c8b1e9166cc38b072dc9d create mode 100644 txscript/data/taproot-ref/b72daece9e0661e0bd4c8a41d26c73ba8eef4882 create mode 100644 txscript/data/taproot-ref/b795709244b876a1f75a1d801c74732832748ebb create mode 100644 txscript/data/taproot-ref/b7a501079daff65d0e768364b11ab44c69980aa7 create mode 100644 txscript/data/taproot-ref/b7b1691a7efc0fca08ac5b931ccb3dbf5aa891d8 create mode 100644 txscript/data/taproot-ref/b7cc907a8b0d3c3e1994be68a40873b4e99a5f78 create mode 100644 txscript/data/taproot-ref/b8079c5bdcff63a0f477e2f79dd8aaf4928abda7 create mode 100644 txscript/data/taproot-ref/b809617c671f07711eb77d11353900df3a1020b0 create mode 100644 txscript/data/taproot-ref/b83c1c0b8c3121745e8e5a5de023dfb379736329 create mode 100644 txscript/data/taproot-ref/b83df399d9754f536f1c099dfad005119a65be7a create mode 100644 txscript/data/taproot-ref/b83ffefda146d967a06f51678c18eff540980695 create mode 100644 txscript/data/taproot-ref/b84cd36f16a07a3e7153b397d87779a08b904316 create mode 100644 txscript/data/taproot-ref/b8500830a3e73890fbb7f1b5e546f8dd9a851acb create mode 100644 txscript/data/taproot-ref/b8684e0746d02b30dd7444f365d9552810403e85 create mode 100644 txscript/data/taproot-ref/b8a16da4c5a5e56d3c75e8933ac8d444b9d06ecc create mode 100644 txscript/data/taproot-ref/b8a400a5412cc152b17a2cda851c5874dd5ead2d create mode 100644 txscript/data/taproot-ref/b8a97f2ecce17499487b6afbfd74dcdb69711ff3 create mode 100644 txscript/data/taproot-ref/b8b534195cd5db1dd0cc83d99d7face7ebae029d create mode 100644 txscript/data/taproot-ref/b8ba77481215495fefc3d9c89e8e4251b1514f9b create mode 100644 txscript/data/taproot-ref/b8c25103015cf79375d6f576186c9bf014842e27 create mode 100644 txscript/data/taproot-ref/b8c863f970b2f3c39e353171b5902be0355002ed create mode 100644 txscript/data/taproot-ref/b8daa1c785e390cba67ca10da7ee578c00efb805 create mode 100644 txscript/data/taproot-ref/b90034052330d016cb6261caaff33ff9b2007d1d create mode 100644 txscript/data/taproot-ref/b953ae08ca074cfcfeda2be630b7eabb0a0feef0 create mode 100644 txscript/data/taproot-ref/b95d3cec25b96ed5bf972cb98ca8c6476eac7630 create mode 100644 txscript/data/taproot-ref/b95e31c70d4e1c7f52eb020450f422dc69f2b3f1 create mode 100644 txscript/data/taproot-ref/b960c57badc5a9291e8064176397f05700f998c2 create mode 100644 txscript/data/taproot-ref/b98b3ae70f7b3075d295829a4a779d63ac54efc1 create mode 100644 txscript/data/taproot-ref/b9c4f033e767c62469be7d0c9837ff7976269c03 create mode 100644 txscript/data/taproot-ref/ba1c9764d8c0c80309b24333c675854c1e92edf6 create mode 100644 txscript/data/taproot-ref/ba1e6bbaa2a233a2a9e108339e2a03d15db6c21a create mode 100644 txscript/data/taproot-ref/ba213f9e83bc18ee5d889ce921f71786661cdb49 create mode 100644 txscript/data/taproot-ref/ba60320519e241dc303d027571c1b6b6677274ef create mode 100644 txscript/data/taproot-ref/ba66a56ebc2679a2d9e33cd52effe2bf5657ba63 create mode 100644 txscript/data/taproot-ref/ba71d7ae4697eea6a410b7c4d7d542ded867b329 create mode 100644 txscript/data/taproot-ref/ba830627ab470b34e7d889cad07110a91669d64b create mode 100644 txscript/data/taproot-ref/ba88104330b37c0458b14c5d53739d04527f803a create mode 100644 txscript/data/taproot-ref/baa4d60cb12ba51a47909ac8227ee6df6d0dc0b2 create mode 100644 txscript/data/taproot-ref/baa96c5298845a9d61eb221acb395d2256d66ee5 create mode 100644 txscript/data/taproot-ref/baa9d2ad62a330c543ec07ad2137ad8de21565a1 create mode 100644 txscript/data/taproot-ref/bab370c81fa011cfbd5f4933e8e203b69b4613b9 create mode 100644 txscript/data/taproot-ref/bae295c693b97cb9ce1c49550985444f7083bf7d create mode 100644 txscript/data/taproot-ref/baf106403ddec9a4e35d93e4d7e9c8858a1db975 create mode 100644 txscript/data/taproot-ref/baf7af0bebc3219aa43e93f239abf44c3c75cc84 create mode 100644 txscript/data/taproot-ref/bb00878c7c40b024bd20fd9e026f76cc0f01bda7 create mode 100644 txscript/data/taproot-ref/bb06616585d2cf60ef82187fc0334f6ddea3aafc create mode 100644 txscript/data/taproot-ref/bb0848b612e67f32638209d33374606f9f878516 create mode 100644 txscript/data/taproot-ref/bb213f4cc6adea71bcd254acd7a66de7a21a8fb5 create mode 100644 txscript/data/taproot-ref/bb4c46289dbd303f6704b3a08d9e02f4c48b84e6 create mode 100644 txscript/data/taproot-ref/bb4cc97eb2c8303964e3730c003f85cb88a0211d create mode 100644 txscript/data/taproot-ref/bb7141b532ed1aa0b98bd58bc84ec2e08f2e47c0 create mode 100644 txscript/data/taproot-ref/bb7fc95bb6e35ae77514934a3e4ffa53a6516e13 create mode 100644 txscript/data/taproot-ref/bb85f9b909ffd0ec974d57b8e96a0afe8031c95f create mode 100644 txscript/data/taproot-ref/bbb302be328567aed2f8a9548699284ede429dc6 create mode 100644 txscript/data/taproot-ref/bbc60e9c8fe20335286b1b4c11f2554bf44bde1c create mode 100644 txscript/data/taproot-ref/bbd6a4aa19b13347c78851a8c39dc87ba2c6cc26 create mode 100644 txscript/data/taproot-ref/bc18a41aa534670b3eb06ea552eeaa43a8bf670b create mode 100644 txscript/data/taproot-ref/bc44929f9083ce895cef6e68e78c51d907624850 create mode 100644 txscript/data/taproot-ref/bc61d16fcfe7499f1dda3e1aebd61701783f32bb create mode 100644 txscript/data/taproot-ref/bc63fef6a6e1da11f5ad9cdc8c82557d301f7f93 create mode 100644 txscript/data/taproot-ref/bc94c09d187af83d11bc158ffad91041ae1cccf5 create mode 100644 txscript/data/taproot-ref/bcd93267863bf6c12c490fdca519c9a6fb257676 create mode 100644 txscript/data/taproot-ref/bcdee1bf1b6f002a01bcb15b07e1ceef6be9c962 create mode 100644 txscript/data/taproot-ref/bcfbb863f9751dbc9e52565fa18f52d7cfc28dc0 create mode 100644 txscript/data/taproot-ref/bd06f79eb234682d1b026c5b614cea268261d69b create mode 100644 txscript/data/taproot-ref/bd10e29dccdef5c1bc2693b295ca9c3ee1a5e9fb create mode 100644 txscript/data/taproot-ref/bd4570befca425281b554426e78e723b29b91aeb create mode 100644 txscript/data/taproot-ref/bd4b0d5ede1b9b28ba821e22b21d2e67eb35fb46 create mode 100644 txscript/data/taproot-ref/bd5b6bd1cba3b3c9511abe6e7ba85869cc7271a8 create mode 100644 txscript/data/taproot-ref/bd647eceba7eb445528903854da69225eb46a33b create mode 100644 txscript/data/taproot-ref/bd806dc6dd950acd2fb4799772f9284b52b3eefd create mode 100644 txscript/data/taproot-ref/bd90aa727c6f46c0b214029c4cc55665db207ed4 create mode 100644 txscript/data/taproot-ref/bdb75495237a21c1632a1d8002a2de43c75cbece create mode 100644 txscript/data/taproot-ref/be342f285479f59388d4ad299b262298ea0a194a create mode 100644 txscript/data/taproot-ref/be4056e6d4621f67f649cc023b36d0616763fb74 create mode 100644 txscript/data/taproot-ref/be5fa21ede21c3ae07d18916186307eb0dbd0b20 create mode 100644 txscript/data/taproot-ref/be6dd32445672ad01a41728099573f056d19f11b create mode 100644 txscript/data/taproot-ref/beaac08761cf0537284bd2fb73e52c21bf944e0e create mode 100644 txscript/data/taproot-ref/bebcb9f288f4fe614ba1fcc940d72dd3a2e9182c create mode 100644 txscript/data/taproot-ref/bf0031c6d9edfce82c4f7c49f277cbf11c628084 create mode 100644 txscript/data/taproot-ref/bf1ad139661581e23e01c40061ebbcbdbce507e7 create mode 100644 txscript/data/taproot-ref/bf2b441671494bdd813cbde459c3f201b5dc132d create mode 100644 txscript/data/taproot-ref/bf34c8983707b06356e258d949ea5d5b386f793c create mode 100644 txscript/data/taproot-ref/bf699d29a3431d6314083edeeb34fd0d30d0e88a create mode 100644 txscript/data/taproot-ref/bf79de65a5198ccae719f56cd87e06ebfa963388 create mode 100644 txscript/data/taproot-ref/bf8f7dfface9a3a19ae105b018ef9c8464a7766a create mode 100644 txscript/data/taproot-ref/bff5be66a4aacf336f6a1a8aabdf35a37bd49c75 create mode 100644 txscript/data/taproot-ref/c0039aba73061b1e9d1b5673c11d9a6fec6c2d2b create mode 100644 txscript/data/taproot-ref/c0201387de1a365edea3ae462c8e87757ac56e21 create mode 100644 txscript/data/taproot-ref/c0264fc040cf13b7e91a6413eb4b7c76c194b45c create mode 100644 txscript/data/taproot-ref/c02fa738eb666819f177a296b855df242f3744a5 create mode 100644 txscript/data/taproot-ref/c04290c4f9037a6b82b7d2392c6c80c1ae11f80c create mode 100644 txscript/data/taproot-ref/c066693ba1a2191967ded9338dab201a79f31370 create mode 100644 txscript/data/taproot-ref/c06e8cd4278bfe18806835f29e8892fe38588b77 create mode 100644 txscript/data/taproot-ref/c09fc10086b95973815a1c9f85b9e89af0b68a27 create mode 100644 txscript/data/taproot-ref/c0c65b781da778eab58a96c85067f90b2d4d1f4c create mode 100644 txscript/data/taproot-ref/c0d2b1edf6f56cba1a8e2d0b100cb918fd7f803d create mode 100644 txscript/data/taproot-ref/c0d30a73338909cf56a6d97fed0221e78bb7731d create mode 100644 txscript/data/taproot-ref/c0ea13628224c7cfa08a24dfe6cac5360c02d61f create mode 100644 txscript/data/taproot-ref/c0f5b91a651c2d181d2e204758d6556b2d362c11 create mode 100644 txscript/data/taproot-ref/c128857e0f643e229c430eb8ef7d3f5aaad861fb create mode 100644 txscript/data/taproot-ref/c12b71a60e309ebef55284d493cfd3665116ac35 create mode 100644 txscript/data/taproot-ref/c146489c520399688a56c27fa5210f00c10e9e5b create mode 100644 txscript/data/taproot-ref/c180a8fea16357ccb1c9e9a5b1fcde5e0137ba39 create mode 100644 txscript/data/taproot-ref/c195e2cf967dde5160c0de3b6a514dbb2ff8485c create mode 100644 txscript/data/taproot-ref/c19c13729ac0ec5c7e396da5494a3f513d31d8e8 create mode 100644 txscript/data/taproot-ref/c1b84b02f4cf106428923ebb095dd6888ae0ac50 create mode 100644 txscript/data/taproot-ref/c1bff9e88ae4e9b8bfd1976fa22c1802e6db3962 create mode 100644 txscript/data/taproot-ref/c1e5922d5f60798c78f4d0d669795bdad1a0801b create mode 100644 txscript/data/taproot-ref/c1eeed88c600ab669ef89bb18d5ef6a6830d4f0e create mode 100644 txscript/data/taproot-ref/c21065afa4b19740633e3c552a080169d12b4afb create mode 100644 txscript/data/taproot-ref/c2268af10452034a5d5f9268c6f6797ab805a459 create mode 100644 txscript/data/taproot-ref/c22963b5f52cca482bd79213fd1c9fd9819b85dc create mode 100644 txscript/data/taproot-ref/c23bb15b95f0283493b5e9660535131e08c4b442 create mode 100644 txscript/data/taproot-ref/c23dc3dee1bab058e9dda39e357268464aff6993 create mode 100644 txscript/data/taproot-ref/c259be6e071636a46f638dc71fbf337480a65d62 create mode 100644 txscript/data/taproot-ref/c2606a81031cc7d45d665ff29e83009cdaeb09b4 create mode 100644 txscript/data/taproot-ref/c2615fefcd8c48ae15d7cdf715cb7cbe15365bb4 create mode 100644 txscript/data/taproot-ref/c274fc041bc18ec36b6fc361335ee8c903ba6539 create mode 100644 txscript/data/taproot-ref/c2b521f99f9142ffd0f06f35fdbf0a1e6db3b411 create mode 100644 txscript/data/taproot-ref/c2bc316e1620048c72dc6375bd6c4de0d175594b create mode 100644 txscript/data/taproot-ref/c2ccbe9e06e6c7ce6e43c0b381322fc7dc10a2c2 create mode 100644 txscript/data/taproot-ref/c2cdbf0cad554855e5a2c77ade2426042fd077d0 create mode 100644 txscript/data/taproot-ref/c2fc3139b18939587fa9376d426b5ed6e5a7d384 create mode 100644 txscript/data/taproot-ref/c30440e2e36842767c6880d3419ffd67d8fc65e5 create mode 100644 txscript/data/taproot-ref/c30828b92e910f121013ae0e7e80f112ff29c40a create mode 100644 txscript/data/taproot-ref/c30e1db5cebdf16c793ac3774df5940ba0cbd27f create mode 100644 txscript/data/taproot-ref/c34e8364c057d48255c31d4626eee97cb90971f7 create mode 100644 txscript/data/taproot-ref/c34ea38700b3874b1fc56b98fba764e26e442bbf create mode 100644 txscript/data/taproot-ref/c36f9ecac75a1f8369062bd659d7be8116d9426f create mode 100644 txscript/data/taproot-ref/c3759872dcc57d4041c64cfe3164f0beae9647dd create mode 100644 txscript/data/taproot-ref/c37b0f05074e165869fb4e36093d5d05e7f5cd58 create mode 100644 txscript/data/taproot-ref/c38df517f192e8ee8b749587f2286408e1add7af create mode 100644 txscript/data/taproot-ref/c3a855f0999c9f0c734c21ec479b4a2de052c197 create mode 100644 txscript/data/taproot-ref/c3ca44e765c59aef19ebc14444cb23801ff338d4 create mode 100644 txscript/data/taproot-ref/c3f3469ae6022ba9a824d15d3e5c6966ecd2729f create mode 100644 txscript/data/taproot-ref/c42ba6332f5103b6c07a6d7b7c7a96e1345fcad3 create mode 100644 txscript/data/taproot-ref/c4499beb83fe2bbc215490890a252106247a0d03 create mode 100644 txscript/data/taproot-ref/c46f7002e386e4c4fd5c63195b15a2720dc604c6 create mode 100644 txscript/data/taproot-ref/c4b2c2074e18699523a8e60939dabe323e8cfcc8 create mode 100644 txscript/data/taproot-ref/c4c19d4cee5d79334aa9c0ff61f19d321cc3941e create mode 100644 txscript/data/taproot-ref/c4e28343af816c29311d37b8559a05b14d797dd9 create mode 100644 txscript/data/taproot-ref/c5c550da4ca7e932cdd65a9656f2f7c611148d24 create mode 100644 txscript/data/taproot-ref/c62a6dec1ec0c7508b82a35dfbcc1d66455eb241 create mode 100644 txscript/data/taproot-ref/c62d08fa40199eb68353dc3045f6c961f21f080c create mode 100644 txscript/data/taproot-ref/c63b3815a0dae098fa0dce37acfd79f213436d49 create mode 100644 txscript/data/taproot-ref/c63fa7c5e9f3cfa3be54296de8fcb8c5bae42ab6 create mode 100644 txscript/data/taproot-ref/c66c43a4b77a41b0bcafd8714216e0e515ea32c1 create mode 100644 txscript/data/taproot-ref/c671d0d61110d22335aeeff604afc7a78832a1f0 create mode 100644 txscript/data/taproot-ref/c684723b339ed9a247b5fe843d2111fcb009cbf2 create mode 100644 txscript/data/taproot-ref/c6911c815fc4eb1fdd0b9ab9cd09d3f6af2c6188 create mode 100644 txscript/data/taproot-ref/c69155ad942486c3313ec96fba99eb4b629b0b7e create mode 100644 txscript/data/taproot-ref/c694a3b9670b92c47faef2482e1c373a96c84b7b create mode 100644 txscript/data/taproot-ref/c6a2dc24e570bc2a810731231121944aa2c4a595 create mode 100644 txscript/data/taproot-ref/c6fa56d9a3cfa039c883bb5289ea577b65e788ce create mode 100644 txscript/data/taproot-ref/c709197b022538558c64745e06cce6340703a73d create mode 100644 txscript/data/taproot-ref/c70d23ebccdc1ea73e6448b1df58f62d71582adf create mode 100644 txscript/data/taproot-ref/c71d9516b42225f3514b4d1df627c022e4817ee0 create mode 100644 txscript/data/taproot-ref/c7252d6f48851dc47f8c3177537e12abe69a084c create mode 100644 txscript/data/taproot-ref/c75d0a897f9c6981d81da8b49be331ba03439313 create mode 100644 txscript/data/taproot-ref/c761e8c4c51ea45aa6c56b949fdc22e5d4c60cf1 create mode 100644 txscript/data/taproot-ref/c763c8080d8e8e78651eaf9140b7aa3fef1d52d4 create mode 100644 txscript/data/taproot-ref/c77f06b7f82e62ac50865f5ee4163ae369969020 create mode 100644 txscript/data/taproot-ref/c785d388c9a15886ab980f88b666d4945c7ee4a6 create mode 100644 txscript/data/taproot-ref/c79333ec6723390b7f1563f388c7a50d86f860b2 create mode 100644 txscript/data/taproot-ref/c7946ca286a4c1e04861f5fe7ff7982618728e8f create mode 100644 txscript/data/taproot-ref/c7a2d84c0203fa2c48f932ed3cdb57e9bc3d4cd3 create mode 100644 txscript/data/taproot-ref/c7aa7f6d958c6e29a221a767f1d7b3c103fe86b2 create mode 100644 txscript/data/taproot-ref/c7b48c2518d6d2a2a5acd628f2fb397cad2ac0ea create mode 100644 txscript/data/taproot-ref/c814f8c932eb8ff0b1b54d8a85929406a22a72f6 create mode 100644 txscript/data/taproot-ref/c8172ac90dca46ddecfcb6abf992c70d492bdaf0 create mode 100644 txscript/data/taproot-ref/c8203a41b6f45793c2150ed5554ab5bf5c7eae94 create mode 100644 txscript/data/taproot-ref/c82943e824916226a82dbcda450c1cf3f21df1da create mode 100644 txscript/data/taproot-ref/c83f86babe52fc934414d829d4969407bdaa8de9 create mode 100644 txscript/data/taproot-ref/c85880f71216bacfb5f45a917040c76a5b933f5e create mode 100644 txscript/data/taproot-ref/c85ec330c8ffb17623ec929fd4a198c3b768811a create mode 100644 txscript/data/taproot-ref/c86c77b200bac67eba1a81988b36e0764528deef create mode 100644 txscript/data/taproot-ref/c8e586d3f61c1ad22568794bbfcb69f57cb8b000 create mode 100644 txscript/data/taproot-ref/c8ef39151618f6cc8716604cb9c29f93559b5a3d create mode 100644 txscript/data/taproot-ref/c908a5304c6a71d150881ee923df19a58e37c8e9 create mode 100644 txscript/data/taproot-ref/c91a0b63271792838de6f8620c116c19028be7d3 create mode 100644 txscript/data/taproot-ref/c92d0b7830a59c91b7478b9bc6537abc9104ab24 create mode 100644 txscript/data/taproot-ref/c94bf93a205b5120777d3d7dedacadaf6c732df5 create mode 100644 txscript/data/taproot-ref/c95a348b7638eb340903fe3cc3532859ffe5403f create mode 100644 txscript/data/taproot-ref/c965920ad9808bd3f6a009ce5335213895163c4a create mode 100644 txscript/data/taproot-ref/c968d693525b4f56eb70b070dbf41555841fa170 create mode 100644 txscript/data/taproot-ref/c97c22cac658b5a97d90aab28ef2a0126a80ce6e create mode 100644 txscript/data/taproot-ref/c9810cb06137edb22aba29ce495e0f5e87073b06 create mode 100644 txscript/data/taproot-ref/c9888f4ae613d1778de5399e9c17e6e517df9292 create mode 100644 txscript/data/taproot-ref/c9a84f25b1d55cfc33df56ee356e86772a479352 create mode 100644 txscript/data/taproot-ref/c9addf4f9fd1a956c97c9babd5981d0c8295e152 create mode 100644 txscript/data/taproot-ref/c9b398e28803f0f2e675448f50d7f4d8c39e8991 create mode 100644 txscript/data/taproot-ref/c9d4c34b8cbf8c16d5b1e01af0f0541cdd36456b create mode 100644 txscript/data/taproot-ref/c9dd51e291d1902fcc5389ef9f70290ea166e35b create mode 100644 txscript/data/taproot-ref/c9ed258ea27321037ce42d665a00191863c1ddce create mode 100644 txscript/data/taproot-ref/c9f4f38c06357e5794c082ee3a691a02193ff1e2 create mode 100644 txscript/data/taproot-ref/c9ff164d902f41698dc1714ef130057761a13f8c create mode 100644 txscript/data/taproot-ref/ca067c02b5a5e0209c277a0cea71db50a16d380f create mode 100644 txscript/data/taproot-ref/ca0a2329b586ff39d07383acaecfac1982afe0df create mode 100644 txscript/data/taproot-ref/ca10907ed5b956b8d7c600609307e951fa48d8e6 create mode 100644 txscript/data/taproot-ref/ca10ab334b15fc1a219962a002ba20266142420e create mode 100644 txscript/data/taproot-ref/ca3a2137d38c1e9a98dd585fbb1e5e6483a855d0 create mode 100644 txscript/data/taproot-ref/ca4f72eced8e3ace4cb06faea7d35e7831c1e5ce create mode 100644 txscript/data/taproot-ref/ca4f932e8cc3a4b016fedf455e955c89cd7237bf create mode 100644 txscript/data/taproot-ref/ca67aeff72a1ca354129ea9f32b49e63219b5d98 create mode 100644 txscript/data/taproot-ref/ca8e90d773aaf3a6cc447fa963353434f82c0e50 create mode 100644 txscript/data/taproot-ref/ca8ead844b2d1ee6d2526ed1a548996bc943ea68 create mode 100644 txscript/data/taproot-ref/ca9fc42da81222da6dec277f6346109bf564fefb create mode 100644 txscript/data/taproot-ref/cab98434bc48379e0a365fff01d6b79bf577457a create mode 100644 txscript/data/taproot-ref/cab9a4b9aa0799313bf8c71e90011d910fd2eca4 create mode 100644 txscript/data/taproot-ref/cabd7d24e6498c820ccd2a79a03cc481607909e5 create mode 100644 txscript/data/taproot-ref/cafd0a9a6dab6200dcb88ecbf7e265de1ad5d317 create mode 100644 txscript/data/taproot-ref/cb181959ea829e3c8e81c95a1bbce81b35f8d2fd create mode 100644 txscript/data/taproot-ref/cb1b57e08db865390f1b4cf22118530463b721aa create mode 100644 txscript/data/taproot-ref/cb5cd2d881a8e8202863c29e2d692b6245167dd1 create mode 100644 txscript/data/taproot-ref/cb7c58b77b079764dd1fdd95626fced2ad539c7c create mode 100644 txscript/data/taproot-ref/cbdd9f9ee3d06ce2cdfe2000194d0fa14bb03cb0 create mode 100644 txscript/data/taproot-ref/cbe16c2c588c6bc7000fbb04188632167236d008 create mode 100644 txscript/data/taproot-ref/cbfe3b47d8728af1b60451af99e980f90dc89668 create mode 100644 txscript/data/taproot-ref/cc06cd6c0a43860436758eaf21a715c3ecebb6f4 create mode 100644 txscript/data/taproot-ref/cc13210738ed00cc6f24c6bdcc72bc63f13783e2 create mode 100644 txscript/data/taproot-ref/cc3fcfad22ff1374fc57610045f054311fc92f6d create mode 100644 txscript/data/taproot-ref/ccb6fc2bd7df140d0acaa9fa4f6c64be65339a60 create mode 100644 txscript/data/taproot-ref/cd083f5472e5c5b1f0a2910e5400ed9fb0e38379 create mode 100644 txscript/data/taproot-ref/cd2bb450b14d6d4aeb2383f17d0b52532a6d60bc create mode 100644 txscript/data/taproot-ref/cd2f80cd83fdc9c096ed0c6e1e02112a0e62dd16 create mode 100644 txscript/data/taproot-ref/cd4a620abc44efff9ec16d12232d21d35383be02 create mode 100644 txscript/data/taproot-ref/cd536df731fdebe8bbafa86ebef1f6c819648a78 create mode 100644 txscript/data/taproot-ref/cd553bbac6c8bd33ad432ca2077facbf41604f68 create mode 100644 txscript/data/taproot-ref/cd8b40b4ffe13dc923550924d4133d5ac918ecc4 create mode 100644 txscript/data/taproot-ref/cd8ca448ef6a3c3fa7536eee563579389b399c7f create mode 100644 txscript/data/taproot-ref/cd935e81f7b958dc94cbb682f2c926e1e63fc213 create mode 100644 txscript/data/taproot-ref/cd9562d304291faf33b2752268819af3d9fdd593 create mode 100644 txscript/data/taproot-ref/cda64a68115a3ca8971a2747b360b387fbe1d1ec create mode 100644 txscript/data/taproot-ref/cdaa800ed715e873d65a75ff494c085689777769 create mode 100644 txscript/data/taproot-ref/cdae175fecf9783890ad4364fcdb7e9a26312c86 create mode 100644 txscript/data/taproot-ref/cdbb9c9c88d727637e88c5e5f34b796e03a77c9a create mode 100644 txscript/data/taproot-ref/cdd70dfc5c39ec02e5e48d747003dccc345d9c35 create mode 100644 txscript/data/taproot-ref/ce08102de2f440a689645ebc57829a604424b751 create mode 100644 txscript/data/taproot-ref/ce29a0262edb0e4c4a3905e19cb08c9a4e8318ba create mode 100644 txscript/data/taproot-ref/ce4f3f6725a58e41e3545de8f93475f0f9402a52 create mode 100644 txscript/data/taproot-ref/ce5a6e30faecc2d2f249b1bb1b0a21cbffc46674 create mode 100644 txscript/data/taproot-ref/ce5c007dab411a6a225c1b09181578eaf6edf364 create mode 100644 txscript/data/taproot-ref/cea069b190b73ea7c41e48275d6d0841d7fdd8f3 create mode 100644 txscript/data/taproot-ref/cec62d6028ecb0885e4adbb89b0c33222ed71d55 create mode 100644 txscript/data/taproot-ref/cedf97481d67a8a89199abfe8c15570cd253967d create mode 100644 txscript/data/taproot-ref/cef118940d5799540be8721e2453120639fbe14e create mode 100644 txscript/data/taproot-ref/cef395bb5063aba1aeaafde86a8bfd4c3ae80b8f create mode 100644 txscript/data/taproot-ref/cf1726d92ba0a57e5cb508f7f38cf8c30c31572a create mode 100644 txscript/data/taproot-ref/cf19361572439227ba12b4d90a84b45c9c77a6dd create mode 100644 txscript/data/taproot-ref/cf1b9fbc48a705e782d90e0caefa83731663957e create mode 100644 txscript/data/taproot-ref/cf3ddc0d11192bb67b1d1a9c46dba9cb99e1ab37 create mode 100644 txscript/data/taproot-ref/cf87f1c7fe8d84db93cab39e5ec4fc004b0daf45 create mode 100644 txscript/data/taproot-ref/cf99a5aabda5c420d162ea57e1d44c83b4a5f444 create mode 100644 txscript/data/taproot-ref/d01804b3f650a230ba4caf6f35710074094ef4bc create mode 100644 txscript/data/taproot-ref/d018c44a4a260f0faa1c368b22e6fd2da47b4279 create mode 100644 txscript/data/taproot-ref/d023d686290f14c19a40f74a18a2c183ac38c02f create mode 100644 txscript/data/taproot-ref/d07029fee875ecd9778957b1eb1b6ed3ba90c94a create mode 100644 txscript/data/taproot-ref/d076c78276e47d5f2551df88390966202a644ad4 create mode 100644 txscript/data/taproot-ref/d0a5a7631c5914f69f44abe8d926e7ec265b3853 create mode 100644 txscript/data/taproot-ref/d0b362a6e10e2e3ca3df573c3918408d11230109 create mode 100644 txscript/data/taproot-ref/d0c14f7b59f5b7c5e2348a842c4f17589992edef create mode 100644 txscript/data/taproot-ref/d0d80b81785e11a47eb4778cde0392ceee57d442 create mode 100644 txscript/data/taproot-ref/d10cc817535fbf7ed3ccccfffd59542e31fd811c create mode 100644 txscript/data/taproot-ref/d120192543d7524d72dbae6640c1fd01b655ba8b create mode 100644 txscript/data/taproot-ref/d13e9dcbf612e2b605c913bf461a40c14c78981c create mode 100644 txscript/data/taproot-ref/d145e690ead8e8b91dcf655a058473fba40e05c4 create mode 100644 txscript/data/taproot-ref/d1624ab2e4dceb28dc1e7d8f042d85271b474f44 create mode 100644 txscript/data/taproot-ref/d17443611cb2c74ecfda516700477ecdd4ccd1e8 create mode 100644 txscript/data/taproot-ref/d17802655b5504bb0405ee7934ae6e14c9c2f6af create mode 100644 txscript/data/taproot-ref/d17b2da02d1d622d7b71dade71d9adc392999c5b create mode 100644 txscript/data/taproot-ref/d17e92c55da82ddc95d75ddd15779fff2868ff46 create mode 100644 txscript/data/taproot-ref/d209841a9bb6b9ed3a4954465f454a0d304ef888 create mode 100644 txscript/data/taproot-ref/d263cabcd95f3dae465820283cf9b428e89c02f6 create mode 100644 txscript/data/taproot-ref/d27d3711e16baa8c89ff9c90b6ed0622ca86ff8e create mode 100644 txscript/data/taproot-ref/d2957d9af2c85119d0e66bf643c7eb85bda86170 create mode 100644 txscript/data/taproot-ref/d2c7c0da2861f14114f11766107a7b8aa6efd73b create mode 100644 txscript/data/taproot-ref/d2d896106278d4a3d97f13f67d9366baca387121 create mode 100644 txscript/data/taproot-ref/d2e69860ee1527c081669b81f428a0dee46fe218 create mode 100644 txscript/data/taproot-ref/d2f56cc722b3fc0ac3792e7c09a53592a22039af create mode 100644 txscript/data/taproot-ref/d2f8f204891c46f5ba28af13b77da60a054ed30f create mode 100644 txscript/data/taproot-ref/d33cb0c2e7c01d420f375159f3d266e71d9c3bcf create mode 100644 txscript/data/taproot-ref/d34c8b66d9e51e1f51b9432c19d0d95ce51aa297 create mode 100644 txscript/data/taproot-ref/d35d96943b798f0362dee33b1c9dd9f5ce520bf7 create mode 100644 txscript/data/taproot-ref/d386337a1d0705a7cc519dc2e044e51c1831c3f8 create mode 100644 txscript/data/taproot-ref/d3918bf85a56fd7561082f401a5ebd4a0d642f87 create mode 100644 txscript/data/taproot-ref/d3abb997507d97ede96a2ca419dd8554e22db558 create mode 100644 txscript/data/taproot-ref/d3ad578f5f3076aa52c4e35e8a0002582433fef9 create mode 100644 txscript/data/taproot-ref/d3ae88e79c1801c2da2ca48244ec5455bb3abe76 create mode 100644 txscript/data/taproot-ref/d3d3e2a151a062b9f319dd5ba2d382d38c8c95d4 create mode 100644 txscript/data/taproot-ref/d3e5ffbc18b1ff4b1db6426ef3962f8c9cf5cdf0 create mode 100644 txscript/data/taproot-ref/d411fdd25ef73e64648572aee57803f358cf4bb2 create mode 100644 txscript/data/taproot-ref/d4208a5824d1318820b3784412f424db595f35ae create mode 100644 txscript/data/taproot-ref/d42eec126dd7b1e4c2c574ddba68f4d0228c3d09 create mode 100644 txscript/data/taproot-ref/d48d445fdf8825eb982e112320fe51da22271d30 create mode 100644 txscript/data/taproot-ref/d49f2424f7e47981e92cdca8a120fad3b5b46351 create mode 100644 txscript/data/taproot-ref/d4a61c1883d529642358ce1ad476eae28f347140 create mode 100644 txscript/data/taproot-ref/d4b2d30318741bf9642c79ca255322762ff5a669 create mode 100644 txscript/data/taproot-ref/d4bdc84c656fc906c865b5369626edd1bc0d575d create mode 100644 txscript/data/taproot-ref/d4bfa057df6de164cf5907d1054f7b8f37dc55ca create mode 100644 txscript/data/taproot-ref/d4d9f5cbd1cf9b75c9821d5d4746491e46efecb0 create mode 100644 txscript/data/taproot-ref/d4eb08a9f93ac1b16665f4266fcd570b760e0b41 create mode 100644 txscript/data/taproot-ref/d4f11edc0601915ee85baffdd4721b1d1b3b60d0 create mode 100644 txscript/data/taproot-ref/d4f65e281be1feebd4750e113b05138a9c44f486 create mode 100644 txscript/data/taproot-ref/d5048f880c8259302815a101c17c687a6ddbb1d7 create mode 100644 txscript/data/taproot-ref/d52e561715cddf6ccf811873e1d9570a5b25b677 create mode 100644 txscript/data/taproot-ref/d5466e451d61467e6bd45f66d7608457be8a656f create mode 100644 txscript/data/taproot-ref/d54c6961bb95000149d7cffd738f1f34eaf1d825 create mode 100644 txscript/data/taproot-ref/d54fe454199d96dd8e1ab2d0069417d2b9be7cf7 create mode 100644 txscript/data/taproot-ref/d573fa9122441a358ecf4c86ea6af4d26e08d93a create mode 100644 txscript/data/taproot-ref/d5892cc02088b2b7e11febc39b2d7cd9ed96fec6 create mode 100644 txscript/data/taproot-ref/d58b0cd6e4cd0f7d08d8c5cd8f64fb89bc6c77b3 create mode 100644 txscript/data/taproot-ref/d5ad81a47205ca9893336dfcc66e370ee84776ce create mode 100644 txscript/data/taproot-ref/d5f073d2ccb1d4bc1f4bb2d64971cda535f3abc4 create mode 100644 txscript/data/taproot-ref/d60ddd04ef59ce7655ce0640bb9f05a050c50572 create mode 100644 txscript/data/taproot-ref/d6114c41966cf276af2ac91a43b0dcfdde3ff6ec create mode 100644 txscript/data/taproot-ref/d64045b67fe7d9bbac6b1955c9709dc8f62c2574 create mode 100644 txscript/data/taproot-ref/d65a0ff7ac01950da5c822d87cd1f1b94663c71f create mode 100644 txscript/data/taproot-ref/d66bdc15b3bc47537708b688679685d7823933ec create mode 100644 txscript/data/taproot-ref/d6a9e0d913d7e024afc093007237124f4a34364c create mode 100644 txscript/data/taproot-ref/d6bb41e59dad21fc3ff2d5bb0c784b27307ee4d3 create mode 100644 txscript/data/taproot-ref/d6e668abcd05531d83ec0bdff606bec2368882a8 create mode 100644 txscript/data/taproot-ref/d6e9b28f9645fdf80b2547f4a875bc298680a83f create mode 100644 txscript/data/taproot-ref/d70c950a9b6157fdddbd8eb01fed07f12638844f create mode 100644 txscript/data/taproot-ref/d71a3d01673ec097d7272cd0fcf4fc12f19a90e8 create mode 100644 txscript/data/taproot-ref/d72363609fde245d8d04d59c1d9e2386e97f61ec create mode 100644 txscript/data/taproot-ref/d73e808e6fe07bbd4cac3998bbd227cb333f3860 create mode 100644 txscript/data/taproot-ref/d7435dd29bb609d8a757deda3c46bae9522fafb0 create mode 100644 txscript/data/taproot-ref/d747c65611d3195e76faeea3dbaca70f0255d690 create mode 100644 txscript/data/taproot-ref/d7482427db68b72ab957e74167dbc8c28842b070 create mode 100644 txscript/data/taproot-ref/d7491a450345ac8fd8bd2da583d6974224917a83 create mode 100644 txscript/data/taproot-ref/d750ca1379d7933d2b0750e621fad549663516ca create mode 100644 txscript/data/taproot-ref/d762cef9eb8735ca5282dea549336970c32f0470 create mode 100644 txscript/data/taproot-ref/d784977d5fa21c31f0f510f5a1e2d50f7815c63e create mode 100644 txscript/data/taproot-ref/d78a59aa9fae45d7cbfb5d42a6d57744818f4f3c create mode 100644 txscript/data/taproot-ref/d78b2cc4912fce258a371b34976f623504f00bf5 create mode 100644 txscript/data/taproot-ref/d796184dcd2791587af889f67ff0bd146da22bf6 create mode 100644 txscript/data/taproot-ref/d7a0524afa7b58f919577fc272101adacde12154 create mode 100644 txscript/data/taproot-ref/d7ae7546c73cd724ed329a7e111b1874f3fad3a3 create mode 100644 txscript/data/taproot-ref/d7c12a570bce792607b3d5f23fc34ef6392109de create mode 100644 txscript/data/taproot-ref/d7d1782dc0b7c5e12cccab548a33619bf58a1db8 create mode 100644 txscript/data/taproot-ref/d7ed3928aecf2d3acbca2fb8d2ee7775f7f52ccf create mode 100644 txscript/data/taproot-ref/d7f54f75c60667b7fd883f34d666d917d0b88809 create mode 100644 txscript/data/taproot-ref/d80fa30ad1a0824f0da7b212e606ac5496c0715c create mode 100644 txscript/data/taproot-ref/d86ea65d288be1fd03e9e19e503b17612c637374 create mode 100644 txscript/data/taproot-ref/d8ac2a246d17295baa73602fa55f5ef1d6edd095 create mode 100644 txscript/data/taproot-ref/d8d54db51b8f8299982f8136c6058c9e8063811b create mode 100644 txscript/data/taproot-ref/d8def6ae46c2ae1d19b457603e2015ddad467ad3 create mode 100644 txscript/data/taproot-ref/d8df811ed2f11c79fe945f4943ea3299a251ecb0 create mode 100644 txscript/data/taproot-ref/d8e4caa314d508c3062410f0d680eb589488140f create mode 100644 txscript/data/taproot-ref/d8f77e44fa8aab802aa9131ae9f319611a054835 create mode 100644 txscript/data/taproot-ref/d915944728f949574638f5527cabdee757340ecc create mode 100644 txscript/data/taproot-ref/d92c58e19437f5a57d606edb988ebe5449b4db1d create mode 100644 txscript/data/taproot-ref/d93387aa595f09f4e40642c715176275012422f9 create mode 100644 txscript/data/taproot-ref/d93dd1d6d2d9b39d77cd72571effaec51dad73cf create mode 100644 txscript/data/taproot-ref/d9462d451520aea896848f14167cad63f8eb631b create mode 100644 txscript/data/taproot-ref/d9632d4e4f8d7cc9db523291bb7442332d7c588c create mode 100644 txscript/data/taproot-ref/d96eb1935933e5d8a16bab96d06d05f8b1ab6619 create mode 100644 txscript/data/taproot-ref/d9721f612be2c4596ef2507879885c69a5e6e58d create mode 100644 txscript/data/taproot-ref/d975fa857300c644b1b8b86b9e5579116325e3b6 create mode 100644 txscript/data/taproot-ref/d97fad7ecab4d8f234efc71d9e0019d3cd6866be create mode 100644 txscript/data/taproot-ref/d9d8525ff675d165e7bd245edb10bef8ffbabf37 create mode 100644 txscript/data/taproot-ref/da15d30445dcabf73491b38ff9b7fd6ebf09fabb create mode 100644 txscript/data/taproot-ref/da20174fe1299204fdf8cca351a424cf681308a2 create mode 100644 txscript/data/taproot-ref/da3eafaf969feb19889dd744b3407db1aa866e06 create mode 100644 txscript/data/taproot-ref/da802c4897e37a5e51f367edd23444c11faa33aa create mode 100644 txscript/data/taproot-ref/da8a14b376513348d7ee34b10ff6883f15cc6fd5 create mode 100644 txscript/data/taproot-ref/da91d607fd954405726ab36fa5677e8163634ff7 create mode 100644 txscript/data/taproot-ref/daad29bf36401da76f1b83f5cd1cc0335bf5c14f create mode 100644 txscript/data/taproot-ref/dacc869b2d12c823c9a4bb00e5edcd51d35c5978 create mode 100644 txscript/data/taproot-ref/dacf3352a5bdd39737fb53affdf284ce61f4e97e create mode 100644 txscript/data/taproot-ref/dadf4bbba1d78a438712afd4e84df10275987f0a create mode 100644 txscript/data/taproot-ref/daf266d227dfb92686b3d8cb80cb4d2c4e849468 create mode 100644 txscript/data/taproot-ref/dafea52d56a314eff0b38df4ddd35be40d4f6d24 create mode 100644 txscript/data/taproot-ref/db01c81c34e5e86ae44bef70289a143173916fb4 create mode 100644 txscript/data/taproot-ref/db06c61fa468b40855c83db915cf67df55dddeb9 create mode 100644 txscript/data/taproot-ref/db191d70ebee38a520718fe3a295896a1840f111 create mode 100644 txscript/data/taproot-ref/db2f754795e1478498a59b3071a7852a32a70b8e create mode 100644 txscript/data/taproot-ref/db41febcaac001cb453d4a2ca2a285784d5a9cd8 create mode 100644 txscript/data/taproot-ref/db5b9f12551bfc0e07e9c89d6d5971df6e4eea17 create mode 100644 txscript/data/taproot-ref/db715816bbafa4a288124a98d0cb4df6a364cb3e create mode 100644 txscript/data/taproot-ref/db81d6ad0913097959d953bb6c2e7d576f846a11 create mode 100644 txscript/data/taproot-ref/db9eba0b2b563ba067b7fd8e8ee5ddad9b770dce create mode 100644 txscript/data/taproot-ref/dba31a12d1adba28878c2a0b52b782a5c72d9972 create mode 100644 txscript/data/taproot-ref/dbef858a545baf2d110f1d0e917e4ad258acf993 create mode 100644 txscript/data/taproot-ref/dc01bbbcdac6b5bb939e4be9ca56e5b8c3d165af create mode 100644 txscript/data/taproot-ref/dc0806f74a893b88a54642a35cd820535fde3ed1 create mode 100644 txscript/data/taproot-ref/dc161355dcd6047181d0cf4e25b6a5525f6fe50e create mode 100644 txscript/data/taproot-ref/dc3539d6d3a6a1eaf48ce5185a088eb43b9e383e create mode 100644 txscript/data/taproot-ref/dc480267e0ef9ce538b42b77872f2b3532c35322 create mode 100644 txscript/data/taproot-ref/dc57d8ffab2a6632708a04cb288629b09aa5c82e create mode 100644 txscript/data/taproot-ref/dc593bc1e5ac44230400eae2d39c99148ad34e4b create mode 100644 txscript/data/taproot-ref/dc6dcb26e66c42982855aa1a52a31fd33b250e19 create mode 100644 txscript/data/taproot-ref/dc9395f17d85f800578e0d6e8bf89ad9746befb7 create mode 100644 txscript/data/taproot-ref/dc9899ac6fe73116d5e9f16eb5d414386eaf20b6 create mode 100644 txscript/data/taproot-ref/dc99d264d246e0de31744757d56e34f81e69221e create mode 100644 txscript/data/taproot-ref/dca299a0e651d9aa555003ff4a5031f3fccf9743 create mode 100644 txscript/data/taproot-ref/dcaa02212efb1b1d7b35ccd1cd382be6b3e66e71 create mode 100644 txscript/data/taproot-ref/dcbd31842dac9e7cdaf7ca65e510582bfd1d1a9b create mode 100644 txscript/data/taproot-ref/dccaf2fc47adc1a3b05f03d5fac2a95f989db10c create mode 100644 txscript/data/taproot-ref/dccd7c4272928f022003ea9c7aaa12dcc004a54c create mode 100644 txscript/data/taproot-ref/dcd041ba07357566b4ee1ed3cbca6574c6154f10 create mode 100644 txscript/data/taproot-ref/dcf7577a80ecef6f3ca732dc2e3adaa48e682fdb create mode 100644 txscript/data/taproot-ref/dd000d20a2f313c18520373a1f18e05ed9a150e2 create mode 100644 txscript/data/taproot-ref/dd0b6ef4b264cf0858480a3460b856a1c8f6dc1d create mode 100644 txscript/data/taproot-ref/dd51571565035f293d86c40ad779317f87aedf8a create mode 100644 txscript/data/taproot-ref/dd6e129061e453f9a72be030e9baeee3e56fcf0f create mode 100644 txscript/data/taproot-ref/dd8c174c7b3d3ef26b6db13442b39a50c7f55222 create mode 100644 txscript/data/taproot-ref/dda325195c906944f23de872fa78b2af88631c09 create mode 100644 txscript/data/taproot-ref/ddaf37dc11a8574b722f076f36e746bc7c60e215 create mode 100644 txscript/data/taproot-ref/ddd4994f43b538ffca8eb9b28ca5fb499238d0b9 create mode 100644 txscript/data/taproot-ref/dde699e331a7df59bcdada620624b5ba61dc5dd0 create mode 100644 txscript/data/taproot-ref/ddebb704471c13ddfaf31413aae6c013515a3717 create mode 100644 txscript/data/taproot-ref/ddedd372fed9df45da4d1a59cf4f5cb35009e49f create mode 100644 txscript/data/taproot-ref/ddf80ae28fa37fbe9cd6a838ae2c428932ef3961 create mode 100644 txscript/data/taproot-ref/de08cbb895403680951a2ebc90561ac53b1a1f4e create mode 100644 txscript/data/taproot-ref/de2a5caabe3e3b0b1b01533e95ed8f482c6ba0fc create mode 100644 txscript/data/taproot-ref/de4f89a55a6d907d16952ca4e4166a5979c39c8b create mode 100644 txscript/data/taproot-ref/de5a7c1447572e08c6b28e753fe662ac083fd6d1 create mode 100644 txscript/data/taproot-ref/de5adc575b18b1c34a68e95cecf166f402e523ff create mode 100644 txscript/data/taproot-ref/de5af33427175b7548895fa5441e430afe11d1d5 create mode 100644 txscript/data/taproot-ref/de6875a737b7c8020f44b1c99b70c4853e661ecf create mode 100644 txscript/data/taproot-ref/de6cf2f6180404aa31b1db7d09cf2baddd601d44 create mode 100644 txscript/data/taproot-ref/de8a035daf19e89e29ba0bbdd71dffd1f9cadc5c create mode 100644 txscript/data/taproot-ref/dea753eea55e305608844a4f00655549302ce7dd create mode 100644 txscript/data/taproot-ref/decd88daf9600a38bc143777492f37dad4565eaf create mode 100644 txscript/data/taproot-ref/ded66ffb0cbf19f233f516bd3c63fe712650ef33 create mode 100644 txscript/data/taproot-ref/ded72412b30434c168fa06e48b7e054269d006c0 create mode 100644 txscript/data/taproot-ref/dedc75c0c2ee756e9070605ce546167cacfbcaca create mode 100644 txscript/data/taproot-ref/dee101172e339916048ad363fb6995306d7dd142 create mode 100644 txscript/data/taproot-ref/def37ff0a6957f0a571488b66a768f20f7079048 create mode 100644 txscript/data/taproot-ref/def74495863bbdf9d1af666161152708f2ba582d create mode 100644 txscript/data/taproot-ref/df029e9ebb9e83aace8f0071d2840c27c3ceda07 create mode 100644 txscript/data/taproot-ref/df085e9114f63f74c86f24312e70f7b5318ad9fc create mode 100644 txscript/data/taproot-ref/df12a4966bab2fafa4ffe3a2ffbbbe8d697046c2 create mode 100644 txscript/data/taproot-ref/df16a0297efbbe308fa83a0f3e6ad417689b028b create mode 100644 txscript/data/taproot-ref/df865486869273fb5f7adede25fcadcb18ce2221 create mode 100644 txscript/data/taproot-ref/df8de808e45c8839831abd0deb0cabf9143753a4 create mode 100644 txscript/data/taproot-ref/df8e03791d82b6610c2c15664032e32589ea35a8 create mode 100644 txscript/data/taproot-ref/dfa3c5fef1b463d98f523033ec70daf8d4bf8803 create mode 100644 txscript/data/taproot-ref/dfb36ff8904f4e8107d8ba666de3e5f94f741bfe create mode 100644 txscript/data/taproot-ref/dfca4159ab78bba17ae0d77f088b5aaeb3144266 create mode 100644 txscript/data/taproot-ref/dfe3a4307a38993f68b0c2518ea2e3e590b0c9d1 create mode 100644 txscript/data/taproot-ref/e0128963856adfa8520b26e571a93610b5355887 create mode 100644 txscript/data/taproot-ref/e03443f852b194c164bc4732fb9c5cc86effe4f6 create mode 100644 txscript/data/taproot-ref/e0588caa737bfbd960ff3fd219ca062193aa6bf0 create mode 100644 txscript/data/taproot-ref/e0aaba61fbc722b30669314cc389d44b8f989110 create mode 100644 txscript/data/taproot-ref/e0bbbcbab18f481daf5b315491e268254f4983fb create mode 100644 txscript/data/taproot-ref/e0da4e0fe645f0a953ac5735fde4706cca9e1197 create mode 100644 txscript/data/taproot-ref/e0ebae4900e11a9672f2ae78e61178aa6247650c create mode 100644 txscript/data/taproot-ref/e1087672834b43c44e37cba854b5b9c9f7179a84 create mode 100644 txscript/data/taproot-ref/e10bddf4873386e1fe3f6dc0f2b20f5c151c89e1 create mode 100644 txscript/data/taproot-ref/e11d98e0003ce918a6fad19f550ea0702a879911 create mode 100644 txscript/data/taproot-ref/e1326c178bf8e7b80cda8ea9f9dd86938329c849 create mode 100644 txscript/data/taproot-ref/e147111796d5b53a6bf6dc9458c50027b4d09f87 create mode 100644 txscript/data/taproot-ref/e14960a185290ebe95ae6279b9e869e837251710 create mode 100644 txscript/data/taproot-ref/e170c4afc7cf3aa9e0e5c2670686778994fa4f11 create mode 100644 txscript/data/taproot-ref/e184bc711398d7c0c1fa6934192fda6c555a1cb3 create mode 100644 txscript/data/taproot-ref/e1b11848fd01dfa0ba32bf126463d9d364ab4313 create mode 100644 txscript/data/taproot-ref/e1ba585df080f7b1a7f8f2c7db5dd610f19174de create mode 100644 txscript/data/taproot-ref/e1d952db862331ca79b0a9c72c162374fb1857d7 create mode 100644 txscript/data/taproot-ref/e1e49dcfb28496b89f4ea5ce3dc0d76d880076e4 create mode 100644 txscript/data/taproot-ref/e1f0807d7b3a4bba613963e80beb7c74850d5c28 create mode 100644 txscript/data/taproot-ref/e22480aebb82f3343403252198ba68a247b6d046 create mode 100644 txscript/data/taproot-ref/e24851678d123d31e1507cb51348f5b1dc101d4c create mode 100644 txscript/data/taproot-ref/e2496a88dd988d4f3ef82308c3cca33a874d45aa create mode 100644 txscript/data/taproot-ref/e255d1877a2010d7fcfc04ed18a7a010df14a2c0 create mode 100644 txscript/data/taproot-ref/e25fb2f6402ada66247ba900b01f074eb85ba330 create mode 100644 txscript/data/taproot-ref/e279990fd5d183e1d8b4f404ff9bb849d49c365a create mode 100644 txscript/data/taproot-ref/e2d5ca40d2c53fc997406f6b09aab24c3df0d72c create mode 100644 txscript/data/taproot-ref/e2eeef8ece1fd34ca3dc565f6c64e1e27ffe4394 create mode 100644 txscript/data/taproot-ref/e3196566970071a5ddde94e45545b255dbb827b6 create mode 100644 txscript/data/taproot-ref/e31f0de61f44c1cdc4d261d497cf718662ce97d4 create mode 100644 txscript/data/taproot-ref/e3201e6cef5abb4e32884e254d83db6c48c0c98e create mode 100644 txscript/data/taproot-ref/e3588db1c621c20dd15839f0a47a91d2b3a7c779 create mode 100644 txscript/data/taproot-ref/e35adac42c2fa3fac81b5b56415001d9ef213aa9 create mode 100644 txscript/data/taproot-ref/e36c31c772e822a277d29a41f45a505e97121618 create mode 100644 txscript/data/taproot-ref/e37bd80d8483f80595f8de680651a88967e6b765 create mode 100644 txscript/data/taproot-ref/e385046269e21e18e9615b10675db2b779814ea6 create mode 100644 txscript/data/taproot-ref/e3cb84cf87cf0a5a0e394a62331f15e54cde54f5 create mode 100644 txscript/data/taproot-ref/e3e431ac9b495d6b12f584909dd0891e732ef378 create mode 100644 txscript/data/taproot-ref/e3e86951be6edc4911741f8779b8b81f8e19669e create mode 100644 txscript/data/taproot-ref/e3ee89b296eda3cdf6b73af88989c9879d826a5c create mode 100644 txscript/data/taproot-ref/e43e0f4dd6d04ff5cb7feb566ac7effde65eabaf create mode 100644 txscript/data/taproot-ref/e4400ed471cfae79f01e699c1535a927cd7db111 create mode 100644 txscript/data/taproot-ref/e4403314230ec5266c263c14b3167d0495467abb create mode 100644 txscript/data/taproot-ref/e4476c9611f68d7aed1329b54ac787a7dc19d3c1 create mode 100644 txscript/data/taproot-ref/e4549906b6821c9cfd2bdad13fcedc9f2ce44c8f create mode 100644 txscript/data/taproot-ref/e46150bc653c31e407e6428aa1a6ebf50bf84aea create mode 100644 txscript/data/taproot-ref/e4a1dbfb8711c43befec064b8fd396058b0c54af create mode 100644 txscript/data/taproot-ref/e4ac1ef7380b8d2111b6763169a1743b27f8990e create mode 100644 txscript/data/taproot-ref/e4be0b4404267bdc3cff4674612fa0aafae17da8 create mode 100644 txscript/data/taproot-ref/e4ed5b23d5de1068cbbde995bd4acee64e91aa7e create mode 100644 txscript/data/taproot-ref/e4f857e19db4cfd96f2d5054dbf40b5a9e492dff create mode 100644 txscript/data/taproot-ref/e4f9951077eb874d4585b5156eb27d51d2efbfd3 create mode 100644 txscript/data/taproot-ref/e50744f139df817035a18b49f300ba44cb0343d3 create mode 100644 txscript/data/taproot-ref/e50e205a1d18fcdba7e8e5fcee9033cc4707f9c7 create mode 100644 txscript/data/taproot-ref/e52cfe3453de9b1d75444df456949cb75040b8b6 create mode 100644 txscript/data/taproot-ref/e531badf585946f2d8e4ca711ad08bfab23b255d create mode 100644 txscript/data/taproot-ref/e556fbc1cbc098965abc9f19de4e699a65701b97 create mode 100644 txscript/data/taproot-ref/e5a06372794c8a0907ebcab73767cf918aac39aa create mode 100644 txscript/data/taproot-ref/e5c2adb3e9fbf1cd914078ec2a63b5eb9a6e3abe create mode 100644 txscript/data/taproot-ref/e5d4d4aeaf98b811a93af7c9329c6daf9589e991 create mode 100644 txscript/data/taproot-ref/e5d756b155e51281410e56562a664673b0c34fcd create mode 100644 txscript/data/taproot-ref/e60ac2a186190f5f41d0f98adb9107b436491c32 create mode 100644 txscript/data/taproot-ref/e617e275740cca2c1002733c0b62505410149814 create mode 100644 txscript/data/taproot-ref/e62e88a5e5a9d90dbb6072f7ccea09b105b0f310 create mode 100644 txscript/data/taproot-ref/e638e75f42344b0c3f6564246955fb5d040cf293 create mode 100644 txscript/data/taproot-ref/e649d79b9010e5f76ed8c6e317e55e0e91802bac create mode 100644 txscript/data/taproot-ref/e660a993ca6c73039fade4ba3407920ada89923e create mode 100644 txscript/data/taproot-ref/e66bd9898efc98f464bdb5ece0b4f62d602dc737 create mode 100644 txscript/data/taproot-ref/e677ad001a80f4218fcb1f38a8705f1d1caeb999 create mode 100644 txscript/data/taproot-ref/e68c741fb9f3bd4beb774a6295165f0719b15942 create mode 100644 txscript/data/taproot-ref/e69ec7f55ad3c08cfcb37946cda5c9e8bd2f23d4 create mode 100644 txscript/data/taproot-ref/e69f704fabb54c278ef86ba0a840cc8b462fd273 create mode 100644 txscript/data/taproot-ref/e6a0539a6bf9730e9f7197aac29cee83936137c2 create mode 100644 txscript/data/taproot-ref/e6beac0076a3f98639e16833588cb1f7c3630b56 create mode 100644 txscript/data/taproot-ref/e6c4139fc79b0036b50c35d40646356790b47698 create mode 100644 txscript/data/taproot-ref/e6d6a1ae86f60f1e63f309397a0008e6d4943d50 create mode 100644 txscript/data/taproot-ref/e6f3612a73d29882780cefe3d036f68100cf0c7b create mode 100644 txscript/data/taproot-ref/e721205c821d1cfd009e603052b5cee6c677c52a create mode 100644 txscript/data/taproot-ref/e72d5da834d577e08d8919888da3491b1cfc2395 create mode 100644 txscript/data/taproot-ref/e73715f248773b481cfeb2552aceaf18e4b03797 create mode 100644 txscript/data/taproot-ref/e7865be06886b6e888fd9d883d55c5faee586ef4 create mode 100644 txscript/data/taproot-ref/e7a375809c225d5450a212abb59a2046d1b5e007 create mode 100644 txscript/data/taproot-ref/e7c4905ac16a9774e7e810abf68b112d641b2d9e create mode 100644 txscript/data/taproot-ref/e7c5c79c85fb153f7749dd5dcfa97ac1401ef95c create mode 100644 txscript/data/taproot-ref/e7ccede981bb4c65fa47e7fa310a9348a7109ba3 create mode 100644 txscript/data/taproot-ref/e7d9419f6cc1411629e9a09076e350aef3f0adbb create mode 100644 txscript/data/taproot-ref/e7e9f1bdab686670c7fd4b590aaad6feacbbeb73 create mode 100644 txscript/data/taproot-ref/e7fc7fe2e56e39aff52a6c1a3f3ddb20c48651d6 create mode 100644 txscript/data/taproot-ref/e81dc94c8743dc71b11667a65c76c5ef0e8eaef8 create mode 100644 txscript/data/taproot-ref/e81ee8a9a2165602a74cee1bdc447e2da39ab762 create mode 100644 txscript/data/taproot-ref/e84308cd3dc05d65738bf940c73e11c1342f53dd create mode 100644 txscript/data/taproot-ref/e8597fda210c9006c4eb35f55099dd53f0804f47 create mode 100644 txscript/data/taproot-ref/e85ebbbabefe13b277bdb7bb290e81d48aaae843 create mode 100644 txscript/data/taproot-ref/e87e2014a5a0695a3cdffdfe859201eb8beb9fb0 create mode 100644 txscript/data/taproot-ref/e8ac301abd5dee5dd4ef8cb0670844bca13f0323 create mode 100644 txscript/data/taproot-ref/e8de8be751822aa2e8bcf086b89ae6ca68052255 create mode 100644 txscript/data/taproot-ref/e91b8692e5e50d7452d085b3580b9cdd1676e122 create mode 100644 txscript/data/taproot-ref/e93758815f2e92fcae33eeb424961ee124cec2c7 create mode 100644 txscript/data/taproot-ref/e9501001531cf5569b3b23daa63df0825b2e06f3 create mode 100644 txscript/data/taproot-ref/e98353914c5de48ee650dfff9741c1285bf29368 create mode 100644 txscript/data/taproot-ref/e9a85210b1a1018e7666d51f88430bb5d8bfdb3e create mode 100644 txscript/data/taproot-ref/e9b76d10a6eebe9f37aaf17e3c71921c02524b86 create mode 100644 txscript/data/taproot-ref/e9bf6e5a4cbd00e35ecd77dc39c1f9264b9f4dc1 create mode 100644 txscript/data/taproot-ref/e9c730fdf2c5807b82dd1e4d042e404651d4c118 create mode 100644 txscript/data/taproot-ref/e9d4196818fdc0fa92415cb4a2aff1b96c783b8b create mode 100644 txscript/data/taproot-ref/e9dbacbd2e05c550b025911cfa3ca5803dae805e create mode 100644 txscript/data/taproot-ref/e9ddf35ff01ae9bc71730f02a17a6079411fde98 create mode 100644 txscript/data/taproot-ref/ea1fa2cb1864ebe376683d33d94b64f0f54a43dd create mode 100644 txscript/data/taproot-ref/ea224ce2e986d690db2a198af3f98a8408cdb30e create mode 100644 txscript/data/taproot-ref/ea3247c42e38f93b6d8af0e43d7f34cc4bc25070 create mode 100644 txscript/data/taproot-ref/ea3a67eab454450f7603fe0cd98a27c731eb5d00 create mode 100644 txscript/data/taproot-ref/ea3f5822d3ff42dc536ca2f868583167e04fcb24 create mode 100644 txscript/data/taproot-ref/ea9383c734b03a942fd3c33b4cd6172b0c606aeb create mode 100644 txscript/data/taproot-ref/eaa2ec29b35602bac1202162cc43997d10f21ed3 create mode 100644 txscript/data/taproot-ref/eaa7b118760debbe1d5a3d4a62d81d966ab89097 create mode 100644 txscript/data/taproot-ref/eab77792be235dec9f3313676498d907e560b5cc create mode 100644 txscript/data/taproot-ref/eae489d9b326b6e764166ddf53140f5ddb3b425c create mode 100644 txscript/data/taproot-ref/eae7770e2a494f15bf0e76460740c8d2e1cbd22e create mode 100644 txscript/data/taproot-ref/eaee09f4a0e178165105cf2ccf81513fc80541b9 create mode 100644 txscript/data/taproot-ref/eaee80bfbe65037b08eeecc39e40e2b8276a958d create mode 100644 txscript/data/taproot-ref/eb0e20fe944dc77d38b2fc2582d02c80d3d9628f create mode 100644 txscript/data/taproot-ref/eb372b84ca640e23188861d0efa04be45ee5f243 create mode 100644 txscript/data/taproot-ref/eba9b48ee4b2ed1d213ff803ba46409241800f53 create mode 100644 txscript/data/taproot-ref/ebaab3cbf799854c56be5ea1c8570b79e12530d3 create mode 100644 txscript/data/taproot-ref/ec0558d3bd9826dcf5a547231702b26bb029d5b3 create mode 100644 txscript/data/taproot-ref/ec11e48dae90b65ac226a309a6ab974cfc87474a create mode 100644 txscript/data/taproot-ref/ec236a1ba693a15d7cd145cb072b03a9edafd25d create mode 100644 txscript/data/taproot-ref/ec2d9171350303a508d3a35306e1da95e2d45a8c create mode 100644 txscript/data/taproot-ref/ec3dc1b7325240192c1e37e75c29831fa68e98d4 create mode 100644 txscript/data/taproot-ref/ec4c99541792d43b2c11d31a995e9d4e6494735e create mode 100644 txscript/data/taproot-ref/ec5f10d715ff4121c9af8001b65d91bde62f884b create mode 100644 txscript/data/taproot-ref/ec7ac5952f631f170c9cf5ab7afb10a2800e3be7 create mode 100644 txscript/data/taproot-ref/ecc052cec3d69b0b941945fcfee7fcca160fee0f create mode 100644 txscript/data/taproot-ref/ed414b2d37754fddb26883baa6399318c130524f create mode 100644 txscript/data/taproot-ref/ed5648d424b5a21a684d02bc55bdcfab06ec276e create mode 100644 txscript/data/taproot-ref/edb0a385324372442f7d831b7fa747c2a2ba5d40 create mode 100644 txscript/data/taproot-ref/ede245d24c4ccbe651f556667d1de8b18984e6bf create mode 100644 txscript/data/taproot-ref/edf48d71ea536f47f2ebae0ef4c1a54805cfd2bf create mode 100644 txscript/data/taproot-ref/ee216fd86ba1f2f2eecc6892dba069f1fa7e2566 create mode 100644 txscript/data/taproot-ref/ee227dd2c697b5ad500c732edea24bd9f2ec08a7 create mode 100644 txscript/data/taproot-ref/ee39d37f93b56b4c318cb83ca60e411ee5c1abbb create mode 100644 txscript/data/taproot-ref/ee4391649d8b6cf1ed2a18eef419b54a19d2f481 create mode 100644 txscript/data/taproot-ref/ee4b75d279f94af5208664797cc453ca45044806 create mode 100644 txscript/data/taproot-ref/ee537050d4b74465e99c77d79aec50879344edb4 create mode 100644 txscript/data/taproot-ref/ee666d81fc0411dbdbf38406d49ba05685bee495 create mode 100644 txscript/data/taproot-ref/ee92d4d96303e7296f561d5b3efe262b3993bc85 create mode 100644 txscript/data/taproot-ref/eeb6e1a4eebe04ce7814c38efaf8b5b7e910296f create mode 100644 txscript/data/taproot-ref/eef8d1a1e8c3a9566015b3ae089052a50d3c3ddb create mode 100644 txscript/data/taproot-ref/ef1b9627be8307d947f73d84910a2d343187898a create mode 100644 txscript/data/taproot-ref/ef34d2a06ed043b1d7aa5c55d07e649a98e022d0 create mode 100644 txscript/data/taproot-ref/ef5018ccc4d868e150c22f85faea02a352f124d9 create mode 100644 txscript/data/taproot-ref/ef588660a2f4df9f52c4f476036ae92b435dd8be create mode 100644 txscript/data/taproot-ref/ef7b84160b7025ab4d29b8bb32de27500874c4e0 create mode 100644 txscript/data/taproot-ref/efab9adce18cdbdd285db520ec08c755b0916a2f create mode 100644 txscript/data/taproot-ref/efb25951d890dbd071c4a3811042fdb8e0bc4326 create mode 100644 txscript/data/taproot-ref/efb757b9644c060f72a7441ae9f0dbb05935ddee create mode 100644 txscript/data/taproot-ref/efbdf30300adcc55d7c50d4ec76a75496d6d7b7d create mode 100644 txscript/data/taproot-ref/efc4b323ebe3c0b9e2f2fd7168ab4437570a54e8 create mode 100644 txscript/data/taproot-ref/efce2a5687afc47a9a7951b0d14a86559eccd8af create mode 100644 txscript/data/taproot-ref/f00c95582e31d9827eabb236ee8b4b776907a667 create mode 100644 txscript/data/taproot-ref/f015ec4058e4e7ae0d1a64823882e2e3fe9f8bbd create mode 100644 txscript/data/taproot-ref/f04d521c21ed8372ae0bcf98ee15b6ca83c85bc2 create mode 100644 txscript/data/taproot-ref/f052250556f0a305782ffc367c106bf8213e5199 create mode 100644 txscript/data/taproot-ref/f0b8804a6b3fa0ab08fb2e07758480377e212f0b create mode 100644 txscript/data/taproot-ref/f0f31b265d33a5adb67af2f1fec8248f8855469e create mode 100644 txscript/data/taproot-ref/f111543d0f442f268353dbbbf00ebe24c21f930e create mode 100644 txscript/data/taproot-ref/f1439b2e5f242df93c3d5fd61e367f850098495b create mode 100644 txscript/data/taproot-ref/f150268fcc20d8c1e1607d773fe9c2af148e9e8e create mode 100644 txscript/data/taproot-ref/f1728d0e4771e35b1cb1998adc82e22eb67a65c9 create mode 100644 txscript/data/taproot-ref/f172e0269b4ce4678ade6f0ac95a9448d2453792 create mode 100644 txscript/data/taproot-ref/f17ba688055f4e28c6c763a1a67b55ffd27ab22b create mode 100644 txscript/data/taproot-ref/f18786606f38657d15f1d007fa2934ea6034a605 create mode 100644 txscript/data/taproot-ref/f1ab87a390b003a1f262909e41e5d3853c0dee70 create mode 100644 txscript/data/taproot-ref/f1ac308d98f3a982e3c86ebf022541b3c7a53857 create mode 100644 txscript/data/taproot-ref/f1b42b68e02cd3503158c2cedbad9f43b4a782fc create mode 100644 txscript/data/taproot-ref/f1b9e75c583d069af4d354379ec7cbf02e95c41d create mode 100644 txscript/data/taproot-ref/f1cfa6ecbcc68ba081804e6b531a970f6cc70cee create mode 100644 txscript/data/taproot-ref/f1d42d84bf3c0ea75c9ac6babfdb06afac572bfa create mode 100644 txscript/data/taproot-ref/f1e479e1e2ba063168c4201bc568c60b601c98f8 create mode 100644 txscript/data/taproot-ref/f20f49c8c8a09c2b68a66d3640886588c1e95299 create mode 100644 txscript/data/taproot-ref/f281cfc9b564fceae1f18905886e1a2ea6a79f8f create mode 100644 txscript/data/taproot-ref/f29cde4e4d18f502a83e953d7e6aafc162b49fb0 create mode 100644 txscript/data/taproot-ref/f2a7b6785e4184b100bb118d537c3e1fe7deed13 create mode 100644 txscript/data/taproot-ref/f2aed5fc63d1322cbfa59dc10fc63c5c13905bad create mode 100644 txscript/data/taproot-ref/f2b01b12b747c63ff84c1d178f5cd881a09d61d3 create mode 100644 txscript/data/taproot-ref/f2cf8fc04a84276827038c4814930bd1166dcb83 create mode 100644 txscript/data/taproot-ref/f306f010650c1ce3662a988f2d5c8848a114b742 create mode 100644 txscript/data/taproot-ref/f311f3194f27d91bd26c7ac20214d331ade7f1c9 create mode 100644 txscript/data/taproot-ref/f32541dee791305368453ac147924b5c2d9dfff7 create mode 100644 txscript/data/taproot-ref/f34aa9739565ceed4d2a67fa8e24e1cffda032d0 create mode 100644 txscript/data/taproot-ref/f36797074db1a3316cf9f79b8cedbea196a94883 create mode 100644 txscript/data/taproot-ref/f3a1124f0e210f773fcb446a4c6325838f796dcd create mode 100644 txscript/data/taproot-ref/f3abe34a0b2b561230223ebd55fa58c1abfa4752 create mode 100644 txscript/data/taproot-ref/f3aefeaaf417737c9b08ddb588ac8f34f1bfd7c0 create mode 100644 txscript/data/taproot-ref/f3b9a054bd33583afbecffad0407dcd117b60cb8 create mode 100644 txscript/data/taproot-ref/f3c37d9c9bc7bbacd5acc05ecfa2dd6b3e4079be create mode 100644 txscript/data/taproot-ref/f3dbd1cd81a692630c41a036e51a108069161d76 create mode 100644 txscript/data/taproot-ref/f41b245dc4b63227dcd52bf8df204c69ef2c632d create mode 100644 txscript/data/taproot-ref/f43a467e1ed501e4fae97b23c7ac5f51943b4a60 create mode 100644 txscript/data/taproot-ref/f4466a6264c406cffaf61cd062c6954b8145b827 create mode 100644 txscript/data/taproot-ref/f45bfc326aa2978cf872bbd25ac92e74c51b222c create mode 100644 txscript/data/taproot-ref/f4604f24ef1262cff35502c140d3a3ab09e62650 create mode 100644 txscript/data/taproot-ref/f47e1dd86121d4d47b5e315b8bc8f941d5c890ba create mode 100644 txscript/data/taproot-ref/f49204f8e85d64be3490b7843476939194bca10c create mode 100644 txscript/data/taproot-ref/f4cc235e3a3e0f11b34f866c952d52ba470ce96c create mode 100644 txscript/data/taproot-ref/f4e60bca3a955a55d00e4186db841023ceef4e20 create mode 100644 txscript/data/taproot-ref/f50995c18b1bea7d6e8f78c8db8139687517a781 create mode 100644 txscript/data/taproot-ref/f50bbc9cda906042a1e0c756df37b20c36a36df6 create mode 100644 txscript/data/taproot-ref/f54e6bed090f658f483733605be1def47c4a00f1 create mode 100644 txscript/data/taproot-ref/f5584e332423dfd006828addcbd73f040328b087 create mode 100644 txscript/data/taproot-ref/f558bde45b06e08703659c22eb17a9b25f4941d1 create mode 100644 txscript/data/taproot-ref/f560ba3291103bb7f5cc015586c6946d5f9e8857 create mode 100644 txscript/data/taproot-ref/f58c6d8117f18e36e7e31efdf23c18aea2a31b7c create mode 100644 txscript/data/taproot-ref/f5a0c3cda376e7bd8f7a27caa053bef8617f451b create mode 100644 txscript/data/taproot-ref/f5a0cbe081c8037a7f36d438e758b6bcd92abcbc create mode 100644 txscript/data/taproot-ref/f5a7ff2dc8ee9ec1ef36b73c60de71d7978d3d27 create mode 100644 txscript/data/taproot-ref/f5b5807a9afa7c7b8351abe9a32cdd85d696c15e create mode 100644 txscript/data/taproot-ref/f5bbca8f5a7339d3dab2b5f758f426cdb744dd6d create mode 100644 txscript/data/taproot-ref/f5bcbe0530388a9d1b0ddeb9fd52bbf9553589c1 create mode 100644 txscript/data/taproot-ref/f5d29c01f03e55e2269af62ed6364a98353003af create mode 100644 txscript/data/taproot-ref/f5d9f6f2aa6f7e44a24ecb63e2ccbe34ba6eecfe create mode 100644 txscript/data/taproot-ref/f5f01b555c46d9d86c043b50cdf0dc05ea4c3d08 create mode 100644 txscript/data/taproot-ref/f5f4bc663f8ff671a51d503c89c7a5659c0c37ab create mode 100644 txscript/data/taproot-ref/f614cb3aadb14fc4cea6a3fa949cf1c4a5aa490a create mode 100644 txscript/data/taproot-ref/f62efd7cbffa78cde24f12d7daf90b120c6b3e5f create mode 100644 txscript/data/taproot-ref/f6389882692a6a18e427b73ca3a0a34f645e476b create mode 100644 txscript/data/taproot-ref/f63afc3910d5b449d7d26586af8681218677fd6d create mode 100644 txscript/data/taproot-ref/f64c19e45d11b07f585d65dd6f72bcd502d95a0a create mode 100644 txscript/data/taproot-ref/f6514adef6dcf766ba7179320ec6c88126688614 create mode 100644 txscript/data/taproot-ref/f6765d4b30feb17d15d4bd81601ea5788d8d26ed create mode 100644 txscript/data/taproot-ref/f678ee4a403b466dde13be7e941db7ff7684a932 create mode 100644 txscript/data/taproot-ref/f67b572dbad35568f4ec9ba53cafa2997991340e create mode 100644 txscript/data/taproot-ref/f6840c641bb58cad923fc4f9c092164413ff4ce6 create mode 100644 txscript/data/taproot-ref/f6907b785c509927b03981052c87de1c9ae5f772 create mode 100644 txscript/data/taproot-ref/f69458974b285f9c2ac48a1bd10b3dff2d042a8d create mode 100644 txscript/data/taproot-ref/f6a06f14f3641278ceae3733db1a7eff71fb3629 create mode 100644 txscript/data/taproot-ref/f6c823a2b3203faddc06a15a61e6f0e3f3e7fe8e create mode 100644 txscript/data/taproot-ref/f6d3771166a0c4e00527b2be21466030fb499521 create mode 100644 txscript/data/taproot-ref/f6d618ef7f588f9fc237b18f4ad42a84337ec67e create mode 100644 txscript/data/taproot-ref/f6e85bce5c033f269bbb51eb480ff58e9d814ed5 create mode 100644 txscript/data/taproot-ref/f6f146c32b1b724af896fdd11df580e1dc8f0e35 create mode 100644 txscript/data/taproot-ref/f70b704bb277d70481b756371e4d92b9dadb2d85 create mode 100644 txscript/data/taproot-ref/f747e1181b2e9303715bc0aea1cfca3babf00705 create mode 100644 txscript/data/taproot-ref/f75c71bf10464658e79f72142b2c327cd6ca3347 create mode 100644 txscript/data/taproot-ref/f77abd655150de8bda3b775fd291d5b2bf27a1e6 create mode 100644 txscript/data/taproot-ref/f77e7d751660a7149e80488c8245aeb9be6eeb1d create mode 100644 txscript/data/taproot-ref/f796e5b0c5ce67017c553a21907fd6a51a1058eb create mode 100644 txscript/data/taproot-ref/f798f952feda25e6fc4b37a429dc368f73d0d158 create mode 100644 txscript/data/taproot-ref/f7a5375d5d273e7eda804ac9335745a3fcc568ae create mode 100644 txscript/data/taproot-ref/f7ab44a4e73a9b24bfff6a263c608abce5696639 create mode 100644 txscript/data/taproot-ref/f7b76430a96ffa6355eaf12167d0ef405e2669d8 create mode 100644 txscript/data/taproot-ref/f7bc805d350c55cd8e24def5b79ca3b2fe88ae80 create mode 100644 txscript/data/taproot-ref/f7c02de0b4f89c043a3ebcb28bcb0e1396fe0e23 create mode 100644 txscript/data/taproot-ref/f7c0db2c2ed3c1e6f19acace4e10c0a99df88018 create mode 100644 txscript/data/taproot-ref/f7dad92963bb917f67c0a5d9a11c7a623157603e create mode 100644 txscript/data/taproot-ref/f7e399c76d4ec4bad55a5e054f90aaefbbefd54a create mode 100644 txscript/data/taproot-ref/f7eb97d1c42b9d53be75b54f5a30490ace43fa77 create mode 100644 txscript/data/taproot-ref/f7f77a67d9bea0dcf7942ed62f29985930122ff0 create mode 100644 txscript/data/taproot-ref/f803ece8ba109526994448413d0b5389e89fec0b create mode 100644 txscript/data/taproot-ref/f808813d157995b8d10c3cffd1f2616528fdad1f create mode 100644 txscript/data/taproot-ref/f8136e4e492396052082b2d3eb7f45ce735b580e create mode 100644 txscript/data/taproot-ref/f82150120ceb9a7b6d24c8144a2fc40fca6c7ded create mode 100644 txscript/data/taproot-ref/f846835025106a0f7d7d18630b87f4321e626835 create mode 100644 txscript/data/taproot-ref/f84d4edb22fee2109b5e00fd5ac471e49c15e25c create mode 100644 txscript/data/taproot-ref/f86da2aa3ec8718d5308b84e38864225dfeb6819 create mode 100644 txscript/data/taproot-ref/f880da185f238333598d20ee2e139229db739f94 create mode 100644 txscript/data/taproot-ref/f881895a273c1bb8b76313a9f0ff65520ad27975 create mode 100644 txscript/data/taproot-ref/f8835febdb55dca918a36795f2203f4ee4a6b841 create mode 100644 txscript/data/taproot-ref/f8930f55c55efa927ccec4a3a273d7af679fe190 create mode 100644 txscript/data/taproot-ref/f8d8d11d95153ea9449df09e90a108d0d46dd36a create mode 100644 txscript/data/taproot-ref/f8e2668d6408cd99bb9b4144dccc869b5b5c3995 create mode 100644 txscript/data/taproot-ref/f8f8928329f1f5ae3c966fb5ec2113e076eafcfe create mode 100644 txscript/data/taproot-ref/f8f9451ddef15046ebb34b8ada8344e100e77c6b create mode 100644 txscript/data/taproot-ref/f90c809fa2d5593e55f0033ebff4eb6de3bf7a4d create mode 100644 txscript/data/taproot-ref/f92ae6d39d23d890f0a4bbb1700628cf97bfd5a6 create mode 100644 txscript/data/taproot-ref/f92ff19d417dd30243bf0048d8947d33b4bf7064 create mode 100644 txscript/data/taproot-ref/f950057a3fe68206273e224b1a0c92d75bf4cffd create mode 100644 txscript/data/taproot-ref/f9527f53e0c01295c939d322769c4900690eac47 create mode 100644 txscript/data/taproot-ref/f953c76798af4534303b789774638f6750bf064f create mode 100644 txscript/data/taproot-ref/f95a0a2fc49acea853b2fa634e154189153c8e19 create mode 100644 txscript/data/taproot-ref/f9ae968bede9072e9913f275110691863b21d704 create mode 100644 txscript/data/taproot-ref/f9e9604adf8a8fa70a8a2d8699243ba825c4c268 create mode 100644 txscript/data/taproot-ref/f9f75f9ba55d66c16536a85bc2406112ffaef2ff create mode 100644 txscript/data/taproot-ref/f9fc9e2a4f2af623fc883937402f30bb39d7194c create mode 100644 txscript/data/taproot-ref/f9fe421cb9a3952dc45c8d26a7ddd2f53b952533 create mode 100644 txscript/data/taproot-ref/fa167d1943fe2df543ef85cf25a11984cbd5a5a2 create mode 100644 txscript/data/taproot-ref/fa18264203439b69d71bc0bf47eb42c09a0276b5 create mode 100644 txscript/data/taproot-ref/fa2f957cce50a9e152ca7a429346901042de9fc5 create mode 100644 txscript/data/taproot-ref/fa49e364b5b789a639515d469e423d52b4437393 create mode 100644 txscript/data/taproot-ref/fa4c5cdf26645ea0534a498e6eed0980cfb7a7c8 create mode 100644 txscript/data/taproot-ref/fa597ee663f096b76cd93b293bc4d7f7aaefc262 create mode 100644 txscript/data/taproot-ref/fa5f468e5077c7552905d4b235d938ba656a8956 create mode 100644 txscript/data/taproot-ref/fa6ab5df5a5d808c4d736244d69510fa6e17f904 create mode 100644 txscript/data/taproot-ref/fa7d0a81564418a5df2eae24548c51be6486a4aa create mode 100644 txscript/data/taproot-ref/fa862d772ea0c551e8a2b2e955c3a314343a9249 create mode 100644 txscript/data/taproot-ref/fa8814b8ee8c8c0b59933c5df3e62bc70882f43c create mode 100644 txscript/data/taproot-ref/fa90b9f27b4ef61835f27c23a72f15ab0bc2f8d4 create mode 100644 txscript/data/taproot-ref/fab23300d1e8e0ac77217a22517738b6de5afead create mode 100644 txscript/data/taproot-ref/fac25d9ab05e1c85b45aa41798674daebf462237 create mode 100644 txscript/data/taproot-ref/fad3ceab7d42e3ad2e07e8e88420e42ecf4dd0b8 create mode 100644 txscript/data/taproot-ref/fae57409d88f4b4a8521c3bbd0560991c2a8986b create mode 100644 txscript/data/taproot-ref/fb0c60f40b98f2127746a9a359165bc8d41dcb8c create mode 100644 txscript/data/taproot-ref/fb18611c9ee4a416896469762bdeb28572310087 create mode 100644 txscript/data/taproot-ref/fb193ee81245f14d9b19cacbf56cbcb01dec02be create mode 100644 txscript/data/taproot-ref/fb3a40b01dd182dc32fd94d86be6aeec9cfda7dc create mode 100644 txscript/data/taproot-ref/fb3feed4650211ed4fd84c29e022288219979e4a create mode 100644 txscript/data/taproot-ref/fb47b82833fbb82a6a9844bcfa75012bfc49c9cf create mode 100644 txscript/data/taproot-ref/fb56305966435f548db004e141dd614dcb71150d create mode 100644 txscript/data/taproot-ref/fb6bbbb8192f592ebde7d1bb37924cade63c96c8 create mode 100644 txscript/data/taproot-ref/fb803c7f3034af611f6dd19c6cd55245f319dd86 create mode 100644 txscript/data/taproot-ref/fb84f0eaf5bbab71df0de66b8e502f2e52604fac create mode 100644 txscript/data/taproot-ref/fb964d7fe5e195fa98766d8c4058c8258646e95a create mode 100644 txscript/data/taproot-ref/fb9e6ec52fad74ca4a775818f110ba219adaadbb create mode 100644 txscript/data/taproot-ref/fba8bb171f6333a2f8f8099ed7061ca7507012bc create mode 100644 txscript/data/taproot-ref/fbae541afc8fd2842b660a15ba61db2dbd26dca5 create mode 100644 txscript/data/taproot-ref/fbd1df6484bc96485135c2b29c3b125355c62848 create mode 100644 txscript/data/taproot-ref/fbeb89304a55a7ab8a338b807ad02b8dd2ab9c28 create mode 100644 txscript/data/taproot-ref/fc1908d2145aa6f1cf830f6aeb9bf24470454805 create mode 100644 txscript/data/taproot-ref/fc6ad6441d0d3ba1260efa94e68b4af0576bf63f create mode 100644 txscript/data/taproot-ref/fc6e7fbd1048ad4d4f9eadb18d79a7ddaddee244 create mode 100644 txscript/data/taproot-ref/fc72b1ff88ff0bb9a8e7a27d860b1e727bc825b0 create mode 100644 txscript/data/taproot-ref/fc833899bb452572fe6f3e84efd6737cca4eb786 create mode 100644 txscript/data/taproot-ref/fc9c2ac36745e20f981008bf5f85f146b9c9dbb1 create mode 100644 txscript/data/taproot-ref/fcc3f72c08a026d3c0f4cc50227793a26fc3efeb create mode 100644 txscript/data/taproot-ref/fcd03d953e3452f116e4035d2029de953e62334d create mode 100644 txscript/data/taproot-ref/fcd91aa7ad2c0011f8f2516f5687f9e91aa76b71 create mode 100644 txscript/data/taproot-ref/fcda2ec36cb7652d368098a0c2ac64665164601f create mode 100644 txscript/data/taproot-ref/fd03276208dbd6219a958f47d888d22fa303e89e create mode 100644 txscript/data/taproot-ref/fd14286e8c496b3f62dea79de42d57a7b02b22fc create mode 100644 txscript/data/taproot-ref/fd1a057fd69f2113eeeafc133d9d51c7cded9125 create mode 100644 txscript/data/taproot-ref/fd1c6cdb67bcc23e0920c0b2724591695d7e88b1 create mode 100644 txscript/data/taproot-ref/fd1d4fb758440d51c0db63f8a401ad4f7dd1ba6d create mode 100644 txscript/data/taproot-ref/fd1f6bb68c1a0317e7fb3e9c65ce2b765717f38f create mode 100644 txscript/data/taproot-ref/fd275d920066468018b3ec78708e01bbf4634f89 create mode 100644 txscript/data/taproot-ref/fd30d1fabe3c70d63ebf6eb08fcc889f2062dd96 create mode 100644 txscript/data/taproot-ref/fd4b486776c7fc4e964a57db37f46b6fb893446f create mode 100644 txscript/data/taproot-ref/fde4e348195fef4158d57bce09b8132261e53404 create mode 100644 txscript/data/taproot-ref/fe3a254545ba65877f7f12c1957e6983a9540725 create mode 100644 txscript/data/taproot-ref/fe4991f96a4078203ed82f3dc9d57b0f5c8d7c31 create mode 100644 txscript/data/taproot-ref/fe5a94896e814e80a5d4f0d17825ea303d136807 create mode 100644 txscript/data/taproot-ref/fe754dfb4207b538736ac33f4d6d3a8b39ed7eb8 create mode 100644 txscript/data/taproot-ref/fe8a403b551fce23551c1a364c5d7a9bdf4082b4 create mode 100644 txscript/data/taproot-ref/fead4cb9efe769ed34fc79a6f7f7c301fa44b950 create mode 100644 txscript/data/taproot-ref/fec0428a7d5b4dd2f894abbef22a4fd55b125e79 create mode 100644 txscript/data/taproot-ref/fed7b4e8b0ffa8ba7ee920409e365993f8f23423 create mode 100644 txscript/data/taproot-ref/ff02cab52406b52d736534063539b815a83e9ec9 create mode 100644 txscript/data/taproot-ref/ff0c9a3fa047cac34488cf6902e39ceb0b31a1f2 create mode 100644 txscript/data/taproot-ref/ff0ecc250f060fadb2dfbc788f027f6c46ef6c40 create mode 100644 txscript/data/taproot-ref/ff269c4192d92ee1330ca6cb368ffaf3dec65d44 create mode 100644 txscript/data/taproot-ref/ffba9a51f35e6cfeb9726e3eb3551989a55a2ab6 create mode 100644 txscript/data/taproot-ref/ffbfc4371313a95615a944ca1fb473bf2569d7aa create mode 100644 txscript/data/taproot-ref/ffc6076c34629ad5d440389f97bac8efcd2db5b7 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/reference_test.go b/txscript/reference_test.go index d1f516ee2d..59acdb8da7 100644 --- a/txscript/reference_test.go +++ b/txscript/reference_test.go @@ -10,7 +10,9 @@ import ( "encoding/json" "errors" "fmt" + "io/fs" "io/ioutil" + "path/filepath" "strconv" "strings" "testing" @@ -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) } @@ -886,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/wire/bench_test.go b/wire/bench_test.go index c183df56e5..5176c962e8 100644 --- a/wire/bench_test.go +++ b/wire/bench_test.go @@ -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/msgtx.go b/wire/msgtx.go index 6cd591e3be..917a142e6e 100644 --- a/wire/msgtx.go +++ b/wire/msgtx.go @@ -550,7 +550,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 @@ -1005,9 +1005,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 From ba9fb8ece10e8a3019724f43147579d9429d387c Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Tue, 8 Mar 2022 18:13:55 -0800 Subject: [PATCH 332/419] chaincfg: add taproot BIP deployment parameters In this commit, we add the deployment parameters of taproot as specified in the deployment section of BIp 341: https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki#deployment. Take note of the custom activation threshold, as well as the specified min activation heights for mainnet only. --- chaincfg/params.go | 55 ++++++++++++++++++++++++++++++++++++++++++++++ rpcserver.go | 3 +++ 2 files changed, 58 insertions(+) diff --git a/chaincfg/params.go b/chaincfg/params.go index c8ddc85d69..8873390f86 100644 --- a/chaincfg/params.go +++ b/chaincfg/params.go @@ -140,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. @@ -370,6 +375,17 @@ var MainNetParams = Params{ 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, + }, }, // Mempool parameters @@ -469,6 +485,16 @@ var RegressionNetParams = Params{ time.Time{}, // Never expires. ), }, + DeploymentTaproot: { + BitNumber: 2, + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Time{}, // Always available for vote + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Time{}, // Never expires. + ), + CustomActivationThreshold: 1512, // 75% + }, }, // Mempool parameters @@ -586,6 +612,16 @@ var TestNet3Params = Params{ 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% + }, }, // Mempool parameters @@ -689,6 +725,16 @@ var SimNetParams = Params{ time.Time{}, // Never expires. ), }, + DeploymentTaproot: { + BitNumber: 2, + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Time{}, // Always available for vote + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Time{}, // Never expires. + ), + CustomActivationThreshold: 1815, // 90% + }, }, // Mempool parameters @@ -807,6 +853,15 @@ func CustomSignetParams(challenge []byte, dnsSeeds []DNSSeed) Params { time.Time{}, // Never expires ), }, + DeploymentTaproot: { + BitNumber: 29, + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Time{}, // Always available for vote + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Time{}, // Never expires + ), + }, }, // Mempool parameters diff --git a/rpcserver.go b/rpcserver.go index b8012b2b01..8aa3e19516 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -1259,6 +1259,9 @@ func handleGetBlockChainInfo(s *rpcServer, cmd interface{}, closeChan <-chan str case chaincfg.DeploymentSegwit: forkName = "segwit" + case chaincfg.DeploymentTaproot: + forkName = "taproot" + default: return nil, &btcjson.RPCError{ Code: btcjson.ErrRPCInternal.Code, From 23cf18b0505fe123d8ea89de9b98cdc73aa447f2 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Tue, 8 Mar 2022 18:24:45 -0800 Subject: [PATCH 333/419] blockchain: use taproot script flags for validation after activation --- blockchain/validate.go | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/blockchain/validate.go b/blockchain/validate.go index 575861e2d3..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/btcd/btcutil" ) const ( @@ -1218,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 From f7f7bb33c10e92829f95ce5f750690ba6b37a03d Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Tue, 8 Mar 2022 18:52:24 -0800 Subject: [PATCH 334/419] blockchain/indexers: add P2TR support to the addrindex --- blockchain/indexers/addrindex.go | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/blockchain/indexers/addrindex.go b/blockchain/indexers/addrindex.go index 2f0e2eeba1..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/btcd/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 @@ -573,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 From 6ab97a3dd82a6bb290ee9a779907d6768a79e0b4 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Wed, 9 Mar 2022 16:31:50 -0800 Subject: [PATCH 335/419] blockchain: fix IsSpeedy() bug, add more logging in BIP 9 state machine --- blockchain/thresholdstate.go | 25 +++++++++++++++++++++++++ blockchain/versionbits.go | 5 +++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/blockchain/thresholdstate.go b/blockchain/thresholdstate.go index b96c9bd3db..f1d7367493 100644 --- a/blockchain/thresholdstate.go +++ b/blockchain/thresholdstate.go @@ -171,6 +171,9 @@ func thresholdStateTransition(state ThresholdState, prevNode *blockNode, // speed deployments can only transition to failed // after a confirmation window. if !checker.IsSpeedy() && checker.HasEnded(prevNode) { + log.Infof("Moving from state=%v, to state=%v", state, + ThresholdFailed) + state = ThresholdFailed break } @@ -179,6 +182,9 @@ func thresholdStateTransition(state ThresholdState, prevNode *blockNode, // once its start time has been reached (and it hasn't // already expired per the above). if checker.HasStarted(prevNode) { + log.Infof("Moving from state=%v, to state=%v", state, + ThresholdStarted) + state = ThresholdStarted } @@ -187,6 +193,9 @@ func thresholdStateTransition(state ThresholdState, prevNode *blockNode, // expires before it is accepted and locked in, but // only if this deployment isn't speedy. if !checker.IsSpeedy() && checker.HasEnded(prevNode) { + log.Infof("Moving from state=%v, to state=%v", state, + ThresholdFailed) + state = ThresholdFailed break } @@ -214,13 +223,23 @@ func thresholdStateTransition(state ThresholdState, prevNode *blockNode, // period that voted for the rule change meets the // activation threshold. case count >= checker.RuleChangeActivationThreshold(): + log.Infof("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.Infof("Moving from state=%v, to state=%v", state, + ThresholdFailed) + state = ThresholdFailed + + default: + log.Infof("Still at state=%v, threshold=%v", state, + float64(count)/float64(checker.RuleChangeActivationThreshold())) } case ThresholdLockedIn: @@ -232,8 +251,14 @@ func thresholdStateTransition(state ThresholdState, prevNode *blockNode, // If we aren't eligible to active yet, then we'll just // stay in the locked in position. if !checker.EligibleToActivate(prevNode) { + log.Infof("Moving from state=%v, to state=%v", state, + ThresholdLockedIn) + state = ThresholdLockedIn } else { + log.Infof("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. diff --git a/blockchain/versionbits.go b/blockchain/versionbits.go index 0d1f898c0a..371d4f20e0 100644 --- a/blockchain/versionbits.go +++ b/blockchain/versionbits.go @@ -187,7 +187,7 @@ func (c deploymentChecker) HasEnded(blkNode *blockNode) bool { // This is part of the thresholdConditionChecker interface implementation. func (c deploymentChecker) RuleChangeActivationThreshold() uint32 { // Some deployments like taproot used a custom activation threshold - // that ovverides the network level threshold. + // that overrides the network level threshold. if c.deployment.CustomActivationThreshold != 0 { return c.deployment.CustomActivationThreshold } @@ -234,7 +234,8 @@ func (c deploymentChecker) EligibleToActivate(blkNode *blockNode) bool { // // This is part of the thresholdConditionChecker interface implementation. func (c deploymentChecker) IsSpeedy() bool { - return c.deployment.MinActivationHeight != 0 + return (c.deployment.MinActivationHeight != 0 || + c.deployment.CustomActivationThreshold != 0) } // Condition returns true when the specific bit defined by the deployment From 99e4e00345017a70eadc4e1d06353c56b23bb15c Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Tue, 15 Mar 2022 17:49:45 -0700 Subject: [PATCH 336/419] txscript: add more detailed taproot errors --- txscript/engine.go | 2 +- txscript/error.go | 51 +++++++++++++++++++++++++++++++++++++++++ txscript/error_test.go | 10 ++++++++ txscript/opcode.go | 10 ++++---- txscript/sigvalidate.go | 7 +++--- txscript/standard.go | 3 +-- txscript/taproot.go | 23 +++++++++++++------ 7 files changed, 87 insertions(+), 19 deletions(-) diff --git a/txscript/engine.go b/txscript/engine.go index 3c8f207636..7dfd092eae 100644 --- a/txscript/engine.go +++ b/txscript/engine.go @@ -178,7 +178,7 @@ func (t *taprootExecutionCtx) tallysigOp() error { t.sigOpsBudget -= sigOpsDelta if t.sigOpsBudget < 0 { - return fmt.Errorf("max sig ops exceeded") + return scriptError(ErrTaprootMaxSigOps, "") } return nil diff --git a/txscript/error.go b/txscript/error.go index 9170895425..072778a268 100644 --- a/txscript/error.go +++ b/txscript/error.go @@ -367,6 +367,47 @@ const ( // 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 @@ -443,6 +484,16 @@ var errorCodeStrings = map[ErrorCode]string{ 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 8a9cef0926..accdf11a8c 100644 --- a/txscript/error_test.go +++ b/txscript/error_test.go @@ -86,6 +86,16 @@ func TestErrorCodeStringer(t *testing.T) { {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/opcode.go b/txscript/opcode.go index 9819ee6510..6e0434423e 100644 --- a/txscript/opcode.go +++ b/txscript/opcode.go @@ -2038,14 +2038,14 @@ func opcodeCheckSig(op *opcode, data []byte, vm *Engine) error { } } - // Empty public keys immeidately cause execution to fail. + // Empty public keys immediately cause execution to fail. if len(pkBytes) == 0 { - return fmt.Errorf("nil pub key") + return scriptError(ErrTaprootPubkeyIsEmpty, "") } // If this is tapscript execution, and the signature was // actually an empty vector, then we push on an empty vector - // and continue execution from ther, but only if the pubkey + // and continue execution from there, but only if the pubkey // isn't empty. if len(fullSigBytes) == 0 { vm.dstack.PushByteArray([]byte{}) @@ -2143,9 +2143,9 @@ func opcodeCheckSigAdd(op *opcode, data []byte, vm *Engine) error { } } - // Empty public keys immeidately cause execution to fail. + // Empty public keys immediately cause execution to fail. if len(pubKeyBytes) == 0 { - return fmt.Errorf("nil pubkey") + return scriptError(ErrTaprootPubkeyIsEmpty, "") } // If the signature is empty, then we'll just push the value N back diff --git a/txscript/sigvalidate.go b/txscript/sigvalidate.go index 8d5a8eb590..0bd00c326d 100644 --- a/txscript/sigvalidate.go +++ b/txscript/sigvalidate.go @@ -291,8 +291,8 @@ func parseTaprootSigAndPubKey(pkBytes, rawSig []byte, // Otherwise, this is an invalid signature, so we need to bail out. default: - // TODO(roasbeef): do proper error here - return nil, nil, 0, fmt.Errorf("invalid sig len: %v", len(rawSig)) + str := fmt.Sprintf("invalid sig len: %v", len(rawSig)) + return nil, nil, 0, scriptError(ErrInvalidTaprootSigLen, str) } return pubKey, sig, sigHashType, nil @@ -402,8 +402,7 @@ func newBaseTapscriptSigVerifier(pkBytes, rawSig []byte, // If the public key is zero bytes, then this is invalid, and will fail // immediately. case 0: - // TODO(roasbeef): better erro - return nil, fmt.Errorf("pubkey is zero bytes") + return nil, scriptError(ErrTaprootPubkeyIsEmpty, "") // If the public key is 32 byte as we expect, then we'll parse things // as normal. diff --git a/txscript/standard.go b/txscript/standard.go index 2ad658304b..aa7a7970d7 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -482,8 +482,7 @@ func isAnnexedWitness(witness wire.TxWitness) bool { // witness doesn't contain an annex, then an error is returned. func extractAnnex(witness [][]byte) ([]byte, error) { if !isAnnexedWitness(witness) { - // TODO(roasbeef): make into actual type - return nil, fmt.Errorf("no witness annex") + return nil, scriptError(ErrWitnessHasNoAnnex, "") } lastElement := witness[len(witness)-1] diff --git a/txscript/taproot.go b/txscript/taproot.go index f07e4d015a..2e452f92d7 100644 --- a/txscript/taproot.go +++ b/txscript/taproot.go @@ -89,8 +89,7 @@ func VerifyTaprootKeySpend(witnessProgram []byte, rawSig []byte, tx *wire.MsgTx, return nil } - // TODO(roasbeef): add proper error - return fmt.Errorf("invalid sig") + return scriptError(ErrTaprootSigInvalid, "") } // ControlBlock houses the structured witness input for a taproot spend. This @@ -189,18 +188,24 @@ func ParseControlBlock(ctrlBlock []byte) (*ControlBlock, error) { // The control block must minimally have 33 bytes for the internal // public key and script leaf version. case len(ctrlBlock) < ControlBlockBaseSize: - return nil, fmt.Errorf("invalid control block size") + 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: - return nil, fmt.Errorf("invalid max block size") + 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: - return nil, fmt.Errorf("invalid max block size") + 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 @@ -347,7 +352,8 @@ func VerifyTaprootLeafCommitment(controlBlock *ControlBlock, // program passed in. expectedWitnessProgram := schnorr.SerializePubKey(taprootKey) if !bytes.Equal(expectedWitnessProgram, taprootWitnessProgram) { - return fmt.Errorf("invalid witness commitment") + + return scriptError(ErrTaprootMerkleProofInvalid, "") } // Finally, we'll verify that the parity of the y coordinate of the @@ -355,7 +361,10 @@ func VerifyTaprootLeafCommitment(controlBlock *ControlBlock, derivedYIsOdd := (taprootKey.SerializeCompressed()[0] == secp.PubKeyFormatCompressedOdd) if controlBlock.OutputKeyYIsOdd != derivedYIsOdd { - return fmt.Errorf("invalid witness commitment") + 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 From 30d58b98a16ef32caa475b49e9a58fd891af6e1c Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Tue, 15 Mar 2022 18:00:11 -0700 Subject: [PATCH 337/419] build: add temporary replace directives for btcec+chainhash This PR includes some changes to them, so we'll need to use a temporary replace directives to ensure the build passes. --- btcutil/go.mod | 4 ++++ btcutil/go.sum | 5 ----- btcutil/psbt/go.mod | 4 ++++ btcutil/psbt/go.sum | 4 ---- go.mod | 4 ++++ go.sum | 2 -- 6 files changed, 12 insertions(+), 11 deletions(-) diff --git a/btcutil/go.mod b/btcutil/go.mod index ba110830fa..9b3cc2afad 100644 --- a/btcutil/go.mod +++ b/btcutil/go.mod @@ -14,3 +14,7 @@ require ( ) replace github.com/btcsuite/btcd => ../ + +replace github.com/btcsuite/btcd/chaincfg/chainhash => ../chaincfg/chainhash + +replace github.com/btcsuite/btcd/btcec/v2 => ../btcec diff --git a/btcutil/go.sum b/btcutil/go.sum index 8617dd8351..6958d531e2 100644 --- a/btcutil/go.sum +++ b/btcutil/go.sum @@ -1,11 +1,6 @@ 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.1 h1:xxivBG6pU3wwxx9qPNZP+2K0PXO9VmFLaSrwOFr24Hw= -github.com/btcsuite/btcd/btcec/v2 v2.1.1/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 h1:MSskdM4/xJYcFzy0altH/C/xHopifpWzHUi1JeVI34Q= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/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= diff --git a/btcutil/psbt/go.mod b/btcutil/psbt/go.mod index 059bdab55c..868e433298 100644 --- a/btcutil/psbt/go.mod +++ b/btcutil/psbt/go.mod @@ -20,3 +20,7 @@ require ( replace github.com/btcsuite/btcd/btcutil => ../ replace github.com/btcsuite/btcd => ../.. + +replace github.com/btcsuite/btcd/chaincfg/chainhash => ../../chaincfg/chainhash + +replace github.com/btcsuite/btcd/btcec/v2 => ../../btcec diff --git a/btcutil/psbt/go.sum b/btcutil/psbt/go.sum index 3056278f02..8e55c769de 100644 --- a/btcutil/psbt/go.sum +++ b/btcutil/psbt/go.sum @@ -1,8 +1,4 @@ github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/btcsuite/btcd/btcec/v2 v2.1.1 h1:xxivBG6pU3wwxx9qPNZP+2K0PXO9VmFLaSrwOFr24Hw= -github.com/btcsuite/btcd/btcec/v2 v2.1.1/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0 h1:MSskdM4/xJYcFzy0altH/C/xHopifpWzHUi1JeVI34Q= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/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= diff --git a/go.mod b/go.mod index 732ed420c8..f5295d3abb 100644 --- a/go.mod +++ b/go.mod @@ -29,6 +29,10 @@ require ( replace github.com/btcsuite/btcd/btcutil => ./btcutil +replace github.com/btcsuite/btcd/chaincfg/chainhash => ./chaincfg/chainhash + +replace github.com/btcsuite/btcd/btcec/v2 => ./btcec + // The retract statements below fixes an accidental push of the tags of a btcd // fork. retract ( diff --git a/go.sum b/go.sum index 604e50543e..2dc38639a8 100644 --- a/go.sum +++ b/go.sum @@ -3,8 +3,6 @@ github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBA github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c/go.mod h1:tjmYdS6MLJ5/s0Fj4DbLgSbDHbEqLJrtnHecBFkdz5M= github.com/btcsuite/btcd/btcec/v2 v2.1.1 h1:xxivBG6pU3wwxx9qPNZP+2K0PXO9VmFLaSrwOFr24Hw= github.com/btcsuite/btcd/btcec/v2 v2.1.1/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0 h1:MSskdM4/xJYcFzy0altH/C/xHopifpWzHUi1JeVI34Q= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/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 h1:R/opQEbFEy9JGkIguV40SvRY1uliPX8ifOvi6ICsFCw= From c203b940f3c502fd97e69f5b5a54b5ae58c1c021 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Tue, 15 Mar 2022 18:42:10 -0700 Subject: [PATCH 338/419] build: update to btcec/v2.1.3 and chaincfg/chainhash v1.0.1 In this commit, we update the top level module to use the newly tagged sub-modules. Once we remove the circular dependant in these sub-modules, then we'll no longer have to do things like this. --- btcutil/go.mod | 8 ++------ btcutil/go.sum | 6 ++++++ btcutil/psbt/go.mod | 8 ++------ btcutil/psbt/go.sum | 5 +++++ go.mod | 8 ++------ go.sum | 7 +++++-- 6 files changed, 22 insertions(+), 20 deletions(-) diff --git a/btcutil/go.mod b/btcutil/go.mod index 9b3cc2afad..4f98f6939a 100644 --- a/btcutil/go.mod +++ b/btcutil/go.mod @@ -5,8 +5,8 @@ go 1.16 require ( github.com/aead/siphash v1.0.1 github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c - github.com/btcsuite/btcd/btcec/v2 v2.1.1 - github.com/btcsuite/btcd/chaincfg/chainhash v1.0.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 @@ -14,7 +14,3 @@ require ( ) replace github.com/btcsuite/btcd => ../ - -replace github.com/btcsuite/btcd/chaincfg/chainhash => ../chaincfg/chainhash - -replace github.com/btcsuite/btcd/btcec/v2 => ../btcec diff --git a/btcutil/go.sum b/btcutil/go.sum index 6958d531e2..e4f26dfd1c 100644 --- a/btcutil/go.sum +++ b/btcutil/go.sum @@ -1,6 +1,12 @@ 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= diff --git a/btcutil/psbt/go.mod b/btcutil/psbt/go.mod index 868e433298..c2e36ff4fa 100644 --- a/btcutil/psbt/go.mod +++ b/btcutil/psbt/go.mod @@ -4,9 +4,9 @@ go 1.17 require ( github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c - github.com/btcsuite/btcd/btcec/v2 v2.1.1 + 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.0 + github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 github.com/davecgh/go-spew v1.1.1 ) @@ -20,7 +20,3 @@ require ( replace github.com/btcsuite/btcd/btcutil => ../ replace github.com/btcsuite/btcd => ../.. - -replace github.com/btcsuite/btcd/chaincfg/chainhash => ../../chaincfg/chainhash - -replace github.com/btcsuite/btcd/btcec/v2 => ../../btcec diff --git a/btcutil/psbt/go.sum b/btcutil/psbt/go.sum index 8e55c769de..ccdbe0ae4f 100644 --- a/btcutil/psbt/go.sum +++ b/btcutil/psbt/go.sum @@ -1,4 +1,9 @@ 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= diff --git a/go.mod b/go.mod index f5295d3abb..b7ebe37c28 100644 --- a/go.mod +++ b/go.mod @@ -1,9 +1,9 @@ module github.com/btcsuite/btcd require ( - github.com/btcsuite/btcd/btcec/v2 v2.1.1 + 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.0 + github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792 @@ -29,10 +29,6 @@ require ( replace github.com/btcsuite/btcd/btcutil => ./btcutil -replace github.com/btcsuite/btcd/chaincfg/chainhash => ./chaincfg/chainhash - -replace github.com/btcsuite/btcd/btcec/v2 => ./btcec - // The retract statements below fixes an accidental push of the tags of a btcd // fork. retract ( diff --git a/go.sum b/go.sum index 2dc38639a8..15e6ac4b7c 100644 --- a/go.sum +++ b/go.sum @@ -1,8 +1,11 @@ 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.22.0-beta.0.20220111032746-97732e52810c/go.mod h1:tjmYdS6MLJ5/s0Fj4DbLgSbDHbEqLJrtnHecBFkdz5M= -github.com/btcsuite/btcd/btcec/v2 v2.1.1 h1:xxivBG6pU3wwxx9qPNZP+2K0PXO9VmFLaSrwOFr24Hw= -github.com/btcsuite/btcd/btcec/v2 v2.1.1/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= +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 h1:R/opQEbFEy9JGkIguV40SvRY1uliPX8ifOvi6ICsFCw= From 36e67158b28acb993c955705a7ce7f601e38d3ed Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Thu, 17 Mar 2022 17:56:37 -0700 Subject: [PATCH 339/419] blockchain: demote BIP 9 log statements In this commit, we demote a series of log statements added while debugging the modified BIP 9 state machine. These are rather spammy on mainnet, so we demote the transition logs (moving to a new state) to debug, and the remaining log (when we're still in started to trace). --- blockchain/thresholdstate.go | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/blockchain/thresholdstate.go b/blockchain/thresholdstate.go index f1d7367493..35653bf8fc 100644 --- a/blockchain/thresholdstate.go +++ b/blockchain/thresholdstate.go @@ -171,7 +171,7 @@ func thresholdStateTransition(state ThresholdState, prevNode *blockNode, // speed deployments can only transition to failed // after a confirmation window. if !checker.IsSpeedy() && checker.HasEnded(prevNode) { - log.Infof("Moving from state=%v, to state=%v", state, + log.Debugf("Moving from state=%v, to state=%v", state, ThresholdFailed) state = ThresholdFailed @@ -182,7 +182,7 @@ func thresholdStateTransition(state ThresholdState, prevNode *blockNode, // once its start time has been reached (and it hasn't // already expired per the above). if checker.HasStarted(prevNode) { - log.Infof("Moving from state=%v, to state=%v", state, + log.Debugf("Moving from state=%v, to state=%v", state, ThresholdStarted) state = ThresholdStarted @@ -193,7 +193,7 @@ func thresholdStateTransition(state ThresholdState, prevNode *blockNode, // expires before it is accepted and locked in, but // only if this deployment isn't speedy. if !checker.IsSpeedy() && checker.HasEnded(prevNode) { - log.Infof("Moving from state=%v, to state=%v", state, + log.Debugf("Moving from state=%v, to state=%v", state, ThresholdFailed) state = ThresholdFailed @@ -223,7 +223,7 @@ func thresholdStateTransition(state ThresholdState, prevNode *blockNode, // period that voted for the rule change meets the // activation threshold. case count >= checker.RuleChangeActivationThreshold(): - log.Infof("Moving from state=%v, to state=%v", state, + log.Debugf("Moving from state=%v, to state=%v", state, ThresholdLockedIn) state = ThresholdLockedIn @@ -232,13 +232,13 @@ func thresholdStateTransition(state ThresholdState, prevNode *blockNode, // threshold above, and the deployment has expired, then // we transition to failed. case checker.IsSpeedy() && checker.HasEnded(prevNode): - log.Infof("Moving from state=%v, to state=%v", state, + log.Debugf("Moving from state=%v, to state=%v", state, ThresholdFailed) state = ThresholdFailed default: - log.Infof("Still at state=%v, threshold=%v", state, + log.Tracef("Still at state=%v, threshold=%v", state, float64(count)/float64(checker.RuleChangeActivationThreshold())) } @@ -251,12 +251,12 @@ func thresholdStateTransition(state ThresholdState, prevNode *blockNode, // If we aren't eligible to active yet, then we'll just // stay in the locked in position. if !checker.EligibleToActivate(prevNode) { - log.Infof("Moving from state=%v, to state=%v", state, + log.Debugf("Moving from state=%v, to state=%v", state, ThresholdLockedIn) state = ThresholdLockedIn } else { - log.Infof("Moving from state=%v, to state=%v", state, + log.Debugf("Moving from state=%v, to state=%v", state, ThresholdActive) // The new rule becomes active when its From 56b048867b0f8a883413745d70e908d256266673 Mon Sep 17 00:00:00 2001 From: Oliver Gugger Date: Mon, 28 Mar 2022 10:14:43 +0200 Subject: [PATCH 340/419] psbt: allow empty bip32 derivation path 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. --- btcutil/psbt/bip32.go | 7 +++++-- btcutil/psbt/psbt_test.go | 3 ++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/btcutil/psbt/bip32.go b/btcutil/psbt/bip32.go index 9fbfc73b61..6b22dc0654 100644 --- a/btcutil/psbt/bip32.go +++ b/btcutil/psbt/bip32.go @@ -40,8 +40,11 @@ func (s Bip32Sorter) Less(i, j int) bool { // 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) { - - if len(path)%4 != 0 || len(path)/4-1 < 1 { + // 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 } diff --git a/btcutil/psbt/psbt_test.go b/btcutil/psbt/psbt_test.go index 12038fbfa0..4ce73f05a2 100644 --- a/btcutil/psbt/psbt_test.go +++ b/btcutil/psbt/psbt_test.go @@ -11,10 +11,10 @@ import ( "encoding/hex" "testing" + "github.com/btcsuite/btcd/btcutil" "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/txscript" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcd/btcutil" "github.com/davecgh/go-spew/spew" ) @@ -63,6 +63,7 @@ var validPsbtHex = map[int]string{ 3: "70736274ff0100a00200000002ab0949a08c5af7c49b8212f417e2f15ab3f5c33dcf153821a8139f877a5b7be40000000000feffffffab0949a08c5af7c49b8212f417e2f15ab3f5c33dcf153821a8139f877a5b7be40100000000feffffff02603bea0b000000001976a914768a40bbd740cbe81d988e71de2a4d5c71396b1d88ac8e240000000000001976a9146f4620b553fa095e721b9ee0efe9fa039cca459788ac00000000000100df0200000001268171371edff285e937adeea4b37b78000c0566cbb3ad64641713ca42171bf6000000006a473044022070b2245123e6bf474d60c5b50c043d4c691a5d2435f09a34a7662a9dc251790a022001329ca9dacf280bdf30740ec0390422422c81cb45839457aeb76fc12edd95b3012102657d118d3357b8e0f4c2cd46db7b39f6d9c38d9a70abcb9b2de5dc8dbfe4ce31feffffff02d3dff505000000001976a914d0c59903c5bac2868760e90fd521a4665aa7652088ac00e1f5050000000017a9143545e6e33b832c47050f24d3eeb93c9c03948bc787b32e13000001012000e1f5050000000017a9143545e6e33b832c47050f24d3eeb93c9c03948bc787010416001485d13537f2e265405a34dbafa9e3dda01fb8230800220202ead596687ca806043edc3de116cdf29d5e9257c196cd055cf698c8d02bf24e9910b4a6ba670000008000000080020000800022020394f62be9df19952c5587768aeb7698061ad2c4a25c894f47d8c162b4d7213d0510b4a6ba6700000080010000800200008000", 4: "70736274ff0100550200000001279a2323a5dfb51fc45f220fa58b0fc13e1e3342792a85d7e36cd6333b5cbc390000000000ffffffff01a05aea0b000000001976a914ffe9c0061097cc3b636f2cb0460fa4fc427d2b4588ac0000000000010120955eea0b0000000017a9146345200f68d189e1adc0df1c4d16ea8f14c0dbeb87220203b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd4646304302200424b58effaaa694e1559ea5c93bbfd4a89064224055cdf070b6771469442d07021f5c8eb0fea6516d60b8acb33ad64ede60e8785bfb3aa94b99bdf86151db9a9a010104220020771fd18ad459666dd49f3d564e3dbc42f4c84774e360ada16816a8ed488d5681010547522103b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd462103de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd52ae220603b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd4610b4a6ba67000000800000008004000080220603de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd10b4a6ba670000008000000080050000800000", 5: "70736274ff01003f0200000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffff010000000000000000036a010000000000000a0f0102030405060708090f0102030405060708090a0b0c0d0e0f0000", + 6: "70736274ff01003f0200000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffff010000000000000000036a010000000000002206030d097466b7f59162ac4d90bf65f2a31a8bad82fcd22e98138dcf279401939bd104ffffffff0a0f0102030405060708090f0102030405060708090a0b0c0d0e0f0000", } // These are all invalid PSBTs for the indicated From 511b4648786e12661b9bea7e3105f55b0abe8982 Mon Sep 17 00:00:00 2001 From: Elle Mouton Date: Wed, 6 Apr 2022 14:33:13 +0200 Subject: [PATCH 341/419] mempool: export check Standardness func --- mempool/mempool.go | 4 ++-- mempool/policy.go | 6 +++--- mempool/policy_test.go | 16 ++++++++-------- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/mempool/mempool.go b/mempool/mempool.go index f830a51382..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/btcd/btcutil" ) const ( @@ -989,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 { diff --git a/mempool/policy.go b/mempool/policy.go index edba16ac2e..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/btcd/btcutil" ) const ( @@ -275,14 +275,14 @@ func IsDust(txOut *wire.TxOut, minRelayTxFee btcutil.Amount) bool { 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 { diff --git a/mempool/policy_test.go b/mempool/policy_test.go index 5175b67999..1b29d71f1f 100644 --- a/mempool/policy_test.go +++ b/mempool/policy_test.go @@ -10,11 +10,11 @@ import ( "time" "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/btcd/btcutil" ) // TestCalcMinRequiredTxRelayFee tests the calcMinRequiredTxRelayFee API. @@ -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 From 71c844310a78c0eb58f38c4b09f41f89f5e26db6 Mon Sep 17 00:00:00 2001 From: James Smoot Date: Wed, 30 Mar 2022 18:44:30 -0700 Subject: [PATCH 342/419] Default to JSONRPC 1.0 if the rpcVersion empty --- btcjson/jsonrpc.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/btcjson/jsonrpc.go b/btcjson/jsonrpc.go index 553a7bc37f..ea4a213bca 100644 --- a/btcjson/jsonrpc.go +++ b/btcjson/jsonrpc.go @@ -157,6 +157,9 @@ func (request *Request) UnmarshalJSON(b []byte) error { // 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) From 796f1746b3ad3c88aa3a3369fc3483604f82f35d Mon Sep 17 00:00:00 2001 From: dekokun Date: Mon, 31 Jan 2022 19:20:35 +0900 Subject: [PATCH 343/419] btcjson: Update the fields of GetNetworkInfoResult Update the fields of GetNetworkInfoResult to reflect the current number of inbound and outbound peer connections. * ConnectionsIn - The number of inbound peer connections * ConnectionsOut - The number of outbound peer connections --- btcjson/chainsvrresults.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/btcjson/chainsvrresults.go b/btcjson/chainsvrresults.go index 7b771b12f7..4feaeda338 100644 --- a/btcjson/chainsvrresults.go +++ b/btcjson/chainsvrresults.go @@ -364,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"` From 67aad53f5eb1c696c5c1a8fb5c61fa54aebc5960 Mon Sep 17 00:00:00 2001 From: Tim Kuijsten Date: Tue, 22 Feb 2022 22:22:10 +0100 Subject: [PATCH 344/419] harden btcd on OpenBSD Restrict the available set of system calls to the daemon to the basic network and filesystem operations on OpenBSD. Further reduce potential harm by limiting file system access to the btcd data dir and the rpc files. --- btcd.go | 31 +++++++++++++++++++++++++++++++ ossec/ossec.go | 15 +++++++++++++++ ossec/ossec_openbsd.go | 17 +++++++++++++++++ 3 files changed, 63 insertions(+) create mode 100644 ossec/ossec.go create mode 100644 ossec/ossec_openbsd.go diff --git a/btcd.go b/btcd.go index 3ace182cd8..1d1784d509 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,6 +307,26 @@ 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() { // Block and transaction processing can cause bursty allocations. This // limits the garbage collector from excessively overallocating during 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) +} From 3faf68c8c57d925baea2bdcbcbc8a7efbbf99080 Mon Sep 17 00:00:00 2001 From: Tim Kuijsten Date: Tue, 22 Feb 2022 22:40:34 +0100 Subject: [PATCH 345/419] go mod tidy --- go.mod | 1 + 1 file changed, 1 insertion(+) diff --git a/go.mod b/go.mod index b7ebe37c28..2e3333acc1 100644 --- a/go.mod +++ b/go.mod @@ -16,6 +16,7 @@ require ( 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 ( From e0149d63a167f32c8358220e8df6b7f5647a5077 Mon Sep 17 00:00:00 2001 From: Harsha Goli Date: Mon, 7 Feb 2022 13:18:04 -0500 Subject: [PATCH 346/419] rpctest: ensure rpclisten is set to an available port --- integration/rpctest/rpc_harness.go | 61 ++++++++++++++++++++++-------- 1 file changed, 45 insertions(+), 16 deletions(-) diff --git a/integration/rpctest/rpc_harness.go b/integration/rpctest/rpc_harness.go index cb49e42c26..2cb7e56d26 100644 --- a/integration/rpctest/rpc_harness.go +++ b/integration/rpctest/rpc_harness.go @@ -7,20 +7,20 @@ package rpctest import ( "fmt" "io/ioutil" - "math/rand" "net" "os" "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/btcd/btcutil" ) const ( @@ -64,6 +64,19 @@ var ( // 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 @@ -509,24 +522,40 @@ func (h *Harness) GenerateAndSubmitBlockWithCustomCoinbaseOutputs( 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 -// picked at random between {min/max}PeerPort and {min/max}RPCPort respectively. +// 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" - - rand.Seed(time.Now().UnixNano()) + return fmt.Sprintf(ListenerFormat, NextAvailablePort()), + fmt.Sprintf(ListenerFormat, NextAvailablePort()) +} - portString := func(minPort, maxPort int) string { - port := minPort + rand.Intn(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. From 061aef98af1321d2cad437afcb7dcbd562a5b3b6 Mon Sep 17 00:00:00 2001 From: Jonathan Chappelow Date: Fri, 3 Dec 2021 14:30:36 -0600 Subject: [PATCH 347/419] btcjson: add addresstype arg to getnewaddress --- btcjson/jsonrpcerr.go | 3 +++ btcjson/walletsvrcmds.go | 8 +++++--- btcjson/walletsvrcmds_test.go | 14 ++++++++------ rpcclient/wallet.go | 8 ++++---- 4 files changed, 20 insertions(+), 13 deletions(-) diff --git a/btcjson/jsonrpcerr.go b/btcjson/jsonrpcerr.go index d67b58bbb6..e5872bc51b 100644 --- a/btcjson/jsonrpcerr.go +++ b/btcjson/jsonrpcerr.go @@ -117,6 +117,9 @@ const ( // 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 diff --git a/btcjson/walletsvrcmds.go b/btcjson/walletsvrcmds.go index 1e061529d3..e3efb2e431 100644 --- a/btcjson/walletsvrcmds.go +++ b/btcjson/walletsvrcmds.go @@ -242,7 +242,8 @@ func NewGetBalancesCmd() *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 @@ -250,9 +251,10 @@ 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, } } diff --git a/btcjson/walletsvrcmds_test.go b/btcjson/walletsvrcmds_test.go index 396153ef04..35d64240ec 100644 --- a/btcjson/walletsvrcmds_test.go +++ b/btcjson/walletsvrcmds_test.go @@ -379,24 +379,26 @@ func TestWalletSvrCmds(t *testing.T) { 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", newCmd: func() (interface{}, error) { - return btcjson.NewCmd("getnewaddress", "acct") + return btcjson.NewCmd("getnewaddress", "acct", "legacy") }, staticCmd: func() interface{} { - return btcjson.NewGetNewAddressCmd(btcjson.String("acct")) + return btcjson.NewGetNewAddressCmd(btcjson.String("acct"), btcjson.String("legacy")) }, - marshalled: `{"jsonrpc":"1.0","method":"getnewaddress","params":["acct"],"id":1}`, + marshalled: `{"jsonrpc":"1.0","method":"getnewaddress","params":["acct","legacy"],"id":1}`, unmarshalled: &btcjson.GetNewAddressCmd{ - Account: btcjson.String("acct"), + Account: btcjson.String("acct"), + AddressType: btcjson.String("legacy"), }, }, { diff --git a/rpcclient/wallet.go b/rpcclient/wallet.go index 7268ad0a19..6408fc5791 100644 --- a/rpcclient/wallet.go +++ b/rpcclient/wallet.go @@ -1089,8 +1089,8 @@ func (r FutureGetNewAddressResult) Receive() (btcutil.Address, error) { // returned instance. // // See GetNewAddress for the blocking version and more details. -func (c *Client) GetNewAddressAsync(account string) FutureGetNewAddressResult { - cmd := btcjson.NewGetNewAddressCmd(&account) +func (c *Client) GetNewAddressAsync(account, addrType string) FutureGetNewAddressResult { + cmd := btcjson.NewGetNewAddressCmd(&account, &addrType) result := FutureGetNewAddressResult{ network: c.chainParams, responseChannel: c.SendCmd(cmd), @@ -1100,8 +1100,8 @@ func (c *Client) GetNewAddressAsync(account string) FutureGetNewAddressResult { // 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() +func (c *Client) GetNewAddress(account, addrType string) (btcutil.Address, error) { + return c.GetNewAddressAsync(account, addrType).Receive() } // FutureGetRawChangeAddressResult is a future promise to deliver the result of From 7eaf36006375250bcb68c6b51d060533aaf719ea Mon Sep 17 00:00:00 2001 From: Jonathan Chappelow Date: Wed, 22 Dec 2021 10:55:09 -0600 Subject: [PATCH 348/419] btcjson: add addresstype arg to getrawchangeaddress --- btcjson/walletsvrcmds.go | 8 +++++--- btcjson/walletsvrcmds_test.go | 14 ++++++++------ rpcclient/wallet.go | 8 ++++---- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/btcjson/walletsvrcmds.go b/btcjson/walletsvrcmds.go index e3efb2e431..5983d3f783 100644 --- a/btcjson/walletsvrcmds.go +++ b/btcjson/walletsvrcmds.go @@ -260,7 +260,8 @@ func NewGetNewAddressCmd(account, addrType *string) *GetNewAddressCmd { // 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 @@ -268,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, } } diff --git a/btcjson/walletsvrcmds_test.go b/btcjson/walletsvrcmds_test.go index 35d64240ec..21e90c22fa 100644 --- a/btcjson/walletsvrcmds_test.go +++ b/btcjson/walletsvrcmds_test.go @@ -407,24 +407,26 @@ 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", newCmd: func() (interface{}, error) { - return btcjson.NewCmd("getrawchangeaddress", "acct") + return btcjson.NewCmd("getrawchangeaddress", "acct", "legacy") }, staticCmd: func() interface{} { - return btcjson.NewGetRawChangeAddressCmd(btcjson.String("acct")) + return btcjson.NewGetRawChangeAddressCmd(btcjson.String("acct"), btcjson.String("legacy")) }, - marshalled: `{"jsonrpc":"1.0","method":"getrawchangeaddress","params":["acct"],"id":1}`, + marshalled: `{"jsonrpc":"1.0","method":"getrawchangeaddress","params":["acct","legacy"],"id":1}`, unmarshalled: &btcjson.GetRawChangeAddressCmd{ - Account: btcjson.String("acct"), + Account: btcjson.String("acct"), + AddressType: btcjson.String("legacy"), }, }, { diff --git a/rpcclient/wallet.go b/rpcclient/wallet.go index 6408fc5791..8b2e158fda 100644 --- a/rpcclient/wallet.go +++ b/rpcclient/wallet.go @@ -1135,8 +1135,8 @@ func (r FutureGetRawChangeAddressResult) Receive() (btcutil.Address, error) { // function on the returned instance. // // See GetRawChangeAddress for the blocking version and more details. -func (c *Client) GetRawChangeAddressAsync(account string) FutureGetRawChangeAddressResult { - cmd := btcjson.NewGetRawChangeAddressCmd(&account) +func (c *Client) GetRawChangeAddressAsync(account, addrType string) FutureGetRawChangeAddressResult { + cmd := btcjson.NewGetRawChangeAddressCmd(&account, &addrType) result := FutureGetRawChangeAddressResult{ network: c.chainParams, responseChannel: c.SendCmd(cmd), @@ -1147,8 +1147,8 @@ func (c *Client) GetRawChangeAddressAsync(account string) FutureGetRawChangeAddr // GetRawChangeAddress 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) GetRawChangeAddress(account string) (btcutil.Address, error) { - return c.GetRawChangeAddressAsync(account).Receive() +func (c *Client) GetRawChangeAddress(account, addrType string) (btcutil.Address, error) { + return c.GetRawChangeAddressAsync(account, addrType).Receive() } // FutureAddWitnessAddressResult is a future promise to deliver the result of From d14f18d329f2fd30a0ebab60ce585d0f815fea52 Mon Sep 17 00:00:00 2001 From: Jonathan Chappelow Date: Tue, 22 Mar 2022 16:08:40 -0500 Subject: [PATCH 349/419] mempool: fix t.Fatal call with formatting directive --- mempool/mempool_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mempool/mempool_test.go b/mempool/mempool_test.go index 8df587f8a5..f0f8404cc7 100644 --- a/mempool/mempool_test.go +++ b/mempool/mempool_test.go @@ -14,11 +14,11 @@ import ( "github.com/btcsuite/btcd/blockchain" "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/btcd/btcutil" ) // fakeChain is used by the pool harness to provide generated test utxos and @@ -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)) } From d537492a5d68f0aad8a7aacc73a5d0c89fda5df0 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Sat, 2 Apr 2022 14:57:59 -0500 Subject: [PATCH 350/419] chaincfg: use lower custom activation threshold for regtest+simnet The existing values were copied over from the testnet deployment, which uses a much larger miner confirmation window. As a result, the main taproot deployment would require thousands of blocks to properly activate in development environments. --- chaincfg/params.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/chaincfg/params.go b/chaincfg/params.go index 8873390f86..2387c203ae 100644 --- a/chaincfg/params.go +++ b/chaincfg/params.go @@ -493,7 +493,7 @@ var RegressionNetParams = Params{ DeploymentEnder: NewMedianTimeDeploymentEnder( time.Time{}, // Never expires. ), - CustomActivationThreshold: 1512, // 75% + CustomActivationThreshold: 108, // Only needs 75% hash rate. }, }, @@ -733,7 +733,7 @@ var SimNetParams = Params{ DeploymentEnder: NewMedianTimeDeploymentEnder( time.Time{}, // Never expires. ), - CustomActivationThreshold: 1815, // 90% + CustomActivationThreshold: 75, // Only needs 75% hash rate. }, }, From 85b6f7ed2aaccd3ab17e909d34f8377ab5b2861e Mon Sep 17 00:00:00 2001 From: Torkel Rogstad Date: Thu, 26 Mar 2020 10:02:51 +0100 Subject: [PATCH 351/419] rpcclient: add getzmqnotifications RPC --- btcjson/chainsvrcmds_test.go | 12 +++++++ btcjson/chainsvrresults_test.go | 18 +++++++++- btcjson/zmqsvrcmds.go | 16 +++++++++ btcjson/zmqsvrresults.go | 63 +++++++++++++++++++++++++++++++++ rpcclient/zmq.go | 39 ++++++++++++++++++++ 5 files changed, 147 insertions(+), 1 deletion(-) create mode 100644 btcjson/zmqsvrcmds.go create mode 100644 btcjson/zmqsvrresults.go create mode 100644 rpcclient/zmq.go diff --git a/btcjson/chainsvrcmds_test.go b/btcjson/chainsvrcmds_test.go index 7d3a68dc41..99983288b1 100644 --- a/btcjson/chainsvrcmds_test.go +++ b/btcjson/chainsvrcmds_test.go @@ -1460,6 +1460,18 @@ func TestChainSvrCmds(t *testing.T) { 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)) diff --git a/btcjson/chainsvrresults_test.go b/btcjson/chainsvrresults_test.go index aee514a9a4..8a11197af2 100644 --- a/btcjson/chainsvrresults_test.go +++ b/btcjson/chainsvrresults_test.go @@ -6,12 +6,13 @@ package btcjson_test import ( "encoding/json" + "net/url" "reflect" "testing" "github.com/btcsuite/btcd/btcjson" - "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/btcutil" + "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/davecgh/go-spew/spew" ) @@ -72,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)) 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/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() +} From 3986702b97d3395d6283d2b62e2cc5c41f46e770 Mon Sep 17 00:00:00 2001 From: Anup Chenthamarakshan Date: Thu, 9 Dec 2021 20:57:11 -0800 Subject: [PATCH 352/419] btcd: don't override explicitly set GOGC If GOGC env var is explicitly set, use it. Otherwise, set GC to 10% (default). --- btcd.go | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/btcd.go b/btcd.go index 1d1784d509..aec55e06eb 100644 --- a/btcd.go +++ b/btcd.go @@ -328,11 +328,14 @@ func init() { } func main() { - // 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 { From 1eede8721cd96b82ba0278a164fab352729859ad Mon Sep 17 00:00:00 2001 From: vpereira01 <42812459+vpereira01@users.noreply.github.com> Date: Tue, 15 Mar 2022 22:27:25 +0000 Subject: [PATCH 353/419] Adds GH workflow to build docker images on version tags Adds a GitHub workflow, and custom docker file, using docker buildx which builds docker container images for common platforms and publishes these images to GitHub packages. --- .github/workflows/Dockerfile | 24 +++++++++++++++ .github/workflows/dimagespub.yml | 52 ++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 .github/workflows/Dockerfile create mode 100644 .github/workflows/dimagespub.yml diff --git a/.github/workflows/Dockerfile b/.github/workflows/Dockerfile new file mode 100644 index 0000000000..30cb21e4a4 --- /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.16.15-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"] \ No newline at end of file diff --git a/.github/workflows/dimagespub.yml b/.github/workflows/dimagespub.yml new file mode 100644 index 0000000000..23bd407a76 --- /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 }} \ No newline at end of file From b87a4f48353a4ec55b11fe47edd7069e14069575 Mon Sep 17 00:00:00 2001 From: vpereira01 <42812459+vpereira01@users.noreply.github.com> Date: Sat, 9 Apr 2022 17:04:59 +0100 Subject: [PATCH 354/419] Add LF to new files last line --- .github/workflows/Dockerfile | 2 +- .github/workflows/dimagespub.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/Dockerfile b/.github/workflows/Dockerfile index 30cb21e4a4..a5de0e7de0 100644 --- a/.github/workflows/Dockerfile +++ b/.github/workflows/Dockerfile @@ -21,4 +21,4 @@ COPY --from=build /go/bin /bin # 8333 Mainnet Bitcoin peer-to-peer port # 8334 Mainet RPC port EXPOSE 8333 8334 -ENTRYPOINT ["btcd"] \ No newline at end of file +ENTRYPOINT ["btcd"] diff --git a/.github/workflows/dimagespub.yml b/.github/workflows/dimagespub.yml index 23bd407a76..19056ee07b 100644 --- a/.github/workflows/dimagespub.yml +++ b/.github/workflows/dimagespub.yml @@ -49,4 +49,4 @@ jobs: labels: ${{ steps.meta.outputs.labels }} platforms: ${{ env.TPLATFORMS }} push: true - tags: ${{ steps.meta.outputs.tags }} \ No newline at end of file + tags: ${{ steps.meta.outputs.tags }} From e153fefbad89191a62bce20d473b2a0795a8213f Mon Sep 17 00:00:00 2001 From: vpereira01 <42812459+vpereira01@users.noreply.github.com> Date: Sat, 9 Apr 2022 17:16:06 +0100 Subject: [PATCH 355/419] Upgrade go docker builder image --- .github/workflows/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/Dockerfile b/.github/workflows/Dockerfile index a5de0e7de0..371931a5e4 100644 --- a/.github/workflows/Dockerfile +++ b/.github/workflows/Dockerfile @@ -5,7 +5,7 @@ ########################### # Build binaries stage ########################### -FROM --platform=$BUILDPLATFORM golang:1.16.15-alpine3.15 AS build +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 From eb2eeaf848032ad5235ed1cdb37519415f46e6bf Mon Sep 17 00:00:00 2001 From: Oliver Gugger Date: Tue, 12 Apr 2022 16:09:37 +0200 Subject: [PATCH 356/419] psbt: always use non witness serialization format BIP-0174 states that the transaction must be in the old serialization format (without witnesses). --- btcutil/psbt/psbt.go | 22 ++++++---------------- btcutil/psbt/psbt_test.go | 7 ++++--- 2 files changed, 10 insertions(+), 19 deletions(-) diff --git a/btcutil/psbt/psbt.go b/btcutil/psbt/psbt.go index 73126c3eb2..5ea51eead0 100644 --- a/btcutil/psbt/psbt.go +++ b/btcutil/psbt/psbt.go @@ -214,22 +214,12 @@ func NewFromRawBytes(r io.Reader, b64 bool) (*Packet, error) { return nil, err } msgTx := wire.NewMsgTx(2) - err = msgTx.Deserialize(bytes.NewReader(value)) + + // BIP-0174 states: "The transaction must be in the old serialization + // format (without witnesses)." + err = msgTx.DeserializeNoWitness(bytes.NewReader(value)) if err != nil { - // If there are no inputs in this yet incomplete transaction, - // the wire package still incorrectly assumes it's encoded in - // the witness format. We can fix this by just trying the non- - // witness encoding too. If that also fails, it's probably an - // invalid transaction. - msgTx = wire.NewMsgTx(2) - err2 := msgTx.DeserializeNoWitness(bytes.NewReader(value)) - - // If the second attempt also failed, something else is wrong - // and it probably makes more sense to return the original - // error instead of the error from the workaround. - if err2 != nil { - return nil, err - } + return nil, err } if !validateUnsignedTX(msgTx) { return nil, ErrInvalidRawTxSigned @@ -320,7 +310,7 @@ func (p *Packet) Serialize(w io.Writer) error { serializedTx := bytes.NewBuffer( make([]byte, 0, p.UnsignedTx.SerializeSize()), ) - if err := p.UnsignedTx.Serialize(serializedTx); err != nil { + if err := p.UnsignedTx.SerializeNoWitness(serializedTx); err != nil { return err } diff --git a/btcutil/psbt/psbt_test.go b/btcutil/psbt/psbt_test.go index 4ce73f05a2..8d66325ad2 100644 --- a/btcutil/psbt/psbt_test.go +++ b/btcutil/psbt/psbt_test.go @@ -64,6 +64,7 @@ var validPsbtHex = map[int]string{ 4: "70736274ff0100550200000001279a2323a5dfb51fc45f220fa58b0fc13e1e3342792a85d7e36cd6333b5cbc390000000000ffffffff01a05aea0b000000001976a914ffe9c0061097cc3b636f2cb0460fa4fc427d2b4588ac0000000000010120955eea0b0000000017a9146345200f68d189e1adc0df1c4d16ea8f14c0dbeb87220203b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd4646304302200424b58effaaa694e1559ea5c93bbfd4a89064224055cdf070b6771469442d07021f5c8eb0fea6516d60b8acb33ad64ede60e8785bfb3aa94b99bdf86151db9a9a010104220020771fd18ad459666dd49f3d564e3dbc42f4c84774e360ada16816a8ed488d5681010547522103b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd462103de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd52ae220603b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd4610b4a6ba67000000800000008004000080220603de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd10b4a6ba670000008000000080050000800000", 5: "70736274ff01003f0200000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffff010000000000000000036a010000000000000a0f0102030405060708090f0102030405060708090a0b0c0d0e0f0000", 6: "70736274ff01003f0200000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffff010000000000000000036a010000000000002206030d097466b7f59162ac4d90bf65f2a31a8bad82fcd22e98138dcf279401939bd104ffffffff0a0f0102030405060708090f0102030405060708090a0b0c0d0e0f0000", + 7: "70736274ff01002001000000000100000000000000000d6a0b68656c6c6f20776f726c64000000000000", } // These are all invalid PSBTs for the indicated @@ -115,7 +116,7 @@ var invalidPsbtHex = map[int]string{ // This tests that valid PSBT serializations can be parsed // into Psbt structs. func TestReadValidPsbtAndReserialize(t *testing.T) { - for _, v := range validPsbtHex { + for key, v := range validPsbtHex { PsbtBytes, err := hex.DecodeString(v) if err != nil { t.Fatalf("Unable to decode hex: %v", err) @@ -128,8 +129,8 @@ func TestReadValidPsbtAndReserialize(t *testing.T) { t.Fatalf("unable to parse psbt: %v", err) } - t.Logf("Successfully parsed test, got transaction: %v", - spew.Sdump(testPsbt.UnsignedTx)) + t.Logf("Successfully parsed test %d, got transaction: %v", + key, spew.Sdump(testPsbt.UnsignedTx)) var b bytes.Buffer err = testPsbt.Serialize(&b) From 788fb8faf83cee336e984ac9e0a33b4125544bca Mon Sep 17 00:00:00 2001 From: Jonathan Chappelow Date: Thu, 14 Apr 2022 11:25:56 -0500 Subject: [PATCH 357/419] rpcclient: add getnewaddresstype and revert breaking change This reverts the previous breaking change to the GetNewAddress and GetRawChangeAddress rpcclient.Client methods, and adds the methods GetNewAddressType and GetRawChangeAddressType for requesting an address of a certain type. This change allows the rpcclient package to continue to work with versions of the btcwallet app that do not recognize the address type parameter. --- btcjson/walletsvrcmds_test.go | 32 +++++++++++++++++-- rpcclient/wallet.go | 59 +++++++++++++++++++++++++++++------ 2 files changed, 80 insertions(+), 11 deletions(-) diff --git a/btcjson/walletsvrcmds_test.go b/btcjson/walletsvrcmds_test.go index 21e90c22fa..0b5355e511 100644 --- a/btcjson/walletsvrcmds_test.go +++ b/btcjson/walletsvrcmds_test.go @@ -388,7 +388,21 @@ func TestWalletSvrCmds(t *testing.T) { }, }, { - 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"), nil) + }, + marshalled: `{"jsonrpc":"1.0","method":"getnewaddress","params":["acct"],"id":1}`, + unmarshalled: &btcjson.GetNewAddressCmd{ + Account: btcjson.String("acct"), + AddressType: nil, + }, + }, + { + name: "getnewaddress optional acct and type", newCmd: func() (interface{}, error) { return btcjson.NewCmd("getnewaddress", "acct", "legacy") }, @@ -416,7 +430,21 @@ func TestWalletSvrCmds(t *testing.T) { }, }, { - 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"), nil) + }, + marshalled: `{"jsonrpc":"1.0","method":"getrawchangeaddress","params":["acct"],"id":1}`, + unmarshalled: &btcjson.GetRawChangeAddressCmd{ + Account: btcjson.String("acct"), + AddressType: nil, + }, + }, + { + name: "getrawchangeaddress optional acct and type", newCmd: func() (interface{}, error) { return btcjson.NewCmd("getrawchangeaddress", "acct", "legacy") }, diff --git a/rpcclient/wallet.go b/rpcclient/wallet.go index 8b2e158fda..64f1e40afa 100644 --- a/rpcclient/wallet.go +++ b/rpcclient/wallet.go @@ -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/btcd/btcutil" ) // ***************************** @@ -1089,8 +1089,8 @@ func (r FutureGetNewAddressResult) Receive() (btcutil.Address, error) { // returned instance. // // See GetNewAddress for the blocking version and more details. -func (c *Client) GetNewAddressAsync(account, addrType string) FutureGetNewAddressResult { - cmd := btcjson.NewGetNewAddressCmd(&account, &addrType) +func (c *Client) GetNewAddressAsync(account string) FutureGetNewAddressResult { + cmd := btcjson.NewGetNewAddressCmd(&account, nil) result := FutureGetNewAddressResult{ network: c.chainParams, responseChannel: c.SendCmd(cmd), @@ -1100,8 +1100,28 @@ func (c *Client) GetNewAddressAsync(account, addrType string) FutureGetNewAddres // GetNewAddress returns a new address, and decodes based on the client's // chain params. -func (c *Client) GetNewAddress(account, addrType string) (btcutil.Address, error) { - return c.GetNewAddressAsync(account, addrType).Receive() +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 @@ -1135,8 +1155,8 @@ func (r FutureGetRawChangeAddressResult) Receive() (btcutil.Address, error) { // function on the returned instance. // // See GetRawChangeAddress for the blocking version and more details. -func (c *Client) GetRawChangeAddressAsync(account, addrType string) FutureGetRawChangeAddressResult { - cmd := btcjson.NewGetRawChangeAddressCmd(&account, &addrType) +func (c *Client) GetRawChangeAddressAsync(account string) FutureGetRawChangeAddressResult { + cmd := btcjson.NewGetRawChangeAddressCmd(&account, nil) result := FutureGetRawChangeAddressResult{ network: c.chainParams, responseChannel: c.SendCmd(cmd), @@ -1147,8 +1167,29 @@ func (c *Client) GetRawChangeAddressAsync(account, addrType string) FutureGetRaw // GetRawChangeAddress 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) GetRawChangeAddress(account, addrType string) (btcutil.Address, error) { - return c.GetRawChangeAddressAsync(account, addrType).Receive() +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 From 1a65f1ccf02541f3ec19f8761ff269f0a7172d11 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Tue, 1 Mar 2022 18:39:37 -0800 Subject: [PATCH 358/419] btcec/schnorr/musig2: add key musig2 key aggregation routines In this commit, we add the set of key aggregation routines for musig2. This includes the main public key aggregation method, as well as the aggregation coefficient which is used to compute "mu" when signing. The logic in this implementation is based on the musig2 paper, as well as this spec: https://github.com/ElementsProject/secp256k1-zkp/blob/master/doc/musig-spec.mediawiki. --- btcec/schnorr/musig2/keys.go | 166 +++++++++++++++++++++++++++++++++++ 1 file changed, 166 insertions(+) create mode 100644 btcec/schnorr/musig2/keys.go diff --git a/btcec/schnorr/musig2/keys.go b/btcec/schnorr/musig2/keys.go new file mode 100644 index 0000000000..f69cc31063 --- /dev/null +++ b/btcec/schnorr/musig2/keys.go @@ -0,0 +1,166 @@ +// Copyright 2013-2022 The btcsuite developers + +package musig2 + +import ( + "bytes" + "sort" + + "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") +) + +// 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 { + keyIBytes := schnorr.SerializePubKey(s[i]) + keyJBytes := schnorr.SerializePubKey(s[j]) + + 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 schnorr 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 { + var keyBytes bytes.Buffer + + if sort { + keys = sortKeys(keys) + } + + for _, key := range keys { + keyBytes.Write(schnorr.SerializePubKey(key)) + } + + h := chainhash.TaggedHash(KeyAggTagList, keyBytes.Bytes()) + return h[:] +} + +// isSecondKey returns true if the passed public key is the second key in the +// (sorted) keySet passed. +func isSecondKey(keySet []*btcec.PublicKey, targetKey *btcec.PublicKey) bool { + // For this comparison, we want to compare the raw serialized version + // instead of the full pubkey, as it's possible we're dealing with a + // pubkey that _actually_ has an odd y coordinate. + equalBytes := func(a, b *btcec.PublicKey) bool { + return bytes.Equal( + schnorr.SerializePubKey(a), + schnorr.SerializePubKey(b), + ) + } + + for i := range keySet { + if !equalBytes(keySet[i], keySet[0]) { + return equalBytes(keySet[i], targetKey) + } + } + + return false +} + +// 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, sort bool) *btcec.ModNScalar { + + var mu btcec.ModNScalar + + // If this is the second key, then this coefficient is just one. + // + // TODO(roasbeef): use intermediate cache to keep track of the second + // key, can just store an index, otherwise this is O(n^2) + if isSecondKey(keySet, 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 bytes.Buffer + coefficientBytes.Write(keyHashFingerprint(keySet, sort)) + coefficientBytes.Write(schnorr.SerializePubKey(targetKey)) + + muHash := chainhash.TaggedHash(KeyAggTagCoeff, coefficientBytes.Bytes()) + + mu.SetByteSlice(muHash[:]) + + return &mu +} + +// TODO(roasbeef): make proper IsEven func + +// AggregateKeys takes a list of possibly unsorted keys and returns a single +// aggregated key as specified by the musig2 key aggregation algorithm. +func AggregateKeys(keys []*btcec.PublicKey, sort bool) *btcec.PublicKey { + // 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) + } + + // 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, sort) + btcec.ScalarMultNonConst(a, &keyJ, &tweakedKeyJ) + + // Finally accumulate this into the final key in an incremental + // fashion. + btcec.AddNonConst(&finalKeyJ, &tweakedKeyJ, &finalKeyJ) + } + + finalKeyJ.ToAffine() + return btcec.NewPublicKey(&finalKeyJ.X, &finalKeyJ.Y) +} From 8343e462a62e6aa6c5a19e4bf5a1e7eb8e94609a Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Tue, 1 Mar 2022 18:42:43 -0800 Subject: [PATCH 359/419] btcec/schnorr/musig2: add nonce generation & aggregation funcs In this commit, we add the ability to generate the secret+public nonces, as well as combine a series of nonces into a single combined nonce (which is used when doing multi signing). --- btcec/schnorr/musig2/nonces.go | 208 +++++++++++++++++++++++++++++++++ 1 file changed, 208 insertions(+) create mode 100644 btcec/schnorr/musig2/nonces.go diff --git a/btcec/schnorr/musig2/nonces.go b/btcec/schnorr/musig2/nonces.go new file mode 100644 index 0000000000..7f9339d217 --- /dev/null +++ b/btcec/schnorr/musig2/nonces.go @@ -0,0 +1,208 @@ +// 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 musig2 + +import ( + "crypto/rand" + + "github.com/btcsuite/btcd/btcec/v2" +) + +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 +) + +// 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 func(b []byte) (int, error) +} + +// defaultNonceGenOpts returns the default set of nonce generation options. +func defaultNonceGenOpts() *nonceGenOpts { + return &nonceGenOpts{ + // 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. + randReader: rand.Read, + } +} + +// 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) + } + + // Generate two 32-byte random values that'll be the private keys to + // the public nonces. + var k1, k2 [32]byte + if _, err := opts.randReader(k1[:]); err != nil { + return nil, err + } + if _, err := opts.randReader(k2[:]); err != nil { + return nil, err + } + + var nonces Nonces + + var k1Mod, k2Mod btcec.ModNScalar + k1Mod.SetBytes(&k1) + k2Mod.SetBytes(&k2) + + // The secret nonces are serialized as the concatenation of the two 32 + // byte secret nonce values. + 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.PublicKey, 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 + pubNonce, err := btcec.ParsePubKey( + slicer(pubNonceBytes), + ) + if err != nil { + return nil, err + } + + pubNonce.AsJacobian(&nonceJ) + 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, + ) + } + + // Now that we've aggregated all the points, we need to check + // if this point is the point at infinity, if so, then we'll + // just return the generator. At a later step, the malicious + // party will be detected. + if aggregateNonce == infinityPoint { + // TODO(roasbeef): better way to get the generator w/ + // the new API? -- via old curve params instead? + var generator btcec.JacobianPoint + one := new(btcec.ModNScalar).SetInt(1) + btcec.ScalarBaseMultNonConst(one, &generator) + + generator.ToAffine() + return btcec.NewPublicKey( + &generator.X, &generator.Y, + ), nil + } + + aggregateNonce.ToAffine() + return btcec.NewPublicKey( + &aggregateNonce.X, &aggregateNonce.Y, + ), 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[:], combinedNonce1.SerializeCompressed()) + copy( + finalNonce[btcec.PubKeyBytesLenCompressed:], + combinedNonce2.SerializeCompressed(), + ) + + return finalNonce, nil +} From bb7ba7b1fc64f71fed963e043274a49b7ea60449 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Tue, 1 Mar 2022 18:43:49 -0800 Subject: [PATCH 360/419] btcec/schnorr/musig2: add partial sig generation, validation, and combination In this commit, we build on the prior two commits by adding the ability to generate partial musig2 signatures, validate them individually, and finally combine them into a single signature. Much of the logic here is unoptimized, and will be optimized in a later commit. In addition, we also want to eventually have a nicer API to support the book keeping necessary during multi signing. --- btcec/schnorr/musig2/nonces.go | 2 +- btcec/schnorr/musig2/sign.go | 423 +++++++++++++++++++++++++++++++++ 2 files changed, 424 insertions(+), 1 deletion(-) create mode 100644 btcec/schnorr/musig2/sign.go diff --git a/btcec/schnorr/musig2/nonces.go b/btcec/schnorr/musig2/nonces.go index 7f9339d217..bebc327124 100644 --- a/btcec/schnorr/musig2/nonces.go +++ b/btcec/schnorr/musig2/nonces.go @@ -117,7 +117,7 @@ func GenNonces(options ...NonceGenOption) (*Nonces, error) { // 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) + nonces.PubNonce = secNonceToPubNonce(&nonces.SecNonce) return &nonces, nil } diff --git a/btcec/schnorr/musig2/sign.go b/btcec/schnorr/musig2/sign.go new file mode 100644 index 0000000000..3bce9f1561 --- /dev/null +++ b/btcec/schnorr/musig2/sign.go @@ -0,0 +1,423 @@ +// 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 musig2 + +import ( + "bytes" + "fmt" + + 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, + } +} + +// 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 +} + +// 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 + } +} + +// 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) + } + + // Next, we'll parse the public nonces into R1 and R2. + r1, err := btcec.ParsePubKey( + combinedNonce[:btcec.PubKeyBytesLenCompressed], + ) + if err != nil { + return nil, err + } + r2, err := btcec.ParsePubKey( + combinedNonce[btcec.PubKeyBytesLenCompressed:], + ) + if err != nil { + return nil, err + } + + // Next we'll construct the aggregated public key based on the set of + // signers. + combinedKey := AggregateKeys(pubKeys, opts.sortKeys) + + // 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[:]) + + var nonce, r1J, r2J btcec.JacobianPoint + r1.AsJacobian(&r1J) + r2.AsJacobian(&r2J) + + // 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 + btcec.ScalarMultNonConst(&nonceBlinder, &r2J, &r2J) + btcec.AddNonConst(&r1J, &r2J, &nonce) + + // If the combined nonce it eh point at infinity, then we'll bail out. + if nonce == infinityPoint { + return nil, ErrNoncePointAtInfinity + } + + // 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 + } + + // If the y coordinate of the public key is odd xor the y coordinate of + // the combined public key is odd, then we'll negate the private key. + pubKey := privKey.PubKey() + pubKeyYIsOdd := func() bool { + pubKeyBytes := pubKey.SerializeCompressed() + return pubKeyBytes[0] == secp.PubKeyFormatCompressedOdd + }() + combinedKeyYIsOdd := func() bool { + combinedKeyBytes := combinedKey.SerializeCompressed() + return combinedKeyBytes[0] == secp.PubKeyFormatCompressedOdd + }() + if pubKeyYIsOdd != combinedKeyYIsOdd { + privKeyScalar.Negate() + } + + // 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)) + challengeMsg.Write(msg[:]) + challengeBytes := chainhash.TaggedHash( + ChallengeHashTag, challengeMsg.Bytes(), + ) + var e btcec.ModNScalar + e.SetByteSlice(challengeBytes[:]) + + // Next, we'll compute mu, our aggregation coefficient for the key that + // we're signing with. + mu := aggregationCoefficient(pubKeys, pubKey, opts.sortKeys) + + // With mu constructed, we can finally generate our partial signature + // as: s = (k1_1 + b*k_2 + e*mu*d) mod n. + s := new(btcec.ModNScalar) + s.Add(&k1).Add(k2.Mul(&nonceBlinder)).Add(e.Mul(mu).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 := schnorr.SerializePubKey(signingKey) + 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. + // + // TODO(roasbeef): consolidate, new method + r1, err := btcec.ParsePubKey( + combinedNonce[:btcec.PubKeyBytesLenCompressed], + ) + if err != nil { + return err + } + r2, err := btcec.ParsePubKey( + combinedNonce[btcec.PubKeyBytesLenCompressed:], + ) + if err != nil { + return err + } + + // Next we'll construct the aggregated public key based on the set of + // signers. + combinedKey := AggregateKeys(keySet, opts.sortKeys) + + // 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[:]) + + var nonce, r1J, r2J btcec.JacobianPoint + r1.AsJacobian(&r1J) + r2.AsJacobian(&r2J) + + // 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 + 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. + pubNonce1, err := btcec.ParsePubKey( + pubNonce[:btcec.PubKeyBytesLenCompressed], + ) + if err != nil { + return err + } + pubNonce2, err := btcec.ParsePubKey( + pubNonce[btcec.PubKeyBytesLenCompressed:], + ) + if err != nil { + return err + } + + // 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, pubNonce1J, pubNonce2J btcec.JacobianPoint + pubNonce1.AsJacobian(&pubNonce1J) + pubNonce2.AsJacobian(&pubNonce2J) + btcec.ScalarMultNonConst(&nonceBlinder, &pubNonce2J, &pubNonce2J) + btcec.AddNonConst(&pubNonce1J, &pubNonce2J, &pubNonceJ) + + nonce.ToAffine() + + // If the combined nonce used in the challenge hash has an odd y + // coordinate, then we'll negate our final public nonce. + // + // TODO(roasbeef): make into func + if nonce.Y.IsOdd() { + pubNonceJ.ToAffine() + 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)) + challengeMsg.Write(msg[:]) + challengeBytes := chainhash.TaggedHash( + ChallengeHashTag, challengeMsg.Bytes(), + ) + var e btcec.ModNScalar + e.SetByteSlice(challengeBytes[:]) + + signingKey, err := schnorr.ParsePubKey(pubKey) + if err != nil { + return err + } + + // Next, we'll compute mu, our aggregation coefficient for the key that + // we're signing with. + mu := aggregationCoefficient(keySet, signingKey, opts.sortKeys) + + // If the combined key has an odd y coordinate, then we'll negate the + // signer key. + var signKeyJ btcec.JacobianPoint + signingKey.AsJacobian(&signKeyJ) + combinedKeyBytes := combinedKey.SerializeCompressed() + if combinedKeyBytes[0] == secp.PubKeyFormatCompressedOdd { + signKeyJ.ToAffine() + signKeyJ.Y.Negate(1) + signKeyJ.Y.Normalize() + } + + // In the final set, we'll check that: s*G == R' + e*mu*P. + var sG, rP btcec.JacobianPoint + btcec.ScalarBaseMultNonConst(s, &sG) + btcec.ScalarMultNonConst(e.Mul(mu), &signKeyJ, &rP) + btcec.AddNonConst(&rP, &pubNonceJ, &rP) + + sG.ToAffine() + rP.ToAffine() + + if sG != rP { + return ErrPartialSigInvalid + } + + return nil +} + +// 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) *schnorr.Signature { + + var combinedSig btcec.ModNScalar + for _, partialSig := range partialSigs { + combinedSig.Add(partialSig.S) + } + + // 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) +} From d25f072e715ba4d32469d1fd680e807fa0bfcba6 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Tue, 1 Mar 2022 18:48:09 -0800 Subject: [PATCH 361/419] btcec/schnorr/musig2: add test vectors from secp256k1-zkp In this commit, we add test vectors which are extracted from the secp256k1-zkp/ codebase and match up with the current draft specification. --- btcec/schnorr/musig2/musig2_test.go | 252 ++++++++++++++++++++++++++++ 1 file changed, 252 insertions(+) create mode 100644 btcec/schnorr/musig2/musig2_test.go diff --git a/btcec/schnorr/musig2/musig2_test.go b/btcec/schnorr/musig2/musig2_test.go new file mode 100644 index 0000000000..0b56f916ea --- /dev/null +++ b/btcec/schnorr/musig2/musig2_test.go @@ -0,0 +1,252 @@ +// 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 musig2 + +import ( + "bytes" + "crypto/sha256" + "encoding/hex" + "fmt" + "testing" + + "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/btcec/v2/schnorr" +) + +// TestMuSig2SgnTestVectors tests that this implementation of musig2 matches +// the secp256k1-zkp test vectors. +func TestMuSig2SignTestVectors(t *testing.T) { + t.Parallel() +} + +var ( + key1Bytes, _ = hex.DecodeString("F9308A019258C31049344F85F89D5229B53" + + "1C845836F99B08601F113BCE036F9") + key2Bytes, _ = hex.DecodeString("DFF1D77F2A671C5F36183726DB2341BE58F" + + "EAE1DA2DECED843240F7B502BA659") + key3Bytes, _ = hex.DecodeString("3590A94E768F8E1815C2F24B4D80A8E3149" + + "316C3518CE7B7AD338368D038CA66") + + testKeys = [][]byte{key1Bytes, key2Bytes, key3Bytes} + + keyCombo1, _ = hex.DecodeString("E5830140512195D74C8307E39637CBE5FB730EBEAB80EC514CF88A877CEEEE0B") + keyCombo2, _ = hex.DecodeString("D70CD69A2647F7390973DF48CBFA2CCC407B8B2D60B08C5F1641185C7998A290") + keyCombo3, _ = hex.DecodeString("81A8B093912C9E481408D09776CEFB48AEB8B65481B6BAAFB3C5810106717BEB") + keyCombo4, _ = hex.DecodeString("2EB18851887E7BDC5E830E89B19DDBC28078F1FA88AAD0AD01CA06FE4F80210B") +) + +// TestMuSig2KeyAggTestVectors tests that this implementation of musig2 key +// aggregation lines up with the secp256k1-zkp test vectors. +func TestMuSig2KeyAggTestVectors(t *testing.T) { + t.Parallel() + + testCases := []struct { + keyOrder []int + expectedKey []byte + }{ + // Keys in backwards lexicographical order. + { + keyOrder: []int{0, 1, 2}, + expectedKey: keyCombo1, + }, + + // Keys in sorted order. + { + keyOrder: []int{2, 1, 0}, + expectedKey: keyCombo2, + }, + + // Only the first key. + { + keyOrder: []int{0, 0, 0}, + expectedKey: keyCombo3, + }, + + // Duplicate the first key and second keys. + { + keyOrder: []int{0, 0, 1, 1}, + expectedKey: keyCombo4, + }, + } + for i, testCase := range testCases { + testName := fmt.Sprintf("%v", testCase.keyOrder) + t.Run(testName, func(t *testing.T) { + var keys []*btcec.PublicKey + for _, keyIndex := range testCase.keyOrder { + keyBytes := testKeys[keyIndex] + pub, err := schnorr.ParsePubKey(keyBytes) + if err != nil { + t.Fatalf("unable to parse pubkeys: %v", err) + } + + keys = append(keys, pub) + } + + combinedKey := AggregateKeys(keys, false) + combinedKeyBytes := schnorr.SerializePubKey(combinedKey) + if !bytes.Equal(combinedKeyBytes, testCase.expectedKey) { + t.Fatalf("case: #%v, invalid aggregation: "+ + "expected %x, got %x", i, testCase.expectedKey, + combinedKeyBytes) + } + }) + } +} + +func mustParseHex(str string) []byte { + b, err := hex.DecodeString(str) + if err != nil { + panic(fmt.Errorf("unable to parse hex: %v", err)) + } + + return b +} + +func parseKey(xHex string) *btcec.PublicKey { + xB, err := hex.DecodeString(xHex) + if err != nil { + panic(err) + } + + var x, y btcec.FieldVal + x.SetByteSlice(xB) + if !btcec.DecompressY(&x, false, &y) { + panic("x not on curve") + } + y.Normalize() + + return btcec.NewPublicKey(&x, &y) +} + +var ( + signSetPrivKey, _ = btcec.PrivKeyFromBytes( + mustParseHex("7FB9E0E687ADA1EEBF7ECFE2F21E73EBDB51A7D450948DFE8D76D7F2D1007671"), + ) + signSetPubKey, _ = schnorr.ParsePubKey(schnorr.SerializePubKey(signSetPrivKey.PubKey())) + + signTestMsg = mustParseHex("F95466D086770E689964664219266FE5ED215C92AE20BAB5C9D79ADDDDF3C0CF") + + signSetKey2, _ = schnorr.ParsePubKey( + mustParseHex("F9308A019258C31049344F85F89D5229B531C845836F99B086" + + "01F113BCE036F9"), + ) + signSetKey3, _ = schnorr.ParsePubKey( + mustParseHex("DFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843" + + "240F7B502BA659"), + ) + + signSetKeys = []*btcec.PublicKey{signSetPubKey, signSetKey2, signSetKey3} +) + +// TestMuSig2SigningTestVectors tests that the musig2 implementation produces +// the same set of signatures. +func TestMuSig2SigningTestVectors(t *testing.T) { + t.Parallel() + + var aggregatedNonce [PubNonceSize]byte + copy( + aggregatedNonce[:], + mustParseHex("028465FCF0BBDBCF443AABCCE533D42B4B5A10966AC09A49655E8C42DAAB8FCD61"), + ) + copy( + aggregatedNonce[33:], + mustParseHex("037496A3CC86926D452CAFCFD55D25972CA1675D549310DE296BFF42F72EEEA8C9"), + ) + + var secNonce [SecNonceSize]byte + copy(secNonce[:], mustParseHex("508B81A611F100A6B2B6B29656590898AF488BCF2E1F55CF22E5CFB84421FE61")) + copy(secNonce[32:], mustParseHex("FA27FD49B1D50085B481285E1CA205D55C82CC1B31FF5CD54A489829355901F7")) + + testCases := []struct { + keyOrder []int + expectedPartialSig []byte + }{ + { + keyOrder: []int{0, 1, 2}, + expectedPartialSig: mustParseHex("68537CC5234E505BD14061F8DA9E90C220A181855FD8BDB7F127BB12403B4D3B"), + }, + { + keyOrder: []int{1, 0, 2}, + expectedPartialSig: mustParseHex("2DF67BFFF18E3DE797E13C6475C963048138DAEC5CB20A357CECA7C8424295EA"), + }, + + { + keyOrder: []int{1, 2, 0}, + expectedPartialSig: mustParseHex("0D5B651E6DE34A29A12DE7A8B4183B4AE6A7F7FBE15CDCAFA4A3D1BCAABC7517"), + }, + } + + var msg [32]byte + copy(msg[:], signTestMsg) + + for _, testCase := range testCases { + testName := fmt.Sprintf("%v", testCase.keyOrder) + t.Run(testName, func(t *testing.T) { + keySet := make([]*btcec.PublicKey, 0, len(testCase.keyOrder)) + for _, keyIndex := range testCase.keyOrder { + keySet = append(keySet, signSetKeys[keyIndex]) + } + + partialSig, err := Sign( + secNonce, signSetPrivKey, aggregatedNonce, keySet, msg, + ) + if err != nil { + t.Fatalf("unable to generate partial sig: %v", err) + } + + var partialSigBytes [32]byte + partialSig.S.PutBytesUnchecked(partialSigBytes[:]) + + if !bytes.Equal(partialSigBytes[:], testCase.expectedPartialSig) { + t.Fatalf("sigs don't match: expected %x, got %x", + testCase.expectedPartialSig, partialSigBytes, + ) + } + }) + } +} + +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 { + return AggregateKeys(s.keys(), false) +} From 69a42a35663bfabd0219c0194b1a9468d6bf494d Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Tue, 1 Mar 2022 18:49:05 -0800 Subject: [PATCH 362/419] btcec/schnorr/musig2: add multi-party signing test case w/ 100 signers In this commit, we add a final test case that exercises the act of generating partial signatures amongst 100 signers, combining them into a single signature, and finally verifying to make sure the final signature is valid. --- btcec/schnorr/musig2/musig2_test.go | 76 +++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/btcec/schnorr/musig2/musig2_test.go b/btcec/schnorr/musig2/musig2_test.go index 0b56f916ea..8e3d3931c5 100644 --- a/btcec/schnorr/musig2/musig2_test.go +++ b/btcec/schnorr/musig2/musig2_test.go @@ -250,3 +250,79 @@ func (s signerSet) pubNonces() [][PubNonceSize]byte { func (s signerSet) combinedKey() *btcec.PublicKey { return AggregateKeys(s.keys(), false) } + +// 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() + + // First generate the private key, public key, and nonce for each + // signer. + numSigners := 100 + signers := make(signerSet, 0, numSigners) + for i := 0; i < numSigners; i++ { + 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) + } + + signers = append(signers, signer{ + privKey: privKey, + pubKey: pubKey, + nonces: nonces, + }) + } + + msg := sha256.Sum256([]byte("let's get taprooty")) + + // With the set of nonces generated, we can now generate our aggregate + // nonce. + combinedNonce, err := AggregateNonces(signers.pubNonces()) + if err != nil { + t.Fatalf("unable to gen nonces: %v", err) + } + + signerKeys := signers.keys() + combinedKey := signers.combinedKey() + + // Now for the signing phase: each signer will generate their partial + // signature and stash that away. We'll also store the final nonce as + // well, since we'll need that to validate the signature. + var finalNonce *btcec.PublicKey + for i := range signers { + signer := signers[i] + partialSig, err := Sign( + signer.nonces.SecNonce, signer.privKey, combinedNonce, + signerKeys, msg, + ) + if err != nil { + t.Fatalf("unable to generate partial sig: %v", err) + } + + signers[i].partialSig = partialSig + + if finalNonce == nil { + finalNonce = partialSig.R + } + } + + // Finally we'll combined all the nonces, and ensure that it validates + // as a single schnorr signature. + finalSig := CombineSigs(finalNonce, signers.partialSigs()) + if !finalSig.Verify(msg[:], combinedKey) { + t.Fatalf("final sig is invalid!") + } +} From 4b46b2298a690c4153a073c903c0a0d381796a35 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Wed, 9 Mar 2022 18:25:21 -0800 Subject: [PATCH 363/419] btcec/schnorr/musig2: add benchmarks --- btcec/schnorr/musig2/bench_test.go | 314 +++++++++++++++++++++++++++++ 1 file changed, 314 insertions(+) create mode 100644 btcec/schnorr/musig2/bench_test.go diff --git a/btcec/schnorr/musig2/bench_test.go b/btcec/schnorr/musig2/bench_test.go new file mode 100644 index 0000000000..8bb42247c5 --- /dev/null +++ b/btcec/schnorr/musig2/bench_test.go @@ -0,0 +1,314 @@ +// Copyright 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 musig2 + +import ( + "encoding/hex" + "fmt" + "testing" + + "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/btcec/v2/schnorr" + "github.com/decred/dcrd/dcrec/secp256k1/v4" +) + +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) { + privKey := secp256k1.NewPrivateKey(testPrivBytes) + + 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) + + nonces, err := GenNonces() + if err != nil { + b.Fatalf("unable to generate nonces: %v", err) + } + + 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( + nonces.SecNonce, privKey, combinedNonce, + keys, msg, signOpts..., + ) + } + + 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) { + privKey := secp256k1.NewPrivateKey(testPrivBytes) + + for _, numSigners := range []int{10, 100} { + for _, sortKeys := range []bool{true, false} { + name := fmt.Sprintf("sort_keys=%v/num_signers=%v", + sortKeys, numSigners) + + nonces, err := GenNonces() + if err != nil { + b.Fatalf("unable to generate nonces: %v", err) + } + + 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( + nonces.SecNonce, privKey, combinedNonce, + signers.keys(), msg, WithFastSign(), + ) + + keys := signers.keys() + pubKey := privKey.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( + nonces.PubNonce, combinedNonce, + keys, pubKey, msg, + ) + } + 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) + + b.Run(name, func(b *testing.B) { + b.ResetTimer() + b.ReportAllocs() + + aggKey := AggregateKeys(signerKeys, sortKeys) + + testKey = aggKey + }) + } + } +} From e85e7c3ac72eb14617e781d70bc057a5f4d49b44 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Thu, 10 Mar 2022 18:47:52 -0800 Subject: [PATCH 364/419] btcec/schnorr/musig2: optimize signing+verification In this commit, we optimize signing+verification mainly by only computing values once, and reducing allocations when possible. The following optimizations have been implemented: * Use a single buffer allocation in keyHashFingerprint to avoid dynamic buffer growth+re-sizing * Remove the isSecondKey computation and replace that with a single routine that computes the index of the second unique key. * Optimize keyHashFingerprint usage by only computing it once during signing +verification. A further optimization is possible: use the x coordinate of a key for comparisons instead of computing the full sexualision. We need to do the latter atm, as the X() method of the public key struct will allocate more memory as it allocate and sets the buffer in place. The final benchmarks of before and after this commit: benchmark old ns/op new ns/op delta BenchmarkPartialSign/num_signers=10/fast_sign=true/sort=true-8 1227374 1194047 -2.72% BenchmarkPartialSign/num_signers=10/fast_sign=true/sort=false-8 1217743 1191468 -2.16% BenchmarkPartialSign/num_signers=10/fast_sign=false/sort=true-8 2755544 2698827 -2.06% BenchmarkPartialSign/num_signers=10/fast_sign=false/sort=false-8 2754749 2694547 -2.19% BenchmarkPartialSign/num_signers=100/fast_sign=true/sort=true-8 12382654 10561204 -14.71% BenchmarkPartialSign/num_signers=100/fast_sign=true/sort=false-8 12260134 10315376 -15.86% BenchmarkPartialSign/num_signers=100/fast_sign=false/sort=true-8 24832061 22009935 -11.36% BenchmarkPartialSign/num_signers=100/fast_sign=false/sort=false-8 24650086 21022833 -14.71% BenchmarkPartialVerify/sort_keys=true/num_signers=10-8 1485787 1473377 -0.84% BenchmarkPartialVerify/sort_keys=false/num_signers=10-8 1447275 1465139 +1.23% BenchmarkPartialVerify/sort_keys=true/num_signers=100-8 12503482 10672618 -14.64% BenchmarkPartialVerify/sort_keys=false/num_signers=100-8 12388289 10581398 -14.59% BenchmarkCombineSigs/num_signers=10-8 0.00 0.00 +0.00% BenchmarkCombineSigs/num_signers=100-8 0.00 0.00 -1.95% BenchmarkAggregateNonces/num_signers=10-8 0.00 0.00 -0.76% BenchmarkAggregateNonces/num_signers=100-8 0.00 0.00 +1.13% BenchmarkAggregateKeys/num_signers=10/sort_keys=true-8 0.00 0.00 -0.09% BenchmarkAggregateKeys/num_signers=10/sort_keys=false-8 0.00 0.01 +559.94% BenchmarkAggregateKeys/num_signers=100/sort_keys=true-8 0.01 0.01 -11.30% BenchmarkAggregateKeys/num_signers=100/sort_keys=false-8 0.01 0.01 -11.66% benchmark old allocs new allocs delta BenchmarkPartialSign/num_signers=10/fast_sign=true/sort=true-8 458 269 -41.27% BenchmarkPartialSign/num_signers=10/fast_sign=true/sort=false-8 409 222 -45.72% BenchmarkPartialSign/num_signers=10/fast_sign=false/sort=true-8 892 524 -41.26% BenchmarkPartialSign/num_signers=10/fast_sign=false/sort=false-8 841 467 -44.47% BenchmarkPartialSign/num_signers=100/fast_sign=true/sort=true-8 14366 3089 -78.50% BenchmarkPartialSign/num_signers=100/fast_sign=true/sort=false-8 13143 1842 -85.98% BenchmarkPartialSign/num_signers=100/fast_sign=false/sort=true-8 27596 4964 -82.01% BenchmarkPartialSign/num_signers=100/fast_sign=false/sort=false-8 26309 3707 -85.91% BenchmarkPartialVerify/sort_keys=true/num_signers=10-8 430 243 -43.49% BenchmarkPartialVerify/sort_keys=false/num_signers=10-8 430 243 -43.49% BenchmarkPartialVerify/sort_keys=true/num_signers=100-8 13164 1863 -85.85% BenchmarkPartialVerify/sort_keys=false/num_signers=100-8 13164 1863 -85.85% BenchmarkCombineSigs/num_signers=10-8 0 0 +0.00% BenchmarkCombineSigs/num_signers=100-8 0 0 +0.00% BenchmarkAggregateNonces/num_signers=10-8 0 0 +0.00% BenchmarkAggregateNonces/num_signers=100-8 0 0 +0.00% BenchmarkAggregateKeys/num_signers=10/sort_keys=true-8 0 0 +0.00% BenchmarkAggregateKeys/num_signers=10/sort_keys=false-8 0 0 +0.00% BenchmarkAggregateKeys/num_signers=100/sort_keys=true-8 0 0 +0.00% BenchmarkAggregateKeys/num_signers=100/sort_keys=false-8 0 0 +0.00% benchmark old bytes new bytes delta BenchmarkPartialSign/num_signers=10/fast_sign=true/sort=true-8 27854 14878 -46.59% BenchmarkPartialSign/num_signers=10/fast_sign=true/sort=false-8 25508 12605 -50.58% BenchmarkPartialSign/num_signers=10/fast_sign=false/sort=true-8 54982 29476 -46.39% BenchmarkPartialSign/num_signers=10/fast_sign=false/sort=false-8 52581 26805 -49.02% BenchmarkPartialSign/num_signers=100/fast_sign=true/sort=true-8 1880138 166996 -91.12% BenchmarkPartialSign/num_signers=100/fast_sign=true/sort=false-8 1820561 106295 -94.16% BenchmarkPartialSign/num_signers=100/fast_sign=false/sort=true-8 3706291 275344 -92.57% BenchmarkPartialSign/num_signers=100/fast_sign=false/sort=false-8 3642725 214122 -94.12% BenchmarkPartialVerify/sort_keys=true/num_signers=10-8 26995 14078 -47.85% BenchmarkPartialVerify/sort_keys=false/num_signers=10-8 26980 14078 -47.82% BenchmarkPartialVerify/sort_keys=true/num_signers=100-8 1822043 107767 -94.09% BenchmarkPartialVerify/sort_keys=false/num_signers=100-8 1822046 107752 -94.09% BenchmarkCombineSigs/num_signers=10-8 0 0 +0.00% BenchmarkCombineSigs/num_signers=100-8 0 0 +0.00% BenchmarkAggregateNonces/num_signers=10-8 0 0 +0.00% BenchmarkAggregateNonces/num_signers=100-8 0 0 +0.00% BenchmarkAggregateKeys/num_signers=10/sort_keys=true-8 0 0 +0.00% BenchmarkAggregateKeys/num_signers=10/sort_keys=false-8 0 0 +0.00% BenchmarkAggregateKeys/num_signers=100/sort_keys=true-8 0 0 +0.00% BenchmarkAggregateKeys/num_signers=100/sort_keys=false-8 0 0 +0.00% --- btcec/schnorr/musig2/bench_test.go | 7 +- btcec/schnorr/musig2/keys.go | 134 ++++++++++++++++++++-------- btcec/schnorr/musig2/musig2_test.go | 10 ++- btcec/schnorr/musig2/sign.go | 27 ++++-- 4 files changed, 134 insertions(+), 44 deletions(-) diff --git a/btcec/schnorr/musig2/bench_test.go b/btcec/schnorr/musig2/bench_test.go index 8bb42247c5..6d008641a7 100644 --- a/btcec/schnorr/musig2/bench_test.go +++ b/btcec/schnorr/musig2/bench_test.go @@ -301,11 +301,16 @@ func BenchmarkAggregateKeys(b *testing.B) { name := fmt.Sprintf("num_signers=%v/sort_keys=%v", numSigners, sortKeys) + uniqueKeyIndex := secondUniqueKeyIndex(signerKeys) + b.Run(name, func(b *testing.B) { b.ResetTimer() b.ReportAllocs() - aggKey := AggregateKeys(signerKeys, sortKeys) + aggKey := AggregateKeys( + signerKeys, sortKeys, + WithUniqueKeyIndex(uniqueKeyIndex), + ) testKey = aggKey }) diff --git a/btcec/schnorr/musig2/keys.go b/btcec/schnorr/musig2/keys.go index f69cc31063..2d0f26e022 100644 --- a/btcec/schnorr/musig2/keys.go +++ b/btcec/schnorr/musig2/keys.go @@ -28,6 +28,7 @@ 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 := schnorr.SerializePubKey(s[i]) keyJBytes := schnorr.SerializePubKey(s[j]) @@ -62,12 +63,14 @@ func sortKeys(keys []*btcec.PublicKey) []*btcec.PublicKey { // for each key. The final computation is: // * H(tag=KeyAgg list, pk1 || pk2..) func keyHashFingerprint(keys []*btcec.PublicKey, sort bool) []byte { - var keyBytes bytes.Buffer - 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, 32*len(keys)) + keyBytes := bytes.NewBuffer(keyAggBuf[0:0]) for _, key := range keys { keyBytes.Write(schnorr.SerializePubKey(key)) } @@ -76,69 +79,128 @@ func keyHashFingerprint(keys []*btcec.PublicKey, sort bool) []byte { return h[:] } -// isSecondKey returns true if the passed public key is the second key in the -// (sorted) keySet passed. -func isSecondKey(keySet []*btcec.PublicKey, targetKey *btcec.PublicKey) bool { - // For this comparison, we want to compare the raw serialized version - // instead of the full pubkey, as it's possible we're dealing with a - // pubkey that _actually_ has an odd y coordinate. - equalBytes := func(a, b *btcec.PublicKey) bool { - return bytes.Equal( - schnorr.SerializePubKey(a), - schnorr.SerializePubKey(b), - ) - } - - for i := range keySet { - if !equalBytes(keySet[i], keySet[0]) { - return equalBytes(keySet[i], targetKey) - } - } - - return false +// keyBytesEqual returns true if two keys are the same from the PoV of BIP +// 340's 32-byte x-only public keys. +func keyBytesEqual(a, b *btcec.PublicKey) bool { + return bytes.Equal( + schnorr.SerializePubKey(a), + schnorr.SerializePubKey(b), + ) } // 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, sort bool) *btcec.ModNScalar { + 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. - // - // TODO(roasbeef): use intermediate cache to keep track of the second - // key, can just store an index, otherwise this is O(n^2) - if isSecondKey(keySet, targetKey) { + 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 bytes.Buffer - coefficientBytes.Write(keyHashFingerprint(keySet, sort)) - coefficientBytes.Write(schnorr.SerializePubKey(targetKey)) + var coefficientBytes [64]byte + copy(coefficientBytes[:], keysHash[:]) + copy(coefficientBytes[32:], schnorr.SerializePubKey(targetKey)) - muHash := chainhash.TaggedHash(KeyAggTagCoeff, coefficientBytes.Bytes()) + muHash := chainhash.TaggedHash(KeyAggTagCoeff, coefficientBytes[:]) mu.SetByteSlice(muHash[:]) return &mu } -// TODO(roasbeef): make proper IsEven func +// 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) int { + // 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 +} + +// 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 +} + +// 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 + } +} + +// defaultKeyAggOptions returns the set of default arguments for key +// aggregation. +func defaultKeyAggOptions() *keyAggOption { + return &keyAggOption{} +} // AggregateKeys takes a list of possibly unsorted keys and returns a single -// aggregated key as specified by the musig2 key aggregation algorithm. -func AggregateKeys(keys []*btcec.PublicKey, sort bool) *btcec.PublicKey { +// 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. +func AggregateKeys(keys []*btcec.PublicKey, sort bool, + keyOpts ...KeyAggOption) *btcec.PublicKey { + + // 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) + 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 @@ -153,7 +215,9 @@ func AggregateKeys(keys []*btcec.PublicKey, sort bool) *btcec.PublicKey { // 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, sort) + a := aggregationCoefficient( + keys, key, opts.keyHash, *opts.uniqueKeyIndex, + ) btcec.ScalarMultNonConst(a, &keyJ, &tweakedKeyJ) // Finally accumulate this into the final key in an incremental diff --git a/btcec/schnorr/musig2/musig2_test.go b/btcec/schnorr/musig2/musig2_test.go index 8e3d3931c5..edbff0b838 100644 --- a/btcec/schnorr/musig2/musig2_test.go +++ b/btcec/schnorr/musig2/musig2_test.go @@ -85,7 +85,10 @@ func TestMuSig2KeyAggTestVectors(t *testing.T) { keys = append(keys, pub) } - combinedKey := AggregateKeys(keys, false) + uniqueKeyIndex := secondUniqueKeyIndex(keys) + combinedKey := AggregateKeys( + keys, false, WithUniqueKeyIndex(uniqueKeyIndex), + ) combinedKeyBytes := schnorr.SerializePubKey(combinedKey) if !bytes.Equal(combinedKeyBytes, testCase.expectedKey) { t.Fatalf("case: #%v, invalid aggregation: "+ @@ -248,7 +251,10 @@ func (s signerSet) pubNonces() [][PubNonceSize]byte { } func (s signerSet) combinedKey() *btcec.PublicKey { - return AggregateKeys(s.keys(), false) + uniqueKeyIndex := secondUniqueKeyIndex(s.keys()) + return AggregateKeys( + s.keys(), false, WithUniqueKeyIndex(uniqueKeyIndex), + ) } // TestMuSigMultiParty tests that for a given set of 100 signers, we're able to diff --git a/btcec/schnorr/musig2/sign.go b/btcec/schnorr/musig2/sign.go index 3bce9f1561..11edcf8469 100644 --- a/btcec/schnorr/musig2/sign.go +++ b/btcec/schnorr/musig2/sign.go @@ -130,9 +130,17 @@ func Sign(secNonce [SecNonceSize]byte, privKey *btcec.PrivateKey, return nil, err } + // Compute the hash of all the keys here as we'll need it do aggregrate + // the keys and also at the final step of signing. + keysHash := keyHashFingerprint(pubKeys, opts.sortKeys) + // Next we'll construct the aggregated public key based on the set of // signers. - combinedKey := AggregateKeys(pubKeys, opts.sortKeys) + uniqueKeyIndex := secondUniqueKeyIndex(pubKeys) + combinedKey := AggregateKeys( + pubKeys, opts.sortKeys, WithKeysHash(keysHash), + WithUniqueKeyIndex(uniqueKeyIndex), + ) // Next we'll compute the value b, that blinds our second public // nonce: @@ -220,7 +228,7 @@ func Sign(secNonce [SecNonceSize]byte, privKey *btcec.PrivateKey, // Next, we'll compute mu, our aggregation coefficient for the key that // we're signing with. - mu := aggregationCoefficient(pubKeys, pubKey, opts.sortKeys) + mu := aggregationCoefficient(pubKeys, pubKey, keysHash, uniqueKeyIndex) // With mu constructed, we can finally generate our partial signature // as: s = (k1_1 + b*k_2 + e*mu*d) mod n. @@ -291,9 +299,18 @@ func verifyPartialSig(partialSig *PartialSignature, pubNonce [PubNonceSize]byte, return err } + // Compute the hash of all the keys here as we'll need it do aggregrate + // the keys and also at the final step of verification. + keysHash := keyHashFingerprint(keySet, opts.sortKeys) + + uniqueKeyIndex := secondUniqueKeyIndex(keySet) + // Next we'll construct the aggregated public key based on the set of // signers. - combinedKey := AggregateKeys(keySet, opts.sortKeys) + combinedKey := AggregateKeys( + keySet, opts.sortKeys, + WithKeysHash(keysHash), WithUniqueKeyIndex(uniqueKeyIndex), + ) // Next we'll compute the value b, that blinds our second public // nonce: @@ -345,8 +362,6 @@ func verifyPartialSig(partialSig *PartialSignature, pubNonce [PubNonceSize]byte, // If the combined nonce used in the challenge hash has an odd y // coordinate, then we'll negate our final public nonce. - // - // TODO(roasbeef): make into func if nonce.Y.IsOdd() { pubNonceJ.ToAffine() pubNonceJ.Y.Negate(1) @@ -375,7 +390,7 @@ func verifyPartialSig(partialSig *PartialSignature, pubNonce [PubNonceSize]byte, // Next, we'll compute mu, our aggregation coefficient for the key that // we're signing with. - mu := aggregationCoefficient(keySet, signingKey, opts.sortKeys) + mu := aggregationCoefficient(keySet, signingKey, keysHash, uniqueKeyIndex) // If the combined key has an odd y coordinate, then we'll negate the // signer key. From 743cbc840313efc82241252ba7e350bdfdae39b7 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Fri, 11 Mar 2022 19:00:33 -0800 Subject: [PATCH 365/419] btcec/schnorr/musig2: add safer signing API with Session+Context In this commit, we introduce an easier to use API for musig2 signing in the Session and Context structs. The Context struct represents a particular musig2 signing context which is defined by the set of signers. The struct can be serialized to disk as it contains no volatile information. A given context can be kept for each signer in the final set. The Session struct represents an ephemeral musig2 signing session. It handles nonce generation, key aggregation, nonce combination, signature combination, and final sig verification all in one API. The API also protects against nonce generation by not exposing nonces to the end user and also attempting to catch nonce re-use (assuming no process forking) across sessions. --- btcec/schnorr/musig2/bench_test.go | 40 ++-- btcec/schnorr/musig2/context.go | 305 ++++++++++++++++++++++++++++ btcec/schnorr/musig2/keys.go | 8 +- btcec/schnorr/musig2/musig2_test.go | 126 ++++++++---- btcec/schnorr/musig2/nonces.go | 13 +- btcec/schnorr/musig2/sign.go | 45 +++- btcec/schnorr/signature.go | 5 +- 7 files changed, 459 insertions(+), 83 deletions(-) create mode 100644 btcec/schnorr/musig2/context.go diff --git a/btcec/schnorr/musig2/bench_test.go b/btcec/schnorr/musig2/bench_test.go index 6d008641a7..c02ccf3e41 100644 --- a/btcec/schnorr/musig2/bench_test.go +++ b/btcec/schnorr/musig2/bench_test.go @@ -1,4 +1,4 @@ -// Copyright 2013-2016 The btcsuite developers +// 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. @@ -11,7 +11,6 @@ import ( "github.com/btcsuite/btcd/btcec/v2" "github.com/btcsuite/btcd/btcec/v2/schnorr" - "github.com/decred/dcrd/dcrec/secp256k1/v4" ) var ( @@ -74,19 +73,12 @@ var ( // signature factoring in if the keys are sorted and also if we're in fast sign // mode. func BenchmarkPartialSign(b *testing.B) { - privKey := secp256k1.NewPrivateKey(testPrivBytes) - 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) - nonces, err := GenNonces() - if err != nil { - b.Fatalf("unable to generate nonces: %v", err) - } - signers := make(signerSet, numSigners) for i := 0; i < numSigners; i++ { signers[i] = genSigner(b) @@ -118,9 +110,12 @@ func BenchmarkPartialSign(b *testing.B) { for i := 0; i < b.N; i++ { sig, err = Sign( - nonces.SecNonce, privKey, combinedNonce, - keys, msg, signOpts..., + signers[0].nonces.SecNonce, signers[0].privKey, + combinedNonce, keys, msg, signOpts..., ) + if err != nil { + b.Fatalf("unable to generate sig: %v", err) + } } testSig = sig @@ -138,18 +133,11 @@ var sigOk bool // BenchmarkPartialVerify benchmarks how long it takes to verify a partial // signature. func BenchmarkPartialVerify(b *testing.B) { - privKey := secp256k1.NewPrivateKey(testPrivBytes) - for _, numSigners := range []int{10, 100} { for _, sortKeys := range []bool{true, false} { name := fmt.Sprintf("sort_keys=%v/num_signers=%v", sortKeys, numSigners) - nonces, err := GenNonces() - if err != nil { - b.Fatalf("unable to generate nonces: %v", err) - } - signers := make(signerSet, numSigners) for i := 0; i < numSigners; i++ { signers[i] = genSigner(b) @@ -172,12 +160,15 @@ func BenchmarkPartialVerify(b *testing.B) { b.ResetTimer() sig, err = Sign( - nonces.SecNonce, privKey, combinedNonce, - signers.keys(), msg, WithFastSign(), + 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 := privKey.PubKey() + pubKey := signers[0].pubKey b.Run(name, func(b *testing.B) { var signOpts []SignOption @@ -193,9 +184,12 @@ func BenchmarkPartialVerify(b *testing.B) { var ok bool for i := 0; i < b.N; i++ { ok = sig.Verify( - nonces.PubNonce, combinedNonce, + signers[0].nonces.PubNonce, combinedNonce, keys, pubKey, msg, ) + if !ok { + b.Fatalf("generated invalid sig!") + } } sigOk = ok }) @@ -301,7 +295,7 @@ func BenchmarkAggregateKeys(b *testing.B) { name := fmt.Sprintf("num_signers=%v/sort_keys=%v", numSigners, sortKeys) - uniqueKeyIndex := secondUniqueKeyIndex(signerKeys) + uniqueKeyIndex := secondUniqueKeyIndex(signerKeys, false) b.Run(name, func(b *testing.B) { b.ResetTimer() diff --git a/btcec/schnorr/musig2/context.go b/btcec/schnorr/musig2/context.go new file mode 100644 index 0000000000..22bd2b236f --- /dev/null +++ b/btcec/schnorr/musig2/context.go @@ -0,0 +1,305 @@ +// 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 ( + // 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") + + // 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") +) + +// 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 + + // keySet is the set of all signers. + keySet []*btcec.PublicKey + + // combinedKey is the aggregated public key. + combinedKey *btcec.PublicKey + + // 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 + + // shouldSort keeps track of if the public keys should be sorted before + // any operations. + shouldSort bool +} + +// 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, + signers []*btcec.PublicKey, shouldSort bool) (*Context, error) { + + // As a sanity check, make sure the signing key is actually amongst the sit + // of signers. + // + // TODO(roasbeef): instead have pass all the _other_ signers? + pubKey, err := schnorr.ParsePubKey( + schnorr.SerializePubKey(signingKey.PubKey()), + ) + if err != nil { + return nil, err + } + + var keyFound bool + for _, key := range signers { + if key.IsEqual(pubKey) { + keyFound = true + break + } + } + if !keyFound { + return nil, 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. + keysHash := keyHashFingerprint(signers, shouldSort) + uniqueKeyIndex := secondUniqueKeyIndex(signers, shouldSort) + + // Next, we'll use this information to compute the aggregated public + // key that'll be used for signing in practice. + combinedKey := AggregateKeys( + signers, shouldSort, WithKeysHash(keysHash), + WithUniqueKeyIndex(uniqueKeyIndex), + ) + + return &Context{ + signingKey: signingKey, + pubKey: pubKey, + keySet: signers, + combinedKey: combinedKey, + uniqueKeyIndex: uniqueKeyIndex, + keysHash: keysHash, + shouldSort: shouldSort, + }, nil +} + +// CombinedKey returns the combined public key that will be used to generate +// multi-signatures against. +func (c *Context) CombinedKey() btcec.PublicKey { + return *c.combinedKey +} + +// 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.keySet)) + copy(keys, c.keySet) + + return keys +} + +// 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 { + 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() (*Session, error) { + localNonces, err := GenNonces() + if err != nil { + return nil, err + } + + s := &Session{ + ctx: c, + localNonces: localNonces, + pubNonces: make([][PubNonceSize]byte, 0, len(c.keySet)), + sigs: make([]*PartialSignature, 0, len(c.keySet)), + } + + 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) == len(s.ctx.keySet) + if haveAllNonces { + return false, nil + } + + // 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) == len(s.ctx.keySet) + + // 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) { + + s.msg = msg + + 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 + } + + partialSig, err := Sign( + s.localNonces.SecNonce, s.ctx.signingKey, *s.combinedNonce, + s.ctx.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.ourSig = partialSig + s.sigs = append(s.sigs, partialSig) + + return partialSig, nil +} + +// CombineSigs 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.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.keySet) + + // If we have all the signatures, then we can combine them all into the + // final signature. + if haveAllSigs { + finalSig := CombineSigs(s.ourSig.R, s.sigs) + + // 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) { + 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/keys.go b/btcec/schnorr/musig2/keys.go index 2d0f26e022..7c756697eb 100644 --- a/btcec/schnorr/musig2/keys.go +++ b/btcec/schnorr/musig2/keys.go @@ -118,7 +118,11 @@ func aggregationCoefficient(keySet []*btcec.PublicKey, // 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) int { +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 { @@ -197,7 +201,7 @@ func AggregateKeys(keys []*btcec.PublicKey, sort bool, // 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) + idx := secondUniqueKeyIndex(keys, sort) opts.uniqueKeyIndex = &idx } diff --git a/btcec/schnorr/musig2/musig2_test.go b/btcec/schnorr/musig2/musig2_test.go index edbff0b838..0c8af2fca0 100644 --- a/btcec/schnorr/musig2/musig2_test.go +++ b/btcec/schnorr/musig2/musig2_test.go @@ -1,7 +1,4 @@ -// 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. +// Copyright 2013-2022 The btcsuite developers package musig2 @@ -10,6 +7,7 @@ import ( "crypto/sha256" "encoding/hex" "fmt" + "sync" "testing" "github.com/btcsuite/btcd/btcec/v2" @@ -85,7 +83,7 @@ func TestMuSig2KeyAggTestVectors(t *testing.T) { keys = append(keys, pub) } - uniqueKeyIndex := secondUniqueKeyIndex(keys) + uniqueKeyIndex := secondUniqueKeyIndex(keys, false) combinedKey := AggregateKeys( keys, false, WithUniqueKeyIndex(uniqueKeyIndex), ) @@ -194,7 +192,8 @@ func TestMuSig2SigningTestVectors(t *testing.T) { } partialSig, err := Sign( - secNonce, signSetPrivKey, aggregatedNonce, keySet, msg, + secNonce, signSetPrivKey, aggregatedNonce, + keySet, msg, ) if err != nil { t.Fatalf("unable to generate partial sig: %v", err) @@ -251,7 +250,7 @@ func (s signerSet) pubNonces() [][PubNonceSize]byte { } func (s signerSet) combinedKey() *btcec.PublicKey { - uniqueKeyIndex := secondUniqueKeyIndex(s.keys()) + uniqueKeyIndex := secondUniqueKeyIndex(s.keys(), false) return AggregateKeys( s.keys(), false, WithUniqueKeyIndex(uniqueKeyIndex), ) @@ -263,10 +262,11 @@ func (s signerSet) combinedKey() *btcec.PublicKey { func TestMuSigMultiParty(t *testing.T) { t.Parallel() - // First generate the private key, public key, and nonce for each - // signer. - numSigners := 100 - signers := make(signerSet, 0, numSigners) + 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 { @@ -280,55 +280,105 @@ func TestMuSigMultiParty(t *testing.T) { t.Fatalf("unable to gen key: %v", err) } - nonces, err := GenNonces() + signerKeys[i] = privKey + signSet[i] = pubKey + } + + var combinedKey *btcec.PublicKey + + // 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, signSet, false) if err != nil { - t.Fatalf("unable to gen nonces: %v", err) + t.Fatalf("unable to generate context: %v", err) } - signers = append(signers, signer{ - privKey: privKey, - pubKey: pubKey, - nonces: nonces, - }) + if combinedKey == nil { + k := signCtx.CombinedKey() + combinedKey = &k + } + + session, err := signCtx.NewSession() + if err != nil { + t.Fatalf("unable to generate new session: %v", err) + } + signers[i] = session } - msg := sha256.Sum256([]byte("let's get taprooty")) + // 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 - // With the set of nonces generated, we can now generate our aggregate - // nonce. - combinedNonce, err := AggregateNonces(signers.pubNonces()) - if err != nil { - t.Fatalf("unable to gen nonces: %v", err) + 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) } - signerKeys := signers.keys() - combinedKey := signers.combinedKey() + wg.Wait() + + msg := sha256.Sum256([]byte("let's get taprooty")) - // Now for the signing phase: each signer will generate their partial - // signature and stash that away. We'll also store the final nonce as - // well, since we'll need that to validate the signature. - var finalNonce *btcec.PublicKey + // 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 := Sign( - signer.nonces.SecNonce, signer.privKey, combinedNonce, - signerKeys, msg, - ) + partialSig, err := signer.Sign(msg) if err != nil { t.Fatalf("unable to generate partial sig: %v", err) } - signers[i].partialSig = partialSig + // 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 finalNonce == nil { - finalNonce = partialSig.R + 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 := CombineSigs(finalNonce, signers.partialSigs()) + 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") + } + } } diff --git a/btcec/schnorr/musig2/nonces.go b/btcec/schnorr/musig2/nonces.go index bebc327124..4fd76450d9 100644 --- a/btcec/schnorr/musig2/nonces.go +++ b/btcec/schnorr/musig2/nonces.go @@ -1,7 +1,4 @@ -// 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. +// Copyright 2013-2022 The btcsuite developers package musig2 @@ -22,6 +19,10 @@ const ( SecNonceSize = 64 ) +// 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? @@ -37,7 +38,7 @@ type Nonces struct { // secNonceToPubNonce takes our two secrete nonces, and produces their two // corresponding EC points, serialized in compressed format. -func secNonceToPubNonce(secNonce *[SecNonceSize]byte) [PubNonceSize]byte { +func secNonceToPubNonce(secNonce [SecNonceSize]byte) [PubNonceSize]byte { var k1Mod, k2Mod btcec.ModNScalar k1Mod.SetByteSlice(secNonce[:btcec.PrivKeyBytesLen]) k2Mod.SetByteSlice(secNonce[btcec.PrivKeyBytesLen:]) @@ -117,7 +118,7 @@ func GenNonces(options ...NonceGenOption) (*Nonces, error) { // 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) + nonces.PubNonce = secNonceToPubNonce(nonces.SecNonce) return &nonces, nil } diff --git a/btcec/schnorr/musig2/sign.go b/btcec/schnorr/musig2/sign.go index 11edcf8469..df3caf23ed 100644 --- a/btcec/schnorr/musig2/sign.go +++ b/btcec/schnorr/musig2/sign.go @@ -1,13 +1,11 @@ -// 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. +// Copyright 2013-2022 The btcsuite developers package musig2 import ( "bytes" "fmt" + "io" secp "github.com/decred/dcrd/dcrec/secp256k1/v4" @@ -64,6 +62,34 @@ func NewPartialSignature(s *btcec.ModNScalar, } } +// 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 + } + + p.S.SetBytes(&sBytes) + + return nil +} + // SignOption is a functional option argument that allows callers to modify the // way we generate musig2 schnorr signatures. type SignOption func(*signOptions) @@ -130,13 +156,13 @@ func Sign(secNonce [SecNonceSize]byte, privKey *btcec.PrivateKey, return nil, err } - // Compute the hash of all the keys here as we'll need it do aggregrate + // 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) // Next we'll construct the aggregated public key based on the set of // signers. - uniqueKeyIndex := secondUniqueKeyIndex(pubKeys) + uniqueKeyIndex := secondUniqueKeyIndex(pubKeys, opts.sortKeys) combinedKey := AggregateKeys( pubKeys, opts.sortKeys, WithKeysHash(keysHash), WithUniqueKeyIndex(uniqueKeyIndex), @@ -240,7 +266,7 @@ func Sign(secNonce [SecNonceSize]byte, privKey *btcec.PrivateKey, // If we're not in fast sign mode, then we'll also validate our partial // signature. if !opts.fastSign { - pubNonce := secNonceToPubNonce(&secNonce) + pubNonce := secNonceToPubNonce(secNonce) sigValid := sig.Verify( pubNonce, combinedNonce, pubKeys, pubKey, msg, signOpts..., @@ -299,11 +325,10 @@ func verifyPartialSig(partialSig *PartialSignature, pubNonce [PubNonceSize]byte, return err } - // Compute the hash of all the keys here as we'll need it do aggregrate + // 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) + uniqueKeyIndex := secondUniqueKeyIndex(keySet, opts.sortKeys) // Next we'll construct the aggregated public key based on the set of // signers. diff --git a/btcec/schnorr/signature.go b/btcec/schnorr/signature.go index ed4b9cb5bf..f4532c7d09 100644 --- a/btcec/schnorr/signature.go +++ b/btcec/schnorr/signature.go @@ -1,7 +1,4 @@ -// 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. +// Copyright (c) 2013-2022 The btcsuite developers package schnorr From 08187eb78602d01e430ed31de70ba6e090c4ecb3 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Wed, 30 Mar 2022 22:52:39 -0500 Subject: [PATCH 366/419] btcec/schnorr/musig2: add support for tweaked aggregated keys In this commit, we add support for signing with tweaked aggregated keys. Such signing is required when signing for a taproot output key that actually commits to a script tree root, or was generated using BIP 86. A series of new functional arguments (that can likely be de-dup'd using Go's new type params), have been added to allow callers to optionally flip on this new behavior. --- btcec/schnorr/musig2/bench_test.go | 2 +- btcec/schnorr/musig2/context.go | 61 +++++++++- btcec/schnorr/musig2/keys.go | 123 +++++++++++++++++++- btcec/schnorr/musig2/musig2_test.go | 102 +++++++++++++++-- btcec/schnorr/musig2/sign.go | 171 ++++++++++++++++++++++++---- 5 files changed, 417 insertions(+), 42 deletions(-) diff --git a/btcec/schnorr/musig2/bench_test.go b/btcec/schnorr/musig2/bench_test.go index c02ccf3e41..eaa6b21b3c 100644 --- a/btcec/schnorr/musig2/bench_test.go +++ b/btcec/schnorr/musig2/bench_test.go @@ -301,7 +301,7 @@ func BenchmarkAggregateKeys(b *testing.B) { b.ResetTimer() b.ReportAllocs() - aggKey := AggregateKeys( + aggKey, _, _, _ := AggregateKeys( signerKeys, sortKeys, WithUniqueKeyIndex(uniqueKeyIndex), ) diff --git a/btcec/schnorr/musig2/context.go b/btcec/schnorr/musig2/context.go index 22bd2b236f..3a3b29280c 100644 --- a/btcec/schnorr/musig2/context.go +++ b/btcec/schnorr/musig2/context.go @@ -59,17 +59,51 @@ type Context struct { // keysHash is the hash of all the keys as defined in musig2. keysHash []byte + // tweaks is a set of optional tweak values that affect the final + // combined public key. + tweaks []KeyTweakDesc + // shouldSort keeps track of if the public keys should be sorted before // any operations. shouldSort bool } +// 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 []KeyTweakDesc +} + +// 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 + } +} + // 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, - signers []*btcec.PublicKey, shouldSort bool) (*Context, error) { + signers []*btcec.PublicKey, shouldSort bool, + ctxOpts ...ContextOption) (*Context, error) { + + // First, parse the set of optional context options. + opts := defaultContextOptions() + for _, option := range ctxOpts { + option(opts) + } // As a sanity check, make sure the signing key is actually amongst the sit // of signers. @@ -101,10 +135,14 @@ func NewContext(signingKey *btcec.PrivateKey, // Next, we'll use this information to compute the aggregated public // key that'll be used for signing in practice. - combinedKey := AggregateKeys( + combinedKey, _, _, err := AggregateKeys( signers, shouldSort, WithKeysHash(keysHash), WithUniqueKeyIndex(uniqueKeyIndex), + WithKeyTweaks(opts.tweaks...), ) + if err != nil { + return nil, err + } return &Context{ signingKey: signingKey, @@ -113,6 +151,7 @@ func NewContext(signingKey *btcec.PrivateKey, combinedKey: combinedKey, uniqueKeyIndex: uniqueKeyIndex, keysHash: keysHash, + tweaks: opts.tweaks, shouldSort: shouldSort, }, nil } @@ -160,6 +199,8 @@ type Session struct { finalSig *schnorr.Signature } +// TODO(roasbeef): optional arg to allow parsing in pre-generated nonces + // NewSession creates a new musig2 signing session. func (c *Context) NewSession() (*Session, error) { localNonces, err := GenNonces() @@ -242,6 +283,10 @@ func (s *Session) Sign(msg [32]byte, return nil, ErrCombinedNonceUnavailable } + if len(s.ctx.tweaks) != 0 { + signOpts = append(signOpts, WithTweaks(s.ctx.tweaks...)) + } + partialSig, err := Sign( s.localNonces.SecNonce, s.ctx.signingKey, *s.combinedNonce, s.ctx.keySet, msg, signOpts..., @@ -283,7 +328,17 @@ func (s *Session) CombineSig(sig *PartialSignature) (bool, error) { // If we have all the signatures, then we can combine them all into the // final signature. if haveAllSigs { - finalSig := CombineSigs(s.ourSig.R, s.sigs) + var combineOpts []CombineOption + if len(s.ctx.tweaks) != 0 { + combineOpts = append( + combineOpts, WithTweakedCombine( + s.msg, s.ctx.keySet, s.ctx.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. diff --git a/btcec/schnorr/musig2/keys.go b/btcec/schnorr/musig2/keys.go index 7c756697eb..35c37d9309 100644 --- a/btcec/schnorr/musig2/keys.go +++ b/btcec/schnorr/musig2/keys.go @@ -4,8 +4,11 @@ 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" @@ -19,6 +22,10 @@ var ( // 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") ) // sortableKeys defines a type of slice of public keys that implements the sort @@ -137,6 +144,18 @@ func secondUniqueKeyIndex(keySet []*btcec.PublicKey, sort bool) int { 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) @@ -149,6 +168,10 @@ type keyAggOption struct { // 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 } // WithKeysHash allows key aggregation to be optimize, by allowing the caller @@ -168,17 +191,92 @@ func WithUniqueKeyIndex(idx int) KeyAggOption { } } +// 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 + } +} + // 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) + tweakInt.SetBytes(&tweak) + + // 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 +} + // 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) *btcec.PublicKey { + keyOpts ...KeyAggOption) ( + *btcec.PublicKey, *btcec.ModNScalar, *btcec.ModNScalar, error) { // First, parse the set of optional signing options. opts := defaultKeyAggOptions() @@ -229,6 +327,27 @@ func AggregateKeys(keys []*btcec.PublicKey, sort bool, btcec.AddNonConst(&finalKeyJ, &tweakedKeyJ, &finalKeyJ) } + 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() - return btcec.NewPublicKey(&finalKeyJ.X, &finalKeyJ.Y) + key := btcec.NewPublicKey(&finalKeyJ.X, &finalKeyJ.Y) + return key, &parityAcc, &tweakAcc, nil } diff --git a/btcec/schnorr/musig2/musig2_test.go b/btcec/schnorr/musig2/musig2_test.go index 0c8af2fca0..d64ca9e9b8 100644 --- a/btcec/schnorr/musig2/musig2_test.go +++ b/btcec/schnorr/musig2/musig2_test.go @@ -84,7 +84,7 @@ func TestMuSig2KeyAggTestVectors(t *testing.T) { } uniqueKeyIndex := secondUniqueKeyIndex(keys, false) - combinedKey := AggregateKeys( + combinedKey, _, _, _ := AggregateKeys( keys, false, WithUniqueKeyIndex(uniqueKeyIndex), ) combinedKeyBytes := schnorr.SerializePubKey(combinedKey) @@ -164,6 +164,7 @@ func TestMuSig2SigningTestVectors(t *testing.T) { testCases := []struct { keyOrder []int expectedPartialSig []byte + tweak *KeyTweakDesc }{ { keyOrder: []int{0, 1, 2}, @@ -173,27 +174,63 @@ func TestMuSig2SigningTestVectors(t *testing.T) { keyOrder: []int{1, 0, 2}, expectedPartialSig: mustParseHex("2DF67BFFF18E3DE797E13C6475C963048138DAEC5CB20A357CECA7C8424295EA"), }, - { keyOrder: []int{1, 2, 0}, expectedPartialSig: mustParseHex("0D5B651E6DE34A29A12DE7A8B4183B4AE6A7F7FBE15CDCAFA4A3D1BCAABC7517"), }, + { + keyOrder: []int{1, 2, 0}, + expectedPartialSig: mustParseHex("5e24c7496b565debc3b9639e6f1304a21597f9603d3ab05b4913641775e1375b"), + tweak: &KeyTweakDesc{ + Tweak: [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, + }, + IsXOnly: true, + }, + }, + { + keyOrder: []int{1, 2, 0}, + expectedPartialSig: mustParseHex("78408ddcab4813d1394c97d493ef1084195c1d4b52e63ecd7bc5991644e44ddd"), + tweak: &KeyTweakDesc{ + Tweak: [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, + }, + IsXOnly: false, + }, + }, } var msg [32]byte copy(msg[:], signTestMsg) for _, testCase := range testCases { - testName := fmt.Sprintf("%v", testCase.keyOrder) + testName := fmt.Sprintf("%v/tweak=%v", testCase.keyOrder, testCase.tweak != nil) + if testCase.tweak != nil { + testName += fmt.Sprintf("/x_only=%v", testCase.tweak.IsXOnly) + } + t.Run(testName, func(t *testing.T) { keySet := make([]*btcec.PublicKey, 0, len(testCase.keyOrder)) for _, keyIndex := range testCase.keyOrder { keySet = append(keySet, signSetKeys[keyIndex]) } + var opts []SignOption + if testCase.tweak != nil { + opts = append( + opts, WithTweaks(*testCase.tweak), + ) + } + partialSig, err := Sign( secNonce, signSetPrivKey, aggregatedNonce, - keySet, msg, + keySet, msg, opts..., ) if err != nil { t.Fatalf("unable to generate partial sig: %v", err) @@ -251,17 +288,14 @@ func (s signerSet) pubNonces() [][PubNonceSize]byte { func (s signerSet) combinedKey() *btcec.PublicKey { uniqueKeyIndex := secondUniqueKeyIndex(s.keys(), false) - return AggregateKeys( + key, _, _, _ := AggregateKeys( s.keys(), false, WithUniqueKeyIndex(uniqueKeyIndex), ) + return key } -// 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() - +// testMultiPartySign executes a multi-party signing context w/ 100 signers. +func testMultiPartySign(t *testing.T, tweaks ...KeyTweakDesc) { const numSigners = 100 // First generate the set of signers along with their public keys. @@ -286,12 +320,19 @@ func TestMuSigMultiParty(t *testing.T) { var combinedKey *btcec.PublicKey + var ctxOpts []ContextOption + if len(tweaks) != 0 { + ctxOpts = append(ctxOpts, WithTweakedContext(tweaks)) + } + // 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, signSet, false) + signCtx, err := NewContext( + signerKey, signSet, false, ctxOpts..., + ) if err != nil { t.Fatalf("unable to generate context: %v", err) } @@ -382,3 +423,40 @@ func TestMuSigMultiParty(t *testing.T) { } } } + +// 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) + }) + + t.Run("tweaked", func(t *testing.T) { + t.Parallel() + + testMultiPartySign(t, KeyTweakDesc{ + Tweak: testTweak, + }) + }) + + t.Run("tweaked_x_only", func(t *testing.T) { + t.Parallel() + + testMultiPartySign(t, KeyTweakDesc{ + Tweak: testTweak, + IsXOnly: true, + }) + }) +} diff --git a/btcec/schnorr/musig2/sign.go b/btcec/schnorr/musig2/sign.go index df3caf23ed..f7b7b13d55 100644 --- a/btcec/schnorr/musig2/sign.go +++ b/btcec/schnorr/musig2/sign.go @@ -104,6 +104,11 @@ type signOptions struct { // 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 } // defaultSignOptions returns the default set of signing operations. @@ -128,6 +133,14 @@ func WithSortedKeys() SignOption { } } +// 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 + } +} + // 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 @@ -163,10 +176,14 @@ func Sign(secNonce [SecNonceSize]byte, privKey *btcec.PrivateKey, // Next we'll construct the aggregated public key based on the set of // signers. uniqueKeyIndex := secondUniqueKeyIndex(pubKeys, opts.sortKeys) - combinedKey := AggregateKeys( + combinedKey, parityAcc, _, err := AggregateKeys( pubKeys, opts.sortKeys, WithKeysHash(keysHash), WithUniqueKeyIndex(uniqueKeyIndex), + WithKeyTweaks(opts.tweaks...), ) + if err != nil { + return nil, err + } // Next we'll compute the value b, that blinds our second public // nonce: @@ -224,8 +241,6 @@ func Sign(secNonce [SecNonceSize]byte, privKey *btcec.PrivateKey, return nil, ErrPrivKeyZero } - // If the y coordinate of the public key is odd xor the y coordinate of - // the combined public key is odd, then we'll negate the private key. pubKey := privKey.PubKey() pubKeyYIsOdd := func() bool { pubKeyBytes := pubKey.SerializeCompressed() @@ -235,13 +250,27 @@ func Sign(secNonce [SecNonceSize]byte, privKey *btcec.PrivateKey, combinedKeyBytes := combinedKey.SerializeCompressed() return combinedKeyBytes[0] == secp.PubKeyFormatCompressedOdd }() - if pubKeyYIsOdd != combinedKeyYIsOdd { - privKeyScalar.Negate() + + // Next we'll compute our two parity factors for Q the combined public + // key, and P, the public key we're signing with. If the keys are odd, + // then we'll negate them. + parityCombinedKey := new(btcec.ModNScalar).SetInt(1) + paritySignKey := new(btcec.ModNScalar).SetInt(1) + if combinedKeyYIsOdd { + parityCombinedKey.Negate() } + if pubKeyYIsOdd { + paritySignKey.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 = gv⋅gaccv⋅gp⋅d' + privKeyScalar.Mul(parityCombinedKey).Mul(paritySignKey).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 + // 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)) @@ -252,14 +281,14 @@ func Sign(secNonce [SecNonceSize]byte, privKey *btcec.PrivateKey, var e btcec.ModNScalar e.SetByteSlice(challengeBytes[:]) - // Next, we'll compute mu, our aggregation coefficient for the key that + // Next, we'll compute a, our aggregation coefficient for the key that // we're signing with. - mu := aggregationCoefficient(pubKeys, pubKey, keysHash, uniqueKeyIndex) + a := aggregationCoefficient(pubKeys, pubKey, keysHash, uniqueKeyIndex) // With mu constructed, we can finally generate our partial signature - // as: s = (k1_1 + b*k_2 + e*mu*d) mod n. + // 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(mu).Mul(&privKeyScalar)) + s.Add(&k1).Add(k2.Mul(&nonceBlinder)).Add(e.Mul(a).Mul(&privKeyScalar)) sig := NewPartialSignature(s, nonceKey) @@ -332,10 +361,14 @@ func verifyPartialSig(partialSig *PartialSignature, pubNonce [PubNonceSize]byte, // Next we'll construct the aggregated public key based on the set of // signers. - combinedKey := AggregateKeys( + combinedKey, parityAcc, _, err := AggregateKeys( keySet, opts.sortKeys, WithKeysHash(keysHash), WithUniqueKeyIndex(uniqueKeyIndex), + WithKeyTweaks(opts.tweaks...), ) + if err != nil { + return err + } // Next we'll compute the value b, that blinds our second public // nonce: @@ -413,25 +446,33 @@ func verifyPartialSig(partialSig *PartialSignature, pubNonce [PubNonceSize]byte, return err } - // Next, we'll compute mu, our aggregation coefficient for the key that + // Next, we'll compute a, our aggregation coefficient for the key that // we're signing with. - mu := aggregationCoefficient(keySet, signingKey, keysHash, uniqueKeyIndex) + a := aggregationCoefficient(keySet, signingKey, keysHash, uniqueKeyIndex) - // If the combined key has an odd y coordinate, then we'll negate the - // signer key. - var signKeyJ btcec.JacobianPoint - signingKey.AsJacobian(&signKeyJ) + // If the combined key has an odd y coordinate, then we'll negate + // parity factor for the signing key. + paritySignKey := new(btcec.ModNScalar).SetInt(1) combinedKeyBytes := combinedKey.SerializeCompressed() if combinedKeyBytes[0] == secp.PubKeyFormatCompressedOdd { - signKeyJ.ToAffine() - signKeyJ.Y.Negate(1) - signKeyJ.Y.Normalize() + paritySignKey.Negate() } - // In the final set, we'll check that: s*G == R' + e*mu*P. + // 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 := paritySignKey.Mul(parityAcc) + + // Now we'll multiply the parity factor by our signing key, which'll + // take care of the amount of negation needed. + var signKeyJ btcec.JacobianPoint + signingKey.AsJacobian(&signKeyJ) + btcec.ScalarMultNonConst(finalParityFactor, &signKeyJ, &signKeyJ) + + // In the final set, we'll check that: s*G == R' + e*a*P. var sG, rP btcec.JacobianPoint btcec.ScalarBaseMultNonConst(s, &sG) - btcec.ScalarMultNonConst(e.Mul(mu), &signKeyJ, &rP) + btcec.ScalarMultNonConst(e.Mul(a), &signKeyJ, &rP) btcec.AddNonConst(&rP, &pubNonceJ, &rP) sG.ToAffine() @@ -444,16 +485,98 @@ func verifyPartialSig(partialSig *PartialSignature, pubNonce [PubNonceSize]byte, 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 + 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) *schnorr.Signature { + 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) From f7168c86633d4737a0e0c3af51d83a6e559199f7 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Thu, 31 Mar 2022 19:27:34 -0500 Subject: [PATCH 367/419] schnorr/musig2: add native support for taproot output key tweaking In this commit, we add a series of new options and methods to make it easier to use the package in the context of a taproot output that commits to a script root or some other value. Before this series of changes, the API was hard to use in this context as the taproot tweak actually includes the internal public key, which in this case is the aggregated public key. So you actually needed to call that API w/o the tweak, get that, then recompute the tweak itself. To make things easier in the taproot context, we've added a series of new options that'll return the aggregated key before any tweaks (to be used as the internal key), and also handle computing the BIP 341 tweak value for the caller. --- btcec/go.mod | 2 +- btcec/go.sum | 4 +- btcec/schnorr/musig2/bench_test.go | 2 +- btcec/schnorr/musig2/context.go | 93 +++++++++++++++++++++++------ btcec/schnorr/musig2/keys.go | 71 ++++++++++++++++++++-- btcec/schnorr/musig2/musig2_test.go | 30 ++++++---- btcec/schnorr/musig2/sign.go | 90 +++++++++++++++++++++++----- 7 files changed, 242 insertions(+), 50 deletions(-) diff --git a/btcec/go.mod b/btcec/go.mod index bc8cf721e3..8c7cc1d63c 100644 --- a/btcec/go.mod +++ b/btcec/go.mod @@ -3,7 +3,7 @@ module github.com/btcsuite/btcd/btcec/v2 go 1.17 require ( - github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0 + 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 ) diff --git a/btcec/go.sum b/btcec/go.sum index 00af17624d..0004a783bb 100644 --- a/btcec/go.sum +++ b/btcec/go.sum @@ -1,5 +1,5 @@ -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0 h1:MSskdM4/xJYcFzy0altH/C/xHopifpWzHUi1JeVI34Q= -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/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= diff --git a/btcec/schnorr/musig2/bench_test.go b/btcec/schnorr/musig2/bench_test.go index eaa6b21b3c..70d7e931ce 100644 --- a/btcec/schnorr/musig2/bench_test.go +++ b/btcec/schnorr/musig2/bench_test.go @@ -306,7 +306,7 @@ func BenchmarkAggregateKeys(b *testing.B) { WithUniqueKeyIndex(uniqueKeyIndex), ) - testKey = aggKey + testKey = aggKey.FinalKey }) } } diff --git a/btcec/schnorr/musig2/context.go b/btcec/schnorr/musig2/context.go index 3a3b29280c..bfb9d874e9 100644 --- a/btcec/schnorr/musig2/context.go +++ b/btcec/schnorr/musig2/context.go @@ -35,6 +35,10 @@ var ( // 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") ) // Context is a managed signing context for musig2. It takes care of things @@ -50,7 +54,7 @@ type Context struct { keySet []*btcec.PublicKey // combinedKey is the aggregated public key. - combinedKey *btcec.PublicKey + combinedKey *AggregateKey // uniqueKeyIndex is the index of the second unique key in the keySet. // This is used to speed up signing and verification computations. @@ -59,9 +63,8 @@ type Context struct { // keysHash is the hash of all the keys as defined in musig2. keysHash []byte - // tweaks is a set of optional tweak values that affect the final - // combined public key. - tweaks []KeyTweakDesc + // 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. @@ -75,7 +78,18 @@ 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 } // defaultContextOptions returns the default context options. @@ -85,12 +99,22 @@ func defaultContextOptions() *contextOptions { // WithTweakedContext specifies that within the context, the aggregated public // key should be tweaked with the specified tweaks. -func WithTweakedContext(tweaks []KeyTweakDesc) ContextOption { +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 + } +} + // NewContext creates a new signing context with the passed singing key and set // of public keys for each of the other signers. // @@ -133,12 +157,21 @@ func NewContext(signingKey *btcec.PrivateKey, keysHash := keyHashFingerprint(signers, shouldSort) uniqueKeyIndex := secondUniqueKeyIndex(signers, shouldSort) + keyAggOpts := []KeyAggOption{ + WithKeysHash(keysHash), WithUniqueKeyIndex(uniqueKeyIndex), + } + if opts.taprootTweak != nil { + keyAggOpts = append( + keyAggOpts, WithTaprootKeyTweak(opts.taprootTweak), + ) + } else if len(opts.tweaks) != 0 { + keyAggOpts = append(keyAggOpts, WithKeyTweaks(opts.tweaks...)) + } + // Next, we'll use this information to compute the aggregated public // key that'll be used for signing in practice. combinedKey, _, _, err := AggregateKeys( - signers, shouldSort, WithKeysHash(keysHash), - WithUniqueKeyIndex(uniqueKeyIndex), - WithKeyTweaks(opts.tweaks...), + signers, shouldSort, keyAggOpts..., ) if err != nil { return nil, err @@ -151,15 +184,15 @@ func NewContext(signingKey *btcec.PrivateKey, combinedKey: combinedKey, uniqueKeyIndex: uniqueKeyIndex, keysHash: keysHash, - tweaks: opts.tweaks, + opts: opts, shouldSort: shouldSort, }, nil } // CombinedKey returns the combined public key that will be used to generate // multi-signatures against. -func (c *Context) CombinedKey() btcec.PublicKey { - return *c.combinedKey +func (c *Context) CombinedKey() *btcec.PublicKey { + return c.combinedKey.FinalKey } // PubKey returns the public key of the signer of this session. @@ -175,6 +208,19 @@ func (c *Context) SigningKeys() []*btcec.PublicKey { 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 speciifed, then this +// method will return an error. +func (c *Context) TaprootInternalKey() (*btcec.PublicKey, error) { + if c.opts.taprootTweak == nil { + return nil, ErrTaprootInternalKeyUnavailable + } + + return c.combinedKey.PreTweakedKey, nil +} + // 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 @@ -241,7 +287,7 @@ func (s *Session) RegisterPubNonce(nonce [PubNonceSize]byte) (bool, error) { // times. haveAllNonces := len(s.pubNonces) == len(s.ctx.keySet) if haveAllNonces { - return false, nil + return false, ErrAlredyHaveAllNonces } // Add this nonce and check again if we already have tall the nonces we @@ -283,8 +329,12 @@ func (s *Session) Sign(msg [32]byte, return nil, ErrCombinedNonceUnavailable } - if len(s.ctx.tweaks) != 0 { - signOpts = append(signOpts, WithTweaks(s.ctx.tweaks...)) + if s.ctx.opts.taprootTweak != nil { + signOpts = append( + signOpts, WithTaprootSignTweak(s.ctx.opts.taprootTweak), + ) + } else if len(s.ctx.opts.tweaks) != 0 { + signOpts = append(signOpts, WithTweaks(s.ctx.opts.tweaks...)) } partialSig, err := Sign( @@ -306,7 +356,7 @@ func (s *Session) Sign(msg [32]byte, return partialSig, nil } -// CombineSigs buffers a partial signature received from a signing party. The +// 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) { @@ -329,10 +379,17 @@ func (s *Session) CombineSig(sig *PartialSignature) (bool, error) { // final signature. if haveAllSigs { var combineOpts []CombineOption - if len(s.ctx.tweaks) != 0 { + if s.ctx.opts.taprootTweak != nil { + combineOpts = append( + combineOpts, WithTaprootTweakedCombine( + s.msg, s.ctx.keySet, s.ctx.opts.taprootTweak, + s.ctx.shouldSort, + ), + ) + } else if len(s.ctx.opts.tweaks) != 0 { combineOpts = append( combineOpts, WithTweakedCombine( - s.msg, s.ctx.keySet, s.ctx.tweaks, + s.msg, s.ctx.keySet, s.ctx.opts.tweaks, s.ctx.shouldSort, ), ) @@ -344,7 +401,7 @@ func (s *Session) CombineSig(sig *PartialSignature) (bool, error) { // valid. // // TODO(roasbef): allow skipping? - if !finalSig.Verify(s.msg[:], s.ctx.combinedKey) { + if !finalSig.Verify(s.msg[:], s.ctx.combinedKey.FinalKey) { return false, ErrFinalSigInvalid } diff --git a/btcec/schnorr/musig2/keys.go b/btcec/schnorr/musig2/keys.go index 35c37d9309..c13af98463 100644 --- a/btcec/schnorr/musig2/keys.go +++ b/btcec/schnorr/musig2/keys.go @@ -170,8 +170,12 @@ type keyAggOption struct { uniqueKeyIndex *int // tweaks specifies a series of tweaks to be applied to the aggregated - // public key> + // public key. tweaks []KeyTweakDesc + + // taprootTweak controls if the tweaks above should be applied in a BIP + // 340 style. + taprootTweak bool } // WithKeysHash allows key aggregation to be optimize, by allowing the caller @@ -199,6 +203,29 @@ func WithKeyTweaks(tweaks ...KeyTweakDesc) KeyAggOption { } } +// 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 + } +} + // defaultKeyAggOptions returns the set of default arguments for key // aggregation. func defaultKeyAggOptions() *keyAggOption { @@ -269,6 +296,19 @@ func tweakKey(keyJ btcec.JacobianPoint, parityAcc btcec.ModNScalar, tweak [32]by 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. @@ -276,7 +316,7 @@ func tweakKey(keyJ btcec.JacobianPoint, parityAcc btcec.ModNScalar, tweak [32]by // accumulator are returned as well. func AggregateKeys(keys []*btcec.PublicKey, sort bool, keyOpts ...KeyAggOption) ( - *btcec.PublicKey, *btcec.ModNScalar, *btcec.ModNScalar, error) { + *AggregateKey, *btcec.ModNScalar, *btcec.ModNScalar, error) { // First, parse the set of optional signing options. opts := defaultKeyAggOptions() @@ -327,6 +367,25 @@ func AggregateKeys(keys []*btcec.PublicKey, sort bool, 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. + 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 { + // 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(combinedKey), + opts.tweaks[0].Tweak[:], + ) + opts.tweaks[0].Tweak = *tapTweakHash + } + var ( err error tweakAcc btcec.ModNScalar @@ -348,6 +407,10 @@ func AggregateKeys(keys []*btcec.PublicKey, sort bool, } finalKeyJ.ToAffine() - key := btcec.NewPublicKey(&finalKeyJ.X, &finalKeyJ.Y) - return key, &parityAcc, &tweakAcc, nil + finalKey := btcec.NewPublicKey(&finalKeyJ.X, &finalKeyJ.Y) + + return &AggregateKey{ + PreTweakedKey: combinedKey, + FinalKey: finalKey, + }, &parityAcc, &tweakAcc, nil } diff --git a/btcec/schnorr/musig2/musig2_test.go b/btcec/schnorr/musig2/musig2_test.go index d64ca9e9b8..bfd7c0818d 100644 --- a/btcec/schnorr/musig2/musig2_test.go +++ b/btcec/schnorr/musig2/musig2_test.go @@ -87,7 +87,7 @@ func TestMuSig2KeyAggTestVectors(t *testing.T) { combinedKey, _, _, _ := AggregateKeys( keys, false, WithUniqueKeyIndex(uniqueKeyIndex), ) - combinedKeyBytes := schnorr.SerializePubKey(combinedKey) + combinedKeyBytes := schnorr.SerializePubKey(combinedKey.FinalKey) if !bytes.Equal(combinedKeyBytes, testCase.expectedKey) { t.Fatalf("case: #%v, invalid aggregation: "+ "expected %x, got %x", i, testCase.expectedKey, @@ -291,11 +291,13 @@ func (s signerSet) combinedKey() *btcec.PublicKey { key, _, _, _ := AggregateKeys( s.keys(), false, WithUniqueKeyIndex(uniqueKeyIndex), ) - return key + return key.FinalKey } // testMultiPartySign executes a multi-party signing context w/ 100 signers. -func testMultiPartySign(t *testing.T, tweaks ...KeyTweakDesc) { +func testMultiPartySign(t *testing.T, taprootTweak []byte, + tweaks ...KeyTweakDesc) { + const numSigners = 100 // First generate the set of signers along with their public keys. @@ -321,8 +323,11 @@ func testMultiPartySign(t *testing.T, tweaks ...KeyTweakDesc) { var combinedKey *btcec.PublicKey var ctxOpts []ContextOption - if len(tweaks) != 0 { - ctxOpts = append(ctxOpts, WithTweakedContext(tweaks)) + switch { + case taprootTweak != nil: + ctxOpts = append(ctxOpts, WithTaprootTweakCtx(taprootTweak)) + case len(tweaks) != 0: + ctxOpts = append(ctxOpts, WithTweakedContext(tweaks...)) } // Now that we have all the signers, we'll make a new context, then @@ -338,8 +343,7 @@ func testMultiPartySign(t *testing.T, tweaks ...KeyTweakDesc) { } if combinedKey == nil { - k := signCtx.CombinedKey() - combinedKey = &k + combinedKey = signCtx.CombinedKey() } session, err := signCtx.NewSession() @@ -440,13 +444,13 @@ func TestMuSigMultiParty(t *testing.T) { t.Run("no_tweak", func(t *testing.T) { t.Parallel() - testMultiPartySign(t) + testMultiPartySign(t, nil) }) t.Run("tweaked", func(t *testing.T) { t.Parallel() - testMultiPartySign(t, KeyTweakDesc{ + testMultiPartySign(t, nil, KeyTweakDesc{ Tweak: testTweak, }) }) @@ -454,9 +458,15 @@ func TestMuSigMultiParty(t *testing.T) { t.Run("tweaked_x_only", func(t *testing.T) { t.Parallel() - testMultiPartySign(t, KeyTweakDesc{ + testMultiPartySign(t, nil, KeyTweakDesc{ Tweak: testTweak, IsXOnly: true, }) }) + + t.Run("taproot_tweaked_x_only", func(t *testing.T) { + t.Parallel() + + testMultiPartySign(t, testTweak[:]) + }) } diff --git a/btcec/schnorr/musig2/sign.go b/btcec/schnorr/musig2/sign.go index f7b7b13d55..16c5cd2fac 100644 --- a/btcec/schnorr/musig2/sign.go +++ b/btcec/schnorr/musig2/sign.go @@ -109,6 +109,14 @@ type signOptions struct { // 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 } // defaultSignOptions returns the default set of signing operations. @@ -141,6 +149,21 @@ func WithTweaks(tweaks ...KeyTweakDesc) SignOption { } } +// 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 + } +} + // 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 @@ -172,14 +195,23 @@ func Sign(secNonce [SecNonceSize]byte, privKey *btcec.PrivateKey, // 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), + } + if opts.taprootTweak != nil { + keyAggOpts = append( + keyAggOpts, WithTaprootKeyTweak(opts.taprootTweak), + ) + } else { + keyAggOpts = append(keyAggOpts, WithKeyTweaks(opts.tweaks...)) + } // Next we'll construct the aggregated public key based on the set of // signers. - uniqueKeyIndex := secondUniqueKeyIndex(pubKeys, opts.sortKeys) combinedKey, parityAcc, _, err := AggregateKeys( - pubKeys, opts.sortKeys, WithKeysHash(keysHash), - WithUniqueKeyIndex(uniqueKeyIndex), - WithKeyTweaks(opts.tweaks...), + pubKeys, opts.sortKeys, keyAggOpts..., ) if err != nil { return nil, err @@ -193,7 +225,7 @@ func Sign(secNonce [SecNonceSize]byte, privKey *btcec.PrivateKey, nonceBlinder btcec.ModNScalar ) nonceMsgBuf.Write(combinedNonce[:]) - nonceMsgBuf.Write(schnorr.SerializePubKey(combinedKey)) + nonceMsgBuf.Write(schnorr.SerializePubKey(combinedKey.FinalKey)) nonceMsgBuf.Write(msg[:]) nonceBlindHash := chainhash.TaggedHash( NonceBlindTag, nonceMsgBuf.Bytes(), @@ -247,7 +279,7 @@ func Sign(secNonce [SecNonceSize]byte, privKey *btcec.PrivateKey, return pubKeyBytes[0] == secp.PubKeyFormatCompressedOdd }() combinedKeyYIsOdd := func() bool { - combinedKeyBytes := combinedKey.SerializeCompressed() + combinedKeyBytes := combinedKey.FinalKey.SerializeCompressed() return combinedKeyBytes[0] == secp.PubKeyFormatCompressedOdd }() @@ -273,7 +305,7 @@ func Sign(secNonce [SecNonceSize]byte, privKey *btcec.PrivateKey, // * e = H(tag=ChallengeHashTag, R || Q || m) mod n var challengeMsg bytes.Buffer challengeMsg.Write(schnorr.SerializePubKey(nonceKey)) - challengeMsg.Write(schnorr.SerializePubKey(combinedKey)) + challengeMsg.Write(schnorr.SerializePubKey(combinedKey.FinalKey)) challengeMsg.Write(msg[:]) challengeBytes := chainhash.TaggedHash( ChallengeHashTag, challengeMsg.Bytes(), @@ -359,12 +391,21 @@ func verifyPartialSig(partialSig *PartialSignature, pubNonce [PubNonceSize]byte, keysHash := keyHashFingerprint(keySet, opts.sortKeys) uniqueKeyIndex := secondUniqueKeyIndex(keySet, opts.sortKeys) + keyAggOpts := []KeyAggOption{ + WithKeysHash(keysHash), WithUniqueKeyIndex(uniqueKeyIndex), + } + if opts.taprootTweak != nil { + keyAggOpts = append( + keyAggOpts, WithTaprootKeyTweak(opts.taprootTweak), + ) + } else { + 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, - WithKeysHash(keysHash), WithUniqueKeyIndex(uniqueKeyIndex), - WithKeyTweaks(opts.tweaks...), + keySet, opts.sortKeys, keyAggOpts..., ) if err != nil { return err @@ -378,7 +419,7 @@ func verifyPartialSig(partialSig *PartialSignature, pubNonce [PubNonceSize]byte, nonceBlinder btcec.ModNScalar ) nonceMsgBuf.Write(combinedNonce[:]) - nonceMsgBuf.Write(schnorr.SerializePubKey(combinedKey)) + nonceMsgBuf.Write(schnorr.SerializePubKey(combinedKey.FinalKey)) nonceMsgBuf.Write(msg[:]) nonceBlindHash := chainhash.TaggedHash(NonceBlindTag, nonceMsgBuf.Bytes()) nonceBlinder.SetByteSlice(nonceBlindHash[:]) @@ -433,7 +474,7 @@ func verifyPartialSig(partialSig *PartialSignature, pubNonce [PubNonceSize]byte, challengeMsg.Write(schnorr.SerializePubKey(btcec.NewPublicKey( &nonce.X, &nonce.Y, ))) - challengeMsg.Write(schnorr.SerializePubKey(combinedKey)) + challengeMsg.Write(schnorr.SerializePubKey(combinedKey.FinalKey)) challengeMsg.Write(msg[:]) challengeBytes := chainhash.TaggedHash( ChallengeHashTag, challengeMsg.Bytes(), @@ -453,7 +494,7 @@ func verifyPartialSig(partialSig *PartialSignature, pubNonce [PubNonceSize]byte, // If the combined key has an odd y coordinate, then we'll negate // parity factor for the signing key. paritySignKey := new(btcec.ModNScalar).SetInt(1) - combinedKeyBytes := combinedKey.SerializeCompressed() + combinedKeyBytes := combinedKey.FinalKey.SerializeCompressed() if combinedKeyBytes[0] == secp.PubKeyFormatCompressedOdd { paritySignKey.Negate() } @@ -518,7 +559,28 @@ func WithTweakedCombine(msg [32]byte, keys []*btcec.PublicKey, ) o.msg = msg - o.combinedKey = combinedKey + 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 keysepnd, 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 } } From 9d0d52708ac9a0cdc13b08e9c75df9e58905fbb4 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Fri, 1 Apr 2022 12:35:25 -0500 Subject: [PATCH 368/419] btcec/schnorr/musig2: add explicit support for BIP 86 multi-signing In this commit, we add a series of new functional optinos to make signing for an aggregated key where the final taproot output key was derived using BIP 86. This can be used in cases where no script path shuold be allowed, and only an n-of-n multi-sig should be used. --- btcec/schnorr/musig2/context.go | 45 +++++++++++++++++---- btcec/schnorr/musig2/keys.go | 41 ++++++++++++++++++- btcec/schnorr/musig2/musig2_test.go | 8 ++++ btcec/schnorr/musig2/sign.go | 61 ++++++++++++++++++++++++++--- 4 files changed, 141 insertions(+), 14 deletions(-) diff --git a/btcec/schnorr/musig2/context.go b/btcec/schnorr/musig2/context.go index bfb9d874e9..2461f962ab 100644 --- a/btcec/schnorr/musig2/context.go +++ b/btcec/schnorr/musig2/context.go @@ -90,6 +90,10 @@ type contextOptions struct { // 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 } // defaultContextOptions returns the default context options. @@ -115,6 +119,16 @@ func WithTaprootTweakCtx(scriptRoot []byte) ContextOption { } } +// 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 + } +} + // NewContext creates a new signing context with the passed singing key and set // of public keys for each of the other signers. // @@ -160,11 +174,16 @@ func NewContext(signingKey *btcec.PrivateKey, keyAggOpts := []KeyAggOption{ WithKeysHash(keysHash), WithUniqueKeyIndex(uniqueKeyIndex), } - if opts.taprootTweak != nil { + switch { + case opts.bip86Tweak: + keyAggOpts = append( + keyAggOpts, WithBIP86KeyTweak(), + ) + case opts.taprootTweak != nil: keyAggOpts = append( keyAggOpts, WithTaprootKeyTweak(opts.taprootTweak), ) - } else if len(opts.tweaks) != 0 { + case len(opts.tweaks) != 0: keyAggOpts = append(keyAggOpts, WithKeyTweaks(opts.tweaks...)) } @@ -214,7 +233,7 @@ func (c *Context) SigningKeys() []*btcec.PublicKey { // returning the internal key. If a taproot tweak wasn't speciifed, then this // method will return an error. func (c *Context) TaprootInternalKey() (*btcec.PublicKey, error) { - if c.opts.taprootTweak == nil { + if c.opts.taprootTweak == nil && !c.opts.bip86Tweak { return nil, ErrTaprootInternalKeyUnavailable } @@ -329,11 +348,16 @@ func (s *Session) Sign(msg [32]byte, return nil, ErrCombinedNonceUnavailable } - if s.ctx.opts.taprootTweak != nil { + switch { + case s.ctx.opts.bip86Tweak: + signOpts = append( + signOpts, WithBip86SignTweak(), + ) + case s.ctx.opts.taprootTweak != nil: signOpts = append( signOpts, WithTaprootSignTweak(s.ctx.opts.taprootTweak), ) - } else if len(s.ctx.opts.tweaks) != 0 { + case len(s.ctx.opts.tweaks) != 0: signOpts = append(signOpts, WithTweaks(s.ctx.opts.tweaks...)) } @@ -379,14 +403,21 @@ func (s *Session) CombineSig(sig *PartialSignature) (bool, error) { // final signature. if haveAllSigs { var combineOpts []CombineOption - if s.ctx.opts.taprootTweak != nil { + switch { + case s.ctx.opts.bip86Tweak: + combineOpts = append( + combineOpts, WithBip86TweakedCombine( + s.msg, s.ctx.keySet, s.ctx.shouldSort, + ), + ) + case s.ctx.opts.taprootTweak != nil: combineOpts = append( combineOpts, WithTaprootTweakedCombine( s.msg, s.ctx.keySet, s.ctx.opts.taprootTweak, s.ctx.shouldSort, ), ) - } else if len(s.ctx.opts.tweaks) != 0 { + case len(s.ctx.opts.tweaks) != 0: combineOpts = append( combineOpts, WithTweakedCombine( s.msg, s.ctx.keySet, s.ctx.opts.tweaks, diff --git a/btcec/schnorr/musig2/keys.go b/btcec/schnorr/musig2/keys.go index c13af98463..e61a22f2e5 100644 --- a/btcec/schnorr/musig2/keys.go +++ b/btcec/schnorr/musig2/keys.go @@ -176,6 +176,11 @@ type keyAggOption struct { // 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 @@ -226,6 +231,22 @@ func WithTaprootKeyTweak(scriptRoot []byte) KeyAggOption { } } +// 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 { @@ -370,18 +391,34 @@ func AggregateKeys(keys []*btcec.PublicKey, sort bool, // 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(combinedKey), - opts.tweaks[0].Tweak[:], + chainhash.TagTapTweak, schnorr.SerializePubKey(key), + tweakBytes, ) opts.tweaks[0].Tweak = *tapTweakHash } diff --git a/btcec/schnorr/musig2/musig2_test.go b/btcec/schnorr/musig2/musig2_test.go index bfd7c0818d..1ff3151300 100644 --- a/btcec/schnorr/musig2/musig2_test.go +++ b/btcec/schnorr/musig2/musig2_test.go @@ -324,6 +324,8 @@ func testMultiPartySign(t *testing.T, taprootTweak []byte, var ctxOpts []ContextOption switch { + case len(taprootTweak) == 0: + ctxOpts = append(ctxOpts, WithBip86TweakCtx()) case taprootTweak != nil: ctxOpts = append(ctxOpts, WithTaprootTweakCtx(taprootTweak)) case len(tweaks) != 0: @@ -469,4 +471,10 @@ func TestMuSigMultiParty(t *testing.T) { testMultiPartySign(t, testTweak[:]) }) + + t.Run("taproot_bip_86", func(t *testing.T) { + t.Parallel() + + testMultiPartySign(t, []byte{}) + }) } diff --git a/btcec/schnorr/musig2/sign.go b/btcec/schnorr/musig2/sign.go index 16c5cd2fac..4f9439fe6a 100644 --- a/btcec/schnorr/musig2/sign.go +++ b/btcec/schnorr/musig2/sign.go @@ -117,6 +117,11 @@ type signOptions struct { // 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. @@ -164,6 +169,20 @@ func WithTaprootSignTweak(scriptRoot []byte) SignOption { } } +// 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 + } +} + // 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 @@ -200,11 +219,16 @@ func Sign(secNonce [SecNonceSize]byte, privKey *btcec.PrivateKey, keyAggOpts := []KeyAggOption{ WithKeysHash(keysHash), WithUniqueKeyIndex(uniqueKeyIndex), } - if opts.taprootTweak != nil { + switch { + case opts.bip86Tweak: + keyAggOpts = append( + keyAggOpts, WithBIP86KeyTweak(), + ) + case opts.taprootTweak != nil: keyAggOpts = append( keyAggOpts, WithTaprootKeyTweak(opts.taprootTweak), ) - } else { + case len(opts.tweaks) != 0: keyAggOpts = append(keyAggOpts, WithKeyTweaks(opts.tweaks...)) } @@ -394,11 +418,16 @@ func verifyPartialSig(partialSig *PartialSignature, pubNonce [PubNonceSize]byte, keyAggOpts := []KeyAggOption{ WithKeysHash(keysHash), WithUniqueKeyIndex(uniqueKeyIndex), } - if opts.taprootTweak != nil { + switch { + case opts.bip86Tweak: + keyAggOpts = append( + keyAggOpts, WithBIP86KeyTweak(), + ) + case opts.taprootTweak != nil: keyAggOpts = append( keyAggOpts, WithTaprootKeyTweak(opts.taprootTweak), ) - } else { + case len(opts.tweaks) != 0: keyAggOpts = append(keyAggOpts, WithKeyTweaks(opts.tweaks...)) } @@ -569,7 +598,7 @@ func WithTweakedCombine(msg [32]byte, keys []*btcec.PublicKey, // 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 keysepnd, where the output key +// 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 { @@ -585,6 +614,28 @@ func WithTaprootTweakedCombine(msg [32]byte, keys []*btcec.PublicKey, } } +// 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, From 65e4fc0dea1758ed5439b651aad4622135e23690 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Tue, 26 Apr 2022 21:33:10 -0700 Subject: [PATCH 369/419] btcec/schnorr/musig2: update nonce generation to support optional inputs In this commit, we update the nonce generation to support optional parameters defined in the latest BIP draft. These parameters are optional, but if specified my mitigate the effect of weak randomness when generating the nonce. Given the protocol doesn't require signers to prove how they generate their nonces, this update is mainly to ensure strict spec compliance, and is effectively optional. --- btcec/go.mod | 1 + btcec/go.sum | 2 + btcec/schnorr/musig2/nonces.go | 206 ++++++++++++++++++++++++++++++--- 3 files changed, 194 insertions(+), 15 deletions(-) diff --git a/btcec/go.mod b/btcec/go.mod index 8c7cc1d63c..a5e8c3abef 100644 --- a/btcec/go.mod +++ b/btcec/go.mod @@ -6,6 +6,7 @@ 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 + golang.org/x/exp v0.0.0-20220426173459-3bcf042a4bf5 ) require github.com/decred/dcrd/crypto/blake256 v1.0.0 // indirect diff --git a/btcec/go.sum b/btcec/go.sum index 0004a783bb..bd484d5ed4 100644 --- a/btcec/go.sum +++ b/btcec/go.sum @@ -6,3 +6,5 @@ github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK 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= +golang.org/x/exp v0.0.0-20220426173459-3bcf042a4bf5 h1:rxKZ2gOnYxjfmakvUUqh9Gyb6KXfrj7JWTxORTYqb0E= +golang.org/x/exp v0.0.0-20220426173459-3bcf042a4bf5/go.mod h1:lgLbSvA5ygNOMpwM/9anMpWVlVJ7Z+cHWq/eFuinpGE= diff --git a/btcec/schnorr/musig2/nonces.go b/btcec/schnorr/musig2/nonces.go index 4fd76450d9..c0ece86fa4 100644 --- a/btcec/schnorr/musig2/nonces.go +++ b/btcec/schnorr/musig2/nonces.go @@ -3,9 +3,14 @@ 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 ( @@ -19,6 +24,18 @@ const ( 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 @@ -71,21 +88,173 @@ func secNonceToPubNonce(secNonce [SecNonceSize]byte) [PubNonceSize]byte { // generation happens. type NonceGenOption func(*nonceGenOpts) -// nonceGenOpts is the set of options that control how nonce generation happens. +// nonceGenOpts is the set of options that control how nonce generation +// happens. type nonceGenOpts struct { - randReader func(b []byte) (int, error) + // 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{ - // 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. - randReader: rand.Read, + 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 + } +} + +// lengthWriter is a function closure that allows a caller to control how the +// length prefix of a byte slice is written. +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))) +} + +// uint8Writer 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))) +} + +// 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 || len(m) +// || m || len(in) || in || i). +// +// where i is the ith secret nonce being generated. +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 + } + + // Next, we'll write out the length prefixed message. + err = writeBytesPrefix(&w, opts.msg, uint8Writer) + 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) { @@ -94,24 +263,31 @@ func GenNonces(options ...NonceGenOption) (*Nonces, error) { opt(opts) } - // Generate two 32-byte random values that'll be the private keys to - // the public nonces. - var k1, k2 [32]byte - if _, err := opts.randReader(k1[:]); err != nil { + // 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 _, err := opts.randReader(k2[:]); err != nil { + + // Using our randomness and the set of optional params, generate our + // two secret nonces: k1 and k2. + k1, err := genNonceAuxBytes(randBytes[:], 1, opts) + if err != nil { + return nil, err + } + k2, err := genNonceAuxBytes(randBytes[:], 2, opts) + if err != nil { return nil, err } - - var nonces Nonces var k1Mod, k2Mod btcec.ModNScalar - k1Mod.SetBytes(&k1) - k2Mod.SetBytes(&k2) + 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:]) From 55c8cab7694a55be8bd30975d2142ecdb5bb1615 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Tue, 26 Apr 2022 21:33:34 -0700 Subject: [PATCH 370/419] btcec/schnorr/musig2: add new key tweak combination test vectors --- btcec/schnorr/musig2/musig2_test.go | 106 ++++++++++++++++++++++------ 1 file changed, 83 insertions(+), 23 deletions(-) diff --git a/btcec/schnorr/musig2/musig2_test.go b/btcec/schnorr/musig2/musig2_test.go index 1ff3151300..71378f61ba 100644 --- a/btcec/schnorr/musig2/musig2_test.go +++ b/btcec/schnorr/musig2/musig2_test.go @@ -142,6 +142,23 @@ var ( signSetKeys = []*btcec.PublicKey{signSetPubKey, signSetKey2, signSetKey3} ) +func formatTweakParity(tweaks []KeyTweakDesc) string { + var s string + for _, tweak := range tweaks { + s += fmt.Sprintf("%v/", tweak.IsXOnly) + } + + // Snip off that last '/'. + s = s[:len(s)-1] + + return s +} + +func genTweakParity(tweak KeyTweakDesc, isXOnly bool) KeyTweakDesc { + tweak.IsXOnly = isXOnly + return tweak +} + // TestMuSig2SigningTestVectors tests that the musig2 implementation produces // the same set of signatures. func TestMuSig2SigningTestVectors(t *testing.T) { @@ -161,10 +178,43 @@ func TestMuSig2SigningTestVectors(t *testing.T) { copy(secNonce[:], mustParseHex("508B81A611F100A6B2B6B29656590898AF488BCF2E1F55CF22E5CFB84421FE61")) copy(secNonce[32:], mustParseHex("FA27FD49B1D50085B481285E1CA205D55C82CC1B31FF5CD54A489829355901F7")) + tweak1 := KeyTweakDesc{ + Tweak: [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, + }, + } + tweak2 := KeyTweakDesc{ + Tweak: [32]byte{ + 0xae, 0x2e, 0xa7, 0x97, 0xcc, 0xf, 0xe7, 0x2a, + 0xc5, 0xb9, 0x7b, 0x97, 0xf3, 0xc6, 0x95, 0x7d, + 0x7e, 0x41, 0x99, 0xa1, 0x67, 0xa5, 0x8e, 0xb0, + 0x8b, 0xca, 0xff, 0xda, 0x70, 0xac, 0x4, 0x55, + }, + } + tweak3 := KeyTweakDesc{ + Tweak: [32]byte{ + 0xf5, 0x2e, 0xcb, 0xc5, 0x65, 0xb3, 0xd8, 0xbe, + 0xa2, 0xdf, 0xd5, 0xb7, 0x5a, 0x4f, 0x45, 0x7e, + 0x54, 0x36, 0x98, 0x9, 0x32, 0x2e, 0x41, 0x20, + 0x83, 0x16, 0x26, 0xf2, 0x90, 0xfa, 0x87, 0xe0, + }, + } + tweak4 := KeyTweakDesc{ + Tweak: [32]byte{ + 0x19, 0x69, 0xad, 0x73, 0xcc, 0x17, 0x7f, 0xa0, + 0xb4, 0xfc, 0xed, 0x6d, 0xf1, 0xf7, 0xbf, 0x99, + 0x7, 0xe6, 0x65, 0xfd, 0xe9, 0xba, 0x19, 0x6a, + 0x74, 0xfe, 0xd0, 0xa3, 0xcf, 0x5a, 0xef, 0x9d, + }, + } + testCases := []struct { keyOrder []int expectedPartialSig []byte - tweak *KeyTweakDesc + tweaks []KeyTweakDesc }{ { keyOrder: []int{0, 1, 2}, @@ -178,30 +228,40 @@ func TestMuSig2SigningTestVectors(t *testing.T) { keyOrder: []int{1, 2, 0}, expectedPartialSig: mustParseHex("0D5B651E6DE34A29A12DE7A8B4183B4AE6A7F7FBE15CDCAFA4A3D1BCAABC7517"), }, + + // A single x-only tweak. { keyOrder: []int{1, 2, 0}, expectedPartialSig: mustParseHex("5e24c7496b565debc3b9639e6f1304a21597f9603d3ab05b4913641775e1375b"), - tweak: &KeyTweakDesc{ - Tweak: [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, - }, - IsXOnly: true, - }, + tweaks: []KeyTweakDesc{genTweakParity(tweak1, true)}, }, + + // A single ordinary tweak. { keyOrder: []int{1, 2, 0}, expectedPartialSig: mustParseHex("78408ddcab4813d1394c97d493ef1084195c1d4b52e63ecd7bc5991644e44ddd"), - tweak: &KeyTweakDesc{ - Tweak: [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, - }, - IsXOnly: false, + tweaks: []KeyTweakDesc{genTweakParity(tweak1, false)}, + }, + + // An ordinary tweak then an x-only tweak. + { + keyOrder: []int{1, 2, 0}, + expectedPartialSig: mustParseHex("C3A829A81480E36EC3AB052964509A94EBF34210403D16B226A6F16EC85B7357"), + tweaks: []KeyTweakDesc{ + genTweakParity(tweak1, false), + genTweakParity(tweak2, true), + }, + }, + + // Four tweaks, in the order: x-only, ordinary, x-only, ordinary. + { + keyOrder: []int{1, 2, 0}, + expectedPartialSig: mustParseHex("8C4473C6A382BD3C4AD7BE59818DA5ED7CF8CEC4BC21996CFDA08BB4316B8BC7"), + tweaks: []KeyTweakDesc{ + genTweakParity(tweak1, true), + genTweakParity(tweak2, false), + genTweakParity(tweak3, true), + genTweakParity(tweak4, false), }, }, } @@ -210,9 +270,9 @@ func TestMuSig2SigningTestVectors(t *testing.T) { copy(msg[:], signTestMsg) for _, testCase := range testCases { - testName := fmt.Sprintf("%v/tweak=%v", testCase.keyOrder, testCase.tweak != nil) - if testCase.tweak != nil { - testName += fmt.Sprintf("/x_only=%v", testCase.tweak.IsXOnly) + testName := fmt.Sprintf("%v/tweak=%v", testCase.keyOrder, len(testCase.tweaks) != 0) + if len(testCase.tweaks) != 0 { + testName += fmt.Sprintf("/x_only=%v", formatTweakParity(testCase.tweaks)) } t.Run(testName, func(t *testing.T) { @@ -222,9 +282,9 @@ func TestMuSig2SigningTestVectors(t *testing.T) { } var opts []SignOption - if testCase.tweak != nil { + if len(testCase.tweaks) != 0 { opts = append( - opts, WithTweaks(*testCase.tweak), + opts, WithTweaks(testCase.tweaks...), ) } From 953e2dd94aa7590d793cbf9c074c0ee6ebbdf6cc Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Wed, 27 Apr 2022 16:47:11 -0700 Subject: [PATCH 371/419] btcec/schnorr/musig2: enable early nonce generation w/ a context In this commit, we enable early nonce generation, allowing callers to obtain generated nonces before the total set of signers is actually known. This type of nonce generation is useful for contexts like LN funding when we want to minimize the round trips and send nonces before we know the pubkey of the other party. --- btcec/schnorr/musig2/context.go | 346 ++++++++++++++++++++++------ btcec/schnorr/musig2/musig2_test.go | 187 ++++++++++++++- btcec/schnorr/musig2/nonces.go | 2 +- 3 files changed, 467 insertions(+), 68 deletions(-) diff --git a/btcec/schnorr/musig2/context.go b/btcec/schnorr/musig2/context.go index 2461f962ab..298fe96179 100644 --- a/btcec/schnorr/musig2/context.go +++ b/btcec/schnorr/musig2/context.go @@ -10,6 +10,12 @@ import ( ) 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" + @@ -19,6 +25,16 @@ var ( // 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") @@ -39,6 +55,10 @@ var ( // 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 @@ -50,9 +70,6 @@ type Context struct { // pubKey is our even-y coordinate public key. pubKey *btcec.PublicKey - // keySet is the set of all signers. - keySet []*btcec.PublicKey - // combinedKey is the aggregated public key. combinedKey *AggregateKey @@ -69,6 +86,10 @@ type Context struct { // 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 @@ -94,6 +115,17 @@ type contextOptions struct { // 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. @@ -129,12 +161,43 @@ func WithBip86TweakCtx() ContextOption { } } +// 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, - signers []*btcec.PublicKey, shouldSort bool, +func NewContext(signingKey *btcec.PrivateKey, shouldSort bool, ctxOpts ...ContextOption) (*Context, error) { // First, parse the set of optional context options. @@ -143,10 +206,6 @@ func NewContext(signingKey *btcec.PrivateKey, option(opts) } - // As a sanity check, make sure the signing key is actually amongst the sit - // of signers. - // - // TODO(roasbeef): instead have pass all the _other_ signers? pubKey, err := schnorr.ParsePubKey( schnorr.SerializePubKey(signingKey.PubKey()), ) @@ -154,64 +213,156 @@ func NewContext(signingKey *btcec.PrivateKey, return nil, err } + 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 { + ctx.sessionNonce, err = GenNonces() + 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 signers { - if key.IsEqual(pubKey) { + for _, key := range c.opts.keySet { + if key.IsEqual(c.pubKey) { keyFound = true break } } if !keyFound { - return nil, ErrSignerNotInKeySet + 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. - keysHash := keyHashFingerprint(signers, shouldSort) - uniqueKeyIndex := secondUniqueKeyIndex(signers, shouldSort) + // 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(keysHash), WithUniqueKeyIndex(uniqueKeyIndex), + WithKeysHash(c.keysHash), + WithUniqueKeyIndex(c.uniqueKeyIndex), } switch { - case opts.bip86Tweak: + case c.opts.bip86Tweak: keyAggOpts = append( keyAggOpts, WithBIP86KeyTweak(), ) - case opts.taprootTweak != nil: + case c.opts.taprootTweak != nil: keyAggOpts = append( - keyAggOpts, WithTaprootKeyTweak(opts.taprootTweak), + keyAggOpts, WithTaprootKeyTweak(c.opts.taprootTweak), ) - case len(opts.tweaks) != 0: - keyAggOpts = append(keyAggOpts, WithKeyTweaks(opts.tweaks...)) + 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. - combinedKey, _, _, err := AggregateKeys( - signers, shouldSort, keyAggOpts..., + // 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 nil, err + return err } - return &Context{ - signingKey: signingKey, - pubKey: pubKey, - keySet: signers, - combinedKey: combinedKey, - uniqueKeyIndex: uniqueKeyIndex, - keysHash: keysHash, - opts: opts, - shouldSort: shouldSort, - }, nil + 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 { - return c.combinedKey.FinalKey +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. @@ -221,8 +372,8 @@ func (c *Context) PubKey() btcec.PublicKey { // SigningKeys returns the set of keys used for signing. func (c *Context) SigningKeys() []*btcec.PublicKey { - keys := make([]*btcec.PublicKey, len(c.keySet)) - copy(keys, c.keySet) + keys := make([]*btcec.PublicKey, len(c.opts.keySet)) + copy(keys, c.opts.keySet) return keys } @@ -230,9 +381,15 @@ func (c *Context) SigningKeys() []*btcec.PublicKey { // 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 speciifed, then this +// 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 } @@ -240,6 +397,30 @@ func (c *Context) TaprootInternalKey() (*btcec.PublicKey, error) { 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 @@ -248,6 +429,8 @@ func (c *Context) TaprootInternalKey() (*btcec.PublicKey, error) { // // NOTE: This struct should be used over the raw Sign API whenever possible. type Session struct { + opts *sessionOptions + ctx *Context localNonces *Nonces @@ -264,20 +447,52 @@ type Session struct { finalSig *schnorr.Signature } -// TODO(roasbeef): optional arg to allow parsing in pre-generated nonces - // NewSession creates a new musig2 signing session. -func (c *Context) NewSession() (*Session, error) { - localNonces, err := GenNonces() - if err != nil { - return nil, err +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 { + localNonces, err = GenNonces() + if err != nil { + return nil, err + } } s := &Session{ + opts: opts, ctx: c, localNonces: localNonces, - pubNonces: make([][PubNonceSize]byte, 0, len(c.keySet)), - sigs: make([]*PartialSignature, 0, len(c.keySet)), + pubNonces: make([][PubNonceSize]byte, 0, c.opts.numSigners), + sigs: make([]*PartialSignature, 0, c.opts.numSigners), } s.pubNonces = append(s.pubNonces, localNonces.PubNonce) @@ -302,9 +517,9 @@ func (s *Session) NumRegisteredNonces() int { // 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) == len(s.ctx.keySet) + // 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 } @@ -312,7 +527,7 @@ func (s *Session) RegisterPubNonce(nonce [PubNonceSize]byte) (bool, error) { // 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) == len(s.ctx.keySet) + haveAllNonces = len(s.pubNonces) == s.ctx.opts.numSigners // If we have all the nonces, then we can go ahead and combine them // now. @@ -334,8 +549,6 @@ func (s *Session) RegisterPubNonce(nonce [PubNonceSize]byte) (bool, error) { func (s *Session) Sign(msg [32]byte, signOpts ...SignOption) (*PartialSignature, error) { - s.msg = msg - switch { // If no local nonce is present, then this means we already signed, so // we'll return an error to prevent nonce re-use. @@ -363,7 +576,7 @@ func (s *Session) Sign(msg [32]byte, partialSig, err := Sign( s.localNonces.SecNonce, s.ctx.signingKey, *s.combinedNonce, - s.ctx.keySet, msg, signOpts..., + s.ctx.opts.keySet, msg, signOpts..., ) // Now that we've generated our signature, we'll make sure to blank out @@ -374,6 +587,8 @@ func (s *Session) Sign(msg [32]byte, return nil, err } + s.msg = msg + s.ourSig = partialSig s.sigs = append(s.sigs, partialSig) @@ -386,7 +601,7 @@ func (s *Session) Sign(msg [32]byte, 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.keySet) + haveAllSigs := len(s.sigs) == len(s.ctx.opts.keySet) if haveAllSigs { return false, ErrAlredyHaveAllSigs } @@ -397,7 +612,7 @@ func (s *Session) CombineSig(sig *PartialSignature) (bool, error) { // 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.keySet) + 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. @@ -407,21 +622,22 @@ func (s *Session) CombineSig(sig *PartialSignature) (bool, error) { case s.ctx.opts.bip86Tweak: combineOpts = append( combineOpts, WithBip86TweakedCombine( - s.msg, s.ctx.keySet, s.ctx.shouldSort, + s.msg, s.ctx.opts.keySet, + s.ctx.shouldSort, ), ) case s.ctx.opts.taprootTweak != nil: combineOpts = append( combineOpts, WithTaprootTweakedCombine( - s.msg, s.ctx.keySet, s.ctx.opts.taprootTweak, - s.ctx.shouldSort, + 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.keySet, s.ctx.opts.tweaks, - s.ctx.shouldSort, + s.msg, s.ctx.opts.keySet, + s.ctx.opts.tweaks, s.ctx.shouldSort, ), ) } diff --git a/btcec/schnorr/musig2/musig2_test.go b/btcec/schnorr/musig2/musig2_test.go index 71378f61ba..df3f78c93c 100644 --- a/btcec/schnorr/musig2/musig2_test.go +++ b/btcec/schnorr/musig2/musig2_test.go @@ -6,6 +6,7 @@ import ( "bytes" "crypto/sha256" "encoding/hex" + "errors" "fmt" "sync" "testing" @@ -392,20 +393,25 @@ func testMultiPartySign(t *testing.T, taprootTweak []byte, 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, signSet, false, ctxOpts..., + signerKey, false, ctxOpts..., ) if err != nil { t.Fatalf("unable to generate context: %v", err) } if combinedKey == nil { - combinedKey = signCtx.CombinedKey() + combinedKey, err = signCtx.CombinedKey() + if err != nil { + t.Fatalf("combined key not available: %v", err) + } } session, err := signCtx.NewSession() @@ -538,3 +544,180 @@ func TestMuSigMultiParty(t *testing.T) { 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!") + } +} diff --git a/btcec/schnorr/musig2/nonces.go b/btcec/schnorr/musig2/nonces.go index c0ece86fa4..5a7fbd4b3d 100644 --- a/btcec/schnorr/musig2/nonces.go +++ b/btcec/schnorr/musig2/nonces.go @@ -185,7 +185,7 @@ func uint8Writer(w io.Writer, b []byte) error { return binary.Write(w, byteOrder, uint8(len(b))) } -// uint8Writer is an implementation of lengthWriter that writes the length of +// 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))) From ba20c75aaffee0e09cbfdd7b204add18485bd1a8 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Wed, 27 Apr 2022 16:51:53 -0700 Subject: [PATCH 372/419] btcec/schnorr/musig2: pass in aux info during nonce generation --- btcec/schnorr/musig2/context.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/btcec/schnorr/musig2/context.go b/btcec/schnorr/musig2/context.go index 298fe96179..19cef34fa9 100644 --- a/btcec/schnorr/musig2/context.go +++ b/btcec/schnorr/musig2/context.go @@ -481,7 +481,13 @@ func (c *Context) NewSession(options ...SessionOption) (*Session, error) { // specified nonce, or generate a fresh set. var err error if localNonces == nil { - localNonces, err = GenNonces() + // 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 } From 1da361b04e7c4a90c719f56762fa556cce995201 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Thu, 28 Apr 2022 16:06:39 -0700 Subject: [PATCH 373/419] btcec/schnorr/musig2: add optional json dump command to gen test vectors --- btcec/schnorr/musig2/musig2_test.go | 118 ++++++++++++++++++++++++++-- 1 file changed, 111 insertions(+), 7 deletions(-) diff --git a/btcec/schnorr/musig2/musig2_test.go b/btcec/schnorr/musig2/musig2_test.go index df3f78c93c..c9ae74d7be 100644 --- a/btcec/schnorr/musig2/musig2_test.go +++ b/btcec/schnorr/musig2/musig2_test.go @@ -6,8 +6,11 @@ import ( "bytes" "crypto/sha256" "encoding/hex" + "encoding/json" "errors" + "flag" "fmt" + "io/ioutil" "sync" "testing" @@ -15,12 +18,6 @@ import ( "github.com/btcsuite/btcd/btcec/v2/schnorr" ) -// TestMuSig2SgnTestVectors tests that this implementation of musig2 matches -// the secp256k1-zkp test vectors. -func TestMuSig2SignTestVectors(t *testing.T) { - t.Parallel() -} - var ( key1Bytes, _ = hex.DecodeString("F9308A019258C31049344F85F89D5229B53" + "1C845836F99B08601F113BCE036F9") @@ -37,11 +34,27 @@ var ( keyCombo4, _ = hex.DecodeString("2EB18851887E7BDC5E830E89B19DDBC28078F1FA88AAD0AD01CA06FE4F80210B") ) +const ( + keyAggTestVectorName = "key_agg_vectors.json" + + signTestVectorName = "sign_vectors.json" +) + +var dumpJson = flag.Bool("dumpjson", false, "if true, a JSON version of the "+ + "test vectors will be written to the cwd") + +type jsonKeyAggTestCase struct { + Keys []string `json:"keys"` + ExpectedKey string `json:"expected_key"` +} + // TestMuSig2KeyAggTestVectors tests that this implementation of musig2 key // aggregation lines up with the secp256k1-zkp test vectors. func TestMuSig2KeyAggTestVectors(t *testing.T) { t.Parallel() + var jsonCases []jsonKeyAggTestCase + testCases := []struct { keyOrder []int expectedKey []byte @@ -73,7 +86,10 @@ func TestMuSig2KeyAggTestVectors(t *testing.T) { for i, testCase := range testCases { testName := fmt.Sprintf("%v", testCase.keyOrder) t.Run(testName, func(t *testing.T) { - var keys []*btcec.PublicKey + var ( + keys []*btcec.PublicKey + strKeys []string + ) for _, keyIndex := range testCase.keyOrder { keyBytes := testKeys[keyIndex] pub, err := schnorr.ParsePubKey(keyBytes) @@ -82,8 +98,14 @@ func TestMuSig2KeyAggTestVectors(t *testing.T) { } keys = append(keys, pub) + strKeys = append(strKeys, hex.EncodeToString(keyBytes)) } + jsonCases = append(jsonCases, jsonKeyAggTestCase{ + Keys: strKeys, + ExpectedKey: hex.EncodeToString(testCase.expectedKey), + }) + uniqueKeyIndex := secondUniqueKeyIndex(keys, false) combinedKey, _, _, _ := AggregateKeys( keys, false, WithUniqueKeyIndex(uniqueKeyIndex), @@ -96,6 +118,22 @@ func TestMuSig2KeyAggTestVectors(t *testing.T) { } }) } + + if *dumpJson { + jsonBytes, err := json.Marshal(jsonCases) + if err != nil { + t.Fatalf("unable to encode json: %v", err) + } + + var formattedJson bytes.Buffer + json.Indent(&formattedJson, jsonBytes, "", "\t") + err = ioutil.WriteFile( + keyAggTestVectorName, formattedJson.Bytes(), 0644, + ) + if err != nil { + t.Fatalf("unable to write file: %v", err) + } + } } func mustParseHex(str string) []byte { @@ -160,11 +198,37 @@ func genTweakParity(tweak KeyTweakDesc, isXOnly bool) KeyTweakDesc { return tweak } +type jsonTweak struct { + Tweak string `json:"tweak"` + XOnly bool `json:"x_only"` +} + +type tweakSignCase struct { + Keys []string `json:"keys"` + Tweaks []jsonTweak `json:"tweaks,omitempty"` + + ExpectedSig string `json:"expected_sig"` +} + +type jsonSignTestCase struct { + SecNonce string `json:"secret_nonce"` + AggNonce string `json:"agg_nonce"` + SigningKey string `json:"signing_key"` + Msg string `json:"msg"` + + TestCases []tweakSignCase `json:"test_cases"` +} + // TestMuSig2SigningTestVectors tests that the musig2 implementation produces // the same set of signatures. func TestMuSig2SigningTestVectors(t *testing.T) { t.Parallel() + var jsonCases jsonSignTestCase + + jsonCases.SigningKey = hex.EncodeToString(signSetPrivKey.Serialize()) + jsonCases.Msg = hex.EncodeToString(signTestMsg) + var aggregatedNonce [PubNonceSize]byte copy( aggregatedNonce[:], @@ -175,10 +239,14 @@ func TestMuSig2SigningTestVectors(t *testing.T) { mustParseHex("037496A3CC86926D452CAFCFD55D25972CA1675D549310DE296BFF42F72EEEA8C9"), ) + jsonCases.AggNonce = hex.EncodeToString(aggregatedNonce[:]) + var secNonce [SecNonceSize]byte copy(secNonce[:], mustParseHex("508B81A611F100A6B2B6B29656590898AF488BCF2E1F55CF22E5CFB84421FE61")) copy(secNonce[32:], mustParseHex("FA27FD49B1D50085B481285E1CA205D55C82CC1B31FF5CD54A489829355901F7")) + jsonCases.SecNonce = hex.EncodeToString(secNonce[:]) + tweak1 := KeyTweakDesc{ Tweak: [32]byte{ 0xE8, 0xF7, 0x91, 0xFF, 0x92, 0x25, 0xA2, 0xAF, @@ -277,9 +345,15 @@ func TestMuSig2SigningTestVectors(t *testing.T) { } t.Run(testName, func(t *testing.T) { + var strKeys []string keySet := make([]*btcec.PublicKey, 0, len(testCase.keyOrder)) for _, keyIndex := range testCase.keyOrder { keySet = append(keySet, signSetKeys[keyIndex]) + strKeys = append( + strKeys, hex.EncodeToString( + schnorr.SerializePubKey(signSetKeys[keyIndex]), + ), + ) } var opts []SignOption @@ -289,6 +363,14 @@ func TestMuSig2SigningTestVectors(t *testing.T) { ) } + var jsonTweaks []jsonTweak + for _, tweak := range testCase.tweaks { + jsonTweaks = append(jsonTweaks, jsonTweak{ + Tweak: hex.EncodeToString(tweak.Tweak[:]), + XOnly: tweak.IsXOnly, + }) + } + partialSig, err := Sign( secNonce, signSetPrivKey, aggregatedNonce, keySet, msg, opts..., @@ -305,8 +387,30 @@ func TestMuSig2SigningTestVectors(t *testing.T) { testCase.expectedPartialSig, partialSigBytes, ) } + + jsonCases.TestCases = append(jsonCases.TestCases, tweakSignCase{ + Keys: strKeys, + Tweaks: jsonTweaks, + ExpectedSig: hex.EncodeToString(testCase.expectedPartialSig), + }) }) } + + if *dumpJson { + jsonBytes, err := json.Marshal(jsonCases) + if err != nil { + t.Fatalf("unable to encode json: %v", err) + } + + var formattedJson bytes.Buffer + json.Indent(&formattedJson, jsonBytes, "", "\t") + err = ioutil.WriteFile( + signTestVectorName, formattedJson.Bytes(), 0644, + ) + if err != nil { + t.Fatalf("unable to write file: %v", err) + } + } } type signer struct { From a336854e2785a26aa0b162dbe1c6c99944b42856 Mon Sep 17 00:00:00 2001 From: Oliver Gugger Date: Mon, 2 May 2022 16:25:09 +0200 Subject: [PATCH 374/419] psbt: fix typo, remove TODO --- btcutil/psbt/partialsig.go | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/btcutil/psbt/partialsig.go b/btcutil/psbt/partialsig.go index 71cb63cdbf..dfb7004999 100644 --- a/btcutil/psbt/partialsig.go +++ b/btcutil/psbt/partialsig.go @@ -2,7 +2,6 @@ package psbt import ( "bytes" - "github.com/btcsuite/btcd/btcec/v2" "github.com/btcsuite/btcd/btcec/v2/ecdsa" ) @@ -43,11 +42,8 @@ func validateSignature(sig []byte) bool { return err == nil } -// checkValid checks that both the pbukey and sig are valid. See the methods +// checkValid checks that both the pubkey and sig are valid. See the methods // (PartialSig, validatePubkey, validateSignature) for more details. -// -// TODO(waxwing): update for Schnorr will be needed here if/when that -// activates. func (ps *PartialSig) checkValid() bool { return validatePubkey(ps.PubKey) && validateSignature(ps.Signature) } From a764afd44e25f0eaa6da7578d4e64a806e87d880 Mon Sep 17 00:00:00 2001 From: Oliver Gugger Date: Mon, 2 May 2022 16:25:11 +0200 Subject: [PATCH 375/419] psbt: rename receiver to match rest of code --- btcutil/psbt/updater.go | 84 ++++++++++++++++++++--------------------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/btcutil/psbt/updater.go b/btcutil/psbt/updater.go index 56a33654b6..66c8d1d83c 100644 --- a/btcutil/psbt/updater.go +++ b/btcutil/psbt/updater.go @@ -14,9 +14,9 @@ import ( "bytes" "crypto/sha256" + "github.com/btcsuite/btcd/btcutil" "github.com/btcsuite/btcd/txscript" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcd/btcutil" ) // Updater encapsulates the role 'Updater' as specified in BIP174; it accepts @@ -40,14 +40,14 @@ func NewUpdater(p *Packet) (*Updater, error) { // 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 (p *Updater) AddInNonWitnessUtxo(tx *wire.MsgTx, inIndex int) error { - if inIndex > len(p.Upsbt.Inputs)-1 { +func (u *Updater) AddInNonWitnessUtxo(tx *wire.MsgTx, inIndex int) error { + if inIndex > len(u.Upsbt.Inputs)-1 { return ErrInvalidPrevOutNonWitnessTransaction } - p.Upsbt.Inputs[inIndex].NonWitnessUtxo = tx + u.Upsbt.Inputs[inIndex].NonWitnessUtxo = tx - if err := p.Upsbt.SanityCheck(); err != nil { + if err := u.Upsbt.SanityCheck(); err != nil { return ErrInvalidPsbtFormat } @@ -59,14 +59,14 @@ func (p *Updater) AddInNonWitnessUtxo(tx *wire.MsgTx, inIndex int) error { // 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 (p *Updater) AddInWitnessUtxo(txout *wire.TxOut, inIndex int) error { - if inIndex > len(p.Upsbt.Inputs)-1 { +func (u *Updater) AddInWitnessUtxo(txout *wire.TxOut, inIndex int) error { + if inIndex > len(u.Upsbt.Inputs)-1 { return ErrInvalidPsbtFormat } - p.Upsbt.Inputs[inIndex].WitnessUtxo = txout + u.Upsbt.Inputs[inIndex].WitnessUtxo = txout - if err := p.Upsbt.SanityCheck(); err != nil { + if err := u.Upsbt.SanityCheck(); err != nil { return ErrInvalidPsbtFormat } @@ -81,7 +81,7 @@ func (p *Updater) AddInWitnessUtxo(txout *wire.TxOut, inIndex int) error { // rules are not satisfied, an ErrInvalidSignatureForInput is returned. // // NOTE: This function does *not* validate the ECDSA signature itself. -func (p *Updater) addPartialSignature(inIndex int, sig []byte, +func (u *Updater) addPartialSignature(inIndex int, sig []byte, pubkey []byte) error { partialSig := PartialSig{ @@ -93,7 +93,7 @@ func (p *Updater) addPartialSignature(inIndex int, sig []byte, return ErrInvalidPsbtFormat } - pInput := p.Upsbt.Inputs[inIndex] + pInput := u.Upsbt.Inputs[inIndex] // First check; don't add duplicates. for _, x := range pInput.PartialSigs { @@ -109,12 +109,12 @@ func (p *Updater) addPartialSignature(inIndex int, sig []byte, // Next, we perform a series of additional sanity checks. if pInput.NonWitnessUtxo != nil { - if len(p.Upsbt.UnsignedTx.TxIn) < inIndex+1 { + if len(u.Upsbt.UnsignedTx.TxIn) < inIndex+1 { return ErrInvalidPrevOutNonWitnessTransaction } if pInput.NonWitnessUtxo.TxHash() != - p.Upsbt.UnsignedTx.TxIn[inIndex].PreviousOutPoint.Hash { + u.Upsbt.UnsignedTx.TxIn[inIndex].PreviousOutPoint.Hash { return ErrInvalidSignatureForInput } @@ -123,7 +123,7 @@ func (p *Updater) addPartialSignature(inIndex int, sig []byte, // that with the P2SH scriptPubKey that is generated by // redeemScript. if pInput.RedeemScript != nil { - outIndex := p.Upsbt.UnsignedTx.TxIn[inIndex].PreviousOutPoint.Index + outIndex := u.Upsbt.UnsignedTx.TxIn[inIndex].PreviousOutPoint.Index scriptPubKey := pInput.NonWitnessUtxo.TxOut[outIndex].PkScript scriptHash := btcutil.Hash160(pInput.RedeemScript) @@ -212,11 +212,11 @@ func (p *Updater) addPartialSignature(inIndex int, sig []byte, } } - p.Upsbt.Inputs[inIndex].PartialSigs = append( - p.Upsbt.Inputs[inIndex].PartialSigs, &partialSig, + u.Upsbt.Inputs[inIndex].PartialSigs = append( + u.Upsbt.Inputs[inIndex].PartialSigs, &partialSig, ) - if err := p.Upsbt.SanityCheck(); err != nil { + if err := u.Upsbt.SanityCheck(); err != nil { return err } @@ -229,12 +229,12 @@ func (p *Updater) addPartialSignature(inIndex int, sig []byte, // 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 (p *Updater) AddInSighashType(sighashType txscript.SigHashType, +func (u *Updater) AddInSighashType(sighashType txscript.SigHashType, inIndex int) error { - p.Upsbt.Inputs[inIndex].SighashType = sighashType + u.Upsbt.Inputs[inIndex].SighashType = sighashType - if err := p.Upsbt.SanityCheck(); err != nil { + if err := u.Upsbt.SanityCheck(); err != nil { return err } return nil @@ -244,12 +244,12 @@ func (p *Updater) AddInSighashType(sighashType txscript.SigHashType, // 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 (p *Updater) AddInRedeemScript(redeemScript []byte, +func (u *Updater) AddInRedeemScript(redeemScript []byte, inIndex int) error { - p.Upsbt.Inputs[inIndex].RedeemScript = redeemScript + u.Upsbt.Inputs[inIndex].RedeemScript = redeemScript - if err := p.Upsbt.SanityCheck(); err != nil { + if err := u.Upsbt.SanityCheck(); err != nil { return ErrInvalidPsbtFormat } @@ -260,12 +260,12 @@ func (p *Updater) AddInRedeemScript(redeemScript []byte, // 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 (p *Updater) AddInWitnessScript(witnessScript []byte, +func (u *Updater) AddInWitnessScript(witnessScript []byte, inIndex int) error { - p.Upsbt.Inputs[inIndex].WitnessScript = witnessScript + u.Upsbt.Inputs[inIndex].WitnessScript = witnessScript - if err := p.Upsbt.SanityCheck(); err != nil { + if err := u.Upsbt.SanityCheck(); err != nil { return err } @@ -279,7 +279,7 @@ func (p *Updater) AddInWitnessScript(witnessScript []byte, // // 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 (p *Updater) AddInBip32Derivation(masterKeyFingerprint uint32, +func (u *Updater) AddInBip32Derivation(masterKeyFingerprint uint32, bip32Path []uint32, pubKeyData []byte, inIndex int) error { bip32Derivation := Bip32Derivation{ @@ -293,17 +293,17 @@ func (p *Updater) AddInBip32Derivation(masterKeyFingerprint uint32, } // Don't allow duplicate keys - for _, x := range p.Upsbt.Inputs[inIndex].Bip32Derivation { + for _, x := range u.Upsbt.Inputs[inIndex].Bip32Derivation { if bytes.Equal(x.PubKey, bip32Derivation.PubKey) { return ErrDuplicateKey } } - p.Upsbt.Inputs[inIndex].Bip32Derivation = append( - p.Upsbt.Inputs[inIndex].Bip32Derivation, &bip32Derivation, + u.Upsbt.Inputs[inIndex].Bip32Derivation = append( + u.Upsbt.Inputs[inIndex].Bip32Derivation, &bip32Derivation, ) - if err := p.Upsbt.SanityCheck(); err != nil { + if err := u.Upsbt.SanityCheck(); err != nil { return err } @@ -317,7 +317,7 @@ func (p *Updater) AddInBip32Derivation(masterKeyFingerprint uint32, // // 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 (p *Updater) AddOutBip32Derivation(masterKeyFingerprint uint32, +func (u *Updater) AddOutBip32Derivation(masterKeyFingerprint uint32, bip32Path []uint32, pubKeyData []byte, outIndex int) error { bip32Derivation := Bip32Derivation{ @@ -331,17 +331,17 @@ func (p *Updater) AddOutBip32Derivation(masterKeyFingerprint uint32, } // Don't allow duplicate keys - for _, x := range p.Upsbt.Outputs[outIndex].Bip32Derivation { + for _, x := range u.Upsbt.Outputs[outIndex].Bip32Derivation { if bytes.Equal(x.PubKey, bip32Derivation.PubKey) { return ErrDuplicateKey } } - p.Upsbt.Outputs[outIndex].Bip32Derivation = append( - p.Upsbt.Outputs[outIndex].Bip32Derivation, &bip32Derivation, + u.Upsbt.Outputs[outIndex].Bip32Derivation = append( + u.Upsbt.Outputs[outIndex].Bip32Derivation, &bip32Derivation, ) - if err := p.Upsbt.SanityCheck(); err != nil { + if err := u.Upsbt.SanityCheck(); err != nil { return err } @@ -350,12 +350,12 @@ func (p *Updater) AddOutBip32Derivation(masterKeyFingerprint uint32, // AddOutRedeemScript takes a redeem script as a byte slice and appends it to // the output at index outIndex. -func (p *Updater) AddOutRedeemScript(redeemScript []byte, +func (u *Updater) AddOutRedeemScript(redeemScript []byte, outIndex int) error { - p.Upsbt.Outputs[outIndex].RedeemScript = redeemScript + u.Upsbt.Outputs[outIndex].RedeemScript = redeemScript - if err := p.Upsbt.SanityCheck(); err != nil { + if err := u.Upsbt.SanityCheck(); err != nil { return ErrInvalidPsbtFormat } @@ -364,12 +364,12 @@ func (p *Updater) AddOutRedeemScript(redeemScript []byte, // AddOutWitnessScript takes a witness script as a byte slice and appends it to // the output at index outIndex. -func (p *Updater) AddOutWitnessScript(witnessScript []byte, +func (u *Updater) AddOutWitnessScript(witnessScript []byte, outIndex int) error { - p.Upsbt.Outputs[outIndex].WitnessScript = witnessScript + u.Upsbt.Outputs[outIndex].WitnessScript = witnessScript - if err := p.Upsbt.SanityCheck(); err != nil { + if err := u.Upsbt.SanityCheck(); err != nil { return err } From e6367b26b72e1642144b87e189aad443ddf07826 Mon Sep 17 00:00:00 2001 From: Oliver Gugger Date: Mon, 2 May 2022 16:25:12 +0200 Subject: [PATCH 376/419] psbt: remove invalid type from typo --- btcutil/psbt/types.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/btcutil/psbt/types.go b/btcutil/psbt/types.go index 1b4a26a4dc..2a74c9bfd6 100644 --- a/btcutil/psbt/types.go +++ b/btcutil/psbt/types.go @@ -138,7 +138,7 @@ const ( // The value is the witness script of this input, if it has one. WitnessScriptOutputType OutputType = 1 - j // Bip32DerivationOutputType is used to communicate derivation information + // 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 From db6cb69d845335051cb2c472e397c9bc62c6e681 Mon Sep 17 00:00:00 2001 From: Oliver Gugger Date: Mon, 2 May 2022 16:25:13 +0200 Subject: [PATCH 377/419] psbt: add new input/output types and structs --- btcutil/psbt/taproot.go | 206 ++++++++++++++++++++++++++++++++++++++++ btcutil/psbt/types.go | 54 +++++++++++ 2 files changed, 260 insertions(+) create mode 100644 btcutil/psbt/taproot.go 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 index 2a74c9bfd6..e833e1af35 100644 --- a/btcutil/psbt/types.go +++ b/btcutil/psbt/types.go @@ -114,6 +114,43 @@ const ( // 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 @@ -146,4 +183,21 @@ const ( // 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 ) From 5cf346f14f9cf2f90e48e7c416b40b7e43c5b423 Mon Sep 17 00:00:00 2001 From: Oliver Gugger Date: Mon, 2 May 2022 16:25:15 +0200 Subject: [PATCH 378/419] psbt: add (de-)serialization for new types --- btcutil/psbt/partial_input.go | 264 +++++++++++++++++++++++++++++++-- btcutil/psbt/partial_output.go | 97 +++++++++++- 2 files changed, 348 insertions(+), 13 deletions(-) diff --git a/btcutil/psbt/partial_input.go b/btcutil/psbt/partial_input.go index 4783c74d31..7686c451cb 100644 --- a/btcutil/psbt/partial_input.go +++ b/btcutil/psbt/partial_input.go @@ -13,16 +13,22 @@ import ( // 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 - Unknowns []*Unknown + 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 @@ -209,6 +215,155 @@ func (pi *PInput) deserialize(r io.Reader) error { 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)} @@ -328,6 +483,95 @@ func (pi *PInput) serialize(w io.Writer) error { 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 { diff --git a/btcutil/psbt/partial_output.go b/btcutil/psbt/partial_output.go index 64d1bd4cae..33b5ff9981 100644 --- a/btcutil/psbt/partial_output.go +++ b/btcutil/psbt/partial_output.go @@ -11,9 +11,12 @@ import ( // 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 + RedeemScript []byte + WitnessScript []byte + Bip32Derivation []*Bip32Derivation + TaprootInternalKey []byte + TaprootTapTree []byte + TaprootBip32Derivation []*TaprootBip32Derivation } // NewPsbtOutput creates an instance of PsbtOutput; the three parameters @@ -91,6 +94,53 @@ func (po *POutput) deserialize(r io.Reader) error { }, ) + 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 @@ -135,5 +185,46 @@ func (po *POutput) serialize(w io.Writer) error { } } + 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 } From 0572702ceccd9daad224735741c2a520550ea8ce Mon Sep 17 00:00:00 2001 From: Oliver Gugger Date: Mon, 2 May 2022 16:25:16 +0200 Subject: [PATCH 379/419] psbt: add valid and invalid PSBTs for new types --- btcutil/psbt/go.mod | 4 ++ btcutil/psbt/go.sum | 2 + btcutil/psbt/psbt_test.go | 102 +++++++++++++++++++++++++++++--------- 3 files changed, 84 insertions(+), 24 deletions(-) diff --git a/btcutil/psbt/go.mod b/btcutil/psbt/go.mod index c2e36ff4fa..2c6dbbb7f8 100644 --- a/btcutil/psbt/go.mod +++ b/btcutil/psbt/go.mod @@ -8,13 +8,17 @@ require ( 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 => ../ diff --git a/btcutil/psbt/go.sum b/btcutil/psbt/go.sum index ccdbe0ae4f..a901223de4 100644 --- a/btcutil/psbt/go.sum +++ b/btcutil/psbt/go.sum @@ -62,6 +62,7 @@ golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7w 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= @@ -75,6 +76,7 @@ google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQ 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= diff --git a/btcutil/psbt/psbt_test.go b/btcutil/psbt/psbt_test.go index 8d66325ad2..1ce4780d84 100644 --- a/btcutil/psbt/psbt_test.go +++ b/btcutil/psbt/psbt_test.go @@ -9,6 +9,7 @@ import ( "encoding/base64" "encoding/binary" "encoding/hex" + "strings" "testing" "github.com/btcsuite/btcd/btcutil" @@ -16,6 +17,7 @@ import ( "github.com/btcsuite/btcd/txscript" "github.com/btcsuite/btcd/wire" "github.com/davecgh/go-spew/spew" + "github.com/stretchr/testify/require" ) // Test vectors from: @@ -55,7 +57,7 @@ func createPsbtFromSignedTx(serializedSignedTx []byte) ( return unsignedPsbt, scriptSigs, witnesses, nil } -// These are all valid PSBTs +// These are all valid PSBTs encoded as hex. var validPsbtHex = map[int]string{ 0: "70736274ff0100750200000001268171371edff285e937adeea4b37b78000c0566cbb3ad64641713ca42171bf60000000000feffffff02d3dff505000000001976a914d0c59903c5bac2868760e90fd521a4665aa7652088ac00e1f5050000000017a9143545e6e33b832c47050f24d3eeb93c9c03948bc787b32e1300000100fda5010100000000010289a3c71eab4d20e0371bbba4cc698fa295c9463afa2e397f8533ccb62f9567e50100000017160014be18d152a9b012039daf3da7de4f53349eecb985ffffffff86f8aa43a71dff1448893a530a7237ef6b4608bbb2dd2d0171e63aec6a4890b40100000017160014fe3e9ef1a745e974d902c4355943abcb34bd5353ffffffff0200c2eb0b000000001976a91485cff1097fd9e008bb34af709c62197b38978a4888ac72fef84e2c00000017a914339725ba21efd62ac753a9bcd067d6c7a6a39d05870247304402202712be22e0270f394f568311dc7ca9a68970b8025fdd3b240229f07f8a5f3a240220018b38d7dcd314e734c9276bd6fb40f673325bc4baa144c800d2f2f02db2765c012103d2e15674941bad4a996372cb87e1856d3652606d98562fe39c5e9e7e413f210502483045022100d12b852d85dcd961d2f5f4ab660654df6eedcc794c0c33ce5cc309ffb5fce58d022067338a8e0e1725c197fb1a88af59f51e44e4255b20167c8684031c05d1f2592a01210223b72beef0965d10be0778efecd61fcac6f79a4ea169393380734464f84f2ab300000000000000", 1: "70736274ff0100a00200000002ab0949a08c5af7c49b8212f417e2f15ab3f5c33dcf153821a8139f877a5b7be40000000000feffffffab0949a08c5af7c49b8212f417e2f15ab3f5c33dcf153821a8139f877a5b7be40100000000feffffff02603bea0b000000001976a914768a40bbd740cbe81d988e71de2a4d5c71396b1d88ac8e240000000000001976a9146f4620b553fa095e721b9ee0efe9fa039cca459788ac000000000001076a47304402204759661797c01b036b25928948686218347d89864b719e1f7fcf57d1e511658702205309eabf56aa4d8891ffd111fdf1336f3a29da866d7f8486d75546ceedaf93190121035cdc61fc7ba971c0b501a646a2a83b102cb43881217ca682dc86e2d73fa882920001012000e1f5050000000017a9143545e6e33b832c47050f24d3eeb93c9c03948bc787010416001485d13537f2e265405a34dbafa9e3dda01fb82308000000", @@ -67,8 +69,18 @@ var validPsbtHex = map[int]string{ 7: "70736274ff01002001000000000100000000000000000d6a0b68656c6c6f20776f726c64000000000000", } -// These are all invalid PSBTs for the indicated -// reasons. +// 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", @@ -113,51 +125,93 @@ var invalidPsbtHex = map[int]string{ 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) - if err != nil { - t.Fatalf("Unable to decode hex: %v", err) - } + psbtBytes, err := hex.DecodeString(v) + require.NoErrorf(t, err, "%d: hex decode", key) testPsbt, err := NewFromRawBytes( - bytes.NewReader(PsbtBytes), false, + 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 parse psbt: %v", err) + 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) } - raw := b.Bytes() - if !bytes.Equal(raw, PsbtBytes) { - t.Fatalf("Serialized PSBT didn't match: %v", - hex.EncodeToString(raw)) - } + base64Packet := base64.StdEncoding.EncodeToString(b.Bytes()) + require.Equal(t, v, base64Packet, "%d: serialized", key) } } func TestReadInvalidPsbt(t *testing.T) { - for _, v := range invalidPsbtHex { - PsbtBytes, err := hex.DecodeString(v) - if err != nil { - t.Fatalf("Unable to decode hex: %v", err) - } + for key, v := range invalidPsbtHex { + psbtBytes, err := hex.DecodeString(v) + require.NoErrorf(t, err, "%d: hex decode", key) - _, err = NewFromRawBytes(bytes.NewReader(PsbtBytes), false) - if err == nil { - t.Fatalf("Incorrectly validated psbt: %v", - hex.EncodeToString(PsbtBytes)) - } + _, 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) } From 886a8f41db1e18dbe16082e15837d2c214e494ea Mon Sep 17 00:00:00 2001 From: Oliver Gugger Date: Mon, 2 May 2022 16:25:17 +0200 Subject: [PATCH 380/419] psbt: make Taproot PSBT finalizable --- btcutil/psbt/finalizer.go | 136 +++++++++++++++++++++++++++++++++++--- btcutil/psbt/utils.go | 27 +++++++- 2 files changed, 153 insertions(+), 10 deletions(-) diff --git a/btcutil/psbt/finalizer.go b/btcutil/psbt/finalizer.go index 0bf9dbb56e..8c50a94b48 100644 --- a/btcutil/psbt/finalizer.go +++ b/btcutil/psbt/finalizer.go @@ -12,7 +12,10 @@ package psbt // 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 @@ -32,16 +35,36 @@ func isFinalizableWitnessInput(pInput *PInput) bool { // If this is a native witness output, then we require both // the witness script, but not a redeem script. case txscript.IsWitnessProgram(pkScript): - if txscript.IsPayToWitnessScriptHash(pkScript) { + switch { + case txscript.IsPayToWitnessScriptHash(pkScript): if pInput.WitnessScript == nil || pInput.RedeemScript != nil { + return false } - } else { + + 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 } } @@ -67,8 +90,8 @@ func isFinalizableWitnessInput(pInput *PInput) bool { return false } - // If this isn't a nested nested P2SH output or a native witness - // output, then we can't finalize this input as we don't understand it. + // 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 } @@ -106,8 +129,10 @@ func isFinalizableLegacyInput(p *Packet, pInput *PInput, inIndex int) bool { func isFinalizable(p *Packet, inIndex int) bool { pInput := p.Inputs[inIndex] - // The input cannot be finalized without any signatures - if pInput.PartialSigs == nil { + // The input cannot be finalized without any signatures. + if pInput.PartialSigs == nil && pInput.TaprootKeySpendSig == nil && + pInput.TaprootScriptSpendSig == nil { + return false } @@ -159,7 +184,6 @@ func MaybeFinalize(p *Packet, inIndex int) (bool, error) { // 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 { @@ -184,8 +208,18 @@ func Finalize(p *Packet, inIndex int) error { // witness or legacy UTXO. switch { case pInput.WitnessUtxo != nil: - if err := finalizeWitnessInput(p, inIndex); err != nil { - return err + 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: @@ -460,3 +494,87 @@ func finalizeWitnessInput(p *Packet, inIndex int) error { 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/utils.go b/btcutil/psbt/utils.go index 494d04070f..94a5546a55 100644 --- a/btcutil/psbt/utils.go +++ b/btcutil/psbt/utils.go @@ -35,9 +35,14 @@ func WriteTxWitness(w io.Writer, wit [][]byte) error { // 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 = [][]byte{sig, pub} + witnessItems = append([][]byte{}, stackElements...) ) if err := WriteTxWitness(&buf, witnessItems); err != nil { @@ -420,3 +425,23 @@ func NewFromSignedTx(tx *wire.MsgTx) (*Packet, [][]byte, } 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) +} From 4550049281fcfb09cd0bfd04aef14806ec4194bb Mon Sep 17 00:00:00 2001 From: Emmanuel T Odeke Date: Thu, 5 May 2022 19:43:14 -0700 Subject: [PATCH 381/419] fuzz: add ParsePubKey fuzzer Courtesy of the Cosmos Network security team, this change adds a fuzzer to ParsePubKey, given that Tendermint uses this code. --- btcec/fuzz_test.go | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 btcec/fuzz_test.go 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") + } + }) +} From ebed1927bfb1e03bf92a83d5c1d10a6dad775885 Mon Sep 17 00:00:00 2001 From: Andras Banki-Horvath Date: Mon, 9 May 2022 18:50:12 +0200 Subject: [PATCH 382/419] rpcclient: fix formatting --- rpcclient/infrastructure.go | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/rpcclient/infrastructure.go b/rpcclient/infrastructure.go index 63874c1b4e..22430a2e1c 100644 --- a/rpcclient/infrastructure.go +++ b/rpcclient/infrastructure.go @@ -768,11 +768,14 @@ func (c *Client) handleSendPostMessage(jReq *jsonRequest) { } url := protocol + "://" + c.config.Host - var err error - var backoff time.Duration - var httpResponse *http.Response + var ( + err error + backoff time.Duration + httpResponse *http.Response + ) + tries := 10 - for i := 0; tries == 0 || i < tries; i++ { + for i := 0; i < tries; i++ { bodyReader := bytes.NewReader(jReq.marshalledJSON) httpReq, err := http.NewRequest("POST", url, bodyReader) if err != nil { @@ -799,7 +802,9 @@ func (c *Client) handleSendPostMessage(jReq *jsonRequest) { 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) + log.Debugf("Failed command [%s] with id %d attempt %d."+ + " Retrying in %v... \n", jReq.method, jReq.id, + i, backoff) time.Sleep(backoff) continue } From 966511246dd03b9bf88fd6607e2449ea0cfd522a Mon Sep 17 00:00:00 2001 From: Andras Banki-Horvath Date: Mon, 9 May 2022 18:51:22 +0200 Subject: [PATCH 383/419] rpclient: fix masked error causing crash after max retries This commit fixes the error that is masked inside the for loop's scope. Previously after max retries the error didn't leave the for scope and therefore httpResponse remained nil which in turn resulted in a crash. --- rpcclient/infrastructure.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/rpcclient/infrastructure.go b/rpcclient/infrastructure.go index 22430a2e1c..93b036c0d6 100644 --- a/rpcclient/infrastructure.go +++ b/rpcclient/infrastructure.go @@ -776,8 +776,10 @@ func (c *Client) handleSendPostMessage(jReq *jsonRequest) { tries := 10 for i := 0; i < tries; i++ { + var httpReq *http.Request + bodyReader := bytes.NewReader(jReq.marshalledJSON) - httpReq, err := http.NewRequest("POST", url, bodyReader) + httpReq, err = http.NewRequest("POST", url, bodyReader) if err != nil { jReq.responseChan <- &Response{result: nil, err: err} return @@ -815,6 +817,15 @@ func (c *Client) handleSendPostMessage(jReq *jsonRequest) { 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", jReq.method, jReq.id), + } + } + // Read the raw bytes and close the response. respBytes, err := ioutil.ReadAll(httpResponse.Body) httpResponse.Body.Close() From 9babf1fa08364e4a58f1b222e5ef79c324070632 Mon Sep 17 00:00:00 2001 From: Andras Banki-Horvath Date: Mon, 9 May 2022 18:58:49 +0200 Subject: [PATCH 384/419] rpcclient: fix backoff logic This commit removes Sleep() from the rety handler so that the shutdown request is always respected. Furthermore the maximum retry count is corrected. --- rpcclient/infrastructure.go | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/rpcclient/infrastructure.go b/rpcclient/infrastructure.go index 93b036c0d6..b7732bc6c5 100644 --- a/rpcclient/infrastructure.go +++ b/rpcclient/infrastructure.go @@ -761,7 +761,9 @@ 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(jReq *jsonRequest) { +func (c *Client) handleSendPostMessage(jReq *jsonRequest, + shutdown chan struct{}) { + protocol := "http" if !c.config.DisableTLS { protocol = "https" @@ -799,18 +801,27 @@ func (c *Client) handleSendPostMessage(jReq *jsonRequest) { httpReq.SetBasicAuth(user, pass) httpResponse, err = c.httpClient.Do(httpReq) - if err != nil { - 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) - time.Sleep(backoff) - continue + + // Quit the retry loop on success or if we can't retry anymore. + if err == nil || i == tries-1 { + break + } + + // 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 } - break } if err != nil { jReq.responseChan <- &Response{err: err} @@ -874,7 +885,7 @@ out: // is closed. select { case jReq := <-c.sendPostChan: - c.handleSendPostMessage(jReq) + c.handleSendPostMessage(jReq, c.shutdown) case <-c.shutdown: break out From 97313ac873eee4365fc1de253a538335defcfed7 Mon Sep 17 00:00:00 2001 From: Andras Banki-Horvath Date: Thu, 12 May 2022 22:09:38 +0200 Subject: [PATCH 385/419] rpcclient: save the last error when retrying --- rpcclient/infrastructure.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/rpcclient/infrastructure.go b/rpcclient/infrastructure.go index b7732bc6c5..f931b83501 100644 --- a/rpcclient/infrastructure.go +++ b/rpcclient/infrastructure.go @@ -771,7 +771,7 @@ func (c *Client) handleSendPostMessage(jReq *jsonRequest, url := protocol + "://" + c.config.Host var ( - err error + err, lastErr error backoff time.Duration httpResponse *http.Response ) @@ -807,6 +807,12 @@ func (c *Client) handleSendPostMessage(jReq *jsonRequest, 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 { @@ -833,7 +839,8 @@ func (c *Client) handleSendPostMessage(jReq *jsonRequest, if httpResponse == nil { jReq.responseChan <- &Response{ err: fmt.Errorf("invalid http POST response (nil), "+ - "method: %s, id: %d", jReq.method, jReq.id), + "method: %s, id: %d, last error=%v", + jReq.method, jReq.id, lastErr), } } From 2ce30699532ab4cd75efdace7763ae372a6e8a2e Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Tue, 31 May 2022 17:52:31 -0700 Subject: [PATCH 386/419] build: bump version to v0.23.0 --- cmd/btcctl/version.go | 2 +- version.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/btcctl/version.go b/cmd/btcctl/version.go index edb42dbe7d..a09cc10b68 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 = 22 + appMinor uint = 23 appPatch uint = 0 // appPreRelease MUST only contain characters from semanticAlphabet diff --git a/version.go b/version.go index d6ff9171aa..cc0a6502c0 100644 --- a/version.go +++ b/version.go @@ -17,7 +17,7 @@ const semanticAlphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr // versioning 2.0.0 spec (http://semver.org/). const ( appMajor uint = 0 - appMinor uint = 22 + appMinor uint = 23 appPatch uint = 0 // appPreRelease MUST only contain characters from semanticAlphabet From b2af7770e97ba04f6ec3b964b4b0bd36eaeabb2e Mon Sep 17 00:00:00 2001 From: Andras Banki-Horvath Date: Fri, 3 Jun 2022 14:58:20 +0200 Subject: [PATCH 387/419] rpcclient: fix missing return --- rpcclient/infrastructure.go | 1 + 1 file changed, 1 insertion(+) diff --git a/rpcclient/infrastructure.go b/rpcclient/infrastructure.go index f931b83501..fbc43a4568 100644 --- a/rpcclient/infrastructure.go +++ b/rpcclient/infrastructure.go @@ -842,6 +842,7 @@ func (c *Client) handleSendPostMessage(jReq *jsonRequest, "method: %s, id: %d, last error=%v", jReq.method, jReq.id, lastErr), } + return } // Read the raw bytes and close the response. From e6f6ba4593f3adcefcb2bb97e53b44a21e7acc4d Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Mon, 6 Jun 2022 16:14:13 -0700 Subject: [PATCH 388/419] build: bump version to v0.23.1 Includes: * A fix in the RPC server: https://github.com/btcsuite/btcd/pull/1862 * Rolling back a breaking change fromteh PoV of the rpcclient: https://github.com/btcsuite/btcd/pull/1844 --- cmd/btcctl/version.go | 2 +- version.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/btcctl/version.go b/cmd/btcctl/version.go index a09cc10b68..42f3f7d024 100644 --- a/cmd/btcctl/version.go +++ b/cmd/btcctl/version.go @@ -18,7 +18,7 @@ const semanticAlphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr const ( appMajor uint = 0 appMinor uint = 23 - 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 cc0a6502c0..49a2cd68de 100644 --- a/version.go +++ b/version.go @@ -18,7 +18,7 @@ const semanticAlphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr const ( appMajor uint = 0 appMinor uint = 23 - appPatch uint = 0 + appPatch uint = 1 // appPreRelease MUST only contain characters from semanticAlphabet // per the semantic versioning spec. From d9c09e03153ad26061b4905780bfa234dac8425a Mon Sep 17 00:00:00 2001 From: Darioush Jalali Date: Tue, 28 Jun 2022 17:21:46 -0700 Subject: [PATCH 389/419] Bump btcd version in btcutil package --- btcutil/go.mod | 2 +- btcutil/psbt/go.mod | 2 +- go.sum | 14 +++++++++++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/btcutil/go.mod b/btcutil/go.mod index 4f98f6939a..5265dbb201 100644 --- a/btcutil/go.mod +++ b/btcutil/go.mod @@ -4,7 +4,7 @@ go 1.16 require ( github.com/aead/siphash v1.0.1 - github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c + github.com/btcsuite/btcd v0.22.1 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 diff --git a/btcutil/psbt/go.mod b/btcutil/psbt/go.mod index 2c6dbbb7f8..6dd7ed9fd7 100644 --- a/btcutil/psbt/go.mod +++ b/btcutil/psbt/go.mod @@ -3,7 +3,7 @@ module github.com/btcsuite/btcd/btcutil/psbt go 1.17 require ( - github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c + github.com/btcsuite/btcd v0.22.1 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 diff --git a/go.sum b/go.sum index 15e6ac4b7c..69b2b1feeb 100644 --- a/go.sum +++ b/go.sum @@ -1,6 +1,7 @@ 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.22.0-beta.0.20220111032746-97732e52810c/go.mod h1:tjmYdS6MLJ5/s0Fj4DbLgSbDHbEqLJrtnHecBFkdz5M= +github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= +github.com/btcsuite/btcd v0.22.1/go.mod h1:wqgTSL29+50LRkmOVknEdmt8ZojIzhuWvgu/iptuN7Y= 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= @@ -8,14 +9,19 @@ github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOF 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/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= +github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= 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/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= +github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= github.com/btcsuite/snappy-go v1.0.0/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/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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= @@ -41,6 +47,7 @@ github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw 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/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= @@ -50,10 +57,12 @@ github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6 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/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 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= 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= @@ -64,7 +73,10 @@ github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5Cc 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-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= 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-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= From f46068f38e7a92ee24976e90286d0722d6069d30 Mon Sep 17 00:00:00 2001 From: Darioush Jalali Date: Thu, 30 Jun 2022 15:59:56 -0700 Subject: [PATCH 390/419] bump version to v0.23.0 --- btcutil/go.mod | 2 +- btcutil/psbt/go.mod | 2 +- go.sum | 19 +------------------ 3 files changed, 3 insertions(+), 20 deletions(-) diff --git a/btcutil/go.mod b/btcutil/go.mod index 5265dbb201..b03318a461 100644 --- a/btcutil/go.mod +++ b/btcutil/go.mod @@ -4,7 +4,7 @@ go 1.16 require ( github.com/aead/siphash v1.0.1 - github.com/btcsuite/btcd v0.22.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 diff --git a/btcutil/psbt/go.mod b/btcutil/psbt/go.mod index 6dd7ed9fd7..80f57fc1b3 100644 --- a/btcutil/psbt/go.mod +++ b/btcutil/psbt/go.mod @@ -3,7 +3,7 @@ module github.com/btcsuite/btcd/btcutil/psbt go 1.17 require ( - github.com/btcsuite/btcd v0.22.1 + 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 diff --git a/go.sum b/go.sum index 69b2b1feeb..1e39ef3263 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,6 @@ 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.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= -github.com/btcsuite/btcd v0.22.1/go.mod h1:wqgTSL29+50LRkmOVknEdmt8ZojIzhuWvgu/iptuN7Y= +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= @@ -9,19 +8,12 @@ github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOF 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/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= 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/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= -github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= -github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/snappy-go v1.0.0/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/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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= @@ -47,7 +39,6 @@ github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw 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/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= @@ -57,12 +48,9 @@ github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6 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/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 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= 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= @@ -73,13 +61,9 @@ github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5Cc 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-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= 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-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 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= @@ -115,7 +99,6 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 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/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= From 3ec3acc6fbeb1820d0fa94a638b5d65dbbaa856c Mon Sep 17 00:00:00 2001 From: Darioush Jalali Date: Mon, 11 Jul 2022 16:30:53 -0700 Subject: [PATCH 391/419] go mod tidy in btcutil/ --- btcutil/go.sum | 1 + 1 file changed, 1 insertion(+) diff --git a/btcutil/go.sum b/btcutil/go.sum index e4f26dfd1c..8d35bdaf86 100644 --- a/btcutil/go.sum +++ b/btcutil/go.sum @@ -68,6 +68,7 @@ golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7w 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= From 149b0f09aa9bf3a04a0793f6400fe37b9f69efc0 Mon Sep 17 00:00:00 2001 From: Darioush Jalali Date: Mon, 11 Jul 2022 16:36:12 -0700 Subject: [PATCH 392/419] go mod tidy in btcetc/ --- btcec/go.mod | 1 - btcec/go.sum | 2 -- 2 files changed, 3 deletions(-) diff --git a/btcec/go.mod b/btcec/go.mod index a5e8c3abef..8c7cc1d63c 100644 --- a/btcec/go.mod +++ b/btcec/go.mod @@ -6,7 +6,6 @@ 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 - golang.org/x/exp v0.0.0-20220426173459-3bcf042a4bf5 ) require github.com/decred/dcrd/crypto/blake256 v1.0.0 // indirect diff --git a/btcec/go.sum b/btcec/go.sum index bd484d5ed4..0004a783bb 100644 --- a/btcec/go.sum +++ b/btcec/go.sum @@ -6,5 +6,3 @@ github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK 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= -golang.org/x/exp v0.0.0-20220426173459-3bcf042a4bf5 h1:rxKZ2gOnYxjfmakvUUqh9Gyb6KXfrj7JWTxORTYqb0E= -golang.org/x/exp v0.0.0-20220426173459-3bcf042a4bf5/go.mod h1:lgLbSvA5ygNOMpwM/9anMpWVlVJ7Z+cHWq/eFuinpGE= From 3376655b9cf5abd242b778304ae05cbfaeb4522a Mon Sep 17 00:00:00 2001 From: sputn1ck Date: Fri, 24 Jun 2022 14:27:13 +0200 Subject: [PATCH 393/419] btcec/schnorr/musig2: XOR rand with secret key This commit XORs the secret key (if a secret key is specified) with the random bytes as per MuSig2 Spec (https://github.com/jonasnick/bips/blob/musig2/bip-musig2.mediawiki#nonce-generation-1) --- btcec/schnorr/musig2/nonces.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/btcec/schnorr/musig2/nonces.go b/btcec/schnorr/musig2/nonces.go index 5a7fbd4b3d..d22f18cd56 100644 --- a/btcec/schnorr/musig2/nonces.go +++ b/btcec/schnorr/musig2/nonces.go @@ -31,7 +31,7 @@ var ( // 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") + NonceGenTag = []byte("MuSig/nonce") byteOrder = binary.BigEndian ) @@ -270,6 +270,16 @@ func GenNonces(options ...NonceGenOption) (*Nonces, error) { 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[:], 1, opts) From 4ad819e7af8210737c86215f97decb85b9429d18 Mon Sep 17 00:00:00 2001 From: sputn1ck Date: Fri, 24 Jun 2022 14:28:32 +0200 Subject: [PATCH 394/419] btcec/schnorr/musig2: Update to MuSig 0.3.0 This commit changes the i's in GenNonces to 0 and 1 as per https://github.com/jonasnick/bips/blob/musig2/bip-musig2.mediawiki#change-log 0.3 --- btcec/schnorr/musig2/nonces.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/btcec/schnorr/musig2/nonces.go b/btcec/schnorr/musig2/nonces.go index d22f18cd56..9600c45b1a 100644 --- a/btcec/schnorr/musig2/nonces.go +++ b/btcec/schnorr/musig2/nonces.go @@ -282,11 +282,11 @@ func GenNonces(options ...NonceGenOption) (*Nonces, error) { // Using our randomness and the set of optional params, generate our // two secret nonces: k1 and k2. - k1, err := genNonceAuxBytes(randBytes[:], 1, opts) + k1, err := genNonceAuxBytes(randBytes[:], 0, opts) if err != nil { return nil, err } - k2, err := genNonceAuxBytes(randBytes[:], 2, opts) + k2, err := genNonceAuxBytes(randBytes[:], 1, opts) if err != nil { return nil, err } From 478a2f78c4a26ea3b8fc9b0bcee4dd23adf4e3df Mon Sep 17 00:00:00 2001 From: sputn1ck Date: Fri, 29 Jul 2022 10:16:35 +0200 Subject: [PATCH 395/419] btcec/schnorr/musig2: Add nonce generation testcases This commit adds the testcases specified under version 0.3.1 from https://github.com/jonasnick/bips/blob/musig2/bip-musig2.mediawiki#change-log and the fixes from https://github.com/jonasnick/bips/commit/79438fd604d327e252d011712e7a4e9588a4584f --- btcec/schnorr/musig2/musig2_test.go | 85 +++++++++++++++++++++++++++++ btcec/schnorr/musig2/nonces.go | 14 +++++ 2 files changed, 99 insertions(+) diff --git a/btcec/schnorr/musig2/musig2_test.go b/btcec/schnorr/musig2/musig2_test.go index c9ae74d7be..309718ca67 100644 --- a/btcec/schnorr/musig2/musig2_test.go +++ b/btcec/schnorr/musig2/musig2_test.go @@ -825,3 +825,88 @@ func TestMuSigEarlyNonce(t *testing.T) { t.Fatalf("final sig is invalid!") } } + +// TestMusig2NonceGenTestVectors tests the nonce generation function with +// the testvectors defined in the Musig2 BIP. +func TestMusig2NonceGenTestVectors(t *testing.T) { + t.Parallel() + + msg := bytes.Repeat([]byte{0x01}, 32) + sk := bytes.Repeat([]byte{0x02}, 32) + aggpk := bytes.Repeat([]byte{0x07}, 32) + extra_in := bytes.Repeat([]byte{0x08}, 32) + + testCases := []struct { + opts nonceGenOpts + expectedNonce string + }{ + { + opts: nonceGenOpts{ + randReader: &memsetRandReader{i: 0}, + secretKey: sk[:], + combinedKey: aggpk[:], + auxInput: extra_in[:], + msg: msg[:], + }, + expectedNonce: "E8F2E103D86800F19A4E97338D371CB885DB2" + + "F19D08C0BD205BBA9B906C971D0D786A17718AAFAD6D" + + "E025DDDD99DC823E2DFC1AE1DDFE920888AD53FFF423FC4", + }, + { + opts: nonceGenOpts{ + randReader: &memsetRandReader{i: 0}, + secretKey: sk[:], + combinedKey: aggpk[:], + auxInput: extra_in[:], + msg: nil, + }, + expectedNonce: "8A633F5EECBDB690A6BE4921426F41BE78D50" + + "9DC1CE894C1215844C0E4C6DE7ABC9A5BE0A3BF3FE31" + + "2CCB7E4817D2CB17A7CEA8382B73A99A583E323387B3C32", + }, + { + opts: nonceGenOpts{ + randReader: &memsetRandReader{i: 0}, + secretKey: nil, + combinedKey: nil, + auxInput: nil, + msg: nil, + }, + expectedNonce: "7B3B5A002356471AF0E961DE2549C121BD0D4" + + "8ABCEEDC6E034BDDF86AD3E0A187ECEE674CEF7364B0" + + "BC4BEEFB8B66CAD89F98DE2F8C5A5EAD5D1D1E4BD7D04CD", + }, + } + + for _, testCase := range testCases { + nonce, err := GenNonces(withCustomOptions(testCase.opts)) + if err != nil { + t.Fatalf("err gen nonce aux bytes %v", err) + } + + expectedBytes, _ := hex.DecodeString(testCase.expectedNonce) + if !bytes.Equal(nonce.SecNonce[:], expectedBytes) { + + t.Fatalf("nonces don't match: expected %x, got %x", + expectedBytes, nonce.SecNonce[:]) + } + } + +} + +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 +} + +func memsetLoop(a []byte, v uint8) { + for i := range a { + a[i] = byte(v) + } +} diff --git a/btcec/schnorr/musig2/nonces.go b/btcec/schnorr/musig2/nonces.go index 9600c45b1a..0ba100229a 100644 --- a/btcec/schnorr/musig2/nonces.go +++ b/btcec/schnorr/musig2/nonces.go @@ -175,6 +175,20 @@ func WithNonceAuxInput(aux []byte) NonceGenOption { } } +// 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.msg = customOpts.msg + o.auxInput = customOpts.auxInput + } +} + // lengthWriter is a function closure that allows a caller to control how the // length prefix of a byte slice is written. type lengthWriter func(w io.Writer, b []byte) error From 1b85a60b6df59ffb02b21ab92d4d1af9ccfca77d Mon Sep 17 00:00:00 2001 From: sputn1ck Date: Wed, 29 Jun 2022 18:29:55 +0200 Subject: [PATCH 396/419] btcec/schnorr/musig2: Add AggregateKeys testvectors This commit adds the testvectors from https://github.com/jonasnick/bips/commit/20f60b0f37c47b147e01816c934f149d139cb905 to the testcases --- btcec/btcec.go | 15 +++ btcec/schnorr/musig2/keys.go | 9 +- btcec/schnorr/musig2/musig2_test.go | 173 +++++++++++++++++++++++++--- 3 files changed, 177 insertions(+), 20 deletions(-) diff --git a/btcec/btcec.go b/btcec/btcec.go index efde8d6a81..f85baba8c7 100644 --- a/btcec/btcec.go +++ b/btcec/btcec.go @@ -39,3 +39,18 @@ type CurveParams = secp.CurveParams func Params() *CurveParams { return secp.Params() } + +// Generator returns the public key at the Generator Point. +func Generator() *PublicKey { + var ( + result JacobianPoint + k secp.ModNScalar + ) + + k.SetInt(1) + ScalarBaseMultNonConst(&k, &result) + + result.ToAffine() + + return NewPublicKey(&result.X, &result.Y) +} diff --git a/btcec/schnorr/musig2/keys.go b/btcec/schnorr/musig2/keys.go index e61a22f2e5..8c86c624fb 100644 --- a/btcec/schnorr/musig2/keys.go +++ b/btcec/schnorr/musig2/keys.go @@ -26,6 +26,10 @@ var ( // 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 to large") ) // sortableKeys defines a type of slice of public keys that implements the sort @@ -286,7 +290,10 @@ func tweakKey(keyJ btcec.JacobianPoint, parityAcc btcec.ModNScalar, tweak [32]by // Next, map the tweak into a mod n integer so we can use it for // manipulations below. tweakInt := new(btcec.ModNScalar) - tweakInt.SetBytes(&tweak) + 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 diff --git a/btcec/schnorr/musig2/musig2_test.go b/btcec/schnorr/musig2/musig2_test.go index 309718ca67..a032618bb9 100644 --- a/btcec/schnorr/musig2/musig2_test.go +++ b/btcec/schnorr/musig2/musig2_test.go @@ -16,6 +16,7 @@ import ( "github.com/btcsuite/btcd/btcec/v2" "github.com/btcsuite/btcd/btcec/v2/schnorr" + "github.com/decred/dcrd/dcrec/secp256k1/v4" ) var ( @@ -26,14 +27,50 @@ var ( key3Bytes, _ = hex.DecodeString("3590A94E768F8E1815C2F24B4D80A8E3149" + "316C3518CE7B7AD338368D038CA66") - testKeys = [][]byte{key1Bytes, key2Bytes, key3Bytes} - - keyCombo1, _ = hex.DecodeString("E5830140512195D74C8307E39637CBE5FB730EBEAB80EC514CF88A877CEEEE0B") - keyCombo2, _ = hex.DecodeString("D70CD69A2647F7390973DF48CBFA2CCC407B8B2D60B08C5F1641185C7998A290") - keyCombo3, _ = hex.DecodeString("81A8B093912C9E481408D09776CEFB48AEB8B65481B6BAAFB3C5810106717BEB") - keyCombo4, _ = hex.DecodeString("2EB18851887E7BDC5E830E89B19DDBC28078F1FA88AAD0AD01CA06FE4F80210B") + invalidPk1, _ = hex.DecodeString("00000000000000000000000000000000" + + "00000000000000000000000000000005") + invalidPk2, _ = hex.DecodeString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + + "FFFFFFFFFFFFFFFFFFFFFFFEFFFFFC30") + invalidTweak, _ = hex.DecodeString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE" + + "BAAEDCE6AF48A03BBFD25E8CD0364141") + + testKeys = [][]byte{key1Bytes, key2Bytes, key3Bytes, invalidPk1, + invalidPk2} + + keyCombo1, _ = hex.DecodeString("E5830140512195D74C8307E39637CBE5FB73" + + "0EBEAB80EC514CF88A877CEEEE0B") + keyCombo2, _ = hex.DecodeString("D70CD69A2647F7390973DF48CBFA2CCC407B" + + "8B2D60B08C5F1641185C7998A290") + keyCombo3, _ = hex.DecodeString("81A8B093912C9E481408D09776CEFB48AEB8" + + "B65481B6BAAFB3C5810106717BEB") + keyCombo4, _ = hex.DecodeString("2EB18851887E7BDC5E830E89B19DDBC28078" + + "F1FA88AAD0AD01CA06FE4F80210B") ) +// getInfinityTweak returns a tweak that, when tweaking the Generator, triggers +// the ErrTweakedKeyIsInfinity error. +func getInfinityTweak() KeyTweakDesc { + generator := btcec.Generator() + + keySet := []*btcec.PublicKey{generator} + + keysHash := keyHashFingerprint(keySet, true) + uniqueKeyIndex := secondUniqueKeyIndex(keySet, true) + + n := &btcec.ModNScalar{} + + n.SetByteSlice(invalidTweak) + + coeff := aggregationCoefficient( + keySet, generator, keysHash, uniqueKeyIndex, + ).Negate().Add(n) + + return KeyTweakDesc{ + Tweak: coeff.Bytes(), + IsXOnly: false, + } +} + const ( keyAggTestVectorName = "key_agg_vectors.json" @@ -44,8 +81,10 @@ var dumpJson = flag.Bool("dumpjson", false, "if true, a JSON version of the "+ "test vectors will be written to the cwd") type jsonKeyAggTestCase struct { - Keys []string `json:"keys"` - ExpectedKey string `json:"expected_key"` + Keys []string `json:"keys"` + Tweaks []jsonTweak `json:"tweaks"` + ExpectedKey string `json:"expected_key"` + ExpectedError string `json:"expected_error"` } // TestMuSig2KeyAggTestVectors tests that this implementation of musig2 key @@ -56,8 +95,11 @@ func TestMuSig2KeyAggTestVectors(t *testing.T) { var jsonCases []jsonKeyAggTestCase testCases := []struct { - keyOrder []int - expectedKey []byte + keyOrder []int + explicitKeys []*btcec.PublicKey + tweaks []KeyTweakDesc + expectedKey []byte + expectedError error }{ // Keys in backwards lexicographical order. { @@ -82,18 +124,58 @@ func TestMuSig2KeyAggTestVectors(t *testing.T) { keyOrder: []int{0, 0, 1, 1}, expectedKey: keyCombo4, }, + + // Invalid public key. + { + keyOrder: []int{0, 3}, + expectedError: secp256k1.ErrPubKeyNotOnCurve, + }, + + // Public key exceeds field size. + { + keyOrder: []int{0, 4}, + expectedError: secp256k1.ErrPubKeyXTooBig, + }, + + // Tweak is out of range. + { + keyOrder: []int{0, 1}, + tweaks: []KeyTweakDesc{ + KeyTweakDesc{ + Tweak: to32ByteSlice(invalidTweak), + IsXOnly: true, + }, + }, + expectedError: ErrTweakedKeyOverflows, + }, + + // Intermediate tweaking result is point at infinity. + { + explicitKeys: []*secp256k1.PublicKey{btcec.Generator()}, + tweaks: []KeyTweakDesc{ + getInfinityTweak(), + }, + expectedError: ErrTweakedKeyIsInfinity, + }, } for i, testCase := range testCases { testName := fmt.Sprintf("%v", testCase.keyOrder) t.Run(testName, func(t *testing.T) { var ( - keys []*btcec.PublicKey - strKeys []string + keys []*btcec.PublicKey + strKeys []string + strTweaks []jsonTweak + jsonError string ) for _, keyIndex := range testCase.keyOrder { keyBytes := testKeys[keyIndex] pub, err := schnorr.ParsePubKey(keyBytes) - if err != nil { + + switch { + case testCase.expectedError != nil && + errors.Is(err, testCase.expectedError): + return + case err != nil: t.Fatalf("unable to parse pubkeys: %v", err) } @@ -101,15 +183,59 @@ func TestMuSig2KeyAggTestVectors(t *testing.T) { strKeys = append(strKeys, hex.EncodeToString(keyBytes)) } - jsonCases = append(jsonCases, jsonKeyAggTestCase{ - Keys: strKeys, - ExpectedKey: hex.EncodeToString(testCase.expectedKey), - }) + for _, explicitKey := range testCase.explicitKeys { + keys = append(keys, explicitKey) + strKeys = append( + strKeys, + hex.EncodeToString( + explicitKey.SerializeCompressed(), + )) + } + + for _, tweak := range testCase.tweaks { + strTweaks = append( + strTweaks, + jsonTweak{ + Tweak: hex.EncodeToString( + tweak.Tweak[:], + ), + XOnly: tweak.IsXOnly, + }) + } + + if testCase.expectedError != nil { + jsonError = testCase.expectedError.Error() + } + + jsonCases = append( + jsonCases, + jsonKeyAggTestCase{ + Keys: strKeys, + Tweaks: strTweaks, + ExpectedKey: hex.EncodeToString( + testCase.expectedKey), + ExpectedError: jsonError, + }) uniqueKeyIndex := secondUniqueKeyIndex(keys, false) - combinedKey, _, _, _ := AggregateKeys( - keys, false, WithUniqueKeyIndex(uniqueKeyIndex), + opts := []KeyAggOption{WithUniqueKeyIndex(uniqueKeyIndex)} + if len(testCase.tweaks) > 0 { + opts = append(opts, WithKeyTweaks(testCase.tweaks...)) + } + + combinedKey, _, _, err := AggregateKeys( + keys, false, opts..., ) + + switch { + case testCase.expectedError != nil && + errors.Is(err, testCase.expectedError): + return + + case err != nil: + t.Fatalf("case #%v, got error %v", i, err) + } + combinedKeyBytes := schnorr.SerializePubKey(combinedKey.FinalKey) if !bytes.Equal(combinedKeyBytes, testCase.expectedKey) { t.Fatalf("case: #%v, invalid aggregation: "+ @@ -910,3 +1036,12 @@ func memsetLoop(a []byte, v uint8) { a[i] = byte(v) } } + +func to32ByteSlice(input []byte) [32]byte { + if len(input) != 32 { + panic("input byte slice has invalid length") + } + var output [32]byte + copy(output[:], input) + return output +} From 8b59e7aa6bee3f8c8db496eb2bc2df20c526f3ec Mon Sep 17 00:00:00 2001 From: sputn1ck Date: Fri, 29 Jul 2022 10:32:35 +0200 Subject: [PATCH 397/419] btcec/schnorr/musig2: Add AggregateNonce testvectors This commit adds the testvectors from https://github.com/jonasnick/bips/commit/0ec2aefdaaabcb48704ab4718373a05e148e920d to the testcases --- btcec/schnorr/musig2/musig2_test.go | 156 ++++++++++++++++++++++++++++ 1 file changed, 156 insertions(+) diff --git a/btcec/schnorr/musig2/musig2_test.go b/btcec/schnorr/musig2/musig2_test.go index a032618bb9..8b3a267b3c 100644 --- a/btcec/schnorr/musig2/musig2_test.go +++ b/btcec/schnorr/musig2/musig2_test.go @@ -74,6 +74,8 @@ func getInfinityTweak() KeyTweakDesc { const ( keyAggTestVectorName = "key_agg_vectors.json" + nonceAggTestVectorName = "nonce_agg_vectors.json" + signTestVectorName = "sign_vectors.json" ) @@ -1020,6 +1022,142 @@ func TestMusig2NonceGenTestVectors(t *testing.T) { } +var ( + pNonce1, _ = hex.DecodeString("020151C80F435648DF67A22B749CD798CE54E0321D034B92B709B567D60A42E666" + + "03BA47FBC1834437B3212E89A84D8425E7BF12E0245D98262268EBDCB385D50641") + pNonce2, _ = hex.DecodeString("03FF406FFD8ADB9CD29877E4985014F66A59F6CD01C0E88CAA8E5F3166B1F676A6" + + "0248C264CDD57D3C24D79990B0F865674EB62A0F9018277A95011B41BFC193B833") + + expectedNonce, _ = hex.DecodeString("035FE1873B4F2967F52FEA4A06AD5A8ECCBE9D0FD73068012C894E2E87CCB5804B" + + "024725377345BDE0E9C33AF3C43C0A29A9249F2F2956FA8CFEB55C8573D0262DC8") + + invalidNonce1, _ = hex.DecodeString("04FF406FFD8ADB9CD29877E4985014F66A59F6CD01C0E88CAA8E5F3166B1F676A6" + "0248C264CDD57D3C24D79990B0F865674EB62A0F9018277A95011B41BFC193B833") + invalidNonce2, _ = hex.DecodeString("03FF406FFD8ADB9CD29877E4985014F66A59F6CD01C0E88CAA8E5F3166B1F676A6" + "0248C264CDD57D3C24D79990B0F865674EB62A0F9018277A95011B41BFC193B831") + invalidNonce3, _ = hex.DecodeString("03FF406FFD8ADB9CD29877E4985014F66A59F6CD01C0E88CAA8E5F3166B1F676A6" + "02FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC30") +) + +type jsonNonceAggTestCase struct { + Nonces []string `json:"nonces"` + ExpectedNonce string `json:"expected_key"` + ExpectedError string `json:"expected_error"` +} + +func TestMusig2AggregateNoncesTestVectors(t *testing.T) { + t.Parallel() + + var jsonCases []jsonNonceAggTestCase + + testCases := []struct { + nonces [][]byte + expectedNonce []byte + expectedError error + }{ + // Vector 1: Valid. + { + nonces: [][]byte{pNonce1, pNonce2}, + expectedNonce: expectedNonce, + }, + + // Vector 2: Public nonce from signer 1 is invalid due wrong + // tag, 0x04, inthe first half. + { + nonces: [][]byte{pNonce1, invalidNonce1}, + expectedError: secp256k1.ErrPubKeyInvalidFormat, + }, + + // Vector 3: Public nonce from signer 0 is invalid because the + // second half does not correspond to an X coordinate. + { + nonces: [][]byte{invalidNonce2, pNonce2}, + expectedError: secp256k1.ErrPubKeyNotOnCurve, + }, + + // Vector 4: Public nonce from signer 0 is invalid because + // second half exceeds field size. + { + nonces: [][]byte{invalidNonce3, pNonce2}, + expectedError: secp256k1.ErrPubKeyXTooBig, + }, + + // Vector 5: Sum of second points encoded in the nonces would + // be point at infinity, therefore set sum to base point G. + { + nonces: [][]byte{ + append( + append([]byte{}, pNonce1[0:33]...), + getGBytes()..., + ), + append( + append([]byte{}, pNonce2[0:33]...), + getNegGBytes()..., + ), + }, + expectedNonce: append( + append([]byte{}, expectedNonce[0:33]...), + getGBytes()..., + ), + }, + } + for i, testCase := range testCases { + testName := fmt.Sprintf("Vector %v", i+1) + t.Run(testName, func(t *testing.T) { + var ( + nonces [][66]byte + strNonces []string + jsonError string + ) + for _, nonce := range testCase.nonces { + nonces = append(nonces, toPubNonceSlice(nonce)) + strNonces = append(strNonces, hex.EncodeToString(nonce)) + } + + if testCase.expectedError != nil { + jsonError = testCase.expectedError.Error() + } + + jsonCases = append(jsonCases, jsonNonceAggTestCase{ + Nonces: strNonces, + ExpectedNonce: hex.EncodeToString(expectedNonce), + ExpectedError: jsonError, + }) + + aggregatedNonce, err := AggregateNonces(nonces) + + switch { + case testCase.expectedError != nil && + errors.Is(err, testCase.expectedError): + + return + case err != nil: + t.Fatalf("aggregating nonce error: %v", err) + } + + if !bytes.Equal(testCase.expectedNonce, aggregatedNonce[:]) { + t.Fatalf("case: #%v, invalid nonce aggregation: "+ + "expected %x, got %x", i, testCase.expectedNonce, + aggregatedNonce) + } + + }) + } + + if *dumpJson { + jsonBytes, err := json.Marshal(jsonCases) + if err != nil { + t.Fatalf("unable to encode json: %v", err) + } + + var formattedJson bytes.Buffer + json.Indent(&formattedJson, jsonBytes, "", "\t") + err = ioutil.WriteFile( + nonceAggTestVectorName, formattedJson.Bytes(), 0644, + ) + if err != nil { + t.Fatalf("unable to write file: %v", err) + } + } +} + type memsetRandReader struct { i int } @@ -1045,3 +1183,21 @@ func to32ByteSlice(input []byte) [32]byte { copy(output[:], input) return output } + +func toPubNonceSlice(input []byte) [PubNonceSize]byte { + var output [PubNonceSize]byte + copy(output[:], input) + + return output +} + +func getGBytes() []byte { + return btcec.Generator().SerializeCompressed() +} + +func getNegGBytes() []byte { + pk := getGBytes() + pk[0] = 0x3 + + return pk +} From 53f47d65f139dbe484af573d0b9c8c1fd6384cc1 Mon Sep 17 00:00:00 2001 From: sputn1ck Date: Thu, 4 Aug 2022 11:49:17 +0200 Subject: [PATCH 398/419] btcec/schnorr/musig2: Add Sign test vectors This commit adds the testvectors from https://github.com/jonasnick/bips/commit/4c06f31daf54f0fc614144c28fcc45f5a10c6590 to the testcases --- btcec/schnorr/musig2/musig2_test.go | 240 ++++++++++++++++++++-------- 1 file changed, 169 insertions(+), 71 deletions(-) diff --git a/btcec/schnorr/musig2/musig2_test.go b/btcec/schnorr/musig2/musig2_test.go index 8b3a267b3c..7ff6e2e2c3 100644 --- a/btcec/schnorr/musig2/musig2_test.go +++ b/btcec/schnorr/musig2/musig2_test.go @@ -291,22 +291,28 @@ func parseKey(xHex string) *btcec.PublicKey { var ( signSetPrivKey, _ = btcec.PrivKeyFromBytes( - mustParseHex("7FB9E0E687ADA1EEBF7ECFE2F21E73EBDB51A7D450948DFE8D76D7F2D1007671"), + mustParseHex("7FB9E0E687ADA1EEBF7ECFE2F21E73EBDB51A7D450948DF" + + "E8D76D7F2D1007671"), ) - signSetPubKey, _ = schnorr.ParsePubKey(schnorr.SerializePubKey(signSetPrivKey.PubKey())) + signSetPubKey = schnorr.SerializePubKey(signSetPrivKey.PubKey()) - signTestMsg = mustParseHex("F95466D086770E689964664219266FE5ED215C92AE20BAB5C9D79ADDDDF3C0CF") + signTestMsg = mustParseHex("F95466D086770E689964664219266FE5ED215C92A" + + "E20BAB5C9D79ADDDDF3C0CF") - signSetKey2, _ = schnorr.ParsePubKey( - mustParseHex("F9308A019258C31049344F85F89D5229B531C845836F99B086" + - "01F113BCE036F9"), - ) - signSetKey3, _ = schnorr.ParsePubKey( - mustParseHex("DFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843" + - "240F7B502BA659"), - ) + signSetKey2 = mustParseHex("F9308A019258C31049344F85F89D5229B531C8458" + + "36F99B08601F113BCE036F9") + + signSetKey3 = mustParseHex("DFF1D77F2A671C5F36183726DB2341BE58FEAE1DA" + + "2DECED843240F7B502BA659") - signSetKeys = []*btcec.PublicKey{signSetPubKey, signSetKey2, signSetKey3} + invalidSetKey1 = mustParseHex("00000000000000000000000000000000" + + "00000000000000000000000000000007") + + signSetKeys = [][]byte{signSetPubKey, signSetKey2, signSetKey3, invalidPk1} + + aggregatedNonce = toPubNonceSlice(mustParseHex("028465FCF0BBDBCF443AA" + + "BCCE533D42B4B5A10966AC09A49655E8C42DAAB8FCD61037496A3CC86926" + + "D452CAFCFD55D25972CA1675D549310DE296BFF42F72EEEA8C9")) ) func formatTweakParity(tweaks []KeyTweakDesc) string { @@ -331,20 +337,21 @@ type jsonTweak struct { XOnly bool `json:"x_only"` } -type tweakSignCase struct { - Keys []string `json:"keys"` - Tweaks []jsonTweak `json:"tweaks,omitempty"` +type jsonTweakSignCase struct { + Keys []string `json:"keys"` + Tweaks []jsonTweak `json:"tweaks,omitempty"` + AggNonce string `json:"agg_nonce"` - ExpectedSig string `json:"expected_sig"` + ExpectedSig string `json:"expected_sig"` + ExpectedError string `json:"expected_error` } type jsonSignTestCase struct { SecNonce string `json:"secret_nonce"` - AggNonce string `json:"agg_nonce"` SigningKey string `json:"signing_key"` Msg string `json:"msg"` - TestCases []tweakSignCase `json:"test_cases"` + TestCases []jsonTweakSignCase `json:"test_cases"` } // TestMuSig2SigningTestVectors tests that the musig2 implementation produces @@ -357,21 +364,11 @@ func TestMuSig2SigningTestVectors(t *testing.T) { jsonCases.SigningKey = hex.EncodeToString(signSetPrivKey.Serialize()) jsonCases.Msg = hex.EncodeToString(signTestMsg) - var aggregatedNonce [PubNonceSize]byte - copy( - aggregatedNonce[:], - mustParseHex("028465FCF0BBDBCF443AABCCE533D42B4B5A10966AC09A49655E8C42DAAB8FCD61"), - ) - copy( - aggregatedNonce[33:], - mustParseHex("037496A3CC86926D452CAFCFD55D25972CA1675D549310DE296BFF42F72EEEA8C9"), - ) - - jsonCases.AggNonce = hex.EncodeToString(aggregatedNonce[:]) - var secNonce [SecNonceSize]byte - copy(secNonce[:], mustParseHex("508B81A611F100A6B2B6B29656590898AF488BCF2E1F55CF22E5CFB84421FE61")) - copy(secNonce[32:], mustParseHex("FA27FD49B1D50085B481285E1CA205D55C82CC1B31FF5CD54A489829355901F7")) + copy(secNonce[:], mustParseHex("508B81A611F100A6B2B6B29656590898AF488B"+ + "CF2E1F55CF22E5CFB84421FE61")) + copy(secNonce[32:], mustParseHex("FA27FD49B1D50085B481285E1CA205D55C82"+ + "CC1B31FF5CD54A489829355901F7")) jsonCases.SecNonce = hex.EncodeToString(secNonce[:]) @@ -410,40 +407,105 @@ func TestMuSig2SigningTestVectors(t *testing.T) { testCases := []struct { keyOrder []int + aggNonce [66]byte expectedPartialSig []byte tweaks []KeyTweakDesc + expectedError error }{ + // Vector 1 + { + keyOrder: []int{0, 1, 2}, + aggNonce: aggregatedNonce, + expectedPartialSig: mustParseHex("68537CC5234E505BD14" + + "061F8DA9E90C220A181855FD8BDB7F127BB12403B4D3B"), + }, + + // Vector 2 + { + keyOrder: []int{1, 0, 2}, + aggNonce: aggregatedNonce, + expectedPartialSig: mustParseHex("2DF67BFFF18E3DE797E" + + "13C6475C963048138DAEC5CB20A357CECA7C8424295EA"), + }, + + // Vector 3 + { + keyOrder: []int{1, 2, 0}, + aggNonce: aggregatedNonce, + expectedPartialSig: mustParseHex("0D5B651E6DE34A29A12" + + "DE7A8B4183B4AE6A7F7FBE15CDCAFA4A3D1BCAABC7517"), + }, + + // Vector 4: Signer 2 provided an invalid public key + { + keyOrder: []int{1, 0, 3}, + aggNonce: aggregatedNonce, + expectedError: secp256k1.ErrPubKeyNotOnCurve, + }, + + // Vector 5: Aggregate nonce is invalid due wrong tag, 0x04, + // in the first half. { - keyOrder: []int{0, 1, 2}, - expectedPartialSig: mustParseHex("68537CC5234E505BD14061F8DA9E90C220A181855FD8BDB7F127BB12403B4D3B"), + + keyOrder: []int{1, 2, 0}, + aggNonce: toPubNonceSlice( + mustParseHex("048465FCF0BBDBCF443AABCCE533D42" + + "B4B5A10966AC09A49655E8C42DAAB8FCD610" + + "37496A3CC86926D452CAFCFD55D25972CA16" + + "75D549310DE296BFF42F72EEEA8C9")), + expectedError: secp256k1.ErrPubKeyInvalidFormat, }, + + // Vector 6: Aggregate nonce is invalid because the second half + // does not correspond to an X coordinate. { - keyOrder: []int{1, 0, 2}, - expectedPartialSig: mustParseHex("2DF67BFFF18E3DE797E13C6475C963048138DAEC5CB20A357CECA7C8424295EA"), + + keyOrder: []int{1, 2, 0}, + aggNonce: toPubNonceSlice( + mustParseHex("028465FCF0BBDBCF443AABCCE533D42" + + "B4B5A10966AC09A49655E8C42DAAB8FCD610" + + "200000000000000000000000000000000000" + + "00000000000000000000000000009")), + expectedError: secp256k1.ErrPubKeyNotOnCurve, }, + + // Vector 7: Aggregate nonce is invalid because the second half + // exceeds field size. { - keyOrder: []int{1, 2, 0}, - expectedPartialSig: mustParseHex("0D5B651E6DE34A29A12DE7A8B4183B4AE6A7F7FBE15CDCAFA4A3D1BCAABC7517"), + + keyOrder: []int{1, 2, 0}, + aggNonce: toPubNonceSlice( + mustParseHex("028465FCF0BBDBCF443AABCCE533D42" + + "B4B5A10966AC09A49655E8C42DAAB8FCD610" + + "2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + + "FFFFFFFFFFFFFFFFFFFFEFFFFFC30")), + expectedError: secp256k1.ErrPubKeyXTooBig, }, // A single x-only tweak. { - keyOrder: []int{1, 2, 0}, - expectedPartialSig: mustParseHex("5e24c7496b565debc3b9639e6f1304a21597f9603d3ab05b4913641775e1375b"), - tweaks: []KeyTweakDesc{genTweakParity(tweak1, true)}, + keyOrder: []int{1, 2, 0}, + aggNonce: aggregatedNonce, + expectedPartialSig: mustParseHex("5e24c7496b565debc3b" + + "9639e6f1304a21597f9603d3ab05b4913641775e1375b"), + tweaks: []KeyTweakDesc{genTweakParity(tweak1, true)}, }, // A single ordinary tweak. { - keyOrder: []int{1, 2, 0}, - expectedPartialSig: mustParseHex("78408ddcab4813d1394c97d493ef1084195c1d4b52e63ecd7bc5991644e44ddd"), - tweaks: []KeyTweakDesc{genTweakParity(tweak1, false)}, + keyOrder: []int{1, 2, 0}, + aggNonce: aggregatedNonce, + expectedPartialSig: mustParseHex("78408ddcab4813d1394c" + + "97d493ef1084195c1d4b52e63ecd7bc5991644e44ddd"), + tweaks: []KeyTweakDesc{genTweakParity(tweak1, false)}, }, // An ordinary tweak then an x-only tweak. { - keyOrder: []int{1, 2, 0}, - expectedPartialSig: mustParseHex("C3A829A81480E36EC3AB052964509A94EBF34210403D16B226A6F16EC85B7357"), + keyOrder: []int{1, 2, 0}, + aggNonce: aggregatedNonce, + expectedPartialSig: mustParseHex("C3A829A81480E36EC3A" + + "B052964509A94EBF34210403D16B226A6F16EC85B7357"), tweaks: []KeyTweakDesc{ genTweakParity(tweak1, false), genTweakParity(tweak2, true), @@ -452,8 +514,10 @@ func TestMuSig2SigningTestVectors(t *testing.T) { // Four tweaks, in the order: x-only, ordinary, x-only, ordinary. { - keyOrder: []int{1, 2, 0}, - expectedPartialSig: mustParseHex("8C4473C6A382BD3C4AD7BE59818DA5ED7CF8CEC4BC21996CFDA08BB4316B8BC7"), + keyOrder: []int{1, 2, 0}, + aggNonce: aggregatedNonce, + expectedPartialSig: mustParseHex("8C4473C6A382BD3C4AD" + + "7BE59818DA5ED7CF8CEC4BC21996CFDA08BB4316B8BC7"), tweaks: []KeyTweakDesc{ genTweakParity(tweak1, true), genTweakParity(tweak2, false), @@ -471,17 +535,22 @@ func TestMuSig2SigningTestVectors(t *testing.T) { if len(testCase.tweaks) != 0 { testName += fmt.Sprintf("/x_only=%v", formatTweakParity(testCase.tweaks)) } - t.Run(testName, func(t *testing.T) { - var strKeys []string keySet := make([]*btcec.PublicKey, 0, len(testCase.keyOrder)) for _, keyIndex := range testCase.keyOrder { - keySet = append(keySet, signSetKeys[keyIndex]) - strKeys = append( - strKeys, hex.EncodeToString( - schnorr.SerializePubKey(signSetKeys[keyIndex]), - ), - ) + keyBytes := signSetKeys[keyIndex] + pub, err := schnorr.ParsePubKey(keyBytes) + + switch { + case testCase.expectedError != nil && + errors.Is(err, testCase.expectedError): + + return + case err != nil: + t.Fatalf("unable to parse pubkeys: %v", err) + } + + keySet = append(keySet, pub) } var opts []SignOption @@ -491,19 +560,17 @@ func TestMuSig2SigningTestVectors(t *testing.T) { ) } - var jsonTweaks []jsonTweak - for _, tweak := range testCase.tweaks { - jsonTweaks = append(jsonTweaks, jsonTweak{ - Tweak: hex.EncodeToString(tweak.Tweak[:]), - XOnly: tweak.IsXOnly, - }) - } - partialSig, err := Sign( - secNonce, signSetPrivKey, aggregatedNonce, + secNonce, signSetPrivKey, testCase.aggNonce, keySet, msg, opts..., ) - if err != nil { + + switch { + case testCase.expectedError != nil && + errors.Is(err, testCase.expectedError): + + return + case err != nil: t.Fatalf("unable to generate partial sig: %v", err) } @@ -516,12 +583,43 @@ func TestMuSig2SigningTestVectors(t *testing.T) { ) } - jsonCases.TestCases = append(jsonCases.TestCases, tweakSignCase{ - Keys: strKeys, - Tweaks: jsonTweaks, - ExpectedSig: hex.EncodeToString(testCase.expectedPartialSig), - }) }) + + if *dumpJson { + var ( + strKeys []string + jsonError string + ) + + for _, keyIndex := range testCase.keyOrder { + keyBytes := signSetKeys[keyIndex] + strKeys = append(strKeys, hex.EncodeToString(keyBytes)) + } + + if testCase.expectedError != nil { + jsonError = testCase.expectedError.Error() + } + + tweakSignCase := jsonTweakSignCase{ + Keys: strKeys, + ExpectedSig: hex.EncodeToString(testCase.expectedPartialSig), + AggNonce: hex.EncodeToString(testCase.aggNonce[:]), + ExpectedError: jsonError, + } + + var jsonTweaks []jsonTweak + for _, tweak := range testCase.tweaks { + jsonTweaks = append( + jsonTweaks, + jsonTweak{ + Tweak: hex.EncodeToString(tweak.Tweak[:]), + XOnly: tweak.IsXOnly, + }) + } + tweakSignCase.Tweaks = jsonTweaks + + jsonCases.TestCases = append(jsonCases.TestCases, tweakSignCase) + } } if *dumpJson { From 85356e81740b03c73adc5b5edd57c52970926b19 Mon Sep 17 00:00:00 2001 From: sputn1ck Date: Wed, 29 Jun 2022 18:37:16 +0200 Subject: [PATCH 399/419] btcec/schnorr/musig2: Throw error on invalid partial sig --- btcec/schnorr/musig2/sign.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/btcec/schnorr/musig2/sign.go b/btcec/schnorr/musig2/sign.go index 4f9439fe6a..0529c53c9a 100644 --- a/btcec/schnorr/musig2/sign.go +++ b/btcec/schnorr/musig2/sign.go @@ -85,7 +85,10 @@ func (p *PartialSignature) Decode(r io.Reader) error { return nil } - p.S.SetBytes(&sBytes) + overflows := p.S.SetBytes(&sBytes) + if overflows == 1 { + return ErrPartialSigInvalid + } return nil } From 5e960074ea29b8af62d6def11eeda8ff13501224 Mon Sep 17 00:00:00 2001 From: sputn1ck Date: Thu, 4 Aug 2022 11:51:02 +0200 Subject: [PATCH 400/419] btcec/schnorr/musig2: Add PartialSigVerify testvectors Adds testvectors from https://github.com/jonasnick/bips/commit/ebb6a7454bfc852f405fb7efb198c7e919248316 and https://github.com/jonasnick/bips/commit/6788ee5412ccb394f20b0758227a916d8f1fa631 --- btcec/schnorr/musig2/musig2_test.go | 377 ++++++++++++++++++++++++---- 1 file changed, 332 insertions(+), 45 deletions(-) diff --git a/btcec/schnorr/musig2/musig2_test.go b/btcec/schnorr/musig2/musig2_test.go index 7ff6e2e2c3..9608fcad27 100644 --- a/btcec/schnorr/musig2/musig2_test.go +++ b/btcec/schnorr/musig2/musig2_test.go @@ -308,11 +308,60 @@ var ( invalidSetKey1 = mustParseHex("00000000000000000000000000000000" + "00000000000000000000000000000007") + signExpected1 = mustParseHex("68537CC5234E505BD14061F8DA9E90C220A1818" + + "55FD8BDB7F127BB12403B4D3B") + signExpected2 = mustParseHex("2DF67BFFF18E3DE797E13C6475C963048138DAE" + + "C5CB20A357CECA7C8424295EA") + signExpected3 = mustParseHex("0D5B651E6DE34A29A12DE7A8B4183B4AE6A7F7F" + + "BE15CDCAFA4A3D1BCAABC7517") + signSetKeys = [][]byte{signSetPubKey, signSetKey2, signSetKey3, invalidPk1} aggregatedNonce = toPubNonceSlice(mustParseHex("028465FCF0BBDBCF443AA" + "BCCE533D42B4B5A10966AC09A49655E8C42DAAB8FCD61037496A3CC86926" + "D452CAFCFD55D25972CA1675D549310DE296BFF42F72EEEA8C9")) + verifyPnonce1 = mustParsePubNonce("0337C87821AFD50A8644D820A8F3E02E49" + + "9C931865C2360FB43D0A0D20DAFE07EA0287BF891D2A6DEAEBADC909352A" + + "A9405D1428C15F4B75F04DAE642A95C2548480") + verifyPnonce2 = mustParsePubNonce("0279BE667EF9DCBBAC55A06295CE870B07" + + "029BFCDB2DCE28D959F2815B16F817980279BE667EF9DCBBAC55A06295CE" + + "870B07029BFCDB2DCE28D959F2815B16F81798") + verifyPnonce3 = mustParsePubNonce("032DE2662628C90B03F5E720284EB52FF7" + + "D71F4284F627B68A853D78C78E1FFE9303E4C5524E83FFE1493B9077CF1C" + + "A6BEB2090C93D930321071AD40B2F44E599046") + + tweak1 = KeyTweakDesc{ + Tweak: [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, + }, + } + tweak2 = KeyTweakDesc{ + Tweak: [32]byte{ + 0xae, 0x2e, 0xa7, 0x97, 0xcc, 0xf, 0xe7, 0x2a, + 0xc5, 0xb9, 0x7b, 0x97, 0xf3, 0xc6, 0x95, 0x7d, + 0x7e, 0x41, 0x99, 0xa1, 0x67, 0xa5, 0x8e, 0xb0, + 0x8b, 0xca, 0xff, 0xda, 0x70, 0xac, 0x4, 0x55, + }, + } + tweak3 = KeyTweakDesc{ + Tweak: [32]byte{ + 0xf5, 0x2e, 0xcb, 0xc5, 0x65, 0xb3, 0xd8, 0xbe, + 0xa2, 0xdf, 0xd5, 0xb7, 0x5a, 0x4f, 0x45, 0x7e, + 0x54, 0x36, 0x98, 0x9, 0x32, 0x2e, 0x41, 0x20, + 0x83, 0x16, 0x26, 0xf2, 0x90, 0xfa, 0x87, 0xe0, + }, + } + tweak4 = KeyTweakDesc{ + Tweak: [32]byte{ + 0x19, 0x69, 0xad, 0x73, 0xcc, 0x17, 0x7f, 0xa0, + 0xb4, 0xfc, 0xed, 0x6d, 0xf1, 0xf7, 0xbf, 0x99, + 0x7, 0xe6, 0x65, 0xfd, 0xe9, 0xba, 0x19, 0x6a, + 0x74, 0xfe, 0xd0, 0xa3, 0xcf, 0x5a, 0xef, 0x9d, + }, + } ) func formatTweakParity(tweaks []KeyTweakDesc) string { @@ -372,39 +421,6 @@ func TestMuSig2SigningTestVectors(t *testing.T) { jsonCases.SecNonce = hex.EncodeToString(secNonce[:]) - tweak1 := KeyTweakDesc{ - Tweak: [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, - }, - } - tweak2 := KeyTweakDesc{ - Tweak: [32]byte{ - 0xae, 0x2e, 0xa7, 0x97, 0xcc, 0xf, 0xe7, 0x2a, - 0xc5, 0xb9, 0x7b, 0x97, 0xf3, 0xc6, 0x95, 0x7d, - 0x7e, 0x41, 0x99, 0xa1, 0x67, 0xa5, 0x8e, 0xb0, - 0x8b, 0xca, 0xff, 0xda, 0x70, 0xac, 0x4, 0x55, - }, - } - tweak3 := KeyTweakDesc{ - Tweak: [32]byte{ - 0xf5, 0x2e, 0xcb, 0xc5, 0x65, 0xb3, 0xd8, 0xbe, - 0xa2, 0xdf, 0xd5, 0xb7, 0x5a, 0x4f, 0x45, 0x7e, - 0x54, 0x36, 0x98, 0x9, 0x32, 0x2e, 0x41, 0x20, - 0x83, 0x16, 0x26, 0xf2, 0x90, 0xfa, 0x87, 0xe0, - }, - } - tweak4 := KeyTweakDesc{ - Tweak: [32]byte{ - 0x19, 0x69, 0xad, 0x73, 0xcc, 0x17, 0x7f, 0xa0, - 0xb4, 0xfc, 0xed, 0x6d, 0xf1, 0xf7, 0xbf, 0x99, - 0x7, 0xe6, 0x65, 0xfd, 0xe9, 0xba, 0x19, 0x6a, - 0x74, 0xfe, 0xd0, 0xa3, 0xcf, 0x5a, 0xef, 0x9d, - }, - } - testCases := []struct { keyOrder []int aggNonce [66]byte @@ -414,26 +430,23 @@ func TestMuSig2SigningTestVectors(t *testing.T) { }{ // Vector 1 { - keyOrder: []int{0, 1, 2}, - aggNonce: aggregatedNonce, - expectedPartialSig: mustParseHex("68537CC5234E505BD14" + - "061F8DA9E90C220A181855FD8BDB7F127BB12403B4D3B"), + keyOrder: []int{0, 1, 2}, + aggNonce: aggregatedNonce, + expectedPartialSig: signExpected1, }, // Vector 2 { - keyOrder: []int{1, 0, 2}, - aggNonce: aggregatedNonce, - expectedPartialSig: mustParseHex("2DF67BFFF18E3DE797E" + - "13C6475C963048138DAEC5CB20A357CECA7C8424295EA"), + keyOrder: []int{1, 0, 2}, + aggNonce: aggregatedNonce, + expectedPartialSig: signExpected2, }, // Vector 3 { - keyOrder: []int{1, 2, 0}, - aggNonce: aggregatedNonce, - expectedPartialSig: mustParseHex("0D5B651E6DE34A29A12" + - "DE7A8B4183B4AE6A7F7FBE15CDCAFA4A3D1BCAABC7517"), + keyOrder: []int{1, 2, 0}, + aggNonce: aggregatedNonce, + expectedPartialSig: signExpected3, }, // Vector 4: Signer 2 provided an invalid public key @@ -639,6 +652,261 @@ func TestMuSig2SigningTestVectors(t *testing.T) { } } +func TestMusig2PartialSigVerifyTestVectors(t *testing.T) { + t.Parallel() + + testCases := []struct { + partialSig []byte + nonces [][66]byte + pubnonceIndex int + keyOrder []int + tweaks []KeyTweakDesc + expectedError error + }{ + // A single x-only tweak. + { + keyOrder: []int{1, 2, 0}, + nonces: [][66]byte{ + verifyPnonce2, + verifyPnonce3, + verifyPnonce1, + }, + pubnonceIndex: 2, + partialSig: mustParseHex("5e24c7496b565debc3b9639e" + + "6f1304a21597f9603d3ab05b4913641775e1375b"), + tweaks: []KeyTweakDesc{genTweakParity(tweak1, true)}, + }, + // A single ordinary tweak. + { + keyOrder: []int{1, 2, 0}, + nonces: [][66]byte{ + verifyPnonce2, + verifyPnonce3, + verifyPnonce1, + }, + pubnonceIndex: 2, + partialSig: mustParseHex("78408ddcab4813d1394c97d4" + + "93ef1084195c1d4b52e63ecd7bc5991644e44ddd"), + tweaks: []KeyTweakDesc{genTweakParity(tweak1, false)}, + }, + // An ordinary tweak then an x-only tweak. + { + keyOrder: []int{1, 2, 0}, + nonces: [][66]byte{ + verifyPnonce2, + verifyPnonce3, + verifyPnonce1, + }, + pubnonceIndex: 2, + partialSig: mustParseHex("C3A829A81480E36EC3AB0529" + + "64509A94EBF34210403D16B226A6F16EC85B7357"), + tweaks: []KeyTweakDesc{ + genTweakParity(tweak1, false), + genTweakParity(tweak2, true), + }, + }, + + // Four tweaks, in the order: x-only, ordinary, x-only, ordinary. + { + keyOrder: []int{1, 2, 0}, + nonces: [][66]byte{ + verifyPnonce2, + verifyPnonce3, + verifyPnonce1, + }, + pubnonceIndex: 2, + partialSig: mustParseHex("8C4473C6A382BD3C4AD7BE5" + + "9818DA5ED7CF8CEC4BC21996CFDA08BB4316B8BC7"), + tweaks: []KeyTweakDesc{ + genTweakParity(tweak1, true), + genTweakParity(tweak2, false), + genTweakParity(tweak3, true), + genTweakParity(tweak4, false), + }, + }, + // Vector 8. + { + + partialSig: signExpected1, + pubnonceIndex: 0, + keyOrder: []int{0, 1, 2}, + nonces: [][66]byte{ + verifyPnonce1, + verifyPnonce2, + verifyPnonce3, + }, + }, + // Vector 9. + { + + partialSig: signExpected2, + pubnonceIndex: 1, + keyOrder: []int{1, 0, 2}, + nonces: [][66]byte{ + verifyPnonce2, + verifyPnonce1, + verifyPnonce3, + }, + }, + // Vector 10. + { + + partialSig: signExpected3, + pubnonceIndex: 2, + keyOrder: []int{1, 2, 0}, + nonces: [][66]byte{ + verifyPnonce2, + verifyPnonce3, + verifyPnonce1, + }, + }, + // Vector 11: Wrong signature (which is equal to the negation + // of valid signature expected[0]). + { + + partialSig: mustParseHex("97AC833ADCB1AFA42EBF9E0" + + "725616F3C9A0D5B614F6FE283CEAAA37A8FFAF406"), + pubnonceIndex: 0, + keyOrder: []int{0, 1, 2}, + nonces: [][66]byte{ + verifyPnonce1, + verifyPnonce2, + verifyPnonce3, + }, + expectedError: ErrPartialSigInvalid, + }, + // Vector 12: Wrong signer. + { + + partialSig: signExpected1, + pubnonceIndex: 1, + keyOrder: []int{0, 1, 2}, + nonces: [][66]byte{ + verifyPnonce1, + verifyPnonce2, + verifyPnonce3, + }, + expectedError: ErrPartialSigInvalid, + }, + // Vector 13: Signature exceeds group size. + { + + partialSig: mustParseHex("FFFFFFFFFFFFFFFFFFFFFFFF" + + "FFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141"), + pubnonceIndex: 0, + keyOrder: []int{0, 1, 2}, + nonces: [][66]byte{ + verifyPnonce1, + verifyPnonce2, + verifyPnonce3, + }, + expectedError: ErrPartialSigInvalid, + }, + // Vector 14: Invalid pubnonce. + { + + partialSig: signExpected1, + pubnonceIndex: 0, + keyOrder: []int{0, 1, 2}, + nonces: [][66]byte{ + canParsePubNonce("020000000000000000000000000" + + "000000000000000000000000000000000000009"), + verifyPnonce2, + verifyPnonce3, + }, + expectedError: secp256k1.ErrPubKeyNotOnCurve, + }, + // Vector 15: Invalid public key. + { + + partialSig: signExpected1, + pubnonceIndex: 0, + keyOrder: []int{3, 1, 2}, + nonces: [][66]byte{ + verifyPnonce1, + verifyPnonce2, + verifyPnonce3, + }, + expectedError: secp256k1.ErrPubKeyNotOnCurve, + }, + } + + for _, testCase := range testCases { + + // todo find name + testName := fmt.Sprintf("%v/tweak=%v", testCase.pubnonceIndex, testCase.keyOrder) + + t.Run(testName, func(t *testing.T) { + + combinedNonce, err := AggregateNonces(testCase.nonces) + + switch { + case testCase.expectedError != nil && + errors.Is(err, testCase.expectedError): + + return + case err != nil: + t.Fatalf("unable to aggregate nonces %v", err) + } + + keySet := make([]*btcec.PublicKey, 0, len(testCase.keyOrder)) + for _, keyIndex := range testCase.keyOrder { + keyBytes := signSetKeys[keyIndex] + pub, err := schnorr.ParsePubKey(keyBytes) + + switch { + case testCase.expectedError != nil && + errors.Is(err, testCase.expectedError): + + return + case err != nil: + t.Fatalf("unable to parse pubkeys: %v", err) + } + + keySet = append(keySet, pub) + } + + ps := &PartialSignature{} + err = ps.Decode(bytes.NewBuffer(testCase.partialSig)) + + switch { + case testCase.expectedError != nil && + errors.Is(err, testCase.expectedError): + + return + case err != nil: + t.Fatal(err) + } + + var opts []SignOption + if len(testCase.tweaks) != 0 { + opts = append( + opts, WithTweaks(testCase.tweaks...), + ) + } + + err = verifyPartialSig( + ps, + testCase.nonces[testCase.pubnonceIndex], + combinedNonce, + keySet, + signSetKeys[testCase.keyOrder[testCase.pubnonceIndex]], + to32ByteSlice(signTestMsg), + opts..., + ) + + switch { + case testCase.expectedError != nil && + errors.Is(err, testCase.expectedError): + + return + case err != nil: + t.Fatalf("unable to aggregate nonces %v", err) + } + }) + } +} + type signer struct { privKey *btcec.PrivateKey pubKey *btcec.PublicKey @@ -1299,3 +1567,22 @@ func getNegGBytes() []byte { return pk } + +func mustParsePubNonce(str string) [PubNonceSize]byte { + b, err := hex.DecodeString(str) + if err != nil { + panic(fmt.Errorf("unable to parse hex: %v", err)) + } + if len(b) != PubNonceSize { + panic(fmt.Errorf("not a public nonce: %v", err)) + } + return toPubNonceSlice(b) +} + +func canParsePubNonce(str string) [PubNonceSize]byte { + b, err := hex.DecodeString(str) + if err != nil { + panic(fmt.Errorf("unable to parse hex: %v", err)) + } + return toPubNonceSlice(b) +} From 4b2fe9f83e6cfbf6b383caa51ea4637c0d2c19af Mon Sep 17 00:00:00 2001 From: sputn1ck Date: Thu, 4 Aug 2022 11:55:19 +0200 Subject: [PATCH 401/419] btcec/schnorr/musig2: Add CombineSig testvectors This commit adds the testvectors from https://github.com/jonasnick/bips/commit/cdc3520c0726d73125f7dbf9826e3be9cffe1948 --- btcec/schnorr/musig2/musig2_test.go | 273 ++++++++++++++++++++++++++++ 1 file changed, 273 insertions(+) diff --git a/btcec/schnorr/musig2/musig2_test.go b/btcec/schnorr/musig2/musig2_test.go index 9608fcad27..1ff59a2ffa 100644 --- a/btcec/schnorr/musig2/musig2_test.go +++ b/btcec/schnorr/musig2/musig2_test.go @@ -16,6 +16,7 @@ import ( "github.com/btcsuite/btcd/btcec/v2" "github.com/btcsuite/btcd/btcec/v2/schnorr" + "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/decred/dcrd/dcrec/secp256k1/v4" ) @@ -1535,6 +1536,266 @@ func (mr *memsetRandReader) Read(buf []byte) (n int, err error) { return len(buf), nil } +var ( + combineSigKey0 = mustParseHex("487D1B83B41B4CBBD07A111F1BBC7BDC8864CF" + + "EF5DBF96E46E51C68399B0BEF6") + combineSigKey1 = mustParseHex("4795C22501BF534BC478FF619407A7EC9E8D88" + + "83646D69BD43A0728944EA802F") + combineSigKey2 = mustParseHex("0F5BE837F3AB7E7FEFF1FAA44D673C2017206A" + + "E836D2C7893CDE4ACB7D55EDEB") + combineSigKey3 = mustParseHex("0FD453223E444FCA91FB5310990AE8A0C5DAA1" + + "4D2A4C8944E1C0BC80C30DF682") + + combineSigKeys = [][]byte{combineSigKey0, combineSigKey1, + combineSigKey2, combineSigKey3} + + combineSigAggNonce0 = mustParsePubNonce("024FA51009A56F0D6DF737131CE1" + + "FBBD833797AF3B4FE6BF0D68F4D49F68B0947E0248FB3BB9191F0CFF1380" + + "6A3A2F1429C23012654FCE4E41F7EC9169EAA6056B21") + combineSigAggNonce1 = mustParsePubNonce("023B11E63E2460E5E0F1561BB700" + + "FEA95B991DD9CA2CBBE92A3960641FA7469F6702CA4CD38375FE8BEB857C" + + "770807225BFC7D712F42BA896B83FC71138E56409B21") + combineSigAggNonce2 = mustParsePubNonce("03F98BEAA32B8A38FE3797C4E813" + + "DC9CE05ADBE32200035FB37EB0A030B735E9B6030E6118EC98EA2BA7A358" + + "C2E38E7E13E63681EEB683E067061BF7D52DCF08E615") + combineSigAggNonce3 = mustParsePubNonce("026491FBCFD47148043A0F7310E6" + + "2EF898C10F2D0376EE6B232EAAD36F3C2E29E303020CB17D168908E2904D" + + "E2EB571CD232CA805A6981D0F86CDBBD2F12BD91F6D0") + + psig0 = mustParseHex("E5C1CBD6E7E89FE9EE30D5F3B6D06B9C218846E4A1DEF4E" + + "E851410D51ABBD850") + psig1 = mustParseHex("9BC470F7F1C9BC848BDF179B0023282FFEF40908E0EF884" + + "59784A4355FC86D0C") + psig2 = mustParseHex("D5D8A09929BA264B2F5DF15ACA1CF2DEFA47C048DF0C323" + + "2E965FFE2F2831B1D") + psig3 = mustParseHex("A915197503C1051EA77DC91F01C3A0E60BFD64473BD536C" + + "B613F9645BD61C843") + psig4 = mustParseHex("99A144D7076A128022134E036B8BDF33811F7EAED9A1E48" + + "549B46D8A63D64DC9") + psig5 = mustParseHex("716A72A0C1E531EBB4555C8E29FD35C796F4F231C3B0391" + + "93D7E8D7AEFBDF5F7") + psig6 = mustParseHex("06B6DD04BC0F1EF740916730AD7DAC794255B1612217197" + + "65BDE9686A26633DC") + psig7 = mustParseHex("BF6D85D4930062726EBC6EBB184AFD68DBB3FED159C5019" + + "89690A62600D6FBAB") + + combineSigExpected0 = mustParseHex("4006D4D069F3B51E968762FF8074153E2" + + "78E5BCD221AABE0743CA001B77E79F581863CCED9B25C6E7A0FED8EB6F39" + + "3CD65CD7306D385DCF85CC6567DAA4E041B") + combineSigExpected1 = mustParseHex("98BCD40DFD94B47A3DA37D7B78EB6CCE8" + + "ABEACA23C3ADE6F4678902410EB35C67EEDBA0E2D7B2B69D6DBBA79CBE09" + + "3C64B9647A96B98C8C28AD3379BDFAEA21F") + combineSigExpected2 = mustParseHex("3741FEDCCDD7508B58DCB9A780FF5D974" + + "52EC8C0448D8C97004EA7175C14F2007A54D1DE356EBA6719278436EF111" + + "DFA8F1B832368371B9B7A25001709039679") + combineSigExpected3 = mustParseHex("F4B3DA3CF0D0F7CF5C1840593BF1A1A41" + + "5DA341619AE848F2210696DC8C7512540962C84EF7F0CEC491065F2D5772" + + "13CF10E8A63D153297361B3B172BE27B61F") + + combineSigTweak0 = mustParseHex32("B511DA492182A91B0FFB9A98020D55F260" + + "AE86D7ECBD0399C7383D59A5F2AF7C") + combineSigTweak1 = mustParseHex32("A815FE049EE3C5AAB66310477FBC8BCCCA" + + "C2F3395F59F921C364ACD78A2F48DC") + combineSigTweak2 = mustParseHex32("75448A87274B056468B977BE06EB1E9F65" + + "7577B7320B0A3376EA51FD420D18A8") + tweak0False = KeyTweakDesc{ + Tweak: combineSigTweak0, + IsXOnly: false, + } + tweak0True = KeyTweakDesc{ + Tweak: combineSigTweak0, + IsXOnly: true, + } + tweak1False = KeyTweakDesc{ + Tweak: combineSigTweak1, + IsXOnly: false, + } + tweak2True = KeyTweakDesc{ + Tweak: combineSigTweak2, + IsXOnly: true, + } + combineSigsMsg = mustParseHex32("599C67EA410D005B9DA90817CF03ED3B1C86" + + "8E4DA4EDF00A5880B0082C237869") +) + +func TestMusig2CombineSigsTestVectors(t *testing.T) { + + testCases := []struct { + partialSigs [][]byte + aggNonce [66]byte + keyOrder []int + expected []byte + tweaks []KeyTweakDesc + expectedError error + }{ + // Vector 1 + { + partialSigs: [][]byte{psig0, psig1}, + aggNonce: combineSigAggNonce0, + keyOrder: []int{0, 1}, + expected: combineSigExpected0, + }, + // Vector 2 + { + partialSigs: [][]byte{psig2, psig3}, + aggNonce: combineSigAggNonce1, + keyOrder: []int{0, 2}, + expected: combineSigExpected1, + }, + // Vector 3 + { + partialSigs: [][]byte{psig4, psig5}, + aggNonce: combineSigAggNonce2, + keyOrder: []int{0, 2}, + expected: combineSigExpected2, + tweaks: []KeyTweakDesc{tweak0False}, + }, + // Vector 4 + { + partialSigs: [][]byte{psig6, psig7}, + aggNonce: combineSigAggNonce3, + keyOrder: []int{0, 3}, + expected: combineSigExpected3, + tweaks: []KeyTweakDesc{ + tweak0True, + tweak1False, + tweak2True, + }, + }, + // Vector 5: Partial signature is invalid because it exceeds group size + { + partialSigs: [][]byte{ + psig7, + mustParseHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + + "EBAAEDCE6AF48A03BBFD25E8CD0364141"), + }, + aggNonce: combineSigAggNonce3, + expectedError: ErrPartialSigInvalid, + }, + } + + for _, testCase := range testCases { + var pSigs []*PartialSignature + for _, partialSig := range testCase.partialSigs { + pSig := &PartialSignature{} + err := pSig.Decode(bytes.NewReader(partialSig)) + + switch { + case testCase.expectedError != nil && + errors.Is(err, testCase.expectedError): + + return + case err != nil: + t.Fatal(err) + } + + pSigs = append(pSigs, pSig) + } + + keySet := make([]*btcec.PublicKey, 0, len(testCase.keyOrder)) + for _, keyIndex := range testCase.keyOrder { + keyBytes := combineSigKeys[keyIndex] + pub, err := schnorr.ParsePubKey(keyBytes) + if err != nil { + t.Fatalf("unable to parse pubkeys: %v", err) + } + keySet = append(keySet, pub) + } + + uniqueKeyIndex := secondUniqueKeyIndex(keySet, false) + aggOpts := []KeyAggOption{ + WithUniqueKeyIndex(uniqueKeyIndex), + } + if len(testCase.tweaks) > 0 { + aggOpts = append(aggOpts, WithKeyTweaks(testCase.tweaks...)) + } + + combinedKey, _, _, err := AggregateKeys( + keySet, false, aggOpts..., + ) + if err != nil { + t.Fatal(err) + } + + aggPubkey, err := aggNonceToPubkey( + testCase.aggNonce, combinedKey, combineSigsMsg, + ) + if err != nil { + t.Fatal(err) + } + + var opts []CombineOption + if len(testCase.tweaks) > 0 { + opts = append(opts, WithTweakedCombine( + combineSigsMsg, keySet, testCase.tweaks, false, + )) + } + + sig := CombineSigs(aggPubkey, pSigs, opts...) + expectedSig, err := schnorr.ParseSignature(testCase.expected) + if err != nil { + t.Fatal(err) + } + + if !bytes.Equal(sig.Serialize(), expectedSig.Serialize()) { + t.Fatalf("sigs not expected %x \n got %x", expectedSig.Serialize(), sig.Serialize()) + } + + if !sig.Verify(combineSigsMsg[:], combinedKey.FinalKey) { + t.Fatal("sig not valid for m") + } + } +} + +// aggNonceToPubkey gets a nonce as a public key for the TestMusig2CombineSigsTestVectors +// test. +// TODO(sputn1ck): build into intermediate routine. +func aggNonceToPubkey(combinedNonce [66]byte, combinedKey *AggregateKey, + msg [32]byte) (*btcec.PublicKey, error) { + + // b = int_from_bytes(tagged_hash('MuSig/noncecoef', aggnonce + bytes_from_point(Q) + msg)) % n + 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[:]) + + r1, err := btcec.ParsePubKey( + combinedNonce[:btcec.PubKeyBytesLenCompressed], + ) + if err != nil { + return nil, err + } + + r2, err := btcec.ParsePubKey( + combinedNonce[btcec.PubKeyBytesLenCompressed:], + ) + if err != nil { + return nil, err + } + + var nonce, r1J, r2J btcec.JacobianPoint + r1.AsJacobian(&r1J) + r2.AsJacobian(&r2J) + + // 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 + btcec.ScalarMultNonConst(&nonceBlinder, &r2J, &r2J) + btcec.AddNonConst(&r1J, &r2J, &nonce) + + nonce.ToAffine() + + return btcec.NewPublicKey( + &nonce.X, &nonce.Y, + ), nil + +} + func memsetLoop(a []byte, v uint8) { for i := range a { a[i] = byte(v) @@ -1568,6 +1829,18 @@ func getNegGBytes() []byte { return pk } +func mustParseHex32(str string) [32]byte { + b, err := hex.DecodeString(str) + if err != nil { + panic(fmt.Errorf("unable to parse hex: %v", err)) + } + if len(b) != 32 { + panic(fmt.Errorf("not a 32 byte slice: %v", err)) + } + + return to32ByteSlice(b) +} + func mustParsePubNonce(str string) [PubNonceSize]byte { b, err := hex.DecodeString(str) if err != nil { From 44eb8c64f8d0f0e3a84400e7f93b9eb16ea08873 Mon Sep 17 00:00:00 2001 From: sputn1ck Date: Wed, 29 Jun 2022 18:48:02 +0200 Subject: [PATCH 402/419] btcec/schnorr/musig2: Allow infinity nonces This commit updates the musig2 module to allow infinity nonces, as per Musig2 0.4.0. --- btcec/curve.go | 52 ++++++++++++++++++ btcec/error.go | 5 ++ btcec/schnorr/musig2/musig2_test.go | 6 ++- btcec/schnorr/musig2/nonces.go | 36 +++---------- btcec/schnorr/musig2/sign.go | 84 +++++++++++++++-------------- 5 files changed, 113 insertions(+), 70 deletions(-) diff --git a/btcec/curve.go b/btcec/curve.go index 5224e35c8e..70a9229f9a 100644 --- a/btcec/curve.go +++ b/btcec/curve.go @@ -4,6 +4,8 @@ package btcec import ( + "fmt" + secp "github.com/decred/dcrd/dcrec/secp256k1/v4" ) @@ -11,6 +13,9 @@ import ( // 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 { @@ -61,3 +66,50 @@ func ScalarBaseMultNonConst(k *ModNScalar, result *JacobianPoint) { 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/error.go b/btcec/error.go index 81ca2b044d..df6ec678a8 100644 --- a/btcec/error.go +++ b/btcec/error.go @@ -17,3 +17,8 @@ type Error = secp.Error // 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/schnorr/musig2/musig2_test.go b/btcec/schnorr/musig2/musig2_test.go index 1ff59a2ffa..f7f84be3d9 100644 --- a/btcec/schnorr/musig2/musig2_test.go +++ b/btcec/schnorr/musig2/musig2_test.go @@ -1461,7 +1461,7 @@ func TestMusig2AggregateNoncesTestVectors(t *testing.T) { }, expectedNonce: append( append([]byte{}, expectedNonce[0:33]...), - getGBytes()..., + getInfinityBytes()..., ), }, } @@ -1829,6 +1829,10 @@ func getNegGBytes() []byte { return pk } +func getInfinityBytes() []byte { + return make([]byte, 33) +} + func mustParseHex32(str string) [32]byte { b, err := hex.DecodeString(str) if err != nil { diff --git a/btcec/schnorr/musig2/nonces.go b/btcec/schnorr/musig2/nonces.go index 0ba100229a..66d2cb9c22 100644 --- a/btcec/schnorr/musig2/nonces.go +++ b/btcec/schnorr/musig2/nonces.go @@ -331,7 +331,7 @@ func AggregateNonces(pubNonces [][PubNonceSize]byte) ([PubNonceSize]byte, error) // 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.PublicKey, error) { + 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)) @@ -339,14 +339,12 @@ func AggregateNonces(pubNonces [][PubNonceSize]byte) ([PubNonceSize]byte, error) // Using the slicer, extract just the bytes we need to // decode. var nonceJ btcec.JacobianPoint - pubNonce, err := btcec.ParsePubKey( - slicer(pubNonceBytes), - ) + + nonceJ, err := btcec.ParseJacobian(slicer(pubNonceBytes)) if err != nil { - return nil, err + return btcec.JacobianPoint{}, err } - pubNonce.AsJacobian(&nonceJ) pubNonceJs[i] = &nonceJ } @@ -359,27 +357,8 @@ func AggregateNonces(pubNonces [][PubNonceSize]byte) ([PubNonceSize]byte, error) ) } - // Now that we've aggregated all the points, we need to check - // if this point is the point at infinity, if so, then we'll - // just return the generator. At a later step, the malicious - // party will be detected. - if aggregateNonce == infinityPoint { - // TODO(roasbeef): better way to get the generator w/ - // the new API? -- via old curve params instead? - var generator btcec.JacobianPoint - one := new(btcec.ModNScalar).SetInt(1) - btcec.ScalarBaseMultNonConst(one, &generator) - - generator.ToAffine() - return btcec.NewPublicKey( - &generator.X, &generator.Y, - ), nil - } - aggregateNonce.ToAffine() - return btcec.NewPublicKey( - &aggregateNonce.X, &aggregateNonce.Y, - ), nil + return aggregateNonce, nil } // The final nonce public nonce is actually two nonces, one that @@ -392,6 +371,7 @@ func AggregateNonces(pubNonces [][PubNonceSize]byte) ([PubNonceSize]byte, error) if err != nil { return finalNonce, err } + combinedNonce2, err := combineNonces(func(n [PubNonceSize]byte) []byte { return n[btcec.PubKeyBytesLenCompressed:] }) @@ -399,10 +379,10 @@ func AggregateNonces(pubNonces [][PubNonceSize]byte) ([PubNonceSize]byte, error) return finalNonce, err } - copy(finalNonce[:], combinedNonce1.SerializeCompressed()) + copy(finalNonce[:], btcec.JacobianToByteSlice(combinedNonce1)) copy( finalNonce[btcec.PubKeyBytesLenCompressed:], - combinedNonce2.SerializeCompressed(), + btcec.JacobianToByteSlice(combinedNonce2), ) return finalNonce, nil diff --git a/btcec/schnorr/musig2/sign.go b/btcec/schnorr/musig2/sign.go index 0529c53c9a..fce61aa8a8 100644 --- a/btcec/schnorr/musig2/sign.go +++ b/btcec/schnorr/musig2/sign.go @@ -200,20 +200,6 @@ func Sign(secNonce [SecNonceSize]byte, privKey *btcec.PrivateKey, option(opts) } - // Next, we'll parse the public nonces into R1 and R2. - r1, err := btcec.ParsePubKey( - combinedNonce[:btcec.PubKeyBytesLenCompressed], - ) - if err != nil { - return nil, err - } - r2, err := btcec.ParsePubKey( - combinedNonce[btcec.PubKeyBytesLenCompressed:], - ) - if err != nil { - return nil, err - } - // 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) @@ -259,19 +245,31 @@ func Sign(secNonce [SecNonceSize]byte, privKey *btcec.PrivateKey, ) nonceBlinder.SetByteSlice(nonceBlindHash[:]) - var nonce, r1J, r2J btcec.JacobianPoint - r1.AsJacobian(&r1J) - r2.AsJacobian(&r2J) + // Next, we'll parse the public nonces into R1 and R2. + r1J, err := btcec.ParseJacobian( + combinedNonce[:btcec.PubKeyBytesLenCompressed], + ) + if err != nil { + return nil, err + } + r2J, err := btcec.ParseJacobian( + combinedNonce[btcec.PubKeyBytesLenCompressed:], + ) + if err != nil { + return 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 it eh point at infinity, then we'll bail out. if nonce == infinityPoint { - return nil, ErrNoncePointAtInfinity + G := btcec.Generator() + G.AsJacobian(&nonce) } // Next we'll parse out our two secret nonces, which we'll be using in @@ -375,6 +373,7 @@ func (p *PartialSignature) Verify(pubNonce [PubNonceSize]byte, signingKey *btcec.PublicKey, msg [32]byte, signOpts ...SignOption) bool { pubKey := schnorr.SerializePubKey(signingKey) + return verifyPartialSig( p, pubNonce, combinedNonce, keySet, pubKey, msg, signOpts..., ) == nil @@ -399,19 +398,6 @@ func verifyPartialSig(partialSig *PartialSignature, pubNonce [PubNonceSize]byte, // Next we'll parse out the two public nonces into something we can // use. // - // TODO(roasbeef): consolidate, new method - r1, err := btcec.ParsePubKey( - combinedNonce[:btcec.PubKeyBytesLenCompressed], - ) - if err != nil { - return err - } - r2, err := btcec.ParsePubKey( - combinedNonce[btcec.PubKeyBytesLenCompressed:], - ) - if err != nil { - return err - } // 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. @@ -456,45 +442,61 @@ func verifyPartialSig(partialSig *PartialSignature, pubNonce [PubNonceSize]byte, nonceBlindHash := chainhash.TaggedHash(NonceBlindTag, nonceMsgBuf.Bytes()) nonceBlinder.SetByteSlice(nonceBlindHash[:]) - var nonce, r1J, r2J btcec.JacobianPoint - r1.AsJacobian(&r1J) - r2.AsJacobian(&r2J) + 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. - pubNonce1, err := btcec.ParsePubKey( + pubNonce1J, err := btcec.ParseJacobian( pubNonce[:btcec.PubKeyBytesLenCompressed], ) if err != nil { return err } - pubNonce2, err := btcec.ParsePubKey( + 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, pubNonce1J, pubNonce2J btcec.JacobianPoint - pubNonce1.AsJacobian(&pubNonce1J) - pubNonce2.AsJacobian(&pubNonce2J) + var pubNonceJ btcec.JacobianPoint + btcec.ScalarMultNonConst(&nonceBlinder, &pubNonce2J, &pubNonce2J) btcec.AddNonConst(&pubNonce1J, &pubNonce2J, &pubNonceJ) - nonce.ToAffine() + 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.ToAffine() pubNonceJ.Y.Negate(1) pubNonceJ.Y.Normalize() } From 06ce9608aa3bd2de895b5c12e545e9e0f2935c42 Mon Sep 17 00:00:00 2001 From: sputn1ck Date: Wed, 29 Jun 2022 18:52:32 +0200 Subject: [PATCH 403/419] btcec/schnorr/musig2: add infinity testvectors This commit adds the testvectors from https://github.com/jonasnick/bips/commit/20ba03106d245d42375e65f739c58dd9074daf6e --- btcec/schnorr/musig2/musig2_test.go | 48 ++++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/btcec/schnorr/musig2/musig2_test.go b/btcec/schnorr/musig2/musig2_test.go index f7f84be3d9..e58a6d4328 100644 --- a/btcec/schnorr/musig2/musig2_test.go +++ b/btcec/schnorr/musig2/musig2_test.go @@ -316,6 +316,9 @@ var ( signExpected3 = mustParseHex("0D5B651E6DE34A29A12DE7A8B4183B4AE6A7F7F" + "BE15CDCAFA4A3D1BCAABC7517") + signExpected4 = mustParseHex("8D5E0407FB4756EEBCD86264C32D792EE36EEB6" + + "9E952BBB30B8E41BEBC4D22FA") + signSetKeys = [][]byte{signSetPubKey, signSetKey2, signSetKey3, invalidPk1} aggregatedNonce = toPubNonceSlice(mustParseHex("028465FCF0BBDBCF443AA" + @@ -330,6 +333,9 @@ var ( verifyPnonce3 = mustParsePubNonce("032DE2662628C90B03F5E720284EB52FF7" + "D71F4284F627B68A853D78C78E1FFE9303E4C5524E83FFE1493B9077CF1C" + "A6BEB2090C93D930321071AD40B2F44E599046") + verifyPnonce4 = mustParsePubNonce("0237C87821AFD50A8644D820A8F3E02E49" + + "9C931865C2360FB43D0A0D20DAFE07EA0387BF891D2A6DEAEBADC909352A" + + "A9405D1428C15F4B75F04DAE642A95C2548480") tweak1 = KeyTweakDesc{ Tweak: [32]byte{ @@ -449,15 +455,21 @@ func TestMuSig2SigningTestVectors(t *testing.T) { aggNonce: aggregatedNonce, expectedPartialSig: signExpected3, }, + // Vector 4 Both halves of aggregate nonce correspond to point at infinity + { + keyOrder: []int{0, 1}, + aggNonce: mustNonceAgg([][66]byte{verifyPnonce1, verifyPnonce4}), + expectedPartialSig: signExpected4, + }, - // Vector 4: Signer 2 provided an invalid public key + // Vector 5: Signer 2 provided an invalid public key { keyOrder: []int{1, 0, 3}, aggNonce: aggregatedNonce, expectedError: secp256k1.ErrPubKeyNotOnCurve, }, - // Vector 5: Aggregate nonce is invalid due wrong tag, 0x04, + // Vector 6: Aggregate nonce is invalid due wrong tag, 0x04, // in the first half. { @@ -470,7 +482,7 @@ func TestMuSig2SigningTestVectors(t *testing.T) { expectedError: secp256k1.ErrPubKeyInvalidFormat, }, - // Vector 6: Aggregate nonce is invalid because the second half + // Vector 7: Aggregate nonce is invalid because the second half // does not correspond to an X coordinate. { @@ -483,7 +495,7 @@ func TestMuSig2SigningTestVectors(t *testing.T) { expectedError: secp256k1.ErrPubKeyNotOnCurve, }, - // Vector 7: Aggregate nonce is invalid because the second half + // Vector 8: Aggregate nonce is invalid because the second half // exceeds field size. { @@ -725,7 +737,7 @@ func TestMusig2PartialSigVerifyTestVectors(t *testing.T) { genTweakParity(tweak4, false), }, }, - // Vector 8. + // Vector 9. { partialSig: signExpected1, @@ -737,7 +749,7 @@ func TestMusig2PartialSigVerifyTestVectors(t *testing.T) { verifyPnonce3, }, }, - // Vector 9. + // Vector 10. { partialSig: signExpected2, @@ -749,7 +761,7 @@ func TestMusig2PartialSigVerifyTestVectors(t *testing.T) { verifyPnonce3, }, }, - // Vector 10. + // Vector 11. { partialSig: signExpected3, @@ -761,7 +773,19 @@ func TestMusig2PartialSigVerifyTestVectors(t *testing.T) { verifyPnonce1, }, }, - // Vector 11: Wrong signature (which is equal to the negation + // Vector 12: Both halves of aggregate nonce correspond to + // point at infinity. + { + + partialSig: signExpected4, + pubnonceIndex: 0, + keyOrder: []int{0, 1}, + nonces: [][66]byte{ + verifyPnonce1, + verifyPnonce4, + }, + }, + // Vector 13: Wrong signature (which is equal to the negation // of valid signature expected[0]). { @@ -1796,6 +1820,14 @@ func aggNonceToPubkey(combinedNonce [66]byte, combinedKey *AggregateKey, } +func mustNonceAgg(nonces [][66]byte) [66]byte { + aggNonce, err := AggregateNonces(nonces) + if err != nil { + panic("can't aggregate nonces") + } + return aggNonce +} + func memsetLoop(a []byte, v uint8) { for i := range a { a[i] = byte(v) From ef4a8d310b18953718fc99fc536aa39ecf4d8ab7 Mon Sep 17 00:00:00 2001 From: Victor Shyba Date: Wed, 7 Sep 2022 16:09:46 -0300 Subject: [PATCH 404/419] doc: fix Tor hidden service setup link --- docs/configuring_tor.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/configuring_tor.md b/docs/configuring_tor.md index ecb03bfc32..3225b9b541 100644 --- a/docs/configuring_tor.md +++ b/docs/configuring_tor.md @@ -49,7 +49,7 @@ proxy=127.0.0.1:9050 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. From 38ee9a41c8f8aa24a079a28f5e8a86faecffdfe1 Mon Sep 17 00:00:00 2001 From: Tochi Obudulu Date: Sat, 3 Sep 2022 13:54:18 +0100 Subject: [PATCH 405/419] build: bump golang base image version to 1.17 Image fails to build on 1.16 --- Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index ec45ee64c3..58e4b59aec 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,9 +19,9 @@ ARG ARCH=amd64 # 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.16-alpine3.12 -# sha256:db2475a1dbb2149508e5db31d7d77a75e6600d54be645f37681f03f2762169ba -FROM golang@sha256:db2475a1dbb2149508e5db31d7d77a75e6600d54be645f37681f03f2762169ba AS build-container +# ➜ ~ crane digest golang:1.17.13-alpine3.16 +# sha256:c80567372be0d486766593cc722d3401038e2f150a0f6c5c719caa63afb4026a +FROM golang@sha256:c80567372be0d486766593cc722d3401038e2f150a0f6c5c719caa63afb4026a AS build-container ARG ARCH ENV GO111MODULE=on From f523d4ccaa5f34a2f761f16a05f5d6e6665b1168 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Sun, 9 Oct 2022 17:03:31 -0700 Subject: [PATCH 406/419] wire: remove erroneous witness size check in wire parsing In this commit, we fix a bug that would cause nodes to be unable to parse a given block from the wire. The block would be properly accepted if fed in via other mechanisms. The issue here is that the old checks for the maximum witness size, circa segwit v0 where placed in the wire package _as well_ as the tx engine. This check should only be in the engine, since it's properly gated by other related scrip validation flags. The fix itself is simple: limit witnesses only based on the maximum block size in bytes, or ~4MB. --- blockchain/weight.go | 2 +- wire/msgtx.go | 30 ++++++++++++++++-------------- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/blockchain/weight.go b/blockchain/weight.go index 5a6f257be5..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/btcd/btcutil" ) const ( diff --git a/wire/msgtx.go b/wire/msgtx.go index 917a142e6e..c289cd7e0b 100644 --- a/wire/msgtx.go +++ b/wire/msgtx.go @@ -103,10 +103,9 @@ const ( maxWitnessItemsPerInput = 500000 // 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 ) // TxFlagMarker is the first byte of the FLAG field in a bitcoin tx @@ -114,16 +113,18 @@ const ( // 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 │ │ -// └─────────┴────────────────────┴─────────────┴─────┘ +// +// ┌─────────┬────────────────────┬─────────────┬─────┐ +// │ VERSION │ FLAG │ TX-IN-COUNT │ ... │ +// │ 4 bytes │ 2 bytes (optional) │ varint │ │ +// └─────────┴────────────────────┴─────────────┴─────┘ // // Zooming into the FLAG field: -// ┌── FLAG ─────────────┬────────┐ -// │ TxFlagMarker (0x00) │ TxFlag │ -// │ 1 byte │ 1 byte │ -// └─────────────────────┴────────┘ +// +// ┌── 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. @@ -586,8 +587,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 From 1a4af39ab02a1a4fb1f2a01e12fafccea82aa442 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Sun, 9 Oct 2022 18:22:27 -0700 Subject: [PATCH 407/419] build: bump version to v0.23.2 This includes the recent fix to the wire witness wire parsing bug. --- version.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.go b/version.go index 49a2cd68de..7d321c5fdd 100644 --- a/version.go +++ b/version.go @@ -18,7 +18,7 @@ const semanticAlphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr const ( appMajor uint = 0 appMinor uint = 23 - appPatch uint = 1 + appPatch uint = 2 // appPreRelease MUST only contain characters from semanticAlphabet // per the semantic versioning spec. From e563459b72df634ca5731ac6c93e9ffbfd36dd93 Mon Sep 17 00:00:00 2001 From: David Vennik Date: Sun, 18 Sep 2022 20:31:58 +0200 Subject: [PATCH 408/419] Fixed ban bug that doesn't print numTxns (cherry picked from commit 11c8d11a26d14a64fe6e412313624b6bfc5b4e2c) --- server.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server.go b/server.go index 5cef434292..5ef2e31942 100644 --- a/server.go +++ b/server.go @@ -1440,7 +1440,7 @@ func (sp *serverPeer) OnNotFound(p *peer.Peer, msg *wire.MsgNotFound) { } if numTxns > 0 { txStr := pickNoun(uint64(numTxns), "transaction", "transactions") - reason := fmt.Sprintf("%d %v not found", numBlocks, txStr) + reason := fmt.Sprintf("%d %v not found", numTxns, txStr) if sp.addBanScore(0, 10*numTxns, reason) { return } From a34e7779163e159a41774e26778a2abf788620c0 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Wed, 5 Oct 2022 20:05:29 -0700 Subject: [PATCH 409/419] btcec/schnorr/musig2: update musig2 impl to version 0.7.0 The two _concrete_ changes between version 0.4.0 (where we are before this commit), and version 0.7.0 are: 1. Variable length messages are now allowed, this comes with a new 8 byte prefix for the messages. * Our implementation was already using a `[]byte` for the message/hash, so no extra API changes are needed here. 2. The serialization for a blank message and a normal message (for nonce gen) is now distinct. A single byte is added (either 0 or 1) to indicate if a message was passed into nonce generation. --- btcec/schnorr/musig2/musig2_test.go | 6 ++--- btcec/schnorr/musig2/nonces.go | 40 ++++++++++++++++++++++++----- 2 files changed, 36 insertions(+), 10 deletions(-) diff --git a/btcec/schnorr/musig2/musig2_test.go b/btcec/schnorr/musig2/musig2_test.go index e58a6d4328..94bb0ec16b 100644 --- a/btcec/schnorr/musig2/musig2_test.go +++ b/btcec/schnorr/musig2/musig2_test.go @@ -1367,9 +1367,9 @@ func TestMusig2NonceGenTestVectors(t *testing.T) { auxInput: extra_in[:], msg: msg[:], }, - expectedNonce: "E8F2E103D86800F19A4E97338D371CB885DB2" + - "F19D08C0BD205BBA9B906C971D0D786A17718AAFAD6D" + - "E025DDDD99DC823E2DFC1AE1DDFE920888AD53FFF423FC4", + expectedNonce: "BC6C683EBBCC39DCB3C29B3D010D2AAA7C86C" + + "FB562FC41ED9A460EE061013E75FB4AD2F0B81671326" + + "9800D018803906D5481E00A940EAB4F4AC49B4A372EB0F4", }, { opts: nonceGenOpts{ diff --git a/btcec/schnorr/musig2/nonces.go b/btcec/schnorr/musig2/nonces.go index 66d2cb9c22..3866dc5438 100644 --- a/btcec/schnorr/musig2/nonces.go +++ b/btcec/schnorr/musig2/nonces.go @@ -191,6 +191,8 @@ func withCustomOptions(customOpts nonceGenOpts) NonceGenOption { // 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 @@ -205,6 +207,12 @@ 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. @@ -225,10 +233,12 @@ func writeBytesPrefix(w io.Writer, b []byte, lenWriter lengthWriter) error { // 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 || len(m) -// || m || len(in) || in || i). +// - tagged_hash("MuSig/nonce", rand || len(aggpk) || aggpk || m_prefixed +// || len(in) || in || i). // -// where i is the ith secret nonce being generated. +// 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) { @@ -245,10 +255,26 @@ func genNonceAuxBytes(rand []byte, i int, return nil, err } - // Next, we'll write out the length prefixed message. - err = writeBytesPrefix(&w, opts.msg, uint8Writer) - if err != nil { - return nil, err + switch len(opts.msg) { + // 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 0: + 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. + 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. From 1567f200557d22b81f0b5cdcf0a9986cb83445b2 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Wed, 5 Oct 2022 21:06:50 -0700 Subject: [PATCH 410/419] btcec/schnorr/musig2: update to musig 1.0.0 The major change in musig 1.0.0 is that plain public keys are used as input to key aggregation. --- btcec/schnorr/musig2/context.go | 8 ++----- btcec/schnorr/musig2/keys.go | 31 +++++++++++-------------- btcec/schnorr/musig2/musig2_test.go | 7 +----- btcec/schnorr/musig2/nonces.go | 2 +- btcec/schnorr/musig2/sign.go | 36 +++++++++-------------------- 5 files changed, 29 insertions(+), 55 deletions(-) diff --git a/btcec/schnorr/musig2/context.go b/btcec/schnorr/musig2/context.go index 19cef34fa9..adbedb8bf3 100644 --- a/btcec/schnorr/musig2/context.go +++ b/btcec/schnorr/musig2/context.go @@ -206,12 +206,7 @@ func NewContext(signingKey *btcec.PrivateKey, shouldSort bool, option(opts) } - pubKey, err := schnorr.ParsePubKey( - schnorr.SerializePubKey(signingKey.PubKey()), - ) - if err != nil { - return nil, err - } + pubKey := signingKey.PubKey() ctx := &Context{ signingKey: signingKey, @@ -243,6 +238,7 @@ func NewContext(signingKey *btcec.PrivateKey, shouldSort bool, // 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() if err != nil { return nil, err diff --git a/btcec/schnorr/musig2/keys.go b/btcec/schnorr/musig2/keys.go index 8c86c624fb..7e84ba57e9 100644 --- a/btcec/schnorr/musig2/keys.go +++ b/btcec/schnorr/musig2/keys.go @@ -40,8 +40,8 @@ type sortableKeys []*btcec.PublicKey // with index j. func (s sortableKeys) Less(i, j int) bool { // TODO(roasbeef): more efficient way to compare... - keyIBytes := schnorr.SerializePubKey(s[i]) - keyJBytes := schnorr.SerializePubKey(s[j]) + keyIBytes := s[i].SerializeCompressed() + keyJBytes := s[j].SerializeCompressed() return bytes.Compare(keyIBytes, keyJBytes) == -1 } @@ -56,9 +56,9 @@ func (s sortableKeys) Len() int { return len(s) } -// sortKeys takes a set of schnorr 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. +// 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) { @@ -72,7 +72,7 @@ func sortKeys(keys []*btcec.PublicKey) []*btcec.PublicKey { // 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..) +// - H(tag=KeyAgg list, pk1 || pk2..) func keyHashFingerprint(keys []*btcec.PublicKey, sort bool) []byte { if sort { keys = sortKeys(keys) @@ -80,28 +80,25 @@ func keyHashFingerprint(keys []*btcec.PublicKey, sort bool) []byte { // 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, 32*len(keys)) + keyAggBuf := make([]byte, 33*len(keys)) keyBytes := bytes.NewBuffer(keyAggBuf[0:0]) for _, key := range keys { - keyBytes.Write(schnorr.SerializePubKey(key)) + keyBytes.Write(key.SerializeCompressed()) } h := chainhash.TaggedHash(KeyAggTagList, keyBytes.Bytes()) return h[:] } -// keyBytesEqual returns true if two keys are the same from the PoV of BIP -// 340's 32-byte x-only public keys. +// 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( - schnorr.SerializePubKey(a), - schnorr.SerializePubKey(b), - ) + 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) +// - H(tag=KeyAgg coefficient, keyHashFingerprint(pks) || pk) func aggregationCoefficient(keySet []*btcec.PublicKey, targetKey *btcec.PublicKey, keysHash []byte, secondKeyIdx int) *btcec.ModNScalar { @@ -116,9 +113,9 @@ func aggregationCoefficient(keySet []*btcec.PublicKey, // 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 [64]byte + var coefficientBytes [65]byte copy(coefficientBytes[:], keysHash[:]) - copy(coefficientBytes[32:], schnorr.SerializePubKey(targetKey)) + copy(coefficientBytes[32:], targetKey.SerializeCompressed()) muHash := chainhash.TaggedHash(KeyAggTagCoeff, coefficientBytes[:]) diff --git a/btcec/schnorr/musig2/musig2_test.go b/btcec/schnorr/musig2/musig2_test.go index 94bb0ec16b..8ab1725c7b 100644 --- a/btcec/schnorr/musig2/musig2_test.go +++ b/btcec/schnorr/musig2/musig2_test.go @@ -993,12 +993,7 @@ func testMultiPartySign(t *testing.T, taprootTweak []byte, 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) - } + pubKey := privKey.PubKey() signerKeys[i] = privKey signSet[i] = pubKey diff --git a/btcec/schnorr/musig2/nonces.go b/btcec/schnorr/musig2/nonces.go index 3866dc5438..201ff49db6 100644 --- a/btcec/schnorr/musig2/nonces.go +++ b/btcec/schnorr/musig2/nonces.go @@ -184,8 +184,8 @@ func withCustomOptions(customOpts nonceGenOpts) NonceGenOption { o.randReader = customOpts.randReader o.secretKey = customOpts.secretKey o.combinedKey = customOpts.combinedKey - o.msg = customOpts.msg o.auxInput = customOpts.auxInput + o.msg = customOpts.msg } } diff --git a/btcec/schnorr/musig2/sign.go b/btcec/schnorr/musig2/sign.go index fce61aa8a8..0b8130a1a5 100644 --- a/btcec/schnorr/musig2/sign.go +++ b/btcec/schnorr/musig2/sign.go @@ -299,31 +299,22 @@ func Sign(secNonce [SecNonceSize]byte, privKey *btcec.PrivateKey, } pubKey := privKey.PubKey() - pubKeyYIsOdd := func() bool { - pubKeyBytes := pubKey.SerializeCompressed() - return pubKeyBytes[0] == secp.PubKeyFormatCompressedOdd - }() combinedKeyYIsOdd := func() bool { combinedKeyBytes := combinedKey.FinalKey.SerializeCompressed() return combinedKeyBytes[0] == secp.PubKeyFormatCompressedOdd }() - // Next we'll compute our two parity factors for Q the combined public - // key, and P, the public key we're signing with. If the keys are odd, - // then we'll negate them. + // 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) - paritySignKey := new(btcec.ModNScalar).SetInt(1) if combinedKeyYIsOdd { parityCombinedKey.Negate() } - if pubKeyYIsOdd { - paritySignKey.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 = gv⋅gaccv⋅gp⋅d' - privKeyScalar.Mul(parityCombinedKey).Mul(paritySignKey).Mul(parityAcc) + // * 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: @@ -372,7 +363,7 @@ func (p *PartialSignature) Verify(pubNonce [PubNonceSize]byte, combinedNonce [PubNonceSize]byte, keySet []*btcec.PublicKey, signingKey *btcec.PublicKey, msg [32]byte, signOpts ...SignOption) bool { - pubKey := schnorr.SerializePubKey(signingKey) + pubKey := signingKey.SerializeCompressed() return verifyPartialSig( p, pubNonce, combinedNonce, keySet, pubKey, msg, signOpts..., @@ -398,7 +389,6 @@ func verifyPartialSig(partialSig *PartialSignature, pubNonce [PubNonceSize]byte, // 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) @@ -458,7 +448,6 @@ func verifyPartialSig(partialSig *PartialSignature, pubNonce [PubNonceSize]byte, // 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) @@ -516,7 +505,7 @@ func verifyPartialSig(partialSig *PartialSignature, pubNonce [PubNonceSize]byte, var e btcec.ModNScalar e.SetByteSlice(challengeBytes[:]) - signingKey, err := schnorr.ParsePubKey(pubKey) + signingKey, err := btcec.ParsePubKey(pubKey) if err != nil { return err } @@ -527,27 +516,24 @@ func verifyPartialSig(partialSig *PartialSignature, pubNonce [PubNonceSize]byte, // If the combined key has an odd y coordinate, then we'll negate // parity factor for the signing key. - paritySignKey := new(btcec.ModNScalar).SetInt(1) + parityCombinedKey := new(btcec.ModNScalar).SetInt(1) combinedKeyBytes := combinedKey.FinalKey.SerializeCompressed() if combinedKeyBytes[0] == secp.PubKeyFormatCompressedOdd { - paritySignKey.Negate() + 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 := paritySignKey.Mul(parityAcc) + finalParityFactor := parityCombinedKey.Mul(parityAcc) - // Now we'll multiply the parity factor by our signing key, which'll - // take care of the amount of negation needed. var signKeyJ btcec.JacobianPoint signingKey.AsJacobian(&signKeyJ) - btcec.ScalarMultNonConst(finalParityFactor, &signKeyJ, &signKeyJ) - // In the final set, we'll check that: s*G == R' + e*a*P. + // 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), &signKeyJ, &rP) + btcec.ScalarMultNonConst(e.Mul(a).Mul(finalParityFactor), &signKeyJ, &rP) btcec.AddNonConst(&rP, &pubNonceJ, &rP) sG.ToAffine() From 3d9f4484dfd6d01d07cffa90498f7595467cc190 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Tue, 11 Oct 2022 15:29:24 -0700 Subject: [PATCH 411/419] btcec/schnorr/musig: update nonce test vectors to musig2 1.0.0 --- btcec/go.mod | 7 +- btcec/go.sum | 13 ++ .../musig2/data/nonce_agg_vectors.json | 54 +++++ .../musig2/data/nonce_gen_vectors.json | 36 +++ btcec/schnorr/musig2/musig2_test.go | 206 +----------------- btcec/schnorr/musig2/nonces.go | 6 +- btcec/schnorr/musig2/nonces_test.go | 164 ++++++++++++++ 7 files changed, 279 insertions(+), 207 deletions(-) create mode 100644 btcec/schnorr/musig2/data/nonce_agg_vectors.json create mode 100644 btcec/schnorr/musig2/data/nonce_gen_vectors.json create mode 100644 btcec/schnorr/musig2/nonces_test.go diff --git a/btcec/go.mod b/btcec/go.mod index 8c7cc1d63c..452399cfc6 100644 --- a/btcec/go.mod +++ b/btcec/go.mod @@ -6,6 +6,11 @@ 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 +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 index 0004a783bb..73b8f2b5ac 100644 --- a/btcec/go.sum +++ b/btcec/go.sum @@ -1,8 +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/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/musig2_test.go b/btcec/schnorr/musig2/musig2_test.go index 8ab1725c7b..1b4a68fd55 100644 --- a/btcec/schnorr/musig2/musig2_test.go +++ b/btcec/schnorr/musig2/musig2_test.go @@ -46,6 +46,8 @@ var ( "B65481B6BAAFB3C5810106717BEB") keyCombo4, _ = hex.DecodeString("2EB18851887E7BDC5E830E89B19DDBC28078" + "F1FA88AAD0AD01CA06FE4F80210B") + + testVectorBaseDir = "data" ) // getInfinityTweak returns a tweak that, when tweaking the Generator, triggers @@ -1340,210 +1342,6 @@ func TestMuSigEarlyNonce(t *testing.T) { } } -// TestMusig2NonceGenTestVectors tests the nonce generation function with -// the testvectors defined in the Musig2 BIP. -func TestMusig2NonceGenTestVectors(t *testing.T) { - t.Parallel() - - msg := bytes.Repeat([]byte{0x01}, 32) - sk := bytes.Repeat([]byte{0x02}, 32) - aggpk := bytes.Repeat([]byte{0x07}, 32) - extra_in := bytes.Repeat([]byte{0x08}, 32) - - testCases := []struct { - opts nonceGenOpts - expectedNonce string - }{ - { - opts: nonceGenOpts{ - randReader: &memsetRandReader{i: 0}, - secretKey: sk[:], - combinedKey: aggpk[:], - auxInput: extra_in[:], - msg: msg[:], - }, - expectedNonce: "BC6C683EBBCC39DCB3C29B3D010D2AAA7C86C" + - "FB562FC41ED9A460EE061013E75FB4AD2F0B81671326" + - "9800D018803906D5481E00A940EAB4F4AC49B4A372EB0F4", - }, - { - opts: nonceGenOpts{ - randReader: &memsetRandReader{i: 0}, - secretKey: sk[:], - combinedKey: aggpk[:], - auxInput: extra_in[:], - msg: nil, - }, - expectedNonce: "8A633F5EECBDB690A6BE4921426F41BE78D50" + - "9DC1CE894C1215844C0E4C6DE7ABC9A5BE0A3BF3FE31" + - "2CCB7E4817D2CB17A7CEA8382B73A99A583E323387B3C32", - }, - { - opts: nonceGenOpts{ - randReader: &memsetRandReader{i: 0}, - secretKey: nil, - combinedKey: nil, - auxInput: nil, - msg: nil, - }, - expectedNonce: "7B3B5A002356471AF0E961DE2549C121BD0D4" + - "8ABCEEDC6E034BDDF86AD3E0A187ECEE674CEF7364B0" + - "BC4BEEFB8B66CAD89F98DE2F8C5A5EAD5D1D1E4BD7D04CD", - }, - } - - for _, testCase := range testCases { - nonce, err := GenNonces(withCustomOptions(testCase.opts)) - if err != nil { - t.Fatalf("err gen nonce aux bytes %v", err) - } - - expectedBytes, _ := hex.DecodeString(testCase.expectedNonce) - if !bytes.Equal(nonce.SecNonce[:], expectedBytes) { - - t.Fatalf("nonces don't match: expected %x, got %x", - expectedBytes, nonce.SecNonce[:]) - } - } - -} - -var ( - pNonce1, _ = hex.DecodeString("020151C80F435648DF67A22B749CD798CE54E0321D034B92B709B567D60A42E666" + - "03BA47FBC1834437B3212E89A84D8425E7BF12E0245D98262268EBDCB385D50641") - pNonce2, _ = hex.DecodeString("03FF406FFD8ADB9CD29877E4985014F66A59F6CD01C0E88CAA8E5F3166B1F676A6" + - "0248C264CDD57D3C24D79990B0F865674EB62A0F9018277A95011B41BFC193B833") - - expectedNonce, _ = hex.DecodeString("035FE1873B4F2967F52FEA4A06AD5A8ECCBE9D0FD73068012C894E2E87CCB5804B" + - "024725377345BDE0E9C33AF3C43C0A29A9249F2F2956FA8CFEB55C8573D0262DC8") - - invalidNonce1, _ = hex.DecodeString("04FF406FFD8ADB9CD29877E4985014F66A59F6CD01C0E88CAA8E5F3166B1F676A6" + "0248C264CDD57D3C24D79990B0F865674EB62A0F9018277A95011B41BFC193B833") - invalidNonce2, _ = hex.DecodeString("03FF406FFD8ADB9CD29877E4985014F66A59F6CD01C0E88CAA8E5F3166B1F676A6" + "0248C264CDD57D3C24D79990B0F865674EB62A0F9018277A95011B41BFC193B831") - invalidNonce3, _ = hex.DecodeString("03FF406FFD8ADB9CD29877E4985014F66A59F6CD01C0E88CAA8E5F3166B1F676A6" + "02FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC30") -) - -type jsonNonceAggTestCase struct { - Nonces []string `json:"nonces"` - ExpectedNonce string `json:"expected_key"` - ExpectedError string `json:"expected_error"` -} - -func TestMusig2AggregateNoncesTestVectors(t *testing.T) { - t.Parallel() - - var jsonCases []jsonNonceAggTestCase - - testCases := []struct { - nonces [][]byte - expectedNonce []byte - expectedError error - }{ - // Vector 1: Valid. - { - nonces: [][]byte{pNonce1, pNonce2}, - expectedNonce: expectedNonce, - }, - - // Vector 2: Public nonce from signer 1 is invalid due wrong - // tag, 0x04, inthe first half. - { - nonces: [][]byte{pNonce1, invalidNonce1}, - expectedError: secp256k1.ErrPubKeyInvalidFormat, - }, - - // Vector 3: Public nonce from signer 0 is invalid because the - // second half does not correspond to an X coordinate. - { - nonces: [][]byte{invalidNonce2, pNonce2}, - expectedError: secp256k1.ErrPubKeyNotOnCurve, - }, - - // Vector 4: Public nonce from signer 0 is invalid because - // second half exceeds field size. - { - nonces: [][]byte{invalidNonce3, pNonce2}, - expectedError: secp256k1.ErrPubKeyXTooBig, - }, - - // Vector 5: Sum of second points encoded in the nonces would - // be point at infinity, therefore set sum to base point G. - { - nonces: [][]byte{ - append( - append([]byte{}, pNonce1[0:33]...), - getGBytes()..., - ), - append( - append([]byte{}, pNonce2[0:33]...), - getNegGBytes()..., - ), - }, - expectedNonce: append( - append([]byte{}, expectedNonce[0:33]...), - getInfinityBytes()..., - ), - }, - } - for i, testCase := range testCases { - testName := fmt.Sprintf("Vector %v", i+1) - t.Run(testName, func(t *testing.T) { - var ( - nonces [][66]byte - strNonces []string - jsonError string - ) - for _, nonce := range testCase.nonces { - nonces = append(nonces, toPubNonceSlice(nonce)) - strNonces = append(strNonces, hex.EncodeToString(nonce)) - } - - if testCase.expectedError != nil { - jsonError = testCase.expectedError.Error() - } - - jsonCases = append(jsonCases, jsonNonceAggTestCase{ - Nonces: strNonces, - ExpectedNonce: hex.EncodeToString(expectedNonce), - ExpectedError: jsonError, - }) - - aggregatedNonce, err := AggregateNonces(nonces) - - switch { - case testCase.expectedError != nil && - errors.Is(err, testCase.expectedError): - - return - case err != nil: - t.Fatalf("aggregating nonce error: %v", err) - } - - if !bytes.Equal(testCase.expectedNonce, aggregatedNonce[:]) { - t.Fatalf("case: #%v, invalid nonce aggregation: "+ - "expected %x, got %x", i, testCase.expectedNonce, - aggregatedNonce) - } - - }) - } - - if *dumpJson { - jsonBytes, err := json.Marshal(jsonCases) - if err != nil { - t.Fatalf("unable to encode json: %v", err) - } - - var formattedJson bytes.Buffer - json.Indent(&formattedJson, jsonBytes, "", "\t") - err = ioutil.WriteFile( - nonceAggTestVectorName, formattedJson.Bytes(), 0644, - ) - if err != nil { - t.Fatalf("unable to write file: %v", err) - } - } -} - type memsetRandReader struct { i int } diff --git a/btcec/schnorr/musig2/nonces.go b/btcec/schnorr/musig2/nonces.go index 201ff49db6..4b2509a754 100644 --- a/btcec/schnorr/musig2/nonces.go +++ b/btcec/schnorr/musig2/nonces.go @@ -255,10 +255,10 @@ func genNonceAuxBytes(rand []byte, i int, return nil, err } - switch len(opts.msg) { + 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 0: + case opts.msg == nil: if _, err := w.Write([]byte{0x00}); err != nil { return nil, err } @@ -266,6 +266,8 @@ func genNonceAuxBytes(rand []byte, i int, // 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 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()) + }) + } +} From 4e55273815ee5d33969fc371742dc0e43cd30bd5 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Wed, 19 Oct 2022 19:07:21 -0700 Subject: [PATCH 412/419] btcec/schnorr/musig2: update key agg test vectors to musig2 1.0.0 --- .../schnorr/musig2/data/key_agg_vectors.json | 88 ++++++ .../schnorr/musig2/data/key_sort_vectors.json | 16 ++ btcec/schnorr/musig2/keys_test.go | 257 ++++++++++++++++++ btcec/schnorr/musig2/musig2_test.go | 186 ------------- 4 files changed, 361 insertions(+), 186 deletions(-) create mode 100644 btcec/schnorr/musig2/data/key_agg_vectors.json create mode 100644 btcec/schnorr/musig2/data/key_sort_vectors.json create mode 100644 btcec/schnorr/musig2/keys_test.go 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/keys_test.go b/btcec/schnorr/musig2/keys_test.go new file mode 100644 index 0000000000..f9a6e05665 --- /dev/null +++ b/btcec/schnorr/musig2/keys_test.go @@ -0,0 +1,257 @@ +// Copyright 2013-2022 The btcsuite developers + +package musig2 + +import ( + "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" +) + +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, + } + } + + 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) + } + }) + } +} diff --git a/btcec/schnorr/musig2/musig2_test.go b/btcec/schnorr/musig2/musig2_test.go index 1b4a68fd55..501ef41a38 100644 --- a/btcec/schnorr/musig2/musig2_test.go +++ b/btcec/schnorr/musig2/musig2_test.go @@ -75,198 +75,12 @@ func getInfinityTweak() KeyTweakDesc { } const ( - keyAggTestVectorName = "key_agg_vectors.json" - - nonceAggTestVectorName = "nonce_agg_vectors.json" - signTestVectorName = "sign_vectors.json" ) var dumpJson = flag.Bool("dumpjson", false, "if true, a JSON version of the "+ "test vectors will be written to the cwd") -type jsonKeyAggTestCase struct { - Keys []string `json:"keys"` - Tweaks []jsonTweak `json:"tweaks"` - ExpectedKey string `json:"expected_key"` - ExpectedError string `json:"expected_error"` -} - -// TestMuSig2KeyAggTestVectors tests that this implementation of musig2 key -// aggregation lines up with the secp256k1-zkp test vectors. -func TestMuSig2KeyAggTestVectors(t *testing.T) { - t.Parallel() - - var jsonCases []jsonKeyAggTestCase - - testCases := []struct { - keyOrder []int - explicitKeys []*btcec.PublicKey - tweaks []KeyTweakDesc - expectedKey []byte - expectedError error - }{ - // Keys in backwards lexicographical order. - { - keyOrder: []int{0, 1, 2}, - expectedKey: keyCombo1, - }, - - // Keys in sorted order. - { - keyOrder: []int{2, 1, 0}, - expectedKey: keyCombo2, - }, - - // Only the first key. - { - keyOrder: []int{0, 0, 0}, - expectedKey: keyCombo3, - }, - - // Duplicate the first key and second keys. - { - keyOrder: []int{0, 0, 1, 1}, - expectedKey: keyCombo4, - }, - - // Invalid public key. - { - keyOrder: []int{0, 3}, - expectedError: secp256k1.ErrPubKeyNotOnCurve, - }, - - // Public key exceeds field size. - { - keyOrder: []int{0, 4}, - expectedError: secp256k1.ErrPubKeyXTooBig, - }, - - // Tweak is out of range. - { - keyOrder: []int{0, 1}, - tweaks: []KeyTweakDesc{ - KeyTweakDesc{ - Tweak: to32ByteSlice(invalidTweak), - IsXOnly: true, - }, - }, - expectedError: ErrTweakedKeyOverflows, - }, - - // Intermediate tweaking result is point at infinity. - { - explicitKeys: []*secp256k1.PublicKey{btcec.Generator()}, - tweaks: []KeyTweakDesc{ - getInfinityTweak(), - }, - expectedError: ErrTweakedKeyIsInfinity, - }, - } - for i, testCase := range testCases { - testName := fmt.Sprintf("%v", testCase.keyOrder) - t.Run(testName, func(t *testing.T) { - var ( - keys []*btcec.PublicKey - strKeys []string - strTweaks []jsonTweak - jsonError string - ) - for _, keyIndex := range testCase.keyOrder { - keyBytes := testKeys[keyIndex] - pub, err := schnorr.ParsePubKey(keyBytes) - - switch { - case testCase.expectedError != nil && - errors.Is(err, testCase.expectedError): - return - case err != nil: - t.Fatalf("unable to parse pubkeys: %v", err) - } - - keys = append(keys, pub) - strKeys = append(strKeys, hex.EncodeToString(keyBytes)) - } - - for _, explicitKey := range testCase.explicitKeys { - keys = append(keys, explicitKey) - strKeys = append( - strKeys, - hex.EncodeToString( - explicitKey.SerializeCompressed(), - )) - } - - for _, tweak := range testCase.tweaks { - strTweaks = append( - strTweaks, - jsonTweak{ - Tweak: hex.EncodeToString( - tweak.Tweak[:], - ), - XOnly: tweak.IsXOnly, - }) - } - - if testCase.expectedError != nil { - jsonError = testCase.expectedError.Error() - } - - jsonCases = append( - jsonCases, - jsonKeyAggTestCase{ - Keys: strKeys, - Tweaks: strTweaks, - ExpectedKey: hex.EncodeToString( - testCase.expectedKey), - ExpectedError: jsonError, - }) - - uniqueKeyIndex := secondUniqueKeyIndex(keys, false) - opts := []KeyAggOption{WithUniqueKeyIndex(uniqueKeyIndex)} - if len(testCase.tweaks) > 0 { - opts = append(opts, WithKeyTweaks(testCase.tweaks...)) - } - - combinedKey, _, _, err := AggregateKeys( - keys, false, opts..., - ) - - switch { - case testCase.expectedError != nil && - errors.Is(err, testCase.expectedError): - return - - case err != nil: - t.Fatalf("case #%v, got error %v", i, err) - } - - combinedKeyBytes := schnorr.SerializePubKey(combinedKey.FinalKey) - if !bytes.Equal(combinedKeyBytes, testCase.expectedKey) { - t.Fatalf("case: #%v, invalid aggregation: "+ - "expected %x, got %x", i, testCase.expectedKey, - combinedKeyBytes) - } - }) - } - - if *dumpJson { - jsonBytes, err := json.Marshal(jsonCases) - if err != nil { - t.Fatalf("unable to encode json: %v", err) - } - - var formattedJson bytes.Buffer - json.Indent(&formattedJson, jsonBytes, "", "\t") - err = ioutil.WriteFile( - keyAggTestVectorName, formattedJson.Bytes(), 0644, - ) - if err != nil { - t.Fatalf("unable to write file: %v", err) - } - } -} - func mustParseHex(str string) []byte { b, err := hex.DecodeString(str) if err != nil { From cc12483f0aae6d8f5e08bac15ceb8309b6589c8c Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Wed, 19 Oct 2022 20:15:16 -0700 Subject: [PATCH 413/419] btcec/schnorr/musig2: add key tweak sign test vectors --- btcec/schnorr/musig2/data/tweak_vectors.json | 84 +++++++++++ btcec/schnorr/musig2/keys.go | 2 +- btcec/schnorr/musig2/keys_test.go | 139 ++++++++++++++++++- 3 files changed, 222 insertions(+), 3 deletions(-) create mode 100644 btcec/schnorr/musig2/data/tweak_vectors.json 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 index 7e84ba57e9..4ee63be2eb 100644 --- a/btcec/schnorr/musig2/keys.go +++ b/btcec/schnorr/musig2/keys.go @@ -29,7 +29,7 @@ var ( // ErrTweakedKeyOverflows is returned if a tweaking key is larger than // 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141. - ErrTweakedKeyOverflows = fmt.Errorf("tweaked key is to large") + ErrTweakedKeyOverflows = fmt.Errorf("tweaked key is too large") ) // sortableKeys defines a type of slice of public keys that implements the sort diff --git a/btcec/schnorr/musig2/keys_test.go b/btcec/schnorr/musig2/keys_test.go index f9a6e05665..941ab14c7a 100644 --- a/btcec/schnorr/musig2/keys_test.go +++ b/btcec/schnorr/musig2/keys_test.go @@ -3,6 +3,7 @@ package musig2 import ( + "encoding/hex" "encoding/json" "fmt" "os" @@ -20,6 +21,8 @@ const ( keySortTestVectorFileName = "key_sort_vectors.json" keyAggTestVectorFileName = "key_agg_vectors.json" + + keyTweakTestVectorFileName = "tweak_vectors.json" ) type keySortTestVector struct { @@ -114,7 +117,7 @@ func keysFromIndices(t *testing.T, indices []int, } func tweaksFromIndices(t *testing.T, indices []int, - tweaks []string, isXonly bool) []KeyTweakDesc { + tweaks []string, isXonly []bool) []KeyTweakDesc { t.Helper() @@ -125,7 +128,7 @@ func tweaksFromIndices(t *testing.T, indices []int, testTweaks[i] = KeyTweakDesc{ Tweak: rawTweak, - IsXOnly: isXonly, + IsXOnly: isXonly[i], } } @@ -255,3 +258,135 @@ func TestMuSig2KeyAggTestVectors(t *testing.T) { }) } } + +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 { + 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)), + ) + + }) + } +} From ca28a98425aca171343ab6cb525ac3dbdf0bb397 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Thu, 20 Oct 2022 16:35:05 -0700 Subject: [PATCH 414/419] btcec/schnorr/musig2: add sig verify+sign test vectors --- .../musig2/data/sign_verify_vectors.json | 183 ++++++++++++ btcec/schnorr/musig2/keys_test.go | 2 + btcec/schnorr/musig2/sign_test.go | 267 ++++++++++++++++++ 3 files changed, 452 insertions(+) create mode 100644 btcec/schnorr/musig2/data/sign_verify_vectors.json create mode 100644 btcec/schnorr/musig2/sign_test.go 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/keys_test.go b/btcec/schnorr/musig2/keys_test.go index 941ab14c7a..9eb16b537f 100644 --- a/btcec/schnorr/musig2/keys_test.go +++ b/btcec/schnorr/musig2/keys_test.go @@ -346,6 +346,8 @@ func TestMuSig2TweakTestVectors(t *testing.T) { 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) { diff --git a/btcec/schnorr/musig2/sign_test.go b/btcec/schnorr/musig2/sign_test.go new file mode 100644 index 0000000000..07caad9c6e --- /dev/null +++ b/btcec/schnorr/musig2/sign_test.go @@ -0,0 +1,267 @@ +// 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" +) + +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) + } + }) + } + +} From 5d895bbea5fa186712f61c4cbcbfdccd6de1cda8 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Thu, 20 Oct 2022 17:54:22 -0700 Subject: [PATCH 415/419] btcec/schnorr/musig2: add sig combine test vectors --- .../schnorr/musig2/data/sig_agg_vectors.json | 86 ++++++++++++ btcec/schnorr/musig2/sign.go | 96 ++++++++------ btcec/schnorr/musig2/sign_test.go | 124 ++++++++++++++++++ 3 files changed, 268 insertions(+), 38 deletions(-) create mode 100644 btcec/schnorr/musig2/data/sig_agg_vectors.json 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/sign.go b/btcec/schnorr/musig2/sign.go index 0b8130a1a5..2028571137 100644 --- a/btcec/schnorr/musig2/sign.go +++ b/btcec/schnorr/musig2/sign.go @@ -186,6 +186,58 @@ func WithBip86SignTweak() SignOption { } } +// 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 @@ -230,48 +282,16 @@ func Sign(secNonce [SecNonceSize]byte, privKey *btcec.PrivateKey, return nil, 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[:]) - - // Next, we'll parse the public nonces into R1 and R2. - r1J, err := btcec.ParseJacobian( - combinedNonce[:btcec.PubKeyBytesLenCompressed], - ) - if err != nil { - return nil, err - } - r2J, err := btcec.ParseJacobian( - combinedNonce[btcec.PubKeyBytesLenCompressed:], + // 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 } - // 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 it eh point at infinity, then we'll bail out. - if nonce == infinityPoint { - G := btcec.Generator() - G.AsJacobian(&nonce) - } - // 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 @@ -336,7 +356,7 @@ func Sign(secNonce [SecNonceSize]byte, privKey *btcec.PrivateKey, // 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)) + s.Add(&k1).Add(k2.Mul(nonceBlinder)).Add(e.Mul(a).Mul(&privKeyScalar)) sig := NewPartialSignature(s, nonceKey) diff --git a/btcec/schnorr/musig2/sign_test.go b/btcec/schnorr/musig2/sign_test.go index 07caad9c6e..a7f5d79d5d 100644 --- a/btcec/schnorr/musig2/sign_test.go +++ b/btcec/schnorr/musig2/sign_test.go @@ -19,6 +19,8 @@ import ( const ( signVerifyTestVectorFileName = "sign_verify_vectors.json" + + sigCombineTestVectorFileName = "sig_agg_vectors.json" ) type signVerifyValidCase struct { @@ -265,3 +267,125 @@ func TestMusig2SignVerify(t *testing.T) { } } + +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()), + ) + }) + } +} From 323871ff16408b4cb03c3f43faa3daa57541ee24 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Thu, 20 Oct 2022 17:54:49 -0700 Subject: [PATCH 416/419] btcec/musig2: remove old canned test vector code --- btcec/schnorr/musig2/musig2_test.go | 1060 +-------------------------- 1 file changed, 1 insertion(+), 1059 deletions(-) diff --git a/btcec/schnorr/musig2/musig2_test.go b/btcec/schnorr/musig2/musig2_test.go index 501ef41a38..6842e911d9 100644 --- a/btcec/schnorr/musig2/musig2_test.go +++ b/btcec/schnorr/musig2/musig2_test.go @@ -3,84 +3,20 @@ package musig2 import ( - "bytes" "crypto/sha256" "encoding/hex" - "encoding/json" "errors" - "flag" "fmt" - "io/ioutil" "sync" "testing" "github.com/btcsuite/btcd/btcec/v2" - "github.com/btcsuite/btcd/btcec/v2/schnorr" - "github.com/btcsuite/btcd/chaincfg/chainhash" - "github.com/decred/dcrd/dcrec/secp256k1/v4" ) -var ( - key1Bytes, _ = hex.DecodeString("F9308A019258C31049344F85F89D5229B53" + - "1C845836F99B08601F113BCE036F9") - key2Bytes, _ = hex.DecodeString("DFF1D77F2A671C5F36183726DB2341BE58F" + - "EAE1DA2DECED843240F7B502BA659") - key3Bytes, _ = hex.DecodeString("3590A94E768F8E1815C2F24B4D80A8E3149" + - "316C3518CE7B7AD338368D038CA66") - - invalidPk1, _ = hex.DecodeString("00000000000000000000000000000000" + - "00000000000000000000000000000005") - invalidPk2, _ = hex.DecodeString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + - "FFFFFFFFFFFFFFFFFFFFFFFEFFFFFC30") - invalidTweak, _ = hex.DecodeString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE" + - "BAAEDCE6AF48A03BBFD25E8CD0364141") - - testKeys = [][]byte{key1Bytes, key2Bytes, key3Bytes, invalidPk1, - invalidPk2} - - keyCombo1, _ = hex.DecodeString("E5830140512195D74C8307E39637CBE5FB73" + - "0EBEAB80EC514CF88A877CEEEE0B") - keyCombo2, _ = hex.DecodeString("D70CD69A2647F7390973DF48CBFA2CCC407B" + - "8B2D60B08C5F1641185C7998A290") - keyCombo3, _ = hex.DecodeString("81A8B093912C9E481408D09776CEFB48AEB8" + - "B65481B6BAAFB3C5810106717BEB") - keyCombo4, _ = hex.DecodeString("2EB18851887E7BDC5E830E89B19DDBC28078" + - "F1FA88AAD0AD01CA06FE4F80210B") - - testVectorBaseDir = "data" -) - -// getInfinityTweak returns a tweak that, when tweaking the Generator, triggers -// the ErrTweakedKeyIsInfinity error. -func getInfinityTweak() KeyTweakDesc { - generator := btcec.Generator() - - keySet := []*btcec.PublicKey{generator} - - keysHash := keyHashFingerprint(keySet, true) - uniqueKeyIndex := secondUniqueKeyIndex(keySet, true) - - n := &btcec.ModNScalar{} - - n.SetByteSlice(invalidTweak) - - coeff := aggregationCoefficient( - keySet, generator, keysHash, uniqueKeyIndex, - ).Negate().Add(n) - - return KeyTweakDesc{ - Tweak: coeff.Bytes(), - IsXOnly: false, - } -} - const ( - signTestVectorName = "sign_vectors.json" + testVectorBaseDir = "data" ) -var dumpJson = flag.Bool("dumpjson", false, "if true, a JSON version of the "+ - "test vectors will be written to the cwd") - func mustParseHex(str string) []byte { b, err := hex.DecodeString(str) if err != nil { @@ -90,664 +26,6 @@ func mustParseHex(str string) []byte { return b } -func parseKey(xHex string) *btcec.PublicKey { - xB, err := hex.DecodeString(xHex) - if err != nil { - panic(err) - } - - var x, y btcec.FieldVal - x.SetByteSlice(xB) - if !btcec.DecompressY(&x, false, &y) { - panic("x not on curve") - } - y.Normalize() - - return btcec.NewPublicKey(&x, &y) -} - -var ( - signSetPrivKey, _ = btcec.PrivKeyFromBytes( - mustParseHex("7FB9E0E687ADA1EEBF7ECFE2F21E73EBDB51A7D450948DF" + - "E8D76D7F2D1007671"), - ) - signSetPubKey = schnorr.SerializePubKey(signSetPrivKey.PubKey()) - - signTestMsg = mustParseHex("F95466D086770E689964664219266FE5ED215C92A" + - "E20BAB5C9D79ADDDDF3C0CF") - - signSetKey2 = mustParseHex("F9308A019258C31049344F85F89D5229B531C8458" + - "36F99B08601F113BCE036F9") - - signSetKey3 = mustParseHex("DFF1D77F2A671C5F36183726DB2341BE58FEAE1DA" + - "2DECED843240F7B502BA659") - - invalidSetKey1 = mustParseHex("00000000000000000000000000000000" + - "00000000000000000000000000000007") - - signExpected1 = mustParseHex("68537CC5234E505BD14061F8DA9E90C220A1818" + - "55FD8BDB7F127BB12403B4D3B") - signExpected2 = mustParseHex("2DF67BFFF18E3DE797E13C6475C963048138DAE" + - "C5CB20A357CECA7C8424295EA") - signExpected3 = mustParseHex("0D5B651E6DE34A29A12DE7A8B4183B4AE6A7F7F" + - "BE15CDCAFA4A3D1BCAABC7517") - - signExpected4 = mustParseHex("8D5E0407FB4756EEBCD86264C32D792EE36EEB6" + - "9E952BBB30B8E41BEBC4D22FA") - - signSetKeys = [][]byte{signSetPubKey, signSetKey2, signSetKey3, invalidPk1} - - aggregatedNonce = toPubNonceSlice(mustParseHex("028465FCF0BBDBCF443AA" + - "BCCE533D42B4B5A10966AC09A49655E8C42DAAB8FCD61037496A3CC86926" + - "D452CAFCFD55D25972CA1675D549310DE296BFF42F72EEEA8C9")) - verifyPnonce1 = mustParsePubNonce("0337C87821AFD50A8644D820A8F3E02E49" + - "9C931865C2360FB43D0A0D20DAFE07EA0287BF891D2A6DEAEBADC909352A" + - "A9405D1428C15F4B75F04DAE642A95C2548480") - verifyPnonce2 = mustParsePubNonce("0279BE667EF9DCBBAC55A06295CE870B07" + - "029BFCDB2DCE28D959F2815B16F817980279BE667EF9DCBBAC55A06295CE" + - "870B07029BFCDB2DCE28D959F2815B16F81798") - verifyPnonce3 = mustParsePubNonce("032DE2662628C90B03F5E720284EB52FF7" + - "D71F4284F627B68A853D78C78E1FFE9303E4C5524E83FFE1493B9077CF1C" + - "A6BEB2090C93D930321071AD40B2F44E599046") - verifyPnonce4 = mustParsePubNonce("0237C87821AFD50A8644D820A8F3E02E49" + - "9C931865C2360FB43D0A0D20DAFE07EA0387BF891D2A6DEAEBADC909352A" + - "A9405D1428C15F4B75F04DAE642A95C2548480") - - tweak1 = KeyTweakDesc{ - Tweak: [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, - }, - } - tweak2 = KeyTweakDesc{ - Tweak: [32]byte{ - 0xae, 0x2e, 0xa7, 0x97, 0xcc, 0xf, 0xe7, 0x2a, - 0xc5, 0xb9, 0x7b, 0x97, 0xf3, 0xc6, 0x95, 0x7d, - 0x7e, 0x41, 0x99, 0xa1, 0x67, 0xa5, 0x8e, 0xb0, - 0x8b, 0xca, 0xff, 0xda, 0x70, 0xac, 0x4, 0x55, - }, - } - tweak3 = KeyTweakDesc{ - Tweak: [32]byte{ - 0xf5, 0x2e, 0xcb, 0xc5, 0x65, 0xb3, 0xd8, 0xbe, - 0xa2, 0xdf, 0xd5, 0xb7, 0x5a, 0x4f, 0x45, 0x7e, - 0x54, 0x36, 0x98, 0x9, 0x32, 0x2e, 0x41, 0x20, - 0x83, 0x16, 0x26, 0xf2, 0x90, 0xfa, 0x87, 0xe0, - }, - } - tweak4 = KeyTweakDesc{ - Tweak: [32]byte{ - 0x19, 0x69, 0xad, 0x73, 0xcc, 0x17, 0x7f, 0xa0, - 0xb4, 0xfc, 0xed, 0x6d, 0xf1, 0xf7, 0xbf, 0x99, - 0x7, 0xe6, 0x65, 0xfd, 0xe9, 0xba, 0x19, 0x6a, - 0x74, 0xfe, 0xd0, 0xa3, 0xcf, 0x5a, 0xef, 0x9d, - }, - } -) - -func formatTweakParity(tweaks []KeyTweakDesc) string { - var s string - for _, tweak := range tweaks { - s += fmt.Sprintf("%v/", tweak.IsXOnly) - } - - // Snip off that last '/'. - s = s[:len(s)-1] - - return s -} - -func genTweakParity(tweak KeyTweakDesc, isXOnly bool) KeyTweakDesc { - tweak.IsXOnly = isXOnly - return tweak -} - -type jsonTweak struct { - Tweak string `json:"tweak"` - XOnly bool `json:"x_only"` -} - -type jsonTweakSignCase struct { - Keys []string `json:"keys"` - Tweaks []jsonTweak `json:"tweaks,omitempty"` - AggNonce string `json:"agg_nonce"` - - ExpectedSig string `json:"expected_sig"` - ExpectedError string `json:"expected_error` -} - -type jsonSignTestCase struct { - SecNonce string `json:"secret_nonce"` - SigningKey string `json:"signing_key"` - Msg string `json:"msg"` - - TestCases []jsonTweakSignCase `json:"test_cases"` -} - -// TestMuSig2SigningTestVectors tests that the musig2 implementation produces -// the same set of signatures. -func TestMuSig2SigningTestVectors(t *testing.T) { - t.Parallel() - - var jsonCases jsonSignTestCase - - jsonCases.SigningKey = hex.EncodeToString(signSetPrivKey.Serialize()) - jsonCases.Msg = hex.EncodeToString(signTestMsg) - - var secNonce [SecNonceSize]byte - copy(secNonce[:], mustParseHex("508B81A611F100A6B2B6B29656590898AF488B"+ - "CF2E1F55CF22E5CFB84421FE61")) - copy(secNonce[32:], mustParseHex("FA27FD49B1D50085B481285E1CA205D55C82"+ - "CC1B31FF5CD54A489829355901F7")) - - jsonCases.SecNonce = hex.EncodeToString(secNonce[:]) - - testCases := []struct { - keyOrder []int - aggNonce [66]byte - expectedPartialSig []byte - tweaks []KeyTweakDesc - expectedError error - }{ - // Vector 1 - { - keyOrder: []int{0, 1, 2}, - aggNonce: aggregatedNonce, - expectedPartialSig: signExpected1, - }, - - // Vector 2 - { - keyOrder: []int{1, 0, 2}, - aggNonce: aggregatedNonce, - expectedPartialSig: signExpected2, - }, - - // Vector 3 - { - keyOrder: []int{1, 2, 0}, - aggNonce: aggregatedNonce, - expectedPartialSig: signExpected3, - }, - // Vector 4 Both halves of aggregate nonce correspond to point at infinity - { - keyOrder: []int{0, 1}, - aggNonce: mustNonceAgg([][66]byte{verifyPnonce1, verifyPnonce4}), - expectedPartialSig: signExpected4, - }, - - // Vector 5: Signer 2 provided an invalid public key - { - keyOrder: []int{1, 0, 3}, - aggNonce: aggregatedNonce, - expectedError: secp256k1.ErrPubKeyNotOnCurve, - }, - - // Vector 6: Aggregate nonce is invalid due wrong tag, 0x04, - // in the first half. - { - - keyOrder: []int{1, 2, 0}, - aggNonce: toPubNonceSlice( - mustParseHex("048465FCF0BBDBCF443AABCCE533D42" + - "B4B5A10966AC09A49655E8C42DAAB8FCD610" + - "37496A3CC86926D452CAFCFD55D25972CA16" + - "75D549310DE296BFF42F72EEEA8C9")), - expectedError: secp256k1.ErrPubKeyInvalidFormat, - }, - - // Vector 7: Aggregate nonce is invalid because the second half - // does not correspond to an X coordinate. - { - - keyOrder: []int{1, 2, 0}, - aggNonce: toPubNonceSlice( - mustParseHex("028465FCF0BBDBCF443AABCCE533D42" + - "B4B5A10966AC09A49655E8C42DAAB8FCD610" + - "200000000000000000000000000000000000" + - "00000000000000000000000000009")), - expectedError: secp256k1.ErrPubKeyNotOnCurve, - }, - - // Vector 8: Aggregate nonce is invalid because the second half - // exceeds field size. - { - - keyOrder: []int{1, 2, 0}, - aggNonce: toPubNonceSlice( - mustParseHex("028465FCF0BBDBCF443AABCCE533D42" + - "B4B5A10966AC09A49655E8C42DAAB8FCD610" + - "2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + - "FFFFFFFFFFFFFFFFFFFFEFFFFFC30")), - expectedError: secp256k1.ErrPubKeyXTooBig, - }, - - // A single x-only tweak. - { - keyOrder: []int{1, 2, 0}, - aggNonce: aggregatedNonce, - expectedPartialSig: mustParseHex("5e24c7496b565debc3b" + - "9639e6f1304a21597f9603d3ab05b4913641775e1375b"), - tweaks: []KeyTweakDesc{genTweakParity(tweak1, true)}, - }, - - // A single ordinary tweak. - { - keyOrder: []int{1, 2, 0}, - aggNonce: aggregatedNonce, - expectedPartialSig: mustParseHex("78408ddcab4813d1394c" + - "97d493ef1084195c1d4b52e63ecd7bc5991644e44ddd"), - tweaks: []KeyTweakDesc{genTweakParity(tweak1, false)}, - }, - - // An ordinary tweak then an x-only tweak. - { - keyOrder: []int{1, 2, 0}, - aggNonce: aggregatedNonce, - expectedPartialSig: mustParseHex("C3A829A81480E36EC3A" + - "B052964509A94EBF34210403D16B226A6F16EC85B7357"), - tweaks: []KeyTweakDesc{ - genTweakParity(tweak1, false), - genTweakParity(tweak2, true), - }, - }, - - // Four tweaks, in the order: x-only, ordinary, x-only, ordinary. - { - keyOrder: []int{1, 2, 0}, - aggNonce: aggregatedNonce, - expectedPartialSig: mustParseHex("8C4473C6A382BD3C4AD" + - "7BE59818DA5ED7CF8CEC4BC21996CFDA08BB4316B8BC7"), - tweaks: []KeyTweakDesc{ - genTweakParity(tweak1, true), - genTweakParity(tweak2, false), - genTweakParity(tweak3, true), - genTweakParity(tweak4, false), - }, - }, - } - - var msg [32]byte - copy(msg[:], signTestMsg) - - for _, testCase := range testCases { - testName := fmt.Sprintf("%v/tweak=%v", testCase.keyOrder, len(testCase.tweaks) != 0) - if len(testCase.tweaks) != 0 { - testName += fmt.Sprintf("/x_only=%v", formatTweakParity(testCase.tweaks)) - } - t.Run(testName, func(t *testing.T) { - keySet := make([]*btcec.PublicKey, 0, len(testCase.keyOrder)) - for _, keyIndex := range testCase.keyOrder { - keyBytes := signSetKeys[keyIndex] - pub, err := schnorr.ParsePubKey(keyBytes) - - switch { - case testCase.expectedError != nil && - errors.Is(err, testCase.expectedError): - - return - case err != nil: - t.Fatalf("unable to parse pubkeys: %v", err) - } - - keySet = append(keySet, pub) - } - - var opts []SignOption - if len(testCase.tweaks) != 0 { - opts = append( - opts, WithTweaks(testCase.tweaks...), - ) - } - - partialSig, err := Sign( - secNonce, signSetPrivKey, testCase.aggNonce, - keySet, msg, opts..., - ) - - switch { - case testCase.expectedError != nil && - errors.Is(err, testCase.expectedError): - - return - case err != nil: - t.Fatalf("unable to generate partial sig: %v", err) - } - - var partialSigBytes [32]byte - partialSig.S.PutBytesUnchecked(partialSigBytes[:]) - - if !bytes.Equal(partialSigBytes[:], testCase.expectedPartialSig) { - t.Fatalf("sigs don't match: expected %x, got %x", - testCase.expectedPartialSig, partialSigBytes, - ) - } - - }) - - if *dumpJson { - var ( - strKeys []string - jsonError string - ) - - for _, keyIndex := range testCase.keyOrder { - keyBytes := signSetKeys[keyIndex] - strKeys = append(strKeys, hex.EncodeToString(keyBytes)) - } - - if testCase.expectedError != nil { - jsonError = testCase.expectedError.Error() - } - - tweakSignCase := jsonTweakSignCase{ - Keys: strKeys, - ExpectedSig: hex.EncodeToString(testCase.expectedPartialSig), - AggNonce: hex.EncodeToString(testCase.aggNonce[:]), - ExpectedError: jsonError, - } - - var jsonTweaks []jsonTweak - for _, tweak := range testCase.tweaks { - jsonTweaks = append( - jsonTweaks, - jsonTweak{ - Tweak: hex.EncodeToString(tweak.Tweak[:]), - XOnly: tweak.IsXOnly, - }) - } - tweakSignCase.Tweaks = jsonTweaks - - jsonCases.TestCases = append(jsonCases.TestCases, tweakSignCase) - } - } - - if *dumpJson { - jsonBytes, err := json.Marshal(jsonCases) - if err != nil { - t.Fatalf("unable to encode json: %v", err) - } - - var formattedJson bytes.Buffer - json.Indent(&formattedJson, jsonBytes, "", "\t") - err = ioutil.WriteFile( - signTestVectorName, formattedJson.Bytes(), 0644, - ) - if err != nil { - t.Fatalf("unable to write file: %v", err) - } - } -} - -func TestMusig2PartialSigVerifyTestVectors(t *testing.T) { - t.Parallel() - - testCases := []struct { - partialSig []byte - nonces [][66]byte - pubnonceIndex int - keyOrder []int - tweaks []KeyTweakDesc - expectedError error - }{ - // A single x-only tweak. - { - keyOrder: []int{1, 2, 0}, - nonces: [][66]byte{ - verifyPnonce2, - verifyPnonce3, - verifyPnonce1, - }, - pubnonceIndex: 2, - partialSig: mustParseHex("5e24c7496b565debc3b9639e" + - "6f1304a21597f9603d3ab05b4913641775e1375b"), - tweaks: []KeyTweakDesc{genTweakParity(tweak1, true)}, - }, - // A single ordinary tweak. - { - keyOrder: []int{1, 2, 0}, - nonces: [][66]byte{ - verifyPnonce2, - verifyPnonce3, - verifyPnonce1, - }, - pubnonceIndex: 2, - partialSig: mustParseHex("78408ddcab4813d1394c97d4" + - "93ef1084195c1d4b52e63ecd7bc5991644e44ddd"), - tweaks: []KeyTweakDesc{genTweakParity(tweak1, false)}, - }, - // An ordinary tweak then an x-only tweak. - { - keyOrder: []int{1, 2, 0}, - nonces: [][66]byte{ - verifyPnonce2, - verifyPnonce3, - verifyPnonce1, - }, - pubnonceIndex: 2, - partialSig: mustParseHex("C3A829A81480E36EC3AB0529" + - "64509A94EBF34210403D16B226A6F16EC85B7357"), - tweaks: []KeyTweakDesc{ - genTweakParity(tweak1, false), - genTweakParity(tweak2, true), - }, - }, - - // Four tweaks, in the order: x-only, ordinary, x-only, ordinary. - { - keyOrder: []int{1, 2, 0}, - nonces: [][66]byte{ - verifyPnonce2, - verifyPnonce3, - verifyPnonce1, - }, - pubnonceIndex: 2, - partialSig: mustParseHex("8C4473C6A382BD3C4AD7BE5" + - "9818DA5ED7CF8CEC4BC21996CFDA08BB4316B8BC7"), - tweaks: []KeyTweakDesc{ - genTweakParity(tweak1, true), - genTweakParity(tweak2, false), - genTweakParity(tweak3, true), - genTweakParity(tweak4, false), - }, - }, - // Vector 9. - { - - partialSig: signExpected1, - pubnonceIndex: 0, - keyOrder: []int{0, 1, 2}, - nonces: [][66]byte{ - verifyPnonce1, - verifyPnonce2, - verifyPnonce3, - }, - }, - // Vector 10. - { - - partialSig: signExpected2, - pubnonceIndex: 1, - keyOrder: []int{1, 0, 2}, - nonces: [][66]byte{ - verifyPnonce2, - verifyPnonce1, - verifyPnonce3, - }, - }, - // Vector 11. - { - - partialSig: signExpected3, - pubnonceIndex: 2, - keyOrder: []int{1, 2, 0}, - nonces: [][66]byte{ - verifyPnonce2, - verifyPnonce3, - verifyPnonce1, - }, - }, - // Vector 12: Both halves of aggregate nonce correspond to - // point at infinity. - { - - partialSig: signExpected4, - pubnonceIndex: 0, - keyOrder: []int{0, 1}, - nonces: [][66]byte{ - verifyPnonce1, - verifyPnonce4, - }, - }, - // Vector 13: Wrong signature (which is equal to the negation - // of valid signature expected[0]). - { - - partialSig: mustParseHex("97AC833ADCB1AFA42EBF9E0" + - "725616F3C9A0D5B614F6FE283CEAAA37A8FFAF406"), - pubnonceIndex: 0, - keyOrder: []int{0, 1, 2}, - nonces: [][66]byte{ - verifyPnonce1, - verifyPnonce2, - verifyPnonce3, - }, - expectedError: ErrPartialSigInvalid, - }, - // Vector 12: Wrong signer. - { - - partialSig: signExpected1, - pubnonceIndex: 1, - keyOrder: []int{0, 1, 2}, - nonces: [][66]byte{ - verifyPnonce1, - verifyPnonce2, - verifyPnonce3, - }, - expectedError: ErrPartialSigInvalid, - }, - // Vector 13: Signature exceeds group size. - { - - partialSig: mustParseHex("FFFFFFFFFFFFFFFFFFFFFFFF" + - "FFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141"), - pubnonceIndex: 0, - keyOrder: []int{0, 1, 2}, - nonces: [][66]byte{ - verifyPnonce1, - verifyPnonce2, - verifyPnonce3, - }, - expectedError: ErrPartialSigInvalid, - }, - // Vector 14: Invalid pubnonce. - { - - partialSig: signExpected1, - pubnonceIndex: 0, - keyOrder: []int{0, 1, 2}, - nonces: [][66]byte{ - canParsePubNonce("020000000000000000000000000" + - "000000000000000000000000000000000000009"), - verifyPnonce2, - verifyPnonce3, - }, - expectedError: secp256k1.ErrPubKeyNotOnCurve, - }, - // Vector 15: Invalid public key. - { - - partialSig: signExpected1, - pubnonceIndex: 0, - keyOrder: []int{3, 1, 2}, - nonces: [][66]byte{ - verifyPnonce1, - verifyPnonce2, - verifyPnonce3, - }, - expectedError: secp256k1.ErrPubKeyNotOnCurve, - }, - } - - for _, testCase := range testCases { - - // todo find name - testName := fmt.Sprintf("%v/tweak=%v", testCase.pubnonceIndex, testCase.keyOrder) - - t.Run(testName, func(t *testing.T) { - - combinedNonce, err := AggregateNonces(testCase.nonces) - - switch { - case testCase.expectedError != nil && - errors.Is(err, testCase.expectedError): - - return - case err != nil: - t.Fatalf("unable to aggregate nonces %v", err) - } - - keySet := make([]*btcec.PublicKey, 0, len(testCase.keyOrder)) - for _, keyIndex := range testCase.keyOrder { - keyBytes := signSetKeys[keyIndex] - pub, err := schnorr.ParsePubKey(keyBytes) - - switch { - case testCase.expectedError != nil && - errors.Is(err, testCase.expectedError): - - return - case err != nil: - t.Fatalf("unable to parse pubkeys: %v", err) - } - - keySet = append(keySet, pub) - } - - ps := &PartialSignature{} - err = ps.Decode(bytes.NewBuffer(testCase.partialSig)) - - switch { - case testCase.expectedError != nil && - errors.Is(err, testCase.expectedError): - - return - case err != nil: - t.Fatal(err) - } - - var opts []SignOption - if len(testCase.tweaks) != 0 { - opts = append( - opts, WithTweaks(testCase.tweaks...), - ) - } - - err = verifyPartialSig( - ps, - testCase.nonces[testCase.pubnonceIndex], - combinedNonce, - keySet, - signSetKeys[testCase.keyOrder[testCase.pubnonceIndex]], - to32ByteSlice(signTestMsg), - opts..., - ) - - switch { - case testCase.expectedError != nil && - errors.Is(err, testCase.expectedError): - - return - case err != nil: - t.Fatalf("unable to aggregate nonces %v", err) - } - }) - } -} - type signer struct { privKey *btcec.PrivateKey pubKey *btcec.PublicKey @@ -1166,339 +444,3 @@ func (mr *memsetRandReader) Read(buf []byte) (n int, err error) { } return len(buf), nil } - -var ( - combineSigKey0 = mustParseHex("487D1B83B41B4CBBD07A111F1BBC7BDC8864CF" + - "EF5DBF96E46E51C68399B0BEF6") - combineSigKey1 = mustParseHex("4795C22501BF534BC478FF619407A7EC9E8D88" + - "83646D69BD43A0728944EA802F") - combineSigKey2 = mustParseHex("0F5BE837F3AB7E7FEFF1FAA44D673C2017206A" + - "E836D2C7893CDE4ACB7D55EDEB") - combineSigKey3 = mustParseHex("0FD453223E444FCA91FB5310990AE8A0C5DAA1" + - "4D2A4C8944E1C0BC80C30DF682") - - combineSigKeys = [][]byte{combineSigKey0, combineSigKey1, - combineSigKey2, combineSigKey3} - - combineSigAggNonce0 = mustParsePubNonce("024FA51009A56F0D6DF737131CE1" + - "FBBD833797AF3B4FE6BF0D68F4D49F68B0947E0248FB3BB9191F0CFF1380" + - "6A3A2F1429C23012654FCE4E41F7EC9169EAA6056B21") - combineSigAggNonce1 = mustParsePubNonce("023B11E63E2460E5E0F1561BB700" + - "FEA95B991DD9CA2CBBE92A3960641FA7469F6702CA4CD38375FE8BEB857C" + - "770807225BFC7D712F42BA896B83FC71138E56409B21") - combineSigAggNonce2 = mustParsePubNonce("03F98BEAA32B8A38FE3797C4E813" + - "DC9CE05ADBE32200035FB37EB0A030B735E9B6030E6118EC98EA2BA7A358" + - "C2E38E7E13E63681EEB683E067061BF7D52DCF08E615") - combineSigAggNonce3 = mustParsePubNonce("026491FBCFD47148043A0F7310E6" + - "2EF898C10F2D0376EE6B232EAAD36F3C2E29E303020CB17D168908E2904D" + - "E2EB571CD232CA805A6981D0F86CDBBD2F12BD91F6D0") - - psig0 = mustParseHex("E5C1CBD6E7E89FE9EE30D5F3B6D06B9C218846E4A1DEF4E" + - "E851410D51ABBD850") - psig1 = mustParseHex("9BC470F7F1C9BC848BDF179B0023282FFEF40908E0EF884" + - "59784A4355FC86D0C") - psig2 = mustParseHex("D5D8A09929BA264B2F5DF15ACA1CF2DEFA47C048DF0C323" + - "2E965FFE2F2831B1D") - psig3 = mustParseHex("A915197503C1051EA77DC91F01C3A0E60BFD64473BD536C" + - "B613F9645BD61C843") - psig4 = mustParseHex("99A144D7076A128022134E036B8BDF33811F7EAED9A1E48" + - "549B46D8A63D64DC9") - psig5 = mustParseHex("716A72A0C1E531EBB4555C8E29FD35C796F4F231C3B0391" + - "93D7E8D7AEFBDF5F7") - psig6 = mustParseHex("06B6DD04BC0F1EF740916730AD7DAC794255B1612217197" + - "65BDE9686A26633DC") - psig7 = mustParseHex("BF6D85D4930062726EBC6EBB184AFD68DBB3FED159C5019" + - "89690A62600D6FBAB") - - combineSigExpected0 = mustParseHex("4006D4D069F3B51E968762FF8074153E2" + - "78E5BCD221AABE0743CA001B77E79F581863CCED9B25C6E7A0FED8EB6F39" + - "3CD65CD7306D385DCF85CC6567DAA4E041B") - combineSigExpected1 = mustParseHex("98BCD40DFD94B47A3DA37D7B78EB6CCE8" + - "ABEACA23C3ADE6F4678902410EB35C67EEDBA0E2D7B2B69D6DBBA79CBE09" + - "3C64B9647A96B98C8C28AD3379BDFAEA21F") - combineSigExpected2 = mustParseHex("3741FEDCCDD7508B58DCB9A780FF5D974" + - "52EC8C0448D8C97004EA7175C14F2007A54D1DE356EBA6719278436EF111" + - "DFA8F1B832368371B9B7A25001709039679") - combineSigExpected3 = mustParseHex("F4B3DA3CF0D0F7CF5C1840593BF1A1A41" + - "5DA341619AE848F2210696DC8C7512540962C84EF7F0CEC491065F2D5772" + - "13CF10E8A63D153297361B3B172BE27B61F") - - combineSigTweak0 = mustParseHex32("B511DA492182A91B0FFB9A98020D55F260" + - "AE86D7ECBD0399C7383D59A5F2AF7C") - combineSigTweak1 = mustParseHex32("A815FE049EE3C5AAB66310477FBC8BCCCA" + - "C2F3395F59F921C364ACD78A2F48DC") - combineSigTweak2 = mustParseHex32("75448A87274B056468B977BE06EB1E9F65" + - "7577B7320B0A3376EA51FD420D18A8") - tweak0False = KeyTweakDesc{ - Tweak: combineSigTweak0, - IsXOnly: false, - } - tweak0True = KeyTweakDesc{ - Tweak: combineSigTweak0, - IsXOnly: true, - } - tweak1False = KeyTweakDesc{ - Tweak: combineSigTweak1, - IsXOnly: false, - } - tweak2True = KeyTweakDesc{ - Tweak: combineSigTweak2, - IsXOnly: true, - } - combineSigsMsg = mustParseHex32("599C67EA410D005B9DA90817CF03ED3B1C86" + - "8E4DA4EDF00A5880B0082C237869") -) - -func TestMusig2CombineSigsTestVectors(t *testing.T) { - - testCases := []struct { - partialSigs [][]byte - aggNonce [66]byte - keyOrder []int - expected []byte - tweaks []KeyTweakDesc - expectedError error - }{ - // Vector 1 - { - partialSigs: [][]byte{psig0, psig1}, - aggNonce: combineSigAggNonce0, - keyOrder: []int{0, 1}, - expected: combineSigExpected0, - }, - // Vector 2 - { - partialSigs: [][]byte{psig2, psig3}, - aggNonce: combineSigAggNonce1, - keyOrder: []int{0, 2}, - expected: combineSigExpected1, - }, - // Vector 3 - { - partialSigs: [][]byte{psig4, psig5}, - aggNonce: combineSigAggNonce2, - keyOrder: []int{0, 2}, - expected: combineSigExpected2, - tweaks: []KeyTweakDesc{tweak0False}, - }, - // Vector 4 - { - partialSigs: [][]byte{psig6, psig7}, - aggNonce: combineSigAggNonce3, - keyOrder: []int{0, 3}, - expected: combineSigExpected3, - tweaks: []KeyTweakDesc{ - tweak0True, - tweak1False, - tweak2True, - }, - }, - // Vector 5: Partial signature is invalid because it exceeds group size - { - partialSigs: [][]byte{ - psig7, - mustParseHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + - "EBAAEDCE6AF48A03BBFD25E8CD0364141"), - }, - aggNonce: combineSigAggNonce3, - expectedError: ErrPartialSigInvalid, - }, - } - - for _, testCase := range testCases { - var pSigs []*PartialSignature - for _, partialSig := range testCase.partialSigs { - pSig := &PartialSignature{} - err := pSig.Decode(bytes.NewReader(partialSig)) - - switch { - case testCase.expectedError != nil && - errors.Is(err, testCase.expectedError): - - return - case err != nil: - t.Fatal(err) - } - - pSigs = append(pSigs, pSig) - } - - keySet := make([]*btcec.PublicKey, 0, len(testCase.keyOrder)) - for _, keyIndex := range testCase.keyOrder { - keyBytes := combineSigKeys[keyIndex] - pub, err := schnorr.ParsePubKey(keyBytes) - if err != nil { - t.Fatalf("unable to parse pubkeys: %v", err) - } - keySet = append(keySet, pub) - } - - uniqueKeyIndex := secondUniqueKeyIndex(keySet, false) - aggOpts := []KeyAggOption{ - WithUniqueKeyIndex(uniqueKeyIndex), - } - if len(testCase.tweaks) > 0 { - aggOpts = append(aggOpts, WithKeyTweaks(testCase.tweaks...)) - } - - combinedKey, _, _, err := AggregateKeys( - keySet, false, aggOpts..., - ) - if err != nil { - t.Fatal(err) - } - - aggPubkey, err := aggNonceToPubkey( - testCase.aggNonce, combinedKey, combineSigsMsg, - ) - if err != nil { - t.Fatal(err) - } - - var opts []CombineOption - if len(testCase.tweaks) > 0 { - opts = append(opts, WithTweakedCombine( - combineSigsMsg, keySet, testCase.tweaks, false, - )) - } - - sig := CombineSigs(aggPubkey, pSigs, opts...) - expectedSig, err := schnorr.ParseSignature(testCase.expected) - if err != nil { - t.Fatal(err) - } - - if !bytes.Equal(sig.Serialize(), expectedSig.Serialize()) { - t.Fatalf("sigs not expected %x \n got %x", expectedSig.Serialize(), sig.Serialize()) - } - - if !sig.Verify(combineSigsMsg[:], combinedKey.FinalKey) { - t.Fatal("sig not valid for m") - } - } -} - -// aggNonceToPubkey gets a nonce as a public key for the TestMusig2CombineSigsTestVectors -// test. -// TODO(sputn1ck): build into intermediate routine. -func aggNonceToPubkey(combinedNonce [66]byte, combinedKey *AggregateKey, - msg [32]byte) (*btcec.PublicKey, error) { - - // b = int_from_bytes(tagged_hash('MuSig/noncecoef', aggnonce + bytes_from_point(Q) + msg)) % n - 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[:]) - - r1, err := btcec.ParsePubKey( - combinedNonce[:btcec.PubKeyBytesLenCompressed], - ) - if err != nil { - return nil, err - } - - r2, err := btcec.ParsePubKey( - combinedNonce[btcec.PubKeyBytesLenCompressed:], - ) - if err != nil { - return nil, err - } - - var nonce, r1J, r2J btcec.JacobianPoint - r1.AsJacobian(&r1J) - r2.AsJacobian(&r2J) - - // 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 - btcec.ScalarMultNonConst(&nonceBlinder, &r2J, &r2J) - btcec.AddNonConst(&r1J, &r2J, &nonce) - - nonce.ToAffine() - - return btcec.NewPublicKey( - &nonce.X, &nonce.Y, - ), nil - -} - -func mustNonceAgg(nonces [][66]byte) [66]byte { - aggNonce, err := AggregateNonces(nonces) - if err != nil { - panic("can't aggregate nonces") - } - return aggNonce -} - -func memsetLoop(a []byte, v uint8) { - for i := range a { - a[i] = byte(v) - } -} - -func to32ByteSlice(input []byte) [32]byte { - if len(input) != 32 { - panic("input byte slice has invalid length") - } - var output [32]byte - copy(output[:], input) - return output -} - -func toPubNonceSlice(input []byte) [PubNonceSize]byte { - var output [PubNonceSize]byte - copy(output[:], input) - - return output -} - -func getGBytes() []byte { - return btcec.Generator().SerializeCompressed() -} - -func getNegGBytes() []byte { - pk := getGBytes() - pk[0] = 0x3 - - return pk -} - -func getInfinityBytes() []byte { - return make([]byte, 33) -} - -func mustParseHex32(str string) [32]byte { - b, err := hex.DecodeString(str) - if err != nil { - panic(fmt.Errorf("unable to parse hex: %v", err)) - } - if len(b) != 32 { - panic(fmt.Errorf("not a 32 byte slice: %v", err)) - } - - return to32ByteSlice(b) -} - -func mustParsePubNonce(str string) [PubNonceSize]byte { - b, err := hex.DecodeString(str) - if err != nil { - panic(fmt.Errorf("unable to parse hex: %v", err)) - } - if len(b) != PubNonceSize { - panic(fmt.Errorf("not a public nonce: %v", err)) - } - return toPubNonceSlice(b) -} - -func canParsePubNonce(str string) [PubNonceSize]byte { - b, err := hex.DecodeString(str) - if err != nil { - panic(fmt.Errorf("unable to parse hex: %v", err)) - } - return toPubNonceSlice(b) -} From eef9fbc5c9f517d8bc03d79ce96854e151d735cf Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Tue, 25 Oct 2022 16:33:21 -0700 Subject: [PATCH 417/419] btcec/schnorr/musig2: always pass in priv key for early nonce gen This helps mitigate an issue discovered in musig2 under certain scenarios: https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-October/021000.html. --- btcec/schnorr/musig2/context.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/btcec/schnorr/musig2/context.go b/btcec/schnorr/musig2/context.go index adbedb8bf3..0dfc6f38af 100644 --- a/btcec/schnorr/musig2/context.go +++ b/btcec/schnorr/musig2/context.go @@ -239,7 +239,9 @@ func NewContext(signingKey *btcec.PrivateKey, shouldSort bool, // are known. if opts.earlyNonce { var err error - ctx.sessionNonce, err = GenNonces() + ctx.sessionNonce, err = GenNonces( + WithNonceSecretKeyAux(signingKey), + ) if err != nil { return nil, err } From 6a03eb372bb89c7f8e1ff6332def8fdf86919e08 Mon Sep 17 00:00:00 2001 From: Elle Mouton Date: Tue, 1 Nov 2022 13:42:09 +0200 Subject: [PATCH 418/419] wire: increase max witness items per input --- wire/msgtx.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/wire/msgtx.go b/wire/msgtx.go index c289cd7e0b..80a5fcc674 100644 --- a/wire/msgtx.go +++ b/wire/msgtx.go @@ -96,11 +96,13 @@ 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 value is bounded by the largest From 4f0ae90c88ada974ece636b5faf6651e059dda7d Mon Sep 17 00:00:00 2001 From: Oliver Gugger Date: Tue, 1 Nov 2022 13:02:18 +0100 Subject: [PATCH 419/419] build: bump version to v0.23.3 --- version.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.go b/version.go index 7d321c5fdd..19af5b8bd0 100644 --- a/version.go +++ b/version.go @@ -18,7 +18,7 @@ const semanticAlphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr const ( appMajor uint = 0 appMinor uint = 23 - appPatch uint = 2 + appPatch uint = 3 // appPreRelease MUST only contain characters from semanticAlphabet // per the semantic versioning spec.