扩展密钥标准结构 比特币钱包代码示例
- 2025-09-25 18:00:00
- admin
- 原创 115
一、扩展密钥标准结构
1、标准结构:https://github.com/bitcoin/bips/blob/master/bip-0043.mediawiki
2、标准结构p2pkh:https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki
3、标准结构p2wpkh:https://github.com/bitcoin/bips/blob/master/bip-0084.mediawiki
4、bip32默认结构:m / account' / change / address_index,默认账户m / 0' / *
5、bip44标准结构:m / purpose' / coin_type' / account' / change / address_index
6、bip84标准结构:m / purpose' / coin_type' / account' / change / address_index
7、purpose密钥结构类型,coin_type加密币类型,account账号,change是否找零;
8、change=0用于外部收款场景,change=1用于内部找零场景;
9、如果一个账号没有一笔交易,则不应该创建第二个账号;
枚举值:
1、密钥结构类型:https://github.com/satoshilabs/slips/blob/master/slip-0132.md
2、加密币类型:https://github.com/satoshilabs/slips/blob/master/slip-0044.md
3、密钥结构类型:44-0x0488b21e-xpub,84-0x04b24746-zpub
4、加密币类型:BTC=0x80000000,ETH=0x8000003c,Testnet=0x80000001
二、比特币钱包代码示例
1、bitcoinlib帮助文档:https://bitcoinlib.readthedocs.io/en/latest
2、bitcoinlib代码仓库:https://github.com/petertodd/python-bitcoinlib
3、bitcoinlib代码示例:https://github.com/1200wd/bitcoinlib/tree/master/examples
4、解析地址:pprint(deserialize_address("1CJqoFv6Zjq4yTXd5GUSKYrqUpqifWQooh"))
引入依赖:
from bitcoinlib.wallets import *
from bitcoinlib.keys import *
from pprint import pprint
创建钱包:
print("=== Create a wallet ===")
walletName = 'walletDemo'
w = wallet_create_or_open(walletName)
wkey = w.get_key()
print(wkey.address)
print(w.info())
导入私钥:
print("\n=== Import Private key ===")
k = Key('1a4a977d877204edab6ef27b0152fa0a2448aa7eb884e2128e3413810279f60c')
print(k.private_hex)
print(k.public_hex)
print(k.address())
导入公钥:
print("\n=== Import Public key ===")
k = Key('024973089d2ec876daca936cfda64b5e163d64b7d206ab8a7c53e13585b7b29eeb')
print(k.private_hex)
print(k.public_hex)
print(k.address())
导出密钥:
print("\n=== Import from seed ===")
hdk = HDKey.from_seed('1a4a977d877204edab6ef27b0152fa0a2448aa7eb884e2128e3413810279f60c')
print(hdk.private_hex)
print(hdk.public_hex)
print(hdk.address())
hdk = hdk.key_for_path("m/1/0'/999")
print(hdk.private_hex)
print(hdk.public_hex)
print(hdk.address())