# AleoSwap 合约接口总结

By [Yaakov](https://paragraph.com/@yaakov) · 2024-06-24

---

AleoSwap 是基于 Aleo 区块链的去中心化交易所（DEX），采用了 Uniswap 机制。利用 Aleo 区块链的独特功能，AleoSwap 为用户提供了更高的隐私保护和全新的功能。

#### 功能

**创建代币**

*   **功能**: `create_token`
    
*   **参数**: `info: TokenInfo` (包括代币名称、符号、小数位和总供应量)
    
*   **命令示例**:
    
        snarkos developer execute -q $rpc_url -b $broadcast_url -p $private_key -r $fee_record \
          $program_id create_token "{name: 1431520340field, symbol: 1431520340field, decimals: 6u8, total_supply: 100000000000000u128, admin: $admin_addr}"
        
    

**转账**

*   **功能**: `transfer`
    
*   **参数**: `token_id: field`, `to: address`, `amount: u128`
    
*   **命令示例**:
    
        snarkos developer execute -q $rpc_url -b $broadcast_url -p $private_key -r $fee_record \
          $program_id transfer 1field $to_address 100000000u128
        
    

**授权**

*   **功能**: `approve`
    
*   **参数**: `token_id: field`, `spender: address`, `amount: u128`
    
*   **命令示例**:
    
        snarkos developer execute -q $rpc_url -b $broadcast_url -p $private_key -r $fee_record \
          $program_id approve 1field $spender 10000000000u128
        
    

**从账户转账**

*   **功能**: `transfer_from`
    
*   **参数**: `token_id: field`, `from: address`, `to: address`, `amount: u128`
    
*   **命令示例**:
    
        snarkos developer execute -q $rpc_url -b $broadcast_url -p $private_key -r $fee_record \
          $program_id transfer_from 1field $from_addr $to_addr 100000000u128
        
    

**转为私有**

*   **功能**: `transfer_to_private`
    
*   **参数**: `token_id: field`, `to: address`, `amount: u128`
    
*   **命令示例**:
    
        snarkos developer execute -q $rpc_url -b $broadcast_url -p $private_key -r $fee_record \
          $program_id transfer_to_private 1field $to_addr 100000000u128
        
    

**转为公共**

*   **功能**: `transfer_to_public`
    
*   **参数**: `pt_in: PrivateToken`, `to: address`, `amount: u128`
    
*   **命令示例**:
    
        snarkos developer execute -q $rpc_url -b $broadcast_url -p $private_key -r $fee_record \
          $program_id transfer_to_public $private_token_record $to_addr 10000000u128
        
    

**私有转账**

*   **功能**: `transfer_privately`
    
*   **参数**: `pt_in: PrivateToken`, `to: address`, `amount: u128`
    
*   **命令示例**:
    
        snarkos developer execute -q $rpc_url -b $broadcast_url -p $private_key -r $fee_record \
          $program_id transfer_privately $private_token_record $to_addr 50000000u128
        
    

**合并代币**

*   **功能**: `join`
    
*   **参数**: `pt1: PrivateToken`, `pt2: PrivateToken`
    
*   **命令示例**:
    
        snarkos developer execute -q $rpc_url -b $broadcast_url -p $private_key -r $fee_record \
          $program_id join $private_token_record_1 $private_token_record_2
        
    

**创建交易对**

*   **功能**: `create_pair`
    
*   **参数**: `token_a: field`, `token_b: field`, `amount_a: u128`, `amount_b: u128`, `to: address`
    
*   **命令示例**:
    
        snarkos developer execute -q $rpc_url -b $broadcast_url -p $private_key -r $fee_record \
          $program_id create_pair 1field 2field 100000000u128 10000000000u128 $to_addr
        
    

**私密创建交易对**

*   **功能**: `create_pair_privately`
    
*   **参数**: `pt_a: PrivateToken`, `pt_b: PrivateToken`, `amount_a: u128`, `amount_b: u128`, `to: address`, `liquidity: u128`
    
*   **命令示例**:
    
        snarkos developer execute -q $rpc_url -b $broadcast_url -p $private_key -r $fee_record \
          $program_id create_pair_privately $private_token_record_1 $private_token_record_2 $to_addr $liquidity
        
    

**增加流动性**

*   **功能**: `add_liquidity`
    
*   **参数**: `token_a: field`, `token_b: field`, `amount_a: u128`, `amount_b: u128`, `min_a: u128`, `min_b: u128`, `to: address`
    
*   **命令示例**:
    
        snarkos developer execute -q $rpc_url -b $broadcast_url -p $private_key -r $fee_record \
          $program_id add_liquidity 1field 2field 100000000u128 10000000000u128 0u128 0u128 $to_addr
        
    

**私密增加流动性**

*   **功能**: `add_liquidity_privately`
    
*   **参数**: `pt_a: PrivateToken`, `pt_b: PrivateToken`, `amount_a: u128`, `amount_b: u128`, `min_a: u128`, `min_b: u128`, `min_liquidity: u128`, `to: address`, `refund_to: address`
    
*   **命令示例**:
    
        snarkos developer execute -q $rpc_url -b $broadcast_url -p $private_key -r $fee_record \
          $program_id add_liquidity_privately $private_token_record_1 $private_token_record_2 $to_addr $refund_to
        
    

**移除流动性**

*   **功能**: `remove_liquidity`
    
*   **参数**: `token_a: field`, `token_b: field`, `liquidity: u128`, `min_a: u128`, `min_b: u128`, `to: address`
    
*   **命令示例**:
    
        snarkos developer execute -q $rpc_url -b $broadcast_url -p $private_key -r $fee_record \
          $program_id remove_liquidity 1field 2field 1000000000u128 0u128 0u128 $to_addr
        
    

**私密移除流动性**

*   **功能**: `remove_liquidity_privately`
    
*   **参数**: `token_a: field`, `token_b: field`, `pt_lp: PrivateToken`, `liquidity: u128`, `min_a: u128`, `min_b: u128`, `to: address`, `refund_to: address`
    
*   **命令示例**:
    
        snarkos developer execute -q $rpc_url -b $broadcast_url -p $private_key -r $fee_record \
          $program_id remove_liquidity_privately $private_token_record $to_addr $refund_to
        
    

**包装私有积分**

*   **功能**: `wrap_private_credits`
    
*   **参数**: `input: credits.leo/credits`, `to: address`, `amount: field`, `holder: address`
    
*   **命令示例**:
    
        snarkos developer execute -q $rpc_url -b $broadcast_url -p $private_key -r $fee_record \
          $program_id wrap_private_credits $input_record $to_addr 10000000field $holder_addr
        
    

**包装公共积分**

*   **功能**: `wrap_public_credits`
    
*   **参数**: `to: address`, `amount: field`, `holder: address`
    
*   **命令示例**:
    
        snarkos developer execute -q $rpc_url -b $broadcast_url -p $private_key -r $fee_record \
          $program_id wrap_public_credits $to_addr 10000000field $holder_addr
        
    

**解包**

*   **功能**: `unwrap`
    
*   **参数**: `to: address`, `amount: field`, `into_private: bool`
    
*   **命令示例**:
    
        snarkos developer execute -q $rpc_url -b $broadcast_url -p $private_key -r $fee_record \
          $program_id unwrap $to_addr 10000000field true
        
    

**处理私有解包**

*   **功能**: `handle_unwrap_to_private`
    
*   **参数**: `index: u64`, `to: address`, `amount: field`
    
*   **命令示例**:
    
        snarkos developer execute -q $rpc_url -b $broadcast_url -p $private_key -r $fee_record \
          $program_id handle_unwrap_to_private 0u64 $to_addr 10000000field
        
    

**处理公共解包**

*   **功能**: `handle_unwrap_to_public`
    
*   **参数**: `index: u64`, `to: address`, `amount: field`
    
*   **命令示例**:
    
        snarkos developer execute -q $rpc_url -b $broadcast_url -p $private_key -r $fee_record \
          $program_id handle_unwrap_to_public 1u64 $to_addr 10000000field
        
    

**固定数量代币换取代币**

*   **功能**: `swap_exact_tokens_for_tokens`
    
*   **参数**: `token_in: field`, `token_out: field`, `amount_in: u128`, `amount_out_min: u128`, `to: address`
    
*   **命令示例**:
    
        snarkos developer execute -q $rpc_url -b $broadcast_url -p $private_key -r $fee_record \
          $program_id swap_exact_tokens_for_tokens 1field 2field 1000000u128 98000000u128 $to_addr
        
    

**私有代币换取公共代币**

*   **功能**: `swap_exact_private_for_public`
    
*   **参数**: `pt_in: PrivateToken`, `token_out: field`, `amount_in: u128`, `amount_out_min: u128`, `to: address`
    
*   **命令示例**:
    
        snarkos developer execute -q $rpc_url -b $broadcast_url -p $private_key -r $fee_record \
          $program_id swap_exact_private_for_public $private_token_record $to_addr 98000000u128
        
    

**私有代币换取私有代币**

*   **功能**: `swap_exact_private_for_private`
    
*   **参数**: `pt_in: PrivateToken`, `token_out: field`, `amount_in: u128`, `amount_out_min: u128`, `to_pri: address`, `to_pub: address`
    
*   **命令示例**:
    
        snarkos developer execute -q $rpc_url -b $broadcast_url -p $private_key -r $fee_record \
          $program_id swap_exact_private_for_private $private_token_record $to_pri $to_pub 98000000u128
        
    

**公共代币换取私有代币**

*   **功能**: `swap_exact_public_for_private`
    
*   **参数**: `token_in: field`, `token_out: field`, `amount_in: u128`, `amount_out_min: u128`, `to_pri: address`, `to_pub: address`
    
*   **命令示例**:
    
        snarkos developer execute -q $rpc_url -b $broadcast_url -p $private_key -r $fee_record \
          $program_id swap_exact_public_for_private 1field 2field 1000000u128 98000000u128 $to_pri $to_pub
        
    

**浮动输入换取固定输出**

*   **功能**: `swap_tokens_for_exact_tokens`
    
*   **参数**: `token_in: field`, `token_out: field`, `amount_in_max: u128`, `amount_out: u128`, `to: address`
    
*   **命令示例**:
    
        snarkos developer execute -q $rpc_url -b $broadcast_url -p $private_key -r $fee_record \
          $program_id swap_tokens_for_exact_tokens 2field 1field 50000000u128 500000u128 $to_addr
        
    

**私有代币换取固定数量的公共代币**

*   **功能**: `swap_private_for_exact_public`
    
*   **参数**: `pt_in: PrivateToken`, `token_out: field`, `amount_in_max: u128`, `amount_out: u128`, `to: address`, `refund_to: address`
    
*   **命令示例**:
    
        snarkos developer execute -q $rpc_url -b $broadcast_url -p $private_key -r $fee_record \
          $program_id swap_private_for_exact_public $private_token_record $to_addr $refund_to 98000000u128
        
    

**私有代币换取固定数量的私有代币**

*   **功能**: `swap_private_for_exact_private`
    
*   **参数**: `pt_in: PrivateToken`, `token_out: field`, `amount_in_max: u128`, `amount_out: u128`, `to_pri: address`, `refund_to: address`
    
*   **命令示例**:
    
        snarkos developer execute -q $rpc_url -b $broadcast_url -p $private_key -r $fee_record \
          $program_id swap_private_for_exact_private $private_token_record $to_pri $refund_to 98000000u128
        
    

**公共代币换取固定数量的私有代币**

*   **功能**: `swap_public_for_exact_private`
    
*   **参数**: `token_in: field`, `token_out: field`, `amount_in_max: u128`, `amount_out: u128`, `to_pri: address`
    
*   **命令示例**:
    
        snarkos developer execute -q $rpc_url -b $broadcast_url -p $private_key -r $fee_record \
          $program_id swap_public_for_exact_private 1field 2field 1000000u128 98000000u128 $to_pri
        
    

**代币水龙头**

*   **功能**: `token_faucet`
    
*   **参数**: `token_id: field`, `to: address`
    
*   **命令示例**:
    
        snarkos developer execute -q $rpc_url -b $broadcast_url -p $private_key -r $fee_record \
          $program_id token_faucet 1field $to_addr
        
    

**设置代币水龙头**

*   **功能**: `set_token_faucet`
    
*   **参数**: `token_id: field`, `amount: u128`
    
*   **命令示例**:
    
        snarkos developer execute -q $rpc_url -b $broadcast_url -p $private_key -r $fee_record \
          $program_id set_token_faucet 1field 1000u128
        
    

**更改代币管理员**

*   **功能**: `change_token_admin`
    
*   **参数**: `token_id: field`, `admin: address`
    
*   **命令示例**:
    
        snarkos developer execute -q $rpc_url -b $broadcast_url -p $private_key -r $fee_record \
          $program_id change_token_admin 1field $new_admin_addr
        
    

### 公共状态

**余额**

*   **描述**: 存储所有代币和所有账户的余额。
    
*   **查询命令**:
    
        curl $aleoRpc/testnet3/program/swap.aleo/mapping/balances/$key
        
    

**授权**

*   **描述**: 存储所有代币和所有账户的授权数据。
    
*   **查询命令**:
    
        curl $aleoRpc/testnet3/program/swap.aleo/mapping/allowance/$key
        
    

**代币信息**

*   **描述**: 存储所有代币的元信息。
    
*   **查询命令**:
    
        curl $aleoRpc/testnet3/program/swap.aleo/mapping/tokens/$token_id
        
    

**水龙头配置**

*   **描述**: 存储所有代币的水龙头配置。
    
*   **查询命令**:
    
        curl $aleoRpc/testnet3/program/swap.aleo/mapping/faucets/$token_id
        
    

**交易对信息**

*   **描述**: 存储所有交易对的信息。
    
*   **查询命令**:
    
        curl $aleoRpc/testnet3/program/swap.aleo/mapping/pairs/$pair_id
        
    

**全局状态**

*   **描述**: 存储全局状态。
    
*   **查询命令**:
    
        curl $aleoRpc/testnet3/program/swap.aleo/mapping/global_state/true
        
    

**包装状态**

*   **描述**: 存储 WALEO（Wrapped Aleo）功能的状态。
    
*   **查询命令**:
    
        curl $aleoRpc/testnet3/program/swap.aleo/mapping/wrap_state/true
        
    

**解包历史**

*   **描述**: 存储所有 WALEO 的解包历史（包括待处理和已处理的）。
    
*   **查询命令**:
    
        curl $aleoRpc/testnet3/program/swap.aleo/mapping/unwraps/$index
        
    

以上就是 AleoSwap 技术架构的详细介绍。通过利用 Aleo 区块链的独特功能，AleoSwap 提供了更高的隐私性和灵活性，适应了去中心化交易所和用户的多种需求。如果你有任何疑问或需要进一步的信息，可以随时访问我们的官方文档或加入我们的社区讨论。

**总结**

AleoSwap 作为基于 Aleo 区块链的去中心化交易所，通过集成 Uniswap 机制和 Aleo 区块链的独特隐私功能，极大地提升了交易所的隐私保护和功能多样性。无论是代币的创建、转账、流动性管理还是代币交换，AleoSwap 都提供了全面且安全的解决方案，为用户带来了更加自由和隐私的交易体验。期待在社区的共同努力下，AleoSwap 能够不断发展壮大，为更多用户提供优质的去中心化金融服务。

**Aleo 官方链接：**

> *   _Aleo_ [_Twitter_](https://twitter.com/aleohq)
>     
> *   _Aleo_ [_Discord_](https://discord.gg/aleo)
>     
> *   _Aleo_ [_Website_](https://www.aleo.org/)
>     
> *   Aleo [Github](https://github.com/ProvableHQ)
>

---

*Originally published on [Yaakov](https://paragraph.com/@yaakov/aleoswap)*
