@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_U128 | 128 位无符号整数的最大值 |
MAX_U256 | 256位无符号整数的最大值 |
EVM_MIN_TICK | EVM 最小勾选 |
EVM_MAX_TICK | EVM 最大勾选 |
EVM_MIN_SQRT_RATIO | EVM的最低比例 |
EVM_MAX_SQRT_RATIO | EVM 最大 squrt 比率 |
EVM_MAX_TICK_SPACING | EVM 最大勾选间隔 |
STARKNET_MIN_TICK | Starknet 最小勾选 |
STARKNET_MAX_TICK | Starknet 的最大勾选 |
STARKNET_MIN_SQRT_RATIO | Starknet 的最低比例 |
STARKNET_MAX_SQRT_RATIO | Starknet 的最大 squrt 比率 |
STARKNET_MAX_TICK_SPACING | Starknet 的最大勾选间隔 |
勾选 / 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如果指定的金额是符号 1fee- 收费占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编号 :decodeEvmAuctionConfigencodeEvmTwammOrderConfig编号 :decodeEvmTwammOrderConfigcalculateEvmTwammMaxSaleRatederiveEvmAuctionTokenId, (中文(简体) ),deriveEvmTwammOrderTokenId,以及deriveEvmVeTokenIdderiveEvmIndexedSalt
运行功能接受呼叫器提供的 Keccak-256 执行 sDK的依赖性是无的,同时在各地使用相同的ABI预想.
发展
这个项目使用 阿宝。 。 。 .
# Install dependencies
bun install
# Run tests
bun test
# Build
bun run build