

架构
Composer 将合作伙伴的请求 —— “将 USDC 存入 Base 上的 Aave”(通过 LI.FI API)或一份类型化的 Flow 文档(通过 Composer API)—— 转化为单笔可执行的链上交易。整个系统由三个模块化层组成:1. 链上 VM
一份部署在每条受支持 EVM 链上的智能合约,持有共享的执行逻辑。每个用户都拥有自己的确定性 proxy,用来持有其代币并对 VM 执行delegatecall,因此 flow 会在用户自己的余额和存储上下文中运行。以这种方式被调用时,VM 可以:
- 调用任何其他链上协议或一系列协议。
- 将某一步的输出作为下一步的输入传递。
- 在各步骤之间处理代币授权、转账和余额检查。
- 在单条链内以原子方式执行整个序列。
delegatecall。关于 proxy 如何派生以及访问控制方式,参见 Account model。
VM 合约: 0xb57Ce43Be47DF611C98EB0943e5D36EBDb36cc6D —— proxy delegatecall 所调用的共享逻辑,而不是交易的 to。在每条受支持的链上地址相同。完整的部署列表参见 Addresses。
2. eDSL 与编译器
一个用于表达合约交互的类型化嵌入式 DSL(TypeScript)。当 Composer 被调用时:- 路由引擎识别出需要哪些协议和操作。
- eDSL 将这些交互表达为一个类型化程序。
- 编译器将该程序转换为 VM 可执行的字节码。
3. 运行时值传递
许多 DeFi 操作需要一个在前一步运行之前无法得知的值 —— 例如,存入从前一步交换中收到的_确切_数量的代币。Composer 不会在链下预先计算中间数量,而是将一步的输出传入下一步:- Flow 记录了每次调用的输出如何馈送到后续调用的输入(通过 refs)。
- VM 会在运行时对每次调用的 calldata 进行编码,读取由前面步骤产生的具体值,并将它们写入后续步骤的参数中。
- 这一切完全在链上、在同一笔交易内完成。
swap → deposit 无需集成方预先计算中间数量即可实现原子性的原因。
交易生命周期
Composer API(由你编写 Flow)和 LI.FI API 集成(由后端构建 Flow)共享同一条执行路径:执行前模拟
每个 Compose 请求都会在向客户端返回 calldata 之前,针对当前链状态进行端到端模拟。模拟器以被覆盖的余额和授权来运行(因此缺失的用户授权不会导致模拟失败),从而让它专注于链上实际会出错的地方。这可以捕获:- 会超出容差滑动的代币交换。
- 会回滚的 vault 交互(已暂停、达到上限、被列入黑名单)。
- 池中流动性不足以完成该交换规模。
同链与跨链
Composer 的行为会因源端和目标端是否在同一条链上而有所不同:- 同链。 所有步骤在一笔交易内以原子方式执行。模拟保证:如果模拟通过,执行将会成功(除极端边缘情况外,例如激进的内存池抢跑)。一次签名、一次 gas 支付、一个区块。
- 跨链(目前仅限 LI.FI API 集成)。 源链交易触发桥接;随后目标链的操作再执行。每个阶段在其所在链内是原子的,但整个 flow 是最终一致的。总耗时取决于桥接延迟。跨链进度通过 LI.FI 的
/status端点进行跟踪。
chainId;多链 Flow 尚未通过 Composer API 开放。如果你需要跨链组合,参见 Integrate via LI.FI API。
接下来去哪里
Overview
Composer 面向谁、你能构建什么,以及 Composer API 与 LI.FI API 的对比。
Composer API Quickstart
五分钟内编写你的第一个 Flow。
LI.FI API Quickstart
将 Composer 添加到你现有的 LI.FI 集成中。

