1个稳定版本
1.1.1 | 2024年4月1日 |
---|---|
1.1.0 |
|
#2475 in 神奇豆子
每月下载 31次
135KB
2K SLoC
Dexter 协议 :: Stable-5-Pool
Dexter的Stable-5-Pool实现了池中最多5个资产的稳定swap不变量,并实现了流动性提供/提取和掉期计算的计算。
合约状态
消息 | 描述 |
---|---|
CONFIG |
将池合约的核心配置参数存储在Config 结构体中 |
TWAPINFO |
将池支持的代币的Twap价格存储在Twap 结构体中 |
MATHCONFIG |
存储与稳定swap不变量相关的自定义配置参数,如AMP参数 |
-
分离代币会计和池逻辑
Dexter池只负责数学计算,这些计算决定了在掉期/流动性提供事件期间要转移的代币数量,并且不处理代币转移本身。Dexter的保险库查询池合约以计算要转移的代币数量,并自行处理这些转移。
这种分离简化了池合约,因为它们不再需要积极管理其资产;池只需要计算掉期、加入和退出的金额。任何有新颖交易系统想法的人都可以创建自定义池,并通过Dexter的PoolType注册表获得Dexter DAO的批准,而不是需要构建自己的去中心化交易所。
支持的执行消息
消息 | 描述 |
---|---|
ExecuteMsg::UpdateConfig |
只能由Dexter保险库的所有者执行。使用在params 变量中指定的参数更新池的数学配置。仅接受StartChangingAmp 和StopChangingAmp 命令 |
ExecuteMsg::UpdateLiquidity |
只能由Dexter保险库执行。更新池在config.assets 中本地存储的资产余额状态,并更新Twap。 |
支持的查询消息
消息 | 描述 |
---|---|
QueryMsg::Config() |
返回存储的保险库配置设置,以自定义 ConfigResponse 结构体 |
QueryMsg::FeeParams() |
返回提供的 PoolType 的配置设置,以自定义 FeeResponse 结构体 |
QueryMsg::PoolId() |
返回池 ID,类型为 Uint128 |
QueryMsg::OnJoinPool(assets_in,mint_amount,slippage_tolerance) |
返回 AfterJoinResponse 类型,其中包含 - return_assets 信息、待铸成的 LP 代币数量、类型为 ResponseType 的 response 以及类型为 Option<Asset> 的 fee ,这是要收取的费用。 |
QueryMsg::OnExitPool(assets_out,burn_amount) |
返回 AfterExitResponse 类型,其中包含 - assets_out 信息、待销毁的 LP 代币数量、类型为 ResponseType 的 response 以及类型为 Option<Asset> 的 fee ,这是要收取的费用。 |
QueryMsg::OnSwap(swap_type,offer_asset,ask_asset,amount,max_spread,belief_price) |
返回 SwapResponse 类型,其中包含 - trade_params 信息、类型为 ResponseType 的 response 以及类型为 Option<Asset> 的 fee ,这是要收取的费用。 |
QueryMsg::CumulativePrice(swap_type,offer_asset,ask_asset,amount,max_spread,belief_price) |
返回关于资产累积价格的 CumulativePriceResponse 对象中的信息。 |
QueryMsg::CumulativePrices( ) |
返回关于累积价格的 CumulativePricesResponse 对象中的信息。 |
枚举 & 结构体
MathConfig
结构体 - 此结构体描述了稳定池的主要数学配置。
struct MathConfig {
// This is the current amplification used in the pool
pub init_amp: u64,
// This is the start time when amplification starts to scale up or down
pub init_amp_time: u64,
// This is the target amplification to reach at `next_amp_time`
pub next_amp: u64,
// This is the timestamp when the current pool amplification should be `next_amp`
pub next_amp_time: u64,
/// The greatest precision of assets in the pool
pub greatest_precision: u8,
}
StablePoolUpdateParams
枚举 - 此枚举存储了用于启动和停止更改稳定swap池的放大倍数的选项。在 Execute::UpdateConfig 函数中使用。
enum StablePoolUpdateParams {
StartChangingAmp { next_amp: u64, next_amp_time: u64 },
StopChangingAmp {},
}
ResponseType
枚举 - 此枚举用于描述数学计算(连接/退出/交换)是否成功
enum ResponseType {
Success {},
Failure (String),
}
Config
结构体 - 此结构体描述了池的主控制配置。
struct Config {
/// ID of contract which is allowed to create pools of this type
pub pool_id: Uint128,
/// The address of the LP token associated with this pool
pub lp_token_addr: Option<Addr>,
/// the vault contract address
pub vault_addr: Addr,
/// Assets supported by the pool
pub assets: Vec<Asset>,
/// The pools type (provided in a [`PoolType`])
pub pool_type: PoolType,
/// The Fee details of the pool
pub fee_info: FeeStructs,
/// The block time when pool liquidity was last updated
pub block_time_last: u64,
}
Trade
结构体 - 此辅助结构体用于交换操作。
struct Trade {
/// The number of tokens to be sent by the user to the Vault
pub amount_in: Uint128,
/// The number of tokens to be received by the user from the Vault
pub amount_out: Uint128,
/// The spread associated with the swap tx
pub spread: Uint128,
}
AfterJoinResponse
结构体 - 用于 QueryMsg::OnJoinPool
struct AfterJoinResponse {
// Is a sorted list consisting of amount of info of tokens which will be provided by the user to the Vault as liquidity
pub provided_assets: Vec<Asset>,
// Is the amount of LP tokens to be minted
pub new_shares: Uint128,
// Is the response type :: Success or Failure
pub response: ResponseType,
// Is the fee to be charged
pub fee: Option<Asset>,
}
AfterExitResponse
结构体 - 用于 QueryMsg::OnExitPool
struct AfterExitResponse {
/// Assets which will be transferred to the recipient against tokens being burnt
pub assets_out: Vec<Asset>,
/// Number of LP tokens to burn
pub burn_shares: Uint128,
/// Operation will be a `Success` or `Failure`
pub response: ResponseType,
/// Fee to be charged
pub fee: Option<Asset>,
}
SwapResponse
结构体 - 用于 QueryMsg::OnSwap
struct SwapResponse {
/// Is of type [`Trade`] which contains all params related with the trade
pub trade_params: Trade,
/// Operation will be a `Success` or `Failure`
pub response: ResponseType,
/// Fee to be charged
pub fee: Option<Asset>,
}
CumulativePriceResponse
结构体 - 用于 QueryMsg::CumulativePrice
struct CumulativePriceResponse {
pub exchange_info: AssetExchangeRate,
pub total_share: Uint128,
}
CumulativePricesResponse
结构体 - 用于 QueryMsg::CumulativePrices
struct CumulativePricesResponse {
pub exchange_info: Vec<AssetExchangeRate>,
pub total_share: Uint128,
}
构建模式和运行单元测试
cargo schema
cargo test
许可证
待定
依赖项
~9MB
~182K SLoC