def public_key_to_segwit_address(public_key, version='main'): if version == 'test': version = TEST_SCRIPT_HASH else: version = MAIN_SCRIPT_HASH length = len(public_key) if length != 33: raise ValueError('{} is an invalid length for a public key. Segwit only uses compressed public keys'.format(length)) return b58encode_check(version + ripemd160_sha256(b'\x00\x14' + ripemd160_sha256(public_key)))
def multisig_to_segwit_address(public_keys, m, version='main'): if version == 'test': version = TEST_SCRIPT_HASH else: version = MAIN_SCRIPT_HASH return b58encode_check(version + ripemd160_sha256(b'\x00\x20' + sha256(multisig_to_redeemscript(public_keys, m))))
def public_key_to_address(public_key, version='main', coin=Bitcoin): if version == 'test': version = coin.TEST_PUBKEY_HASH else: version = coin.MAIN_PUBKEY_HASH length = len(public_key) if length not in (33, 65): raise ValueError('{} is an invalid length for a public key.'.format(length)) return b58encode_check(version + ripemd160_sha256(public_key))
def generate_key_address_pairs(prefix, counter, match, queue): # pragma: no cover context = Context() while True: if match.is_set(): return with counter.get_lock(): counter.value += 1 private_key = ECPrivateKey(context=context) address = b58encode_check( b'\x00' + ripemd160_sha256(private_key.public_key.format()) ) if address.startswith(prefix): match.set() queue.put_nowait((private_key.secret, address)) return