RIL
好,我们来做一版真的简化过的 RIL 2.0 设计,
目标就是:在刚刚对 Solidity 的复盘基础上,把 RIL 收敛成一套最小、清晰、可讲、可实现的版本。
我帮你压成 3 条设计原则 + 4 个核心元素 + 1 段示例代码。
你以后可以直接拿这一版当「RIL 基本设计」。
一、从 Solidity 反过来,给 RIL 定三条“铁律”
🔹 RIL 设计铁律 1:
不以“全局状态机”为中心,只以 Transfer 为中心。
- Solidity:
- 合约 = 小国家
- 世界 = 大状态机
- 函数 = 改一次状态
- 合约 = 小国家
- RIL:
- 只认一种副作用:Transfer
- 不允许随意写全局状态
- 所有「谁有多少什么」都只由 Transfer 序列决定
- 只认一种副作用:Transfer
👉 效果:天然适合并行 & 分片,省掉 EVM 那种全局大锁。
🔹 RIL 设计铁律 2:
不以“函数调用”为中心,以 Intent 为中心。
- Solidity:你调用我,我改自己 storage
- RIL:
- Agent 之间不互相 call
- 只通过 Intent 传递意图、任务、订单、指令
- 每个 Agent:收到 Intent → 产出 Effect(新 Intent + Transfer)
- Agent 之间不互相 call
👉 效果:
支持异步、多步协作、时间序列逻辑、Multi-Agent 经济。
🔹 RIL 设计铁律 3:
语言的第一用户是 Agent,而不是人类“合约作者”。
- Solidity 假设:人类写死逻辑,链上很难动
- RIL 假设:
- Agent 需要自己调参、自测、替换策略
- 人类更多是在给它提供模板、边界和审计
- 语法必须简单、模板化,易被 LLM / Agent 自己生成和修改
- Agent 需要自己调参、自测、替换策略
👉 效果:
你所有「Agentic 资本市场 / Agentic 预测市场」就有了原生编程工具。
二、RIL 精简版:只保留 4 个核心元素
1️⃣ Agent
是谁在 I3 上跑逻辑。
语法(类 Rust):
agent MM {
state {
spread: f64,
}
fn on_intent(intent: Intent<SwapOrder>) -> Effect {
// … 读本地 state & Intent,产出 Effect
}
fn on_tick(now: Time) -> Effect {
// … 定时行为
}
}
特点:
- 有 state(本地状态,挂在 I3 某个 shard 上)
- 有若干个 handler:on_intent / on_tick /(以后可以有 on_event)
2️⃣ Intent
Agent 之间传意图的唯一方式。
最小定义:
struct Intent<T> {
from: ID,
to: ID,
body: T, // 业务内容,比如订单 / 任务 / 投票
cond: Cond, // 可选:触发条件
window: TimeWin, // 可选:生效时间窗
}
你可以为不同业务定义不同 T:
struct SwapOrder {
side: Side, // Buy/Sell
asset_in: AssetId,
asset_out: AssetId,
amount: Amount,
limit_px: u64,
}
3️⃣ Transfer
唯一能改变 S2 状态的原子动作。
最小定义(简化版):
struct Transfer {
from: ID,
to: ID,
asset: AssetId, // Flux / Power / Bond / Credit / Token...
amount: Amount,
}
RIVM 最终只会把通过验证的 Transfer 写进 S2,
其他所有都是「计算流程」而已。
4️⃣ Effect
任何有副作用的函数,只返回这个。
struct Effect {
intents: Vec<Intent<any>>, // 要发出的新 Intent
transfers: Vec<Transfer>, // 要落账的 Transfer
}
RIL 的 I3 执行逻辑可以一句话概括:
RIVM:接收 Intent → 调对应 Agent → 得到 Effect → 把其中的 Transfer 填给 C1/S2。
三、语法:压成一个“Rust-lite + 两个内建函数”
✅ 语法风格
- 兼容 Rust 大部分基本语法:
- let, struct, enum, if, match
- let, struct, enum, if, match
- 不要:泛型地狱、宏地狱、复杂 lifetime
- 执行层:纯函数逻辑 + 副作用只通过 Effect。
✅ 内建函数只需要两个:
fn emit_intent<T>(to: ID, body: T) -> Intent<T>;
fn emit_transfer(from: ID, to: ID, asset: AssetId, amount: Amount) -> Transfer;
Agent 写代码时,只需要关心:
- 收到的 Intent<T> 里有啥
- 要不要发新 Intent
- 要不要发 Transfer
四、一个真正极简的 RIL 示例:Agent 做一个“手续费 + 分润”
场景:
- 用户通过 Intent 下单
- Agent 收一点 Flux 作为手续费
- 再把手续费的 50% 转给某个 DAO
struct TradeIntent {
user: ID,
asset: AssetId,
amount: Amount,
}
agent FeeSharer {
state {
fee_rate: f64, // 比如 0.001 = 0.1%
dao_treasury: ID,
}
fn on_intent(intent: Intent<TradeIntent>) -> Effect {
let mut eff = Effect::new();
let t = intent.body;
// 计算手续费
let fee = t.amount * self.fee_rate;
let half_fee = fee / 2.0;
// 1. 用户 → 本 Agent 收费
eff.transfers.push(
emit_transfer(t.user, self.id(), t.asset, fee)
);
// 2. 本 Agent → DAO 分润一半
eff.transfers.push(
emit_transfer(self.id(), self.dao_treasury, t.asset, half_fee)
);
// 3. 其他逻辑(比如继续转 Intent 给下游撮合 Agent)可选
// eff.intents.push(emit_intent(MatchingAgentID, some_payload));
eff
}
}
注意:
- 💡 没有直接改“全局余额”,只有两条 Transfer
- 💡 没有复杂跨合约 call,全靠 Intent 像消息队列一样传下去
- 💡 Agent 的行为逻辑,就是纯函数 + 一次性返回一个 Effect
五、就这么简化之后,你的 RIL 设计可以一句话讲清楚:
**RIL 是一门给 Agent 写的 Rust-lite 语言:
- Agent 收到 Intent
- 产出新的 Intent + Transfer
- VM 只认 Transfer,结算交给 S2
不写全局状态,不搞函数乱 call,
只做一件事:让 Intent 变成一串可验证的 Transfer。**
如果你愿意,下一步我可以:
- 直接写一个 1 页纸的 RIL 规格(pseudo-Yellow-Paper)
- 或者帮你 把这个极简版嵌进 RIM 白皮书结构(放在 I3 小节里)
- 或者选一个你真要做的第一个 RIL-Agent(比如 Agentic 做市、Agentic 预测市场),用这个语法写一份“样板代码 + 解释”,方便你跟团队讲。