def test_address_regtest(self): assert Address(payload=list(PUBKEY_HASH), version="P2PKH-REGTEST").payload == list(PUBKEY_HASH) assert (Address(payload=list(PUBKEY_HASH), version="P2PKH-REGTEST").prefix == "bchreg") assert (Address(payload=list(PUBKEY_HASH), version="P2PKH-REGTEST").version == "P2PKH-REGTEST")
def test_address_testnet(self): assert Address(payload=list(PUBKEY_HASH), version="P2PKH-TESTNET").payload == list(PUBKEY_HASH) assert (Address(payload=list(PUBKEY_HASH), version="P2PKH-TESTNET").prefix == "bchtest") assert (Address(payload=list(PUBKEY_HASH), version="P2PKH-TESTNET").version == "P2PKH-TESTNET")
def test_address_mainnet(self): assert Address(payload=list(PUBKEY_HASH), version="P2PKH").payload == list(PUBKEY_HASH) assert (Address(payload=list(PUBKEY_HASH), version="P2PKH").prefix == "bitcoincash") assert Address(payload=list(PUBKEY_HASH), version="P2PKH").version == "P2PKH"
def address_to_public_key_hash(address): address = Address.from_string(address) if "P2PKH" not in address.version: # Bitcash currently only has support for P2PKH transaction types # P2SH and others will raise ValueError raise ValueError("Bitcash currently only supports P2PKH addresses") return bytes(address.payload)
def public_key_to_address(public_key, version="main"): # Currently Bitcash only support P2PKH (not P2SH) VERSIONS = { "main": "P2PKH", "test": "P2PKH-TESTNET", "regtest": "P2PKH-REGTEST" } try: version = VERSIONS[version] except: raise ValueError("Invalid version: {}".format(version)) # 33 bytes compressed, 65 uncompressed. length = len(public_key) if length not in (33, 65): raise ValueError(f"{length} is an invalid length for a public key.") payload = list(ripemd160_sha256(public_key)) address = Address(payload=payload, version=version) return address.cash_address()
def test_from_string_testnet(self): assert (bytes(Address.from_string(BITCOIN_CASHADDRESS_TEST).payload) == PUBKEY_HASH) assert (bytes( Address.from_string(BITCOIN_CASHADDRESS_TEST_COMPRESSED).payload) == PUBKEY_HASH_COMPRESSED) # Legacy addresses with pytest.raises(InvalidAddress): Address.from_string(BITCOIN_ADDRESS_TEST) with pytest.raises(InvalidAddress): Address.from_string(BITCOIN_ADDRESS_TEST_COMPRESSED)
def test_from_string_mainnet(self): # Test decoding from cashaddress into public hash assert bytes( Address.from_string(BITCOIN_CASHADDRESS).payload) == PUBKEY_HASH assert (bytes( Address.from_string(BITCOIN_CASHADDRESS_COMPRESSED).payload) == PUBKEY_HASH_COMPRESSED) # Legacy addresses with pytest.raises(InvalidAddress): Address.from_string(BITCOIN_ADDRESS) with pytest.raises(InvalidAddress): Address.from_string(BITCOIN_ADDRESS_COMPRESSED)
def test_cashaddress_incorrect_network(self): assert (Address(payload=list(PUBKEY_HASH), version="P2PKH").cash_address() != BITCOIN_CASHADDRESS_TEST) assert (Address(payload=list(PUBKEY_HASH), version="P2PKH").cash_address() != BITCOIN_CASHADDRESS_REGTEST) assert (Address(payload=list(PUBKEY_HASH), version="P2PKH-TESTNET").cash_address() != BITCOIN_CASHADDRESS) assert (Address(payload=list(PUBKEY_HASH), version="P2PKH-TESTNET").cash_address() != BITCOIN_CASHADDRESS_REGTEST) assert (Address(payload=list(PUBKEY_HASH), version="P2PKH-REGTEST").cash_address() != BITCOIN_CASHADDRESS) assert (Address(payload=list(PUBKEY_HASH), version="P2PKH-REGTEST").cash_address() != BITCOIN_CASHADDRESS_TEST)
def test_from_string_unexpected(self): # Test unexpected values with pytest.raises(InvalidAddress): Address.from_string(42) with pytest.raises(InvalidAddress): Address.from_string(0.999) with pytest.raises(InvalidAddress): Address.from_string(True) with pytest.raises(InvalidAddress): Address.from_string(False) with pytest.raises(InvalidAddress): Address.from_string( "bitcoincash:qzFyVx77v2pmgc0vulwlfkl3Uzjgh5gnMqk5hhyaa6") with pytest.raises(InvalidAddress): Address.from_string( "bitcoincash:qzfyvx77v2pmgc0vulwlfkl3uzjgh5gnmqk5hhyba6") with pytest.raises(InvalidAddress): Address.from_string("Hello world!") with pytest.raises(InvalidAddress, match="Expected string as input"): Address.from_string(BadStr()) with pytest.raises(InvalidAddress): Address.from_string("bchreg::1234") with pytest.raises(InvalidAddress, match="Could not determine address version"): Address.from_string( "bitcoincash:qxfyvx77v2pmgc0vulwlfkl3uzjgh5gnmqedjjrtq6")
def test_address_str(self): assert (str(Address( version="P2PKH", payload=[])) == "version: P2PKH\npayload: []\nprefix: bitcoincash")
def test_cashaddress_regtest(self): assert (Address(payload=list(PUBKEY_HASH), version="P2PKH-REGTEST").cash_address() == BITCOIN_CASHADDRESS_REGTEST)
def test_cashaddress_mainnet(self): assert (Address(payload=list(PUBKEY_HASH), version="P2PKH").cash_address() == BITCOIN_CASHADDRESS)
def test_address_unexpected(self): with pytest.raises(ValueError): assert (Address( payload=list(PUBKEY_HASH), version="P2KPH").cash_address() == BITCOIN_CASHADDRESS)