bitcoinlib报WalletError:指定钱包未找到,求技术解决方案
解决bitcoinlib Wallet实例化错误问题
问题背景
已安装bitcoinlib模块,运行以下代码时触发WalletError:
运行代码
from bitcoinlib.wallets import Wallet # Set up sender and recipient wallet addresses sender_wallet = Wallet('L3ZoqFs7WYDUdCrzeNgY6ThKP8hEY2ozrpHgk4auDLpNbfeTaxyi') recipient_wallet = 'bc1q98p7r9uqsg3xjwaj6e04d99c5u5rue6kvfl3yu' # Set up transaction details fee = 0.0001 # transaction fee amount = 0.1 # amount to send change = 0.0 # amount to send back to sender data = None # transaction data message = "This is a test transaction" # transaction message # Create transaction and sign with sender's private key tx = sender_wallet.send_to(recipient_wallet, amount, fee, change, data, message) tx.sign(sender_wallet) # Broadcast transaction to Bitcoin network tx.broadcast()
报错信息
Traceback (most recent call last): File "C:\Users\Admin\Desktop\BTC Flashing\sendcrypto.py", line 4, in <module> sender_wallet = Wallet('L3ZoqFs7WYDUdCrzeNgY6ThKP8hEY2ozrpHgk4auDLpNbfeTaxyi') ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Admin\AppData\Roaming\Python\Python311\site-packages\bitcoinlib\wallets.py", line 1408, in __init__ raise WalletError("Wallet '%s' not found, please specify correct wallet ID or name." % wallet) bitcoinlib.wallets.WalletError: Wallet 'L3ZoqFs7WYDUdCrzeNgY6ThKP8hEY2ozrpHgk4auDLpNbfeTaxyi' not found, please specify correct wallet ID or name.
用户明确知晓公开私钥的风险,需解决该错误。
解决方法
错误原因
bitcoinlib的Wallet类初始化时,参数接受的是钱包名称、ID或数据库中已存在的钱包标识,而非私钥。直接传入私钥会导致库无法匹配到对应钱包,触发错误。
正确实现代码
使用Wallet.create()方法从私钥导入并创建钱包实例:
from bitcoinlib.wallets import Wallet # 你的私钥 private_key = 'L3ZoqFs7WYDUdCrzeNgY6ThKP8hEY2ozrpHgk4auDLpNbfeTaxyi' recipient_addr = 'bc1q98p7r9uqsg3xjwaj6e04d99c5u5rue6kvfl3yu' # 从私钥创建/加载钱包 # 第一个参数为钱包名称,若已存在则直接加载,不存在则创建并导入私钥 sender_wallet = Wallet.create('my_sender_wallet', keys=private_key, network='bitcoin') # 设置交易参数 fee = 0.0001 send_amount = 0.1 change_amount = 0.0 tx_data = None tx_message = "This is a test transaction" # 创建交易并自动签名(send_to方法会自动用钱包内的密钥完成签名) tx = sender_wallet.send_to(recipient_addr, send_amount, fee, change_amount, tx_data, tx_message) # 广播交易到比特币网络 tx.broadcast()
关键注意事项
Wallet.create()会自动处理钱包的创建与加载:若指定名称的钱包已存在,直接加载;不存在则创建新钱包并导入私钥。send_to方法默认会使用钱包内的私钥完成交易签名,无需额外调用tx.sign(),重复调用可能引发签名冲突错误。network='bitcoin'指定使用比特币主网,若使用测试网可改为'testnet'。
内容的提问来源于stack exchange,提问作者Pranav Suchak
相关产品推荐
相关产品推荐

