题目
某页面在解析历史交易与 receipt 时只按 EIP-1559 的字段读取,遇到更早的交易就出现空值;另一个页面在不支持新类型的网络上构造了新类型交易并广播失败。请说明交易类型信封的结构,以及前端在读取与构造交易时的兼容处理。
考察目标
- 理解 EIP-2718 的信封结构与类型编号。
- 掌握各类型对应的字段差异与读取方式。
- 设计历史交易解析与类型选择的兼容策略。
说明 EIP-2718 的类型信封、各类型编号对应的费用与字段结构,以及前端读取与构造时的兼容处理。
某页面在解析历史交易与 receipt 时只按 EIP-1559 的字段读取,遇到更早的交易就出现空值;另一个页面在不支持新类型的网络上构造了新类型交易并广播失败。请说明交易类型信封的结构,以及前端在读取与构造交易时的兼容处理。
EIP-2718 的交易有两种形式:TransactionType || TransactionPayload 的类型化信封,以及独立的 LegacyTransaction(RLP 编码,首字节在 0xc0–0xfe 区间,并非以 0x00 开头的类型)。type 1 加入 accessList,type 2 是 EIP-1559 费用市场交易,type 3 是 blob 交易,type 4 携带授权列表;JSON-RPC 用 type: "0x0" 表示 legacy 交易,这是 RPC 层的表示方式。读取交易与 receipt 时按 type 字段分发解析路径。实现差异与工程取舍见深入回答。
【协议保证】EIP-2718 为类型化交易定义了 TransactionType || TransactionPayload 信封结构,类型编号决定载荷的字段布局;legacy 交易是与之并列的另一种形式(依据:EIP-2718 §Specification 的 Transactions)。
rlp([nonce, gasPrice, gasLimit, to, value, data, v, r, s]),与类型化信封 TransactionType || TransactionPayload 是两种不同形式;客户端按首字节区分:0x00–0x7f 为类型化交易,0xc0–0xfe 为 legacy(依据:EIP-2718 §Specification 的 Transactions、§Backwards Compatibility)。【协议保证】type 1(EIP-2930)引入 accessList;type 2 是 EIP-1559 费用市场交易;type 3 携带 blob 相关字段;type 4 携带授权列表(依据:EIP-2930 §Specification;EIP-1559 §Abstract;EIP-4844 §Specification;EIP-7702 §Specification)。
【工程经验】读取交易与 receipt 时按 type 字段分发解析路径;legacy 在 RPC 返回中通常表示为 0x0,该表示与 EIP-2718 的链上编码区分开(依据:工程经验,无规范依据)。
【协议保证】EIP-1559 类型的费用字段为 maxFeePerGas 与 maxPriorityFeePerGas;legacy 交易使用 gasPrice(依据:EIP-1559 §Abstract、§Backwards Compatibility)。
【协议保证】在类型信封下,未知类型按该类型自身的规范处理;接收方能否解析取决于它支持的类型集合(依据:EIP-2718 §Specification)。
【工程经验】不要用是否存在 gasPrice 字段判断交易类型,应以 type 字段为准(依据:工程经验,无规范依据)。
【工程经验】构造交易交给 viem、wagmi 一类工具按链能力选择类型,避免手写类型编号与字段组合(依据:工程经验,无规范依据)。
【工程经验】解析历史交易、批量对账与 receipt 时按 type 分发到不同字段读取路径,缺失字段用可空类型处理(依据:工程经验,无规范依据)。
【工程经验】在广播前确认目标链与节点支持该类型:不支持时签名或广播会失败,需要在提交前拦截并提示(依据:工程经验,无规范依据)。
gasPrice 字段就判断为 legacy 交易。type 分发解析交易与 receipt,并说明各类型的关键字段差异。发现这道题有问题? 反馈此题