# 两个 Bitcoin 浏览器结果不同怎么办：交叉核对交易、手续费与输出花费

整理：链小知（AI 辅助）
资料核对日期：2026-10-12
引用地址：https://lianxiaozhi.com/tools/guides/bitcoin-crosscheck-tx-and-outspends
难度：进阶
核验方式：只读核验

用 Blockstream 和 mempool.space 的公开接口比较一笔已确认交易，区分不可变交易字段与会变化的输出花费状态。本篇已完成六次公开 GET 样本核验。

## 使用工具
- [Blockstream Explorer](https://lianxiaozhi.com/tools/blockstream-explorer) · [官方入口](https://blockstream.info/)
- [mempool.space](https://lianxiaozhi.com/tools/mempool-space) · [官方入口](https://mempool.space/)

## 前置条件
- 准备 Bitcoin 主网完整交易 ID，不能混用 Liquid、测试网或其他链。
- 无需账户、钱包、签名或 API 密钥；教程只读取公开样本，不广播交易。
- 本次使用一笔公开已确认交易，不代表已测试未确认交易、RBF、CPFP 或区块重组。

## 1. 固定同一网络与完整交易 ID

将交易 ID 分别放入 https://blockstream.info/api/tx/交易ID 和 https://mempool.space/api/tx/交易ID。两个页面都应返回与你输入完全一致的 txid。一个服务报 404 时先记录该服务未找到，再核对网络、拼写与索引；不能直接认定交易不存在。429、超时或非 JSON 响应也保留为读取失败。

已核验样本为 e47158e195abcb960741df336d0c39d3b687ddb4edcad9454384dbe519ff2039。两个公开服务均返回 HTTP 200。这里没有证实它们使用独立节点或完全独立的基础设施。

核对结果：两个来源的网络与完整 txid 一致；只有一个来源成功时，交叉核对尚未完成。
依据：[Blockstream：交易、状态与 outspends 接口](https://github.com/Blockstream/esplora/blob/master/API.md)
依据：[mempool 官方实现：交易与 outspends 路径](https://github.com/mempool/mempool/blob/master/backend/src/api/bitcoin/esplora-api.ts)
依据：[实际读取的 Blockstream 样本交易](https://blockstream.info/api/tx/e47158e195abcb960741df336d0c39d3b687ddb4edcad9454384dbe519ff2039)
依据：[实际读取的 mempool 样本交易](https://mempool.space/api/tx/e47158e195abcb960741df336d0c39d3b687ddb4edcad9454384dbe519ff2039)

## 2. 比较已确认区块，不混入当前确认数

比较 status.confirmed、block_height 和 block_hash。已确认样本两边均为 true、高度 970949，且返回同一个区块哈希。再分别读取两服务的 /api/block-height/970949，核对高度与哈希映射。

界面当前确认数随新区块增加，两次读取时间不同也可能显示不同数值；先核对交易所属区块和读取时刻。若相同高度对应不同哈希，不继续宣布一致，保留结果并排查索引更新或链状态变化。

核对结果：两份交易状态与各自高度查询的哈希相同；没有把不同读取时刻的确认数当作不可变字段。
依据：[Blockstream：交易、状态与 outspends 接口](https://github.com/Blockstream/esplora/blob/master/API.md)
依据：[实际读取的 Blockstream 样本交易](https://blockstream.info/api/tx/e47158e195abcb960741df336d0c39d3b687ddb4edcad9454384dbe519ff2039)
依据：[实际读取的 mempool 样本交易](https://mempool.space/api/tx/e47158e195abcb960741df336d0c39d3b687ddb4edcad9454384dbe519ff2039)

## 3. 按原始字段和金额单位复核手续费

比较每个输入的前序 txid、vout、prevout.value，以及每个输出的 value 和脚本。普通非 coinbase 交易按 satoshi 汇总输入减输出，再与 fee 比较；prevout 缺失或出现 coinbase 时停止套用。不要只比较界面四舍五入后的 BTC 或美元估值。

样本两服务都返回输入 55,831、输出 50,191、fee 5,640 satoshi。weight=561，vsize=ceil(weight÷4)=141；原始 size=222 字节，不能当作 vsize。总输出不是指定收款人的收款额，脚本相同也不能自动识别找零。

核对结果：不可变字段一致，输入减输出与两边 fee 一致；单位、size 与 vsize 没有混淆。
依据：[Blockstream：交易、状态与 outspends 接口](https://github.com/Blockstream/esplora/blob/master/API.md)
依据：[实际读取的 Blockstream 样本交易](https://blockstream.info/api/tx/e47158e195abcb960741df336d0c39d3b687ddb4edcad9454384dbe519ff2039)
依据：[实际读取的 mempool 样本交易](https://mempool.space/api/tx/e47158e195abcb960741df336d0c39d3b687ddb4edcad9454384dbe519ff2039)

## 4. 用输出编号检查是否已被花费

分别读取 /api/tx/交易ID/outspends。数组索引对应原交易输出的 vout 编号；第一个输出为 0，不是 1。spent=true 时核对后续交易 txid、使用它的 vin 和后续交易 status；不要把后续交易的确认高度当成原交易高度。

本次样本两个来源都显示 vout=0 已由 2968f84ce71bb68acb3e826fc69edfd3ddfdda78170525b65981f7c3034ac3ee 花费，vin=0；vout=1 在读取时未花费。该状态是时间点观察，会随后续交易变化。若两服务不同，记录各自读取时间与索引状态，不能立即推断被盗。

核对结果：逐项按 vout 记录 spent 与后续 outpoint 关系；未把花费状态升级成地址所有权或交易目的判断。
依据：[Blockstream：交易、状态与 outspends 接口](https://github.com/Blockstream/esplora/blob/master/API.md)
依据：[mempool 官方实现：交易与 outspends 路径](https://github.com/mempool/mempool/blob/master/backend/src/api/bitcoin/esplora-api.ts)
依据：[实际读取的 Blockstream 输出花费状态](https://blockstream.info/api/tx/e47158e195abcb960741df336d0c39d3b687ddb4edcad9454384dbe519ff2039/outspends)
依据：[实际读取的 mempool 输出花费状态](https://mempool.space/api/tx/e47158e195abcb960741df336d0c39d3b687ddb4edcad9454384dbe519ff2039/outspends)

## 5. 保留一致项、差异项和到账未知项

将网络、完整 txid、两服务 URL、读取时刻、区块、金额与输出编号放在同一记录中。不可变字段对照通过后，可以说明两个公开服务返回一致；不能说明你已独立验证共识、接收方控制地址或交易所已记账。

交易所、支付平台或商户是否入账仍需它们自己的支持网络、确认要求和账单状态。没有这些证据时保留“链上交易字段已核对，平台入账未核对”。本次六次公开 GET 全部成功，未测试钱包界面和任何实际转账。

核对结果：结果区分交易字段交叉核对、输出状态观察与平台到账，缺失证据没有被写成通过。
依据：[实际读取的 Blockstream 样本交易](https://blockstream.info/api/tx/e47158e195abcb960741df336d0c39d3b687ddb4edcad9454384dbe519ff2039)
依据：[实际读取的 mempool 样本交易](https://mempool.space/api/tx/e47158e195abcb960741df336d0c39d3b687ddb4edcad9454384dbe519ff2039)
依据：[实际读取的 Blockstream 输出花费状态](https://blockstream.info/api/tx/e47158e195abcb960741df336d0c39d3b687ddb4edcad9454384dbe519ff2039/outspends)
依据：[实际读取的 mempool 输出花费状态](https://mempool.space/api/tx/e47158e195abcb960741df336d0c39d3b687ddb4edcad9454384dbe519ff2039/outspends)

## 常见错误
- 网络不同却只按交易 ID 搜索；404 被直接解释为资金丢失。
- BTC、satoshi、美元估值与脚本金额混用，或 size 被当成 vsize。
- outspends 索引按 1 开始，或把花费交易的状态当原交易状态。
- 两个公开服务一致不证明独立节点共识、地址所有人或平台入账。

## 完成检查
- 同一已确认交易在两服务返回一致身份、区块和不可变输入输出字段。
- 手续费差额及逐输出花费记录可复查，动态状态记录读取时刻。
- 未知的找零、地址所有人、独立基础设施和平台入账范围明确保留。

## 相关知识
- [比特币 UTXO 与找零：为什么转一笔账会出现多个输出](https://lianxiaozhi.com/learn/utxo-and-change)
- [区块确认与最终性是什么？交易成功和充值到账为何不同步](https://lianxiaozhi.com/learn/confirmations-and-finality)

## 官方依据
- [Blockstream：交易、状态与 outspends 接口](https://github.com/Blockstream/esplora/blob/master/API.md)
- [mempool 官方实现：交易与 outspends 路径](https://github.com/mempool/mempool/blob/master/backend/src/api/bitcoin/esplora-api.ts)
- [实际读取的 Blockstream 样本交易](https://blockstream.info/api/tx/e47158e195abcb960741df336d0c39d3b687ddb4edcad9454384dbe519ff2039)
- [实际读取的 mempool 样本交易](https://mempool.space/api/tx/e47158e195abcb960741df336d0c39d3b687ddb4edcad9454384dbe519ff2039)
- [实际读取的 Blockstream 输出花费状态](https://blockstream.info/api/tx/e47158e195abcb960741df336d0c39d3b687ddb4edcad9454384dbe519ff2039/outspends)
- [实际读取的 mempool 输出花费状态](https://mempool.space/api/tx/e47158e195abcb960741df336d0c39d3b687ddb4edcad9454384dbe519ff2039/outspends)
