Appearance
@aptos-cf-swapv3/clmm-sdk
Aptos CLMM (Concentrated Liquidity Market Maker) SDK for swap and liquidity management.
安装
bash
pnpm add @aptos-cf-swapv3/clmm-sdk初始化
typescript
import { SDK } from '@aptos-cf-swapv3/clmm-sdk'
const sdk = new SDK({
rpcUrl: 'https://fullnode.testnet.aptoslabs.com/v1',
networkOptions: {
nativeToken: '0x1::aptos_coin::AptosCoin',
modules: {
LiquidswapDeployer: '0x...',
ClmmIntegrate: '0x...',
FetcherDeployer: '0x...',
TokenDeployer: '0x...',
IntegerMate: '0x...',
},
},
})SDK 核心类
SDK
主 SDK 类,提供所有模块的访问入口。
属性
client: AptosClient- Aptos 客户端实例tokenClient: TokenClient- Token 客户端实例senderAddress: string- 发送者地址sdkOptions: SdkOptions- SDK 配置选项
方法
getGlobalConfig(forceRefresh?: boolean): Promise<GlobalConfig>
获取全局配置信息。
参数:
forceRefresh?: boolean- 是否强制刷新缓存
返回:
typescript
Promise<GlobalConfig>
// GlobalConfig = {
// protocol_fee_rate: string
// is_pause: boolean
// }模块访问器
sdk.Swap- SwapModule 实例sdk.Position- PositionModule 实例sdk.Pool- PoolModule 实例sdk.Resources- ResourcesModule 实例sdk.Rewarder- RewarderModule 实例sdk.Router- RouterModule 实例sdk.Token- TokenModule 实例sdk.Fetcher- FetcherModule 实例sdk.CfModules- CfModules 实例
SwapModule
交易模块,用于处理代币交换。
方法
calculateRates(params: CalculateRatesParams): CalculateRatesResult
计算交换汇率。
参数:
typescript
type CalculateRatesParams = {
decimalsA: number
decimalsB: number
a2b: boolean
byAmountIn: boolean
amount: BN
swapTicks: Array<TickData>
currentPool: Pool
}返回:
typescript
type CalculateRatesResult = {
estimatedAmountIn: BN
estimatedAmountOut: BN
estimatedEndSqrtPrice: BN
estimatedFeeAmount: BN
isExceed: boolean
extraComputeLimit: number
aToB: boolean
byAmountIn: boolean
amount: BN
priceImpactPct: number
}createSwapTransactionPayload(params: CreateTXPayloadParams, bcsPackage?: boolean): TransactionPayload
创建交换交易负载。
参数:
typescript
type CreateTXPayloadParams = {
pool_addr: string
coinTypeA: AptosResourceType
coinTypeB: AptosResourceType
a_to_b: boolean
by_amount_in: boolean
amount: string
amount_limit: string
partner: string
}返回:
typescript
TxnBuilderTypes.TransactionPayloadEntryFunction | TxPayloadCallFunctionPositionModule
流动性头寸模块,用于管理流动性头寸。
方法
createAddLiquidityTransactionPayload(params: AddLiquidityParams | AddLiquidityFixTokenParams, bcsPackage?: boolean): TransactionPayload
创建添加流动性交易负载。
参数:
typescript
// 方式1:按流动性数量
type AddLiquidityParams = {
delta_liquidity: BN
max_amount_a: number | string
max_amount_b: number | string
pool: string
coinTypeA: AptosResourceType
coinTypeB: AptosResourceType
tick_lower: number
tick_upper: number
is_open: boolean
index: number
}
// 方式2:按固定代币数量
type AddLiquidityFixTokenParams = {
amount_a: number | string
amount_b: number | string
fix_amount_a: boolean
pool: string
coinTypeA: AptosResourceType
coinTypeB: AptosResourceType
tick_lower: number
tick_upper: number
is_open: boolean
index: number
}返回:
typescript
TxnBuilderTypes.TransactionPayloadEntryFunction | TxPayloadCallFunctionremoveLiquidityTransactionPayload(params: RemoveLiquidityParams, bcsPackage?: boolean): TransactionPayload
创建移除流动性交易负载。
参数:
typescript
type RemoveLiquidityParams = {
pool: string
coinTypeA: AptosResourceType
coinTypeB: AptosResourceType
delta_liquidity: BN
min_amount_a: number
min_amount_b: number
pos_index: number
is_close: boolean
}返回:
typescript
TxnBuilderTypes.TransactionPayloadEntryFunction | TxPayloadCallFunctionclosePositionTransactionPayload(params: ClosePositionParams, bcsPackage?: boolean): TransactionPayload
创建关闭头寸交易负载。
参数:
typescript
type ClosePositionParams = {
pool_address: string
coinTypeA: AptosResourceType
coinTypeB: AptosResourceType
pos_index: number
}返回:
typescript
TxnBuilderTypes.TransactionPayloadEntryFunction | TxPayloadCallFunctioncollectFeeTransactionPayload(params: CollectFeeParams, bcsPackage?: boolean): TransactionPayload
创建收取手续费交易负载。
参数:
typescript
type CollectFeeParams = {
pool: string
coinTypeA: AptosResourceType
coinTypeB: AptosResourceType
pos_index: number
}返回:
typescript
TxnBuilderTypes.TransactionPayloadEntryFunction | TxPayloadCallFunctionPoolModule
池子管理模块。
方法
getPoolAddress(token0: string, token1: string, tick_spacing: number): Promise<string | null>
根据代币地址和 tick_spacing 获取池子地址。
参数:
token0: string- 代币0地址token1: string- 代币1地址tick_spacing: number- Tick 间距
返回:
typescript
Promise<string | null>calculatePoolAddress(token0: string, token1: string, tick_spacing: number): Promise<[string, boolean]>
计算池子地址。
参数:
token0: string- 代币0地址token1: string- 代币1地址tick_spacing: number- Tick 间距
返回:
typescript
Promise<[string, boolean]> // [poolAddress, exists]creatPoolTransactionPayload(params: CreatePoolParams): TxPayloadCallFunction
创建池子交易负载。
参数:
typescript
type CreatePoolParams = {
tokenA: string // Object<Metadata> 地址
tokenB: string // Object<Metadata> 地址
tick_spacing: number
initialize_sqrt_price: BN
uri: string
}返回:
typescript
TxPayloadCallFunctioncreatePoolAndAddLiquidityTransactionPayload(params: CreatePoolAndAddLiquidityParams): TxPayloadCallFunction
创建池子并添加初始流动性的交易负载。
参数:
typescript
type CreatePoolAndAddLiquidityParams = {
tokenA: string
tokenB: string
tick_spacing: number
initialize_sqrt_price: BN
uri: string
delta_liquidity: BN
max_amount_a: number | string
max_amount_b: number | string
tick_lower: number
tick_upper: number
}返回:
typescript
TxPayloadCallFunctionResourcesModule
资源查询模块,用于获取链上资源信息。
方法
getPools(assignPools?: string[], offset?: number, limit?: number): Promise<Pool[]>
获取池子列表。
参数:
assignPools?: string[]- 指定的池子地址列表offset?: number- 偏移量(默认 0)limit?: number- 限制数量(默认 100)
返回:
typescript
Promise<Pool[]>getPool(poolAddress: string, forceRefresh?: boolean): Promise<Pool>
获取单个池子信息。
参数:
poolAddress: string- 池子地址forceRefresh?: boolean- 是否强制刷新(默认 true)
返回:
typescript
Promise<Pool>getTickDataByIndex(tickHandle: string, tickIndex: number): Promise<TickData>
根据索引获取 Tick 数据。
参数:
tickHandle: string- Tick 表句柄tickIndex: number- Tick 索引
返回:
typescript
Promise<TickData>getPoolLowerAndUpperTicks(account: string, pool: Pool): Promise<TickData[][]>
获取池子的上下限 Tick 数据。
参数:
account: string- 账户地址pool: Pool- 池子信息
返回:
typescript
Promise<[TickData[], TickData[]]> // [lowerTicks, upperTicks]getPositionInfo(pool: Pool, positionKey: string | number, forceRefresh?: boolean): Promise<Position>
获取头寸信息。
参数:
pool: Pool- 池子信息positionKey: string | number- 头寸名称或索引forceRefresh?: boolean- 是否强制刷新(默认 true)
返回:
typescript
Promise<Position>getPositionList(accountAddress: string, pools: Pool[]): Promise<Position[]>
获取账户的头寸列表。
参数:
accountAddress: string- 账户地址pools: Pool[]- 池子列表
返回:
typescript
Promise<Position[]>getGlobalConfig(swapAddress: string, forceRefresh?: boolean): Promise<GlobalConfig>
获取全局配置。
参数:
swapAddress: string- Swap 合约地址forceRefresh?: boolean- 是否强制刷新(默认 true)
返回:
typescript
Promise<GlobalConfig>getCoinInfos(accountAddress: string, forceRefresh?: boolean): Promise<CoinInfo[]>
获取账户的代币信息列表。
参数:
accountAddress: string- 账户地址forceRefresh?: boolean- 是否强制刷新(默认 true)
返回:
typescript
Promise<CoinInfo[]>getCoinStores(accountAddress: string, forceRefresh?: boolean): Promise<CoinStore[]>
获取账户的代币存储列表。
参数:
accountAddress: string- 账户地址forceRefresh?: boolean- 是否强制刷新(默认 true)
返回:
typescript
Promise<CoinStore[]>getCoinStore(accountAddress: string, coinType: string): Promise<CoinStore | null>
获取指定代币的存储信息。
参数:
accountAddress: string- 账户地址coinType: string- 代币类型
返回:
typescript
Promise<CoinStore | null>getCollectionList(accountAddress: string): Promise<any[]>
获取账户的 NFT 集合列表。
参数:
accountAddress: string- 账户地址
返回:
typescript
Promise<any[]>fetchAccountResource<T>(accountAddress: string, resourceType: AptosResourceType): Promise<AptosResource<T> | null>
获取账户资源。
参数:
accountAddress: string- 账户地址resourceType: AptosResourceType- 资源类型
返回:
typescript
Promise<AptosResource<T> | null>fetchAccountResources<T>(accountAddress: string): Promise<AptosResource<T>[] | null>
获取账户所有资源。
参数:
accountAddress: string- 账户地址
返回:
typescript
Promise<AptosResource<T>[] | null>RewarderModule
奖励器模块,用于管理流动性挖矿奖励。
方法
listRewarderInfosFromClmmpool(poolAddress: string): Promise<any[]>
获取池子的所有奖励器信息。
参数:
poolAddress: string- 池子地址
返回:
typescript
Promise<any[]>emissionsEveryDay(poolAddress: string): Promise<any[] | null>
获取池子每日排放量。
参数:
poolAddress: string- 池子地址
返回:
typescript
Promise<Array<{
emissions: number
coin_address: string
}> | null>collectRewarderAmount(pool: Pool, positionName: string): Promise<any | null>
获取头寸的奖励金额。
参数:
pool: Pool- 池子信息positionName: string- 头寸名称
返回:
typescript
Promise<{
reward_amount_owed_0: string
reward_amount_owed_1: string
reward_amount_owed_2: string
} | null>updatePoolRewarder(poolAddress: string, currentTime: BN): Promise<Pool>
更新池子奖励器状态。
参数:
poolAddress: string- 池子地址currentTime: BN- 当前时间戳
返回:
typescript
Promise<Pool>posRewardersAmount(poolAddress: string, positionName: string, tickLower: TickData, tickUpper: TickData): Promise<any[]>
获取头寸的奖励金额(包含未领取和待领取)。
参数:
poolAddress: string- 池子地址positionName: string- 头寸名称tickLower: TickData- 下限 TicktickUpper: TickData- 上限 Tick
返回:
typescript
Promise<Array<{
amount_owed: BN
coin_address: string
}>>poolRewardersAmount(account: string, poolAddress: string, tickLowers: TickData[], tickUppers: TickData[]): Promise<BN[]>
获取账户在池子中的所有奖励金额。
参数:
account: string- 账户地址poolAddress: string- 池子地址tickLowers: TickData[]- 下限 Tick 列表tickUppers: TickData[]- 上限 Tick 列表
返回:
typescript
Promise<BN[]> // [reward0, reward1, reward2]collectPosRewarderTransactionPayload(params: CollectRewarderParams, bcsPackage?: boolean): TransactionPayload
创建收取单个奖励器奖励的交易负载。
参数:
typescript
type CollectRewarderParams = {
coinTypeA: AptosResourceType
coinTypeB: AptosResourceType
coinTypeC: AptosResourceType
pool_address: string
index: number
pos_index: number
}返回:
typescript
TxnBuilderTypes.TransactionPayloadEntryFunction | TxPayloadCallFunctioncollectPoolRewarderTransactionPayload(params: CollectPoolRewarderParams, bcsPackage?: boolean): TransactionPayload | undefined
创建收取池子奖励的交易负载(支持1-3个奖励器)。
参数:
typescript
type CollectPoolRewarderParams = {
coinTypeA: AptosResourceType
coinTypeB: AptosResourceType
coinTypeC: AptosResourceType
coinTypeD?: AptosResourceType
coinTypeE?: AptosResourceType
pool_address: string
pos_index: number
rewarder_nums: number // 1, 2, 或 3
}返回:
typescript
TxnBuilderTypes.TransactionPayloadEntryFunction | TxPayloadCallFunction | undefinedRouterModule
路由模块,用于计算代币交换路径和价格。
方法
setPoolMap(): Promise<void>
设置池子映射表。
返回:
typescript
Promise<void>getPoolAddress(base: string, quote: string): string | undefined
获取交易对的池子地址。
参数:
base: string- 基础代币符号quote: string- 报价代币符号
返回:
typescript
string | undefinedloadGraph(): Promise<RouterModule>
加载价格图。
返回:
typescript
Promise<RouterModule>addPriceProvider(provider: PriceProvider): RouterModule
添加价格提供者。
参数:
typescript
type PriceProvider = {
prices: Array<{
quote: string
base: string
price: Decimal
}>
}返回:
typescript
RouterModuleaddCoinProvider(provider: CoinProvider): RouterModule
添加代币提供者。
参数:
typescript
type CoinProvider = {
tokens: Array<{
address: string
symbol: string
decimals: number
}>
}返回:
typescript
RouterModuletokenInfo(key: string): CoinNode | undefined
获取代币信息。
参数:
key: string- 代币地址或符号
返回:
typescript
CoinNode | undefinedprice(base: string, quote: string): PriceResult | undefined
获取代币价格。
参数:
base: string- 基础代币地址或符号quote: string- 报价代币地址或符号
返回:
typescript
PriceResult | undefined
// PriceResult = {
// price: Decimal
// nodes: string[]
// pools: string[]
// }swap(base: string, quote: string, amount: Decimal): Decimal | undefined
计算交换后的代币数量。
参数:
base: string- 基础代币地址或符号quote: string- 报价代币地址或符号amount: Decimal- 交换数量
返回:
typescript
Decimal | undefinedlamportsSwap(base: string, quote: string, lamports: Decimal): Decimal | undefined
以最小单位计算交换。
参数:
base: string- 基础代币地址或符号quote: string- 报价代币地址或符号lamports: Decimal- 最小单位数量
返回:
typescript
Decimal | undefinedtoLamports(token: string, amount: Decimal): Decimal | undefined
将代币数量转换为最小单位。
参数:
token: string- 代币地址或符号amount: Decimal- 代币数量
返回:
typescript
Decimal | undefinedtoAmount(token: string, amount: Decimal): Decimal | undefined
将最小单位转换为代币数量。
参数:
token: string- 代币地址或符号amount: Decimal- 最小单位数量
返回:
typescript
Decimal | undefinedTokenModule
代币管理模块。
方法
addToListPayload(list: string, coinType: string, bcsPackage?: boolean): TransactionPayload
创建添加到代币列表的交易负载。
参数:
list: string- 列表地址coinType: string- 代币类型bcsPackage?: boolean- 是否使用 BCS 格式(默认 false)
返回:
typescript
TxnBuilderTypes.TransactionPayloadEntryFunction | TxPayloadCallFunctionaddApproverToRegistryPayload(approver: string, bcsPackage?: boolean): TransactionPayload
创建添加审批者到注册表的交易负载。
参数:
approver: string- 审批者地址bcsPackage?: boolean- 是否使用 BCS 格式(默认 false)
返回:
typescript
TxnBuilderTypes.TransactionPayloadEntryFunction | TxPayloadCallFunctionaddToRegistryByApprovePayload(params: TokenInfoParams, bcsPackage?: boolean): TransactionPayload
创建通过审批添加到注册表的交易负载。
参数:
typescript
type TokenInfoParams = {
name: string
symbol: string
coingecko_id: string
logo_url: string
project_url: string
is_update: boolean
coinType: AptosResourceType
}返回:
typescript
TxnBuilderTypes.TransactionPayloadEntryFunction | TxPayloadCallFunctiongetOwnerTokenList(simulationKey: SimulationKeys, listOwnerAddr: string, forceRefresh?: boolean): Promise<TokenInfo[]>
获取所有者代币列表。
参数:
simulationKey: SimulationKeys- 模拟密钥listOwnerAddr: string- 列表所有者地址forceRefresh?: boolean- 是否强制刷新(默认 false)
返回:
typescript
Promise<TokenInfo[]>getAllRegisteredTokenList(simulationKey: SimulationKeys, forceRefresh?: boolean): Promise<TokenInfo[]>
获取所有已注册代币列表。
参数:
simulationKey: SimulationKeys- 模拟密钥forceRefresh?: boolean- 是否强制刷新(默认 false)
返回:
typescript
Promise<TokenInfo[]>FetcherModule
数据获取模块,用于批量获取 Tick 数据。
方法
getTicks(params: GetTickParams): Promise<Tick[]>
获取指定范围的 Tick 数据。
参数:
typescript
type GetTickParams = {
accountAddress: string
accountPublicKey: string
pool: string
coinTypeA: string
coinTypeB: string
index: number
offset: number
limit: number
}返回:
typescript
Promise<Tick[]>fetchTicks(params: FetchTickParams): Promise<Tick[]>
获取池子的所有 Tick 数据。
参数:
typescript
type FetchTickParams = {
accountAddress: string
accountPublicKey: string
pool: string
coinTypeA: string
coinTypeB: string
}返回:
typescript
Promise<Tick[]>CfModules
Coinfair 模块集合。
CfPoolModule
getPoolInfo(poolAddress: string): Promise<CfPoolInfo>
获取池子信息(Coinfair 格式)。
参数:
poolAddress: string- 池子地址
返回:
typescript
Promise<CfPoolInfo>
// CfPoolInfo = {
// collection_name: string
// current_fifrt_price?: string
// current_sqrt_price?: string
// current_tick_index: CfBits
// fee_growth_global_a: string
// fee_growth_global_b: string
// fee_protocol_coin_a: string
// fee_protocol_coin_b: string
// fee_rate: string
// index: string
// initialized_ticks?: CfInitializedTick[]
// is_pause: boolean
// liquidity: string
// metadata_a: { inner: string }
// metadata_b: { inner: string }
// position_index: string
// rewarder_infos: any[]
// rewarder_last_updated_time: string
// tick_spacing: string
// uri: string
// }数学工具
TickMath
Tick 数学工具类。
静态方法
tickIndexToSqrtPriceX64(tickIndex: number): BN- Tick 索引转平方根价格sqrtPriceX64ToTickIndex(sqrtPriceX64: BN): number- 平方根价格转 Tick 索引sqrtPriceX64ToPrice(sqrtPriceX64: BN, decimalsA: number, decimalsB: number): Decimal- 平方根价格转实际价格
Position Math
getLiquidityFromCoinA(sqrtPriceX: BN, sqrtPriceY: BN, coinAmount: BN): BN
根据代币 A 数量计算流动性。
getLiquidityFromCoinB(sqrtPriceX: BN, sqrtPriceY: BN, coinAmount: BN): BN
根据代币 B 数量计算流动性。
Swap Math
computeSwap(a2b: boolean, byAmountIn: boolean, amount: BN, poolData: ClmmpoolData, ticks: TickData[]): SwapResult
计算交换结果。
React Hooks
SdkProvider
SDK 上下文提供者组件。
typescript
import { SdkProvider } from '@aptos-cf-swapv3/clmm-sdk'
<SdkProvider options={sdkOptions}>
{children}
</SdkProvider>useSdk
获取 SDK 实例的 Hook。
typescript
import { useSdk } from '@aptos-cf-swapv3/clmm-sdk'
const { sdk, sdkOptions, status, isInitialized } = useSdk()返回:
typescript
{
sdk: SDK | null
sdkOptions: SdkOptions
status: string
isInitialized: boolean
}useFeeTiers
获取费率等级列表的 Hook。
typescript
import { useFeeTiers } from '@aptos-cf-swapv3/clmm-sdk'
const { feeTiers, loading, error, refetch } = useFeeTiers()返回:
typescript
{
feeTiers: FeeTier[]
loading: boolean
error: Error | null
refetch: () => Promise<void>
}
// FeeTier = {
// tick_spacing: number
// fee_rate: number
// }工具函数
sortTokenAddresses(token0: string, token1: string): [string, string]
对代币地址进行字典序排序。
Decimal
Decimal.js 的默认导出,用于高精度数值计算。
类型定义
核心类型
typescript
// SDK 配置
type SdkOptions = {
rpcUrl: string
networkOptions: {
nativeToken: AptosResourceType
modules: {
LiquidswapDeployer: AptosResourceType
ClmmIntegrate: AptosResourceType
FetcherDeployer: AptosResourceType
TokenDeployer: AptosResourceType
IntegerMate: AptosResourceType
} & Record<string, AptosResourceType>
}
}
// 池子信息
type Pool = {
coinTypeA: AptosResourceType
coinTypeB: AptosResourceType
poolType: string
poolAddress: string
tickSpacing: string
coinAmountA: number
coinAmountB: number
current_sqrt_price: number
current_tick_index: number
fee_growth_global_a: number
fee_growth_global_b: number
fee_protocol_coin_a: number
fee_protocol_coin_b: number
fee_rate: number
liquidity: number
index: number
positionIndex: number
tick_indexes_handle: string
ticks_handle: string
positions_handle: string
collectionName: string
uri: string
is_pause: boolean
rewarder_infos: Rewarder[]
rewarder_last_updated_time: BN
}
// 头寸信息
type Position = {
name: string
pool: AptosResourceType
liquidity: string
tick_lower_index: string
tick_upper_index: string
fee_growth_inside_a: string
fee_owed_a: string
fee_growth_inside_b: string
fee_owed_b: string
reward_amount_owed_0: string
reward_amount_owed_1: string
reward_amount_owed_2: string
reward_growth_inside_0: string
reward_growth_inside_1: string
reward_growth_inside_2: string
index: number
}
// Tick 数据
type TickData = {
index: number
sqrtPrice: string
liquidityGross: string
liquidityNet: string
feeGrowthOutsideA: string
feeGrowthOutsideB: string
rewardersGrowthOutside: string[]
}示例
创建 SDK 实例
typescript
import { SDK } from '@aptos-cf-swapv3/clmm-sdk'
const sdk = new SDK({
rpcUrl: 'https://fullnode.testnet.aptoslabs.com/v1',
networkOptions: {
nativeToken: '0x1::aptos_coin::AptosCoin',
modules: {
LiquidswapDeployer: '0x...',
ClmmIntegrate: '0x...',
FetcherDeployer: '0x...',
TokenDeployer: '0x...',
IntegerMate: '0x...',
},
},
})获取池子信息
typescript
const pool = await sdk.Resources.getPool(poolAddress)
console.log(pool)创建交换交易
typescript
const payload = sdk.Swap.createSwapTransactionPayload({
pool_addr: poolAddress,
coinTypeA: '0x1::aptos_coin::AptosCoin',
coinTypeB: '0x...::usdc::USDC',
a_to_b: true,
by_amount_in: true,
amount: '1000000',
amount_limit: '950000',
partner: '',
})添加流动性
typescript
const payload = sdk.Position.createAddLiquidityTransactionPayload({
pool: poolAddress,
coinTypeA: '0x1::aptos_coin::AptosCoin',
coinTypeB: '0x...::usdc::USDC',
delta_liquidity: new BN('1000000'),
max_amount_a: '1000000',
max_amount_b: '2000000',
tick_lower: -100,
tick_upper: 100,
is_open: true,
index: 0,
})使用 React Hook
typescript
import { SdkProvider, useSdk, useFeeTiers } from '@aptos-cf-swapv3/clmm-sdk'
function App() {
return (
<SdkProvider>
<MyComponent />
</SdkProvider>
)
}
function MyComponent() {
const { sdk } = useSdk()
const { feeTiers, loading } = useFeeTiers()
// 使用 SDK...
}License
Apache-2.0