aboutsummaryrefslogtreecommitdiff
path: root/test/functional/test_framework/address.py
diff options
context:
space:
mode:
authorPieter Wuille <pieter.wuille@gmail.com>2020-05-02 13:59:00 -0700
committerPieter Wuille <pieter@wuille.net>2020-06-09 17:50:50 -0700
commitc75de5da5fdd3a304f9da3d8a2e0370d1723ddd0 (patch)
tree5da616ca84e1c1f94457e95fb71615684afc6300 /test/functional/test_framework/address.py
parentf8364df25070cea08f0fb5bbbb212f1ff72f9d21 (diff)
downloadbitcoin-c75de5da5fdd3a304f9da3d8a2e0370d1723ddd0.tar.xz
[TESTS] Move base58 to own module to break circular dependency
This breaks the script->key->address->script dependency cycle.
Diffstat (limited to 'test/functional/test_framework/address.py')
-rw-r--r--test/functional/test_framework/address.py71
1 files changed, 2 insertions, 69 deletions
diff --git a/test/functional/test_framework/address.py b/test/functional/test_framework/address.py
index 9506b63f82..822a7f9763 100644
--- a/test/functional/test_framework/address.py
+++ b/test/functional/test_framework/address.py
@@ -5,15 +5,13 @@
"""Encode and decode BASE58, P2PKH and P2SH addresses."""
import enum
-import unittest
-from .script import hash256, hash160, sha256, CScript, OP_0
+from .base58 import byte_to_base58
+from .script import hash160, sha256, CScript, OP_0
from .util import hex_str_to_bytes
from . import segwit_addr
-from test_framework.util import assert_equal
-
ADDRESS_BCRT1_UNSPENDABLE = 'bcrt1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq3xueyj'
ADDRESS_BCRT1_UNSPENDABLE_DESCRIPTOR = 'addr(bcrt1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq3xueyj)#juyq9d97'
# Coins sent to this address can be spent with a witness stack of just OP_TRUE
@@ -25,52 +23,6 @@ class AddressType(enum.Enum):
p2sh_segwit = 'p2sh-segwit'
legacy = 'legacy' # P2PKH
-
-chars = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
-
-
-def byte_to_base58(b, version):
- result = ''
- str = b.hex()
- str = chr(version).encode('latin-1').hex() + str
- checksum = hash256(hex_str_to_bytes(str)).hex()
- str += checksum[:8]
- value = int('0x'+str,0)
- while value > 0:
- result = chars[value % 58] + result
- value //= 58
- while (str[:2] == '00'):
- result = chars[0] + result
- str = str[2:]
- return result
-
-
-def base58_to_byte(s, verify_checksum=True):
- if not s:
- return b''
- n = 0
- for c in s:
- n *= 58
- assert c in chars
- digit = chars.index(c)
- n += digit
- h = '%x' % n
- if len(h) % 2:
- h = '0' + h
- res = n.to_bytes((n.bit_length() + 7) // 8, 'big')
- pad = 0
- for c in s:
- if c == chars[0]:
- pad += 1
- else:
- break
- res = b'\x00' * pad + res
- if verify_checksum:
- assert_equal(hash256(res[:-4])[:4], res[-4:])
-
- return res[1:-4], int(res[0])
-
-
def keyhash_to_p2pkh(hash, main = False):
assert len(hash) == 20
version = 0 if main else 111
@@ -128,22 +80,3 @@ def check_script(script):
if (type(script) is bytes or type(script) is CScript):
return script
assert False
-
-
-class TestFrameworkScript(unittest.TestCase):
- def test_base58encodedecode(self):
- def check_base58(data, version):
- self.assertEqual(base58_to_byte(byte_to_base58(data, version)), (data, version))
-
- check_base58(b'\x1f\x8e\xa1p*{\xd4\x94\x1b\xca\tA\xb8R\xc4\xbb\xfe\xdb.\x05', 111)
- check_base58(b':\x0b\x05\xf4\xd7\xf6l;\xa7\x00\x9fE50)l\x84\\\xc9\xcf', 111)
- check_base58(b'A\xc1\xea\xf1\x11\x80%Y\xba\xd6\x1b`\xd6+\x1f\x89|c\x92\x8a', 111)
- check_base58(b'\0A\xc1\xea\xf1\x11\x80%Y\xba\xd6\x1b`\xd6+\x1f\x89|c\x92\x8a', 111)
- check_base58(b'\0\0A\xc1\xea\xf1\x11\x80%Y\xba\xd6\x1b`\xd6+\x1f\x89|c\x92\x8a', 111)
- check_base58(b'\0\0\0A\xc1\xea\xf1\x11\x80%Y\xba\xd6\x1b`\xd6+\x1f\x89|c\x92\x8a', 111)
- check_base58(b'\x1f\x8e\xa1p*{\xd4\x94\x1b\xca\tA\xb8R\xc4\xbb\xfe\xdb.\x05', 0)
- check_base58(b':\x0b\x05\xf4\xd7\xf6l;\xa7\x00\x9fE50)l\x84\\\xc9\xcf', 0)
- check_base58(b'A\xc1\xea\xf1\x11\x80%Y\xba\xd6\x1b`\xd6+\x1f\x89|c\x92\x8a', 0)
- check_base58(b'\0A\xc1\xea\xf1\x11\x80%Y\xba\xd6\x1b`\xd6+\x1f\x89|c\x92\x8a', 0)
- check_base58(b'\0\0A\xc1\xea\xf1\x11\x80%Y\xba\xd6\x1b`\xd6+\x1f\x89|c\x92\x8a', 0)
- check_base58(b'\0\0\0A\xc1\xea\xf1\x11\x80%Y\xba\xd6\x1b`\xd6+\x1f\x89|c\x92\x8a', 0)