2个稳定版本
1.1.1 | 2024年4月1日 |
---|---|
1.1.0 | 2024年3月6日 |
#2240 in 魔法豆
每月26次下载
98KB
1.5K SLoC
Dexter 协议 :: 加权池
Dexter的加权池基于特定的N维表面,该表面定义了池中任何一对代币交换的成本函数,这是由Balancer引入的。Dexter的加权池最多接受9个代币,一旦池初始化,权重不能更新。
与其他DeFi协议中的池只提供50/50的权重不同,Dexter的加权池允许用户构建不同代币数量和权重的池,例如80/20或60/20/20权重的池。
注意 - Dexter的加权池在池初始化期间接受exit_fee
参数。exit_fee
是用户从池中提取流动性时收取的百分比费用。所收取的退出费用的100%将分配给池的LP。 exit_fee
不能超过1%。
合约状态
消息 | 描述 |
---|---|
CONFIG |
在Config 结构体中存储池合约的核心配置参数 |
TWAPINFO |
在Twap 结构体中存储池支持的代币的Twap价格 |
MATHCONFIG |
存储池的exit_fee 和greatest_precision 配置参数 |
PRECISIONS |
存储池支持的每个资产的小数精度 |
WEIGHTS |
存储池支持的每个资产的归一化权重 |
-
分离代币会计和池逻辑
Dexter池只负责执行数学计算,这些计算决定了在交换/流动性提供事件期间要转移多少代币,并不处理代币的转移。Dexter的Vault查询池合约以计算要转移的代币数量,并自行处理这些转移。
这种分离简化了池合约,因为它们不再需要主动管理其资产;池只需要计算交换、加入和退出的金额。任何提出新颖交易系统想法的人都可以创建自定义池,并通过Dexter DAO的批准将其添加到Dexter PoolType注册表中,而不是需要构建自己的去中心化交易所。
支持的执行消息
消息 | 描述 |
---|---|
ExecuteMsg::UpdateConfig |
只能由Dexter Vault的所有者执行。加权池不支持 |
ExecuteMsg::UpdateLiquidity |
只能由Dexter Vault执行。更新池的本地存储资产余额状态在 config.assets 中,并更新TWAP。 |
支持查询消息
消息 | 描述 |
---|---|
QueryMsg::Config() |
返回存储的Vault配置设置,在自定义 ConfigResponse 结构体中,包括 exit_fee 和归一化代币权重 |
QueryMsg::FeeParams() |
返回提供的 PoolType 的配置设置,在自定义 FeeResponse 结构体中 |
QueryMsg::PoolId() |
返回类型为 Uint128 的Pool ID |
QueryMsg::OnJoinPool(assets_in,mint_amount,slippage_tolerance) |
返回包含 - return_assets 信息、要发行的LP份额数量、类型为 ResponseType 的 response 以及 Option<Asset> 的 AfterJoinResponse 类型,它是需收取的费用。 |
QueryMsg::OnExitPool(assets_out,burn_amount) |
返回包含 - assets_out 信息、要销毁的LP份额数量、类型为 ResponseType 的 response 以及 Option<Asset> 的 AfterExitResponse 类型,它是需收取的费用。 |
QueryMsg::OnSwap(swap_type,offer_asset,ask_asset,amount,max_spread,belief_price) |
返回包含 - trade_params 信息、类型为 ResponseType 的 response 以及 Option<Asset> 的 SwapResponse 类型,它是需收取的费用。 |
QueryMsg::CumulativePrice(swap_type,offer_asset,ask_asset,amount,max_spread,belief_price) |
返回包含累积价格信息的 CumulativePriceResponse 对象。 |
QueryMsg::累计价格( ) |
返回有关 CumulativePricesResponse 对象中累计价格的信息。 |
枚举 & 结构体
MathConfig
结构体 - 该结构体描述了加权池的主要数学配置。
struct MathConfig {
pub exit_fee: Option<Decimal>,
/// The greatest precision of assets in the pool
pub greatest_precision: u8,
}
WeightedAsset
结构体 - 该结构体描述了一个资产(原生或 CW20)及其归一化权重。
struct WeightedAsset {
/// Information about an asset stored in a [`Asset`] struct
pub asset: Asset,
/// The weight of the asset
pub weight: Decimal,
}
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
许可证
待定
依赖项
~9.5MB
~201K SLoC