orangecheck 2.3.0__tar.gz → 2.3.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. {orangecheck-2.3.0 → orangecheck-2.3.1}/CHANGELOG.md +11 -0
  2. {orangecheck-2.3.0 → orangecheck-2.3.1}/PKG-INFO +1 -1
  3. {orangecheck-2.3.0 → orangecheck-2.3.1}/orangecheck/__init__.py +1 -1
  4. {orangecheck-2.3.0 → orangecheck-2.3.1}/orangecheck/verify_sig.py +11 -2
  5. {orangecheck-2.3.0 → orangecheck-2.3.1}/pyproject.toml +1 -1
  6. orangecheck-2.3.1/tests/fixtures/bip322-official-basic.json +137 -0
  7. orangecheck-2.3.1/tests/fixtures/bip322-official-generated.json +551 -0
  8. {orangecheck-2.3.0 → orangecheck-2.3.1}/tests/pledge/test_vectors.py +2 -5
  9. {orangecheck-2.3.0 → orangecheck-2.3.1}/tests/pledge/test_wrap.py +5 -1
  10. orangecheck-2.3.1/tests/test_bip322_official.py +52 -0
  11. {orangecheck-2.3.0 → orangecheck-2.3.1}/.gitignore +0 -0
  12. {orangecheck-2.3.0 → orangecheck-2.3.1}/README.md +0 -0
  13. {orangecheck-2.3.0 → orangecheck-2.3.1}/orangecheck/__main__.py +0 -0
  14. {orangecheck-2.3.0 → orangecheck-2.3.1}/orangecheck/bond.py +0 -0
  15. {orangecheck-2.3.0 → orangecheck-2.3.1}/orangecheck/canonical.py +0 -0
  16. {orangecheck-2.3.0 → orangecheck-2.3.1}/orangecheck/client.py +0 -0
  17. {orangecheck-2.3.0 → orangecheck-2.3.1}/orangecheck/errors.py +0 -0
  18. {orangecheck-2.3.0 → orangecheck-2.3.1}/orangecheck/integrator.py +0 -0
  19. {orangecheck-2.3.0 → orangecheck-2.3.1}/orangecheck/pledge/__init__.py +0 -0
  20. {orangecheck-2.3.0 → orangecheck-2.3.1}/orangecheck/pledge/bond.py +0 -0
  21. {orangecheck-2.3.0 → orangecheck-2.3.1}/orangecheck/pledge/canonical.py +0 -0
  22. {orangecheck-2.3.0 → orangecheck-2.3.1}/orangecheck/pledge/delegation.py +0 -0
  23. {orangecheck-2.3.0 → orangecheck-2.3.1}/orangecheck/pledge/envelopes.py +0 -0
  24. {orangecheck-2.3.0 → orangecheck-2.3.1}/orangecheck/pledge/resolution.py +0 -0
  25. {orangecheck-2.3.0 → orangecheck-2.3.1}/orangecheck/pledge/state.py +0 -0
  26. {orangecheck-2.3.0 → orangecheck-2.3.1}/orangecheck/py.typed +0 -0
  27. {orangecheck-2.3.0 → orangecheck-2.3.1}/orangecheck/top_level.py +0 -0
  28. {orangecheck-2.3.0 → orangecheck-2.3.1}/orangecheck/types.py +0 -0
  29. {orangecheck-2.3.0 → orangecheck-2.3.1}/tests/pledge/__init__.py +0 -0
  30. {orangecheck-2.3.0 → orangecheck-2.3.1}/tests/pledge/test_authority.py +0 -0
  31. {orangecheck-2.3.0 → orangecheck-2.3.1}/tests/pledge/test_delegation.py +0 -0
  32. {orangecheck-2.3.0 → orangecheck-2.3.1}/tests/test_bond_address.py +0 -0
  33. {orangecheck-2.3.0 → orangecheck-2.3.1}/tests/test_client.py +0 -0
  34. {orangecheck-2.3.0 → orangecheck-2.3.1}/tests/test_client_failure_modes.py +0 -0
  35. {orangecheck-2.3.0 → orangecheck-2.3.1}/tests/test_conformance.py +0 -0
  36. {orangecheck-2.3.0 → orangecheck-2.3.1}/tests/test_integrator_vectors.py +0 -0
  37. {orangecheck-2.3.0 → orangecheck-2.3.1}/tests/vectors/index.json +0 -0
  38. {orangecheck-2.3.0 → orangecheck-2.3.1}/tests/vectors/tv01.json +0 -0
  39. {orangecheck-2.3.0 → orangecheck-2.3.1}/tests/vectors/tv02.json +0 -0
  40. {orangecheck-2.3.0 → orangecheck-2.3.1}/tests/vectors/tv03.json +0 -0
  41. {orangecheck-2.3.0 → orangecheck-2.3.1}/tests/vectors/tv04.json +0 -0
  42. {orangecheck-2.3.0 → orangecheck-2.3.1}/tests/vectors/tv05.json +0 -0
  43. {orangecheck-2.3.0 → orangecheck-2.3.1}/tests/vectors/tv06.json +0 -0
  44. {orangecheck-2.3.0 → orangecheck-2.3.1}/tests/vectors/tv07.json +0 -0
  45. {orangecheck-2.3.0 → orangecheck-2.3.1}/tests/vectors/tv08.json +0 -0
  46. {orangecheck-2.3.0 → orangecheck-2.3.1}/tests/vectors/tv09.json +0 -0
  47. {orangecheck-2.3.0 → orangecheck-2.3.1}/tests/vectors/tv10.json +0 -0
  48. {orangecheck-2.3.0 → orangecheck-2.3.1}/tests/vectors/tv11.json +0 -0
  49. {orangecheck-2.3.0 → orangecheck-2.3.1}/tests/vectors/tv12.json +0 -0
  50. {orangecheck-2.3.0 → orangecheck-2.3.1}/tests/vectors/tv13.json +0 -0
  51. {orangecheck-2.3.0 → orangecheck-2.3.1}/tests/vectors/tv14.json +0 -0
  52. {orangecheck-2.3.0 → orangecheck-2.3.1}/tests/vectors/tv15.json +0 -0
  53. {orangecheck-2.3.0 → orangecheck-2.3.1}/tests/vectors/tv16.json +0 -0
  54. {orangecheck-2.3.0 → orangecheck-2.3.1}/tests/vectors/tv17.json +0 -0
  55. {orangecheck-2.3.0 → orangecheck-2.3.1}/tests/vectors/tv18.json +0 -0
  56. {orangecheck-2.3.0 → orangecheck-2.3.1}/tests/vectors/tv19.json +0 -0
  57. {orangecheck-2.3.0 → orangecheck-2.3.1}/tests/vectors/tv20.json +0 -0
  58. {orangecheck-2.3.0 → orangecheck-2.3.1}/tests/vectors/tv21.json +0 -0
  59. {orangecheck-2.3.0 → orangecheck-2.3.1}/tests/vectors/tv22.json +0 -0
  60. {orangecheck-2.3.0 → orangecheck-2.3.1}/tests/vectors/tv23.json +0 -0
  61. {orangecheck-2.3.0 → orangecheck-2.3.1}/tests/vectors/tv24.json +0 -0
  62. {orangecheck-2.3.0 → orangecheck-2.3.1}/tests/vectors/tv25.json +0 -0
  63. {orangecheck-2.3.0 → orangecheck-2.3.1}/tests/vectors/tv26.json +0 -0
  64. {orangecheck-2.3.0 → orangecheck-2.3.1}/tests/vectors/tv27.json +0 -0
  65. {orangecheck-2.3.0 → orangecheck-2.3.1}/tests/vectors/tv28.json +0 -0
