def address(self): """The public address you share with others to receive funds.""" if self._address is None: self._address = public_key_to_address(self._public_key, version='test') return self._address
def get_signer_address(self, txrow): txins = self.conn.execute('''SELECT asmhex FROM txin WHERE tx = ?''', (txrow, )).fetchall() address = None for txin in txins: asmhex = txin[0] asm = bytes.fromhex(asmhex) sig_size = int.from_bytes(asm[0:1], 'little') pubkey_size = int.from_bytes(asm[sig_size + 1:sig_size + 2], 'little') pubkey = asm[sig_size + 2:sig_size + pubkey_size + 2] pubkey_address = public_key_to_address(pubkey) if not address: address = pubkey_address elif address != pubkey_address: raise ValueError( "Multiple signer keys are present in the transaction inputs" ) return address
def generate_key_address_pair(): # pragma: no cover private_key = ECPrivateKey() address = public_key_to_address(private_key.public_key.format()) return bytes_to_wif(private_key.secret), address
def test_public_key_to_address_incorrect_length(self): with pytest.raises(ValueError): public_key_to_address(PUBLIC_KEY_COMPRESSED[:-1])
def test_public_key_to_address_test_uncompressed(self): assert public_key_to_address(PUBLIC_KEY_UNCOMPRESSED, version='test') == BITCOIN_ADDRESS_TEST
def test_public_key_to_address_uncompressed(self): assert public_key_to_address(PUBLIC_KEY_UNCOMPRESSED) == BITCOIN_ADDRESS
def test_public_key_to_address_regtest_uncompressed(self): assert (public_key_to_address( PUBLIC_KEY_UNCOMPRESSED, version="regtest") == BITCOIN_CASHADDRESS_REGTEST)
def test_public_key_to_address_test_compressed(self): assert (public_key_to_address( PUBLIC_KEY_COMPRESSED, version="test") == BITCOIN_CASHADDRESS_TEST_COMPRESSED)
def test_public_key_to_address_incorrect_version(self): with pytest.raises(ValueError): public_key_to_address(PUBLIC_KEY_COMPRESSED, "incorrect-version")
def test_public_key_to_address_compressed(self): assert (public_key_to_address(PUBLIC_KEY_COMPRESSED) == BITCOIN_CASHADDRESS_COMPRESSED)