@skate-org/amm-core-v2 2.0.0-beta.10 → 2.0.0-beta.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/README.md +1 -1
- package/dist/deployment/kernel.d.ts.map +1 -1
- package/dist/index.cjs +75 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +62 -4
- package/dist/index.js.map +1 -1
- package/dist/math/index.d.ts +1 -0
- package/dist/math/index.d.ts.map +1 -1
- package/dist/math/kernel.d.ts +16 -0
- package/dist/math/kernel.d.ts.map +1 -0
- package/dist/math/liquidityMath.d.ts +10 -5
- package/dist/math/liquidityMath.d.ts.map +1 -1
- package/dist/math/sqrtPriceMath.d.ts +2 -0
- package/dist/math/sqrtPriceMath.d.ts.map +1 -1
- package/dist/math/tickMath.d.ts +15 -0
- package/dist/math/tickMath.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/types/chain.ts","../src/types/vm.ts","../src/types/mode.ts","../src/types/action.ts","../src/deployment/kernel.ts","../src/deployment/periphery.ts","../src/deployment/svm.ts","../src/deployment/sui.ts","../src/deployment/aggregated/dev.ts","../src/deployment/aggregated/staging.ts","../src/deployment/aggregated/production.ts","../src/deployment/aggregated/retrieval.ts","../src/adapter/skate.ts","../src/utils/bs58.ts","../src/errors.ts","../src/math/tickMath.ts","../src/math/fullMath.ts","../src/math/sqrtPriceMath.ts","../src/math/liquidityMath.ts"],"sourcesContent":["export * from \"./types\";\nexport * from \"./deployment\";\nexport * from \"./adapter\";\nexport * from \"./errors\";\nexport * from \"./math\";\n","export enum CHAIN {\n SKATE = 5050,\n\n SOLANA = 901,\n ECLIPSE = 902,\n\n SUI = 1001,\n\n BASE = 8453,\n ARBITRUM = 42161,\n BSC = 56,\n MANTLE = 5000,\n OPTIMISM = 10,\n ETHEREUM = 1,\n HYPERLIQUID = 999,\n PLUME = 98866,\n ZG = 16661,\n MONAD = 143,\n MEGAETH = 4326,\n TEMPO = 4217,\n}\n\nexport const CHAIN_MAP: Record<string, number> = Object.entries(CHAIN)\n .filter(([, value]) => typeof value === \"number\")\n .reduce(\n (map, [key, value]) => {\n map[key] = value as number;\n return map;\n },\n {} as Record<string, number>,\n );\n","import { CHAIN } from \"./chain\";\n\nexport enum VM {\n EVM = 1,\n /** Reserved — no TVM chain in scope for v2; kept for forward-compatibility with v1 numbering. */\n TVM = 2,\n SVM = 3,\n SuiVM = 4,\n}\n\nexport enum BLOCK_EXPLORER {\n SKATE = \"https://scan.skatechain.org\",\n ECLIPSE = \"https://eclipsescan.xyz\",\n SOLANA = \"https://solscan.io\",\n SUI = \"https://suiscan.xyz/mainnet\",\n BASE = \"https://basescan.org\",\n ARBITRUM = \"https://arbiscan.io\",\n MANTLE = \"https://mantlescan.xyz\",\n OPTIMISM = \"https://optimistic.etherscan.io\",\n ETHEREUM = \"https://etherscan.io\",\n BSC = \"https://bscscan.com\",\n HYPERLIQUID = \"https://hyperscan.com\",\n PLUME = \"https://explorer.plume.org\",\n ZG = \"https://chainscan.0g.ai\",\n MONAD = \"https://monadvision.com\",\n MEGAETH = \"https://megaeth.blockscout.com\",\n TEMPO = \"https://explore.tempo.xyz\",\n}\n\nexport function getBlockExplorer(chain: CHAIN): BLOCK_EXPLORER | null {\n switch (chain) {\n case CHAIN.SKATE: return BLOCK_EXPLORER.SKATE;\n case CHAIN.SOLANA: return BLOCK_EXPLORER.SOLANA;\n case CHAIN.ECLIPSE: return BLOCK_EXPLORER.ECLIPSE;\n case CHAIN.SUI: return BLOCK_EXPLORER.SUI;\n case CHAIN.BASE: return BLOCK_EXPLORER.BASE;\n case CHAIN.ARBITRUM: return BLOCK_EXPLORER.ARBITRUM;\n case CHAIN.MANTLE: return BLOCK_EXPLORER.MANTLE;\n case CHAIN.OPTIMISM: return BLOCK_EXPLORER.OPTIMISM;\n case CHAIN.ETHEREUM: return BLOCK_EXPLORER.ETHEREUM;\n case CHAIN.BSC: return BLOCK_EXPLORER.BSC;\n case CHAIN.HYPERLIQUID: return BLOCK_EXPLORER.HYPERLIQUID;\n case CHAIN.PLUME: return BLOCK_EXPLORER.PLUME;\n case CHAIN.ZG: return BLOCK_EXPLORER.ZG;\n case CHAIN.MONAD: return BLOCK_EXPLORER.MONAD;\n case CHAIN.MEGAETH: return BLOCK_EXPLORER.MEGAETH;\n case CHAIN.TEMPO: return BLOCK_EXPLORER.TEMPO;\n default: return null;\n }\n}\n\nexport function vmTypeFromChain(chainId: CHAIN): VM | null {\n switch (chainId) {\n case CHAIN.SKATE:\n case CHAIN.BASE:\n case CHAIN.ARBITRUM:\n case CHAIN.MANTLE:\n case CHAIN.OPTIMISM:\n case CHAIN.ETHEREUM:\n case CHAIN.BSC:\n case CHAIN.HYPERLIQUID:\n case CHAIN.PLUME:\n case CHAIN.ZG:\n case CHAIN.MONAD:\n case CHAIN.MEGAETH:\n case CHAIN.TEMPO:\n return VM.EVM;\n\n case CHAIN.SOLANA:\n case CHAIN.ECLIPSE:\n return VM.SVM;\n\n case CHAIN.SUI:\n return VM.SuiVM;\n\n default:\n return null;\n }\n}\n","import type { CHAIN } from \"./chain\";\n\nexport type EnvMode = \"STAGING\" | \"PRODUCTION\" | \"DEV\";\n\nexport interface DevModeConfig {\n /** Full base URL including scheme, e.g. \"http://localhost:3000/amm-action-v2\". */\n apiEndpoint: string;\n /**\n * Optional per-chain RPC URL overrides. When a `CHAIN` key is present here,\n * `@skate-org/amm-evm-v2`'s `getKernelPublicClient` / `getSourcePublicClient`\n * factories prefer the override over the built-in `DEFAULT_RPC`. Useful for\n * private MegaETH RPCs (until Skate's DEV URL is public), localnet, or\n * rate-limited public endpoints.\n *\n * A caller-supplied `transport` argument still takes precedence over this.\n */\n rpcEndpoints?: Partial<Record<CHAIN, string>>;\n}\n\nexport type EnvModeWithConfig = EnvMode | { mode: \"DEV\"; config: DevModeConfig };\n\nexport function normalizeMode(mode: EnvModeWithConfig): { mode: EnvMode; config?: DevModeConfig } {\n if (typeof mode === \"string\") return { mode };\n return { mode: mode.mode, config: mode.config };\n}\n","// v2 ActionStatus (per amm-action-v2-service).\nexport type ActionStatus =\n | \"RECEIVED\"\n | \"PROCESSED\"\n | \"EXECUTED\"\n | \"WITHDRAWN\"\n | \"KERNEL_SETTLE_FAILED\"\n | \"GATEWAY_SETTLE_FAILED\"\n | \"CORRUPTED\";\n\nexport enum TaskPhase {\n INDEX_ACTION = \"INDEX_ACTION\",\n SETTLE_KERNEL = \"SETTLE_KERNEL\",\n SUBMIT_EXECUTION = \"SUBMIT_EXECUTION\",\n SETTLE_GATEWAY = \"SETTLE_GATEWAY\",\n SETTLE_REFUND = \"SETTLE_REFUND\",\n}\n\nexport type ActionType = \"mint\" | \"burn\" | \"swap\" | \"increaseLiquidity\" | \"decreaseLiquidity\";\n\nexport type TaskFunctionMeta =\n | SettleMintMeta\n | SettleBurnMeta\n | SettleSwapMeta\n | SettleMeta\n | TransferToMeta;\n\n/**\n * Kernel-side task metadata. `decimal0`/`decimal1` are **always 18** — the kernel\n * normalizes amounts to 18 decimals regardless of source-token decimals, so\n * `amount*` strings are expressed as `10^18`-denominated raw amounts here.\n * Do not widen these literal types without a kernel-protocol change.\n */\nexport type SettleMintMeta = {\n functionName: \"settleMint\";\n args: {\n user: `0x${string}`;\n amount0ToSettle: string;\n amount1ToSettle: string;\n amount0ToTransfer: string;\n amount1ToTransfer: string;\n decimal0: 18;\n decimal1: 18;\n };\n};\n\nexport type SettleBurnMeta = {\n functionName: \"settleBurn\";\n args: {\n user: `0x${string}`;\n amount0: string;\n amount1: string;\n decimal0: 18;\n decimal1: 18;\n };\n};\n\nexport type SettleSwapMeta = {\n functionName: \"settleSwap\";\n args: {\n recipient: `0x${string}`;\n user: `0x${string}`;\n amount0ToSettle: string;\n amount1ToSettle: string;\n amount0ToTransfer: string;\n amount1ToTransfer: string;\n decimal0: 18;\n decimal1: 18;\n };\n};\n\nexport type SettleMeta = {\n functionName: \"settle\";\n args: {\n user: `0x${string}`;\n amount0: string;\n amount1: string;\n decimal0: 18;\n decimal1: 18;\n };\n};\n\nexport type TransferToMeta = {\n functionName: \"transferTo\";\n args: {\n user: `0x${string}`;\n amount0: string;\n amount1: string;\n decimal0: 18;\n decimal1: 18;\n };\n};\n","import { EnvMode } from \"../types\";\nimport { CHAIN } from \"../types\";\n\n// =====================================================================\n// DEV — v2 service deployed on MegaETH (kernel) + Arbitrum (periphery).\n// STAGING + PRODUCTION currently alias DEV (same kernel deploy) until\n// the envs actually diverge.\n// =====================================================================\n//\n// Raw addresses are module-private; consumers should call the\n// `KernelManagerAddress(mode)` / `KernelEventEmitterAddress(mode)`\n// accessors below, or use `POOL_INFO_Dev` for pool addresses. The one\n// exception is `KERNEL_POOL_USDC_USDT_Dev`, which is exported so the\n// integration smokes can cross-check it against the live API response.\nconst KERNEL_EXECUTOR_REGISTRY_Dev = \"0x45F5e211B2CAeA14d5E5cB028923F8A5D7b1ab5d\";\nconst KERNEL_MESSAGE_BOX_Dev = \"0xe3aC86bF5D9Ab5d9705b5e9187437e978397528B\";\nconst KERNEL_ACCOUNT_REGISTRY_Dev = \"0xeD9e139CAcb439744277be5D7fbEe5aAF4DB8fA2\";\nconst KERNEL_MANAGER_Dev = \"0x17B7207837e8884f7f687f1f4057751BDAf70a01\";\nconst KERNEL_EVENT_EMITTER_Dev = \"0x8989b3ecb65f250ab7A0DC03589B0Cc8b8b04b81\";\nconst KERNEL_POOL_IMPL_Dev = \"0x9BffA944Df7914621A7Cc638C9104C106c5C6846\";\nexport const KERNEL_POOL_USDC_USDT_Dev = \"0x2c23334eE3b030e6bacEDEDf7C511eEA08Cf7E7e\";\n\n// Touch the now-private constants to keep them in scope for future use\n// (event-emitter, pool-impl wiring) without `--noUnusedLocals` warnings.\nvoid KERNEL_EXECUTOR_REGISTRY_Dev;\nvoid KERNEL_MESSAGE_BOX_Dev;\nvoid KERNEL_ACCOUNT_REGISTRY_Dev;\nvoid KERNEL_POOL_IMPL_Dev;\n\n// =====================================================================\n// Kernel chain per environment.\n//\n// SDK v2 currently targets MegaETH for the kernel side across all modes.\n// STAGING / PRODUCTION alias the DEV deploy until they fork off; changing\n// a future env to a different kernel chain is a one-line edit here, and\n// the address accessors above will need their own per-mode branches when\n// STAGING / PRODUCTION diverge from DEV.\n// =====================================================================\nexport const KERNEL_CHAIN_BY_MODE: Readonly<Record<EnvMode, CHAIN>> = {\n DEV: CHAIN.MEGAETH,\n STAGING: CHAIN.MEGAETH,\n PRODUCTION: CHAIN.MEGAETH,\n};\n\n/** Return the kernel CHAIN id for a given env mode. */\nexport function KernelChain(mode: EnvMode): CHAIN {\n return KERNEL_CHAIN_BY_MODE[mode];\n}\n\n/** Address of the Skate Kernel Manager for the given env mode. All three\n * modes alias the same DEV deploy until STAGING / PRODUCTION fork off. */\nexport function KernelManagerAddress(_mode: EnvMode): `0x${string}` {\n return KERNEL_MANAGER_Dev as `0x${string}`;\n}\n\n/** Address of the Skate Kernel Event Emitter for the given env mode.\n * Same aliasing posture as `KernelManagerAddress`. */\nexport function KernelEventEmitterAddress(_mode: EnvMode): `0x${string}` {\n return KERNEL_EVENT_EMITTER_Dev as `0x${string}`;\n}\n","import { CHAIN, EnvMode } from \"../types\";\n\n// DEV periphery (amm-action-v2). Chain-keyed — each source chain hosts its own\n// ActionBox / Gateway / PeripheryManager / pool-emitter stack. Arbitrum is the\n// first DEV source chain to be deployed.\n\nexport interface PeripheryDeployment {\n multicall: `0x${string}`;\n executorRegistry: `0x${string}`;\n actionBox: `0x${string}`;\n skateGateway: `0x${string}`;\n peripheryManager: `0x${string}`;\n peripheryManagerImpl: `0x${string}`;\n eventEmitter: `0x${string}`;\n peripheryPoolImpl: `0x${string}`;\n}\n\nexport const PERIPHERY_DEV: Partial<Record<CHAIN, PeripheryDeployment>> = {\n [CHAIN.ARBITRUM]: {\n multicall: \"0x3dCD7A136F0A49f3EFcC5E215793Fa1ce5c400Bf\",\n executorRegistry: \"0xE84a60d66543ef8E2E162f66a7669692b01Ee145\",\n actionBox: \"0x4309d3aE98c8A751fAc34C91536Ee860d9B8DcE1\",\n skateGateway: \"0x63Ca920425f683138B9407171b51b8172421Ba50\",\n peripheryManager: \"0x1120d6B34c4EB0CD49200aE9fBD2e4fb002d949f\",\n peripheryManagerImpl: \"0x26F01bc73cB7422DB67BBDfAcd9C987Ae66bF3D3\",\n eventEmitter: \"0xB301150AFA170816Ae18EC21e2A830Ddc7bBA1De\",\n peripheryPoolImpl: \"0x803ed7fa8934D4fe51A276cA02506b585cdb3eb4\",\n },\n};\n\n/** STAGING + PRODUCTION currently alias DEV — the v2 EVM periphery deploy\n * lives on Arbitrum at the addresses above, and all three envs point at it\n * until staging/prod ever fork off. Swap the right side for a literal map\n * when that day comes. */\nexport const PERIPHERY_STAGING = PERIPHERY_DEV;\nexport const PERIPHERY_PRODUCTION = PERIPHERY_DEV;\n\n/**\n * Look up the periphery deployment record for a given chain in a given env.\n * Returns `null` when the chain has no entry for the chosen env.\n */\nexport function PeripheryDeploymentFor(\n chain: CHAIN,\n mode: EnvMode,\n): PeripheryDeployment | null {\n switch (mode) {\n case \"DEV\":\n return PERIPHERY_DEV[chain] ?? null;\n case \"STAGING\":\n return PERIPHERY_STAGING[chain] ?? null;\n case \"PRODUCTION\":\n return PERIPHERY_PRODUCTION[chain] ?? null;\n }\n}\n\nexport function PeripheryManagerAddress(\n chain: CHAIN,\n mode: EnvMode,\n): `0x${string}` | null {\n return PeripheryDeploymentFor(chain, mode)?.peripheryManager ?? null;\n}\n\nexport function PeripheryEventEmitterAddress(\n chain: CHAIN,\n mode: EnvMode,\n): `0x${string}` | null {\n return PeripheryDeploymentFor(chain, mode)?.eventEmitter ?? null;\n}\n\nexport function SkateGatewayAddress(\n chain: CHAIN,\n mode: EnvMode,\n): `0x${string}` | null {\n return PeripheryDeploymentFor(chain, mode)?.skateGateway ?? null;\n}\n\nexport function ActionBoxAddress(\n chain: CHAIN,\n mode: EnvMode,\n): `0x${string}` | null {\n return PeripheryDeploymentFor(chain, mode)?.actionBox ?? null;\n}\n","import { CHAIN, EnvMode } from \"../types\";\nimport type { SvmChain } from \"../types/chain-vm\";\nimport type { SvmPeripheryInfo } from \"./aggregated/_type_\";\n\n/** Deploy-wide SVM pubkeys. Per-pool addresses live in `SVM_POOLS_<mode>`\n * below; this struct holds the deploy-wide pieces shared across pools. */\nexport interface SvmDeployment {\n peripheryPoolProgramId: string;\n actionBoxProgramId: string;\n /** `action_box state_v3` PDA. One per deploy. */\n actionBoxStateV3: string;\n /** `task_ledger` PDA (replay bitmap). */\n taskLedger: string;\n /** Manager pubkey — also serves as gateway and task-ledger admin. */\n manager: string;\n}\n\nexport const SVM_DEPLOYMENT_DEV: Partial<Record<SvmChain, SvmDeployment>> = {\n [CHAIN.SOLANA]: {\n peripheryPoolProgramId: \"SPPZB76TV1oSusXvGYQDK7KZGyLBmWbr8CuzNcjb98y\",\n actionBoxProgramId: \"SABZ2zgj8G8jD7V9s6hSMkT1fvNyMavssNigmmTMqa2\",\n actionBoxStateV3: \"G1qLtJDbkY4JBtD7sdjqGN8GJ38QRDbzp2fWEYY4apAh\",\n taskLedger: \"SkTLHEfy9X3PeMVa2dEYysg9Ccq8KtNG7zYNTAaB1NV\",\n manager: \"SGMSTk5t2gmiHKQjtb9XV6qviasgD5UKTsVMHLGCSZA\",\n },\n};\n\n/** STAGING + PRODUCTION currently alias DEV — the v2 SVM deploy lives on\n * Solana mainnet at the addresses above, and all three envs point at it\n * until staging/prod ever fork off into separate deploys. Swap the right\n * side of these `=` lines for literal objects when that day comes. */\nexport const SVM_DEPLOYMENT_STAGING = SVM_DEPLOYMENT_DEV;\nexport const SVM_DEPLOYMENT_PRODUCTION = SVM_DEPLOYMENT_DEV;\n\n/** Returns `null` for an unregistered SvmChain in the chosen mode. */\nexport function SvmDeploymentFor(\n chain: SvmChain,\n mode: EnvMode,\n): SvmDeployment | null {\n switch (mode) {\n case \"DEV\":\n return SVM_DEPLOYMENT_DEV[chain] ?? null;\n case \"STAGING\":\n return SVM_DEPLOYMENT_STAGING[chain] ?? null;\n case \"PRODUCTION\":\n return SVM_DEPLOYMENT_PRODUCTION[chain] ?? null;\n }\n}\n\n/** SPL Token program (classic). Token-2022 mints use a different id. */\nconst TOKEN_PROGRAM_ID = \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\";\n\n/** Per-pool SVM addresses, keyed by `[poolKey][SvmChain]`. `poolKey` matches\n * the key used by `POOL_INFO_Dev` (e.g. \"USDC_USDT\").\n * - Adding a new SVM chain entry to an existing pool (e.g. Eclipse under\n * USDC_USDT) requires editing this map only — `aggregated/dev.ts` picks\n * it up automatically via the existing spread.\n * - Adding a brand-new pool requires a new key here AND a new pool object\n * in `aggregated/dev.ts` with `...SVM_POOLS_DEV.<key>` in its\n * `peripheryInfo`. */\nexport const SVM_POOLS_DEV = {\n USDC_USDT: {\n [CHAIN.SOLANA]: {\n peripheryPool: \"G2j8vLu3ryzUqPYpknpBcBLDcFiiRmXtB7z9Dpg9dVxe\",\n poolAuthority: \"2Mvbo1TrsVeqyjQwNcdDDGjFNbwMk4tV8oD2TN2fV4Nw\",\n dust: \"4m1AdUZvYJUSMTYpFH8df1JrgHTqUeKA3Xf7DapB4VcX\",\n poolToken0Vault: \"BihGfVYmaT4KpiHiBLwH2ad9Q2ybYVHS2Bd3hQtzg486\",\n poolToken1Vault: \"3DW4k4ims6dFB2cXBk5m1uAfh1zowuj9CzBbF4jm1FRh\",\n manager: \"SGMSTk5t2gmiHKQjtb9XV6qviasgD5UKTsVMHLGCSZA\",\n tokenProgramId0: TOKEN_PROGRAM_ID,\n tokenProgramId1: TOKEN_PROGRAM_ID,\n token0: {\n address: \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\n symbol: \"USDC\",\n isNative: false,\n decimal: 6,\n chainId: CHAIN.SOLANA,\n },\n token1: {\n address: \"Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB\",\n symbol: \"USDT\",\n isNative: false,\n decimal: 6,\n chainId: CHAIN.SOLANA,\n },\n chain: \"SOLANA\",\n },\n },\n} satisfies Record<string, Partial<Record<SvmChain, SvmPeripheryInfo>>>;\n\n/** STAGING + PRODUCTION pool maps alias DEV for the same reason as\n * SVM_DEPLOYMENT_*. Replace with literal objects when an env diverges. */\nexport const SVM_POOLS_STAGING = SVM_POOLS_DEV;\nexport const SVM_POOLS_PRODUCTION = SVM_POOLS_DEV;\n","import { CHAIN, EnvMode } from \"../types\";\nimport type { SuiChain } from \"../types/chain-vm\";\nimport type { SuiPeripheryInfo } from \"./aggregated/_type_\";\n\n/** Deploy-wide Sui addresses. Per-pool object ids live in `SUI_POOLS_<mode>`\n * below; this struct holds the deploy-wide pieces shared across pools. */\nexport interface SuiDeployment {\n /** Sui package id that owns the periphery module. */\n peripheryPackage: string;\n}\n\nexport const SUI_DEPLOYMENT_DEV: Partial<Record<SuiChain, SuiDeployment>> = {\n [CHAIN.SUI]: {\n peripheryPackage:\n \"0x96e1d3897efee30bede047a14d186a952350d4759d3175f76ff6ac2c4a121901\",\n },\n};\n\n/** STAGING + PRODUCTION currently alias DEV — the v2 Sui deploy lives on\n * Sui mainnet at the package above, and all three envs point at it until\n * staging/prod ever fork off into separate deploys. */\nexport const SUI_DEPLOYMENT_STAGING = SUI_DEPLOYMENT_DEV;\nexport const SUI_DEPLOYMENT_PRODUCTION = SUI_DEPLOYMENT_DEV;\n\n/** Returns `null` for an unregistered SuiChain in the chosen mode. */\nexport function SuiDeploymentFor(\n chain: SuiChain,\n mode: EnvMode,\n): SuiDeployment | null {\n switch (mode) {\n case \"DEV\":\n return SUI_DEPLOYMENT_DEV[chain] ?? null;\n case \"STAGING\":\n return SUI_DEPLOYMENT_STAGING[chain] ?? null;\n case \"PRODUCTION\":\n return SUI_DEPLOYMENT_PRODUCTION[chain] ?? null;\n }\n}\n\n/** Per-pool Sui addresses, keyed by `[poolKey][SuiChain]`. `poolKey` matches\n * the key used by `POOL_INFO_Dev` (e.g. \"USDC_USDT\"). Mirrors `SVM_POOLS_DEV`.\n * - Adding a brand-new pool requires a new key here AND a new pool object\n * in `aggregated/dev.ts` with `...SUI_POOLS_DEV.<key>` in its\n * `peripheryInfo`. */\nexport const SUI_POOLS_DEV = {\n USDC_USDT: {\n [CHAIN.SUI]: {\n poolId:\n \"0xc014f7cb0a2604fb887d09165242828e6fe913f30d7ae2bea80199caed5ccbcb\",\n managerCapId:\n \"0xca34c6dff464f42a349294fa9fbe67a6d72eb999081db8de3fd56672b68863ee\",\n peripheryPackage:\n \"0x96e1d3897efee30bede047a14d186a952350d4759d3175f76ff6ac2c4a121901\",\n token0: {\n address:\n \"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC\",\n symbol: \"USDC\",\n isNative: false,\n decimal: 6,\n chainId: CHAIN.SUI,\n },\n token1: {\n address:\n \"0x375f70cf2ae4c00bf37117d0c85a2c71545e6ee05c4a5c7d282cd66a4504b068::usdt::USDT\",\n symbol: \"USDT\",\n isNative: false,\n decimal: 6,\n chainId: CHAIN.SUI,\n },\n chain: \"SUI\",\n },\n },\n} satisfies Record<string, Partial<Record<SuiChain, SuiPeripheryInfo>>>;\n\n/** STAGING + PRODUCTION pool maps alias DEV. Replace with literal objects\n * when an env diverges. */\nexport const SUI_POOLS_STAGING = SUI_POOLS_DEV;\nexport const SUI_POOLS_PRODUCTION = SUI_POOLS_DEV;\n","import { CHAIN } from \"../../types\";\nimport { KERNEL_POOL_USDC_USDT_Dev } from \"../kernel\";\nimport { SVM_POOLS_DEV } from \"../svm\";\nimport { SUI_POOLS_DEV } from \"../sui\";\nimport { PoolInfoType } from \"./_type_\";\n\nexport const POOL_INFO_Dev: PoolInfoType = {\n USDC_USDT: {\n kernelPool: KERNEL_POOL_USDC_USDT_Dev as `0x${string}`,\n token0: \"USDC\",\n token1: \"USDT\",\n feeBps: 1,\n peripheryInfo: {\n [CHAIN.ARBITRUM]: {\n token0: {\n address: \"0xaf88d065e77c8cC2239327C5EDb3A432268e5831\",\n symbol: \"USDC\",\n isNative: false,\n decimal: 6,\n chainId: CHAIN.ARBITRUM,\n },\n token1: {\n address: \"0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9\",\n symbol: \"USDT\",\n isNative: false,\n decimal: 6,\n chainId: CHAIN.ARBITRUM,\n },\n address: \"0x0433CCB013a590eA4231aAC9ddf05bb753c14127\",\n chain: \"ARBITRUM\",\n },\n ...SVM_POOLS_DEV.USDC_USDT,\n ...SUI_POOLS_DEV.USDC_USDT,\n },\n },\n};\n","import { POOL_INFO_Dev } from \"./dev\";\nimport { PoolInfoType } from \"./_type_\";\n\n/** v2 STAGING currently points at the same on-chain deploy as DEV (Solana\n * mainnet SAB…/SPP… + Sui mainnet package 0x96e1d3…); split into a\n * separate map only when staging and dev actually diverge. */\nexport const POOL_INFO_Staging: PoolInfoType = POOL_INFO_Dev;\n","import { POOL_INFO_Dev } from \"./dev\";\nimport { PoolInfoType } from \"./_type_\";\n\n/** v2 PRODUCTION currently points at the same on-chain deploy as DEV until\n * production forks off. Kernel manager / event emitter / EVM periphery\n * surfaces also alias DEV (see kernel.ts and periphery.ts). */\nexport const POOL_INFO_Production: PoolInfoType = POOL_INFO_Dev;\n","import { CHAIN, EnvMode, Token, TokenPair } from \"../../types\";\nimport type { PeripheryInfoFor } from \"./_type_\";\nimport { POOL_INFO_Dev } from \"./dev\";\nimport { POOL_INFO_Staging } from \"./staging\";\nimport { POOL_INFO_Production } from \"./production\";\nimport { PoolInfoType, PoolKey } from \"./_type_\";\n\nexport function getAllPoolInfo(mode: EnvMode = \"PRODUCTION\"): PoolInfoType {\n switch (mode) {\n case \"PRODUCTION\": return POOL_INFO_Production;\n case \"STAGING\": return POOL_INFO_Staging;\n case \"DEV\": return POOL_INFO_Dev;\n }\n}\n\nexport function getAllPoolKeys(mode: EnvMode = \"PRODUCTION\"): PoolKey[] {\n return Object.keys(getAllPoolInfo(mode));\n}\n\nexport function getPoolInfoByKey(key: PoolKey, mode: EnvMode = \"PRODUCTION\") {\n return getAllPoolInfo(mode)[key] ?? null;\n}\n\nexport function getSupportedChains(mode: EnvMode = \"PRODUCTION\"): CHAIN[] {\n const poolInfo = getAllPoolInfo(mode);\n const supportedChains = new Set<CHAIN>();\n for (const poolData of Object.values(poolInfo)) {\n for (const chainId of Object.keys(poolData.peripheryInfo)) {\n supportedChains.add(Number(chainId) as CHAIN);\n }\n }\n return Array.from(supportedChains).sort((a, b) => a - b);\n}\n\nexport function getSupportedPairs(\n chainId: CHAIN,\n mode: EnvMode = \"PRODUCTION\",\n): (TokenPair & { poolKey: PoolKey })[] {\n const poolInfo = getAllPoolInfo(mode);\n const supportedPairs: (TokenPair & { poolKey: PoolKey })[] = [];\n for (const [poolKey, poolData] of Object.entries(poolInfo)) {\n const peripheryData = poolData.peripheryInfo[chainId];\n if (peripheryData) {\n supportedPairs.push({\n token0: peripheryData.token0,\n token1: peripheryData.token1,\n poolKey,\n });\n }\n }\n return supportedPairs;\n}\n\nexport function getSupportedTokens(chainId: CHAIN, mode: EnvMode = \"PRODUCTION\"): Token[] {\n const supportedPairs = getSupportedPairs(chainId, mode);\n const tokens: Token[] = [];\n const seen = new Set<string>();\n for (const { token0, token1 } of supportedPairs) {\n for (const t of [token0, token1]) {\n const key = t.address.toLowerCase();\n if (!seen.has(key)) {\n seen.add(key);\n tokens.push(t);\n }\n }\n }\n return tokens;\n}\n\nexport function getOtherTokensInPairs(\n chainId: CHAIN,\n tokenAddress: string,\n mode: EnvMode = \"PRODUCTION\",\n): Token[] {\n const supportedPairs = getSupportedPairs(chainId, mode);\n const result: Token[] = [];\n const seen = new Set<string>();\n const needle = tokenAddress.toLowerCase();\n for (const { token0, token1 } of supportedPairs) {\n let other: Token | null = null;\n if (token0.address.toLowerCase() === needle) other = token1;\n else if (token1.address.toLowerCase() === needle) other = token0;\n if (other && !seen.has(other.address.toLowerCase())) {\n seen.add(other.address.toLowerCase());\n result.push(other);\n }\n }\n return result;\n}\n\nexport function kernelPoolToPoolKey(kernelPool: `0x${string}`, mode: EnvMode = \"PRODUCTION\"): PoolKey {\n const info = getAllPoolInfo(mode);\n const lower = kernelPool.toLowerCase();\n for (const [key, poolData] of Object.entries(info)) {\n if (poolData.kernelPool.toLowerCase() === lower) return key;\n }\n throw new Error(`${mode} kernelPoolToPoolKey()::Unknown kernelPool ${kernelPool}`);\n}\n\nexport function getPeripheryDetailsByKernelPoolAndChainId<K extends CHAIN>(\n kernelPool: `0x${string}`,\n chainId: K,\n mode?: EnvMode,\n): PeripheryInfoFor<K> | null;\nexport function getPeripheryDetailsByKernelPoolAndChainId(\n kernelPool: `0x${string}`,\n chainId: number,\n mode?: EnvMode,\n): PeripheryInfoFor<CHAIN> | null;\nexport function getPeripheryDetailsByKernelPoolAndChainId(\n kernelPool: `0x${string}`,\n chainId: number,\n mode: EnvMode = \"PRODUCTION\",\n): PeripheryInfoFor<CHAIN> | null {\n const poolKey = kernelPoolToPoolKey(kernelPool, mode);\n const info = getAllPoolInfo(mode);\n return (info[poolKey]?.peripheryInfo[chainId as CHAIN] ?? null) as PeripheryInfoFor<CHAIN> | null;\n}\n\n/**\n * Find tokens by case-insensitive symbol across one or more chains.\n *\n * Same token symbol on different chains has different addresses, so the\n * return type is `Array<Token>` (not a single record) — the same\n * `(symbol, chainId)` pair always points at one token, but\n * `(symbol, chainIds[])` may produce many.\n *\n * Omit `chainIds` to search every supported chain.\n */\nexport function findTokensBySymbol(args: {\n symbol: string;\n chainIds?: readonly CHAIN[];\n mode?: EnvMode;\n}): Token[] {\n const { symbol, chainIds, mode = \"PRODUCTION\" } = args;\n const normalized = symbol.toLowerCase();\n const chains = chainIds ?? getSupportedChains(mode);\n const out: Token[] = [];\n const seen = new Set<string>();\n for (const chainId of chains) {\n for (const t of getSupportedTokens(chainId, mode)) {\n if (t.symbol.toLowerCase() !== normalized) continue;\n const key = `${t.chainId}:${t.address.toLowerCase()}`;\n if (seen.has(key)) continue;\n seen.add(key);\n out.push(t);\n }\n }\n return out;\n}\n\n/**\n * Reverse lookup: return the symbol of the token at `address` on\n * `chainId`, or `null` if no supported token matches that pair.\n *\n * Address comparison is case-insensitive; symbol is returned in the\n * casing the deployment table records.\n */\nexport function getTokenSymbol(\n address: string,\n chainId: CHAIN,\n mode: EnvMode = \"PRODUCTION\",\n): string | null {\n const needle = address.toLowerCase();\n for (const t of getSupportedTokens(chainId, mode)) {\n if (t.address.toLowerCase() === needle) return t.symbol;\n }\n return null;\n}\n","import { bs58Decode, bs58Encode } from \"../utils/bs58\";\nimport { VM } from \"../types\";\n\nexport function base58ToBytes32(base58Str: string): `0x${string}` {\n const decoded = bs58Decode(base58Str);\n const addressBytes = new Uint8Array(32);\n const startPos = Math.max(0, 32 - decoded.length);\n addressBytes.set(decoded.slice(-32), startPos);\n return (\"0x\" + Buffer.from(addressBytes).toString(\"hex\").toLowerCase()) as `0x${string}`;\n}\n\nexport function base58ToHex(base58Str: string): `0x${string}` {\n const decoded = bs58Decode(base58Str);\n return `0x${Buffer.from(decoded).toString(\"hex\").toLowerCase()}` as `0x${string}`;\n}\n\nexport function hexToBase58(hexString: `0x${string}`): string {\n return bs58Encode(Buffer.from(hexString.slice(2), \"hex\"));\n}\n\nexport function bytes32ToBase58(hexStr: string): string {\n const hexWithoutPrefix = hexStr.startsWith(\"0x\") ? hexStr.slice(2) : hexStr;\n const addressBytes = Buffer.from(hexWithoutPrefix, \"hex\");\n const firstNonZero = addressBytes.findIndex((byte) => byte !== 0);\n const trimmed = firstNonZero < 0 ? addressBytes : addressBytes.subarray(firstNonZero);\n return bs58Encode(trimmed);\n}\n\n// Hex-validation primitives — used internally by `evmAddressToBytes32` and\n// the bytes32 path below. Not exported: consumers should call the\n// VM-aware adapter (`toBytes32Address`, `evmAddressToBytes32`) instead of\n// rolling their own validation.\nconst bytes32HexRegex = /^(?:0x)?[0-9a-fA-F]{64}$/;\n\nfunction isHexString(str: unknown): boolean {\n return typeof str === \"string\" && /^0x[0-9a-fA-F]+$/.test(str);\n}\n\nfunction isHexStringLoose(str: unknown): boolean {\n return typeof str === \"string\" && /^(?:0x)?[0-9a-fA-F]+$/.test(str);\n}\n\nvoid isHexString;\nvoid isHexStringLoose;\n\nexport function evmAddressToBytes32(address: string): `0x${string}` {\n if (!address.startsWith(\"0x\") && !address.startsWith(\"0X\")) {\n throw new TypeError(`evmAddressToBytes32: expected 0x-prefixed address, got \"${address}\"`);\n }\n return `0x${BigInt(address).toString(16).padStart(64, \"0\")}`.toLowerCase() as `0x${string}`;\n}\n\nexport function bytes32ToEvmAddress(bytes32: string): `0x${string}` {\n const userBigInt = BigInt(bytes32);\n const addressBigInt = userBigInt & BigInt(\"0xffffffffffffffffffffffffffffffffffffffff\");\n return (`0x${addressBigInt.toString(16).padStart(40, \"0\")}`).toLowerCase() as `0x${string}`;\n}\n\n/**\n * Decode the canonical SVM-side encoding of an EVM address back to its\n * 0x-prefixed lowercase EVM form.\n *\n * SVM periphery contracts store cross-VM addresses (kernel pool, kernel\n * factory, etc.) as base58 of the address left-padded to bytes32 — the\n * \"bytes32-base58\" form produced at deploy time by\n * `evmAddressToBytes32Base58`. SDK readers reverse it: base58-decode to\n * 32 bytes, then truncate to the trailing 20-byte EVM address.\n *\n * Composition of two existing primitives, named for the common case so\n * readers don't reinvent it. Any reader pulling an EVM address out of an\n * SVM Anchor account should call this.\n */\nexport function svmBytes32Base58ToEvmAddress(value: string): `0x${string}` {\n return bytes32ToEvmAddress(base58ToBytes32(value));\n}\n\nexport function toBase58(buffer: Buffer): string {\n return bs58Encode(buffer);\n}\n\nexport function bufferFromBase58(base58String: string): Buffer {\n return Buffer.from(bs58Decode(base58String));\n}\n\nexport function toBytes32Address(rawAddress: string, vmType: VM): `0x${string}` {\n switch (vmType) {\n case VM.EVM:\n return evmAddressToBytes32(rawAddress);\n case VM.SVM:\n return base58ToBytes32(rawAddress);\n case VM.SuiVM:\n if (!bytes32HexRegex.test(rawAddress)) {\n throw new TypeError(`toBytes32Address(SuiVM): expected 64-hex-char address, got \"${rawAddress}\"`);\n }\n return rawAddress as `0x${string}`;\n default:\n throw new Error(`toBytes32Address():Unsupported vmType=${vmType}`);\n }\n}\n\nexport function fromBytes32Address(bytes32Address: `0x${string}`, vmType: VM): string {\n switch (vmType) {\n case VM.EVM:\n return bytes32ToEvmAddress(bytes32Address);\n case VM.SVM:\n return bytes32ToBase58(bytes32Address);\n case VM.SuiVM:\n return bytes32Address;\n default:\n throw new Error(`fromBytes32Address():Unsupported vmType=${vmType}`);\n }\n}\n","const BASE58_ALPHABET = \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\";\n\nfunction base(ALPHABET: string) {\n if (ALPHABET.length >= 255) throw new TypeError(\"Alphabet too long\");\n\n const BASE_MAP = new Uint8Array(256).fill(255);\n for (let i = 0; i < ALPHABET.length; i++) {\n const xc = ALPHABET.charCodeAt(i);\n if (BASE_MAP[xc] !== 255) throw new TypeError(ALPHABET.charAt(i) + \" is ambiguous\");\n BASE_MAP[xc] = i;\n }\n\n const BASE = ALPHABET.length;\n const LEADER = ALPHABET.charAt(0);\n const FACTOR = Math.log(BASE) / Math.log(256);\n const iFACTOR = Math.log(256) / Math.log(BASE);\n\n function encode(source: Uint8Array | number[]): string {\n if (source instanceof Uint8Array) {\n // ok\n } else if (ArrayBuffer.isView(source)) {\n source = new Uint8Array((source as ArrayBufferView).buffer, (source as ArrayBufferView).byteOffset, (source as ArrayBufferView).byteLength);\n } else if (Array.isArray(source)) {\n source = Uint8Array.from(source);\n }\n if (!(source instanceof Uint8Array)) throw new TypeError(\"Expected Uint8Array\");\n if (source.length === 0) return \"\";\n\n let zeroes = 0;\n let length = 0;\n let pbegin = 0;\n const pend = source.length;\n\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++;\n zeroes++;\n }\n\n const size = ((pend - pbegin) * iFACTOR + 1) >>> 0;\n const b58 = new Uint8Array(size);\n\n while (pbegin !== pend) {\n let carry = source[pbegin]!;\n let i = 0;\n for (let it1 = size - 1; (carry !== 0 || i < length) && it1 !== -1; it1--, i++) {\n carry += (256 * b58[it1]!) >>> 0;\n b58[it1] = carry % BASE >>> 0;\n carry = (carry / BASE) >>> 0;\n }\n if (carry !== 0) throw new Error(\"Non-zero carry\");\n length = i;\n pbegin++;\n }\n\n let it2 = size - length;\n while (it2 !== size && b58[it2] === 0) it2++;\n\n let str = LEADER.repeat(zeroes);\n for (; it2 < size; ++it2) str += ALPHABET.charAt(b58[it2]!);\n return str;\n }\n\n function decodeUnsafe(source: string): Uint8Array | undefined {\n if (typeof source !== \"string\") throw new TypeError(\"Expected String\");\n if (source.length === 0) return new Uint8Array();\n\n let psz = 0;\n let zeroes = 0;\n let length = 0;\n while (source[psz] === LEADER) {\n zeroes++;\n psz++;\n }\n\n const size = ((source.length - psz) * FACTOR + 1) >>> 0;\n const b256 = new Uint8Array(size);\n\n while (psz < source.length) {\n const charCode = source.charCodeAt(psz);\n if (charCode > 255) return;\n let carry = BASE_MAP[charCode]!;\n if (carry === 255) return;\n let i = 0;\n for (let it3 = size - 1; (carry !== 0 || i < length) && it3 !== -1; it3--, i++) {\n carry += (BASE * b256[it3]!) >>> 0;\n b256[it3] = carry % 256 >>> 0;\n carry = (carry / 256) >>> 0;\n }\n if (carry !== 0) throw new Error(\"Non-zero carry\");\n length = i;\n psz++;\n }\n\n let it4 = size - length;\n while (it4 !== size && b256[it4] === 0) it4++;\n\n const vch = new Uint8Array(zeroes + (size - it4));\n let j = zeroes;\n while (it4 !== size) vch[j++] = b256[it4++]!;\n return vch;\n }\n\n function decode(source: string): Uint8Array {\n const buffer = decodeUnsafe(source);\n if (buffer) return buffer;\n throw new Error(\"Non-base\" + BASE + \" character\");\n }\n\n return { encode, decode, decodeUnsafe };\n}\n\nconst codec = base(BASE58_ALPHABET);\nexport const bs58Encode = codec.encode;\nexport const bs58Decode = codec.decode;\n","/**\n * Base class for all errors originating from `@skate-org/amm-*` packages.\n *\n * Callers can use `err instanceof SdkError` to catch any SDK-origin failure\n * without needing to know the specific subclass. Subclasses live in the\n * package closest to their domain:\n *\n * - `ApiError` / `NotFoundError` / `NotImplementedError` — `@skate-org/amm-api-v2`\n * - `EvmReadError` / `EvmWriteError` — `@skate-org/amm-evm-v2`\n *\n * Each subclass sets its own `.name`; this base only defines the identity.\n */\nexport class SdkError extends Error {\n override readonly name: string = \"SdkError\";\n\n constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n }\n}\n","/**\n * Pure-BigInt port of Uniswap v3-core `TickMath.sol`.\n *\n * Canonical source:\n * https://github.com/Uniswap/v3-core/blob/6562c52e8f75f0c10f9deaf44861847585fc8129/contracts/libraries/TickMath.sol\n *\n * Computes sqrt price for ticks of size 1.0001, i.e. sqrt(1.0001^tick) as\n * fixed point Q64.96 numbers, and the inverse.\n *\n * Solidity uses `uint256` / `uint160` / `int24` with wrap-on-overflow inside\n * `unchecked` blocks. We emulate that by doing arithmetic as BigInt and then\n * ANDing with `MAX_UINT256` / `MAX_UINT128` as needed. All multipliers and\n * hex constants are copied verbatim from the canonical source — do not\n * simplify.\n */\n\nconst MAX_UINT256 = (1n << 256n) - 1n;\nconst Q160_MASK = (1n << 160n) - 1n;\nconst Q256_MOD = 1n << 256n;\n\n/** Minimum tick passable to `getSqrtRatioAtTick`, `log_{1.0001}(2^-128)`. */\nexport const MIN_TICK = -887272;\n\n/** Maximum tick passable to `getSqrtRatioAtTick`, `log_{1.0001}(2^128)`. */\nexport const MAX_TICK = 887272;\n\n/** Minimum value returnable from `getSqrtRatioAtTick`. Equals `getSqrtRatioAtTick(MIN_TICK)`. */\nexport const MIN_SQRT_RATIO = 4295128739n;\n\n/** Maximum value returnable from `getSqrtRatioAtTick`. Equals `getSqrtRatioAtTick(MAX_TICK)`. */\nexport const MAX_SQRT_RATIO =\n 1461446703485210103287273052203988822378723970342n;\n\n/** Strict-inclusive lower bound for a user-supplied `sqrtPriceLimitX96`.\n * The periphery contract checks `sqrtPriceLimit > MIN_SQRT_RATIO`, so the\n * smallest valid value is `MIN_SQRT_RATIO + 1`. SVM/Sui validators use this. */\nexport const MIN_SQRT_PRICE_LIMIT = MIN_SQRT_RATIO + 1n;\n\n/** Strict-inclusive upper bound for a user-supplied `sqrtPriceLimitX96`. */\nexport const MAX_SQRT_PRICE_LIMIT = MAX_SQRT_RATIO - 1n;\n\n/**\n * Calculates `sqrt(1.0001^tick) * 2^96` as a Q64.96 `uint160`.\n *\n * @throws if `|tick| > MAX_TICK`.\n */\nexport function getSqrtRatioAtTick(tick: number): bigint {\n if (!Number.isInteger(tick)) {\n throw new Error(\"TickMath: tick must be an integer\");\n }\n const absTick = BigInt(tick < 0 ? -tick : tick);\n if (absTick > BigInt(MAX_TICK)) {\n throw new Error(\"T\"); // mirror Solidity `revert T()`\n }\n\n // Seed: odd bit → first constant; even → 2^128.\n let ratio =\n (absTick & 0x1n) !== 0n\n ? 0xfffcb933bd6fad37aa2d162d1a594001n\n : 0x100000000000000000000000000000000n;\n\n // Each `if` below: if the corresponding bit of absTick is set, multiply\n // ratio by the next magic constant and shift-right by 128. Emulate\n // Solidity's uint256 wrap with a mask after multiplication.\n if ((absTick & 0x2n) !== 0n)\n ratio = ((ratio * 0xfff97272373d413259a46990580e213an) & MAX_UINT256) >> 128n;\n if ((absTick & 0x4n) !== 0n)\n ratio = ((ratio * 0xfff2e50f5f656932ef12357cf3c7fdccn) & MAX_UINT256) >> 128n;\n if ((absTick & 0x8n) !== 0n)\n ratio = ((ratio * 0xffe5caca7e10e4e61c3624eaa0941cd0n) & MAX_UINT256) >> 128n;\n if ((absTick & 0x10n) !== 0n)\n ratio = ((ratio * 0xffcb9843d60f6159c9db58835c926644n) & MAX_UINT256) >> 128n;\n if ((absTick & 0x20n) !== 0n)\n ratio = ((ratio * 0xff973b41fa98c081472e6896dfb254c0n) & MAX_UINT256) >> 128n;\n if ((absTick & 0x40n) !== 0n)\n ratio = ((ratio * 0xff2ea16466c96a3843ec78b326b52861n) & MAX_UINT256) >> 128n;\n if ((absTick & 0x80n) !== 0n)\n ratio = ((ratio * 0xfe5dee046a99a2a811c461f1969c3053n) & MAX_UINT256) >> 128n;\n if ((absTick & 0x100n) !== 0n)\n ratio = ((ratio * 0xfcbe86c7900a88aedcffc83b479aa3a4n) & MAX_UINT256) >> 128n;\n if ((absTick & 0x200n) !== 0n)\n ratio = ((ratio * 0xf987a7253ac413176f2b074cf7815e54n) & MAX_UINT256) >> 128n;\n if ((absTick & 0x400n) !== 0n)\n ratio = ((ratio * 0xf3392b0822b70005940c7a398e4b70f3n) & MAX_UINT256) >> 128n;\n if ((absTick & 0x800n) !== 0n)\n ratio = ((ratio * 0xe7159475a2c29b7443b29c7fa6e889d9n) & MAX_UINT256) >> 128n;\n if ((absTick & 0x1000n) !== 0n)\n ratio = ((ratio * 0xd097f3bdfd2022b8845ad8f792aa5825n) & MAX_UINT256) >> 128n;\n if ((absTick & 0x2000n) !== 0n)\n ratio = ((ratio * 0xa9f746462d870fdf8a65dc1f90e061e5n) & MAX_UINT256) >> 128n;\n if ((absTick & 0x4000n) !== 0n)\n ratio = ((ratio * 0x70d869a156d2a1b890bb3df62baf32f7n) & MAX_UINT256) >> 128n;\n if ((absTick & 0x8000n) !== 0n)\n ratio = ((ratio * 0x31be135f97d08fd981231505542fcfa6n) & MAX_UINT256) >> 128n;\n if ((absTick & 0x10000n) !== 0n)\n ratio = ((ratio * 0x9aa508b5b7a84e1c677de54f3e99bc9n) & MAX_UINT256) >> 128n;\n if ((absTick & 0x20000n) !== 0n)\n ratio = ((ratio * 0x5d6af8dedb81196699c329225ee604n) & MAX_UINT256) >> 128n;\n if ((absTick & 0x40000n) !== 0n)\n ratio = ((ratio * 0x2216e584f5fa1ea926041bedfe98n) & MAX_UINT256) >> 128n;\n if ((absTick & 0x80000n) !== 0n)\n ratio = ((ratio * 0x48a170391f7dc42444e8fa2n) & MAX_UINT256) >> 128n;\n\n if (tick > 0) ratio = MAX_UINT256 / ratio;\n\n // Divides by 1<<32 rounding up to go from Q128.128 to Q128.96. Downcast to\n // uint160 is safe by construction of the tick-range constraint.\n const shifted = ratio >> 32n;\n const remainder = ratio & ((1n << 32n) - 1n);\n const sqrtPriceX96 = remainder === 0n ? shifted : shifted + 1n;\n return sqrtPriceX96 & Q160_MASK;\n}\n\n/**\n * Calculates the greatest tick value such that `getSqrtRatioAtTick(tick) <= sqrtPriceX96`.\n *\n * @throws if `sqrtPriceX96 < MIN_SQRT_RATIO` or `sqrtPriceX96 >= MAX_SQRT_RATIO`.\n */\nexport function getTickAtSqrtRatio(sqrtPriceX96: bigint): number {\n if (sqrtPriceX96 < MIN_SQRT_RATIO || sqrtPriceX96 >= MAX_SQRT_RATIO) {\n throw new Error(\"R\"); // mirror Solidity `revert R()`\n }\n\n const ratio = sqrtPriceX96 << 32n;\n\n // Compute msb of `ratio` via descending binary search, matching the\n // hand-rolled assembly in the canonical source.\n let r = ratio;\n let msb = 0n;\n\n // Each block: if r > threshold, add bit to msb and right-shift r by that amount.\n {\n const f = r > 0xffffffffffffffffffffffffffffffffn ? 128n : 0n;\n msb |= f;\n r >>= f;\n }\n {\n const f = r > 0xffffffffffffffffn ? 64n : 0n;\n msb |= f;\n r >>= f;\n }\n {\n const f = r > 0xffffffffn ? 32n : 0n;\n msb |= f;\n r >>= f;\n }\n {\n const f = r > 0xffffn ? 16n : 0n;\n msb |= f;\n r >>= f;\n }\n {\n const f = r > 0xffn ? 8n : 0n;\n msb |= f;\n r >>= f;\n }\n {\n const f = r > 0xfn ? 4n : 0n;\n msb |= f;\n r >>= f;\n }\n {\n const f = r > 0x3n ? 2n : 0n;\n msb |= f;\n r >>= f;\n }\n {\n const f = r > 0x1n ? 1n : 0n;\n msb |= f;\n // no shift in canonical source's final block\n }\n\n if (msb >= 128n) r = ratio >> (msb - 127n);\n else r = (ratio << (127n - msb)) & MAX_UINT256;\n\n // Signed 256-bit log_2 in Q128.128. BigInt left-shift on a negative value\n // preserves the signed bit-pattern; ANDing with MAX_UINT256 truncates to\n // 256 bits, yielding the exact two's-complement representation Solidity's\n // int256 bit ops expect (verified equal to the explicit modular form for\n // msb in [0, 255]).\n const offset = msb - 128n;\n let log_2 = (offset << 64n) & MAX_UINT256;\n\n // 14 iterations of the log_2 refinement loop.\n for (let i = 0; i < 14; i++) {\n r = (r * r) >> 127n;\n const f = r >> 128n;\n log_2 |= f << BigInt(63 - i);\n r >>= f;\n }\n\n // Multiply by a constant. In Solidity: `log_2 * 255738958999603826347141`.\n // log_2 is int256; we emulate signed-256-mul by interpreting log_2 as signed.\n const log_2_signed = toInt256(log_2);\n const log_sqrt10001 = log_2_signed * 255738958999603826347141n;\n\n const tickLowBig =\n (log_sqrt10001 - 3402992956809132418596140100660247210n) >> 128n;\n const tickHiBig =\n (log_sqrt10001 + 291339464771989622907027621153398088495n) >> 128n;\n\n const tickLow = toInt24(tickLowBig);\n const tickHi = toInt24(tickHiBig);\n\n if (tickLow === tickHi) return tickLow;\n return getSqrtRatioAtTick(tickHi) <= sqrtPriceX96 ? tickHi : tickLow;\n}\n\n/** Reinterpret a 256-bit unsigned BigInt as a two's-complement signed int256. */\nfunction toInt256(x: bigint): bigint {\n const masked = x & MAX_UINT256;\n return masked >= 1n << 255n ? masked - Q256_MOD : masked;\n}\n\n/**\n * Truncate a (possibly signed) BigInt to int24 range, matching Solidity's\n * downcast (which just takes the low 24 bits and reinterprets as signed).\n */\nfunction toInt24(x: bigint): number {\n const mask = (1n << 24n) - 1n;\n const truncated = x & mask;\n const signed =\n truncated >= 1n << 23n ? truncated - (1n << 24n) : truncated;\n return Number(signed);\n}\n\n","/**\n * Pure-BigInt port of Uniswap v3-core `FullMath.sol`.\n *\n * Canonical source:\n * https://github.com/Uniswap/v3-core/blob/6562c52e8f75f0c10f9deaf44861847585fc8129/contracts/libraries/FullMath.sol\n *\n * Solidity's FullMath.sol computes `floor(a*b/denom)` and `ceil(a*b/denom)`\n * for 256-bit unsigned values with full 512-bit intermediate precision, and\n * reverts if the 256-bit result overflows or if `denom == 0`.\n *\n * In JS BigInt we have arbitrary precision, so the implementation is far\n * simpler: compute the full product, divide, and explicitly check that the\n * final result fits in 256 bits.\n */\n\nconst MAX_UINT256 = (1n << 256n) - 1n;\n\n/**\n * Returns `floor(a * b / denom)` under Solidity uint256 semantics.\n *\n * Throws if `denom == 0` or if the quotient would not fit in 256 bits.\n */\nexport function mulDiv(a: bigint, b: bigint, denom: bigint): bigint {\n if (denom === 0n) {\n throw new Error(\"FullMath: division by zero\");\n }\n // In Solidity the inputs and result are uint256; negatives are not valid here.\n if (a < 0n || b < 0n || denom < 0n) {\n throw new Error(\"FullMath: negative input\");\n }\n const product = a * b;\n const result = product / denom;\n if (result > MAX_UINT256) {\n throw new Error(\"FullMath: result overflows uint256\");\n }\n return result;\n}\n\n/**\n * Returns `ceil(a * b / denom)` under Solidity uint256 semantics.\n *\n * Throws if `denom == 0`, if the intermediate `mulDiv` would overflow, or if\n * rounding up pushes the result past `uint256` range.\n */\nexport function mulDivRoundingUp(\n a: bigint,\n b: bigint,\n denom: bigint,\n): bigint {\n if (denom === 0n) {\n throw new Error(\"FullMath: division by zero\");\n }\n if (a < 0n || b < 0n || denom < 0n) {\n throw new Error(\"FullMath: negative input\");\n }\n const product = a * b;\n const quotient = product / denom;\n if (quotient > MAX_UINT256) {\n throw new Error(\"FullMath: result overflows uint256\");\n }\n if (product % denom !== 0n) {\n if (quotient === MAX_UINT256) {\n throw new Error(\"FullMath: rounding up overflows uint256\");\n }\n return quotient + 1n;\n }\n return quotient;\n}\n","/**\n * Pure-BigInt port of Uniswap v3-core `SqrtPriceMath.sol`.\n *\n * Canonical source:\n * https://github.com/Uniswap/v3-core/blob/6562c52e8f75f0c10f9deaf44861847585fc8129/contracts/libraries/SqrtPriceMath.sol\n *\n * Functions based on Q64.96 sqrt price and liquidity. Contains the math\n * that uses square root of price as a Q64.96 and liquidity to compute\n * deltas. Rounding modes match the canonical source exactly — change only\n * if the canonical Solidity changes.\n */\n\nimport { mulDiv, mulDivRoundingUp } from \"./fullMath\";\n\nconst MAX_UINT128 = (1n << 128n) - 1n;\nconst MAX_UINT160 = (1n << 160n) - 1n;\nconst MAX_UINT256 = (1n << 256n) - 1n;\nconst Q96_RESOLUTION = 96n;\nconst Q96 = 1n << 96n;\n\nfunction assertUint160(x: bigint, name: string): void {\n if (x < 0n || x > MAX_UINT160) {\n throw new Error(`SqrtPriceMath: ${name} out of uint160 range`);\n }\n}\n\nfunction assertUint128(x: bigint, name: string): void {\n if (x < 0n || x > MAX_UINT128) {\n throw new Error(`SqrtPriceMath: ${name} out of uint128 range`);\n }\n}\n\nfunction assertUint256(x: bigint, name: string): void {\n if (x < 0n || x > MAX_UINT256) {\n throw new Error(`SqrtPriceMath: ${name} out of uint256 range`);\n }\n}\n\n/** Solidity's `UnsafeMath.divRoundingUp(x, y)` = `(x + y - 1) / y` with unchecked math. */\nfunction divRoundingUp(x: bigint, y: bigint): bigint {\n if (y === 0n) throw new Error(\"SqrtPriceMath: div by zero\");\n return x / y + (x % y === 0n ? 0n : 1n);\n}\n\n/** Cast a uint256 value to uint160, revert on overflow. Mirrors SafeCast.toUint160. */\nfunction toUint160(x: bigint): bigint {\n if (x > MAX_UINT160) throw new Error(\"SqrtPriceMath: toUint160 overflow\");\n return x;\n}\n\n/**\n * Gets the next sqrt price given a delta of token0.\n *\n * Always rounds up. See canonical source for the two-branch formula and\n * overflow-fallback rationale.\n */\nexport function getNextSqrtPriceFromAmount0RoundingUp(\n sqrtPX96: bigint,\n liquidity: bigint,\n amount: bigint,\n add: boolean,\n): bigint {\n assertUint160(sqrtPX96, \"sqrtPX96\");\n assertUint128(liquidity, \"liquidity\");\n assertUint256(amount, \"amount\");\n\n if (amount === 0n) return sqrtPX96;\n const numerator1 = liquidity << Q96_RESOLUTION;\n\n if (add) {\n // First branch: full-precision formula if `amount * sqrtPX96` fits in\n // uint256. Solidity detects overflow by checking `product/amount == sqrtPX96`.\n const product = (amount * sqrtPX96) & MAX_UINT256;\n const noOverflow = amount === 0n || product / amount === sqrtPX96;\n if (noOverflow) {\n const denominator = numerator1 + product;\n if (denominator >= numerator1) {\n // always fits in 160 bits\n return toUint160(mulDivRoundingUp(numerator1, sqrtPX96, denominator));\n }\n }\n // Fallback: `liquidity / ((liquidity / sqrtPX96) + amount)`, rounded up.\n // Solidity uses UnsafeMath.divRoundingUp here; wrap-semantics on the\n // denominator are acceptable because overflow = revert in our port\n // (BigInt never wraps), so we simply let the division proceed.\n if (sqrtPX96 === 0n) throw new Error(\"SqrtPriceMath: sqrtPX96 == 0\");\n const denom = numerator1 / sqrtPX96 + amount;\n return toUint160(divRoundingUp(numerator1, denom));\n } else {\n // Remove token0: must not under/overflow denominator.\n const product = (amount * sqrtPX96) & MAX_UINT256;\n const noOverflow = amount === 0n || product / amount === sqrtPX96;\n if (!noOverflow || numerator1 <= product) {\n throw new Error(\"SqrtPriceMath: getNextSqrtPriceFromAmount0 denom <= 0\");\n }\n const denominator = numerator1 - product;\n return toUint160(mulDivRoundingUp(numerator1, sqrtPX96, denominator));\n }\n}\n\n/**\n * Gets the next sqrt price given a delta of token1.\n *\n * Always rounds down. See canonical source for the branch selection based\n * on `amount <= type(uint160).max`.\n */\nexport function getNextSqrtPriceFromAmount1RoundingDown(\n sqrtPX96: bigint,\n liquidity: bigint,\n amount: bigint,\n add: boolean,\n): bigint {\n assertUint160(sqrtPX96, \"sqrtPX96\");\n assertUint128(liquidity, \"liquidity\");\n assertUint256(amount, \"amount\");\n\n if (add) {\n const quotient =\n amount <= MAX_UINT160\n ? (amount << Q96_RESOLUTION) / liquidity\n : mulDiv(amount, Q96, liquidity);\n return toUint160(sqrtPX96 + quotient);\n } else {\n const quotient =\n amount <= MAX_UINT160\n ? divRoundingUp(amount << Q96_RESOLUTION, liquidity)\n : mulDivRoundingUp(amount, Q96, liquidity);\n if (sqrtPX96 <= quotient) {\n throw new Error(\"SqrtPriceMath: sqrtPX96 <= quotient\");\n }\n // always fits 160 bits\n return sqrtPX96 - quotient;\n }\n}\n\n/**\n * Gets the next sqrt price given an input amount of token0 or token1.\n *\n * @throws if `sqrtPX96 <= 0`, `liquidity <= 0`, or the next price is out of bounds.\n */\nexport function getNextSqrtPriceFromInput(\n sqrtPX96: bigint,\n liquidity: bigint,\n amountIn: bigint,\n zeroForOne: boolean,\n): bigint {\n if (sqrtPX96 <= 0n) throw new Error(\"SqrtPriceMath: sqrtPX96 must be > 0\");\n if (liquidity <= 0n)\n throw new Error(\"SqrtPriceMath: liquidity must be > 0\");\n\n return zeroForOne\n ? getNextSqrtPriceFromAmount0RoundingUp(sqrtPX96, liquidity, amountIn, true)\n : getNextSqrtPriceFromAmount1RoundingDown(\n sqrtPX96,\n liquidity,\n amountIn,\n true,\n );\n}\n\n/**\n * Gets the next sqrt price given an output amount of token0 or token1.\n *\n * @throws if `sqrtPX96 <= 0`, `liquidity <= 0`, or the next price is out of bounds.\n */\nexport function getNextSqrtPriceFromOutput(\n sqrtPX96: bigint,\n liquidity: bigint,\n amountOut: bigint,\n zeroForOne: boolean,\n): bigint {\n if (sqrtPX96 <= 0n) throw new Error(\"SqrtPriceMath: sqrtPX96 must be > 0\");\n if (liquidity <= 0n)\n throw new Error(\"SqrtPriceMath: liquidity must be > 0\");\n\n return zeroForOne\n ? getNextSqrtPriceFromAmount1RoundingDown(\n sqrtPX96,\n liquidity,\n amountOut,\n false,\n )\n : getNextSqrtPriceFromAmount0RoundingUp(\n sqrtPX96,\n liquidity,\n amountOut,\n false,\n );\n}\n\n/**\n * Amount0 delta between two sqrt prices for a given liquidity.\n *\n * `liquidity * (sqrt(upper) - sqrt(lower)) / (sqrt(upper) * sqrt(lower))`.\n */\nexport function getAmount0Delta(\n sqrtRatioAX96: bigint,\n sqrtRatioBX96: bigint,\n liquidity: bigint,\n roundUp: boolean,\n): bigint {\n assertUint160(sqrtRatioAX96, \"sqrtRatioAX96\");\n assertUint160(sqrtRatioBX96, \"sqrtRatioBX96\");\n assertUint128(liquidity, \"liquidity\");\n\n let a = sqrtRatioAX96;\n let b = sqrtRatioBX96;\n if (a > b) {\n [a, b] = [b, a];\n }\n\n if (a === 0n) throw new Error(\"SqrtPriceMath: sqrtRatio must be > 0\");\n\n const numerator1 = liquidity << Q96_RESOLUTION;\n const numerator2 = b - a;\n\n if (roundUp) {\n return divRoundingUp(mulDivRoundingUp(numerator1, numerator2, b), a);\n }\n return mulDiv(numerator1, numerator2, b) / a;\n}\n\n/**\n * Amount1 delta between two sqrt prices for a given liquidity.\n *\n * `liquidity * (sqrt(upper) - sqrt(lower))`.\n */\nexport function getAmount1Delta(\n sqrtRatioAX96: bigint,\n sqrtRatioBX96: bigint,\n liquidity: bigint,\n roundUp: boolean,\n): bigint {\n assertUint160(sqrtRatioAX96, \"sqrtRatioAX96\");\n assertUint160(sqrtRatioBX96, \"sqrtRatioBX96\");\n assertUint128(liquidity, \"liquidity\");\n\n let a = sqrtRatioAX96;\n let b = sqrtRatioBX96;\n if (a > b) {\n [a, b] = [b, a];\n }\n\n return roundUp\n ? mulDivRoundingUp(liquidity, b - a, Q96)\n : mulDiv(liquidity, b - a, Q96);\n}\n\n/**\n * Signed amount0 delta: positive liquidity -> rounds up, negative -> rounds\n * down and negates. Matches the `int128 liquidity` overload of the\n * canonical library.\n */\nexport function getAmount0DeltaSigned(\n sqrtRatioAX96: bigint,\n sqrtRatioBX96: bigint,\n liquidity: bigint,\n): bigint {\n // int128 range: [-2^127, 2^127 - 1]\n const INT128_MIN = -(1n << 127n);\n const INT128_MAX = (1n << 127n) - 1n;\n if (liquidity < INT128_MIN || liquidity > INT128_MAX) {\n throw new Error(\"SqrtPriceMath: liquidity out of int128 range\");\n }\n if (liquidity < 0n) {\n return -getAmount0Delta(sqrtRatioAX96, sqrtRatioBX96, -liquidity, false);\n }\n return getAmount0Delta(sqrtRatioAX96, sqrtRatioBX96, liquidity, true);\n}\n\n/**\n * Signed amount1 delta: positive liquidity -> rounds up, negative -> rounds\n * down and negates. Matches the `int128 liquidity` overload of the\n * canonical library.\n */\nexport function getAmount1DeltaSigned(\n sqrtRatioAX96: bigint,\n sqrtRatioBX96: bigint,\n liquidity: bigint,\n): bigint {\n const INT128_MIN = -(1n << 127n);\n const INT128_MAX = (1n << 127n) - 1n;\n if (liquidity < INT128_MIN || liquidity > INT128_MAX) {\n throw new Error(\"SqrtPriceMath: liquidity out of int128 range\");\n }\n if (liquidity < 0n) {\n return -getAmount1Delta(sqrtRatioAX96, sqrtRatioBX96, -liquidity, false);\n }\n return getAmount1Delta(sqrtRatioAX96, sqrtRatioBX96, liquidity, true);\n}\n","/**\n * Pure-BigInt port of Uniswap v3-core `LiquidityMath.sol`.\n *\n * Canonical source:\n * https://github.com/Uniswap/v3-core/blob/main/contracts/libraries/LiquidityMath.sol\n *\n * Exposes `addDelta(x, y)` with Solidity's revert semantics: subtracting\n * past zero reverts with `LS`, adding past `uint128.max` reverts with `LA`.\n */\n\nconst MAX_UINT128 = (1n << 128n) - 1n;\nconst INT128_MAX = (1n << 127n) - 1n;\nconst INT128_MIN = -(1n << 127n);\n\n/**\n * Add a signed `int128` liquidity delta to a `uint128` liquidity value,\n * reverting on overflow / underflow.\n *\n * @throws `LA` if `x + y > uint128.max`\n * @throws `LS` if `x + y < 0`\n */\nexport function addDelta(x: bigint, y: bigint): bigint {\n if (x < 0n || x > MAX_UINT128) {\n throw new Error(\"LiquidityMath: x out of uint128 range\");\n }\n if (y < INT128_MIN || y > INT128_MAX) {\n throw new Error(\"LiquidityMath: y out of int128 range\");\n }\n\n const z = x + y;\n // Solidity semantics: after the signed add, z MUST remain in uint128 range.\n // Underflow (z < 0) => 'LS', overflow (z > uint128.max) => 'LA'.\n if (y < 0n) {\n if (z < 0n) throw new Error(\"LS\");\n } else {\n if (z > MAX_UINT128) throw new Error(\"LA\");\n }\n return z;\n}\n"],"mappings":"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","names":["CHAIN","VM","BLOCK_EXPLORER","TaskPhase","MAX_UINT256","MAX_UINT256","INT128_MIN","INT128_MAX","MAX_UINT128"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/types/chain.ts","../src/types/vm.ts","../src/types/mode.ts","../src/types/action.ts","../src/deployment/kernel.ts","../src/deployment/periphery.ts","../src/deployment/svm.ts","../src/deployment/sui.ts","../src/deployment/aggregated/dev.ts","../src/deployment/aggregated/staging.ts","../src/deployment/aggregated/production.ts","../src/deployment/aggregated/retrieval.ts","../src/adapter/skate.ts","../src/utils/bs58.ts","../src/errors.ts","../src/math/tickMath.ts","../src/math/fullMath.ts","../src/math/sqrtPriceMath.ts","../src/math/liquidityMath.ts","../src/math/kernel.ts"],"sourcesContent":["export * from \"./types\";\nexport * from \"./deployment\";\nexport * from \"./adapter\";\nexport * from \"./errors\";\nexport * from \"./math\";\n","export enum CHAIN {\n SKATE = 5050,\n\n SOLANA = 901,\n ECLIPSE = 902,\n\n SUI = 1001,\n\n BASE = 8453,\n ARBITRUM = 42161,\n BSC = 56,\n MANTLE = 5000,\n OPTIMISM = 10,\n ETHEREUM = 1,\n HYPERLIQUID = 999,\n PLUME = 98866,\n ZG = 16661,\n MONAD = 143,\n MEGAETH = 4326,\n TEMPO = 4217,\n}\n\nexport const CHAIN_MAP: Record<string, number> = Object.entries(CHAIN)\n .filter(([, value]) => typeof value === \"number\")\n .reduce(\n (map, [key, value]) => {\n map[key] = value as number;\n return map;\n },\n {} as Record<string, number>,\n );\n","import { CHAIN } from \"./chain\";\n\nexport enum VM {\n EVM = 1,\n /** Reserved — no TVM chain in scope for v2; kept for forward-compatibility with v1 numbering. */\n TVM = 2,\n SVM = 3,\n SuiVM = 4,\n}\n\nexport enum BLOCK_EXPLORER {\n SKATE = \"https://scan.skatechain.org\",\n ECLIPSE = \"https://eclipsescan.xyz\",\n SOLANA = \"https://solscan.io\",\n SUI = \"https://suiscan.xyz/mainnet\",\n BASE = \"https://basescan.org\",\n ARBITRUM = \"https://arbiscan.io\",\n MANTLE = \"https://mantlescan.xyz\",\n OPTIMISM = \"https://optimistic.etherscan.io\",\n ETHEREUM = \"https://etherscan.io\",\n BSC = \"https://bscscan.com\",\n HYPERLIQUID = \"https://hyperscan.com\",\n PLUME = \"https://explorer.plume.org\",\n ZG = \"https://chainscan.0g.ai\",\n MONAD = \"https://monadvision.com\",\n MEGAETH = \"https://megaeth.blockscout.com\",\n TEMPO = \"https://explore.tempo.xyz\",\n}\n\nexport function getBlockExplorer(chain: CHAIN): BLOCK_EXPLORER | null {\n switch (chain) {\n case CHAIN.SKATE: return BLOCK_EXPLORER.SKATE;\n case CHAIN.SOLANA: return BLOCK_EXPLORER.SOLANA;\n case CHAIN.ECLIPSE: return BLOCK_EXPLORER.ECLIPSE;\n case CHAIN.SUI: return BLOCK_EXPLORER.SUI;\n case CHAIN.BASE: return BLOCK_EXPLORER.BASE;\n case CHAIN.ARBITRUM: return BLOCK_EXPLORER.ARBITRUM;\n case CHAIN.MANTLE: return BLOCK_EXPLORER.MANTLE;\n case CHAIN.OPTIMISM: return BLOCK_EXPLORER.OPTIMISM;\n case CHAIN.ETHEREUM: return BLOCK_EXPLORER.ETHEREUM;\n case CHAIN.BSC: return BLOCK_EXPLORER.BSC;\n case CHAIN.HYPERLIQUID: return BLOCK_EXPLORER.HYPERLIQUID;\n case CHAIN.PLUME: return BLOCK_EXPLORER.PLUME;\n case CHAIN.ZG: return BLOCK_EXPLORER.ZG;\n case CHAIN.MONAD: return BLOCK_EXPLORER.MONAD;\n case CHAIN.MEGAETH: return BLOCK_EXPLORER.MEGAETH;\n case CHAIN.TEMPO: return BLOCK_EXPLORER.TEMPO;\n default: return null;\n }\n}\n\nexport function vmTypeFromChain(chainId: CHAIN): VM | null {\n switch (chainId) {\n case CHAIN.SKATE:\n case CHAIN.BASE:\n case CHAIN.ARBITRUM:\n case CHAIN.MANTLE:\n case CHAIN.OPTIMISM:\n case CHAIN.ETHEREUM:\n case CHAIN.BSC:\n case CHAIN.HYPERLIQUID:\n case CHAIN.PLUME:\n case CHAIN.ZG:\n case CHAIN.MONAD:\n case CHAIN.MEGAETH:\n case CHAIN.TEMPO:\n return VM.EVM;\n\n case CHAIN.SOLANA:\n case CHAIN.ECLIPSE:\n return VM.SVM;\n\n case CHAIN.SUI:\n return VM.SuiVM;\n\n default:\n return null;\n }\n}\n","import type { CHAIN } from \"./chain\";\n\nexport type EnvMode = \"STAGING\" | \"PRODUCTION\" | \"DEV\";\n\nexport interface DevModeConfig {\n /** Full base URL including scheme, e.g. \"http://localhost:3000/amm-action-v2\". */\n apiEndpoint: string;\n /**\n * Optional per-chain RPC URL overrides. When a `CHAIN` key is present here,\n * `@skate-org/amm-evm-v2`'s `getKernelPublicClient` / `getSourcePublicClient`\n * factories prefer the override over the built-in `DEFAULT_RPC`. Useful for\n * private MegaETH RPCs (until Skate's DEV URL is public), localnet, or\n * rate-limited public endpoints.\n *\n * A caller-supplied `transport` argument still takes precedence over this.\n */\n rpcEndpoints?: Partial<Record<CHAIN, string>>;\n}\n\nexport type EnvModeWithConfig = EnvMode | { mode: \"DEV\"; config: DevModeConfig };\n\nexport function normalizeMode(mode: EnvModeWithConfig): { mode: EnvMode; config?: DevModeConfig } {\n if (typeof mode === \"string\") return { mode };\n return { mode: mode.mode, config: mode.config };\n}\n","// v2 ActionStatus (per amm-action-v2-service).\nexport type ActionStatus =\n | \"RECEIVED\"\n | \"PROCESSED\"\n | \"EXECUTED\"\n | \"WITHDRAWN\"\n | \"KERNEL_SETTLE_FAILED\"\n | \"GATEWAY_SETTLE_FAILED\"\n | \"CORRUPTED\";\n\nexport enum TaskPhase {\n INDEX_ACTION = \"INDEX_ACTION\",\n SETTLE_KERNEL = \"SETTLE_KERNEL\",\n SUBMIT_EXECUTION = \"SUBMIT_EXECUTION\",\n SETTLE_GATEWAY = \"SETTLE_GATEWAY\",\n SETTLE_REFUND = \"SETTLE_REFUND\",\n}\n\nexport type ActionType = \"mint\" | \"burn\" | \"swap\" | \"increaseLiquidity\" | \"decreaseLiquidity\";\n\nexport type TaskFunctionMeta =\n | SettleMintMeta\n | SettleBurnMeta\n | SettleSwapMeta\n | SettleMeta\n | TransferToMeta;\n\n/**\n * Kernel-side task metadata. `decimal0`/`decimal1` are **always 18** — the kernel\n * normalizes amounts to 18 decimals regardless of source-token decimals, so\n * `amount*` strings are expressed as `10^18`-denominated raw amounts here.\n * Do not widen these literal types without a kernel-protocol change.\n */\nexport type SettleMintMeta = {\n functionName: \"settleMint\";\n args: {\n user: `0x${string}`;\n amount0ToSettle: string;\n amount1ToSettle: string;\n amount0ToTransfer: string;\n amount1ToTransfer: string;\n decimal0: 18;\n decimal1: 18;\n };\n};\n\nexport type SettleBurnMeta = {\n functionName: \"settleBurn\";\n args: {\n user: `0x${string}`;\n amount0: string;\n amount1: string;\n decimal0: 18;\n decimal1: 18;\n };\n};\n\nexport type SettleSwapMeta = {\n functionName: \"settleSwap\";\n args: {\n recipient: `0x${string}`;\n user: `0x${string}`;\n amount0ToSettle: string;\n amount1ToSettle: string;\n amount0ToTransfer: string;\n amount1ToTransfer: string;\n decimal0: 18;\n decimal1: 18;\n };\n};\n\nexport type SettleMeta = {\n functionName: \"settle\";\n args: {\n user: `0x${string}`;\n amount0: string;\n amount1: string;\n decimal0: 18;\n decimal1: 18;\n };\n};\n\nexport type TransferToMeta = {\n functionName: \"transferTo\";\n args: {\n user: `0x${string}`;\n amount0: string;\n amount1: string;\n decimal0: 18;\n decimal1: 18;\n };\n};\n","import { EnvMode } from \"../types\";\nimport { CHAIN } from \"../types\";\n\n// =====================================================================\n// DEV — v2 service deployed on MegaETH (kernel) + Arbitrum (periphery).\n// STAGING + PRODUCTION currently alias DEV (same kernel deploy) until\n// the envs actually diverge.\n// =====================================================================\n//\n// Raw addresses are module-private; consumers should call the\n// `KernelManagerAddress(mode)` / `KernelEventEmitterAddress(mode)`\n// accessors below, or use `POOL_INFO_Dev` for pool addresses. The one\n// exception is `KERNEL_POOL_USDC_USDT_Dev`, which is exported (with a\n// frozen-in-time `_Dev` suffix that documents which deploy seeded the\n// shared kernel route) so the integration smokes can cross-check it\n// against the live API response.\nconst KERNEL_EXECUTOR_REGISTRY = \"0x45F5e211B2CAeA14d5E5cB028923F8A5D7b1ab5d\";\nconst KERNEL_MESSAGE_BOX = \"0xe3aC86bF5D9Ab5d9705b5e9187437e978397528B\";\nconst KERNEL_ACCOUNT_REGISTRY = \"0xeD9e139CAcb439744277be5D7fbEe5aAF4DB8fA2\";\nconst KERNEL_MANAGER = \"0x17B7207837e8884f7f687f1f4057751BDAf70a01\";\nconst KERNEL_EVENT_EMITTER = \"0x8989b3ecb65f250ab7A0DC03589B0Cc8b8b04b81\";\nconst KERNEL_POOL_IMPL = \"0x9BffA944Df7914621A7Cc638C9104C106c5C6846\";\nexport const KERNEL_POOL_USDC_USDT_Dev = \"0x2c23334eE3b030e6bacEDEDf7C511eEA08Cf7E7e\";\n\n// Touch the now-private constants to keep them in scope for future use\n// (event-emitter, pool-impl wiring) without `--noUnusedLocals` warnings.\nvoid KERNEL_EXECUTOR_REGISTRY;\nvoid KERNEL_MESSAGE_BOX;\nvoid KERNEL_ACCOUNT_REGISTRY;\nvoid KERNEL_POOL_IMPL;\n\n// =====================================================================\n// Kernel chain per environment.\n//\n// SDK v2 currently targets MegaETH for the kernel side across all modes.\n// STAGING / PRODUCTION alias the DEV deploy until they fork off; changing\n// a future env to a different kernel chain is a one-line edit here, and\n// the address accessors above will need their own per-mode branches when\n// STAGING / PRODUCTION diverge from DEV.\n// =====================================================================\nexport const KERNEL_CHAIN_BY_MODE: Readonly<Record<EnvMode, CHAIN>> = {\n DEV: CHAIN.MEGAETH,\n STAGING: CHAIN.MEGAETH,\n PRODUCTION: CHAIN.MEGAETH,\n};\n\n/** Return the kernel CHAIN id for a given env mode. */\nexport function KernelChain(mode: EnvMode): CHAIN {\n return KERNEL_CHAIN_BY_MODE[mode];\n}\n\n/** Address of the Skate Kernel Manager for the given env mode. All three\n * modes alias the same DEV deploy until STAGING / PRODUCTION fork off. */\nexport function KernelManagerAddress(_mode: EnvMode): `0x${string}` {\n return KERNEL_MANAGER as `0x${string}`;\n}\n\n/** Address of the Skate Kernel Event Emitter for the given env mode.\n * Same aliasing posture as `KernelManagerAddress`. */\nexport function KernelEventEmitterAddress(_mode: EnvMode): `0x${string}` {\n return KERNEL_EVENT_EMITTER as `0x${string}`;\n}\n","import { CHAIN, EnvMode } from \"../types\";\n\n// DEV periphery (amm-action-v2). Chain-keyed — each source chain hosts its own\n// ActionBox / Gateway / PeripheryManager / pool-emitter stack. Arbitrum is the\n// first DEV source chain to be deployed.\n\nexport interface PeripheryDeployment {\n multicall: `0x${string}`;\n executorRegistry: `0x${string}`;\n actionBox: `0x${string}`;\n skateGateway: `0x${string}`;\n peripheryManager: `0x${string}`;\n peripheryManagerImpl: `0x${string}`;\n eventEmitter: `0x${string}`;\n peripheryPoolImpl: `0x${string}`;\n}\n\nexport const PERIPHERY_DEV: Partial<Record<CHAIN, PeripheryDeployment>> = {\n [CHAIN.ARBITRUM]: {\n multicall: \"0x3dCD7A136F0A49f3EFcC5E215793Fa1ce5c400Bf\",\n executorRegistry: \"0xE84a60d66543ef8E2E162f66a7669692b01Ee145\",\n actionBox: \"0x4309d3aE98c8A751fAc34C91536Ee860d9B8DcE1\",\n skateGateway: \"0x63Ca920425f683138B9407171b51b8172421Ba50\",\n peripheryManager: \"0x1120d6B34c4EB0CD49200aE9fBD2e4fb002d949f\",\n peripheryManagerImpl: \"0x26F01bc73cB7422DB67BBDfAcd9C987Ae66bF3D3\",\n eventEmitter: \"0xB301150AFA170816Ae18EC21e2A830Ddc7bBA1De\",\n peripheryPoolImpl: \"0x803ed7fa8934D4fe51A276cA02506b585cdb3eb4\",\n },\n};\n\n/** STAGING + PRODUCTION currently alias DEV — the v2 EVM periphery deploy\n * lives on Arbitrum at the addresses above, and all three envs point at it\n * until staging/prod ever fork off. Swap the right side for a literal map\n * when that day comes. */\nexport const PERIPHERY_STAGING = PERIPHERY_DEV;\nexport const PERIPHERY_PRODUCTION = PERIPHERY_DEV;\n\n/**\n * Look up the periphery deployment record for a given chain in a given env.\n * Returns `null` when the chain has no entry for the chosen env.\n */\nexport function PeripheryDeploymentFor(\n chain: CHAIN,\n mode: EnvMode,\n): PeripheryDeployment | null {\n switch (mode) {\n case \"DEV\":\n return PERIPHERY_DEV[chain] ?? null;\n case \"STAGING\":\n return PERIPHERY_STAGING[chain] ?? null;\n case \"PRODUCTION\":\n return PERIPHERY_PRODUCTION[chain] ?? null;\n }\n}\n\nexport function PeripheryManagerAddress(\n chain: CHAIN,\n mode: EnvMode,\n): `0x${string}` | null {\n return PeripheryDeploymentFor(chain, mode)?.peripheryManager ?? null;\n}\n\nexport function PeripheryEventEmitterAddress(\n chain: CHAIN,\n mode: EnvMode,\n): `0x${string}` | null {\n return PeripheryDeploymentFor(chain, mode)?.eventEmitter ?? null;\n}\n\nexport function SkateGatewayAddress(\n chain: CHAIN,\n mode: EnvMode,\n): `0x${string}` | null {\n return PeripheryDeploymentFor(chain, mode)?.skateGateway ?? null;\n}\n\nexport function ActionBoxAddress(\n chain: CHAIN,\n mode: EnvMode,\n): `0x${string}` | null {\n return PeripheryDeploymentFor(chain, mode)?.actionBox ?? null;\n}\n","import { CHAIN, EnvMode } from \"../types\";\nimport type { SvmChain } from \"../types/chain-vm\";\nimport type { SvmPeripheryInfo } from \"./aggregated/_type_\";\n\n/** Deploy-wide SVM pubkeys. Per-pool addresses live in `SVM_POOLS_<mode>`\n * below; this struct holds the deploy-wide pieces shared across pools. */\nexport interface SvmDeployment {\n peripheryPoolProgramId: string;\n actionBoxProgramId: string;\n /** `action_box state_v3` PDA. One per deploy. */\n actionBoxStateV3: string;\n /** `task_ledger` PDA (replay bitmap). */\n taskLedger: string;\n /** Manager pubkey — also serves as gateway and task-ledger admin. */\n manager: string;\n}\n\nexport const SVM_DEPLOYMENT_DEV: Partial<Record<SvmChain, SvmDeployment>> = {\n [CHAIN.SOLANA]: {\n peripheryPoolProgramId: \"SPPZB76TV1oSusXvGYQDK7KZGyLBmWbr8CuzNcjb98y\",\n actionBoxProgramId: \"SABZ2zgj8G8jD7V9s6hSMkT1fvNyMavssNigmmTMqa2\",\n actionBoxStateV3: \"G1qLtJDbkY4JBtD7sdjqGN8GJ38QRDbzp2fWEYY4apAh\",\n taskLedger: \"SkTLHEfy9X3PeMVa2dEYysg9Ccq8KtNG7zYNTAaB1NV\",\n manager: \"SGMSTk5t2gmiHKQjtb9XV6qviasgD5UKTsVMHLGCSZA\",\n },\n};\n\n/** STAGING + PRODUCTION currently alias DEV — the v2 SVM deploy lives on\n * Solana mainnet at the addresses above, and all three envs point at it\n * until staging/prod ever fork off into separate deploys. Swap the right\n * side of these `=` lines for literal objects when that day comes. */\nexport const SVM_DEPLOYMENT_STAGING = SVM_DEPLOYMENT_DEV;\nexport const SVM_DEPLOYMENT_PRODUCTION = SVM_DEPLOYMENT_DEV;\n\n/** Returns `null` for an unregistered SvmChain in the chosen mode. */\nexport function SvmDeploymentFor(\n chain: SvmChain,\n mode: EnvMode,\n): SvmDeployment | null {\n switch (mode) {\n case \"DEV\":\n return SVM_DEPLOYMENT_DEV[chain] ?? null;\n case \"STAGING\":\n return SVM_DEPLOYMENT_STAGING[chain] ?? null;\n case \"PRODUCTION\":\n return SVM_DEPLOYMENT_PRODUCTION[chain] ?? null;\n }\n}\n\n/** SPL Token program (classic). Token-2022 mints use a different id. */\nconst TOKEN_PROGRAM_ID = \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\";\n\n/** Per-pool SVM addresses, keyed by `[poolKey][SvmChain]`. `poolKey` matches\n * the key used by `POOL_INFO_Dev` (e.g. \"USDC_USDT\").\n * - Adding a new SVM chain entry to an existing pool (e.g. Eclipse under\n * USDC_USDT) requires editing this map only — `aggregated/dev.ts` picks\n * it up automatically via the existing spread.\n * - Adding a brand-new pool requires a new key here AND a new pool object\n * in `aggregated/dev.ts` with `...SVM_POOLS_DEV.<key>` in its\n * `peripheryInfo`. */\nexport const SVM_POOLS_DEV = {\n USDC_USDT: {\n [CHAIN.SOLANA]: {\n peripheryPool: \"G2j8vLu3ryzUqPYpknpBcBLDcFiiRmXtB7z9Dpg9dVxe\",\n poolAuthority: \"2Mvbo1TrsVeqyjQwNcdDDGjFNbwMk4tV8oD2TN2fV4Nw\",\n dust: \"4m1AdUZvYJUSMTYpFH8df1JrgHTqUeKA3Xf7DapB4VcX\",\n poolToken0Vault: \"BihGfVYmaT4KpiHiBLwH2ad9Q2ybYVHS2Bd3hQtzg486\",\n poolToken1Vault: \"3DW4k4ims6dFB2cXBk5m1uAfh1zowuj9CzBbF4jm1FRh\",\n manager: \"SGMSTk5t2gmiHKQjtb9XV6qviasgD5UKTsVMHLGCSZA\",\n tokenProgramId0: TOKEN_PROGRAM_ID,\n tokenProgramId1: TOKEN_PROGRAM_ID,\n token0: {\n address: \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\n symbol: \"USDC\",\n isNative: false,\n decimal: 6,\n chainId: CHAIN.SOLANA,\n },\n token1: {\n address: \"Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB\",\n symbol: \"USDT\",\n isNative: false,\n decimal: 6,\n chainId: CHAIN.SOLANA,\n },\n chain: \"SOLANA\",\n },\n },\n} satisfies Record<string, Partial<Record<SvmChain, SvmPeripheryInfo>>>;\n\n/** STAGING + PRODUCTION pool maps alias DEV for the same reason as\n * SVM_DEPLOYMENT_*. Replace with literal objects when an env diverges. */\nexport const SVM_POOLS_STAGING = SVM_POOLS_DEV;\nexport const SVM_POOLS_PRODUCTION = SVM_POOLS_DEV;\n","import { CHAIN, EnvMode } from \"../types\";\nimport type { SuiChain } from \"../types/chain-vm\";\nimport type { SuiPeripheryInfo } from \"./aggregated/_type_\";\n\n/** Deploy-wide Sui addresses. Per-pool object ids live in `SUI_POOLS_<mode>`\n * below; this struct holds the deploy-wide pieces shared across pools. */\nexport interface SuiDeployment {\n /** Sui package id that owns the periphery module. */\n peripheryPackage: string;\n}\n\nexport const SUI_DEPLOYMENT_DEV: Partial<Record<SuiChain, SuiDeployment>> = {\n [CHAIN.SUI]: {\n peripheryPackage:\n \"0x96e1d3897efee30bede047a14d186a952350d4759d3175f76ff6ac2c4a121901\",\n },\n};\n\n/** STAGING + PRODUCTION currently alias DEV — the v2 Sui deploy lives on\n * Sui mainnet at the package above, and all three envs point at it until\n * staging/prod ever fork off into separate deploys. */\nexport const SUI_DEPLOYMENT_STAGING = SUI_DEPLOYMENT_DEV;\nexport const SUI_DEPLOYMENT_PRODUCTION = SUI_DEPLOYMENT_DEV;\n\n/** Returns `null` for an unregistered SuiChain in the chosen mode. */\nexport function SuiDeploymentFor(\n chain: SuiChain,\n mode: EnvMode,\n): SuiDeployment | null {\n switch (mode) {\n case \"DEV\":\n return SUI_DEPLOYMENT_DEV[chain] ?? null;\n case \"STAGING\":\n return SUI_DEPLOYMENT_STAGING[chain] ?? null;\n case \"PRODUCTION\":\n return SUI_DEPLOYMENT_PRODUCTION[chain] ?? null;\n }\n}\n\n/** Per-pool Sui addresses, keyed by `[poolKey][SuiChain]`. `poolKey` matches\n * the key used by `POOL_INFO_Dev` (e.g. \"USDC_USDT\"). Mirrors `SVM_POOLS_DEV`.\n * - Adding a brand-new pool requires a new key here AND a new pool object\n * in `aggregated/dev.ts` with `...SUI_POOLS_DEV.<key>` in its\n * `peripheryInfo`. */\nexport const SUI_POOLS_DEV = {\n USDC_USDT: {\n [CHAIN.SUI]: {\n poolId:\n \"0xc014f7cb0a2604fb887d09165242828e6fe913f30d7ae2bea80199caed5ccbcb\",\n managerCapId:\n \"0xca34c6dff464f42a349294fa9fbe67a6d72eb999081db8de3fd56672b68863ee\",\n peripheryPackage:\n \"0x96e1d3897efee30bede047a14d186a952350d4759d3175f76ff6ac2c4a121901\",\n token0: {\n address:\n \"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC\",\n symbol: \"USDC\",\n isNative: false,\n decimal: 6,\n chainId: CHAIN.SUI,\n },\n token1: {\n address:\n \"0x375f70cf2ae4c00bf37117d0c85a2c71545e6ee05c4a5c7d282cd66a4504b068::usdt::USDT\",\n symbol: \"USDT\",\n isNative: false,\n decimal: 6,\n chainId: CHAIN.SUI,\n },\n chain: \"SUI\",\n },\n },\n} satisfies Record<string, Partial<Record<SuiChain, SuiPeripheryInfo>>>;\n\n/** STAGING + PRODUCTION pool maps alias DEV. Replace with literal objects\n * when an env diverges. */\nexport const SUI_POOLS_STAGING = SUI_POOLS_DEV;\nexport const SUI_POOLS_PRODUCTION = SUI_POOLS_DEV;\n","import { CHAIN } from \"../../types\";\nimport { KERNEL_POOL_USDC_USDT_Dev } from \"../kernel\";\nimport { SVM_POOLS_DEV } from \"../svm\";\nimport { SUI_POOLS_DEV } from \"../sui\";\nimport { PoolInfoType } from \"./_type_\";\n\nexport const POOL_INFO_Dev: PoolInfoType = {\n USDC_USDT: {\n kernelPool: KERNEL_POOL_USDC_USDT_Dev as `0x${string}`,\n token0: \"USDC\",\n token1: \"USDT\",\n feeBps: 1,\n peripheryInfo: {\n [CHAIN.ARBITRUM]: {\n token0: {\n address: \"0xaf88d065e77c8cC2239327C5EDb3A432268e5831\",\n symbol: \"USDC\",\n isNative: false,\n decimal: 6,\n chainId: CHAIN.ARBITRUM,\n },\n token1: {\n address: \"0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9\",\n symbol: \"USDT\",\n isNative: false,\n decimal: 6,\n chainId: CHAIN.ARBITRUM,\n },\n address: \"0x0433CCB013a590eA4231aAC9ddf05bb753c14127\",\n chain: \"ARBITRUM\",\n },\n ...SVM_POOLS_DEV.USDC_USDT,\n ...SUI_POOLS_DEV.USDC_USDT,\n },\n },\n};\n","import { POOL_INFO_Dev } from \"./dev\";\nimport { PoolInfoType } from \"./_type_\";\n\n/** v2 STAGING currently points at the same on-chain deploy as DEV (Solana\n * mainnet SAB…/SPP… + Sui mainnet package 0x96e1d3…); split into a\n * separate map only when staging and dev actually diverge. */\nexport const POOL_INFO_Staging: PoolInfoType = POOL_INFO_Dev;\n","import { POOL_INFO_Dev } from \"./dev\";\nimport { PoolInfoType } from \"./_type_\";\n\n/** v2 PRODUCTION currently points at the same on-chain deploy as DEV until\n * production forks off. Kernel manager / event emitter / EVM periphery\n * surfaces also alias DEV (see kernel.ts and periphery.ts). */\nexport const POOL_INFO_Production: PoolInfoType = POOL_INFO_Dev;\n","import { CHAIN, EnvMode, Token, TokenPair } from \"../../types\";\nimport type { PeripheryInfoFor } from \"./_type_\";\nimport { POOL_INFO_Dev } from \"./dev\";\nimport { POOL_INFO_Staging } from \"./staging\";\nimport { POOL_INFO_Production } from \"./production\";\nimport { PoolInfoType, PoolKey } from \"./_type_\";\n\nexport function getAllPoolInfo(mode: EnvMode = \"PRODUCTION\"): PoolInfoType {\n switch (mode) {\n case \"PRODUCTION\": return POOL_INFO_Production;\n case \"STAGING\": return POOL_INFO_Staging;\n case \"DEV\": return POOL_INFO_Dev;\n }\n}\n\nexport function getAllPoolKeys(mode: EnvMode = \"PRODUCTION\"): PoolKey[] {\n return Object.keys(getAllPoolInfo(mode));\n}\n\nexport function getPoolInfoByKey(key: PoolKey, mode: EnvMode = \"PRODUCTION\") {\n return getAllPoolInfo(mode)[key] ?? null;\n}\n\nexport function getSupportedChains(mode: EnvMode = \"PRODUCTION\"): CHAIN[] {\n const poolInfo = getAllPoolInfo(mode);\n const supportedChains = new Set<CHAIN>();\n for (const poolData of Object.values(poolInfo)) {\n for (const chainId of Object.keys(poolData.peripheryInfo)) {\n supportedChains.add(Number(chainId) as CHAIN);\n }\n }\n return Array.from(supportedChains).sort((a, b) => a - b);\n}\n\nexport function getSupportedPairs(\n chainId: CHAIN,\n mode: EnvMode = \"PRODUCTION\",\n): (TokenPair & { poolKey: PoolKey })[] {\n const poolInfo = getAllPoolInfo(mode);\n const supportedPairs: (TokenPair & { poolKey: PoolKey })[] = [];\n for (const [poolKey, poolData] of Object.entries(poolInfo)) {\n const peripheryData = poolData.peripheryInfo[chainId];\n if (peripheryData) {\n supportedPairs.push({\n token0: peripheryData.token0,\n token1: peripheryData.token1,\n poolKey,\n });\n }\n }\n return supportedPairs;\n}\n\nexport function getSupportedTokens(chainId: CHAIN, mode: EnvMode = \"PRODUCTION\"): Token[] {\n const supportedPairs = getSupportedPairs(chainId, mode);\n const tokens: Token[] = [];\n const seen = new Set<string>();\n for (const { token0, token1 } of supportedPairs) {\n for (const t of [token0, token1]) {\n const key = t.address.toLowerCase();\n if (!seen.has(key)) {\n seen.add(key);\n tokens.push(t);\n }\n }\n }\n return tokens;\n}\n\nexport function getOtherTokensInPairs(\n chainId: CHAIN,\n tokenAddress: string,\n mode: EnvMode = \"PRODUCTION\",\n): Token[] {\n const supportedPairs = getSupportedPairs(chainId, mode);\n const result: Token[] = [];\n const seen = new Set<string>();\n const needle = tokenAddress.toLowerCase();\n for (const { token0, token1 } of supportedPairs) {\n let other: Token | null = null;\n if (token0.address.toLowerCase() === needle) other = token1;\n else if (token1.address.toLowerCase() === needle) other = token0;\n if (other && !seen.has(other.address.toLowerCase())) {\n seen.add(other.address.toLowerCase());\n result.push(other);\n }\n }\n return result;\n}\n\nexport function kernelPoolToPoolKey(kernelPool: `0x${string}`, mode: EnvMode = \"PRODUCTION\"): PoolKey {\n const info = getAllPoolInfo(mode);\n const lower = kernelPool.toLowerCase();\n for (const [key, poolData] of Object.entries(info)) {\n if (poolData.kernelPool.toLowerCase() === lower) return key;\n }\n throw new Error(`${mode} kernelPoolToPoolKey()::Unknown kernelPool ${kernelPool}`);\n}\n\nexport function getPeripheryDetailsByKernelPoolAndChainId<K extends CHAIN>(\n kernelPool: `0x${string}`,\n chainId: K,\n mode?: EnvMode,\n): PeripheryInfoFor<K> | null;\nexport function getPeripheryDetailsByKernelPoolAndChainId(\n kernelPool: `0x${string}`,\n chainId: number,\n mode?: EnvMode,\n): PeripheryInfoFor<CHAIN> | null;\nexport function getPeripheryDetailsByKernelPoolAndChainId(\n kernelPool: `0x${string}`,\n chainId: number,\n mode: EnvMode = \"PRODUCTION\",\n): PeripheryInfoFor<CHAIN> | null {\n const poolKey = kernelPoolToPoolKey(kernelPool, mode);\n const info = getAllPoolInfo(mode);\n return (info[poolKey]?.peripheryInfo[chainId as CHAIN] ?? null) as PeripheryInfoFor<CHAIN> | null;\n}\n\n/**\n * Find tokens by case-insensitive symbol across one or more chains.\n *\n * Same token symbol on different chains has different addresses, so the\n * return type is `Array<Token>` (not a single record) — the same\n * `(symbol, chainId)` pair always points at one token, but\n * `(symbol, chainIds[])` may produce many.\n *\n * Omit `chainIds` to search every supported chain.\n */\nexport function findTokensBySymbol(args: {\n symbol: string;\n chainIds?: readonly CHAIN[];\n mode?: EnvMode;\n}): Token[] {\n const { symbol, chainIds, mode = \"PRODUCTION\" } = args;\n const normalized = symbol.toLowerCase();\n const chains = chainIds ?? getSupportedChains(mode);\n const out: Token[] = [];\n const seen = new Set<string>();\n for (const chainId of chains) {\n for (const t of getSupportedTokens(chainId, mode)) {\n if (t.symbol.toLowerCase() !== normalized) continue;\n const key = `${t.chainId}:${t.address.toLowerCase()}`;\n if (seen.has(key)) continue;\n seen.add(key);\n out.push(t);\n }\n }\n return out;\n}\n\n/**\n * Reverse lookup: return the symbol of the token at `address` on\n * `chainId`, or `null` if no supported token matches that pair.\n *\n * Address comparison is case-insensitive; symbol is returned in the\n * casing the deployment table records.\n */\nexport function getTokenSymbol(\n address: string,\n chainId: CHAIN,\n mode: EnvMode = \"PRODUCTION\",\n): string | null {\n const needle = address.toLowerCase();\n for (const t of getSupportedTokens(chainId, mode)) {\n if (t.address.toLowerCase() === needle) return t.symbol;\n }\n return null;\n}\n","import { bs58Decode, bs58Encode } from \"../utils/bs58\";\nimport { VM } from \"../types\";\n\nexport function base58ToBytes32(base58Str: string): `0x${string}` {\n const decoded = bs58Decode(base58Str);\n const addressBytes = new Uint8Array(32);\n const startPos = Math.max(0, 32 - decoded.length);\n addressBytes.set(decoded.slice(-32), startPos);\n return (\"0x\" + Buffer.from(addressBytes).toString(\"hex\").toLowerCase()) as `0x${string}`;\n}\n\nexport function base58ToHex(base58Str: string): `0x${string}` {\n const decoded = bs58Decode(base58Str);\n return `0x${Buffer.from(decoded).toString(\"hex\").toLowerCase()}` as `0x${string}`;\n}\n\nexport function hexToBase58(hexString: `0x${string}`): string {\n return bs58Encode(Buffer.from(hexString.slice(2), \"hex\"));\n}\n\nexport function bytes32ToBase58(hexStr: string): string {\n const hexWithoutPrefix = hexStr.startsWith(\"0x\") ? hexStr.slice(2) : hexStr;\n const addressBytes = Buffer.from(hexWithoutPrefix, \"hex\");\n const firstNonZero = addressBytes.findIndex((byte) => byte !== 0);\n const trimmed = firstNonZero < 0 ? addressBytes : addressBytes.subarray(firstNonZero);\n return bs58Encode(trimmed);\n}\n\n// Hex-validation primitives — used internally by `evmAddressToBytes32` and\n// the bytes32 path below. Not exported: consumers should call the\n// VM-aware adapter (`toBytes32Address`, `evmAddressToBytes32`) instead of\n// rolling their own validation.\nconst bytes32HexRegex = /^(?:0x)?[0-9a-fA-F]{64}$/;\n\nfunction isHexString(str: unknown): boolean {\n return typeof str === \"string\" && /^0x[0-9a-fA-F]+$/.test(str);\n}\n\nfunction isHexStringLoose(str: unknown): boolean {\n return typeof str === \"string\" && /^(?:0x)?[0-9a-fA-F]+$/.test(str);\n}\n\nvoid isHexString;\nvoid isHexStringLoose;\n\nexport function evmAddressToBytes32(address: string): `0x${string}` {\n if (!address.startsWith(\"0x\") && !address.startsWith(\"0X\")) {\n throw new TypeError(`evmAddressToBytes32: expected 0x-prefixed address, got \"${address}\"`);\n }\n return `0x${BigInt(address).toString(16).padStart(64, \"0\")}`.toLowerCase() as `0x${string}`;\n}\n\nexport function bytes32ToEvmAddress(bytes32: string): `0x${string}` {\n const userBigInt = BigInt(bytes32);\n const addressBigInt = userBigInt & BigInt(\"0xffffffffffffffffffffffffffffffffffffffff\");\n return (`0x${addressBigInt.toString(16).padStart(40, \"0\")}`).toLowerCase() as `0x${string}`;\n}\n\n/**\n * Decode the canonical SVM-side encoding of an EVM address back to its\n * 0x-prefixed lowercase EVM form.\n *\n * SVM periphery contracts store cross-VM addresses (kernel pool, kernel\n * factory, etc.) as base58 of the address left-padded to bytes32 — the\n * \"bytes32-base58\" form produced at deploy time by\n * `evmAddressToBytes32Base58`. SDK readers reverse it: base58-decode to\n * 32 bytes, then truncate to the trailing 20-byte EVM address.\n *\n * Composition of two existing primitives, named for the common case so\n * readers don't reinvent it. Any reader pulling an EVM address out of an\n * SVM Anchor account should call this.\n */\nexport function svmBytes32Base58ToEvmAddress(value: string): `0x${string}` {\n return bytes32ToEvmAddress(base58ToBytes32(value));\n}\n\nexport function toBase58(buffer: Buffer): string {\n return bs58Encode(buffer);\n}\n\nexport function bufferFromBase58(base58String: string): Buffer {\n return Buffer.from(bs58Decode(base58String));\n}\n\nexport function toBytes32Address(rawAddress: string, vmType: VM): `0x${string}` {\n switch (vmType) {\n case VM.EVM:\n return evmAddressToBytes32(rawAddress);\n case VM.SVM:\n return base58ToBytes32(rawAddress);\n case VM.SuiVM:\n if (!bytes32HexRegex.test(rawAddress)) {\n throw new TypeError(`toBytes32Address(SuiVM): expected 64-hex-char address, got \"${rawAddress}\"`);\n }\n return rawAddress as `0x${string}`;\n default:\n throw new Error(`toBytes32Address():Unsupported vmType=${vmType}`);\n }\n}\n\nexport function fromBytes32Address(bytes32Address: `0x${string}`, vmType: VM): string {\n switch (vmType) {\n case VM.EVM:\n return bytes32ToEvmAddress(bytes32Address);\n case VM.SVM:\n return bytes32ToBase58(bytes32Address);\n case VM.SuiVM:\n return bytes32Address;\n default:\n throw new Error(`fromBytes32Address():Unsupported vmType=${vmType}`);\n }\n}\n","const BASE58_ALPHABET = \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\";\n\nfunction base(ALPHABET: string) {\n if (ALPHABET.length >= 255) throw new TypeError(\"Alphabet too long\");\n\n const BASE_MAP = new Uint8Array(256).fill(255);\n for (let i = 0; i < ALPHABET.length; i++) {\n const xc = ALPHABET.charCodeAt(i);\n if (BASE_MAP[xc] !== 255) throw new TypeError(ALPHABET.charAt(i) + \" is ambiguous\");\n BASE_MAP[xc] = i;\n }\n\n const BASE = ALPHABET.length;\n const LEADER = ALPHABET.charAt(0);\n const FACTOR = Math.log(BASE) / Math.log(256);\n const iFACTOR = Math.log(256) / Math.log(BASE);\n\n function encode(source: Uint8Array | number[]): string {\n if (source instanceof Uint8Array) {\n // ok\n } else if (ArrayBuffer.isView(source)) {\n source = new Uint8Array((source as ArrayBufferView).buffer, (source as ArrayBufferView).byteOffset, (source as ArrayBufferView).byteLength);\n } else if (Array.isArray(source)) {\n source = Uint8Array.from(source);\n }\n if (!(source instanceof Uint8Array)) throw new TypeError(\"Expected Uint8Array\");\n if (source.length === 0) return \"\";\n\n let zeroes = 0;\n let length = 0;\n let pbegin = 0;\n const pend = source.length;\n\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++;\n zeroes++;\n }\n\n const size = ((pend - pbegin) * iFACTOR + 1) >>> 0;\n const b58 = new Uint8Array(size);\n\n while (pbegin !== pend) {\n let carry = source[pbegin]!;\n let i = 0;\n for (let it1 = size - 1; (carry !== 0 || i < length) && it1 !== -1; it1--, i++) {\n carry += (256 * b58[it1]!) >>> 0;\n b58[it1] = carry % BASE >>> 0;\n carry = (carry / BASE) >>> 0;\n }\n if (carry !== 0) throw new Error(\"Non-zero carry\");\n length = i;\n pbegin++;\n }\n\n let it2 = size - length;\n while (it2 !== size && b58[it2] === 0) it2++;\n\n let str = LEADER.repeat(zeroes);\n for (; it2 < size; ++it2) str += ALPHABET.charAt(b58[it2]!);\n return str;\n }\n\n function decodeUnsafe(source: string): Uint8Array | undefined {\n if (typeof source !== \"string\") throw new TypeError(\"Expected String\");\n if (source.length === 0) return new Uint8Array();\n\n let psz = 0;\n let zeroes = 0;\n let length = 0;\n while (source[psz] === LEADER) {\n zeroes++;\n psz++;\n }\n\n const size = ((source.length - psz) * FACTOR + 1) >>> 0;\n const b256 = new Uint8Array(size);\n\n while (psz < source.length) {\n const charCode = source.charCodeAt(psz);\n if (charCode > 255) return;\n let carry = BASE_MAP[charCode]!;\n if (carry === 255) return;\n let i = 0;\n for (let it3 = size - 1; (carry !== 0 || i < length) && it3 !== -1; it3--, i++) {\n carry += (BASE * b256[it3]!) >>> 0;\n b256[it3] = carry % 256 >>> 0;\n carry = (carry / 256) >>> 0;\n }\n if (carry !== 0) throw new Error(\"Non-zero carry\");\n length = i;\n psz++;\n }\n\n let it4 = size - length;\n while (it4 !== size && b256[it4] === 0) it4++;\n\n const vch = new Uint8Array(zeroes + (size - it4));\n let j = zeroes;\n while (it4 !== size) vch[j++] = b256[it4++]!;\n return vch;\n }\n\n function decode(source: string): Uint8Array {\n const buffer = decodeUnsafe(source);\n if (buffer) return buffer;\n throw new Error(\"Non-base\" + BASE + \" character\");\n }\n\n return { encode, decode, decodeUnsafe };\n}\n\nconst codec = base(BASE58_ALPHABET);\nexport const bs58Encode = codec.encode;\nexport const bs58Decode = codec.decode;\n","/**\n * Base class for all errors originating from `@skate-org/amm-*` packages.\n *\n * Callers can use `err instanceof SdkError` to catch any SDK-origin failure\n * without needing to know the specific subclass. Subclasses live in the\n * package closest to their domain:\n *\n * - `ApiError` / `NotFoundError` / `NotImplementedError` — `@skate-org/amm-api-v2`\n * - `EvmReadError` / `EvmWriteError` — `@skate-org/amm-evm-v2`\n *\n * Each subclass sets its own `.name`; this base only defines the identity.\n */\nexport class SdkError extends Error {\n override readonly name: string = \"SdkError\";\n\n constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n }\n}\n","/**\n * Pure-BigInt port of Uniswap v3-core `TickMath.sol`.\n *\n * Canonical source:\n * https://github.com/Uniswap/v3-core/blob/6562c52e8f75f0c10f9deaf44861847585fc8129/contracts/libraries/TickMath.sol\n *\n * Computes sqrt price for ticks of size 1.0001, i.e. sqrt(1.0001^tick) as\n * fixed point Q64.96 numbers, and the inverse.\n *\n * Solidity uses `uint256` / `uint160` / `int24` with wrap-on-overflow inside\n * `unchecked` blocks. We emulate that by doing arithmetic as BigInt and then\n * ANDing with `MAX_UINT256` / `MAX_UINT128` as needed. All multipliers and\n * hex constants are copied verbatim from the canonical source — do not\n * simplify.\n */\n\nconst MAX_UINT256 = (1n << 256n) - 1n;\nconst Q160_MASK = (1n << 160n) - 1n;\nconst Q256_MOD = 1n << 256n;\n\n/** Minimum tick passable to `getSqrtRatioAtTick`, `log_{1.0001}(2^-128)`. */\nexport const MIN_TICK = -887272;\n\n/** Maximum tick passable to `getSqrtRatioAtTick`, `log_{1.0001}(2^128)`. */\nexport const MAX_TICK = 887272;\n\n/** Minimum value returnable from `getSqrtRatioAtTick`. Equals `getSqrtRatioAtTick(MIN_TICK)`. */\nexport const MIN_SQRT_RATIO = 4295128739n;\n\n/** Maximum value returnable from `getSqrtRatioAtTick`. Equals `getSqrtRatioAtTick(MAX_TICK)`. */\nexport const MAX_SQRT_RATIO =\n 1461446703485210103287273052203988822378723970342n;\n\n/** Strict-inclusive lower bound for a user-supplied `sqrtPriceLimitX96`.\n * The periphery contract checks `sqrtPriceLimit > MIN_SQRT_RATIO`, so the\n * smallest valid value is `MIN_SQRT_RATIO + 1`. SVM/Sui validators use this. */\nexport const MIN_SQRT_PRICE_LIMIT = MIN_SQRT_RATIO + 1n;\n\n/** Strict-inclusive upper bound for a user-supplied `sqrtPriceLimitX96`. */\nexport const MAX_SQRT_PRICE_LIMIT = MAX_SQRT_RATIO - 1n;\n\n/** v1-compat aliases of the strict-inclusive sqrt-price bounds. The\n * `_X96` names match the historical `@skate-org/skate-app-amm` surface. */\nexport const MIN_SQRT_PRICE_X96 = MIN_SQRT_PRICE_LIMIT;\nexport const MAX_SQRT_PRICE_X96 = MAX_SQRT_PRICE_LIMIT;\n\n/** Geometric tick base — each tick is a 1.0001× step in price. */\nexport const TICK_VALUE = 1.0001;\n\n/** Price-edge constants for the mint-quote API (open-interval ends). */\nexport const PRICE_ZERO = 0;\nexport const PRICE_INF = 2 ** 32 - 1;\n\n/**\n * Calculates `sqrt(1.0001^tick) * 2^96` as a Q64.96 `uint160`.\n *\n * @throws if `|tick| > MAX_TICK`.\n */\nexport function getSqrtRatioAtTick(tick: number): bigint {\n if (!Number.isInteger(tick)) {\n throw new Error(\"TickMath: tick must be an integer\");\n }\n const absTick = BigInt(tick < 0 ? -tick : tick);\n if (absTick > BigInt(MAX_TICK)) {\n throw new Error(\"T\"); // mirror Solidity `revert T()`\n }\n\n // Seed: odd bit → first constant; even → 2^128.\n let ratio =\n (absTick & 0x1n) !== 0n\n ? 0xfffcb933bd6fad37aa2d162d1a594001n\n : 0x100000000000000000000000000000000n;\n\n // Each `if` below: if the corresponding bit of absTick is set, multiply\n // ratio by the next magic constant and shift-right by 128. Emulate\n // Solidity's uint256 wrap with a mask after multiplication.\n if ((absTick & 0x2n) !== 0n)\n ratio = ((ratio * 0xfff97272373d413259a46990580e213an) & MAX_UINT256) >> 128n;\n if ((absTick & 0x4n) !== 0n)\n ratio = ((ratio * 0xfff2e50f5f656932ef12357cf3c7fdccn) & MAX_UINT256) >> 128n;\n if ((absTick & 0x8n) !== 0n)\n ratio = ((ratio * 0xffe5caca7e10e4e61c3624eaa0941cd0n) & MAX_UINT256) >> 128n;\n if ((absTick & 0x10n) !== 0n)\n ratio = ((ratio * 0xffcb9843d60f6159c9db58835c926644n) & MAX_UINT256) >> 128n;\n if ((absTick & 0x20n) !== 0n)\n ratio = ((ratio * 0xff973b41fa98c081472e6896dfb254c0n) & MAX_UINT256) >> 128n;\n if ((absTick & 0x40n) !== 0n)\n ratio = ((ratio * 0xff2ea16466c96a3843ec78b326b52861n) & MAX_UINT256) >> 128n;\n if ((absTick & 0x80n) !== 0n)\n ratio = ((ratio * 0xfe5dee046a99a2a811c461f1969c3053n) & MAX_UINT256) >> 128n;\n if ((absTick & 0x100n) !== 0n)\n ratio = ((ratio * 0xfcbe86c7900a88aedcffc83b479aa3a4n) & MAX_UINT256) >> 128n;\n if ((absTick & 0x200n) !== 0n)\n ratio = ((ratio * 0xf987a7253ac413176f2b074cf7815e54n) & MAX_UINT256) >> 128n;\n if ((absTick & 0x400n) !== 0n)\n ratio = ((ratio * 0xf3392b0822b70005940c7a398e4b70f3n) & MAX_UINT256) >> 128n;\n if ((absTick & 0x800n) !== 0n)\n ratio = ((ratio * 0xe7159475a2c29b7443b29c7fa6e889d9n) & MAX_UINT256) >> 128n;\n if ((absTick & 0x1000n) !== 0n)\n ratio = ((ratio * 0xd097f3bdfd2022b8845ad8f792aa5825n) & MAX_UINT256) >> 128n;\n if ((absTick & 0x2000n) !== 0n)\n ratio = ((ratio * 0xa9f746462d870fdf8a65dc1f90e061e5n) & MAX_UINT256) >> 128n;\n if ((absTick & 0x4000n) !== 0n)\n ratio = ((ratio * 0x70d869a156d2a1b890bb3df62baf32f7n) & MAX_UINT256) >> 128n;\n if ((absTick & 0x8000n) !== 0n)\n ratio = ((ratio * 0x31be135f97d08fd981231505542fcfa6n) & MAX_UINT256) >> 128n;\n if ((absTick & 0x10000n) !== 0n)\n ratio = ((ratio * 0x9aa508b5b7a84e1c677de54f3e99bc9n) & MAX_UINT256) >> 128n;\n if ((absTick & 0x20000n) !== 0n)\n ratio = ((ratio * 0x5d6af8dedb81196699c329225ee604n) & MAX_UINT256) >> 128n;\n if ((absTick & 0x40000n) !== 0n)\n ratio = ((ratio * 0x2216e584f5fa1ea926041bedfe98n) & MAX_UINT256) >> 128n;\n if ((absTick & 0x80000n) !== 0n)\n ratio = ((ratio * 0x48a170391f7dc42444e8fa2n) & MAX_UINT256) >> 128n;\n\n if (tick > 0) ratio = MAX_UINT256 / ratio;\n\n // Divides by 1<<32 rounding up to go from Q128.128 to Q128.96. Downcast to\n // uint160 is safe by construction of the tick-range constraint.\n const shifted = ratio >> 32n;\n const remainder = ratio & ((1n << 32n) - 1n);\n const sqrtPriceX96 = remainder === 0n ? shifted : shifted + 1n;\n return sqrtPriceX96 & Q160_MASK;\n}\n\n/**\n * Calculates the greatest tick value such that `getSqrtRatioAtTick(tick) <= sqrtPriceX96`.\n *\n * @throws if `sqrtPriceX96 < MIN_SQRT_RATIO` or `sqrtPriceX96 >= MAX_SQRT_RATIO`.\n */\nexport function getTickAtSqrtRatio(sqrtPriceX96: bigint): number {\n if (sqrtPriceX96 < MIN_SQRT_RATIO || sqrtPriceX96 >= MAX_SQRT_RATIO) {\n throw new Error(\"R\"); // mirror Solidity `revert R()`\n }\n\n const ratio = sqrtPriceX96 << 32n;\n\n // Compute msb of `ratio` via descending binary search, matching the\n // hand-rolled assembly in the canonical source.\n let r = ratio;\n let msb = 0n;\n\n // Each block: if r > threshold, add bit to msb and right-shift r by that amount.\n {\n const f = r > 0xffffffffffffffffffffffffffffffffn ? 128n : 0n;\n msb |= f;\n r >>= f;\n }\n {\n const f = r > 0xffffffffffffffffn ? 64n : 0n;\n msb |= f;\n r >>= f;\n }\n {\n const f = r > 0xffffffffn ? 32n : 0n;\n msb |= f;\n r >>= f;\n }\n {\n const f = r > 0xffffn ? 16n : 0n;\n msb |= f;\n r >>= f;\n }\n {\n const f = r > 0xffn ? 8n : 0n;\n msb |= f;\n r >>= f;\n }\n {\n const f = r > 0xfn ? 4n : 0n;\n msb |= f;\n r >>= f;\n }\n {\n const f = r > 0x3n ? 2n : 0n;\n msb |= f;\n r >>= f;\n }\n {\n const f = r > 0x1n ? 1n : 0n;\n msb |= f;\n // no shift in canonical source's final block\n }\n\n if (msb >= 128n) r = ratio >> (msb - 127n);\n else r = (ratio << (127n - msb)) & MAX_UINT256;\n\n // Signed 256-bit log_2 in Q128.128. BigInt left-shift on a negative value\n // preserves the signed bit-pattern; ANDing with MAX_UINT256 truncates to\n // 256 bits, yielding the exact two's-complement representation Solidity's\n // int256 bit ops expect (verified equal to the explicit modular form for\n // msb in [0, 255]).\n const offset = msb - 128n;\n let log_2 = (offset << 64n) & MAX_UINT256;\n\n // 14 iterations of the log_2 refinement loop.\n for (let i = 0; i < 14; i++) {\n r = (r * r) >> 127n;\n const f = r >> 128n;\n log_2 |= f << BigInt(63 - i);\n r >>= f;\n }\n\n // Multiply by a constant. In Solidity: `log_2 * 255738958999603826347141`.\n // log_2 is int256; we emulate signed-256-mul by interpreting log_2 as signed.\n const log_2_signed = toInt256(log_2);\n const log_sqrt10001 = log_2_signed * 255738958999603826347141n;\n\n const tickLowBig =\n (log_sqrt10001 - 3402992956809132418596140100660247210n) >> 128n;\n const tickHiBig =\n (log_sqrt10001 + 291339464771989622907027621153398088495n) >> 128n;\n\n const tickLow = toInt24(tickLowBig);\n const tickHi = toInt24(tickHiBig);\n\n if (tickLow === tickHi) return tickLow;\n return getSqrtRatioAtTick(tickHi) <= sqrtPriceX96 ? tickHi : tickLow;\n}\n\n/** Reinterpret a 256-bit unsigned BigInt as a two's-complement signed int256. */\nfunction toInt256(x: bigint): bigint {\n const masked = x & MAX_UINT256;\n return masked >= 1n << 255n ? masked - Q256_MOD : masked;\n}\n\n/**\n * Truncate a (possibly signed) BigInt to int24 range, matching Solidity's\n * downcast (which just takes the low 24 bits and reinterprets as signed).\n */\nfunction toInt24(x: bigint): number {\n const mask = (1n << 24n) - 1n;\n const truncated = x & mask;\n const signed =\n truncated >= 1n << 23n ? truncated - (1n << 24n) : truncated;\n return Number(signed);\n}\n\n/** Approximate `1.0001^tick` as a JS number. Lossy — for exact quote math\n * pass the tick directly through `getSqrtRatioAtTick`, or use a fixed-point\n * library. Used by the mint-quote API's price-bound display. */\nexport function getPriceAtTick(tick: number): number {\n const sqrtPriceX96 = getSqrtRatioAtTick(tick);\n const Q96 = 1n << 96n;\n return (Number(sqrtPriceX96) / Number(Q96)) ** 2;\n}\n\n/** Inverse of `getPriceAtTick`. Lossy. Throws on negative input. */\nexport function getTickAtPrice(price: number): number {\n if (price < 0) {\n throw new Error(`getTickAtPrice: invalid price=${price}`);\n }\n return Math.round(Math.log(price) / Math.log(TICK_VALUE));\n}\n\n","/**\n * Pure-BigInt port of Uniswap v3-core `FullMath.sol`.\n *\n * Canonical source:\n * https://github.com/Uniswap/v3-core/blob/6562c52e8f75f0c10f9deaf44861847585fc8129/contracts/libraries/FullMath.sol\n *\n * Solidity's FullMath.sol computes `floor(a*b/denom)` and `ceil(a*b/denom)`\n * for 256-bit unsigned values with full 512-bit intermediate precision, and\n * reverts if the 256-bit result overflows or if `denom == 0`.\n *\n * In JS BigInt we have arbitrary precision, so the implementation is far\n * simpler: compute the full product, divide, and explicitly check that the\n * final result fits in 256 bits.\n */\n\nconst MAX_UINT256 = (1n << 256n) - 1n;\n\n/**\n * Returns `floor(a * b / denom)` under Solidity uint256 semantics.\n *\n * Throws if `denom == 0` or if the quotient would not fit in 256 bits.\n */\nexport function mulDiv(a: bigint, b: bigint, denom: bigint): bigint {\n if (denom === 0n) {\n throw new Error(\"FullMath: division by zero\");\n }\n // In Solidity the inputs and result are uint256; negatives are not valid here.\n if (a < 0n || b < 0n || denom < 0n) {\n throw new Error(\"FullMath: negative input\");\n }\n const product = a * b;\n const result = product / denom;\n if (result > MAX_UINT256) {\n throw new Error(\"FullMath: result overflows uint256\");\n }\n return result;\n}\n\n/**\n * Returns `ceil(a * b / denom)` under Solidity uint256 semantics.\n *\n * Throws if `denom == 0`, if the intermediate `mulDiv` would overflow, or if\n * rounding up pushes the result past `uint256` range.\n */\nexport function mulDivRoundingUp(\n a: bigint,\n b: bigint,\n denom: bigint,\n): bigint {\n if (denom === 0n) {\n throw new Error(\"FullMath: division by zero\");\n }\n if (a < 0n || b < 0n || denom < 0n) {\n throw new Error(\"FullMath: negative input\");\n }\n const product = a * b;\n const quotient = product / denom;\n if (quotient > MAX_UINT256) {\n throw new Error(\"FullMath: result overflows uint256\");\n }\n if (product % denom !== 0n) {\n if (quotient === MAX_UINT256) {\n throw new Error(\"FullMath: rounding up overflows uint256\");\n }\n return quotient + 1n;\n }\n return quotient;\n}\n","/**\n * Pure-BigInt port of Uniswap v3-core `SqrtPriceMath.sol`.\n *\n * Canonical source:\n * https://github.com/Uniswap/v3-core/blob/6562c52e8f75f0c10f9deaf44861847585fc8129/contracts/libraries/SqrtPriceMath.sol\n *\n * Functions based on Q64.96 sqrt price and liquidity. Contains the math\n * that uses square root of price as a Q64.96 and liquidity to compute\n * deltas. Rounding modes match the canonical source exactly — change only\n * if the canonical Solidity changes.\n */\n\nimport { mulDiv, mulDivRoundingUp } from \"./fullMath\";\n\nconst MAX_UINT128 = (1n << 128n) - 1n;\nconst MAX_UINT160 = (1n << 160n) - 1n;\nconst MAX_UINT256 = (1n << 256n) - 1n;\nconst Q96_RESOLUTION = 96n;\n/** Q64.96 fixed-point scale (`2^96`). Exported for downstream liquidity math. */\nexport const Q96 = 1n << 96n;\n\nfunction assertUint160(x: bigint, name: string): void {\n if (x < 0n || x > MAX_UINT160) {\n throw new Error(`SqrtPriceMath: ${name} out of uint160 range`);\n }\n}\n\nfunction assertUint128(x: bigint, name: string): void {\n if (x < 0n || x > MAX_UINT128) {\n throw new Error(`SqrtPriceMath: ${name} out of uint128 range`);\n }\n}\n\nfunction assertUint256(x: bigint, name: string): void {\n if (x < 0n || x > MAX_UINT256) {\n throw new Error(`SqrtPriceMath: ${name} out of uint256 range`);\n }\n}\n\n/** Solidity's `UnsafeMath.divRoundingUp(x, y)` = `(x + y - 1) / y` with unchecked math. */\nfunction divRoundingUp(x: bigint, y: bigint): bigint {\n if (y === 0n) throw new Error(\"SqrtPriceMath: div by zero\");\n return x / y + (x % y === 0n ? 0n : 1n);\n}\n\n/** Cast a uint256 value to uint160, revert on overflow. Mirrors SafeCast.toUint160. */\nfunction toUint160(x: bigint): bigint {\n if (x > MAX_UINT160) throw new Error(\"SqrtPriceMath: toUint160 overflow\");\n return x;\n}\n\n/**\n * Gets the next sqrt price given a delta of token0.\n *\n * Always rounds up. See canonical source for the two-branch formula and\n * overflow-fallback rationale.\n */\nexport function getNextSqrtPriceFromAmount0RoundingUp(\n sqrtPX96: bigint,\n liquidity: bigint,\n amount: bigint,\n add: boolean,\n): bigint {\n assertUint160(sqrtPX96, \"sqrtPX96\");\n assertUint128(liquidity, \"liquidity\");\n assertUint256(amount, \"amount\");\n\n if (amount === 0n) return sqrtPX96;\n const numerator1 = liquidity << Q96_RESOLUTION;\n\n if (add) {\n // First branch: full-precision formula if `amount * sqrtPX96` fits in\n // uint256. Solidity detects overflow by checking `product/amount == sqrtPX96`.\n const product = (amount * sqrtPX96) & MAX_UINT256;\n const noOverflow = amount === 0n || product / amount === sqrtPX96;\n if (noOverflow) {\n const denominator = numerator1 + product;\n if (denominator >= numerator1) {\n // always fits in 160 bits\n return toUint160(mulDivRoundingUp(numerator1, sqrtPX96, denominator));\n }\n }\n // Fallback: `liquidity / ((liquidity / sqrtPX96) + amount)`, rounded up.\n // Solidity uses UnsafeMath.divRoundingUp here; wrap-semantics on the\n // denominator are acceptable because overflow = revert in our port\n // (BigInt never wraps), so we simply let the division proceed.\n if (sqrtPX96 === 0n) throw new Error(\"SqrtPriceMath: sqrtPX96 == 0\");\n const denom = numerator1 / sqrtPX96 + amount;\n return toUint160(divRoundingUp(numerator1, denom));\n } else {\n // Remove token0: must not under/overflow denominator.\n const product = (amount * sqrtPX96) & MAX_UINT256;\n const noOverflow = amount === 0n || product / amount === sqrtPX96;\n if (!noOverflow || numerator1 <= product) {\n throw new Error(\"SqrtPriceMath: getNextSqrtPriceFromAmount0 denom <= 0\");\n }\n const denominator = numerator1 - product;\n return toUint160(mulDivRoundingUp(numerator1, sqrtPX96, denominator));\n }\n}\n\n/**\n * Gets the next sqrt price given a delta of token1.\n *\n * Always rounds down. See canonical source for the branch selection based\n * on `amount <= type(uint160).max`.\n */\nexport function getNextSqrtPriceFromAmount1RoundingDown(\n sqrtPX96: bigint,\n liquidity: bigint,\n amount: bigint,\n add: boolean,\n): bigint {\n assertUint160(sqrtPX96, \"sqrtPX96\");\n assertUint128(liquidity, \"liquidity\");\n assertUint256(amount, \"amount\");\n\n if (add) {\n const quotient =\n amount <= MAX_UINT160\n ? (amount << Q96_RESOLUTION) / liquidity\n : mulDiv(amount, Q96, liquidity);\n return toUint160(sqrtPX96 + quotient);\n } else {\n const quotient =\n amount <= MAX_UINT160\n ? divRoundingUp(amount << Q96_RESOLUTION, liquidity)\n : mulDivRoundingUp(amount, Q96, liquidity);\n if (sqrtPX96 <= quotient) {\n throw new Error(\"SqrtPriceMath: sqrtPX96 <= quotient\");\n }\n // always fits 160 bits\n return sqrtPX96 - quotient;\n }\n}\n\n/**\n * Gets the next sqrt price given an input amount of token0 or token1.\n *\n * @throws if `sqrtPX96 <= 0`, `liquidity <= 0`, or the next price is out of bounds.\n */\nexport function getNextSqrtPriceFromInput(\n sqrtPX96: bigint,\n liquidity: bigint,\n amountIn: bigint,\n zeroForOne: boolean,\n): bigint {\n if (sqrtPX96 <= 0n) throw new Error(\"SqrtPriceMath: sqrtPX96 must be > 0\");\n if (liquidity <= 0n)\n throw new Error(\"SqrtPriceMath: liquidity must be > 0\");\n\n return zeroForOne\n ? getNextSqrtPriceFromAmount0RoundingUp(sqrtPX96, liquidity, amountIn, true)\n : getNextSqrtPriceFromAmount1RoundingDown(\n sqrtPX96,\n liquidity,\n amountIn,\n true,\n );\n}\n\n/**\n * Gets the next sqrt price given an output amount of token0 or token1.\n *\n * @throws if `sqrtPX96 <= 0`, `liquidity <= 0`, or the next price is out of bounds.\n */\nexport function getNextSqrtPriceFromOutput(\n sqrtPX96: bigint,\n liquidity: bigint,\n amountOut: bigint,\n zeroForOne: boolean,\n): bigint {\n if (sqrtPX96 <= 0n) throw new Error(\"SqrtPriceMath: sqrtPX96 must be > 0\");\n if (liquidity <= 0n)\n throw new Error(\"SqrtPriceMath: liquidity must be > 0\");\n\n return zeroForOne\n ? getNextSqrtPriceFromAmount1RoundingDown(\n sqrtPX96,\n liquidity,\n amountOut,\n false,\n )\n : getNextSqrtPriceFromAmount0RoundingUp(\n sqrtPX96,\n liquidity,\n amountOut,\n false,\n );\n}\n\n/**\n * Amount0 delta between two sqrt prices for a given liquidity.\n *\n * `liquidity * (sqrt(upper) - sqrt(lower)) / (sqrt(upper) * sqrt(lower))`.\n */\nexport function getAmount0Delta(\n sqrtRatioAX96: bigint,\n sqrtRatioBX96: bigint,\n liquidity: bigint,\n roundUp: boolean,\n): bigint {\n assertUint160(sqrtRatioAX96, \"sqrtRatioAX96\");\n assertUint160(sqrtRatioBX96, \"sqrtRatioBX96\");\n assertUint128(liquidity, \"liquidity\");\n\n let a = sqrtRatioAX96;\n let b = sqrtRatioBX96;\n if (a > b) {\n [a, b] = [b, a];\n }\n\n if (a === 0n) throw new Error(\"SqrtPriceMath: sqrtRatio must be > 0\");\n\n const numerator1 = liquidity << Q96_RESOLUTION;\n const numerator2 = b - a;\n\n if (roundUp) {\n return divRoundingUp(mulDivRoundingUp(numerator1, numerator2, b), a);\n }\n return mulDiv(numerator1, numerator2, b) / a;\n}\n\n/**\n * Amount1 delta between two sqrt prices for a given liquidity.\n *\n * `liquidity * (sqrt(upper) - sqrt(lower))`.\n */\nexport function getAmount1Delta(\n sqrtRatioAX96: bigint,\n sqrtRatioBX96: bigint,\n liquidity: bigint,\n roundUp: boolean,\n): bigint {\n assertUint160(sqrtRatioAX96, \"sqrtRatioAX96\");\n assertUint160(sqrtRatioBX96, \"sqrtRatioBX96\");\n assertUint128(liquidity, \"liquidity\");\n\n let a = sqrtRatioAX96;\n let b = sqrtRatioBX96;\n if (a > b) {\n [a, b] = [b, a];\n }\n\n return roundUp\n ? mulDivRoundingUp(liquidity, b - a, Q96)\n : mulDiv(liquidity, b - a, Q96);\n}\n\n/**\n * Signed amount0 delta: positive liquidity -> rounds up, negative -> rounds\n * down and negates. Matches the `int128 liquidity` overload of the\n * canonical library.\n */\nexport function getAmount0DeltaSigned(\n sqrtRatioAX96: bigint,\n sqrtRatioBX96: bigint,\n liquidity: bigint,\n): bigint {\n // int128 range: [-2^127, 2^127 - 1]\n const INT128_MIN = -(1n << 127n);\n const INT128_MAX = (1n << 127n) - 1n;\n if (liquidity < INT128_MIN || liquidity > INT128_MAX) {\n throw new Error(\"SqrtPriceMath: liquidity out of int128 range\");\n }\n if (liquidity < 0n) {\n return -getAmount0Delta(sqrtRatioAX96, sqrtRatioBX96, -liquidity, false);\n }\n return getAmount0Delta(sqrtRatioAX96, sqrtRatioBX96, liquidity, true);\n}\n\n/**\n * Signed amount1 delta: positive liquidity -> rounds up, negative -> rounds\n * down and negates. Matches the `int128 liquidity` overload of the\n * canonical library.\n */\nexport function getAmount1DeltaSigned(\n sqrtRatioAX96: bigint,\n sqrtRatioBX96: bigint,\n liquidity: bigint,\n): bigint {\n const INT128_MIN = -(1n << 127n);\n const INT128_MAX = (1n << 127n) - 1n;\n if (liquidity < INT128_MIN || liquidity > INT128_MAX) {\n throw new Error(\"SqrtPriceMath: liquidity out of int128 range\");\n }\n if (liquidity < 0n) {\n return -getAmount1Delta(sqrtRatioAX96, sqrtRatioBX96, -liquidity, false);\n }\n return getAmount1Delta(sqrtRatioAX96, sqrtRatioBX96, liquidity, true);\n}\n","/**\n * Pure-BigInt port of Uniswap v3-core `LiquidityMath.sol` + Uniswap v3-periphery\n * `LiquidityAmounts.sol`.\n *\n * Canonical sources:\n * https://github.com/Uniswap/v3-core/blob/main/contracts/libraries/LiquidityMath.sol\n * https://github.com/Uniswap/v3-periphery/blob/main/contracts/libraries/LiquidityAmounts.sol\n */\n\nimport { Q96 } from \"./sqrtPriceMath\";\n\nconst MAX_UINT128 = (1n << 128n) - 1n;\nconst INT128_MAX = (1n << 127n) - 1n;\nconst INT128_MIN = -(1n << 127n);\n\n/**\n * Add a signed `int128` liquidity delta to a `uint128` liquidity value,\n * reverting on overflow / underflow.\n *\n * @throws `LA` if `x + y > uint128.max`\n * @throws `LS` if `x + y < 0`\n */\nexport function addDelta(x: bigint, y: bigint): bigint {\n if (x < 0n || x > MAX_UINT128) {\n throw new Error(\"LiquidityMath: x out of uint128 range\");\n }\n if (y < INT128_MIN || y > INT128_MAX) {\n throw new Error(\"LiquidityMath: y out of int128 range\");\n }\n\n const z = x + y;\n // Solidity semantics: after the signed add, z MUST remain in uint128 range.\n // Underflow (z < 0) => 'LS', overflow (z > uint128.max) => 'LA'.\n if (y < 0n) {\n if (z < 0n) throw new Error(\"LS\");\n } else {\n if (z > MAX_UINT128) throw new Error(\"LA\");\n }\n return z;\n}\n\n/** Liquidity producible by `amount0` over `[sqrtRatioAX96, sqrtRatioBX96]`.\n * Args are auto-swapped to enforce `A ≤ B`. */\nexport function getLiquidityForAmount0(\n sqrtRatioAX96: bigint,\n sqrtRatioBX96: bigint,\n amount0: bigint,\n): bigint {\n if (sqrtRatioAX96 > sqrtRatioBX96) {\n [sqrtRatioAX96, sqrtRatioBX96] = [sqrtRatioBX96, sqrtRatioAX96];\n }\n return (amount0 * sqrtRatioAX96 * sqrtRatioBX96) / (Q96 * (sqrtRatioBX96 - sqrtRatioAX96));\n}\n\n/** Liquidity producible by `amount1` over `[sqrtRatioAX96, sqrtRatioBX96]`.\n * Args are auto-swapped to enforce `A ≤ B`. */\nexport function getLiquidityForAmount1(\n sqrtRatioAX96: bigint,\n sqrtRatioBX96: bigint,\n amount1: bigint,\n): bigint {\n if (sqrtRatioAX96 > sqrtRatioBX96) {\n [sqrtRatioAX96, sqrtRatioBX96] = [sqrtRatioBX96, sqrtRatioAX96];\n }\n return (amount1 * Q96) / (sqrtRatioBX96 - sqrtRatioAX96);\n}\n","/**\n * Kernel-side amount normalization.\n *\n * Periphery contracts on every VM scale raw token amounts to 18 decimals\n * before talking to the kernel (which does uniswap-v3 math in that fixed\n * resolution). These helpers do the same scaling client-side — useful for\n * quote routes that need to mirror the on-chain math without round-tripping\n * through a periphery call.\n */\n\n/** Decimal precision the kernel normalizes all amounts to. */\nexport const NORMALIZED_DECIMAL = 18;\n\n/** Scale a raw amount with `decimal` decimals up to `NORMALIZED_DECIMAL`. */\nexport function normalizeAmount(amount: bigint, decimal: number): bigint {\n if (decimal === NORMALIZED_DECIMAL) return amount;\n if (!Number.isInteger(decimal)) {\n throw new Error(`normalizeAmount: non-integer decimal=${decimal}`);\n }\n return amount * 10n ** BigInt(NORMALIZED_DECIMAL - decimal);\n}\n\n/** Inverse of `normalizeAmount`. */\nexport function deNormalizeAmount(amount: bigint, decimal: number): bigint {\n if (decimal === NORMALIZED_DECIMAL) return amount;\n if (!Number.isInteger(decimal)) {\n throw new Error(`deNormalizeAmount: non-integer decimal=${decimal}`);\n }\n return amount / 10n ** BigInt(NORMALIZED_DECIMAL - decimal);\n}\n"],"mappings":"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","names":["CHAIN","VM","BLOCK_EXPLORER","TaskPhase","Q96","MAX_UINT256","MAX_UINT256","INT128_MIN","INT128_MAX","MAX_UINT128"]}
|
package/dist/index.js
CHANGED
|
@@ -140,8 +140,8 @@ var TaskPhase = /* @__PURE__ */ ((TaskPhase2) => {
|
|
|
140
140
|
})(TaskPhase || {});
|
|
141
141
|
|
|
142
142
|
// src/deployment/kernel.ts
|
|
143
|
-
var
|
|
144
|
-
var
|
|
143
|
+
var KERNEL_MANAGER = "0x17B7207837e8884f7f687f1f4057751BDAf70a01";
|
|
144
|
+
var KERNEL_EVENT_EMITTER = "0x8989b3ecb65f250ab7A0DC03589B0Cc8b8b04b81";
|
|
145
145
|
var KERNEL_POOL_USDC_USDT_Dev = "0x2c23334eE3b030e6bacEDEDf7C511eEA08Cf7E7e";
|
|
146
146
|
var KERNEL_CHAIN_BY_MODE = {
|
|
147
147
|
DEV: 4326 /* MEGAETH */,
|
|
@@ -152,10 +152,10 @@ function KernelChain(mode) {
|
|
|
152
152
|
return KERNEL_CHAIN_BY_MODE[mode];
|
|
153
153
|
}
|
|
154
154
|
function KernelManagerAddress(_mode) {
|
|
155
|
-
return
|
|
155
|
+
return KERNEL_MANAGER;
|
|
156
156
|
}
|
|
157
157
|
function KernelEventEmitterAddress(_mode) {
|
|
158
|
-
return
|
|
158
|
+
return KERNEL_EVENT_EMITTER;
|
|
159
159
|
}
|
|
160
160
|
|
|
161
161
|
// src/deployment/periphery.ts
|
|
@@ -646,6 +646,11 @@ var MIN_SQRT_RATIO = 4295128739n;
|
|
|
646
646
|
var MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342n;
|
|
647
647
|
var MIN_SQRT_PRICE_LIMIT = MIN_SQRT_RATIO + 1n;
|
|
648
648
|
var MAX_SQRT_PRICE_LIMIT = MAX_SQRT_RATIO - 1n;
|
|
649
|
+
var MIN_SQRT_PRICE_X96 = MIN_SQRT_PRICE_LIMIT;
|
|
650
|
+
var MAX_SQRT_PRICE_X96 = MAX_SQRT_PRICE_LIMIT;
|
|
651
|
+
var TICK_VALUE = 1.0001;
|
|
652
|
+
var PRICE_ZERO = 0;
|
|
653
|
+
var PRICE_INF = 2 ** 32 - 1;
|
|
649
654
|
function getSqrtRatioAtTick(tick) {
|
|
650
655
|
if (!Number.isInteger(tick)) {
|
|
651
656
|
throw new Error("TickMath: tick must be an integer");
|
|
@@ -774,6 +779,17 @@ function toInt24(x) {
|
|
|
774
779
|
const signed = truncated >= 1n << 23n ? truncated - (1n << 24n) : truncated;
|
|
775
780
|
return Number(signed);
|
|
776
781
|
}
|
|
782
|
+
function getPriceAtTick(tick) {
|
|
783
|
+
const sqrtPriceX96 = getSqrtRatioAtTick(tick);
|
|
784
|
+
const Q962 = 1n << 96n;
|
|
785
|
+
return (Number(sqrtPriceX96) / Number(Q962)) ** 2;
|
|
786
|
+
}
|
|
787
|
+
function getTickAtPrice(price) {
|
|
788
|
+
if (price < 0) {
|
|
789
|
+
throw new Error(`getTickAtPrice: invalid price=${price}`);
|
|
790
|
+
}
|
|
791
|
+
return Math.round(Math.log(price) / Math.log(TICK_VALUE));
|
|
792
|
+
}
|
|
777
793
|
|
|
778
794
|
// src/math/fullMath.ts
|
|
779
795
|
var MAX_UINT2562 = (1n << 256n) - 1n;
|
|
@@ -981,6 +997,35 @@ function addDelta(x, y) {
|
|
|
981
997
|
}
|
|
982
998
|
return z;
|
|
983
999
|
}
|
|
1000
|
+
function getLiquidityForAmount0(sqrtRatioAX96, sqrtRatioBX96, amount0) {
|
|
1001
|
+
if (sqrtRatioAX96 > sqrtRatioBX96) {
|
|
1002
|
+
[sqrtRatioAX96, sqrtRatioBX96] = [sqrtRatioBX96, sqrtRatioAX96];
|
|
1003
|
+
}
|
|
1004
|
+
return amount0 * sqrtRatioAX96 * sqrtRatioBX96 / (Q96 * (sqrtRatioBX96 - sqrtRatioAX96));
|
|
1005
|
+
}
|
|
1006
|
+
function getLiquidityForAmount1(sqrtRatioAX96, sqrtRatioBX96, amount1) {
|
|
1007
|
+
if (sqrtRatioAX96 > sqrtRatioBX96) {
|
|
1008
|
+
[sqrtRatioAX96, sqrtRatioBX96] = [sqrtRatioBX96, sqrtRatioAX96];
|
|
1009
|
+
}
|
|
1010
|
+
return amount1 * Q96 / (sqrtRatioBX96 - sqrtRatioAX96);
|
|
1011
|
+
}
|
|
1012
|
+
|
|
1013
|
+
// src/math/kernel.ts
|
|
1014
|
+
var NORMALIZED_DECIMAL = 18;
|
|
1015
|
+
function normalizeAmount(amount, decimal) {
|
|
1016
|
+
if (decimal === NORMALIZED_DECIMAL) return amount;
|
|
1017
|
+
if (!Number.isInteger(decimal)) {
|
|
1018
|
+
throw new Error(`normalizeAmount: non-integer decimal=${decimal}`);
|
|
1019
|
+
}
|
|
1020
|
+
return amount * 10n ** BigInt(NORMALIZED_DECIMAL - decimal);
|
|
1021
|
+
}
|
|
1022
|
+
function deNormalizeAmount(amount, decimal) {
|
|
1023
|
+
if (decimal === NORMALIZED_DECIMAL) return amount;
|
|
1024
|
+
if (!Number.isInteger(decimal)) {
|
|
1025
|
+
throw new Error(`deNormalizeAmount: non-integer decimal=${decimal}`);
|
|
1026
|
+
}
|
|
1027
|
+
return amount / 10n ** BigInt(NORMALIZED_DECIMAL - decimal);
|
|
1028
|
+
}
|
|
984
1029
|
export {
|
|
985
1030
|
ActionBoxAddress,
|
|
986
1031
|
BLOCK_EXPLORER,
|
|
@@ -992,20 +1037,26 @@ export {
|
|
|
992
1037
|
KernelEventEmitterAddress,
|
|
993
1038
|
KernelManagerAddress,
|
|
994
1039
|
MAX_SQRT_PRICE_LIMIT,
|
|
1040
|
+
MAX_SQRT_PRICE_X96,
|
|
995
1041
|
MAX_SQRT_RATIO,
|
|
996
1042
|
MAX_TICK,
|
|
997
1043
|
MIN_SQRT_PRICE_LIMIT,
|
|
1044
|
+
MIN_SQRT_PRICE_X96,
|
|
998
1045
|
MIN_SQRT_RATIO,
|
|
999
1046
|
MIN_TICK,
|
|
1047
|
+
NORMALIZED_DECIMAL,
|
|
1000
1048
|
PERIPHERY_DEV,
|
|
1001
1049
|
PERIPHERY_PRODUCTION,
|
|
1002
1050
|
PERIPHERY_STAGING,
|
|
1003
1051
|
POOL_INFO_Dev,
|
|
1004
1052
|
POOL_INFO_Production,
|
|
1005
1053
|
POOL_INFO_Staging,
|
|
1054
|
+
PRICE_INF,
|
|
1055
|
+
PRICE_ZERO,
|
|
1006
1056
|
PeripheryDeploymentFor,
|
|
1007
1057
|
PeripheryEventEmitterAddress,
|
|
1008
1058
|
PeripheryManagerAddress,
|
|
1059
|
+
Q96,
|
|
1009
1060
|
SUI_DEPLOYMENT_DEV,
|
|
1010
1061
|
SUI_DEPLOYMENT_PRODUCTION,
|
|
1011
1062
|
SUI_DEPLOYMENT_STAGING,
|
|
@@ -1022,6 +1073,7 @@ export {
|
|
|
1022
1073
|
SkateGatewayAddress,
|
|
1023
1074
|
SuiDeploymentFor,
|
|
1024
1075
|
SvmDeploymentFor,
|
|
1076
|
+
TICK_VALUE,
|
|
1025
1077
|
TaskPhase,
|
|
1026
1078
|
VM,
|
|
1027
1079
|
addDelta,
|
|
@@ -1030,6 +1082,7 @@ export {
|
|
|
1030
1082
|
bufferFromBase58,
|
|
1031
1083
|
bytes32ToBase58,
|
|
1032
1084
|
bytes32ToEvmAddress,
|
|
1085
|
+
deNormalizeAmount,
|
|
1033
1086
|
evmAddressToBytes32,
|
|
1034
1087
|
findTokensBySymbol,
|
|
1035
1088
|
fromBytes32Address,
|
|
@@ -1040,6 +1093,8 @@ export {
|
|
|
1040
1093
|
getAmount1Delta,
|
|
1041
1094
|
getAmount1DeltaSigned,
|
|
1042
1095
|
getBlockExplorer,
|
|
1096
|
+
getLiquidityForAmount0,
|
|
1097
|
+
getLiquidityForAmount1,
|
|
1043
1098
|
getNextSqrtPriceFromAmount0RoundingUp,
|
|
1044
1099
|
getNextSqrtPriceFromAmount1RoundingDown,
|
|
1045
1100
|
getNextSqrtPriceFromInput,
|
|
@@ -1047,16 +1102,19 @@ export {
|
|
|
1047
1102
|
getOtherTokensInPairs,
|
|
1048
1103
|
getPeripheryDetailsByKernelPoolAndChainId,
|
|
1049
1104
|
getPoolInfoByKey,
|
|
1105
|
+
getPriceAtTick,
|
|
1050
1106
|
getSqrtRatioAtTick,
|
|
1051
1107
|
getSupportedChains,
|
|
1052
1108
|
getSupportedPairs,
|
|
1053
1109
|
getSupportedTokens,
|
|
1110
|
+
getTickAtPrice,
|
|
1054
1111
|
getTickAtSqrtRatio,
|
|
1055
1112
|
getTokenSymbol,
|
|
1056
1113
|
hexToBase58,
|
|
1057
1114
|
kernelPoolToPoolKey,
|
|
1058
1115
|
mulDiv,
|
|
1059
1116
|
mulDivRoundingUp,
|
|
1117
|
+
normalizeAmount,
|
|
1060
1118
|
normalizeMode,
|
|
1061
1119
|
skate_exports as skateAdapter,
|
|
1062
1120
|
svmBytes32Base58ToEvmAddress,
|