Appearance
数据结构定义
本文档列出了 Coinfair CLMM 合约中所有主要的数据结构及其字段定义。
Pool
池子核心数据结构,存储了交易对的所有状态信息。
move
struct Pool has key {
index: u64, // 池子索引
collection_name: String, // 位置NFT集合名称
store_a: Object<FungibleStore>, // 代币A的存储对象
store_b: Object<FungibleStore>, // 代币B的存储对象
metadata_a: Object<Metadata>, // 代币A的元数据对象
metadata_b: Object<Metadata>, // 代币B的元数据对象
tick_spacing: u64, // tick间距
fee_rate: u64, // 交易费率(分子,分母为1_000_000)
liquidity: u128, // 当前tick索引处的总流动性
current_fifrt_price: u128, // 当前价格的平方根(Q64.64格式)
current_tick_index: I64, // 当前tick索引
fee_growth_global_a: u128, // 代币A的全局费用增长率(Q64.64格式)
fee_growth_global_b: u128, // 代币B的全局费用增长率(Q64.64格式)
fee_protocol_coin_a: u64, // 协议应收的代币A费用
fee_protocol_coin_b: u64, // 协议应收的代币B费用
tick_indexes: Table<u64, BitVector>, // tick索引位向量表
ticks: Table<I64, Tick>, // tick数据表
rewarder_infos: vector<Rewarder>, // 奖励器信息数组(最多3个)
rewarder_last_updated_time: u64, // 奖励器最后更新时间
positions: Table<u64, Position>, // 位置信息表
position_index: u64, // 位置计数器
is_pause: bool, // 池子是否暂停
uri: String, // 位置NFT的URI
signer_cap: account::SignerCapability // 池子账户的签名能力
}PoolInfo
池子信息数据结构(用于视图函数返回),包含池子的所有可复制字段。
move
struct PoolInfo has copy, drop, store {
index: u64, // 池子索引
collection_name: String, // 池子位置代币NFT集合名称
metadata_a: Object<Metadata>, // 代币A的元数据对象
metadata_b: Object<Metadata>, // 代币B的元数据对象
tick_spacing: u64, // tick间距
fee_rate: u64, // 交易费率的分子,分母为1_000_000
liquidity: u128, // 当前tick索引处的总流动性
current_fifrt_price: u128, // 当前价格的平方根(Q64.64格式)
current_tick_index: I64, // 当前tick索引
fee_growth_global_a: u128, // 代币A的全局费用增长率(Q64.64格式)
fee_growth_global_b: u128, // 代币B的全局费用增长率(Q64.64格式)
fee_protocol_coin_a: u64, // 协议应收的代币A费用
fee_protocol_coin_b: u64, // 协议应收的代币B费用
rewarder_infos: vector<Rewarder>, // 奖励器信息数组
rewarder_last_updated_time: u64, // 奖励器最后更新时间
position_index: u64, // 位置计数器
is_pause: bool, // 池子是否暂停
uri: String, // 位置NFT的URI
initialized_ticks: vector<Tick> // 所有已初始化的tick信息
}Position
集中流动性位置数据结构,代表一个流动性提供者在特定价格区间内的流动性位置。
move
struct Position has copy, drop, store {
pool: address, // 该位置所属的池子地址
index: u64, // 位置的唯一标识符
liquidity: u128, // 该位置提供的流动性数量
tick_lower_index: I64, // 位置的下边界tick索引
tick_upper_index: I64, // 位置的上边界tick索引
fee_growth_inside_a: u128, // 该位置内部代币A的费用增长率
fee_owed_a: u64, // 该位置累计应得的代币A费用
fee_growth_inside_b: u128, // 该位置内部代币B的费用增长率
fee_owed_b: u64, // 该位置累计应得的代币B费用
rewarder_infos: vector<PositionRewarder> // 该位置的奖励器信息数组
}Tick
集中流动性池子的tick数据结构,每个tick代表一个特定的价格点。
move
struct Tick has copy, drop, store {
index: I64, // tick索引,对应特定的价格点
fifrt_price: u128, // 该tick对应的价格平方根
liquidity_net: I128, // 流动性净变化量(有符号)
liquidity_gross: u128, // 流动性总量(无符号)
fee_growth_outside_a: u128, // 代币A在该tick外部的费用增长率
fee_growth_outside_b: u128, // 代币B在该tick外部的费用增长率
rewarders_growth_outside: vector<u128> // 各个奖励器在该tick外部的增长率
}Rewarder
流动性挖矿奖励器数据结构,负责管理流动性挖矿的奖励分配。
move
struct Rewarder has copy, drop, store {
token: Object<Metadata>, // 奖励代币的类型信息
authority: address, // 奖励器的管理权限地址
pending_authority: address, // 待转移的权限地址
emissions_per_second: u128, // 每秒钟的奖励发放数量
growth_global: u128 // 全局奖励增长率
}PositionRewarder
位置奖励器数据结构,记录每个位置在特定奖励器中的奖励分配情况。
move
struct PositionRewarder has drop, copy, store {
growth_inside: u128, // 该位置内部的奖励增长率
amount_owed: u64 // 该位置累计应得的奖励数量
}FlashSwapReceipt
闪电交换收据,用于记录闪电交换的关键信息。
move
struct FlashSwapReceipt {
pool_address: address, // 进行闪电交换的池子地址
a2b: bool, // 交换方向:true表示A换B,false表示B换A
pay_amount: u64 // 需要支付的代币数量
}AddLiquidityReceipt
添加流动性收据,用于添加流动性操作的两阶段提交。
move
struct AddLiquidityReceipt {
pool_address: address, // 操作的池子地址
amount_a: u64, // 需要支付的代币A数量
amount_b: u64 // 需要支付的代币B数量
}SwapResult
交换结果数据结构,记录一次交换操作的完整结果信息。
move
struct SwapResult has copy, drop {
amount_in: u64, // 实际输入的代币数量
amount_out: u64, // 实际输出的代币数量
fee_amount: u64, // 支付的交易费用
ref_fee_amount: u64 // 合作伙伴推荐费用
}CalculatedSwapResult
计算出的交换结果数据结构,包含交换操作的详细计算结果。
move
struct CalculatedSwapResult has copy, drop, store {
amount_in: u64, // 计算的输入代币数量
amount_out: u64, // 计算的输出代币数量
fee_amount: u64, // 计算的交易费用
fee_rate: u64, // 使用的费率
after_fifrt_price: u128, // 交换后的价格平方根
is_exceed: bool, // 是否超出了价格限制
step_results: vector<SwapStepResult> // 每一步的交换结果详情
}SwapStepResult
单步交换结果数据结构,记录交换过程中每一步的详细信息。
move
struct SwapStepResult has copy, drop, store {
current_fifrt_price: u128, // 当前步骤开始时的价格平方根
target_fifrt_price: u128, // 目标价格平方根
current_liquidity: u128, // 当前步骤的流动性
amount_in: u64, // 该步骤的输入数量
amount_out: u64, // 该步骤的输出数量
fee_amount: u64, // 该步骤的费用
remainer_amount: u64 // 剩余未处理的数量
}PoolId
池子ID,用于唯一标识一个池子。
move
struct PoolId has store, copy, drop {
token_a: Object<Metadata>, // 代币A类型
token_b: Object<Metadata>, // 代币B类型
tick_spacing: u64 // tick间距
}FeeTier
费用等级数据结构。
move
struct FeeTier has store, copy, drop {
tick_spacing: u64, // tick间距
fee_rate: u64 // 默认费率
}GlobalConfig
CLMM池的全局配置。
move
struct GlobalConfig has key {
protocol_authority: address, // 协议权限地址
protocol_pending_authority: address, // 待转移的协议权限地址
protocol_fee_claim_authority: address, // 协议费用领取权限地址
pool_create_authority: address, // 池子创建权限地址(@0x0表示任何人都可以创建)
protocol_fee_rate: u64, // 协议费率
creator_fee_rate: u64, // 创建者费率
referrer_fee_rate: u64, // 推荐者费率
is_pause: bool // 协议是否暂停
}