Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Updates, candidate 0.9.1 release #406

Merged
merged 15 commits into from
Aug 1, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions .readthedocs.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# .readthedocs.yaml
# Read the Docs configuration file
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details

version: 2

build:
os: ubuntu-22.04
tools:
python: "3.11"

# Build documentation in the docs/ directory with Sphinx
sphinx:
configuration: docs/source/conf.py

python:
install:
- requirements: docs/requirements.txt
12 changes: 12 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,17 @@
# Changes

## Version 0.9.1
- PSET: When adding an Elements transaction output to a PSET, the nonce
commitment was incorrectly mapped to the PSET output blinding key field.
It is now correctly mapped to the ECDH public key field.
- Transaction versions less than 2 are now upgraded to version 2 when
converting a version 0 PSBT to version 2.
- Fetching nested structures (e.g. witness stacks) from PSBTs where no
structure is present now returns NULL without returning an error.
- Python wheels are no longer released for deprecated versions 3.6/3.7.
- Python wheels are now available through pip for musl-based x86 platforms
such as Apline Linux.

## Version 0.9.0
- ABI: wally_descriptor_to_script_get_maximum_length has changed its arguments
to match wally_descriptor_to_script.
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ installed.
For non-development use, you can install wally with `pip` as follows:

```
pip install wallycore==0.9.0
pip install wallycore==0.9.1
```

