比特币测试网交易广播超5小时未确认 多浏览器无记录问题求助
比特币测试网交易广播异常相关问题
问题背景
使用python-bitcoinlib库发送比特币测试网交易时,出现交易无法被全网识别、长期不确认的异常,具体现象如下:
- 向chain.so服务推送交易的REST API调用返回成功,可在该平台查询到对应交易记录,但平台显示交易置信度(Confidence)为0%
- 交易收款地址为BitPay测试网钱包地址,付款地址通过python-bitcoinlib的
wallet.get_key()方法生成 - 除chain.so外,其余区块链查询服务均无法检索到该笔交易,手动将交易提交至bitaps.com后仍无法在该平台查到相关记录,交易广播超5小时始终未获得确认
核心调用代码如下:
wallet = wallet_create_or_open(name='MainWallet', network='testnet', witness_type='segwit') transaction = wallet.send_to( to_address=body.address, amount=decimal_to_satoshi(body.amount), fee='low', offline=True, ) transaction.send(offline=False)
异常可能诱因
- 交易手续费率过低:代码中设置
fee='low'参数,而比特币测试网手续费率波动极大,若最终计算出的费率低于全网节点默认的最低转发阈值,节点会直接丢弃该交易,不会向相邻节点转发。 - 交易本身不符合网络规则:存在签名错误、引用的输入UTXO已被花费、输入输出金额不匹配、隔离见证字段编码错误等问题,这类交易无法通过全节点的基础校验逻辑,不会被节点接收。
- 广播链路故障:python-bitcoinlib内置的默认广播节点可能存在连接异常、版本过旧、自定义了严格转发规则等问题,导致交易仅被推送到chain.so单点存储,没有实际传播到测试网P2P网络中。
排查方向
- 校验交易合法性:提取交易原始十六进制字符串,通过本地运行的Bitcoin Core测试网全节点,调用
testmempoolaccept接口验证交易是否满足内存池准入要求,接口会直接返回交易被拒绝的具体原因。 - 核对手续费水平:查询当前测试网的最低转发费率、常规打包费率,对比交易实际支付的费率,确认是否低于节点最低转发阈值。
- 检查输入与签名有效性:逐笔核验交易引用的所有输入UTXO是否为未花费状态,隔离见证签名格式是否符合对应BIP规范,签名哈希是否覆盖全部要求字段,排除签名错误问题。
- 验证广播链路:不依赖库内置的默认广播逻辑,手动将原始交易提交到多个独立的广播节点,根据返回结果判断交易传播是否正常。
chain.so置信度为0%的原因
chain.so的Confidence指标基于全网交易传播监测数据计算,核心参考维度包括转发该交易的节点占比、交易在全网内存池的停留时长、是否存在冲突双花交易等。0%置信度意味着平台未监测到任何第三方公开节点接收并转发该交易,交易仅暂存在chain.so自身数据库中,未进入测试网P2P网络,几乎不可能被矿工打包确认。
可靠的测试网交易广播、查询服务
- 本地自建Bitcoin Core测试网节点:可靠性最高,通过本地RPC接口即可完成交易广播、状态查询、手续费率估算,不存在第三方平台数据不同步、缓存错误的问题。
- Blockstream测试网区块浏览器:节点覆盖范围广,链上数据同步及时,支持交易广播、交易状态追踪、内存池数据查询。
- Mempool.space测试网版本:可实时查看测试网内存池拥堵状态、动态手续费率推荐,支持交易广播与全生命周期状态追踪,数据准确性高。
内容的提问来源于stack exchange,提问作者Ivan Borshchov
相关产品推荐
相关产品推荐

