ut_addrparse.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #!/usr/bin/env python3
  2. """
  3. test/unit_tests_d/ut_addrparse: address parsing tests for the MMGen suite
  4. """
  5. from mmgen.common import *
  6. vectors = {
  7. 'btc_mainnet': [
  8. {'std': '1C5VPtgq9xQ6AcTgMAR3J6GDrs72HC4pS1'},
  9. {'std': '3AhjTiWHhVJAi1s5CfKMcLzYps12x3gZhg'},
  10. {'std': 'bc1q6pqnfwwakuuejpm9w52ds342f9d5u36v0qnz7c'}
  11. ],
  12. 'ltc_mainnet': [
  13. {'std': 'LUbHQNYoy23RByq4dKQotLA4ugk9FhpAMT'},
  14. {'std': 'MCoZrHYPqYKqvpiwyzzqf3EPxF5no6puEf'},
  15. {'std': 'ltc1qvmqas4maw7lg9clqu6kqu9zq9cluvllnst5pxs'}
  16. ],
  17. 'xmr_mainnet': [
  18. { # ut_xmrseed.vectors[0]:
  19. 'std': '42ey1afDFnn4886T7196doS9GPMzexD9gXpsZJDwVjeRVdFCSoHnv7KPbBeGpzJBzHRCAs9UxqeoyFQMYbqSWYTfJJQAWDm',
  20. },{
  21. 'std': '46r4nYSevkfBUMhuykdK3gQ98XDqDTYW1hNLaXNvjpsJaSbNtdXh1sKMsdVgqkaihChAzEy29zEDPMR3NHQvGoZCLGwTerK',
  22. }
  23. ],
  24. 'zec_mainnet': [
  25. {'std': 't1KQYLBvjpmcQuATommo6gx2QTQDLPikB8Q'},
  26. {'std': 'zceQDpyNwek7dKqF5ZuFGj7YrNVxh7X1aPkrVxDLVxWSiZAFDEuy5C7XNV8VhyZ3ghTPQ61xjCGiyLT3wqpiN1Yi6mdmaCq'},
  27. ],
  28. 'eth_mainnet': [
  29. {'std': '7e5f4552091a69125d5dfcb7b8c2659029395bdf'},
  30. ],
  31. }
  32. def test_network(proto,addrs):
  33. def check_equal(a,b):
  34. assert a == b, f'{a.hex()} != {b.hex()}'
  35. def check_bytes(addr):
  36. if addr.parsed.ver_bytes is not None:
  37. check_equal(
  38. addr.parsed.ver_bytes,
  39. proto.addr_fmt_to_ver_bytes.get(addr.addr_fmt) )
  40. check_equal(
  41. addr.parsed.data,
  42. addr.bytes )
  43. def fmt_addr_data(addr):
  44. return pp_fmt({k:(v.hex() if isinstance(v,bytes) else v) for k,v in addr.parsed._asdict().items()})
  45. def print_info(addr):
  46. vmsg('\n{}\n{}\n{}'.format(
  47. yellow(addr.addr_fmt),
  48. cyan(addr),
  49. fmt_addr_data(addr)))
  50. msg_r(f'Testing {proto.coin} address parsing...')
  51. vmsg('')
  52. from mmgen.addr import CoinAddr
  53. for addr in addrs:
  54. a1 = CoinAddr(proto,addr['std'])
  55. print_info(a1)
  56. check_bytes(a1)
  57. msg('OK')
  58. vmsg('')
  59. class unit_test(object):
  60. def run_test(self,name,ut):
  61. from mmgen.protocol import init_proto
  62. for net_id,addrs in vectors.items():
  63. coin,network = net_id.split('_')
  64. test_network(
  65. init_proto(coin,network=network),
  66. addrs )
  67. return True