For python development, you can build and install wally using:
Expand All @@ -132,7 +132,7 @@ You can also install the binary [wally releases](https://github.com/ElementsProj
using the released wheel files without having to compile the library, e.g.:

```
pip install wallycore-0.9.0-cp39-cp39m-linux_x86_64.whl
pip install wallycore-0.9.1-cp39-cp39m-linux_x86_64.whl
```

The script `tools/build_python_manylinux_wheels.sh` builds the Linux release files
Expand Down
4 changes: 2 additions & 2 deletions _CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ cmake_minimum_required(VERSION 3.20)

project(
libwallycore
VERSION 0.9.0
DESCRIPTION "collection of useful primitives for cryptocurrency wallets"
VERSION 0.9.1
DESCRIPTION "A collection of useful primitives for cryptocurrency wallets"
LANGUAGES C
)

Expand Down
2 changes: 1 addition & 1 deletion configure.ac
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
AC_PREREQ([2.60])
AC_INIT([libwallycore],[0.9.0])
AC_INIT([libwallycore],[0.9.1])
AC_CONFIG_AUX_DIR([tools/build-aux])
AC_CONFIG_MACRO_DIR([tools/build-aux/m4])
AC_CONFIG_SRCDIR([src/mnemonic.h])
Expand Down
2 changes: 1 addition & 1 deletion docs/source/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ def extract_docs(infile, outfile):
# built documents.
#
# The short X.Y version.
version = u'0.9.0'
version = u'0.9.1'
# The full version, including alpha/beta/rc tags.
release = version

Expand Down
31 changes: 31 additions & 0 deletions include/wally.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -1160,6 +1160,12 @@ inline int psbt_from_bytes(const BYTES& bytes, uint32_t flags, struct wally_psbt
return ret;
}

template <class TX>
inline int psbt_from_tx(const TX& tx, uint32_t version, uint32_t flags, struct wally_psbt** output) {
int ret = ::wally_psbt_from_tx(detail::get_p(tx), version, flags, output);
return ret;
}

template <class PSBT, class BYTES_OUT>
inline int psbt_get_id(const PSBT& psbt, uint32_t flags, BYTES_OUT& bytes_out) {
int ret = ::wally_psbt_get_id(detail::get_p(psbt), flags, bytes_out.data(), bytes_out.size());
Expand Down Expand Up @@ -1943,6 +1949,24 @@ inline int tx_witness_stack_free(struct wally_tx_witness_stack* stack) {
return ret;
}

template <class BYTES>
inline int tx_witness_stack_from_bytes(const BYTES& bytes, struct wally_tx_witness_stack** output) {
int ret = ::wally_tx_witness_stack_from_bytes(bytes.data(), bytes.size(), output);
return ret;
}

template <class STACK>
inline int tx_witness_stack_get_length(const STACK& stack, size_t* written) {
int ret = ::wally_tx_witness_stack_get_length(detail::get_p(stack), written);
return ret;
}

template <class STACK>
inline int tx_witness_stack_get_num_items(const STACK& stack, size_t* written) {
int ret = ::wally_tx_witness_stack_get_num_items(detail::get_p(stack), written);
return ret;
}

inline int tx_witness_stack_init_alloc(size_t allocation_len, struct wally_tx_witness_stack** output) {
int ret = ::wally_tx_witness_stack_init_alloc(allocation_len, output);
return ret;
Expand All @@ -1960,6 +1984,13 @@ inline int tx_witness_stack_set_dummy(const STACK& stack, size_t index, uint32_t
return ret;
}

template <class STACK, class BYTES_OUT>
inline int tx_witness_stack_to_bytes(const STACK& stack, BYTES_OUT& bytes_out, size_t* written = 0) {
size_t n;
int ret = ::wally_tx_witness_stack_to_bytes(detail::get_p(stack), bytes_out.data(), bytes_out.size(), written ? written : &n);
return written || ret != WALLY_OK ? ret : n == static_cast<size_t>(bytes_out.size()) ? WALLY_OK : WALLY_EINVAL;
}

template <class BYTES>
inline int varbuff_get_length(const BYTES& bytes, size_t* written = 0) {
size_t n;
Expand Down
21 changes: 19 additions & 2 deletions include/wally_psbt.h
Original file line number Diff line number Diff line change
Expand Up @@ -1884,8 +1884,8 @@ WALLY_CORE_API int wally_psbt_output_get_blinding_status(
* :param inputs_allocation_len: The number of inputs to pre-allocate space for.
* :param outputs_allocation_len: The number of outputs to pre-allocate space for.
* :param global_unknowns_allocation_len: The number of global unknowns to allocate space for.
* :param flags: Flags controlling psbt creation. Must be 0 or WALLY_PSBT_INIT_PSET.
* :param output: Destination for the resulting PSBT output.
* :param flags: Flags controlling psbt creation. Must be 0 or `WALLY_PSBT_INIT_PSET`.
* :param output: Destination for the resulting PSBT.
*/
WALLY_CORE_API int wally_psbt_init_alloc(
uint32_t version,
Expand Down Expand Up @@ -2368,6 +2368,23 @@ WALLY_CORE_API int wally_psbt_to_base64(
uint32_t flags,
char **output);

/**
* Create a PSBT from an existing transaction.
*
* :param tx: The transaction to create the PSBT from.
* :param version: The PSBT version to create. Must be ``WALLY_PSBT_VERSION_0`` or ``WALLY_PSBT_VERSION_2``.
* :param flags: Flags controlling psbt creation. Must be 0 or `WALLY_PSBT_INIT_PSET`.
* :param output: Destination for the resulting PSBT.
*
* .. note:: Any input scriptSigs and witnesses from the transaction's inputs
*| are ignored when creating the PSBT.
*/
WALLY_CORE_API int wally_psbt_from_tx(
const struct wally_tx *tx,
uint32_t version,
uint32_t flags,
struct wally_psbt **output);

/**
* Combine the metadata from a source PSBT into another PSBT.
*
Expand Down
53 changes: 51 additions & 2 deletions include/wally_transaction.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ extern "C" {

#define WALLY_TX_FLAG_BLINDED_INITIAL_ISSUANCE 0x1

/*** tx-clone Transaction cloning flags */
#define WALLY_TX_CLONE_FLAG_NON_FINAL 0x1 /* Ignore scriptsig and witness when cloning */

#define WALLY_TX_DUMMY_NULL 0x1 /* An empty witness item */
#define WALLY_TX_DUMMY_SIG 0x2 /* A dummy signature */
#define WALLY_TX_DUMMY_SIG_LOW_R 0x4 /* A dummy signature created with EC_FLAG_GRIND_R */
Expand Down Expand Up @@ -166,6 +169,16 @@ WALLY_CORE_API int wally_tx_witness_stack_clone_alloc(
const struct wally_tx_witness_stack *stack,
struct wally_tx_witness_stack **output);

/**
* Return the number of witness items in a witness stack.
*
* :param stack: The witness stack to get the number of items from.
* :param written: Destination for the number of items.
*/
WALLY_CORE_API int wally_tx_witness_stack_get_num_items(
const struct wally_tx_witness_stack *stack,
size_t *written);

/**
* Add a witness to a witness stack.
*
Expand Down Expand Up @@ -214,6 +227,42 @@ WALLY_CORE_API int wally_tx_witness_stack_set_dummy(
size_t index,
uint32_t flags);

/**
* Create a new witness stack from its BIP 144 serialization.
*
* :param bytes: Bytes to create the witness stack from.
* :param bytes_len: Length of ``bytes`` in bytes.
* :param output: Destination for the resulting witness stack.
*/
WALLY_CORE_API int wally_tx_witness_stack_from_bytes(
const unsigned char *bytes,
size_t bytes_len,
struct wally_tx_witness_stack **output);

/**
* Return the length of a witness stacks BIP 144 serialization.
*
* :param stack: The witness stack to find the serialized length of.
* :param written: Destination for the length of the serialized bytes.
*/
WALLY_CORE_API int wally_tx_witness_stack_get_length(
const struct wally_tx_witness_stack *stack,
size_t *written);

/**
* Serialize a witness stack to its BIP 144 serialization.
*
* :param stack: The witness stack to serialize.
* :param bytes_out: Destination for the serialized witness stack.
* :param len: Size of ``bytes_out`` in bytes.
* :param written: Destination for the length of the serialized witness stack.
*/
WALLY_CORE_API int wally_tx_witness_stack_to_bytes(
const struct wally_tx_witness_stack *stack,
unsigned char *bytes_out,
size_t len,
size_t *written);

/**
* Free a transaction witness stack allocated by `wally_tx_witness_stack_init_alloc`.
*
Expand Down Expand Up @@ -315,7 +364,7 @@ WALLY_CORE_API int wally_tx_output_free(struct wally_tx_output *output);
* :param locktime: The locktime of the transaction.
* :param inputs_allocation_len: The number of inputs to pre-allocate space for.
* :param outputs_allocation_len: The number of outputs to pre-allocate space for.
* :param output: Destination for the resulting transaction output.
* :param output: Destination for the resulting transaction.
*/
WALLY_CORE_API int wally_tx_init_alloc(
uint32_t version,
Expand All @@ -328,7 +377,7 @@ WALLY_CORE_API int wally_tx_init_alloc(
* Create a new copy of a transaction.
*
* :param tx: The transaction to clone.
* :param flags: Flags controlling transaction creation. Must be 0.
* :param flags: :ref:`tx-clone` controlling new transaction creation.
* :param output: Destination for the resulting transaction copy.
*/
WALLY_CORE_API int wally_tx_clone_alloc(
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ def call(cmd):

kwargs = {
'name': 'wallycore',
'version': '0.9.0',
'version': '0.9.1',
'description': 'libwally Bitcoin library',
'long_description': 'Python bindings for the libwally Bitcoin library',
'url': 'https://github.com/ElementsProject/libwally-core',
Expand Down
4 changes: 2 additions & 2 deletions src/ccan/ccan/base64/base64.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ static int8_t sixbit_from_b64(const base64_maps_t *maps,
int8_t ret;

ret = maps->decode_map[(unsigned char)b64letter];
if (ret == (char)0xff) {
if (ret == '\xff') {
errno = EDOM;
return -1;
}
Expand All @@ -44,7 +44,7 @@ static int8_t sixbit_from_b64(const base64_maps_t *maps,

bool base64_char_in_alphabet(const base64_maps_t *maps, const char b64char)
{
return (maps->decode_map[(const unsigned char)b64char] != (char)0xff);
return (maps->decode_map[(const unsigned char)b64char] != '\xff');
}

void base64_init_maps(base64_maps_t *dest, const char src[64])
Expand Down
5 changes: 4 additions & 1 deletion src/ctest/psbts.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@ static const struct psbt_test invalid_psbts[] =
/* PSBT v0 with invalid global transaction typed key */
{"cHNidP8CAAFVAgAAAAEnmiMjpd+1H8RfIg+liw/BPh4zQnkqhdfjbNYzO1y8OQAAAAAA/////wGgWuoLAAAAABl2qRT/6cAGEJfMO2NvLLBGD6T8Qn0rRYisAAAAAAABASCVXuoLAAAAABepFGNFIA9o0YnhrcDfHE0W6o8UwNvrhyICA7E0HMunaDtq9PEjjNbpfnFn1Wn6xH8eSNR1QYRDVb1GRjBDAiAEJLWO/6qmlOFVnqXJO7/UqJBkIkBVzfBwtncUaUQtBwIfXI6w/qZRbWC4rLM61k7eYOh4W/s6qUuZvfhhUduamgEBBCIAIHcf0YrUWWZt1J89Vk49vEL0yEd042CtoWgWqO1IjVaBAQVHUiEDsTQcy6doO2r08SOM1ul+cWfVafrEfx5I1HVBhENVvUYhA95V0eHayAXj+KWMH7+blMAvPbqv4Sf+/KSZXyb4IIO9Uq4iBgOxNBzLp2g7avTxI4zW6X5xZ9Vp+sR/HkjUdUGEQ1W9RhC0prpnAAAAgAAAAIAEAACAIgYD3lXR4drIBeP4pYwfv5uUwC89uq/hJ/78pJlfJvggg70QtKa6ZwAAAIAAAACABQAAgAAA", false, true},

/* PSBT v0 with a segwit-encoded global transaction (including witnesses) */
{"cHNidP8BAKICAAAAAAEBJ5ojI6XftR/EXyIPpYsPwT4eM0J5KoXX42zWMztcvDkAAAAAAP////8BoFrqCwAAAAAZdqkU/+nABhCXzDtjbyywRg+k/EJ9K0WIrAFJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEglV7qCwAAAAAXqRRjRSAPaNGJ4a3A3xxNFuqPFMDb64ciAgOxNBzLp2g7avTxI4zW6X5xZ9Vp+sR/HkjUdUGEQ1W9RkYwQwIgBCS1jv+qppThVZ6lyTu/1KiQZCJAVc3wcLZ3FGlELQcCH1yOsP6mUW1guKyzOtZO3mDoeFv7OqlLmb34YVHbmpoBAQQiACB3H9GK1FlmbdSfPVZOPbxC9MhHdONgraFoFqjtSI1WgQEFR1IhA7E0HMunaDtq9PEjjNbpfnFn1Wn6xH8eSNR1QYRDVb1GIQPeVdHh2sgF4/iljB+/m5TALz26r+En/vykmV8m+CCDvVKuIgYDsTQcy6doO2r08SOM1ul+cWfVafrEfx5I1HVBhENVvUYQtKa6ZwAAAIAAAACABAAAgCIGA95V0eHayAXj+KWMH7+blMAvPbqv4Sf+/KSZXyb4IIO9ELSmumcAAACAAAAAgAUAAIAAAA==", false, true},

/* PSBT v0 with invalid input witness utxo typed key */
{"cHNidP8BAFUCAAAAASeaIyOl37UfxF8iD6WLD8E+HjNCeSqF1+Ns1jM7XLw5AAAAAAD/////AaBa6gsAAAAAGXapFP/pwAYQl8w7Y28ssEYPpPxCfStFiKwAAAAAAAIBACCVXuoLAAAAABepFGNFIA9o0YnhrcDfHE0W6o8UwNvrhyICA7E0HMunaDtq9PEjjNbpfnFn1Wn6xH8eSNR1QYRDVb1GRjBDAiAEJLWO/6qmlOFVnqXJO7/UqJBkIkBVzfBwtncUaUQtBwIfXI6w/qZRbWC4rLM61k7eYOh4W/s6qUuZvfhhUduamgEBBCIAIHcf0YrUWWZt1J89Vk49vEL0yEd042CtoWgWqO1IjVaBAQVHUiEDsTQcy6doO2r08SOM1ul+cWfVafrEfx5I1HVBhENVvUYhA95V0eHayAXj+KWMH7+blMAvPbqv4Sf+/KSZXyb4IIO9Uq4iBgOxNBzLp2g7avTxI4zW6X5xZ9Vp+sR/HkjUdUGEQ1W9RhC0prpnAAAAgAAAAIAEAACAIgYD3lXR4drIBeP4pYwfv5uUwC89uq/hJ/78pJlfJvggg70QtKa6ZwAAAIAAAACABQAAgAAA", false, true},

Expand Down Expand Up @@ -61,7 +64,7 @@ static const struct psbt_test invalid_psbts[] =
/* PSBT v0 with invalid output witnessScript typed key */
{"cHNidP8BAHMCAAAAATAa6YblFqHsisW0vGVz0y+DtGXiOtdhZ9aLOOcwtNvbAAAAAAD/////AnR7AQAAAAAAF6kUA6oXrogrXQ1Usl1jEE5P/s57nqKHYEOZOwAAAAAXqRS5IbG6b3IuS/qDtlV6MTmYakLsg4cAAAAAAAEBHwDKmjsAAAAAFgAU0tlLZK4IWH7vyO6xh8YB6Tn5A3wAAQAWABRi6emC//NN2COWEDFrCQzSo7dHywABACIAIIdrrYMvHRaAFe1BIyqeploYFdnvE8Dvh1n2S1srJ4plIQEAJVEhA7fOI6AcW0vwCmQlN836uzFbZoMyhnR471EwnQbVf4qHUa4A", false, true},

/* FIXME: Unknown test case */
/* PSBT v0 with invalid output witnessScript typed key (case 2) */
{"cHNidP8BAHMCAAAAATAa6YblFqHsisW0vGVz0y+DtGXiOtdhZ9aLOOcwtNvbAAAAAAD/////AnR7AQAAAAAAF6kUA6oXrogrXQ1Usl1jEE5P/s57nqKHYEOZOwAAAAAXqRS5IbG6b3IuS/qDtlV6MTmYakLsg4cAAAAAAAEBHwDKmjsAAAAAFgAU0tlLZK4IWH7vyO6xh8YB6Tn5A3wAAQAWABRi6emC//NN2COWEDFrCQzSo7dHywABACIAIIdrrYMvHRaAFe1BIyqeploYFdnvE8Dvh1n2S1srJ4plIQEAJVEhA7fOI6AcW0vwCmQlN836uzFbZoMyhnR471EwnSvVf4qHUa4A", false, true},

/* PSBT v0 with unsupported version number */
Expand Down
4 changes: 4 additions & 0 deletions src/ctest/test_psbt.c
Original file line number Diff line number Diff line change
Expand Up @@ -134,8 +134,12 @@ int main(void)
/* Only PSETv2 is supported, so skip round-tripping */
} else if (psbt->version == WALLY_PSBT_VERSION_0) {
/* V0 -> V2 -> V0 */
/* We have to save and restore the tx version as v1 txs
* are upgraded to v2 when the PSBT is upgraded */
uint32_t tx_version = psbt_clone->tx->version;
change_version(psbt_clone, WALLY_PSBT_VERSION_2, base64_in);
change_version(psbt_clone, WALLY_PSBT_VERSION_0, base64_in);
psbt_clone->tx->version = tx_version;
} else if (psbt->version == WALLY_PSBT_VERSION_2) {
/* V2 -> V0 -> V2 */
bool has_per_input_lock = false;
Expand Down
6 changes: 5 additions & 1 deletion src/data/psbt.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@
"comment": "PSBT v0 with invalid global transaction typed key",
"psbt": "cHNidP8CAAFVAgAAAAEnmiMjpd+1H8RfIg+liw/BPh4zQnkqhdfjbNYzO1y8OQAAAAAA/////wGgWuoLAAAAABl2qRT/6cAGEJfMO2NvLLBGD6T8Qn0rRYisAAAAAAABASCVXuoLAAAAABepFGNFIA9o0YnhrcDfHE0W6o8UwNvrhyICA7E0HMunaDtq9PEjjNbpfnFn1Wn6xH8eSNR1QYRDVb1GRjBDAiAEJLWO/6qmlOFVnqXJO7/UqJBkIkBVzfBwtncUaUQtBwIfXI6w/qZRbWC4rLM61k7eYOh4W/s6qUuZvfhhUduamgEBBCIAIHcf0YrUWWZt1J89Vk49vEL0yEd042CtoWgWqO1IjVaBAQVHUiEDsTQcy6doO2r08SOM1ul+cWfVafrEfx5I1HVBhENVvUYhA95V0eHayAXj+KWMH7+blMAvPbqv4Sf+/KSZXyb4IIO9Uq4iBgOxNBzLp2g7avTxI4zW6X5xZ9Vp+sR/HkjUdUGEQ1W9RhC0prpnAAAAgAAAAIAEAACAIgYD3lXR4drIBeP4pYwfv5uUwC89uq/hJ/78pJlfJvggg70QtKa6ZwAAAIAAAACABQAAgAAA"
},
{
"comment": "PSBT v0 with a segwit-encoded global transaction (including witnesses)",
"psbt": "cHNidP8BAKICAAAAAAEBJ5ojI6XftR/EXyIPpYsPwT4eM0J5KoXX42zWMztcvDkAAAAAAP////8BoFrqCwAAAAAZdqkU/+nABhCXzDtjbyywRg+k/EJ9K0WIrAFJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEglV7qCwAAAAAXqRRjRSAPaNGJ4a3A3xxNFuqPFMDb64ciAgOxNBzLp2g7avTxI4zW6X5xZ9Vp+sR/HkjUdUGEQ1W9RkYwQwIgBCS1jv+qppThVZ6lyTu/1KiQZCJAVc3wcLZ3FGlELQcCH1yOsP6mUW1guKyzOtZO3mDoeFv7OqlLmb34YVHbmpoBAQQiACB3H9GK1FlmbdSfPVZOPbxC9MhHdONgraFoFqjtSI1WgQEFR1IhA7E0HMunaDtq9PEjjNbpfnFn1Wn6xH8eSNR1QYRDVb1GIQPeVdHh2sgF4/iljB+/m5TALz26r+En/vykmV8m+CCDvVKuIgYDsTQcy6doO2r08SOM1ul+cWfVafrEfx5I1HVBhENVvUYQtKa6ZwAAAIAAAACABAAAgCIGA95V0eHayAXj+KWMH7+blMAvPbqv4Sf+/KSZXyb4IIO9ELSmumcAAACAAAAAgAUAAIAAAA=="
},
{
"comment": "PSBT v0 with invalid input witness utxo typed key",
"psbt": "cHNidP8BAFUCAAAAASeaIyOl37UfxF8iD6WLD8E+HjNCeSqF1+Ns1jM7XLw5AAAAAAD/////AaBa6gsAAAAAGXapFP/pwAYQl8w7Y28ssEYPpPxCfStFiKwAAAAAAAIBACCVXuoLAAAAABepFGNFIA9o0YnhrcDfHE0W6o8UwNvrhyICA7E0HMunaDtq9PEjjNbpfnFn1Wn6xH8eSNR1QYRDVb1GRjBDAiAEJLWO/6qmlOFVnqXJO7/UqJBkIkBVzfBwtncUaUQtBwIfXI6w/qZRbWC4rLM61k7eYOh4W/s6qUuZvfhhUduamgEBBCIAIHcf0YrUWWZt1J89Vk49vEL0yEd042CtoWgWqO1IjVaBAQVHUiEDsTQcy6doO2r08SOM1ul+cWfVafrEfx5I1HVBhENVvUYhA95V0eHayAXj+KWMH7+blMAvPbqv4Sf+/KSZXyb4IIO9Uq4iBgOxNBzLp2g7avTxI4zW6X5xZ9Vp+sR/HkjUdUGEQ1W9RhC0prpnAAAAgAAAAIAEAACAIgYD3lXR4drIBeP4pYwfv5uUwC89uq/hJ/78pJlfJvggg70QtKa6ZwAAAIAAAACABQAAgAAA"
Expand Down Expand Up @@ -73,7 +77,7 @@
"psbt": "cHNidP8BAHMCAAAAATAa6YblFqHsisW0vGVz0y+DtGXiOtdhZ9aLOOcwtNvbAAAAAAD/////AnR7AQAAAAAAF6kUA6oXrogrXQ1Usl1jEE5P/s57nqKHYEOZOwAAAAAXqRS5IbG6b3IuS/qDtlV6MTmYakLsg4cAAAAAAAEBHwDKmjsAAAAAFgAU0tlLZK4IWH7vyO6xh8YB6Tn5A3wAAQAWABRi6emC//NN2COWEDFrCQzSo7dHywABACIAIIdrrYMvHRaAFe1BIyqeploYFdnvE8Dvh1n2S1srJ4plIQEAJVEhA7fOI6AcW0vwCmQlN836uzFbZoMyhnR471EwnQbVf4qHUa4A"
},
{
"comment": "FIXME: Unknown test case",
"comment": "PSBT v0 with invalid output witnessScript typed key (case 2)",
"psbt": "cHNidP8BAHMCAAAAATAa6YblFqHsisW0vGVz0y+DtGXiOtdhZ9aLOOcwtNvbAAAAAAD/////AnR7AQAAAAAAF6kUA6oXrogrXQ1Usl1jEE5P/s57nqKHYEOZOwAAAAAXqRS5IbG6b3IuS/qDtlV6MTmYakLsg4cAAAAAAAEBHwDKmjsAAAAAFgAU0tlLZK4IWH7vyO6xh8YB6Tn5A3wAAQAWABRi6emC//NN2COWEDFrCQzSo7dHywABACIAIIdrrYMvHRaAFe1BIyqeploYFdnvE8Dvh1n2S1srJ4plIQEAJVEhA7fOI6AcW0vwCmQlN836uzFbZoMyhnR471EwnSvVf4qHUa4A"
},
{
Expand Down
Loading
Loading