
什么是 raw transaction:BSV 交易序列化、TXID 与签名的基础
raw transaction 是交易按协议规则序列化后的原始字节表示,通常以十六进制字符串展示。它关系到 TXID、签名、广播和调试,是理解 BSV 交易底层机制的关键概念。
林知衡
technical_editor
在 BSV 开发中,**raw transaction(原始交易)**指交易按照协议规则序列化之后得到的原始字节表示,通常用十六进制字符串展示。
一句话理解:你在代码里看到的交易对象,最终必须被序列化成确定的字节数据,才能计算 TXID、生成签名,并广播到网络。
为什么需要 raw transaction
开发者在代码中通常更习惯处理结构化对象,例如:
这种形式适合人阅读和程序组织逻辑,但区块链网络并不会传输这类“带字段名”的对象。网络传输和节点处理的是按协议规则排列的字节。
raw transaction 就是这段字节序列的十六进制表示。
一笔交易的序列化数据通常包含:
- 版本(version)
- input 数量
- 每个 input 的 outpoint
- 每个 input 的解锁脚本(unlocking script)
- 每个 input 的 sequence
- output 数量
- 每个 output 的金额
- 每个 output 的锁定脚本(locking script)
- locktime
不同交易格式和协议升级细节可能存在差异,但核心要求不变:交易必须有确定的序列化表示。只有这样,不同节点和工具才能对同一笔交易得到一致的解析、签名验证和交易标识。
raw transaction 与 TXID 的关系
TXID 通常由交易的序列化数据计算而来。可以粗略理解为:
也就是说,TXID 依赖底层字节数据。如果序列化结果发生变化,TXID 也可能变化。
这就是为什么交易字段顺序、字节编码、script 内容和签名数据都很重要。即使从业务角度看像是“同一笔付款”,只要底层字节不同,它就可能是一笔不同的交易。
raw transaction 与签名的关系
交易签名同样依赖交易的序列化形式。
在签名时,钱包或 SDK 会按照协议规则构造待签名的数据摘要。这个摘要来自交易内容,以及被花费 output 的相关信息。
因此,如果你手动修改 raw transaction 中的 output 金额、脚本或 input 引用,原来的签名很可能失效。签名不是独立附着在交易之外的装饰性字段,而是与具体交易内容绑定。
所以,raw transaction 不是可以随意拼接或手改的字符串。构造和修改交易时,应使用 SDK 或钱包提供的序列化与签名逻辑。
如何查看 raw transaction
区块浏览器、钱包工具或 SDK 通常都可以查看一笔交易的 raw transaction。
在学习阶段,建议用两种方式观察同一笔交易:
- 人类可读视图:查看 inputs、outputs、fee、脚本等解析后的字段。
- raw transaction 十六进制:查看真实的网络编码形式。
这样可以逐渐建立一个重要认知:区块浏览器页面展示的是解析结果,而链上真正保存、传播和验证的是序列化后的交易数据。
raw transaction 不是 JSON
这是新手很容易混淆的地方。
JSON 是应用层常用的数据格式,字段名清楚,便于人阅读和调试。但 Bitcoin/BSV 交易序列化不是 JSON,而是一种紧凑的二进制协议格式。
因此,下面这种理解是错误的:
把交易对象做 JSON.stringify 并不会得到 raw transaction。正确做法是使用 BSV SDK、钱包或符合协议的序列化逻辑,把交易编码成协议规定的字节格式。
raw transaction 常见调试场景
日常开发中,你通常不需要手写 raw transaction。但当交易构造、签名或广播出现问题时,raw transaction 是非常关键的排查材料。
常见场景包括:
- TXID 与预期不一致
- 签名验证失败
- input 引用错误
- output 金额或脚本错误
- 手续费异常
- 交易广播被拒绝
- endian 显示造成混淆
- SDK 与服务返回结果不一致
在这些问题中,结构化对象或页面展示可能不足以定位原因。raw transaction 能让你回到字节层面确认:这笔交易到底是什么。
BSV 开发中的实践建议
对于新手开发者,建议优先使用官方 SDK 或成熟钱包来构造 raw transaction,不要手写序列化逻辑。
但你仍然需要理解 raw transaction 的存在,因为:
- 广播接口通常提交的是 raw tx
- ARC 等服务处理的是实际交易数据
- 区块链保存的是交易字节
- TXID 和签名都依赖序列化结果
- SPV 证明最终也要绑定到具体交易
理解 raw transaction,可以帮助你从“会调用 SDK”进一步提升到“能解释 SDK 做了什么”。这对于排查签名、广播、脚本和交易结构问题尤其重要。
新手常见误解
可以用以下几点快速检查自己的理解:
- raw transaction 不是 JSON
- raw transaction 不是区块浏览器页面
- 修改交易字段可能影响 TXID 和签名
- 复制 raw tx 时要确认网络、状态和来源
- 手写 raw tx 容易出错,应优先使用 SDK
- 调试底层问题时,raw tx 是最重要的材料之一
参考资料
推荐文章
区块链2026年5月26日
一个地址可以有很多 UTXO:理解 BSV 中的地址、余额与交易构造
在 BSV 的 UTXO 模型中,一个地址不是账户,也不是单一余额槽。同一个地址可以关联多个 UTXO,钱包余额只是这些 UTXO 的汇总。理解这一点,有助于正确处理交易构造、手续费、UTXO 碎片化和隐私问题。
区块链2026年5月26日
在 BSV 中,花钱就是消耗旧 UTXO、创造新 UTXO
在 BSV 中,花钱不是修改余额,而是消耗旧 UTXO、创建新 UTXO。理解这一点,有助于掌握付款、找零、交易链以及 token 和应用状态转移的基本逻辑。
区块链2026年5月26日
什么是 UTXO:理解 BSV 交易模型的基础
UTXO 是“未花费交易输出”,是 BSV 交易模型的基本单位。钱包余额并不是链上的账户字段,而是一组可控制 UTXO 的金额总和。理解 UTXO,有助于理解 BSV 的 input、output、找零、手续费、双花、Script 以及并行处理。