Exemplo n.º 1
0
 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")
Exemplo n.º 2
0
 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")
Exemplo n.º 3
0
 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"
Exemplo n.º 4
0
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)
Exemplo n.º 5
0
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()
Exemplo n.º 6
0
    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)
Exemplo n.º 7
0
    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)
Exemplo n.º 8
0
 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)
Exemplo n.º 9
0
 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")
Exemplo n.º 10
0
 def test_address_str(self):
     assert (str(Address(
         version="P2PKH",
         payload=[])) == "version: P2PKH\npayload: []\nprefix: bitcoincash")
Exemplo n.º 11
0
 def test_cashaddress_regtest(self):
     assert (Address(payload=list(PUBKEY_HASH),
                     version="P2PKH-REGTEST").cash_address() ==
             BITCOIN_CASHADDRESS_REGTEST)
Exemplo n.º 12
0
 def test_cashaddress_mainnet(self):
     assert (Address(payload=list(PUBKEY_HASH),
                     version="P2PKH").cash_address() == BITCOIN_CASHADDRESS)
Exemplo n.º 13
0
 def test_address_unexpected(self):
     with pytest.raises(ValueError):
         assert (Address(
             payload=list(PUBKEY_HASH),
             version="P2KPH").cash_address() == BITCOIN_CASHADDRESS)