@ekubo/sdk

中文文档
0.0.10发布于 2026/08/04MITTypeScriptES Module零依赖近 30 天下载 2.2万

Ekubo 共享数学和协议编码工具

中文使用文档
文档目录16 节
  1. 安装
  2. 使用量
  3. API 参考
  4. 类型
  5. 常数
  6. 勾选 / Sqrt 比率
  7. 笔数三角洲
  8. 价格 / Sqrt 比率
  9. 交换
  10. 流动性
  11. 图瓦卢
  12. 公用事业
  13. EVM v3 池键
  14. EVM 协议密钥和带盐的ID
  15. 发展
  16. 许可证

@ekubo/ sdk

共享类型脚本数学和协议编码工具 Ekubo 协议支持EVM和史塔克网.

安装

npm install @ekubo/sdk
# or
bun add @ekubo/sdk

使用量

所有功能都是纯洁和无依赖的. 精确协议整数使用本地 bigint 数值.

import {
  toSqrtRatio,
  computeStep,
  maxLiquidityForTokenAmounts,
} from "@ekubo/sdk";

// Convert a tick to a sqrt ratio for Starknet
const sqrtRatio = toSqrtRatio(0, "starknet");

// Compute a single swap step
const result = computeStep({
  sqrtRatio,
  liquidity: 1000000n,
  sqrtRatioLimit: toSqrtRatio(100, "starknet"),
  amount: 500n,
  isToken1: false,
  fee: 0n,
});
// result: { consumedAmount, calculatedAmount, sqrtRatioNext, feeAmount }

// Compute the maximum liquidity for a position given token amounts
const liquidity = maxLiquidityForTokenAmounts({
  sqrtPrice: sqrtRatio,
  sqrtPriceLower: toSqrtRatio(-100, "starknet"),
  sqrtPriceUpper: toSqrtRatio(100, "starknet"),
  amountBase: 1000n,
  amountQuote: 1000n,
});

API 参考

类型

Chain

type Chain = "evm" | "starknet";

选择特定链式勾选和 sqrt 比率边界 .


常数

名称说明
MAX_U128128 位无符号整数的最大值
MAX_U256256位无符号整数的最大值
EVM_MIN_TICKEVM 最小勾选
EVM_MAX_TICKEVM 最大勾选
EVM_MIN_SQRT_RATIOEVM的最低比例
EVM_MAX_SQRT_RATIOEVM 最大 squrt 比率
EVM_MAX_TICK_SPACINGEVM 最大勾选间隔
STARKNET_MIN_TICKStarknet 最小勾选
STARKNET_MAX_TICKStarknet 的最大勾选
STARKNET_MIN_SQRT_RATIOStarknet 的最低比例
STARKNET_MAX_SQRT_RATIOStarknet 的最大 squrt 比率
STARKNET_MAX_TICK_SPACINGStarknet 的最大勾选间隔

勾选 / Sqrt 比率

toSqrtRatio(tick: number, chain: Chain): bigint

将勾选索引转换为给定链的固定点 sqrt 比率.

const sqrtRatio = toSqrtRatio(1000, "evm");

floatSqrtRatioToFixed(sqrtRatioFloat: bigint): bigint

将紧凑的96位浮点比例(存储于Starknet主网的链上)转换为数学函数中使用的固定点表示.

fixedSqrtRatioToFloat(sqrtRatio: bigint): bigint

将定点 sqrt 比率转换为 Starknet 主网所期望的紧凑浮点格式 .


笔数三角洲

amount0Delta(sqrtRatioA, sqrtRatioB, liquidity, roundUp): bigint

计算给定流动性在两个 sqrt 比率之间的值(基准值).

amount1Delta(sqrtRatioA, sqrtRatioB, liquidity, roundUp): bigint

计算给定流动性的两个 sqrt 比率之间的令牌1 (引用令牌)的金额.


价格 / Sqrt 比率

nextSqrtRatioFromAmount0(sqrtRatio, liquidity, amount0): bigint | null

计算交易给定的 order0 后下一个 sqrt 比率。 回返 null 如果结果超出范围.

nextSqrtRatioFromAmount1(sqrtRatio, liquidity, amount1): bigint | null

计算交易给定的值 1 后的下个 sqrt 比率 。 回返 null 如果结果超出范围.


交换

computeStep({ sqrtRatio, liquidity, sqrtRatioLimit, amount, isToken1, fee }): SwapResult

计算在勾选范围内的一阶互换.

  • sqrtRatio - 现行比例
  • liquidity - 流动资金
  • sqrtRatioLimit - 互换停止的积分比(价格限制)
  • amount - 签名值为互换;负值表示准确输出
  • isToken1 – 说吧 – true 如果指定的金额是符号 1
  • fee - 收费占 2^128

回返情况:

{
  consumedAmount: bigint; // amount of the specified token consumed
  calculatedAmount: bigint; // amount of the other token
  sqrtRatioNext: bigint; // sqrt ratio after the step
  feeAmount: bigint; // fee collected
}

流动性

maxLiquidityForBaseToken({ sqrtPriceLower, sqrtPriceUpper, amount }): bigint

返回在价格范围内从一定数量的基准令牌(token0)中可实现的最大流动性.

