/bitcoinbook/bitcoinbook/blob/second_edition/code/key-to-address-ecc-example.py
这个适用于py3.0+版本。
import bitcoin# Generate a random private keyvalid_private_key = Falsewhile not valid_private_key:private_key = bitcoin.random_key()decoded_private_key = bitcoin.decode_privkey(private_key, 'hex')valid_private_key = 0 < decoded_private_key < bitcoin.Nprint("Private Key (hex) is: ", private_key)print("Private Key (decimal) is: ", decoded_private_key)# Convert private key to WIF formatwif_encoded_private_key = bitcoin.encode_privkey(decoded_private_key, 'wif')print("Private Key (WIF) is: ", wif_encoded_private_key)# Add suffix "01" to indicate a compressed private keycompressed_private_key = private_key + '01'print("Private Key Compressed (hex) is: ", compressed_private_key)# Generate a WIF format from the compressed private key (WIF-compressed)wif_compressed_private_key = bitcoin.encode_privkey(bitcoin.decode_privkey(compressed_private_key, 'hex'), 'wif')print("Private Key (WIF-Compressed) is: ", wif_compressed_private_key)# Multiply the EC generator point G with# the private key to get a public key pointpublic_key = bitcoin.fast_multiply(bitcoin.G, decoded_private_key)print("Public Key (x,y) coordinates is:", public_key)# Encode as hex, prefix 04hex_encoded_public_key = bitcoin.encode_pubkey(public_key, 'hex')print("Public Key (hex) is:", hex_encoded_public_key)# Compress public key, adjust prefix depending on whether y is even or odd(public_key_x, public_key_y) = public_keyif (public_key_y % 2) == 0:compressed_prefix = '02'else:compressed_prefix = '03'hex_compressed_public_key = compressed_prefix +\bitcoin.encode(public_key_x, 16)print("Compressed Public Key (hex) is:", hex_compressed_public_key)# Generate bitcoin address from public keyprint("Bitcoin Address (b58check) is:", bitcoin.pubkey_to_address(public_key))# Generate compressed bitcoin address from compressed public keyprint("Compressed Bitcoin Address (b58check) is:",bitcoin.pubkey_to_address(hex_compressed_public_key))