EIP-2718交易信封如何区分类型? 图 1
EIP-2718交易信封如何区分类型? · 图 1

一段以0x02开头的原始交易,第一步不是把全部字节当成旧式RLP列表,而是先读出类型字节,再把剩余payload交给类型2解码器。EIP-2718解决的是“如何分派解析器”,不是替每一种交易重新定义费用和签名。

站内已有交易类型概览;本文只处理字节级信封识别、未知类型拒绝和收据配对,供钱包、RPC网关与索引器实现解析入口。

一手规范给出的结论

信封字节结构

EIP-2718把新交易编码为TransactionType与TransactionPayload的拼接;类型值限定在0x00到0x7f,旧式RLP列表交易则以0xc0以上字节开头。

旧式与类型化交易对照

信封只负责分派交易类型,具体payload编码、签名字段、费用和执行语义由对应交易类型规范定义,解析器不能把未知类型套用成旧式RLP。

解析分派流程

交易收据同样可以按类型封装;类型字节建议纳入签名数据,但集成仍要核对目标网络是否已激活相应交易类型。

用首字节做一次分派

原始首字节解析入口下一步
0x00–0x7f类型化信封取出TransactionType,再按该类型解释payload
0xc0–0xff旧式RLP列表按legacy交易字段解码
0x80–0xbf不能当成有效顶层交易类型返回未知或格式错误,不尝试“猜成”legacy

假设原始字节是0x02 || payload0x02只选择EIP-1559解析器。nonce、费用上限、access list和签名都在payload内;如果目标链尚未激活类型2,即使字节能解码,也不能写成交易可执行。收据读取也要先检查是否带类型前缀,避免交易和收据采用两套互相矛盾的分派逻辑。

故障与停止条件

误判正确处置
把0x02误写成RLP列表长度,会从第一个字节开始错位保留原始证据,停止外推并按本文步骤复核
只看RPC返回的type标签,不保存原始交易字节,无法复查网关是否改写保留原始证据,停止外推并按本文步骤复核
解析成功就显示“执行成功”,忽略目标链未激活或收据失败保留原始证据,停止外推并按本文步骤复核

解析分派流程实操清单

  1. 读取原始字节并单独保存第一个字节,不让通用RLP库先吞掉整个输入
  2. 查询目标链分叉配置,确认该类型在对应区块高度是否启用
  3. 按类型规范解码payload并验证字段数量、签名域和费用字段
  4. 以相同类型规则解析收据,核对status、logs与transactionHash
  5. 遇到未知类型时保留原文并报错,不回退成旧式交易

用三条路径验收旧式与类型化交易对照

第一条是成功路径。选择一个已经知道结果的对象,执行“读取原始字节并单独保存第一个字节,不让通用RLP库先吞掉整个输入”和“查询目标链分叉配置,确认该类型在对应区块高度是否启用”,同时保存原始输入、原始输出、网络或版本、取证时间。另一位复核者只能读取这些材料,不读取页面上的结论;他需要独立完成信封字节结构解释。两次结果一致,说明这个样本可复现,但不能据此承诺所有环境都得到相同结果。

第二条是单变量反例。故意制造“把0x02误写成RLP列表长度,会从第一个字节开始错位”,并确保其余字段与成功样本完全相同。系统应明确指出哪一项校验失败,保留错误码、返回值或字节差异;若它自行切换默认值、吞掉未知字段或沿用缓存,测试就算失败。然后再针对“只看RPC返回的type标签,不保存原始交易字节,无法复查网关是否改写”建立独立反例,两个错误不要同时注入。

第三条是状态切换。先完成“按类型规范解码payload并验证字段数量、签名域和费用字段”取得旧状态,再改变一个会影响未知类型边界的条件并重新查询。旧证据不能被覆盖,新证据也不能倒推旧时点。页面要把对象主键、上下文和时间放在结果旁边,让读者知道结论针对哪次观察。

最终交接包应包含信封字节结构原文、旧式与类型化交易对照推导、解析分派流程验收和未知类型边界说明。若出现“解析成功就显示“执行成功”,忽略目标链未激活或收据失败”,发布状态只能是待核验,并回到“以相同类型规则解析收据,核对status、logs与transactionHash”补证据。这样可把底层事实错误、环境变化与界面展示错误分开定位。

来源、增量与风险边界

来源本文用途
Ethereum Improvement Proposals正式接口、字段与规范语义
EIP-1559实现路径、兼容性或安全边界

本文资料读取于2026-07-20。未来交易类型可能增加,客户端与索引器必须按目标链分叉配置处理,不能只凭首字节猜测业务成功。

站内相邻主题可继续阅读:交易类型与字段Gas估算边界。信封解析属于格式判断,不证明交易来源、合约安全或执行结果。钱包签名前仍要显示目标链、收款方、金额与完整调用。