@@ -4,6 +4,17 @@ All notable changes to the **`orangecheck`** Python package. Follows
4
4
  [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and
5
5
  [Semantic Versioning](https://semver.org/).
6
6
 
7
+ ## [2.3.1] — 2026-10-21
8
+
9
+ ### Fixed — signatures from wallets that follow the finalized BIP-322
10
+
11
+ - `verify_bip322_signature` accepts a simple signature with the `smp` prefix
12
+ the finalized BIP-322 requires of signers, as well as without it. Before,
13
+ every prefixed signature returned `False`. A `ful` or `pof` signature is not
14
+ supported and returns `False`, as in `@orangecheck/bip322` 1.1.
15
+ - Tests run the BIP's official vectors (bitcoin/bips `d77863fb9e9b`), the same
16
+ files the TypeScript package uses.
17
+
7
18
  ## [2.3.0] — 2026-10-20
8
19
 
9
20
  For a site that signs people in with ochk.app and runs a Python backend.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: orangecheck
3
- Version: 2.3.0
3
+ Version: 2.3.1
4
4
  Summary: Python SDK for OrangeCheck — proof of Bitcoin stake, the OC Pledge primitive, and ochk.app sign-in for your backend.
5
5
  Project-URL: Homepage, https://ochk.io
6
6
  Project-URL: Documentation, https://ochk.io/docs
@@ -133,7 +133,7 @@ __all__ = [
133
133
  "VerificationError",
134
134
  ]
135
135
 
136
- __version__ = "2.3.0"
136
+ __version__ = "2.3.1"
137
137
 
138
138
  # OC Pledge submodule — sibling primitive for forward-looking commitments
139
139
  # bound to a Bitcoin address. Imported here so consumers can write:
@@ -11,6 +11,10 @@ convention.
11
11
  when ``signature`` is a valid BIP-322 simple signature over ``message``
12
12
  for ``address``, ``False`` otherwise. Never raises for cryptographic
13
13
  failures — only for a missing optional dependency (at import time).
14
+
15
+ The finalized BIP-322 prefixes a simple signature with ``smp``; it is
16
+ accepted with or without the prefix, as ``@orangecheck/bip322`` 1.1 does.
17
+ A ``ful`` or ``pof`` signature is not supported and returns ``False``.
14
18
  """
15
19
 
16
20
  from __future__ import annotations
@@ -38,14 +42,19 @@ def verify_bip322_signature(address: str, message: str, signature: str) -> bool:
38
42
  attestations this is the canonical message produced by
39
43
  ``build_canonical_message``.
40
44
  signature:
41
- Base64-encoded BIP-322 "simple" signature. Hex is NOT accepted —
42
- normalize to base64 before calling.
45
+ Base64-encoded BIP-322 "simple" signature, with or without the
46
+ finalized BIP's ``smp`` prefix. Hex is NOT accepted — normalize to
47
+ base64 before calling.
43
48
 
44
49
  Returns
45
50
  -------
46
51
  True if the signature verifies; False otherwise. Never raises for
47
52
  invalid / malformed signatures.
48
53
  """
54
+ if signature.startswith(("ful", "pof")):
55
+ return False
56
+ if signature.startswith("smp"):
57
+ signature = signature[3:]
49
58
  try:
50
59
  _bip322.verify_simple_encoded(address, message, signature)
51
60
  except _bip322.VerificationError:
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "orangecheck"
7
- version = "2.3.0"
7
+ version = "2.3.1"
8
8
  description = "Python SDK for OrangeCheck — proof of Bitcoin stake, the OC Pledge primitive, and ochk.app sign-in for your backend."
9
9
  readme = "README.md"
10
10
  license = { text = "MIT" }
@@ -0,0 +1,137 @@
1
+ {
2
+ "tx_hashes": [
3
+ {
4
+ "message": "",
5
+ "address": "bc1q9vza2e8x573nczrlzms0wvx3gsqjx7vavgkx0l",
6
+ "message_hash": "c90c269c4f8fcbe6880f72a721ddfbf1914268a794cbb21cfafee13770ae19f1",
7
+ "to_spend_tx_hash": "c5680aa69bb8d860bf82d4e9cd3504b55dde018de765a91bb566283c545a99a7",
8
+ "to_sign_tx_hash": "1e9654e951a5ba44c8604c4de6c67fd78a27e81dcadcfe1edf638ba3aaebaed6"
9
+ },
10
+ {
11
+ "message": "Hello World",
12
+ "address": "bc1q9vza2e8x573nczrlzms0wvx3gsqjx7vavgkx0l",
13
+ "message_hash": "f0eb03b1a75ac6d9847f55c624a99169b5dccba2a31f5b23bea77ba270de0a7a",
14
+ "to_spend_tx_hash": "b79d196740ad5217771c1098fc4a4b51e0535c32236c71f1ea4d61a2d603352b",
15
+ "to_sign_tx_hash": "88737ae86f2077145f93cc4b153ae9a1cb8d56afa511988c149c5c8c9d93bddf"
16
+ },
17
+ {
18
+ "message": "UTF-8 support: öäüéàè 测试文本 \uD83D\uDE04",
19
+ "address": "bc1q9vza2e8x573nczrlzms0wvx3gsqjx7vavgkx0l",
20
+ "message_hash": "43936b237ea38c7794eb5d755e0d220b6db92ebfc5c8f482759d22b1286376d7",
21
+ "to_spend_tx_hash": "c8f4f525fe8afb1bc09b44175bd2096f079c98425e8a1be676b712add1fb62f0",
22
+ "to_sign_tx_hash": "8f488e06b89eafd019ec528109eafaf7f1d1811fd617aa1eeb9658f1c1be6586"
23
+ }
24
+ ],
25
+ "simple": [
26
+ {
27
+ "message": "",
28
+ "private_keys": [
29
+ "L3VFeEujGtevx9w18HD1fhRbCH67Az2dpCymeRE1SoPK6XQtaN2k"
30
+ ],
31
+ "address": "bc1q9vza2e8x573nczrlzms0wvx3gsqjx7vavgkx0l",
32
+ "type": "p2wpkh",
33
+ "witness_script": "",
34
+ "bip322_signatures": [
35
+ "smpAkcwRAIgM2gBAQqvZX15ZiysmKmQpDrG83avLIT492QBzLnQIxYCIBaTpOaD20qRlEylyxFSeEA2ba9YOixpX8z46TSDtS40ASECx/EgAxlkQpQ9hYjgGu6EBCPMVPwVIVJqO4XCsMvViHI=",
36
+ "smpAkgwRQIhAPkJ1Q4oYS0htvyuSFHLxRQpFAY56b70UvE7Dxazen0ZAiAtZfFz1S6T6I23MWI2lK/pcNTWncuyL8UL+oMdydVgzAEhAsfxIAMZZEKUPYWI4BruhAQjzFT8FSFSajuFwrDL1Yhy"
37
+ ]
38
+ },
39
+ {
40
+ "message": "Hello World",
41
+ "private_keys": [
42
+ "L3VFeEujGtevx9w18HD1fhRbCH67Az2dpCymeRE1SoPK6XQtaN2k"
43
+ ],
44
+ "address": "bc1q9vza2e8x573nczrlzms0wvx3gsqjx7vavgkx0l",
45
+ "type": "p2wpkh",
46
+ "witness_script": "",
47
+ "bip322_signatures": [
48
+ "smpAkcwRAIgZRfIY3p7/DoVTty6YZbWS71bc5Vct9p9Fia83eRmw2QCICK/ENGfwLtptFluMGs2KsqoNSk89pO7F29zJLUx9a/sASECx/EgAxlkQpQ9hYjgGu6EBCPMVPwVIVJqO4XCsMvViHI=",
49
+ "smpAkgwRQIhAOzyynlqt93lOKJr+wmmxIens//zPzl9tqIOua93wO6MAiBi5n5EyAcPScOjf1lAqIUIQtr3zKNeavYabHyR8eGhowEhAsfxIAMZZEKUPYWI4BruhAQjzFT8FSFSajuFwrDL1Yhy"
50
+ ]
51
+ },
52
+ {
53
+ "message": "This will be a p2wsh 3-of-3 multisig BIP 322 signed message",
54
+ "private_keys": [
55
+ "L4DksdGZ4KQJfcLHD5Dv25fu8Rxyv7hHi2RjZR4TYzr8c6h9VNrp",
56
+ "KzSRqnCVwjzY8id2X5oHEJWXkSHwKUYaAXusjwgkES8BuQPJnPNu",
57
+ "L1zt9Rw7HrU7jaguMbVzhiX8ffuVkmMis5wLHddXYuHWYf8u8uRj"
58
+ ],
59
+ "address": "bc1qp0ahvfh83088w49k405szqgg4f3pptr7p2g06tdxfjcd40z4lh4q95lsz9",
60
+ "type": "p2wsh-multisig-3of3",
61
+ "witness_script": "5321027568b11f122ff8a7bc1c57e5c7642055bc618967b2f7bfe8e11fe99903c94dd321020a8bdf79cfa421d9655e9282800f115ff1d9db1e721ceb4248a3fcfec7faa67c21030c529e0ea40a00975d202624e39915daf7bdd2b71f31aa08596838781ce5f33a53ae",
62
+ "bip322_signatures": [
63
+ "smpBQBHMEQCIFX9aaqPJWq2Ff2kpen5bFDTid+ehgUOpHV0LfjncXy4AiA3GNicF7aKPzdpa9PCpmaYQs3pHd+qbvvhXdxOCKCAMAFIMEUCIQD/ELXg6CNYyUQijCg96JtgvgjZb9dsl1Ctof4QAeyTcQIgVM/1AAblFl/DCt6A1gJg+T/i2qU5SQD09+chFJzolRwBSDBFAiEAlqRfSFyWNVQhvaCnmeV5tyneiCWMTcFbuujoD/pFa3wCIGnZjfQb8NolSYq9asV+ZeBSkCGHJcqnaV4JYS5MYPEGAWlTIQJ1aLEfEi/4p7wcV+XHZCBVvGGJZ7L3v+jhH+mZA8lN0yECCovfec+kIdllXpKCgA8RX/HZ2x5yHOtCSKP8/sf6pnwhAwxSng6kCgCXXSAmJOOZFdr3vdK3HzGqCFloOHgc5fM6U64="
64
+ ]
65
+ },
66
+ {
67
+ "message": "No prefix fallback",
68
+ "private_keys": [
69
+ "KyrSGCFPhqZMjCe5fNTYddiLMp4tMj4gLKuJ26TsB2rvr1VJGPbt"
70
+ ],
71
+ "address": "bc1pss0zhytly75awhm6x2hhvd5lnzv3vssgrf9axfheq8ldyzn88ges79fler",
72
+ "type": "p2tr",
73
+ "witness_script": "",
74
+ "bip322_signatures": [
75
+ "AUCJYOwOjxYAvatTAGYaVlNXBVyFuc4MwNQkOuK2tl8xhfKDONd0NjfYyNSYcRqeCp8hsAnCEPHAVEkO9h6vbQ/R"
76
+ ]
77
+ }
78
+ ],
79
+ "error": [
80
+ {
81
+ "description": "invalid base64 encoding",
82
+ "message": "",
83
+ "address": "bc1q9vza2e8x573nczrlzms0wvx3gsqjx7vavgkx0l",
84
+ "signature": "not-valid-base64!!!",
85
+ "error_substr": "base64"
86
+ },
87
+ {
88
+ "description": "empty signature",
89
+ "message": "",
90
+ "address": "bc1q9vza2e8x573nczrlzms0wvx3gsqjx7vavgkx0l",
91
+ "signature": "",
92
+ "error_substr": "signature too short"
93
+ },
94
+ {
95
+ "description": "wrong message for valid simple p2wpkh signature (empty message was signed)",
96
+ "message": "Wrong message that was not signed",
97
+ "address": "bc1q9vza2e8x573nczrlzms0wvx3gsqjx7vavgkx0l",
98
+ "signature": "smpAkcwRAIgM2gBAQqvZX15ZiysmKmQpDrG83avLIT492QBzLnQIxYCIBaTpOaD20qRlEylyxFSeEA2ba9YOixpX8z46TSDtS40ASECx/EgAxlkQpQ9hYjgGu6EBCPMVPwVIVJqO4XCsMvViHI=",
99
+ "error_substr": "invalid signature"
100
+ },
101
+ {
102
+ "description": "wrong address for valid simple p2wpkh signature (signed for different address)",
103
+ "message": "",
104
+ "address": "bc1qp0ahvfh83088w49k405szqgg4f3pptr7p2g06tdxfjcd40z4lh4q95lsz9",
105
+ "signature": "smpAkcwRAIgM2gBAQqvZX15ZiysmKmQpDrG83avLIT492QBzLnQIxYCIBaTpOaD20qRlEylyxFSeEA2ba9YOixpX8z46TSDtS40ASECx/EgAxlkQpQ9hYjgGu6EBCPMVPwVIVJqO4XCsMvViHI=",
106
+ "error_substr": "invalid signature"
107
+ },
108
+ {
109
+ "description": "empty witness stack (single zero byte)",
110
+ "message": "",
111
+ "address": "bc1q9vza2e8x573nczrlzms0wvx3gsqjx7vavgkx0l",
112
+ "signature": "smpAA==",
113
+ "error_substr": "invalid signature"
114
+ },
115
+ {
116
+ "description": "wrong message for valid simple p2wsh 3-of-3 multisig signature",
117
+ "message": "This is not the message that was signed",
118
+ "address": "bc1qp0ahvfh83088w49k405szqgg4f3pptr7p2g06tdxfjcd40z4lh4q95lsz9",
119
+ "signature": "smpBQBHMEQCIFX9aaqPJWq2Ff2kpen5bFDTid+ehgUOpHV0LfjncXy4AiA3GNicF7aKPzdpa9PCpmaYQs3pHd+qbvvhXdxOCKCAMAFIMEUCIQD/ELXg6CNYyUQijCg96JtgvgjZb9dsl1Ctof4QAeyTcQIgVM/1AAblFl/DCt6A1gJg+T/i2qU5SQD09+chFJzolRwBSDBFAiEAlqRfSFyWNVQhvaCnmeV5tyneiCWMTcFbuujoD/pFa3wCIGnZjfQb8NolSYq9asV+ZeBSkCGHJcqnaV4JYS5MYPEGAWlTIQJ1aLEfEi/4p7wcV+XHZCBVvGGJZ7L3v+jhH+mZA8lN0yECCovfec+kIdllXpKCgA8RX/HZ2x5yHOtCSKP8/sf6pnwhAwxSng6kCgCXXSAmJOOZFdr3vdK3HzGqCFloOHgc5fM6U64=",
120
+ "error_substr": "invalid signature"
121
+ },
122
+ {
123
+ "description": "invalid signature prefix",
124
+ "message": "",
125
+ "address": "bc1q9vza2e8x573nczrlzms0wvx3gsqjx7vavgkx0l",
126
+ "signature": "fooAA==",
127
+ "error_substr": "error decoding signature as base64"
128
+ },
129
+ {
130
+ "description": "incorrect prefix type",
131
+ "message": "incorrect prefix",
132
+ "address": "bc1pyrgrm6cu6n54jrvkdjd9rvyd3xfyu84s2623awu2srn6mxhscwpsm5644w",
133
+ "signature": "fulAUDZwFXUp+adN+/UZj5dVrGAbB3zKs1Vcalz5fCF9srxS63eSWNGvH1NYbrBkPt1BJDUyWUz9zgUxfc63/QheT6M",
134
+ "error_substr": "error parsing signature as full variant"
135
+ }
136
+ ]
137
+ }
@@ -0,0 +1,551 @@
1
+ {
2
+ "simple": [
3
+ {
4
+ "message": "2V6TUTMSH4VQ3Z7WZWKYD7DFNH",
5
+ "private_keys": [
6
+ "KySmn2yeCukjHXnSu3M6vX7tNok4weu1FKbNEuVvm2b3ZidKhB4L"
7
+ ],
8
+ "address": "bc1qqthe0hz8klx90e7stf6shclhsvqd5ly96pn53v",
9
+ "type": "p2wpkh",
10
+ "witness_script": "",
11
+ "bip322_signatures": [
12
+ "smpAkgwRQIhALC6hdfxNy1n45d7UXSskRBdfZW0Al259E1kDMpipdYkAiAJPfZqb+WurZuf1apU5xeE6Igui9dvt5tihQLDvxlY1AEhAqbnruyo677ktQjio7XOchO3w51Dh9AbRVngha5jtNfT"
13
+ ]
14
+ },
15
+ {
16
+ "message": "PURVOQ544B6HUATVBJZN5EZJUU",
17
+ "private_keys": [
18
+ "L5XqN6ckPPsDiTbRxcsthwiWpDBfWLo4uquUEydsPt8rSMoTpqpc"
19
+ ],
20
+ "address": "bc1pcquvhrqv0q68t4m0hfq6tpn006qrskyc7yrqnp2uyrf2emg3wynsdjyk38",
21
+ "type": "p2tr",
22
+ "witness_script": "",
23
+ "bip322_signatures": [
24
+ "smpAUB6B2Rbupzua8LTQIF06516wzl+cwKy1be8RgoiW0riyXdKwe6GTz/5Hnb37m67pJwIKCh+D5jDueG6KpvYpmu8"
25
+ ]
26
+ },
27
+ {
28
+ "message": "G7ZTXXOVJFHGDD6XYJAGBAMT5A",
29
+ "private_keys": [
30
+ "L1jKMveHa8DnPfPVcVsz5r5FHe3D6KdPyBiQSND14uGyMMc8mAcK",
31
+ "L3P5FL8vCZLyDYrHekomd76KTFb7dnXiiLHc1dhs4CfKKTa5BSRd"
32
+ ],
33
+ "address": "bc1qw6g0rgrpuxvj4edkwtvzpmt3c5m08mhp8nuk3mrk4erufvlczp5ssdscjd",
34
+ "type": "p2wsh-multisig-2of2",
35
+ "witness_script": "5221036cbbf3b066eac7bc9328889a120269821cba2a21ce566e587eade93eeeb84048210281856452ca5e031c117cceafe0644184dfe01b14dfa4fa99b8e9412186714c9652ae",
36
+ "bip322_signatures": [
37
+ "smpBABIMEUCIQCKl1f9Cj26k0fFWE48+O4ibhYJYPytbDZWJRaaG9BybwIgCbk+3BViWkpuu2RI+41dwtlQ/m/01G860pTFCzDFfokBSDBFAiEA0O77DJsaM7IO+Ht06sp3umzXB64CNNOwf2isZuPfdmwCIGlggOwRSkXsqlPhE1gMdd5hf7ycL33Orfrr4v/XnMGSAUdSIQNsu/OwZurHvJMoiJoSAmmCHLoqIc5Wblh+rek+7rhASCECgYVkUspeAxwRfM6v4GRBhN/gGxTfpPqZuOlBIYZxTJZSrg=="
38
+ ]
39
+ },
40
+ {
41
+ "message": "Z3SB7SRL555ZGOHVMYT5WG7RIZ",
42
+ "private_keys": [
43
+ "L3QqMaMh8XnkLFGe8gAL4J1ko1froHUzFAJBxy4u5QPNf8Cp36if",
44
+ "L1j2AddkFs9aKz6tCPd99CaYHUVmqVZHt1HHESWajvFsQeTobyJi",
45
+ "KwEoVwAeuWQBiRhp76wD6siaxkj3rCrjHeG2xRMLtngbZbq8w88a"
46
+ ],
47
+ "address": "bc1qazhmhwl9sxgjmwnd96hh926s3x5l0cf64yy6hvyn6qms438x550qy5sgva",
48
+ "type": "p2wsh-multisig-3of3",
49
+ "witness_script": "532102a8d34dd98e3f4983f913eec380edc4dd20a9b3b2b218040b8f77d863f0566e1c2102e8175a94cb706e3731daf26355e96fec1266974ad8ed0e737be3d67a7ead6f9b21032b697ab95806cebdb5b9fceadde920da97cb4373b6d2992a2e98f17f944905da53ae",
50
+ "bip322_signatures": [
51
+ "smpBQBHMEQCICNI6H6b+VCZV9Z2H6EW5hPrE1buC6SJuy2ljSNmQlGfAiASbm5UrA8KH6TwF6evx7COV+i27ubiq2v9TyLYPOO63gFIMEUCIQCMOFnJbg0sy88G6wUXjv5stjVgfvAokOogWsisdkAnlAIgETfBw7kJhISFu9vIomFcEF/1NsN6c0h3KjNcpmNAZtMBSDBFAiEA/lUU+wBeA3prt8vHRpcQN763OYZ8L61DfN0QI/gkHpMCIB2qHwgoXNTH0sdqeAMD2ah7dSTie2bflax3Q3I/GibQAWlTIQKo003Zjj9Jg/kT7sOA7cTdIKmzsrIYBAuPd9hj8FZuHCEC6BdalMtwbjcx2vJjVelv7BJml0rY7Q5ze+PWen6tb5shAytperlYBs69tbn86t3pINqXy0NzttKZKi6Y8X+USQXaU64="
52
+ ]
53
+ }
54
+ ],
55
+ "full": [
56
+ {
57
+ "message": "MOISC5NCQ42ADH2SUXLELUJOWH",
58
+ "private_keys": [
59
+ "L2yn1ozY4azVxNzF2TLzGhmWQXnR2hoCZG5hCppQ4oxLtnq2CpM7"
60
+ ],
61
+ "address": "13vU5PUSuArDXJdCWZvUFEbgJ2wcmtSJWn",
62
+ "type": "p2pkh",
63
+ "witness_script": "",
64
+ "bip322_signatures": [
65
+ "fulAgAAAAGn3Z6t/gsHNyHdgZTOVro0Hej+qbd/ilU1ACalKoHX3gAAAABqRzBEAiB+8t/tm8Jm6zYv9JGZZVlAUjmqg7ZglIA39U+bim8EKQIgDv3E5cHOagN+xYgN3ZQjTYlAJp/WyslwJWuFP1TmM3IBIQJcPK2h9SY+Ki1oussvHnMdFAhJgsYBFPl+rNcMv9P1ROAHAAABAAAAAAAAAAABauAHAAA="
66
+ ],
67
+ "sig_script": "",
68
+ "tx_version": 2,
69
+ "lock_time": 2016,
70
+ "sequence": 2016
71
+ },
72
+ {
73
+ "message": "KLE5MMJBTNF4AVZXIO3GIL5UWF",
74
+ "private_keys": [
75
+ "L35XkdYZZ9u9hj6hqDzc3iuRGGXx1GhmaMMr6sVAMMrd4AKBkhUp"
76
+ ],
77
+ "address": "bc1qrqtlzcq86850yzgsyq9sssawx2qxlx5yq3xpkd",
78
+ "type": "p2wpkh",
79
+ "witness_script": "",
80
+ "bip322_signatures": [
81
+ "fulAgAAAAABAUrfzHHOLAKmgCIFSTT3krp+cQxj1BDPBN4GBg3tRmFXAAAAAADgBwAAAQAAAAAAAAAAAWoCSDBFAiEAjYj85zyhQKa9DbMO0reDwdhkNwKJkF3q2qFcijXDgMUCIAaQ75s3fwqrCeYIUJugLvhxZFxQIVquGN90vIKCW3QLASEDMurnDzvc0zABUwVwCADfGXoDx/M3SQnYt7e3IHDoU3PgBwAA"
82
+ ],
83
+ "sig_script": "",
84
+ "tx_version": 2,
85
+ "lock_time": 2016,
86
+ "sequence": 2016
87
+ },
88
+ {
89
+ "message": "XQMVC3YR6AOGZIHLSUQ2NSSBI2",
90
+ "private_keys": [
91
+ "L5CuoheLtRPk2uVtg2Ph55QpJ3Q5yvsM3hm3ThuGdCuBwA1KS6ua"
92
+ ],
93
+ "address": "bc1pve87s3l2levjmhetzr2f9xvep3y266xty0hnefmyv8tkxc3e4qssll2kdu",
94
+ "type": "p2tr",
95
+ "witness_script": "",
96
+ "bip322_signatures": [
97
+ "fulAgAAAAABAROFPNY6Zt8hFK0YQq5Wb6wk/CnUYEPtQ0HTHDyzNROrAAAAAADgBwAAAQAAAAAAAAAAAWoBQNRdLOo5XZY0SBqAsLZNr/z3Bqrmo3OxVn7e4tD/OOD4H9U/L1unq5Nmdz+S1w7SHtt46bFwnd8xnRVan8BofFfgBwAA"
98
+ ],
99
+ "sig_script": "",
100
+ "tx_version": 2,
101
+ "lock_time": 2016,
102
+ "sequence": 2016
103
+ },
104
+ {
105
+ "message": "AY2VOQOXYI5CN2EHZKLOX7ZI37",
106
+ "private_keys": [
107
+ "Ky3KEGLA6cqhsWeBQkCEi5CjEvEP1BBR9Y5iipU6XEo6UfLXvh3e"
108
+ ],
109
+ "address": "bc1p6vffkx7vcyezrjq7pg9qqdjv7vmtanfhk8ukwsn4syejwmarmhxqp0rw5x",
110
+ "type": "p2tr-time-lock",
111
+ "witness_script": "6320ad87d784e921d02bf0b89a41f8eded6a5d8409f3b4bfb935fc0e0f4e519c42206702e007b275202632e7e2d979cad802f02353c884d79a0e2bc7d72dc4f79dc1130f101bdfa14068ac",
112
+ "bip322_signatures": [
113
+ "fulAgAAAAABAaza7/ukfX9ZdxCUvK7CPJgADDdPdF7ikXVKWctd5EHrAAAAAADgBwAAAQAAAAAAAAAAAWoEQPvuT0enYGwsab2lsPZU0U3OcRkGng+o/PAt4QU2lc8hG7lTUmflkt0To+eoipv2vptf0TlGOBCsKU5xE3kXKcMAS2MgrYfXhOkh0CvwuJpB+O3tal2ECfO0v7k1/A4PTlGcQiBnAuAHsnUgJjLn4tl5ytgC8CNTyITXmg4rx9ctxPedwRMPEBvfoUBorCHBJjLn4tl5ytgC8CNTyITXmg4rx9ctxPedwRMPEBvfoUDgBwAA"
114
+ ],
115
+ "sig_script": "",
116
+ "tx_version": 2,
117
+ "lock_time": 2016,
118
+ "sequence": 2016
119
+ },
120
+ {
121
+ "message": "EMYGZHEY3LIANYKCR7XJF3NMFQ",
122
+ "private_keys": [
123
+ "L1n3XXc2AAVq8puHyQNL9NmVNRDUox1ENeuk7muALGrEo85wGQag"
124
+ ],
125
+ "address": "32Utb7Seg6EXq7UesMNJXhQ1gdohYNyzQ9",
126
+ "type": "p2sh-p2wpkh",
127
+ "witness_script": "",
128
+ "bip322_signatures": [
129
+ "fulAgAAAAABAe5xLNMlYQH4OGjJ3h4lqQaVp0Cic7mwxkvyWswqFMXeAAAAABcWABSy/hpDH/KLAi4x25Tmb2UaO1xtWeAHAAABAAAAAAAAAAABagJHMEQCIDEleqb0n1R5c21TGkWRXNFae98wbwI0QOyh/YmRuQX1AiAcv1MhyTzPOVgZ1VIwuu0tDxrVJUHK8lhOUOXpsZnGwwEhAsjeDEoWX8hvEC8A/692yGQsPh6JBO8Zf4aITEQsKAcJ4AcAAA=="
130
+ ],
131
+ "sig_script": "0014b2fe1a431ff28b022e31db94e66f651a3b5c6d59",
132
+ "tx_version": 2,
133
+ "lock_time": 2016,
134
+ "sequence": 2016
135
+ },
136
+ {
137
+ "message": "MGKMA2MJUBDHT55J7MHOLM7UPE",
138
+ "private_keys": [
139
+ "L2FywTTh95vtPd8H2BPxFFAAR4WpuDZKygh3py6KP31zRa99PHDT"
140
+ ],
141
+ "address": "bc1qhqcmw7ud03vqde3pe6hzajaylhucmlatrkcztzpnk8vpgvhg9dzq5ydark",
142
+ "type": "p2wsh-time-lock",
143
+ "witness_script": "632103ad87d784e921d02bf0b89a41f8eded6a5d8409f3b4bfb935fc0e0f4e519c42206702e007b275210386461afa1d2a0a9e83f6587df9ba9a268a686e7b5640928e6991a6b09afae97268ac",
144
+ "bip322_signatures": [
145
+ "fulAgAAAAABAYYJeOOOi3c33O+dholAwiF51Amy/E0qIf3ew2vFtDtTAAAAAADgBwAAAQAAAAAAAAAAAWoDSDBFAiEA64MwD2HkJjPLPAc2u5ia6ZdwCVO3okzVqGPEXnuJGZQCIE27BGOBQTdwJ2M/Wdsm6nFVunqaj+xZBSG/g/64FMbtAQBNYyEDrYfXhOkh0CvwuJpB+O3tal2ECfO0v7k1/A4PTlGcQiBnAuAHsnUhA4ZGGvodKgqeg/ZYffm6miaKaG57VkCSjmmRprCa+ulyaKzgBwAA"
146
+ ],
147
+ "sig_script": "",
148
+ "tx_version": 2,
149
+ "lock_time": 2016,
150
+ "sequence": 2016
151
+ },
152
+ {
153
+ "message": "QXYOWYWO7ZGJC4OPNC367HBUQF",
154
+ "private_keys": [
155
+ "L14bn1tSDZUKYLLiTConCRHbqzGef8eqB2tU5PBPFBkyPLUyob7V",
156
+ "KyJnWYygb7P2P8khWyDMW9yFGA3dUe7kpkEHtLbzY6cfvvn9T5CS"
157
+ ],
158
+ "address": "bc1qg8r3cl47rrr75dwvr7jhzdukptegnmq8v0nmjd2jdn4qvlczqkts0rqtav",
159
+ "type": "p2wsh-multisig-2of2",
160
+ "witness_script": "52210244f7cb842a4ce4f352ce4062ae5e0a5d60d6faa0b07b62c2063484aa5297bbce210234eed6190efc47716b953a050b563f8b2b523addea955ae43351dd2a92aa49f452ae",
161
+ "bip322_signatures": [
162
+ "fulAgAAAAABAXshuDM6YKy1LClwk1ZOM5egX7RTFPOCvtxJkYFYk/FEAAAAAADgBwAAAQAAAAAAAAAAAWoEAEgwRQIhAI9uOxvqmBV0pldOoKWnSYhjobNhP4F+gxO0QlOdGtxFAiBROcNruLigZE4lj1DJEh8yGrqS00MeW463EO78TsaRFgFIMEUCIQCAhIqYuU4wDA2AYsU+QDVyucH4Tm/NSDP2+txyPMKEkAIgfuGlSh7ncxb2yV3S3aOF5uwHGqtIZjp3b4HW0d35EckBR1IhAkT3y4QqTOTzUs5AYq5eCl1g1vqgsHtiwgY0hKpSl7vOIQI07tYZDvxHcWuVOgULVj+LK1I63eqVWuQzUd0qkqpJ9FKu4AcAAA=="
163
+ ],
164
+ "sig_script": "",
165
+ "tx_version": 2,
166
+ "lock_time": 2016,
167
+ "sequence": 2016
168
+ },
169
+ {
170
+ "message": "3VJANNKSXPLND6YRKG6CUEUZXX",
171
+ "private_keys": [
172
+ "L5QcX4UxGQByfgW6YTVWovLUxSSWSyQksGNfAJAhP36hTRRGWyiU",
173
+ "Kzp3Vm4kEdakPrfPfGDq3SEeSeBhX3GPwqacMf1wLFLPEZaMjy57",
174
+ "L3xZwreL3S4C5V3wLaNYSFTsZiC2YW7ao94y2omZvpkBEyP5y3PY"
175
+ ],
176
+ "address": "bc1q8vy6jhfe8ca0uruvr4aqkjk75dpg5m30rnwatg60uhya00dhlyqs2xvt2a",
177
+ "type": "p2wsh-multisig-3of3",
178
+ "witness_script": "5321022506f12c84db93ed3e896b4d58807b341b7d5eb51d79a11763836249b3a1dfe4210305b153afc370cd8f2e522e6a435cf5e9726376bf556752c1a43704956af22305210242f20cbe0540cbe3d1323cf61659f236b89c2ae593ddb7e42080597994d216e053ae",
179
+ "bip322_signatures": [
180
+ "fulAgAAAAABAU2vSmP5XYqecVKygaRRribDp5piMoVxUkxUnFSff8kRAAAAAADgBwAAAQAAAAAAAAAAAWoFAEgwRQIhAKBSw74gHlx272y4RzyU/ap7iNO5rmB6XXgBOy3Qsc/EAiBUnSrF/XhvuvAwi/mMme0JDpuCvl+oZ9C4f3H8OemXCAFIMEUCIQDK3wH0l2AvJ5FZ923ZMJkY1z0MBh1Nee9wjK7tVxFz5gIgdC1XBD/IdBPtx1xmyvSFhbIJlvnz98fPTm50K6KaXpEBSDBFAiEAyP3nXTzXrTmzq54x8jAY02ERHycEYzYqT9cpRTeEWg4CIHxRk3e3oPrM9oCZ8xcgNQ3lRhyc+G0qdDIl6qa8SN4AAWlTIQIlBvEshNuT7T6Ja01YgHs0G31etR15oRdjg2JJs6Hf5CEDBbFTr8NwzY8uUi5qQ1z16XJjdr9VZ1LBpDcElWryIwUhAkLyDL4FQMvj0TI89hZZ8ja4nCrlk9235CCAWXmU0hbgU67gBwAA"
181
+ ],
182
+ "sig_script": "",
183
+ "tx_version": 2,
184
+ "lock_time": 2016,
185
+ "sequence": 2016
186
+ },
187
+ {
188
+ "message": "NQVRV3DJYLKBANM3OPTNBULEU3",
189
+ "private_keys": [
190
+ "L246N8J5x5ehwjoz97ZfHXBCELxGcK2jqRFinReMBcRnqH1X4zdc",
191
+ "L1WzdMN476EHhwsDLHJwVHZKrwVLFFsdvNoZFsZVk2Mb5rKst2Et"
192
+ ],
193
+ "address": "3PGZjFkYBL1m9WBWkWbCW5FEFTaS1Hj4EB",
194
+ "type": "p2sh-p2wsh-multisig-2of2",
195
+ "witness_script": "522103fb824153fc000a213c5456d01780d1f292a0cfbfbc5f6f8f1dc713706c5519d12103db88ce9fb8081e50460beb37539741b0667d6f2439dd1ca283d63182421c10b152ae",
196
+ "bip322_signatures": [
197
+ "fulAgAAAAABAVscdBvYDFN98A//Rt/fAWcN7mdM0x2yWzBjC33c7X5HAAAAACMiACDkkR/DseXy+GXBPtxHvHehUjHt+9XjRmZAgxuuomAC4eAHAAABAAAAAAAAAAABagQASDBFAiEA47YK5XeIGBMQC9bCfWb+IIfirIWlqAzQVc6E/lgBPZICIA0k/EO2t3YhqmYR5WdXUBGgAzR+IqgZ5/mxvj+4UoDTAUgwRQIhAPCIVZCSoIaOjY9BzYIXWEvbhpOl4JR88p/xYVoZObd6AiADyJXNqpDg/Lc2viPX14N2d0jQdEjamY4SmiU7GNbIOgFHUiED+4JBU/wACiE8VFbQF4DR8pKgz7+8X2+PHccTcGxVGdEhA9uIzp+4CB5QRgvrN1OXQbBmfW8kOd0cooPWMYJCHBCxUq7gBwAA"
198
+ ],
199
+ "sig_script": "0020e4911fc3b1e5f2f865c13edc47bc77a15231edfbd5e3466640831baea26002e1",
200
+ "tx_version": 2,
201
+ "lock_time": 2016,
202
+ "sequence": 2016
203
+ },
204
+ {
205
+ "message": "7OKFLKRXSP6J42VQOMSG7MVXEP",
206
+ "private_keys": [
207
+ "L5Teubyzf4mFSMHGCzADK42oRi9xz45qhBrYx2Xs8uCY6WyrymT5",
208
+ "L4HsBh1Rb5DWP5Hf82tPw3whgwFyt8hdRTChxZQE4HzWfdbVgiWT"
209
+ ],
210
+ "address": "3Nye4j1GUFqCEBR3do2KEFZAs9oLe8NZ6X",
211
+ "type": "p2sh-multisig-2of2",
212
+ "witness_script": "",
213
+ "bip322_signatures": [
214
+ "fulAgAAAAEvAyd4zsoz8gcVU5H19GLYokTAN5PxuKCBlEPjODJ86gAAAADaAEcwRAIgT6rcfxgCmG6b3DpzNV6UG0jiCQGclG9sfiSpV45HDXMCIGgtqjFBuJ7rbi+cgnG0TZiKZaxMk0KI+gQd0pHJfEYCAUgwRQIhANCvCLjGMuZMzH+nCEkNhWhR45T6QRYMLin8utpuF9r1AiBTjG2NLjkre7ec+HPg8UUhK1jL1vgq7YKjq5ROv+h07AFHUiEDhKjcb/Pv1/7AYutzOXwgec08wwD/VwiPm58Lc0xjohghAhycjpwdBuP33orQXAH1CAsrgSkuspxM2+FPQ4OCVhQWUq7gBwAAAQAAAAAAAAAAAWrgBwAA"
215
+ ],
216
+ "sig_script": "52210384a8dc6ff3efd7fec062eb73397c2079cd3cc300ff57088f9b9f0b734c63a21821021c9c8e9c1d06e3f7de8ad05c01f5080b2b81292eb29c4cdbe14f43838256141652ae",
217
+ "tx_version": 2,
218
+ "lock_time": 2016,
219
+ "sequence": 2016
220
+ }
221
+ ],
222
+ "proof_of_funds": [
223
+ {
224
+ "message": "2JNEDD7IJDSYLREMJ6Q7PTCQJD",
225
+ "private_keys": [
226
+ "KwJez724aMRgicAjRH5Wn4PGjzt362M4Ce16uyLFrRtefYtjeEpu",
227
+ "L1eU4opKaCpK3Pu3jp1yvNnCmfAFtgKcmdgapcuGPqB3fwANGTWT",
228
+ "Kx9Wif4uxmADZ46YBfXwDST1ZkAZFkiRzpPbK3orYGSqaEJPZLKh"
229
+ ],
230
+ "address": "1PgwDB9w9vKjqhXMaqDiZyktC4x2eC7Wkw",
231
+ "type": "p2pkh",
232
+ "witness_script": "",
233
+ "bip322_signatures": [
234
+ "pofcHNidP8BAI8CAAAAA3UzG05Nmq3GQGeM4RuOvKR3OzsxeY3Iv7WeRpsFNQM0AAAAAADIAQAADCbiUkASpwj6kUReXXcYBQYbAO9L5G7WGpFwwoySY+UAAAAAAAAAAAA3p26yqXE6EPnIIn3fG72TA/ogmgx628m04thl4j0g/gAAAAAAAAAAAAEAAAAAAAAAAAFqewAAAAABAHcAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////yIAIB2Ij79goPLYV23iushdHloX5BnvTP3sLOG1x4L5uCYKAAAAAAEAAAAAAAAAABl2qRT44D3t4ciLKM9Jqw/cQWbMKcrdMYisAAAAAAEHa0gwRQIhAMQa+hYcQZ+v/rcrR4/cn7MthXgjlI9vdOyWaff0ytI1AiBzwJB5Sa7Gg5o5l1YRo2kvPGVjPEXlcDSRXkY/m5pEGAEhAg/lEKOLDqGSy/dJvtUFqV+b0Ibfnat6xQVm3TFbRMUHAAEAVQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABTkYFAAAAAAAZdqkUXAydgFhnOc1o76l++wzhjwbeADKIrAAAAAABB2pHMEQCIEN2q/Y9n1JliYceYA/Lcb+lab84iq5FRGEw0QDZvCthAiBbgsbUfkt5y4PN7iBLpuW8zBARbHVBfsX/vIRcAewd8wEhAl+mkzpSHsor/2HKnlhZQjD88o2fj45Xj+PLeO0vHShBAAEBIE5GBQAAAAAAF6kUmkCp3fSiSKNrfA9wZKySQBbrBJeHAQcXFgAUYWYrEU/y0qj1P/GYS2Yc7nhhe8MBCGsCRzBEAiACr5bTFlzWGiXis1Y01AMVGVlPBEgO8G/g+6c4cNbx5wIgYqXaNnAPVNWVjfaJ8DhIuOiAUiTHeNdjdYH9IpXjK1oBIQMs7LIzDohxaDGLK3Jxlyxu/lnEh3YdmVbtOwi/9/IvuQAA"
235
+ ],
236
+ "sig_script": "",
237
+ "tx_version": 2,
238
+ "lock_time": 123,
239
+ "sequence": 456,
240
+ "additional_inputs": [
241
+ [
242
+ {
243
+ "private_key_index": 1,
244
+ "type": "p2pkh",
245
+ "value": 345678,
246
+ "pk_script": "76a9145c0c9d80586739cd68efa97efb0ce18f06de003288ac"
247
+ }
248
+ ],
249
+ [
250
+ {
251
+ "private_key_index": 2,
252
+ "type": "p2sh-p2wpkh",
253
+ "value": 345678,
254
+ "pk_script": "a9149a40a9ddf4a248a36b7c0f7064ac924016eb049787"
255
+ }
256
+ ]
257
+ ]
258
+ },
259
+ {
260
+ "message": "PMRTSXKIH4LZUEK6FSWKNVC5OJ",
261
+ "private_keys": [
262
+ "KzsKtEzbNpVXuNNk8RYP7VfmZL9DcvvzcsWCmQgsU24NkJCq2xm1",
263
+ "KyvKPtWqpTx3kLWcPXnSsReoaarfqEVbobUMwWDEZwwH75dzveWV",
264
+ "KyYzf9wsAvGPcin5YzUUCRqTHcjoG4DYhRHkwocDb2EgXgeDnPNV",
265
+ "KxCAEYZ9CocjcmEQzq1x3amDDVjMwiT9U6Y5C5EXmUiwRm5T7qK6",
266
+ "KwadXBnBmyatFEVWWBZgNpuYzDR6zA8526uDJiz1u3WPBixGUarZ"
267
+ ],
268
+ "address": "1FUGbznJZgPPNR49WGpAMWGqd2EJy7L411",
269
+ "type": "p2pkh",
270
+ "witness_script": "",
271
+ "bip322_signatures": [
272
+ "pofcHNidP8BAOECAAAABUW4YNCHQoyK7F1IWzGg2FITNBQfwfYHqccJdCb5bAXHAAAAAADIAQAA9NbnUz4hFOirIPCfd3puS86Tswp4PpGiajrMV7XvilQAAAAAAAAAAAD01udTPiEU6Ksg8J93em5LzpOzCng+kaJqOsxXte+KVAEAAAAAAAAAAPTW51M+IRToqyDwn3d6bkvOk7MKeD6Romo6zFe174pUAgAAAAAAAAAA9lQ2wLnGe0WMSw2PbknCdByQs2kNLxtiBDM+sQJAJBgAAAAAAAAAAAABAAAAAAAAAAABansAAAAAAQB3AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8iACBS4HdhDkJcNnd/zYxBO18MP4A5XwfMIamCtF1YNPUjwQAAAAABAAAAAAAAAAAZdqkUnroEWW1vPFZWKfJOPc5EO3LAxSCIrAAAAAABB2pHMEQCIDs7N2tmsnkvKuT1I/yNArGthDLEPCxZAp3la3W2Wo0SAiB/KqF79idpHtYTi6zf/s3JR5zHYBmP3fzgpmLxiSCDUwEhAlPjWUeiLVieRuV8JE/trdheywBquxvrxw9CoKp0eWwUAAEAmQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTkYFAAAAAAAZdqkUXRw/3Id1+QdWOglIjBLaBryaNa+IrE5GBQAAAAAAGXapFLiTCxADZJL19c3fKa0A4EwBeL4hiKxORgUAAAAAABl2qRRbIpISPTZsY6A99RjTl/caNrBz64isAAAAAAEHakcwRAIgKV6AGU+4LXwaNsWW6KCEMlYg+ofeoon3ngVHaq+kLn4CIBFHlP9K6vENM5lo3QvM7bITh9jDqzDMeqX3IuLyXDsZASED8CBlrMcXM6gidBwP2HZk8FQ3D2JV4eX5ct3++h7LqT8AAQdrSDBFAiEAxqn43CUk0TCc54a/k4ko++06fDv/CamisK6IdxGowNsCIHDikdfH1lfFO+CBM8nf6bp37gfgQ7GZoaMMbU0Bap7MASECEClqBF8XySkMqIUrrjXIAg/fUHiIjqCH3jDbVTSEUK4AAQdrSDBFAiEAwK0nkBarbo8wdZDg4FVeJIuP6iLp9fApYMhArfPEcfICIGgoPoco1fpw77syuPxvU5HZjYiOl4FChRfZ800L4bKKASECTFBcVWr9yTopKH4A4FZvEvmGXW06MgHwxN58FPvmQRkAAQEgTkYFAAAAAAAXqRQPyvIXY4yAKCGbkYlxD3LPMT/JSocBBxcWABRh7fUdOB8FWstJKAmt5r6qUQzMYgEIbAJIMEUCIQDd0I64asHGizPfnwvUVscgJo+8xZmv+IbtXNBXgLsdqwIgASUwxhy/0TTp/yLygwCfevxbXxoUYbIM2vdomk6jw3gBIQMchUGFw2XkvTvbr64BBBVQHRZdDv+KLY5VWN00qooCiAAA"
273
+ ],
274
+ "sig_script": "",
275
+ "tx_version": 2,
276
+ "lock_time": 123,
277
+ "sequence": 456,
278
+ "additional_inputs": [
279
+ [
280
+ {
281
+ "private_key_index": 1,
282
+ "type": "p2pkh",
283
+ "value": 345678,
284
+ "pk_script": "76a9145d1c3fdc8775f907563a09488c12da06bc9a35af88ac"
285
+ },
286
+ {
287
+ "private_key_index": 2,
288
+ "type": "p2pkh",
289
+ "value": 345678,
290
+ "pk_script": "76a914b8930b10036492f5f5cddf29ad00e04c0178be2188ac"
291
+ },
292
+ {
293
+ "private_key_index": 3,
294
+ "type": "p2pkh",
295
+ "value": 345678,
296
+ "pk_script": "76a9145b2292123d366c63a03df518d397f71a36b073eb88ac"
297
+ }
298
+ ],
299
+ [
300
+ {
301
+ "private_key_index": 4,
302
+ "type": "p2sh-p2wpkh",
303
+ "value": 345678,
304
+ "pk_script": "a9140fcaf217638c8028219b9189710f72cf313fc94a87"
305
+ }
306
+ ]
307
+ ]
308
+ },
309
+ {
310
+ "message": "FUYMQWKYGS7HJEN7YFEZU5SNR5",
311
+ "private_keys": [
312
+ "L1p7QRghEregYbBvSCp1eW4YJg2RwMYwX2uhR1eAnkVoPJBaJ7Dy",
313
+ "Kz5jBiqQKoppYvaxtWZJicxGZ3G3iJ4rLqNnv7MaQBusyoE731EJ",
314
+ "L2fNJduiUkSytUDbxa58ivWoHevB3svcWUJMxMFebdugYP5jgJr1",
315
+ "KxqVMn81AEYSwYuzBxe6xC4JDAgA2eU2qiNvBAgVZZwRFv1BqN3y"
316
+ ],
317
+ "address": "bc1pk3vq3wpn4txexwq4dj0k2dugzp6kfwllvs89w49cvtk3j2cndcds3l9kw9",
318
+ "type": "p2tr",
319
+ "witness_script": "",
320
+ "bip322_signatures": [
321
+ "pofcHNidP8BALgCAAAABDzMFysa2DX0k4ZymoVfzNzTIL3gsWlu03HcfI+NxhOxAAAAAADIAQAAVd4moQMhq/rd+2ecRsJ0Xeg6/SdhA+owjzyzg/Fqd/oAAAAAAAAAAABuZFRaqjWRO6kKy5hrEHAg+T12/Iuz+FZBwwMt/FQvkgAAAAAAAAAAAG5kVFqqNZE7qQrLmGsQcCD5PXb8i7P4VkHDAy38VC+SAQAAAAAAAAAAAQAAAAAAAAAAAWp7AAAAAAEBKwAAAAAAAAAAIlEgtFgIuDOqzZM4FWyfZTeIEHVku/9kDldUuGLtGSsTbhsBCEIBQKoTEBqEPkib1fLnELbmsbDVlmWGzOdiiN/XJefU3tF9AEi7PszYEPguomxXp7X2rL0dP0xkV6LbBcVz7oAEeKkAAQErTkYFAAAAAAAiUSB4i5DCtSPHOkI30E30ayMoWL47vA5l2NBJp/pZ1XGduAEIQgFAic0muhAJNc4ZlRWeJGRgkN+oE/ptV4Znyli19VAnSsHM/Pb9Mp02dd3zk3RmuT6VgjBxdJn2yURGKOka3l9cugABAStORgUAAAAAACJRIMoNyg9Pai/pn4PHTOMEsDHkuUAHt5riqU81NVVj+fXKAQhCAUCL3W2Jh3ImNRSpbp0bLe+rBE4GJw5AjwJEhakHsm83YfuQKeY1syBFrmNV2ZvLv8R8uTLcmkJ1s/lWUxZ9o4qJAAEBK05GBQAAAAAAIlEgXCutuyDOvc4hiADdov7VmOUfq4ww6HES7JZ6NAucMJkBCEIBQDqu/4oik+J+eAbvUhzzuBkoVoOgD5RySjpvJQqTKNieBda8dMTkH2avx6ghs7zd6puujlBCQw3r/NiG4VX7wAEAAA=="
322
+ ],
323
+ "sig_script": "",
324
+ "tx_version": 2,
325
+ "lock_time": 123,
326
+ "sequence": 456,
327
+ "additional_inputs": [
328
+ [
329
+ {
330
+ "private_key_index": 1,
331
+ "type": "p2tr",
332
+ "value": 345678,
333
+ "pk_script": "5120788b90c2b523c73a4237d04df46b232858be3bbc0e65d8d049a7fa59d5719db8"
334
+ }
335
+ ],
336
+ [
337
+ {
338
+ "private_key_index": 2,
339
+ "type": "p2tr",
340
+ "value": 345678,
341
+ "pk_script": "5120ca0dca0f4f6a2fe99f83c74ce304b031e4b94007b79ae2a94f35355563f9f5ca"
342
+ },
343
+ {
344
+ "private_key_index": 3,
345
+ "type": "p2tr",
346
+ "value": 345678,
347
+ "pk_script": "51205c2badbb20cebdce218800dda2fed598e51fab8c30e87112ec967a340b9c3099"
348
+ }
349
+ ]
350
+ ]
351
+ }
352
+ ],
353
+ "error": [
354
+ {
355
+ "description": "wrong message for p2wpkh simple signature",
356
+ "message": "EFGJ4AZYXDV7NDUDSUDB3NCDUC",
357
+ "address": "bc1qqthe0hz8klx90e7stf6shclhsvqd5ly96pn53v",
358
+ "signature": "smpAkgwRQIhALC6hdfxNy1n45d7UXSskRBdfZW0Al259E1kDMpipdYkAiAJPfZqb+WurZuf1apU5xeE6Igui9dvt5tihQLDvxlY1AEhAqbnruyo677ktQjio7XOchO3w51Dh9AbRVngha5jtNfT",
359
+ "error_substr": "invalid signature"
360
+ },
361
+ {
362
+ "description": "wrong signer for p2wpkh simple signature",
363
+ "message": "2V6TUTMSH4VQ3Z7WZWKYD7DFNH",
364
+ "address": "bc1qgg6lpr05az2l5kz402ddz5ez7fdu25kgmd40lf",
365
+ "signature": "smpAkgwRQIhALC6hdfxNy1n45d7UXSskRBdfZW0Al259E1kDMpipdYkAiAJPfZqb+WurZuf1apU5xeE6Igui9dvt5tihQLDvxlY1AEhAqbnruyo677ktQjio7XOchO3w51Dh9AbRVngha5jtNfT",
366
+ "error_substr": "invalid signature"
367
+ },
368
+ {
369
+ "description": "wrong message for p2tr simple signature",
370
+ "message": "56VM6YK6Y76XTBXNPITF232EPX",
371
+ "address": "bc1pcquvhrqv0q68t4m0hfq6tpn006qrskyc7yrqnp2uyrf2emg3wynsdjyk38",
372
+ "signature": "smpAUB6B2Rbupzua8LTQIF06516wzl+cwKy1be8RgoiW0riyXdKwe6GTz/5Hnb37m67pJwIKCh+D5jDueG6KpvYpmu8",
373
+ "error_substr": "invalid signature"
374
+ },
375
+ {
376
+ "description": "wrong signer for p2tr simple signature",
377
+ "message": "PURVOQ544B6HUATVBJZN5EZJUU",
378
+ "address": "bc1pltvk000nd54v3hrrcn7lsffdra72hphpm40rhzf9hn8arqkgermq2p9029",
379
+ "signature": "smpAUB6B2Rbupzua8LTQIF06516wzl+cwKy1be8RgoiW0riyXdKwe6GTz/5Hnb37m67pJwIKCh+D5jDueG6KpvYpmu8",
380
+ "error_substr": "invalid signature"
381
+ },
382
+ {
383
+ "description": "wrong message for p2wsh-multisig-2of2 simple signature",
384
+ "message": "DL2KXDPQAN63YIQPIP34O3XYVX",
385
+ "address": "bc1qw6g0rgrpuxvj4edkwtvzpmt3c5m08mhp8nuk3mrk4erufvlczp5ssdscjd",
386
+ "signature": "smpBABIMEUCIQCKl1f9Cj26k0fFWE48+O4ibhYJYPytbDZWJRaaG9BybwIgCbk+3BViWkpuu2RI+41dwtlQ/m/01G860pTFCzDFfokBSDBFAiEA0O77DJsaM7IO+Ht06sp3umzXB64CNNOwf2isZuPfdmwCIGlggOwRSkXsqlPhE1gMdd5hf7ycL33Orfrr4v/XnMGSAUdSIQNsu/OwZurHvJMoiJoSAmmCHLoqIc5Wblh+rek+7rhASCECgYVkUspeAxwRfM6v4GRBhN/gGxTfpPqZuOlBIYZxTJZSrg==",
387
+ "error_substr": "invalid signature"
388
+ },
389
+ {
390
+ "description": "wrong signer for p2wsh-multisig-2of2 simple signature",
391
+ "message": "G7ZTXXOVJFHGDD6XYJAGBAMT5A",
392
+ "address": "bc1q47vnwr6fsarstmmw89wrkvl89540sn5g79x75ms8aly9rrsnq8eqh3v9gz",
393
+ "signature": "smpBABIMEUCIQCKl1f9Cj26k0fFWE48+O4ibhYJYPytbDZWJRaaG9BybwIgCbk+3BViWkpuu2RI+41dwtlQ/m/01G860pTFCzDFfokBSDBFAiEA0O77DJsaM7IO+Ht06sp3umzXB64CNNOwf2isZuPfdmwCIGlggOwRSkXsqlPhE1gMdd5hf7ycL33Orfrr4v/XnMGSAUdSIQNsu/OwZurHvJMoiJoSAmmCHLoqIc5Wblh+rek+7rhASCECgYVkUspeAxwRfM6v4GRBhN/gGxTfpPqZuOlBIYZxTJZSrg==",
394
+ "error_substr": "invalid signature"
395
+ },
396
+ {
397
+ "description": "wrong message for p2wsh-multisig-3of3 simple signature",
398
+ "message": "UKLIJM5HKKQEIFJ44R7UIQFMYL",
399
+ "address": "bc1qazhmhwl9sxgjmwnd96hh926s3x5l0cf64yy6hvyn6qms438x550qy5sgva",
400
+ "signature": "smpBQBHMEQCICNI6H6b+VCZV9Z2H6EW5hPrE1buC6SJuy2ljSNmQlGfAiASbm5UrA8KH6TwF6evx7COV+i27ubiq2v9TyLYPOO63gFIMEUCIQCMOFnJbg0sy88G6wUXjv5stjVgfvAokOogWsisdkAnlAIgETfBw7kJhISFu9vIomFcEF/1NsN6c0h3KjNcpmNAZtMBSDBFAiEA/lUU+wBeA3prt8vHRpcQN763OYZ8L61DfN0QI/gkHpMCIB2qHwgoXNTH0sdqeAMD2ah7dSTie2bflax3Q3I/GibQAWlTIQKo003Zjj9Jg/kT7sOA7cTdIKmzsrIYBAuPd9hj8FZuHCEC6BdalMtwbjcx2vJjVelv7BJml0rY7Q5ze+PWen6tb5shAytperlYBs69tbn86t3pINqXy0NzttKZKi6Y8X+USQXaU64=",
401
+ "error_substr": "invalid signature"
402
+ },
403
+ {
404
+ "description": "wrong signer for p2wsh-multisig-3of3 simple signature",
405
+ "message": "Z3SB7SRL555ZGOHVMYT5WG7RIZ",
406
+ "address": "bc1qnckc2q6804depn2240l66p93e0mscp7vd9ndptfuznex86ehpcvseq6e8a",
407
+ "signature": "smpBQBHMEQCICNI6H6b+VCZV9Z2H6EW5hPrE1buC6SJuy2ljSNmQlGfAiASbm5UrA8KH6TwF6evx7COV+i27ubiq2v9TyLYPOO63gFIMEUCIQCMOFnJbg0sy88G6wUXjv5stjVgfvAokOogWsisdkAnlAIgETfBw7kJhISFu9vIomFcEF/1NsN6c0h3KjNcpmNAZtMBSDBFAiEA/lUU+wBeA3prt8vHRpcQN763OYZ8L61DfN0QI/gkHpMCIB2qHwgoXNTH0sdqeAMD2ah7dSTie2bflax3Q3I/GibQAWlTIQKo003Zjj9Jg/kT7sOA7cTdIKmzsrIYBAuPd9hj8FZuHCEC6BdalMtwbjcx2vJjVelv7BJml0rY7Q5ze+PWen6tb5shAytperlYBs69tbn86t3pINqXy0NzttKZKi6Y8X+USQXaU64=",
408
+ "error_substr": "invalid signature"
409
+ },
410
+ {
411
+ "description": "wrong message for p2pkh full signature",
412
+ "message": "TCHG6CQ5E2T5S4S7DPLAEFVDY2",
413
+ "address": "13vU5PUSuArDXJdCWZvUFEbgJ2wcmtSJWn",
414
+ "signature": "fulAgAAAAGn3Z6t/gsHNyHdgZTOVro0Hej+qbd/ilU1ACalKoHX3gAAAABqRzBEAiB+8t/tm8Jm6zYv9JGZZVlAUjmqg7ZglIA39U+bim8EKQIgDv3E5cHOagN+xYgN3ZQjTYlAJp/WyslwJWuFP1TmM3IBIQJcPK2h9SY+Ki1oussvHnMdFAhJgsYBFPl+rNcMv9P1ROAHAAABAAAAAAAAAAABauAHAAA=",
415
+ "error_substr": "invalid signature"
416
+ },
417
+ {
418
+ "description": "wrong signer for p2pkh full signature",
419
+ "message": "MOISC5NCQ42ADH2SUXLELUJOWH",
420
+ "address": "1BxMhvfWLnGLqVhJ3j39oDBk7qf5D86BFe",
421
+ "signature": "fulAgAAAAGn3Z6t/gsHNyHdgZTOVro0Hej+qbd/ilU1ACalKoHX3gAAAABqRzBEAiB+8t/tm8Jm6zYv9JGZZVlAUjmqg7ZglIA39U+bim8EKQIgDv3E5cHOagN+xYgN3ZQjTYlAJp/WyslwJWuFP1TmM3IBIQJcPK2h9SY+Ki1oussvHnMdFAhJgsYBFPl+rNcMv9P1ROAHAAABAAAAAAAAAAABauAHAAA=",
422
+ "error_substr": "invalid signature"
423
+ },
424
+ {
425
+ "description": "wrong message for p2wpkh full signature",
426
+ "message": "VENQMXVEGEJAAXJV5V24T6G5UU",
427
+ "address": "bc1qrqtlzcq86850yzgsyq9sssawx2qxlx5yq3xpkd",
428
+ "signature": "fulAgAAAAABAUrfzHHOLAKmgCIFSTT3krp+cQxj1BDPBN4GBg3tRmFXAAAAAADgBwAAAQAAAAAAAAAAAWoCSDBFAiEAjYj85zyhQKa9DbMO0reDwdhkNwKJkF3q2qFcijXDgMUCIAaQ75s3fwqrCeYIUJugLvhxZFxQIVquGN90vIKCW3QLASEDMurnDzvc0zABUwVwCADfGXoDx/M3SQnYt7e3IHDoU3PgBwAA",
429
+ "error_substr": "invalid signature"
430
+ },
431
+ {
432
+ "description": "wrong signer for p2wpkh full signature",
433
+ "message": "KLE5MMJBTNF4AVZXIO3GIL5UWF",
434
+ "address": "bc1q55chmwm4x8aeye0h9c0mryra2ly8k8fh3scqgj",
435
+ "signature": "fulAgAAAAABAUrfzHHOLAKmgCIFSTT3krp+cQxj1BDPBN4GBg3tRmFXAAAAAADgBwAAAQAAAAAAAAAAAWoCSDBFAiEAjYj85zyhQKa9DbMO0reDwdhkNwKJkF3q2qFcijXDgMUCIAaQ75s3fwqrCeYIUJugLvhxZFxQIVquGN90vIKCW3QLASEDMurnDzvc0zABUwVwCADfGXoDx/M3SQnYt7e3IHDoU3PgBwAA",
436
+ "error_substr": "invalid signature"
437
+ },
438
+ {
439
+ "description": "wrong message for p2tr full signature",
440
+ "message": "P2RQWD264CW7Z5ZSSSDRW2JEDB",
441
+ "address": "bc1pve87s3l2levjmhetzr2f9xvep3y266xty0hnefmyv8tkxc3e4qssll2kdu",
442
+ "signature": "fulAgAAAAABAROFPNY6Zt8hFK0YQq5Wb6wk/CnUYEPtQ0HTHDyzNROrAAAAAADgBwAAAQAAAAAAAAAAAWoBQNRdLOo5XZY0SBqAsLZNr/z3Bqrmo3OxVn7e4tD/OOD4H9U/L1unq5Nmdz+S1w7SHtt46bFwnd8xnRVan8BofFfgBwAA",
443
+ "error_substr": "invalid signature"
444
+ },
445
+ {
446
+ "description": "wrong signer for p2tr full signature",
447
+ "message": "XQMVC3YR6AOGZIHLSUQ2NSSBI2",
448
+ "address": "bc1py2f3exluva2yqa877qnsj3vk4lm8yatw0up4fhrx04hf8ns87weswck94p",
449
+ "signature": "fulAgAAAAABAROFPNY6Zt8hFK0YQq5Wb6wk/CnUYEPtQ0HTHDyzNROrAAAAAADgBwAAAQAAAAAAAAAAAWoBQNRdLOo5XZY0SBqAsLZNr/z3Bqrmo3OxVn7e4tD/OOD4H9U/L1unq5Nmdz+S1w7SHtt46bFwnd8xnRVan8BofFfgBwAA",
450
+ "error_substr": "invalid signature"
451
+ },
452
+ {
453
+ "description": "wrong message for p2tr-time-lock full signature",
454
+ "message": "ATGH7VC42BMKAAJAMBG3KNGQGR",
455
+ "address": "bc1p6vffkx7vcyezrjq7pg9qqdjv7vmtanfhk8ukwsn4syejwmarmhxqp0rw5x",
456
+ "signature": "fulAgAAAAABAaza7/ukfX9ZdxCUvK7CPJgADDdPdF7ikXVKWctd5EHrAAAAAADgBwAAAQAAAAAAAAAAAWoEQPvuT0enYGwsab2lsPZU0U3OcRkGng+o/PAt4QU2lc8hG7lTUmflkt0To+eoipv2vptf0TlGOBCsKU5xE3kXKcMAS2MgrYfXhOkh0CvwuJpB+O3tal2ECfO0v7k1/A4PTlGcQiBnAuAHsnUgJjLn4tl5ytgC8CNTyITXmg4rx9ctxPedwRMPEBvfoUBorCHBJjLn4tl5ytgC8CNTyITXmg4rx9ctxPedwRMPEBvfoUDgBwAA",
457
+ "error_substr": "invalid signature"
458
+ },
459
+ {
460
+ "description": "wrong signer for p2tr-time-lock full signature",
461
+ "message": "AY2VOQOXYI5CN2EHZKLOX7ZI37",
462
+ "address": "bc1pfncmfyycsv5zpnrzy3hj7qna989kymm2ekps7ph2mwwyftjy3d6s2esen0",
463
+ "signature": "fulAgAAAAABAaza7/ukfX9ZdxCUvK7CPJgADDdPdF7ikXVKWctd5EHrAAAAAADgBwAAAQAAAAAAAAAAAWoEQPvuT0enYGwsab2lsPZU0U3OcRkGng+o/PAt4QU2lc8hG7lTUmflkt0To+eoipv2vptf0TlGOBCsKU5xE3kXKcMAS2MgrYfXhOkh0CvwuJpB+O3tal2ECfO0v7k1/A4PTlGcQiBnAuAHsnUgJjLn4tl5ytgC8CNTyITXmg4rx9ctxPedwRMPEBvfoUBorCHBJjLn4tl5ytgC8CNTyITXmg4rx9ctxPedwRMPEBvfoUDgBwAA",
464
+ "error_substr": "invalid signature"
465
+ },
466
+ {
467
+ "description": "wrong message for p2sh-p2wpkh full signature",
468
+ "message": "CPVOBEXDTFAXS6N4YASD753CZV",
469
+ "address": "32Utb7Seg6EXq7UesMNJXhQ1gdohYNyzQ9",
470
+ "signature": "fulAgAAAAABAe5xLNMlYQH4OGjJ3h4lqQaVp0Cic7mwxkvyWswqFMXeAAAAABcWABSy/hpDH/KLAi4x25Tmb2UaO1xtWeAHAAABAAAAAAAAAAABagJHMEQCIDEleqb0n1R5c21TGkWRXNFae98wbwI0QOyh/YmRuQX1AiAcv1MhyTzPOVgZ1VIwuu0tDxrVJUHK8lhOUOXpsZnGwwEhAsjeDEoWX8hvEC8A/692yGQsPh6JBO8Zf4aITEQsKAcJ4AcAAA==",
471
+ "error_substr": "invalid signature"
472
+ },
473
+ {
474
+ "description": "wrong signer for p2sh-p2wpkh full signature",
475
+ "message": "EMYGZHEY3LIANYKCR7XJF3NMFQ",
476
+ "address": "3QMEQj2LTUtKKR1UatUK44z1NwrWrcVSGh",
477
+ "signature": "fulAgAAAAABAe5xLNMlYQH4OGjJ3h4lqQaVp0Cic7mwxkvyWswqFMXeAAAAABcWABSy/hpDH/KLAi4x25Tmb2UaO1xtWeAHAAABAAAAAAAAAAABagJHMEQCIDEleqb0n1R5c21TGkWRXNFae98wbwI0QOyh/YmRuQX1AiAcv1MhyTzPOVgZ1VIwuu0tDxrVJUHK8lhOUOXpsZnGwwEhAsjeDEoWX8hvEC8A/692yGQsPh6JBO8Zf4aITEQsKAcJ4AcAAA==",
478
+ "error_substr": "invalid signature"
479
+ },
480
+ {
481
+ "description": "wrong message for p2wsh-time-lock full signature",
482
+ "message": "QMSIBU4KPG4CGHGBGFRFHXVYLR",
483
+ "address": "bc1qhqcmw7ud03vqde3pe6hzajaylhucmlatrkcztzpnk8vpgvhg9dzq5ydark",
484
+ "signature": "fulAgAAAAABAYYJeOOOi3c33O+dholAwiF51Amy/E0qIf3ew2vFtDtTAAAAAADgBwAAAQAAAAAAAAAAAWoDSDBFAiEA64MwD2HkJjPLPAc2u5ia6ZdwCVO3okzVqGPEXnuJGZQCIE27BGOBQTdwJ2M/Wdsm6nFVunqaj+xZBSG/g/64FMbtAQBNYyEDrYfXhOkh0CvwuJpB+O3tal2ECfO0v7k1/A4PTlGcQiBnAuAHsnUhA4ZGGvodKgqeg/ZYffm6miaKaG57VkCSjmmRprCa+ulyaKzgBwAA",
485
+ "error_substr": "invalid signature"
486
+ },
487
+ {
488
+ "description": "wrong signer for p2wsh-time-lock full signature",
489
+ "message": "MGKMA2MJUBDHT55J7MHOLM7UPE",
490
+ "address": "bc1qlcg74qa5r0ltu6zruahaap3keqsksad6kpstqyysxu0y7tkz2jlqepjywu",
491
+ "signature": "fulAgAAAAABAYYJeOOOi3c33O+dholAwiF51Amy/E0qIf3ew2vFtDtTAAAAAADgBwAAAQAAAAAAAAAAAWoDSDBFAiEA64MwD2HkJjPLPAc2u5ia6ZdwCVO3okzVqGPEXnuJGZQCIE27BGOBQTdwJ2M/Wdsm6nFVunqaj+xZBSG/g/64FMbtAQBNYyEDrYfXhOkh0CvwuJpB+O3tal2ECfO0v7k1/A4PTlGcQiBnAuAHsnUhA4ZGGvodKgqeg/ZYffm6miaKaG57VkCSjmmRprCa+ulyaKzgBwAA",
492
+ "error_substr": "invalid signature"
493
+ },
494
+ {
495
+ "description": "wrong message for p2wsh-multisig-2of2 full signature",
496
+ "message": "OANRY57VZNHOXZNYGCGZM5ADYG",
497
+ "address": "bc1qg8r3cl47rrr75dwvr7jhzdukptegnmq8v0nmjd2jdn4qvlczqkts0rqtav",
498
+ "signature": "fulAgAAAAABAXshuDM6YKy1LClwk1ZOM5egX7RTFPOCvtxJkYFYk/FEAAAAAADgBwAAAQAAAAAAAAAAAWoEAEgwRQIhAI9uOxvqmBV0pldOoKWnSYhjobNhP4F+gxO0QlOdGtxFAiBROcNruLigZE4lj1DJEh8yGrqS00MeW463EO78TsaRFgFIMEUCIQCAhIqYuU4wDA2AYsU+QDVyucH4Tm/NSDP2+txyPMKEkAIgfuGlSh7ncxb2yV3S3aOF5uwHGqtIZjp3b4HW0d35EckBR1IhAkT3y4QqTOTzUs5AYq5eCl1g1vqgsHtiwgY0hKpSl7vOIQI07tYZDvxHcWuVOgULVj+LK1I63eqVWuQzUd0qkqpJ9FKu4AcAAA==",
499
+ "error_substr": "invalid signature"
500
+ },
501
+ {
502
+ "description": "wrong signer for p2wsh-multisig-2of2 full signature",
503
+ "message": "QXYOWYWO7ZGJC4OPNC367HBUQF",
504
+ "address": "bc1qan5sys8u4cpvgutt70fn2tgweu7as9aw0slljuz86x4nyr8myvjsgz3q2v",
505
+ "signature": "fulAgAAAAABAXshuDM6YKy1LClwk1ZOM5egX7RTFPOCvtxJkYFYk/FEAAAAAADgBwAAAQAAAAAAAAAAAWoEAEgwRQIhAI9uOxvqmBV0pldOoKWnSYhjobNhP4F+gxO0QlOdGtxFAiBROcNruLigZE4lj1DJEh8yGrqS00MeW463EO78TsaRFgFIMEUCIQCAhIqYuU4wDA2AYsU+QDVyucH4Tm/NSDP2+txyPMKEkAIgfuGlSh7ncxb2yV3S3aOF5uwHGqtIZjp3b4HW0d35EckBR1IhAkT3y4QqTOTzUs5AYq5eCl1g1vqgsHtiwgY0hKpSl7vOIQI07tYZDvxHcWuVOgULVj+LK1I63eqVWuQzUd0qkqpJ9FKu4AcAAA==",
506
+ "error_substr": "invalid signature"
507
+ },
508
+ {
509
+ "description": "wrong message for p2wsh-multisig-3of3 full signature",
510
+ "message": "UZQGB4YTYIS3PRT3UUOCO3YCX3",
511
+ "address": "bc1q8vy6jhfe8ca0uruvr4aqkjk75dpg5m30rnwatg60uhya00dhlyqs2xvt2a",
512
+ "signature": "fulAgAAAAABAU2vSmP5XYqecVKygaRRribDp5piMoVxUkxUnFSff8kRAAAAAADgBwAAAQAAAAAAAAAAAWoFAEgwRQIhAKBSw74gHlx272y4RzyU/ap7iNO5rmB6XXgBOy3Qsc/EAiBUnSrF/XhvuvAwi/mMme0JDpuCvl+oZ9C4f3H8OemXCAFIMEUCIQDK3wH0l2AvJ5FZ923ZMJkY1z0MBh1Nee9wjK7tVxFz5gIgdC1XBD/IdBPtx1xmyvSFhbIJlvnz98fPTm50K6KaXpEBSDBFAiEAyP3nXTzXrTmzq54x8jAY02ERHycEYzYqT9cpRTeEWg4CIHxRk3e3oPrM9oCZ8xcgNQ3lRhyc+G0qdDIl6qa8SN4AAWlTIQIlBvEshNuT7T6Ja01YgHs0G31etR15oRdjg2JJs6Hf5CEDBbFTr8NwzY8uUi5qQ1z16XJjdr9VZ1LBpDcElWryIwUhAkLyDL4FQMvj0TI89hZZ8ja4nCrlk9235CCAWXmU0hbgU67gBwAA",
513
+ "error_substr": "invalid signature"
514
+ },
515
+ {
516
+ "description": "wrong signer for p2wsh-multisig-3of3 full signature",
517
+ "message": "3VJANNKSXPLND6YRKG6CUEUZXX",
518
+ "address": "bc1qma94rw0f5t4l64wc6xfrjuuatqn6klcwmxvls86y9k4rjvva40wqr8u0cq",
519
+ "signature": "fulAgAAAAABAU2vSmP5XYqecVKygaRRribDp5piMoVxUkxUnFSff8kRAAAAAADgBwAAAQAAAAAAAAAAAWoFAEgwRQIhAKBSw74gHlx272y4RzyU/ap7iNO5rmB6XXgBOy3Qsc/EAiBUnSrF/XhvuvAwi/mMme0JDpuCvl+oZ9C4f3H8OemXCAFIMEUCIQDK3wH0l2AvJ5FZ923ZMJkY1z0MBh1Nee9wjK7tVxFz5gIgdC1XBD/IdBPtx1xmyvSFhbIJlvnz98fPTm50K6KaXpEBSDBFAiEAyP3nXTzXrTmzq54x8jAY02ERHycEYzYqT9cpRTeEWg4CIHxRk3e3oPrM9oCZ8xcgNQ3lRhyc+G0qdDIl6qa8SN4AAWlTIQIlBvEshNuT7T6Ja01YgHs0G31etR15oRdjg2JJs6Hf5CEDBbFTr8NwzY8uUi5qQ1z16XJjdr9VZ1LBpDcElWryIwUhAkLyDL4FQMvj0TI89hZZ8ja4nCrlk9235CCAWXmU0hbgU67gBwAA",
520
+ "error_substr": "invalid signature"
521
+ },
522
+ {
523
+ "description": "wrong message for p2sh-p2wsh-multisig-2of2 full signature",
524
+ "message": "FOQHOIFXJVPFSGGBRLAX53D6R2",
525
+ "address": "3PGZjFkYBL1m9WBWkWbCW5FEFTaS1Hj4EB",
526
+ "signature": "fulAgAAAAABAVscdBvYDFN98A//Rt/fAWcN7mdM0x2yWzBjC33c7X5HAAAAACMiACDkkR/DseXy+GXBPtxHvHehUjHt+9XjRmZAgxuuomAC4eAHAAABAAAAAAAAAAABagQASDBFAiEA47YK5XeIGBMQC9bCfWb+IIfirIWlqAzQVc6E/lgBPZICIA0k/EO2t3YhqmYR5WdXUBGgAzR+IqgZ5/mxvj+4UoDTAUgwRQIhAPCIVZCSoIaOjY9BzYIXWEvbhpOl4JR88p/xYVoZObd6AiADyJXNqpDg/Lc2viPX14N2d0jQdEjamY4SmiU7GNbIOgFHUiED+4JBU/wACiE8VFbQF4DR8pKgz7+8X2+PHccTcGxVGdEhA9uIzp+4CB5QRgvrN1OXQbBmfW8kOd0cooPWMYJCHBCxUq7gBwAA",
527
+ "error_substr": "invalid signature"
528
+ },
529
+ {
530
+ "description": "wrong signer for p2sh-p2wsh-multisig-2of2 full signature",
531
+ "message": "NQVRV3DJYLKBANM3OPTNBULEU3",
532
+ "address": "3DA7VZKYcuiaJFsDnzWjBDvh4VhBFZk6jg",
533
+ "signature": "fulAgAAAAABAVscdBvYDFN98A//Rt/fAWcN7mdM0x2yWzBjC33c7X5HAAAAACMiACDkkR/DseXy+GXBPtxHvHehUjHt+9XjRmZAgxuuomAC4eAHAAABAAAAAAAAAAABagQASDBFAiEA47YK5XeIGBMQC9bCfWb+IIfirIWlqAzQVc6E/lgBPZICIA0k/EO2t3YhqmYR5WdXUBGgAzR+IqgZ5/mxvj+4UoDTAUgwRQIhAPCIVZCSoIaOjY9BzYIXWEvbhpOl4JR88p/xYVoZObd6AiADyJXNqpDg/Lc2viPX14N2d0jQdEjamY4SmiU7GNbIOgFHUiED+4JBU/wACiE8VFbQF4DR8pKgz7+8X2+PHccTcGxVGdEhA9uIzp+4CB5QRgvrN1OXQbBmfW8kOd0cooPWMYJCHBCxUq7gBwAA",
534
+ "error_substr": "invalid signature"
535
+ },
536
+ {
537
+ "description": "wrong message for p2sh-multisig-2of2 full signature",
538
+ "message": "DAOHN7TAL75XRHJILGIO3RXAEM",
539
+ "address": "3Nye4j1GUFqCEBR3do2KEFZAs9oLe8NZ6X",
540
+ "signature": "fulAgAAAAEvAyd4zsoz8gcVU5H19GLYokTAN5PxuKCBlEPjODJ86gAAAADaAEcwRAIgT6rcfxgCmG6b3DpzNV6UG0jiCQGclG9sfiSpV45HDXMCIGgtqjFBuJ7rbi+cgnG0TZiKZaxMk0KI+gQd0pHJfEYCAUgwRQIhANCvCLjGMuZMzH+nCEkNhWhR45T6QRYMLin8utpuF9r1AiBTjG2NLjkre7ec+HPg8UUhK1jL1vgq7YKjq5ROv+h07AFHUiEDhKjcb/Pv1/7AYutzOXwgec08wwD/VwiPm58Lc0xjohghAhycjpwdBuP33orQXAH1CAsrgSkuspxM2+FPQ4OCVhQWUq7gBwAAAQAAAAAAAAAAAWrgBwAA",
541
+ "error_substr": "invalid signature"
542
+ },
543
+ {
544
+ "description": "wrong signer for p2sh-multisig-2of2 full signature",
545
+ "message": "7OKFLKRXSP6J42VQOMSG7MVXEP",
546
+ "address": "3L9uCVRBUfLgKQQK366dmutgsp3GpCwYGE",
547
+ "signature": "fulAgAAAAEvAyd4zsoz8gcVU5H19GLYokTAN5PxuKCBlEPjODJ86gAAAADaAEcwRAIgT6rcfxgCmG6b3DpzNV6UG0jiCQGclG9sfiSpV45HDXMCIGgtqjFBuJ7rbi+cgnG0TZiKZaxMk0KI+gQd0pHJfEYCAUgwRQIhANCvCLjGMuZMzH+nCEkNhWhR45T6QRYMLin8utpuF9r1AiBTjG2NLjkre7ec+HPg8UUhK1jL1vgq7YKjq5ROv+h07AFHUiEDhKjcb/Pv1/7AYutzOXwgec08wwD/VwiPm58Lc0xjohghAhycjpwdBuP33orQXAH1CAsrgSkuspxM2+FPQ4OCVhQWUq7gBwAAAQAAAAAAAAAAAWrgBwAA",
548
+ "error_substr": "invalid signature"
549
+ }
550
+ ]
551
+ }
@@ -47,13 +47,10 @@ def locate_vectors_dir() -> Path | None:
47
47
  env = os.environ.get("OC_PLEDGE_VECTORS_DIR")
48
48
  if env and Path(env).is_dir():
49
49
  return Path(env)
50
- # Sibling-clone preferred for monorepo dev.
51
- sibling = Path(__file__).resolve().parents[3] / "oc-pledge-protocol" / "test-vectors"
50
+ # A clone of oc-pledge-protocol next to oc-packages.
51
+ sibling = Path(__file__).resolve().parents[4] / "oc-pledge-protocol" / "test-vectors"
52
52
  if sibling.is_dir():
53
53
  return sibling
54
- user_home = Path("/Users/wilneeley/Projects/ochk/oc-pledge-protocol/test-vectors")
55
- if user_home.is_dir():
56
- return user_home
57
54
  return None
58
55
 
59
56
 
@@ -109,9 +109,13 @@ def test_wrap_pledge_envelope_matches_pledge_input_from_dict_round_trip():
109
109
  """Loading a v01-shaped vector via pledge_input_from_dict and wrapping
110
110
  with a placeholder sig produces the same id as the spec-pinned one."""
111
111
  import json
112
+ import os
112
113
  from pathlib import Path
113
114
 
114
- vector_path = Path("/Users/wilneeley/Projects/ochk/oc-pledge-protocol/test-vectors/v01-pledge-minimal-chain-state.json")
115
+ vectors_dir = os.environ.get("OC_PLEDGE_VECTORS_DIR") or (
116
+ Path(__file__).resolve().parents[4] / "oc-pledge-protocol" / "test-vectors"
117
+ )
118
+ vector_path = Path(vectors_dir) / "v01-pledge-minimal-chain-state.json"
115
119
  if not vector_path.is_file():
116
120
  pytest.skip("oc-pledge-protocol vectors not available locally")
117
121
  vec = json.loads(vector_path.read_text())
@@ -0,0 +1,52 @@
1
+ """
2
+ The finalized BIP-322's own vectors (bitcoin/bips bip-0322/*.json at d77863fb9e9b),
3
+ the same files @orangecheck/bip322 1.1 tests against: every P2WPKH and P2TR simple
4
+ signature verifies with or without its ``smp`` prefix, and every error vector fails.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ import json
10
+ from pathlib import Path
11
+
12
+ import pytest
13
+
14
+ from orangecheck import verify_bip322_signature
15
+
16
+ FIXTURES = Path(__file__).parent / "fixtures"
17
+ BASIC = json.loads((FIXTURES / "bip322-official-basic.json").read_text())
18
+ GENERATED = json.loads((FIXTURES / "bip322-official-generated.json").read_text())
19
+
20
+ SIGNABLE = [v for v in BASIC["simple"] + GENERATED["simple"] if v["type"] in ("p2wpkh", "p2tr")]
21
+ ERRORS = BASIC["error"] + GENERATED["error"]
22
+
23
+ pytestmark = pytest.mark.skipif(
24
+ verify_bip322_signature is None, reason="install orangecheck[verify] to run BIP-322 vectors"
25
+ )
26
+
27
+
28
+ def test_the_vectors_are_the_expected_set() -> None:
29
+ assert len(SIGNABLE) == 5 # 3 P2WPKH, 2 P2TR
30
+ assert len(ERRORS) == 36
31
+
32
+
33
+ @pytest.mark.parametrize("vector", SIGNABLE, ids=lambda v: f"{v['type']}:{v['message'][:16]}")
34
+ def test_simple_signatures_verify_prefixed_or_not(vector: dict) -> None:
35
+ for sig in vector["bip322_signatures"]:
36
+ bare = sig[3:] if sig.startswith("smp") else sig
37
+ assert verify_bip322_signature(vector["address"], vector["message"], sig)
38
+ assert verify_bip322_signature(vector["address"], vector["message"], bare)
39
+ assert verify_bip322_signature(vector["address"], vector["message"], "smp" + bare)
40
+ assert not verify_bip322_signature(vector["address"], vector["message"] + "!", sig)
41
+
42
+
43
+ @pytest.mark.parametrize("vector", ERRORS, ids=lambda e: e["description"][:48])
44
+ def test_error_vectors_fail(vector: dict) -> None:
45
+ assert not verify_bip322_signature(vector["address"], vector["message"], vector["signature"])
46
+
47
+
48
+ def test_full_and_proof_of_funds_signatures_are_refused() -> None:
49
+ v = SIGNABLE[0]
50
+ bare = v["bip322_signatures"][0].removeprefix("smp")
51
+ assert not verify_bip322_signature(v["address"], v["message"], "ful" + bare)
52
+ assert not verify_bip322_signature(v["address"], v["message"], "pof" + bare)
File without changes
File without changes