跳转到主要内容
Composer 是一个强大的工具,但有一些当前的技术和设计限制。了解这些限制有助于您设计更好的集成。

技术限制

仅支持 EVM 链

Composer 目前仅支持 EVM 兼容链。不支持以下链:
  • Solana:不同的执行模型和账户系统
  • Cosmos 链:不同的共识和交易结构
  • Bitcoin:UTXO 模型不支持智能合约
受支持的链:Ethereum、Base、Arbitrum、Optimism、Polygon、Avalanche 等(完整的 LI.FI 支持链列表)。

仅支持代币化头寸

Composer 目标必须返回代币。不支持:
  • NFT:非同质化代币
  • 无代币头寸:某些协议的收益头寸
  • 时间锁定头寸:有锁定期的头寸
支持的代币类型
  • 金库代币(如 Morpho 金库代币)
  • 流性质押代币(如 wstETH)
  • 借贷代币(如 aUSDC)
  • 收益代币(如 Pendle PT)

协议限制

协议可用性

Composer 仅支持已集成的协议。当前支持的协议包括:
  • 借贷:Aave V3、Euler、HyperLend、Seamless、Maple
  • 金库:Morpho V1/V2、Felix Vanilla、Neverland
  • 质押:Lido wstETH、EtherFi、Kinetiq
  • 收益:Pendle、Ethena、USDai
完整列表请参见 支持的协议

协议状态

Composer 依赖目标协议的可用性:
  • 协议暂停:如果协议暂停,Composer 将失败
  • 金库容量:金库可能达到最大容量
  • 紧急暂停:协议的紧急机制可能阻止操作

仅存款协议

某些协议仅支持存款,不支持通过 Composer 取款:
  • Maple:机构借贷,仅存款
  • Ethena:USDe/sUSDe 转换,仅存款
  • Kinetiq:质押,仅存款

执行限制

Gas 限制

Composer 交易可能需要大量 gas:
  • 复杂路径:多步骤操作需要更多 gas
  • 高 Gas 费链:Ethereum 主网可能非常昂贵
  • 失败成本:失败的交易仍消耗 gas
缓解策略
  • 在 Layer 2 链上使用 Composer
  • 监控 gas 价格
  • 设置适当的 gas 限制

Slippage

复杂路径可能经历更高的 slippage:
  • 多步骤兑换:每个步骤都有 slippage
  • 跨链价格变化:跨链期间价格可能变化
  • 流动性变化:大额交易影响价格
建议
  • 设置适当的 slippage 容忍度
  • 考虑较小的交易金额
  • 监控执行价格

时间延迟

跨链 Composer 有时间延迟:
  • 跨链桥时间:从几秒到几分钟
  • 确认时间:取决于目标链的出块时间
  • 网络拥堵:可能显著延迟

设计限制

单向操作

Composer 主要设计用于存款操作:
  • 存款:完全支持
  • 取款:仅部分协议支持
  • 复合操作:有限支持

无条件执行

Composer 交易是预编译的:
  • 无条件:执行时无法更改参数
  • 预模拟:基于模拟时的状态
  • 状态依赖:状态变化可能导致失败

不可逆性

链上执行是不可逆的:
  • 原子性:同链操作要么全部成功,要么全部失败
  • 跨链:部分失败可能需要手动干预
  • 无撤销:无法撤销已执行的交易

集成考虑

用户体验

  • 复杂性:用户可能不理解多步骤操作
  • 等待时间:跨链操作需要时间
  • 错误处理:需要清晰的错误消息

成本管理

  • Gas 费用:可能高于简单交易
  • 跨链费用:额外的跨链桥费用
  • 失败成本:失败交易的 gas 损失

风险管理

  • 智能合约风险:额外的合约交互
  • 协议风险:依赖目标协议的安全性
  • 执行风险:多步骤增加失败概率

未来路线图

计划中的改进

  • 更多链支持:未来可能支持非 EVM 链
  • 更多协议:持续集成新协议
  • 取款支持:扩展取款功能
  • 条件执行:基于链上状态的执行

当前开发重点

  • 协议集成:添加更多借贷和金库协议
  • 成本优化:减少 gas 使用
  • 用户体验:改进错误处理和反馈

最佳实践

1. 验证支持

const isSupported = async (toToken: string) => {
  const supportedProtocols = await getSupportedProtocols();
  return supportedProtocols.some(protocol => 
    protocol.tokens.includes(toToken)
  );
};

2. 成本检查

const checkCosts = async (route: Route) => {
  const gasCosts = await estimateGasCosts(route);
  const bridgeCosts = route.estimate.bridgeCosts || 0;
  const totalCost = gasCosts + bridgeCosts;
  
  if (totalCost > maxAcceptableCost) {
    throw new Error('交易成本过高');
  }
};

3. 用户教育

  • 清晰解释多步骤操作
  • 显示预估时间和成本
  • 提供进度更新

下一步