def get_cashaddr_pubkey_hash(address, net): try: ver, data = cash_addr.decode(net.HUMAN_READABLE_PART, address) if ver is None or data is None: raise ValueError except Exception as e: raise AddrError else: return int(''.join('{:02x}'.format(x) for x in data), 16), -1, ver
def test_old_and_new_addresses_match(self): for oaddr, naddr in self.OLD_NEW_ADDRESS: # Base58 has 4 bytes of checksum odata = self.to_byte_array(data.base58_decode(oaddr))[:-4] for prefix in [True, False]: addr = naddr if prefix else naddr[12:] # cashaddr.decode already removes the 5 bytes of checksum nver, ndata = cash_addr.decode('bitcoincash', naddr) self.assertTrue( odata[0] in [0, 5], "Old address %s is not a valid version" % oaddr) self.assertTrue(ndata[0] & 8 in [0, 8], "New address %s in not a valid type" % naddr) if odata[0] == 0: self.assertEqual(0, nver, "Bad version for %s" % naddr) elif odata[0] == 5: self.assertEqual(1, nver, "Bad version for %s" % naddr) self.assertListEqual( odata[1:], ndata, "Old address %s and new address %s don't have the same payload." % (oaddr, naddr))
def test_decode(self, mcb, md): data = [0, 1, 2, 3, 4, 5] md.return_value = ('bchtest', data) addr = 'bitcoincash:qzzxswqlwze7c0gj8mwel8l4q3wqk0krlu7jch88gv' pfix = 'bitcoincash' # Test wrong prefix self.assertTupleEqual((None, None), cash_addr.decode(pfix, addr)) md.assert_called_once_with(addr, pfix) md.reset_mock() self.assertTupleEqual((None, None), cash_addr.decode(pfix, addr[12:])) md.assert_called_once_with(addr[12:], pfix) self.assertEqual(0, mcb.call_count) # Test bad convertbits mcb.return_value = None md.return_value = (pfix, data) self.assertTupleEqual((None, None), cash_addr.decode(pfix, addr)) mcb.assert_called_once_with(data, 5, 8, False) mcb.return_value = [] self.assertTupleEqual((None, None), cash_addr.decode(pfix, addr)) # Test version mcb.return_value = [0, 5, 4, 3] self.assertTupleEqual((0, [5, 4, 3]), cash_addr.decode(pfix, addr)) mcb.return_value = [8, 1, 2, 3] self.assertTupleEqual((1, [1, 2, 3]), cash_addr.decode(pfix, addr))
def test_invalid_addresess(self): for addr in self.INVALID_ADDRESS: prefix = self.get_prefix(addr) self.assertEqual((None, None), cash_addr.decode(prefix, addr), "Address %s failed." % addr)
def test_valid_addresses(self): for addr, script in self.VALID_ADDRESS: prefix = self.get_prefix(addr) ver, data = cash_addr.decode(prefix, addr) self.assertEqual(addr.lower(), cash_addr.encode(prefix, ver, data), "Address %s failed." % addr)