Rotifer 协议声称基因是可移植的——编译为 IR,在任何绑定环境中运行。在 v0.6.5 之前,这只是规范中的承诺,没有任何实际验证。本版本改变了这一点。
问题:只有一个绑定,零验证
IR 规范明确声明:
IR 1.0 发布条件:至少有两个绑定环境通过跨绑定互操作测试。
我们只有一个绑定环境(Local/Cloud),跨绑定测试数量为零。IR 规范中最关键的 §10(跨绑定互操作协议)从未在真实代码上运行过。
方案:抽象、模拟、验证
与其花数月构建完整的 Web3 Binding(Solidity 合约、Arbitrum 部署、代币经济学),我们选择了最小方案:构建一个差异足够大的 Mock,触发协商协议的每条路径。
RotiferBinding Trait
新增 RotiferBinding trait,抽象”执行环境”的含义:
pub trait RotiferBinding: Send + Sync { fn binding_id(&self) -> &str; fn metering_unit(&self) -> MeteringUnit; fn capabilities(&self) -> &BindingCapabilities; fn execute_ir(&self, ir_bytes: &[u8], context: &Context, input: Value, phenotype: &Phenotype) -> Result<GeneResult>; fn negotiate(&self, requirements: &IrRequirements) -> NegotiationResult;}每个绑定声明自身的标识、计量单位(Fuel / Gas / WallClock)、可用宿主函数和资源上限。现有的 wasmtime 沙箱被重构为 LocalBinding,行为完全不变——224 个现有测试全部通过。
Web3MockBinding
第二个绑定模拟链上约束:
| 维度 | LocalBinding | Web3MockBinding |
|---|---|---|
| 计量 | Fuel(上限 1M) | Gas = Fuel × price(上限 500K) |
| 内存 | 64 MB | 16 MB |
| 超时 | 30s | 5s |
| 文件系统 | 允许 | 禁止 |
| 扩展宿主函数 | 无 | getBlockNumber、getChainId |
同一个 wasmtime 引擎,完全不同的约束。这些差异足以覆盖 Capability Negotiation 协议的所有路径。
Capability Negotiation:三态结果
当基因的 IR 被传输到新绑定时,协议进行兼容性协商:
- Compatible — 所有必需宿主函数和资源均可用,正常执行。
- PartiallyCompatible — 部分可选函数缺失,基因可以降级运行。
- Incompatible — 必需函数或资源缺失,传输被拒绝,附带结构化原因。
协商检查必需宿主函数、可选宿主函数、内存需求和资源预算。6 种类型化的 IncompatibilityReason 变体提供精确诊断——不是字符串错误。
9 个跨绑定测试
计划 6 个,交付 9 个:
- 基础互操作 — echo 基因在 Local 编译,传输到 Web3Mock 执行
- 资源超限 — 需要 32 MB 的基因被 Web3Mock(16 MB 上限)拒绝
- 可选函数降级 — 使用
getBlockNumber的基因在 Local 中获得PartiallyCompatible - 必需函数拒绝 — 需要
chainCall的基因在 Local 中获得Incompatible - Gas 计量验证 — 同一 IR、同一计算,报告不同的计量单位
- 无 IR 回退 — Wrapped 基因(无
irHash)返回ERROR_NO_IR_AVAILABLE7-9. 双向传输 — Web3Mock → Local 方向的传输验证
254 个 Rust 测试全部通过(原有 224 + 30 个 binding 测试)。
发现:7 条规范建议
验证产出了正式的 IR 跨绑定验证报告,包含 7 条针对 IR 0.2.0 的建议:
| 优先级 | 建议 |
|---|---|
| 高 | 将 Capability Negotiation 提升为正式子协议(§10.5) |
| 高 | 明确编译期拦截 vs 运行时降级的扩展函数处理策略 |
| 中 | 区分”核心互操作协议”(步骤 3-5)和”完整传播流程”(步骤 1-7) |
| 中 | 定义跨绑定资源计量语义 |
| 中 | 从 WASM 自定义段自动提取 IrRequirements |
| 低 | 明确扩展函数命名约定 |
| 低 | 在协商中预留版本检查点 |
IR 1.0 进度
v0.6.5 完成后,IR 版本可以从 0.1.0 升级到 0.2.0。核心互操作路径已验证。但 IR 1.0 仍需真实(非 Mock)的 Web3 Binding 和外部开发者 RFC 反馈。
后续影响
v0.6.5 是基础设施——没有新 CLI 命令,没有 UI 变化,没有面向用户的功能。但它为后续一切打下了基础:
- v0.7 利用
BindingCapabilities声明 Hybrid Gene 的网络访问需求 - 真实的 Web3 Binding 可以直接实现
RotiferBinding,无需重新设计抽象层 - IR 规范有了具体的验证数据,可以向 1.0 演进
升级: npm i -g @rotifer/playground@latest
文档: rotifer.dev/docs