#swap #astroport #token #router #operations #receive #multi-hop

astroport-router

Astroport 路由合约 - 为 Astroport 池提供多跳交换功能

3 个稳定版本

1.2.1 2024年3月26日
1.2.0 2023年11月27日
1.1.1 2023年7月20日

#9#astroport

Download history 106/week @ 2024-03-13 148/week @ 2024-03-20 104/week @ 2024-03-27 163/week @ 2024-04-03 44/week @ 2024-04-10 94/week @ 2024-04-17 85/week @ 2024-04-24 83/week @ 2024-05-01 73/week @ 2024-05-08 19/week @ 2024-05-15 38/week @ 2024-05-22 117/week @ 2024-05-29 298/week @ 2024-06-05 138/week @ 2024-06-12 169/week @ 2024-06-19 68/week @ 2024-06-26

735 每月下载次数
4 个crate中(通过 cw-it)使用

GPL-3.0-only

260KB
5.5K SLoC

Astroport 路由器

路由合约包含逻辑,以促进 Terra 原生币和 Astroport 币的多跳交换。


操作断言

对于每次交换,合约检查结果代币是否是请求的代币,以及接收的金额是否超过最低接收金额。

InstantiateMsg

使用 Astroport 工厂合约地址初始化合约。

{
  "astroport_factory": "terra..."
}

ExecuteMsg

receive

CW20 接收消息。

{
  "receive": {
    "sender": "terra...",
    "amount": "123",
    "msg": "<base64_encoded_json_string>"
  }
}

execute_swap_operation

将一种代币兑换成另一种代币。 single 指定此交换是单一的还是多跳路线的一部分。此消息为内部使用。

示例

交换 UST => mABNB

{
   "execute_swap_operation": {
     "operation": {
        "astro_swap": {
          "offer_asset_info": {
            "native_token": {
              "denom": "uusd"
            }
          },
          "ask_asset_info": {
            "token": {
              "contract_addr": "terra..."
            }
          }
        }
      },
     "to": "terra...",
     "max_spread": "0.05",
     "single": false
   }
}

execute_swap_operations

执行原生币和 Astroport 币的多跳交换操作。交换逐个执行,最后交换将返回请求代币。此函数是公开的(任何人都可以调用)。合约在所有路线处理完毕后,在响应数据中设置总 'return_amount'。有关更多信息,请参阅 SwapResponseData 类型。注意:响应数据仅在多跳交换的第一个代币是原生代币时才有意义。否则,cw20::send 消息将重置响应数据。

示例

交换 KRT => UST => mABNB

{
  "execute_swap_operations": {
    "operations": [
      {
        "native_swap":{
          "offer_denom":"ukrw",
          "ask_denom":"uusd"
        }
      },
      {
        "astro_swap": {
          "offer_asset_info": {
            "native_token": {
              "denom": "uusd"
            }
          },
          "ask_asset_info": {
            "token": {
              "contract_addr": "terra..."
            }
          }
        }
      }
    ],
    "minimum_receive": "123",
    "to": "terra...",
    "max_spread": "0.05"
  }
}

assert_minimum_receive

检查请求代币的数量是否超过 minimum_receive。此消息为内部使用。

{
  "assert_minimum_receive": {
    "asset_info": {
      "token": {
        "contract_addr": "terra..."
      }
    },
    "prev_balance": "123",
    "minimum_receive": "123",
    "receiver": "terra..."
  }
}

QueryMsg

以下详细说明了所有查询消息。为每个查询响应定义了一个自定义结构。

config

返回路由合约的一般配置。

{
  "config": {}
}

simulate_swap_operations

模拟多跳交换操作。示例

  • KRT => UST => mABNB
{
  "simulate_swap_operations" : {
    "offer_amount": "123",
    "operations": [
      {
        "native_swap": {
          "offer_denom": "ukrw",
          "ask_denom": "uusd"
        }
      },
      {
        "astro_swap": {
          "offer_asset_info": {
            "native_token": {
              "denom": "uusd"
            }
          },
          "ask_asset_info": {
            "token": {
              "contract_addr": "terra..."
            }
          }
        }
      }
    ]
  }
}
  • mABNB => UST => KRT
{
  "simulate_swap_operations" : {
    "offer_amount": "123",
    "operations": [
    {
      "native_swap": {
        "offer_denom": "uusd",
        "ask_denom": "ukrw"
      }
    },
    {
      "astro_swap": {
        "offer_asset_info": {
          "token": {
            "contract_addr": "terra..."
          }
        },
        "ask_asset_info": {
          "native_token": {
            "denom": "uusd"
          }
        }
      }
    }
  ]
  }
}

依赖项

~4.5–6.5MB
~138K SLoC