跳转到主要内容
本页面概述了将您的 DeFi 协议集成到 LI.FI Composer 的技术要求。如果您是协议团队并希望集成,请通过以下方式联系:

核心要求

1. EVM 兼容性

您的协议必须部署在 EVM 兼容链上。Composer 当前支持的链包括:
  • Ethereum
  • Base
  • Arbitrum
  • Optimism
  • Polygon
  • Avalanche
  • 其他 LI.FI 支持的链

2. 代币化头寸

您的协议必须在存款时返回 ERC-20 代币。这是 Composer 的核心要求。 支持的代币类型
  • 金库份额代币(如 ERC-4626)
  • 借贷收据代币(如 Aave aTokens)
  • 流性质押代币(如 wstETH)
  • 收益代币(如 Pendle PT)
不支持的类型
  • NFT 或非同质化头寸
  • 无代币表示的头寸
  • 时间锁定的头寸

3. 标准接口

您的协议应实现标准接口以便 Composer 集成:

存款函数

function deposit(
    uint256 assets,
    address receiver
) external returns (uint256 shares);

取款函数(可选但推荐)

function redeem(
    uint256 shares,
    address receiver,
    address owner
) external returns (uint256 assets);

余额查询

function balanceOf(address owner) external view returns (uint256);
function convertToAssets(uint256 shares) external view returns (uint256);

智能合约要求

1. Gas 效率

Composer 交易可能包含多个步骤,因此您的协议应该:
  • 优化 gas 使用:最小化存储操作和计算
  • 批量操作支持:如果可能,支持批量存款/取款
  • 合理的 gas 限制:避免过高的 gas 消耗

2. 重入保护

您的协议必须正确处理重入攻击:
// OpenZeppelin 重入保护示例
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";

contract YourProtocol is ReentrancyGuard {
    function deposit(uint256 assets) external nonReentrant {
        // 存款逻辑
    }
}

3. 事件发射

为更好的用户体验和跟踪,发射标准事件:
event Deposit(
    address indexed caller,
    address indexed owner,
    uint256 assets,
    uint256 shares
);

event Withdraw(
    address indexed caller,
    address indexed receiver,
    address indexed owner,
    uint256 assets,
    uint256 shares
);

代币要求

1. ERC-20 合规性

您的代币必须完全符合 ERC-20 标准:
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
    
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

2. 元数据

为更好的用户体验,包含适当的元数据:
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);

3. 价格预言机

如果您的协议需要价格信息:
  • 可靠的预言机:使用 Chainlink 或其他可靠的预言机
  • 更新频率:适当的价格更新频率
  • 故障安全:预言机故障时的安全机制

安全要求

1. 审计状态

您的协议应该:
  • 经过审计:由 reputable 审计公司审计
  • 公开报告:审计报告应该公开可查
  • 无已知漏洞:没有严重的安全漏洞

2. 权限管理

实现适当的权限控制:
contract YourProtocol {
    address public owner;
    address public manager;
    
    modifier onlyOwner() {
        require(msg.sender == owner, "Only owner");
        _;
    }
    
    modifier onlyManager() {
        require(msg.sender == manager, "Only manager");
        _;
    }
}

3. 暂停机制

实现紧急暂停功能:
bool public paused;

modifier whenNotPaused() {
    require(!paused, "Contract is paused");
    _;
}

function pause() external onlyOwner {
    paused = true;
}

集成流程

1. 初步评估

LI.FI 团队将评估您的协议:
  • 技术审查:智能合约代码审查
  • 安全评估:安全实践和审计状态
  • 用户体验:存款/取款流程评估

2. 技术集成

如果通过初步评估:
  • eDSL 集成:LI.FI 团队将创建 eDSL 指令
  • 测试:在测试网上进行广泛测试
  • 文档:创建集成文档

3. 上线部署

  • 主网测试:在主网上进行有限测试
  • 监控:监控初始使用情况
  • 全面发布:全面发布到所有 LI.FI 集成商

最佳实践

1. 代码质量

  • 清晰的代码:良好注释和结构化的代码
  • 标准化:遵循行业标准(如 ERC-4626)
  • 测试覆盖:高测试覆盖率

2. 文档

  • API 文档:清晰的函数文档
  • 集成指南:为开发者提供集成指南
  • 用户指南:最终用户使用指南

3. 社区支持

  • 响应性:及时响应问题和反馈
  • 透明度:公开的协议状态和更新
  • 治理:清晰的治理机制

常见问题

Q: 我们协议支持多种资产,Composer 如何处理?

A: Composer 可以处理多种资产。每种资产类型将需要单独的 eDSL 指令,但用户可以通过单个交易存入任何支持的资产。

Q: 如果我们的协议有存款限制怎么办?

A: Composer 的执行前模拟将检测限制并在无法执行时返回错误。您应该在协议中实现清晰的错误消息。

Q: 我们可以贡献自己的 eDSL 指令吗?

A: 是的,合作伙伴协议可以被邀请直接贡献到 Composer 后端代码库。这允许更快的更新和更好的维护。

Q: 集成需要多长时间?

A: 时间因协议复杂性而异。简单的 ERC-4626 金库可能需要 1-2 周,而复杂的自定义协议可能需要 4-6 周。

联系我们

如果您准备好开始集成流程或有任何问题: 我们期待与您合作,将您的协议带给 LI.FI 生态系统的用户!

下一步