@skate-org/amm-core-v2 2.0.0-beta.0 → 2.0.0-beta.1
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/dist/deployment/aggregated/retrieval.d.ts +19 -0
- package/dist/deployment/aggregated/retrieval.d.ts.map +1 -1
- package/dist/index.cjs +27 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# @skate-org/amm-core-v2
|
|
2
2
|
|
|
3
|
+
## 2.0.0-beta.1 — 2026-05-07
|
|
4
|
+
|
|
5
|
+
Two new token-lookup helpers in `deployment/aggregated/retrieval.ts`:
|
|
6
|
+
|
|
7
|
+
- **`findTokensBySymbol(symbol, chainIds?, mode?)`** — search the
|
|
8
|
+
deployment catalog for tokens with a given symbol, optionally
|
|
9
|
+
filtered to specific chains. Symbol comparison is case-insensitive;
|
|
10
|
+
results are deduped by `(chainId, address)`. Pass `chainIds` as
|
|
11
|
+
`undefined` (or omit) to search every supported chain.
|
|
12
|
+
- **`getTokenSymbol(address, chainId, mode?)`** — reverse lookup;
|
|
13
|
+
returns the token symbol at `(address, chainId)`, or `null` if no
|
|
14
|
+
supported token matches. Address comparison is case-insensitive.
|
|
15
|
+
|
|
16
|
+
Both functions reuse the existing `getSupportedTokens` /
|
|
17
|
+
`getSupportedChains` accessors so they automatically pick up new pools
|
|
18
|
+
as the deployment table grows. 12 new unit tests covering case-
|
|
19
|
+
insensitive matching, dedup behavior, mixed-valid/invalid `chainIds`,
|
|
20
|
+
and unsupported-chain returns.
|
|
21
|
+
|
|
3
22
|
## 2.0.0-beta.0 — 2026-05-07
|
|
4
23
|
|
|
5
24
|
First **beta**. Promoted under the `beta` dist-tag; `latest` stays at
|
|
@@ -19,4 +19,23 @@ export declare function getOtherTokensInPairs(chainId: CHAIN, tokenAddress: stri
|
|
|
19
19
|
export declare function kernelPoolToPoolKey(kernelPool: `0x${string}`, mode?: EnvMode): PoolKey;
|
|
20
20
|
export declare function getPeripheryDetailsByKernelPoolAndChainId<K extends CHAIN>(kernelPool: `0x${string}`, chainId: K, mode?: EnvMode): PeripheryInfoFor<K> | null;
|
|
21
21
|
export declare function getPeripheryDetailsByKernelPoolAndChainId(kernelPool: `0x${string}`, chainId: number, mode?: EnvMode): PeripheryInfoFor<CHAIN> | null;
|
|
22
|
+
/**
|
|
23
|
+
* Find tokens by case-insensitive symbol across one or more chains.
|
|
24
|
+
*
|
|
25
|
+
* Same token symbol on different chains has different addresses, so the
|
|
26
|
+
* return type is `Array<Token>` (not a single record) — the same
|
|
27
|
+
* `(symbol, chainId)` pair always points at one token, but
|
|
28
|
+
* `(symbol, chainIds[])` may produce many.
|
|
29
|
+
*
|
|
30
|
+
* Pass `chainIds` undefined / omitted to search every supported chain.
|
|
31
|
+
*/
|
|
32
|
+
export declare function findTokensBySymbol(symbol: string, chainIds?: readonly CHAIN[], mode?: EnvMode): Token[];
|
|
33
|
+
/**
|
|
34
|
+
* Reverse lookup: return the symbol of the token at `address` on
|
|
35
|
+
* `chainId`, or `null` if no supported token matches that pair.
|
|
36
|
+
*
|
|
37
|
+
* Address comparison is case-insensitive; symbol is returned in the
|
|
38
|
+
* casing the deployment table records.
|
|
39
|
+
*/
|
|
40
|
+
export declare function getTokenSymbol(address: string, chainId: CHAIN, mode?: EnvMode): string | null;
|
|
22
41
|
//# sourceMappingURL=retrieval.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retrieval.d.ts","sourceRoot":"","sources":["../../../src/deployment/aggregated/retrieval.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAIjD,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEjD,wBAAgB,cAAc,CAAC,IAAI,GAAE,OAAsB,GAAG,YAAY,CAMzE;AAED,wBAAgB,cAAc,CAAC,IAAI,GAAE,OAAsB,GAAG,OAAO,EAAE,CAEtE;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,GAAE,OAAsB;;;;;iCAsBhE,CAAC;SApBX;AAED,wBAAgB,kBAAkB,CAAC,IAAI,GAAE,OAAsB,GAAG,KAAK,EAAE,CASxE;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,KAAK,EACd,IAAI,GAAE,OAAsB,GAC3B,CAAC,SAAS,GAAG;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,EAAE,CActC;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,GAAE,OAAsB,GAAG,KAAK,EAAE,CAcxF;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,KAAK,EACd,YAAY,EAAE,MAAM,EACpB,IAAI,GAAE,OAAsB,GAC3B,KAAK,EAAE,CAeT;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,KAAK,MAAM,EAAE,EAAE,IAAI,GAAE,OAAsB,GAAG,OAAO,CAOpG;AAED,wBAAgB,yCAAyC,CAAC,CAAC,SAAS,KAAK,EACvE,UAAU,EAAE,KAAK,MAAM,EAAE,EACzB,OAAO,EAAE,CAAC,EACV,IAAI,CAAC,EAAE,OAAO,GACb,gBAAgB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AAC9B,wBAAgB,yCAAyC,CACvD,UAAU,EAAE,KAAK,MAAM,EAAE,EACzB,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,OAAO,GACb,gBAAgB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC"}
|
|
1
|
+
{"version":3,"file":"retrieval.d.ts","sourceRoot":"","sources":["../../../src/deployment/aggregated/retrieval.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAIjD,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEjD,wBAAgB,cAAc,CAAC,IAAI,GAAE,OAAsB,GAAG,YAAY,CAMzE;AAED,wBAAgB,cAAc,CAAC,IAAI,GAAE,OAAsB,GAAG,OAAO,EAAE,CAEtE;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,GAAE,OAAsB;;;;;iCAsBhE,CAAC;SApBX;AAED,wBAAgB,kBAAkB,CAAC,IAAI,GAAE,OAAsB,GAAG,KAAK,EAAE,CASxE;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,KAAK,EACd,IAAI,GAAE,OAAsB,GAC3B,CAAC,SAAS,GAAG;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,EAAE,CActC;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,GAAE,OAAsB,GAAG,KAAK,EAAE,CAcxF;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,KAAK,EACd,YAAY,EAAE,MAAM,EACpB,IAAI,GAAE,OAAsB,GAC3B,KAAK,EAAE,CAeT;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,KAAK,MAAM,EAAE,EAAE,IAAI,GAAE,OAAsB,GAAG,OAAO,CAOpG;AAED,wBAAgB,yCAAyC,CAAC,CAAC,SAAS,KAAK,EACvE,UAAU,EAAE,KAAK,MAAM,EAAE,EACzB,OAAO,EAAE,CAAC,EACV,IAAI,CAAC,EAAE,OAAO,GACb,gBAAgB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AAC9B,wBAAgB,yCAAyC,CACvD,UAAU,EAAE,KAAK,MAAM,EAAE,EACzB,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,OAAO,GACb,gBAAgB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;AAWlC;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,SAAS,KAAK,EAAE,EAC3B,IAAI,GAAE,OAAsB,GAC3B,KAAK,EAAE,CAeT;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,KAAK,EACd,IAAI,GAAE,OAAsB,GAC3B,MAAM,GAAG,IAAI,CAMf"}
|
package/dist/index.cjs
CHANGED
|
@@ -53,6 +53,7 @@ __export(index_exports, {
|
|
|
53
53
|
bytes32ToBase58: () => bytes32ToBase58,
|
|
54
54
|
bytes32ToEvmAddress: () => bytes32ToEvmAddress,
|
|
55
55
|
evmAddressToBytes32: () => evmAddressToBytes32,
|
|
56
|
+
findTokensBySymbol: () => findTokensBySymbol,
|
|
56
57
|
fromBytes32Address: () => fromBytes32Address,
|
|
57
58
|
getAllPoolInfo: () => getAllPoolInfo,
|
|
58
59
|
getAllPoolKeys: () => getAllPoolKeys,
|
|
@@ -73,6 +74,7 @@ __export(index_exports, {
|
|
|
73
74
|
getSupportedPairs: () => getSupportedPairs,
|
|
74
75
|
getSupportedTokens: () => getSupportedTokens,
|
|
75
76
|
getTickAtSqrtRatio: () => getTickAtSqrtRatio,
|
|
77
|
+
getTokenSymbol: () => getTokenSymbol,
|
|
76
78
|
hexToBase58: () => hexToBase58,
|
|
77
79
|
kernelPoolToPoolKey: () => kernelPoolToPoolKey,
|
|
78
80
|
mulDiv: () => mulDiv,
|
|
@@ -411,6 +413,29 @@ function getPeripheryDetailsByKernelPoolAndChainId(kernelPool, chainId, mode = "
|
|
|
411
413
|
const info = getAllPoolInfo(mode);
|
|
412
414
|
return info[poolKey]?.peripheryInfo[chainId] ?? null;
|
|
413
415
|
}
|
|
416
|
+
function findTokensBySymbol(symbol, chainIds, mode = "PRODUCTION") {
|
|
417
|
+
const normalized = symbol.toLowerCase();
|
|
418
|
+
const chains = chainIds ?? getSupportedChains(mode);
|
|
419
|
+
const out = [];
|
|
420
|
+
const seen = /* @__PURE__ */ new Set();
|
|
421
|
+
for (const chainId of chains) {
|
|
422
|
+
for (const t of getSupportedTokens(chainId, mode)) {
|
|
423
|
+
if (t.symbol.toLowerCase() !== normalized) continue;
|
|
424
|
+
const key = `${t.chainId}:${t.address.toLowerCase()}`;
|
|
425
|
+
if (seen.has(key)) continue;
|
|
426
|
+
seen.add(key);
|
|
427
|
+
out.push(t);
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
return out;
|
|
431
|
+
}
|
|
432
|
+
function getTokenSymbol(address, chainId, mode = "PRODUCTION") {
|
|
433
|
+
const needle = address.toLowerCase();
|
|
434
|
+
for (const t of getSupportedTokens(chainId, mode)) {
|
|
435
|
+
if (t.address.toLowerCase() === needle) return t.symbol;
|
|
436
|
+
}
|
|
437
|
+
return null;
|
|
438
|
+
}
|
|
414
439
|
|
|
415
440
|
// src/adapter/skate.ts
|
|
416
441
|
var skate_exports = {};
|
|
@@ -971,6 +996,7 @@ function addDelta(x, y) {
|
|
|
971
996
|
bytes32ToBase58,
|
|
972
997
|
bytes32ToEvmAddress,
|
|
973
998
|
evmAddressToBytes32,
|
|
999
|
+
findTokensBySymbol,
|
|
974
1000
|
fromBytes32Address,
|
|
975
1001
|
getAllPoolInfo,
|
|
976
1002
|
getAllPoolKeys,
|
|
@@ -991,6 +1017,7 @@ function addDelta(x, y) {
|
|
|
991
1017
|
getSupportedPairs,
|
|
992
1018
|
getSupportedTokens,
|
|
993
1019
|
getTickAtSqrtRatio,
|
|
1020
|
+
getTokenSymbol,
|
|
994
1021
|
hexToBase58,
|
|
995
1022
|
kernelPoolToPoolKey,
|
|
996
1023
|
mulDiv,
|
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/errors.ts","../src/deployment/kernel.ts","../src/deployment/periphery.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/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","/**\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","import { EnvMode } from \"../types\";\nimport { CHAIN } from \"../types\";\nimport { SdkError } from \"../errors\";\n\n// =====================================================================\n// DEV — v2 service deployed on MegaETH (kernel) + Arbitrum (periphery).\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 are not yet deployed; the entries below pre-declare\n// MegaETH as the default so the rest of the SDK has a single source of\n// truth, and so changing a future env to a different kernel chain is a\n// one-line edit. When STAGING / PRODUCTION go live their address tables\n// (KERNEL_MANAGER_*, KERNEL_EVENT_EMITTER_*, etc.) need to be populated\n// alongside any chain change.\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\nfunction notDeployed(scope: string, mode: Exclude<EnvMode, \"DEV\">): never {\n throw new SdkError(\n `${scope}: SDK v2 is not yet deployed to ${mode}; only DEV is wired today. ` +\n `Either pass mode=\"DEV\" or wait for the v2 service to ship to ${mode}.`,\n );\n}\n\n/**\n * Address of the Skate Kernel Manager for the given env mode.\n *\n * Today only DEV resolves; STAGING / PRODUCTION throw an `SdkError` to\n * surface the unwired state instead of silently returning a v1-era\n * placeholder that would cause RPC reads to misfire on MegaETH.\n */\nexport function KernelManagerAddress(mode: EnvMode): `0x${string}` {\n if (mode === \"DEV\") return KERNEL_MANAGER_Dev as `0x${string}`;\n return notDeployed(\"KernelManagerAddress\", mode);\n}\n\n/**\n * Address of the Skate Kernel Event Emitter for the given env mode.\n *\n * Same alpha posture as `KernelManagerAddress` — only DEV is wired.\n */\nexport function KernelEventEmitterAddress(mode: EnvMode): `0x${string}` {\n if (mode === \"DEV\") return KERNEL_EVENT_EMITTER_Dev as `0x${string}`;\n return notDeployed(\"KernelEventEmitterAddress\", mode);\n}\n","import { CHAIN, EnvMode } from \"../types\";\nimport { SdkError } from \"../errors\";\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\nfunction notDeployed(scope: string, mode: Exclude<EnvMode, \"DEV\">): never {\n throw new SdkError(\n `${scope}: SDK v2 is not yet deployed to ${mode}; only DEV is wired today. ` +\n `Either pass mode=\"DEV\" or wait for the v2 service to ship to ${mode}.`,\n );\n}\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 DEV entry; throws `SdkError` for\n * STAGING / PRODUCTION since v2 isn't deployed there yet (mirrors the\n * kernel-side `KernelManagerAddress` posture).\n */\nexport function PeripheryDeploymentFor(\n chain: CHAIN,\n mode: EnvMode,\n): PeripheryDeployment | null {\n if (mode !== \"DEV\") return notDeployed(\"PeripheryDeploymentFor\", mode);\n return PERIPHERY_DEV[chain] ?? null;\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 } from \"../../types\";\nimport { KERNEL_POOL_USDC_USDT_Dev } from \"../kernel\";\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 },\n },\n};\n","import { PoolInfoType } from \"./_type_\";\n\n// v2 service is not deployed to STAGING yet. Populate this map when it is.\nexport const POOL_INFO_Staging: PoolInfoType = {};\n","import { PoolInfoType } from \"./_type_\";\n\n// v2 service is not deployed to PRODUCTION yet. Populate this map when it is.\nexport const POOL_INFO_Production: PoolInfoType = {};\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","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\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 * 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","notDeployed","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/errors.ts","../src/deployment/kernel.ts","../src/deployment/periphery.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/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","/**\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","import { EnvMode } from \"../types\";\nimport { CHAIN } from \"../types\";\nimport { SdkError } from \"../errors\";\n\n// =====================================================================\n// DEV — v2 service deployed on MegaETH (kernel) + Arbitrum (periphery).\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 are not yet deployed; the entries below pre-declare\n// MegaETH as the default so the rest of the SDK has a single source of\n// truth, and so changing a future env to a different kernel chain is a\n// one-line edit. When STAGING / PRODUCTION go live their address tables\n// (KERNEL_MANAGER_*, KERNEL_EVENT_EMITTER_*, etc.) need to be populated\n// alongside any chain change.\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\nfunction notDeployed(scope: string, mode: Exclude<EnvMode, \"DEV\">): never {\n throw new SdkError(\n `${scope}: SDK v2 is not yet deployed to ${mode}; only DEV is wired today. ` +\n `Either pass mode=\"DEV\" or wait for the v2 service to ship to ${mode}.`,\n );\n}\n\n/**\n * Address of the Skate Kernel Manager for the given env mode.\n *\n * Today only DEV resolves; STAGING / PRODUCTION throw an `SdkError` to\n * surface the unwired state instead of silently returning a v1-era\n * placeholder that would cause RPC reads to misfire on MegaETH.\n */\nexport function KernelManagerAddress(mode: EnvMode): `0x${string}` {\n if (mode === \"DEV\") return KERNEL_MANAGER_Dev as `0x${string}`;\n return notDeployed(\"KernelManagerAddress\", mode);\n}\n\n/**\n * Address of the Skate Kernel Event Emitter for the given env mode.\n *\n * Same alpha posture as `KernelManagerAddress` — only DEV is wired.\n */\nexport function KernelEventEmitterAddress(mode: EnvMode): `0x${string}` {\n if (mode === \"DEV\") return KERNEL_EVENT_EMITTER_Dev as `0x${string}`;\n return notDeployed(\"KernelEventEmitterAddress\", mode);\n}\n","import { CHAIN, EnvMode } from \"../types\";\nimport { SdkError } from \"../errors\";\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\nfunction notDeployed(scope: string, mode: Exclude<EnvMode, \"DEV\">): never {\n throw new SdkError(\n `${scope}: SDK v2 is not yet deployed to ${mode}; only DEV is wired today. ` +\n `Either pass mode=\"DEV\" or wait for the v2 service to ship to ${mode}.`,\n );\n}\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 DEV entry; throws `SdkError` for\n * STAGING / PRODUCTION since v2 isn't deployed there yet (mirrors the\n * kernel-side `KernelManagerAddress` posture).\n */\nexport function PeripheryDeploymentFor(\n chain: CHAIN,\n mode: EnvMode,\n): PeripheryDeployment | null {\n if (mode !== \"DEV\") return notDeployed(\"PeripheryDeploymentFor\", mode);\n return PERIPHERY_DEV[chain] ?? null;\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 } from \"../../types\";\nimport { KERNEL_POOL_USDC_USDT_Dev } from \"../kernel\";\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 },\n },\n};\n","import { PoolInfoType } from \"./_type_\";\n\n// v2 service is not deployed to STAGING yet. Populate this map when it is.\nexport const POOL_INFO_Staging: PoolInfoType = {};\n","import { PoolInfoType } from \"./_type_\";\n\n// v2 service is not deployed to PRODUCTION yet. Populate this map when it is.\nexport const POOL_INFO_Production: PoolInfoType = {};\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 * Pass `chainIds` undefined / omitted to search every supported chain.\n */\nexport function findTokensBySymbol(\n symbol: string,\n chainIds?: readonly CHAIN[],\n mode: EnvMode = \"PRODUCTION\",\n): Token[] {\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\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 * 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","notDeployed","MAX_UINT256","MAX_UINT256","INT128_MIN","INT128_MAX","MAX_UINT128"]}
|
package/dist/index.js
CHANGED
|
@@ -330,6 +330,29 @@ function getPeripheryDetailsByKernelPoolAndChainId(kernelPool, chainId, mode = "
|
|
|
330
330
|
const info = getAllPoolInfo(mode);
|
|
331
331
|
return info[poolKey]?.peripheryInfo[chainId] ?? null;
|
|
332
332
|
}
|
|
333
|
+
function findTokensBySymbol(symbol, chainIds, mode = "PRODUCTION") {
|
|
334
|
+
const normalized = symbol.toLowerCase();
|
|
335
|
+
const chains = chainIds ?? getSupportedChains(mode);
|
|
336
|
+
const out = [];
|
|
337
|
+
const seen = /* @__PURE__ */ new Set();
|
|
338
|
+
for (const chainId of chains) {
|
|
339
|
+
for (const t of getSupportedTokens(chainId, mode)) {
|
|
340
|
+
if (t.symbol.toLowerCase() !== normalized) continue;
|
|
341
|
+
const key = `${t.chainId}:${t.address.toLowerCase()}`;
|
|
342
|
+
if (seen.has(key)) continue;
|
|
343
|
+
seen.add(key);
|
|
344
|
+
out.push(t);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
return out;
|
|
348
|
+
}
|
|
349
|
+
function getTokenSymbol(address, chainId, mode = "PRODUCTION") {
|
|
350
|
+
const needle = address.toLowerCase();
|
|
351
|
+
for (const t of getSupportedTokens(chainId, mode)) {
|
|
352
|
+
if (t.address.toLowerCase() === needle) return t.symbol;
|
|
353
|
+
}
|
|
354
|
+
return null;
|
|
355
|
+
}
|
|
333
356
|
|
|
334
357
|
// src/adapter/skate.ts
|
|
335
358
|
var skate_exports = {};
|
|
@@ -889,6 +912,7 @@ export {
|
|
|
889
912
|
bytes32ToBase58,
|
|
890
913
|
bytes32ToEvmAddress,
|
|
891
914
|
evmAddressToBytes32,
|
|
915
|
+
findTokensBySymbol,
|
|
892
916
|
fromBytes32Address,
|
|
893
917
|
getAllPoolInfo,
|
|
894
918
|
getAllPoolKeys,
|
|
@@ -909,6 +933,7 @@ export {
|
|
|
909
933
|
getSupportedPairs,
|
|
910
934
|
getSupportedTokens,
|
|
911
935
|
getTickAtSqrtRatio,
|
|
936
|
+
getTokenSymbol,
|
|
912
937
|
hexToBase58,
|
|
913
938
|
kernelPoolToPoolKey,
|
|
914
939
|
mulDiv,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types/chain.ts","../src/types/vm.ts","../src/types/mode.ts","../src/types/action.ts","../src/errors.ts","../src/deployment/kernel.ts","../src/deployment/periphery.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/math/tickMath.ts","../src/math/fullMath.ts","../src/math/sqrtPriceMath.ts","../src/math/liquidityMath.ts"],"sourcesContent":["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","/**\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","import { EnvMode } from \"../types\";\nimport { CHAIN } from \"../types\";\nimport { SdkError } from \"../errors\";\n\n// =====================================================================\n// DEV — v2 service deployed on MegaETH (kernel) + Arbitrum (periphery).\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 are not yet deployed; the entries below pre-declare\n// MegaETH as the default so the rest of the SDK has a single source of\n// truth, and so changing a future env to a different kernel chain is a\n// one-line edit. When STAGING / PRODUCTION go live their address tables\n// (KERNEL_MANAGER_*, KERNEL_EVENT_EMITTER_*, etc.) need to be populated\n// alongside any chain change.\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\nfunction notDeployed(scope: string, mode: Exclude<EnvMode, \"DEV\">): never {\n throw new SdkError(\n `${scope}: SDK v2 is not yet deployed to ${mode}; only DEV is wired today. ` +\n `Either pass mode=\"DEV\" or wait for the v2 service to ship to ${mode}.`,\n );\n}\n\n/**\n * Address of the Skate Kernel Manager for the given env mode.\n *\n * Today only DEV resolves; STAGING / PRODUCTION throw an `SdkError` to\n * surface the unwired state instead of silently returning a v1-era\n * placeholder that would cause RPC reads to misfire on MegaETH.\n */\nexport function KernelManagerAddress(mode: EnvMode): `0x${string}` {\n if (mode === \"DEV\") return KERNEL_MANAGER_Dev as `0x${string}`;\n return notDeployed(\"KernelManagerAddress\", mode);\n}\n\n/**\n * Address of the Skate Kernel Event Emitter for the given env mode.\n *\n * Same alpha posture as `KernelManagerAddress` — only DEV is wired.\n */\nexport function KernelEventEmitterAddress(mode: EnvMode): `0x${string}` {\n if (mode === \"DEV\") return KERNEL_EVENT_EMITTER_Dev as `0x${string}`;\n return notDeployed(\"KernelEventEmitterAddress\", mode);\n}\n","import { CHAIN, EnvMode } from \"../types\";\nimport { SdkError } from \"../errors\";\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\nfunction notDeployed(scope: string, mode: Exclude<EnvMode, \"DEV\">): never {\n throw new SdkError(\n `${scope}: SDK v2 is not yet deployed to ${mode}; only DEV is wired today. ` +\n `Either pass mode=\"DEV\" or wait for the v2 service to ship to ${mode}.`,\n );\n}\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 DEV entry; throws `SdkError` for\n * STAGING / PRODUCTION since v2 isn't deployed there yet (mirrors the\n * kernel-side `KernelManagerAddress` posture).\n */\nexport function PeripheryDeploymentFor(\n chain: CHAIN,\n mode: EnvMode,\n): PeripheryDeployment | null {\n if (mode !== \"DEV\") return notDeployed(\"PeripheryDeploymentFor\", mode);\n return PERIPHERY_DEV[chain] ?? null;\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 } from \"../../types\";\nimport { KERNEL_POOL_USDC_USDT_Dev } from \"../kernel\";\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 },\n },\n};\n","import { PoolInfoType } from \"./_type_\";\n\n// v2 service is not deployed to STAGING yet. Populate this map when it is.\nexport const POOL_INFO_Staging: PoolInfoType = {};\n","import { PoolInfoType } from \"./_type_\";\n\n// v2 service is not deployed to PRODUCTION yet. Populate this map when it is.\nexport const POOL_INFO_Production: PoolInfoType = {};\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","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\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 * 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","notDeployed","MAX_UINT256","MAX_UINT256","INT128_MIN","INT128_MAX","MAX_UINT128"]}
|
|
1
|
+
{"version":3,"sources":["../src/types/chain.ts","../src/types/vm.ts","../src/types/mode.ts","../src/types/action.ts","../src/errors.ts","../src/deployment/kernel.ts","../src/deployment/periphery.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/math/tickMath.ts","../src/math/fullMath.ts","../src/math/sqrtPriceMath.ts","../src/math/liquidityMath.ts"],"sourcesContent":["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","/**\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","import { EnvMode } from \"../types\";\nimport { CHAIN } from \"../types\";\nimport { SdkError } from \"../errors\";\n\n// =====================================================================\n// DEV — v2 service deployed on MegaETH (kernel) + Arbitrum (periphery).\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 are not yet deployed; the entries below pre-declare\n// MegaETH as the default so the rest of the SDK has a single source of\n// truth, and so changing a future env to a different kernel chain is a\n// one-line edit. When STAGING / PRODUCTION go live their address tables\n// (KERNEL_MANAGER_*, KERNEL_EVENT_EMITTER_*, etc.) need to be populated\n// alongside any chain change.\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\nfunction notDeployed(scope: string, mode: Exclude<EnvMode, \"DEV\">): never {\n throw new SdkError(\n `${scope}: SDK v2 is not yet deployed to ${mode}; only DEV is wired today. ` +\n `Either pass mode=\"DEV\" or wait for the v2 service to ship to ${mode}.`,\n );\n}\n\n/**\n * Address of the Skate Kernel Manager for the given env mode.\n *\n * Today only DEV resolves; STAGING / PRODUCTION throw an `SdkError` to\n * surface the unwired state instead of silently returning a v1-era\n * placeholder that would cause RPC reads to misfire on MegaETH.\n */\nexport function KernelManagerAddress(mode: EnvMode): `0x${string}` {\n if (mode === \"DEV\") return KERNEL_MANAGER_Dev as `0x${string}`;\n return notDeployed(\"KernelManagerAddress\", mode);\n}\n\n/**\n * Address of the Skate Kernel Event Emitter for the given env mode.\n *\n * Same alpha posture as `KernelManagerAddress` — only DEV is wired.\n */\nexport function KernelEventEmitterAddress(mode: EnvMode): `0x${string}` {\n if (mode === \"DEV\") return KERNEL_EVENT_EMITTER_Dev as `0x${string}`;\n return notDeployed(\"KernelEventEmitterAddress\", mode);\n}\n","import { CHAIN, EnvMode } from \"../types\";\nimport { SdkError } from \"../errors\";\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\nfunction notDeployed(scope: string, mode: Exclude<EnvMode, \"DEV\">): never {\n throw new SdkError(\n `${scope}: SDK v2 is not yet deployed to ${mode}; only DEV is wired today. ` +\n `Either pass mode=\"DEV\" or wait for the v2 service to ship to ${mode}.`,\n );\n}\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 DEV entry; throws `SdkError` for\n * STAGING / PRODUCTION since v2 isn't deployed there yet (mirrors the\n * kernel-side `KernelManagerAddress` posture).\n */\nexport function PeripheryDeploymentFor(\n chain: CHAIN,\n mode: EnvMode,\n): PeripheryDeployment | null {\n if (mode !== \"DEV\") return notDeployed(\"PeripheryDeploymentFor\", mode);\n return PERIPHERY_DEV[chain] ?? null;\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 } from \"../../types\";\nimport { KERNEL_POOL_USDC_USDT_Dev } from \"../kernel\";\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 },\n },\n};\n","import { PoolInfoType } from \"./_type_\";\n\n// v2 service is not deployed to STAGING yet. Populate this map when it is.\nexport const POOL_INFO_Staging: PoolInfoType = {};\n","import { PoolInfoType } from \"./_type_\";\n\n// v2 service is not deployed to PRODUCTION yet. Populate this map when it is.\nexport const POOL_INFO_Production: PoolInfoType = {};\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 * Pass `chainIds` undefined / omitted to search every supported chain.\n */\nexport function findTokensBySymbol(\n symbol: string,\n chainIds?: readonly CHAIN[],\n mode: EnvMode = \"PRODUCTION\",\n): Token[] {\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\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 * 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","notDeployed","MAX_UINT256","MAX_UINT256","INT128_MIN","INT128_MAX","MAX_UINT128"]}
|