使用bitcoinlib发送比特币报错:Not enough unspent transaction outputs found
问题原因与解决办法
错误核心原因
你碰到的Not enough unspent transaction outputs found错误,主要是这几个情况导致:
- 比特币转账必须支付矿工手续费,你要转出的0.00017984 BTC加上手续费后,已经超出钱包实际可支配余额;
- 钱包未完成UTXO(未花费交易输出)同步,导致bitcoinlib无法识别到可用资金;
- 若钱包内的UTXO是多个小额输出的总和,可能单个UTXO不足以覆盖转账金额+手续费,库未自动完成合并处理。
具体解决步骤
1. 先核查钱包UTXO与可用余额
先添加代码查看钱包的真实资金状态,确认UTXO和可支配余额:
from bitcoinlib.wallets import Wallet w = Wallet('Wallet1') # 打印所有未花费交易输出 print("钱包UTXO列表:") for utxo in w.utxos(): print(f"金额: {utxo.amount} BTC, 确认数: {utxo.confirmations}") # 打印扣除预估手续费后的可支配余额 print(f"钱包可用余额(含手续费预留): {w.balance()} BTC")
注:w.balance()返回的是扣除手续费后的可转出金额,不是钱包总余额。
2. 调整转账金额,预留手续费空间
不要尝试全额转出,留足手续费和找零的空间。比如将转账金额改为0.00016 BTC:
from bitcoinlib.wallets import Wallet w = Wallet('Wallet1') # 指定转账金额,预留手续费 t = w.send_to('bc1qtrflvfw99jzqakvxt985d7jls6tm8mwtxjr652', '0.00016 BTC', offline=False) print(f"交易已发送,交易ID: {t.txid}")
3. 自动转出最大可支配金额
如果想转出尽可能多的资金,直接用send_max方法,它会自动计算手续费并转出剩余所有可支配资金:
from bitcoinlib.wallets import Wallet w = Wallet('Wallet1') # 自动计算手续费,转出最大可支配金额 t = w.send_max('bc1qtrflvfw99jzqakvxt985d7jls6tm8mwtxjr652', offline=False) print(f"交易已发送,交易ID: {t.txid}")
4. 强制同步钱包数据
如果查询UTXO时显示为空或金额不符,先强制同步钱包的区块链数据:
from bitcoinlib.wallets import Wallet w = Wallet('Wallet1') # 强制同步区块链 w.synchronize() # 同步后再次查询UTXO print("同步后UTXO列表:") for utxo in w.utxos(): print(f"金额: {utxo.amount} BTC, 确认数: {utxo.confirmations}")
注:同步需要网络连接,根据区块链数据量,可能需要几分钟时间。
额外注意事项
- 确认目标地址
bc1qtrflvfw99jzqakvxt985d7jls6tm8mwtxjr652是正确的SegWit地址,bitcoinlib支持该格式,但务必保证地址无误; - 若UTXO的确认数不足(比如小于1),部分节点不会认可该UTXO为可用资金,需等待确认完成后再操作。
内容的提问来源于stack exchange,提问作者Kellen Rippin
相关产品推荐
相关产品推荐

