Skip to content

Commit aac8793

Browse files
committed
test: test_bech32_decode in address.py
Adds bech32_to_bytes() which can decode a bech32 address and return the version as an `int` and the payload in bytes. bech32_to_bytes() is used by the test_bech32_decode unit test to test decoding of segwit addresses.
1 parent 1884b71 commit aac8793

File tree

1 file changed

+29
-1
lines changed

1 file changed

+29
-1
lines changed

test/functional/test_framework/address.py

+29-1
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,11 @@
2020
sha256,
2121
taproot_construct,
2222
)
23-
from .segwit_addr import encode_segwit_address
2423
from .util import assert_equal
24+
from test_framework.segwit_addr import (
25+
decode_segwit_address,
26+
encode_segwit_address,
27+
)
2528

2629
ADDRESS_BCRT1_UNSPENDABLE = 'bcrt1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq3xueyj'
2730
ADDRESS_BCRT1_UNSPENDABLE_DESCRIPTOR = 'addr(bcrt1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq3xueyj)#juyq9d97'
@@ -159,6 +162,16 @@ def check_script(script):
159162
assert False
160163

161164

165+
def bech32_to_bytes(address):
166+
hrp = address.split('1')[0]
167+
if hrp not in ['bc', 'tb', 'bcrt']:
168+
return (None, None)
169+
version, payload = decode_segwit_address(hrp, address)
170+
if version is None:
171+
return (None, None)
172+
return version, bytearray(payload)
173+
174+
162175
class TestFrameworkScript(unittest.TestCase):
163176
def test_base58encodedecode(self):
164177
def check_base58(data, version):
@@ -176,3 +189,18 @@ def check_base58(data, version):
176189
check_base58(bytes.fromhex('0041c1eaf111802559bad61b60d62b1f897c63928a'), 0)
177190
check_base58(bytes.fromhex('000041c1eaf111802559bad61b60d62b1f897c63928a'), 0)
178191
check_base58(bytes.fromhex('00000041c1eaf111802559bad61b60d62b1f897c63928a'), 0)
192+
193+
194+
def test_bech32_decode(self):
195+
def check_bech32_decode(payload, version):
196+
hrp = "tb"
197+
self.assertEqual(bech32_to_bytes(encode_segwit_address(hrp, version, payload)), (version, payload))
198+
199+
check_bech32_decode(bytes.fromhex('36e3e2a33f328de12e4b43c515a75fba2632ecc3'), 0)
200+
check_bech32_decode(bytes.fromhex('823e9790fc1d1782321140d4f4aa61aabd5e045b'), 0)
201+
check_bech32_decode(bytes.fromhex('79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798'), 1)
202+
check_bech32_decode(bytes.fromhex('39cf8ebd95134f431c39db0220770bd127f5dd3cc103c988b7dcd577ae34e354'), 1)
203+
check_bech32_decode(bytes.fromhex('708244006d27c757f6f1fc6f853b6ec26268b727866f7ce632886e34eb5839a3'), 1)
204+
check_bech32_decode(bytes.fromhex('616211ab00dffe0adcb6ce258d6d3fd8cbd901e2'), 0)
205+
check_bech32_decode(bytes.fromhex('b6a7c98b482d7fb21c9fa8e65692a0890410ff22'), 0)
206+
check_bech32_decode(bytes.fromhex('f0c2109cb1008cfa7b5a09cc56f7267cd8e50929'), 0)

0 commit comments

Comments
 (0)