maxLiquidityForQuoteToken({ sqrtPriceLower, sqrtPriceUpper, amount }): bigint

返回在价格范围内从一定数量的引号(token1)中可实现的最大流动性.

maxLiquidityForTokenAmounts({ sqrtPrice, sqrtPriceLower, sqrtPriceUpper, amountBase, amountQuote }): bigint

返回可实现的最大流动性,既考虑到象征性数额,又考虑到当前价格.

maxLiquidityForSpecifiedAmount({ sqrtPrice, sqrtPriceLower, sqrtPriceUpper, amount }): bigint

返回指定基数或引数的最大流动性.

// Specify base amount
const liq = maxLiquidityForSpecifiedAmount({
  sqrtPrice,
  sqrtPriceLower,
  sqrtPriceUpper,
  amount: { base: 1000n },
});

// Specify quote amount
const liq2 = maxLiquidityForSpecifiedAmount({
  sqrtPrice,
  sqrtPriceLower,
  sqrtPriceUpper,
  amount: { quote: 1000n },
});

amountsFromSpecifiedAmount({ sqrtPrice, sqrtPriceLower, sqrtPriceUpper, amount }): { base, quote, maxLiquidity }

鉴于一个基数或引号金额,返回该位置的标值和最大流动性.

liquidityToAmountBase({ sqrtPriceLower, sqrtPriceUpper, liquidity }): bigint

将流动性值转换为价格范围所需的基值值.

liquidityToAmountQuote({ sqrtPriceLower, sqrtPriceUpper, liquidity }): bigint

将流动性值转换为价格范围所需报价值.


图瓦卢

calculateNextSqrtRatio(sqrtRatio, liquidity, token0SaleRate, token1SaleRate, timeElapsed, fee): bigint

计算特定时间过后TWAMM(时间加权平均市场制造者)的下个 squrt比率.


公用事业

msb(x: bigint): number

返回最显著位的位置 x。 。 。 .


EVM v3 池键

encodeEvmConcentratedPoolConfig 财务报告和审定财务报表 encodeEvmStableswapPoolConfig 收拾东西 Core使用的32字节v3配置. decodeEvmPoolConfig 返回扩展名, 准确 bigint Q64 收费,池式歧视,以及类型特定参数.

encodeEvmPoolKey 返回由 Core 编码的 96 字节ABI 编码. deriveEvmPoolId 接受消费者提供的Keccak-256功能,该功能 保持无 SDK 依赖性 :

import { deriveEvmPoolId, encodeEvmConcentratedPoolConfig } from "@ekubo/sdk";
import { keccak256 } from "viem";

const config = encodeEvmConcentratedPoolConfig({
  fee: 2n ** 64n / 10_000n,
  tickSpacing: 200,
  extension: "0x0000000000000000000000000000000000000000",
});
const poolId = deriveEvmPoolId({ token0, token1, config }, keccak256);

遗产位置 阅读器可以使用 encodeEvmV2ConcentratedPoolConfig 财务报告和审定财务报表 encodeEvmV2StableswapPoolConfig; v2 配置故意省略 v3 池 类型歧视者.

EVM 协议密钥和带盐的ID

SDK还拥有应用程序共享的确切协议编码和 交易编制者 :

  • encodeEvmAuctionConfig 编号 : decodeEvmAuctionConfig
  • encodeEvmTwammOrderConfig 编号 : decodeEvmTwammOrderConfig
  • calculateEvmTwammMaxSaleRate
  • deriveEvmAuctionTokenId, (中文(简体) ), deriveEvmTwammOrderTokenId,以及 deriveEvmVeTokenId
  • deriveEvmIndexedSalt

运行功能接受呼叫器提供的 Keccak-256 执行 sDK的依赖性是无的,同时在各地使用相同的ABI预想.


发展

这个项目使用 阿宝。 。 。 .

# Install dependencies
bun install

# Run tests
bun test

# Build
bun run build

许可证

麻省理工学院

版本与发布记录

@ekubo/sdk 共发布 11 个版本,首次发布于 2026/02/13;过去 12 个月发布了 5 个版本。

版本发布日期距今
0.0.10latest2026/08/043 个月前
0.0.10-alpha.0next2026/08/033 个月前
0.0.9-alpha.02026/08/033 个月前
0.0.8-alpha.12026/07/303 个月前
0.0.8-alpha.02026/02/138 个月前
0.0.62024/08/232 年前

关于 @ekubo/sdk 的常见问题

@ekubo/sdk 是什么?

Ekubo 共享数学和协议编码工具

如何安装 @ekubo/sdk?

在项目目录运行 npm install @ekubo/sdk,或使用 pnpm add / yarn add / bun add。

@ekubo/sdk 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@ekubo/sdk 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@ekubo/sdk 可以商用吗?

@ekubo/sdk 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@ekubo/sdk 的下载量有多少?

根据 npm 官方下载统计,@ekubo/sdk 在 2026/10/13 – 2026/11/11 这 30 天内被下载 21,991 次,日均约 733 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@ekubo/sdk 还在维护吗?

最新版本 0.0.10 发布于 2026/08/04(3 个月前);至今共发布 11 个版本,其中过去 12 个月发布了 5 个;首次发布于 2026/02/13。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。