def address_to_cashaddr(address: str, coin: CoinInfo) -> str: raw = base58.decode_check(address, coin.b58_hash) version, data = raw[0], raw[1:] if version == coin.address_type: version = cashaddr.ADDRESS_TYPE_P2KH elif version == coin.address_type_p2sh: version = cashaddr.ADDRESS_TYPE_P2SH else: raise ValueError("Unknown cashaddr address type") return cashaddr.encode(coin.cashaddr_prefix, version, data)
def test_valid_address(self): # b58 -> cashaddr for b58, ca in VALID_ADDRESS: data = base58.decode_check(b58) version = data[0] if version == 5: version = 8 enc = cashaddr.encode('bitcoincash', version, data[1:]) self.assertEqual(ca, enc) # cashaddr -> base58 for b58, ca in VALID_ADDRESS: prefix, addr = ca.split(':') version, data = cashaddr.decode(prefix, addr) if version == 8: version = 5 enc = base58.encode_check(bytes([version]) + data) self.assertEqual(b58, enc)