跳转到内容

跨 Binding IR

Rotifer IR 是协议的可移植性层——基于 WASM 构建的中间表示,包含协议特定的自定义段。Rotifer IR 之于 Gene,就像 LLVM IR 之于程序。

TypeScript Gene → rotifer compile → Rotifer IR (.wasm) → 任意 Binding
  1. 编写 Gene(目前支持 TypeScript)
  2. 编译 rotifer compile — 生成包含自定义段的 WASM 二进制
  3. 运行 在任意 Binding:本地 CLI、Cloud(Supabase Edge Functions)、Web3(链上)或 Edge

Rotifer IR 用协议特定元数据扩展标准 WASM,嵌入在 WASM 自定义段中:

内容
rotifer:phenotypeGene 身份、领域、输入/输出 schema、版本
rotifer:constraintsL0 宪法约束 — 权限、资源限制
rotifer:metering燃料预算、内存上限、确定性资源计量

这些段与二进制一起传输。当 Gene 从 Cloud 移动到 Local 时,其约束和身份被保留——无需外部元数据文件。

IR 采用双层设计:WASM 负责计算,Rotifer 原生注解负责约束。

选择 WASM 作为执行层的原因:

  • 形式化规范 —— 数学定义的语义,小型可信计算基
  • 设计即沙箱 —— 线性内存模型,无环境权限
  • 接近原生性能 —— 硬件无关,优化运行时(Wasmtime、Wasmer、WAMR)
  • 跨平台工具链成熟 —— 可从 Rust、C、Go、AssemblyScript 等编译
  • 确定性执行支持 —— 通过受限指令集可实现

核心安全属性:在任何 Binding 中声明的 L0 约束,在编译、传输和重编译过程中都必须保留。没有任何 Binding 能削弱宪法约束。

这使 Rotifer IR 与通用 IR 根本不同——它携带安全保证,而不仅仅是计算逻辑。在 Cloud 中被沙箱化的 Gene,在本地运行时仍然处于沙箱中。

完整的 IR 规范请参见 GitHub 上的完整文档