> ## Documentation Index
> Fetch the complete documentation index at: https://docs.li.fi/llms.txt
> Use this file to discover all available pages before exploring further.

# 技术要求

> 将您的 DeFi 协议集成到 LI.FI Composer 的详细技术要求。

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

* **GitHub**: [LI.FI GitHub](https://github.com/lifinance/)
* **Email**: [marketing@li.finance](mailto:marketing@li.finance)

***

## 核心要求

### 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 集成：

#### 存款函数

```solidity theme={"system"}
function deposit(
    uint256 assets,
    address receiver
) external returns (uint256 shares);
```

#### 取款函数（可选但推荐）

```solidity theme={"system"}
function redeem(
    uint256 shares,
    address receiver,
    address owner
) external returns (uint256 assets);
```

#### 余额查询

```solidity theme={"system"}
function balanceOf(address owner) external view returns (uint256);
function convertToAssets(uint256 shares) external view returns (uint256);
```

***

## 智能合约要求

### 1. Gas 效率

Composer 交易可能包含多个步骤，因此您的协议应该：

* **优化 gas 使用**：最小化存储操作和计算
* **批量操作支持**：如果可能，支持批量存款/取款
* **合理的 gas 限制**：避免过高的 gas 消耗

### 2. 重入保护

您的协议必须正确处理重入攻击：

```solidity theme={"system"}
// OpenZeppelin 重入保护示例
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";

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

### 3. 事件发射

为更好的用户体验和跟踪，发射标准事件：

```solidity theme={"system"}
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 标准：

```solidity theme={"system"}
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. 元数据

为更好的用户体验，包含适当的元数据：

```solidity theme={"system"}
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. 权限管理

实现适当的权限控制：

```solidity theme={"system"}
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. 暂停机制

实现紧急暂停功能：

```solidity theme={"system"}
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 周。

***

## 联系我们

如果您准备好开始集成流程或有任何问题：

* **GitHub**: [LI.FI GitHub](https://github.com/lifinance/)
* **Email**: [partnerships@li.fi](mailto:partnerships@li.fi)

我们期待与您合作，将您的协议带给 LI.FI 生态系统的用户！

***

## 下一步

<CardGroup cols={2}>
  <Card title="集成指南" icon="handshake" href="/composer/for-protocols/integration-guide">
    为什么集成到 Composer
  </Card>

  <Card title="支持的协议" icon="list" href="/composer/reference/supported-protocols">
    查看当前集成的协议
  </Card>

  <Card title="Composer 概览" icon="wand-magic-sparkles" href="/composer/overview">
    了解 Composer 如何工作
  </Card>

  <Card title="工作原理" icon="diagram-project" href="/composer/composer-101">
    技术架构深入探讨
  </Card>
</CardGroup>
