> ## Documentation Index
> Fetch the complete documentation index at: https://injectivelabs-docs-tokenization-section.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# 创建你的 Swap 合约

[swap 合约](https://github.com/InjectiveLabs/swap-contract)允许在两种不同代币之间进行即时交换。在底层，它使用原子订单在一个或多个现货市场中下市价单。

### 入门

任何人都可以实例化 swap 合约的实例。Injective 主网上已经上传了此合约的一个版本，可以在[这里](https://injscan.com/code/67/)找到。

在实例化合约之前，作为合约所有者，你需要回答三个问题：

#### 1. 哪个地址应该是费用接收者？

由于 swap 合约下的订单是 Injective Exchange 模块中的订单，这意味着每个订单都可以有一个费用接收者，可以收取 40% 的交易费用。通常，交易所 dApp 会将费用接收者设置为自己的地址。

#### 2. 此合约应支持哪些代币？

合约中可用的每个代币都必须定义一个路由。路由是指 `代币 A` 将通过哪些市场来获得 `代币 B`。例如，如果你想支持 ATOM 和 INJ 之间的交换，那么你必须通过向合约提供 ATOM/USDT 和 INJ/USDT 的市场 ID 来设置路由，以便它知道 ATOM 和 INJ 之间的交换路由将是 ATOM ⇔ USDT ⇔ INJ。

目前，合约只能支持以 USDT 计价的市场。

#### 3. 应该为此合约提供多少缓冲资金？

作为合约所有者，你还必须向合约提供资金，这些资金将在交换发生时使用。缓冲资金在合约下单时使用。如果用户想要交换大量金额或在流动性不足的市场中交换，则需要更多的缓冲资金。当合约缓冲资金无法满足用户的输入金额时，将发生错误。

目前，缓冲资金应该只是 USDT。

### 消息

#### Instantiate

使用合约版本和配置详细信息初始化合约状态。配置包括管理员地址和费用接收者地址。

```rust theme={null}
pub fn instantiate(
    deps: DepsMut<InjectiveQueryWrapper>,
    env: Env,
    info: MessageInfo,
    msg: InstantiateMsg,
) -> Result<Response<InjectiveMsgWrapper>, ContractError>
```

#### Execute

处理不同类型的交易和管理功能：

* SwapMinOutput：以最小输出数量进行交换。
* SwapExactOutput：以精确输出数量进行交换。
* SetRoute：设置交换路由。
* DeleteRoute：删除交换路由。
* UpdateConfig：更新合约配置。
* WithdrawSupportFunds：从合约中提取支持资金。

```rust theme={null}
pub fn execute(
    deps: DepsMut<InjectiveQueryWrapper>,
    env: Env,
    info: MessageInfo,
    msg: ExecuteMsg,
) -> Result<Response<InjectiveMsgWrapper>, ContractError>
```

#### Reply

处理来自其他合约或交易的回复。

```rust theme={null}
pub fn reply(
    deps: DepsMut<InjectiveQueryWrapper>,
    env: Env,
    msg: Reply,
) -> Result<Response<InjectiveMsgWrapper>, ContractError>
```

#### Query

处理对合约的各种查询：

* GetRoute：获取特定的交换路由。
* GetOutputQuantity：获取给定输入数量的输出数量。
* GetInputQuantity：获取给定输出数量的输入数量。
* GetAllRoutes：获取所有可用的交换路由。

```rust theme={null}
pub fn query(deps: Deps<InjectiveQueryWrapper>, env: Env, msg: QueryMsg) -> StdResult<Binary>
```

### 仓库

swap 合约的完整 GitHub 仓库可以在[这里](https://github.com/InjectiveLabs/swap-contract)找到。
