第4章:编程实战,用程序编写、理解不同地址类型的交易
本文我们要通过比特币测试网的编程,彻底实践比特币脚本的编程,并理解不同地址类型的交易。
我们的路径是,用前文谈到的脚本产生一系列钱包。先通过水龙头,让传统地址(P2PKH)获得测试币,然后传统地址给Segwit地址(P2WPKH),然后Segwit地址支付到Taproot地址(P2TR),最后Taproot地址付款给Taproot地址。
产生钱包地址
# 生成比特币钱包
key = Key(network='testnet')
# 生成私钥
private_key_hex = key.private_hex # 32 字节(256-bit)
private_key_wif = key.wif() # Base58Check 编码
# 生成公钥
public_key_compressed = key.public_hex # 33 字节,压缩格式
public_key_uncompressed = key.public_uncompressed_hex # 65 字节,未压缩格式
# 生成不同格式的比特币地址
legacy_address = key.address() # P2PKH (Base58, 1...)
segwit_native_address = key.address(encoding='bech32') # P2WPKH (Bech32, bc1q...)
segwit_p2sh_address = key.address(encoding='base58', script_type='p2sh') # P2SH-P2WPKH (3...)
taproot_address = key.address(script_type='p2tr') # P2TR (Bech32m, bc1p...)
# 打印结果
print("===== 比特币钱包信息 =====")
print(f"私钥(HEX): {private_key_hex}")
print(f"私钥(WIF): {private_key_wif}")
print(f"公钥(压缩): {public_key_compressed}")
print(f"公钥(未压缩): {public_key_uncompressed}")
print("\n地址类型:")
print(f"Legacy (P2PKH, Base58): {legacy_address}")
print(f"Segwit Native (P2WPKH, Bech32): {segwit_native_address}")
print(f"Segwit P2SH (P2SH-P2WPKH, Base58): {segwit_p2sh_address}")
print(f"Taproot (P2TR, Bech32m): {taproot_address}")
得到如下结果
===== 比特币钱包信息 =====
私钥(HEX): 3dc973ac6d9175641bfd354ad0570b5227974c1eb7fae9cfe78d2533bf883d7f
私钥(WIF): cPeon9fBsW2BxwJTALj3hGzh9vm8C52Uqsce7MzXGS1iFJkPF4AT
公钥(压缩): 02898711e6bf63f5cbe1b38c05e89d6c391c59e9f8f695da44bf3d20ca674c8519
公钥(未压缩): 04898711e6bf63f5cbe1b38c05e89d6c391c59e9f8f695da44bf3d20ca674c8519ce2712e5f070c4138fd2481595888d3cf96f960f7bcb095850d4dc0b446eba5e
地址类型:
Legacy (P2PKH, Base58): myYHJtG3cyoRseuTwvViGHgP2efAvZkYa4
Segwit Native (P2WPKH, Bech32): tb1qckeg66a6jx3xjw5mrpmte5ujjv3cjrajtvm9r4
Segwit P2SH (P2SH-P2WPKH, Base58): 2NBGZ17bXyKBuPVkq2aooUwpFXXZMNcJENc
Taproot (P2TR, Bech32m): tb1pjyjeruun8pc5ln3wtv2d6lsxqn55frpyc83kn473h7848d0kj73sxy3ku8
给myYHJtG3cyoRseuTwvViGHgP2efAvZkYa4获得了水。https://mempool.space/testnet/tx/34b90a15d0a9ec9ff3d7bed2536533c73278a9559391cb8c9778b7e7141806f7。 获得了0.00029606 tBTC。
Last updated