Appearance
FeeTier 模块
模块路径: coinfair_clmm::fee_tier
FeeTier 模块负责费用等级管理,提供创建池子时使用的费用等级元数据。FeeTier 通过 tick_spacing 来标识,只能由协议创建和更新。
View 方法(只读)
get_fee_tier_count
获取所有费用等级的数量。
move
#[view]
public fun get_fee_tier_count(): u64返回: u64 - 费用等级数量
get_fee_tiers
获取所有费用等级列表。
move
#[view]
public fun get_fee_tiers(): vector<FeeTier>返回: vector<FeeTier> - 所有费用等级列表
FeeTier 结构:
move
struct FeeTier {
tick_spacing: u64, // tick间距
fee_rate: u64 // 默认费率
}fee_tier_exists
检查指定 tick_spacing 的费用等级是否存在。
move
#[view]
public fun fee_tier_exists(tick_spacing: u64): bool参数:
tick_spacing:u64- tick间距
返回: bool - 是否存在
get_fee_tier_info
获取费用等级信息(如果存在)。
move
#[view]
public fun get_fee_tier_info(tick_spacing: u64): (bool, u64, u64)参数:
tick_spacing:u64- tick间距
返回: (bool, u64, u64) - (是否存在, tick_spacing, fee_rate)
Public 方法(可写)
initialize
初始化费用等级系统。
move
public fun initialize(account: &signer)参数:
account:&signer- 签名者账户
说明: 合约部署时自动调用
add_fee_tier
添加费用等级。
move
public fun add_fee_tier(
account: &signer,
tick_spacing: u64,
fee_rate: u64
)参数:
account:&signer- 协议权限账户tick_spacing:u64- tick间距fee_rate:u64- 费率
限制: 费率不能超过 MAX_FEE_RATE (200000 = 20%)
前置条件: 必须是协议权限账户
事件: 触发 AddEvent
错误码:
EFEE_TIER_ALREADY_EXIST = 1: 费用等级已存在EINVALID_FEE_RATE = 4: 无效的费率
update_fee_tier
更新费用等级的费率。
move
public fun update_fee_tier(
account: &signer,
tick_spacing: u64,
new_fee_rate: u64
)参数:
account:&signer- 协议权限账户tick_spacing:u64- tick间距new_fee_rate:u64- 新费率
限制: 费率不能超过 MAX_FEE_RATE (200000 = 20%)
前置条件: 必须是协议权限账户
事件: 触发 UpdateEvent
错误码:
EFEE_TIER_NOT_FOUND = 2: 费用等级未找到EINVALID_FEE_RATE = 4: 无效的费率
delete_fee_tier
删除费用等级。
move
public fun delete_fee_tier(
account: &signer,
tick_spacing: u64
)参数:
account:&signer- 协议权限账户tick_spacing:u64- tick间距
前置条件: 必须是协议权限账户
事件: 触发 DeleteEvent
错误码:
EFEE_TIER_NOT_FOUND = 2: 费用等级未找到
get_fee_rate
根据tick间距获取费率(非view函数,供内部使用)。
move
public fun get_fee_rate(tick_spacing: u64): u64参数:
tick_spacing:u64- tick间距
返回: u64 - 对应的费率
错误码:
EFEE_TIER_NOT_FOUND = 2: 费用等级未找到
max_fee_rate
获取最大费率。
move
public fun max_fee_rate(): u64返回: u64 - 最大费率值(200000 = 20%)
数据结构
FeeTier
费用等级数据结构。
move
struct FeeTier has store, copy, drop {
tick_spacing: u64, // tick间距
fee_rate: u64 // 默认费率
}使用示例
TypeScript 示例
typescript
// 1. 获取所有费用等级
const feeTiers = await view('fee_tier::get_fee_tiers', []);
console.log('Fee tiers:', feeTiers);
// 2. 检查费用等级是否存在
const exists = await view('fee_tier::fee_tier_exists', [tickSpacing]);
// 3. 获取费用等级信息
const [isFound, spacing, rate] = await view('fee_tier::get_fee_tier_info', [tickSpacing]);
if (isFound) {
console.log(`Fee tier for spacing ${spacing}: ${rate}`);
}
// 4. 添加费用等级(需要协议权限)
await entry('clmm_router::add_fee_tier', [
protocolAuthority,
tickSpacing,
feeRate
]);
// 5. 更新费用等级(需要协议权限)
await entry('clmm_router::update_fee_tier', [
protocolAuthority,
tickSpacing,
newFeeRate
]);