Skip to content

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
]);