@skate-org/amm-core-v2 2.0.0-alpha.7 → 2.0.0-beta.0
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 +37 -0
- package/dist/adapter/skate.d.ts +0 -3
- package/dist/adapter/skate.d.ts.map +1 -1
- package/dist/deployment/kernel.d.ts +0 -6
- package/dist/deployment/kernel.d.ts.map +1 -1
- package/dist/deployment/periphery.d.ts +11 -7
- package/dist/deployment/periphery.d.ts.map +1 -1
- package/dist/index.cjs +12 -44
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +12 -33
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,42 @@
|
|
|
1
1
|
# @skate-org/amm-core-v2
|
|
2
2
|
|
|
3
|
+
## 2.0.0-beta.0 — 2026-05-07
|
|
4
|
+
|
|
5
|
+
First **beta**. Promoted under the `beta` dist-tag; `latest` stays at
|
|
6
|
+
`1.0.0` (v1 line) per the policy in `CLAUDE.md`. **Loose beta** —
|
|
7
|
+
documented breaking changes are still allowed within `2.0.0-beta.x`;
|
|
8
|
+
`2.0.0` final is the strict surface freeze.
|
|
9
|
+
|
|
10
|
+
**Breaking — internal-leak surface pulls.** Symbols that were exported in
|
|
11
|
+
the alpha line but never intended to be load-bearing have moved to module-
|
|
12
|
+
private. Internal SDK callsites all have sanctioned replacements:
|
|
13
|
+
|
|
14
|
+
- `KERNEL_EXECUTOR_REGISTRY_Dev`, `KERNEL_MESSAGE_BOX_Dev`,
|
|
15
|
+
`KERNEL_ACCOUNT_REGISTRY_Dev`, `KERNEL_MANAGER_Dev`,
|
|
16
|
+
`KERNEL_EVENT_EMITTER_Dev`, `KERNEL_POOL_IMPL_Dev` removed. Use
|
|
17
|
+
`KernelManagerAddress(mode)` / `KernelEventEmitterAddress(mode)` /
|
|
18
|
+
`POOL_INFO_Dev`. `KERNEL_POOL_USDC_USDT_Dev` stays exported as a
|
|
19
|
+
smoke-test cross-check.
|
|
20
|
+
- `PERIPHERY_PROD`, `PERIPHERY_STAGING` removed (were empty `{}`
|
|
21
|
+
placeholders). `PeripheryDeploymentFor(chain, mode)` now throws
|
|
22
|
+
`SdkError("…not yet deployed…")` for STAGING / PRODUCTION,
|
|
23
|
+
mirroring the kernel-side posture introduced in alpha.6.
|
|
24
|
+
- `bytes32HexRegex`, `isHexString`, `isHexStringLoose` removed. Use
|
|
25
|
+
`evmAddressToBytes32` / `toBytes32Address`.
|
|
26
|
+
- `PeripheryDeploymentFor` / `PeripheryManagerAddress` /
|
|
27
|
+
`PeripheryEventEmitterAddress` / `SkateGatewayAddress` /
|
|
28
|
+
`ActionBoxAddress` lost their default `mode = "PRODUCTION"` argument
|
|
29
|
+
— `mode` is now mandatory.
|
|
30
|
+
|
|
31
|
+
Surface count: 73 → 62. See `STABILITY.md` (repo root) for the full
|
|
32
|
+
per-package classification.
|
|
33
|
+
|
|
34
|
+
## 2.0.0-alpha.8 — 2026-05-07
|
|
35
|
+
|
|
36
|
+
Lockstep bump — paired with the api `streamSwapQuote` going live as a
|
|
37
|
+
polling stub for the deferred WebSocket. This package's source is
|
|
38
|
+
unchanged versus `2.0.0-alpha.7`.
|
|
39
|
+
|
|
3
40
|
## 2.0.0-alpha.7 — 2026-05-07
|
|
4
41
|
|
|
5
42
|
Lockstep bump — paired with the api action-by-user clients, polling
|
package/dist/adapter/skate.d.ts
CHANGED
|
@@ -3,9 +3,6 @@ export declare function base58ToBytes32(base58Str: string): `0x${string}`;
|
|
|
3
3
|
export declare function base58ToHex(base58Str: string): `0x${string}`;
|
|
4
4
|
export declare function hexToBase58(hexString: `0x${string}`): string;
|
|
5
5
|
export declare function bytes32ToBase58(hexStr: string): string;
|
|
6
|
-
export declare const bytes32HexRegex: RegExp;
|
|
7
|
-
export declare function isHexString(str: unknown): boolean;
|
|
8
|
-
export declare function isHexStringLoose(str: unknown): boolean;
|
|
9
6
|
export declare function evmAddressToBytes32(address: string): `0x${string}`;
|
|
10
7
|
export declare function bytes32ToEvmAddress(bytes32: string): `0x${string}`;
|
|
11
8
|
export declare function toBase58(buffer: Buffer): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skate.d.ts","sourceRoot":"","sources":["../../src/adapter/skate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAE9B,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,MAAM,EAAE,CAMhE;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,MAAM,EAAE,CAG5D;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,KAAK,MAAM,EAAE,GAAG,MAAM,CAE5D;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAMtD;
|
|
1
|
+
{"version":3,"file":"skate.d.ts","sourceRoot":"","sources":["../../src/adapter/skate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAE9B,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,MAAM,EAAE,CAMhE;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,MAAM,EAAE,CAG5D;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,KAAK,MAAM,EAAE,GAAG,MAAM,CAE5D;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAMtD;AAmBD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,MAAM,EAAE,CAKlE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,MAAM,EAAE,CAIlE;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,KAAK,MAAM,EAAE,CAc9E;AAED,wBAAgB,kBAAkB,CAAC,cAAc,EAAE,KAAK,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,CAWpF"}
|
|
@@ -1,11 +1,5 @@
|
|
|
1
1
|
import { EnvMode } from "../types";
|
|
2
2
|
import { CHAIN } from "../types";
|
|
3
|
-
export declare const KERNEL_EXECUTOR_REGISTRY_Dev = "0x45F5e211B2CAeA14d5E5cB028923F8A5D7b1ab5d";
|
|
4
|
-
export declare const KERNEL_MESSAGE_BOX_Dev = "0xe3aC86bF5D9Ab5d9705b5e9187437e978397528B";
|
|
5
|
-
export declare const KERNEL_ACCOUNT_REGISTRY_Dev = "0xeD9e139CAcb439744277be5D7fbEe5aAF4DB8fA2";
|
|
6
|
-
export declare const KERNEL_MANAGER_Dev = "0x17B7207837e8884f7f687f1f4057751BDAf70a01";
|
|
7
|
-
export declare const KERNEL_EVENT_EMITTER_Dev = "0x8989b3ecb65f250ab7A0DC03589B0Cc8b8b04b81";
|
|
8
|
-
export declare const KERNEL_POOL_IMPL_Dev = "0x9BffA944Df7914621A7Cc638C9104C106c5C6846";
|
|
9
3
|
export declare const KERNEL_POOL_USDC_USDT_Dev = "0x2c23334eE3b030e6bacEDEDf7C511eEA08Cf7E7e";
|
|
10
4
|
export declare const KERNEL_CHAIN_BY_MODE: Readonly<Record<EnvMode, CHAIN>>;
|
|
11
5
|
/** Return the kernel CHAIN id for a given env mode. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kernel.d.ts","sourceRoot":"","sources":["../../src/deployment/kernel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"kernel.d.ts","sourceRoot":"","sources":["../../src/deployment/kernel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAkBjC,eAAO,MAAM,yBAAyB,+CAA+C,CAAC;AAoBtF,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAIjE,CAAC;AAEF,uDAAuD;AACvD,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,KAAK,CAEhD;AASD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,KAAK,MAAM,EAAE,CAGjE;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,OAAO,GAAG,KAAK,MAAM,EAAE,CAGtE"}
|
|
@@ -10,11 +10,15 @@ export interface PeripheryDeployment {
|
|
|
10
10
|
peripheryPoolImpl: `0x${string}`;
|
|
11
11
|
}
|
|
12
12
|
export declare const PERIPHERY_DEV: Partial<Record<CHAIN, PeripheryDeployment>>;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
export declare function
|
|
13
|
+
/**
|
|
14
|
+
* Look up the periphery deployment record for a given chain in a given env.
|
|
15
|
+
* Returns `null` when the chain has no DEV entry; throws `SdkError` for
|
|
16
|
+
* STAGING / PRODUCTION since v2 isn't deployed there yet (mirrors the
|
|
17
|
+
* kernel-side `KernelManagerAddress` posture).
|
|
18
|
+
*/
|
|
19
|
+
export declare function PeripheryDeploymentFor(chain: CHAIN, mode: EnvMode): PeripheryDeployment | null;
|
|
20
|
+
export declare function PeripheryManagerAddress(chain: CHAIN, mode: EnvMode): `0x${string}` | null;
|
|
21
|
+
export declare function PeripheryEventEmitterAddress(chain: CHAIN, mode: EnvMode): `0x${string}` | null;
|
|
22
|
+
export declare function SkateGatewayAddress(chain: CHAIN, mode: EnvMode): `0x${string}` | null;
|
|
23
|
+
export declare function ActionBoxAddress(chain: CHAIN, mode: EnvMode): `0x${string}` | null;
|
|
20
24
|
//# sourceMappingURL=periphery.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"periphery.d.ts","sourceRoot":"","sources":["../../src/deployment/periphery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"periphery.d.ts","sourceRoot":"","sources":["../../src/deployment/periphery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAO1C,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,KAAK,MAAM,EAAE,CAAC;IACzB,gBAAgB,EAAE,KAAK,MAAM,EAAE,CAAC;IAChC,SAAS,EAAE,KAAK,MAAM,EAAE,CAAC;IACzB,YAAY,EAAE,KAAK,MAAM,EAAE,CAAC;IAC5B,gBAAgB,EAAE,KAAK,MAAM,EAAE,CAAC;IAChC,oBAAoB,EAAE,KAAK,MAAM,EAAE,CAAC;IACpC,YAAY,EAAE,KAAK,MAAM,EAAE,CAAC;IAC5B,iBAAiB,EAAE,KAAK,MAAM,EAAE,CAAC;CAClC;AAED,eAAO,MAAM,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAWrE,CAAC;AASF;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,OAAO,GACZ,mBAAmB,GAAG,IAAI,CAG5B;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,OAAO,GACZ,KAAK,MAAM,EAAE,GAAG,IAAI,CAEtB;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,OAAO,GACZ,KAAK,MAAM,EAAE,GAAG,IAAI,CAEtB;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,OAAO,GACZ,KAAK,MAAM,EAAE,GAAG,IAAI,CAEtB;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,OAAO,GACZ,KAAK,MAAM,EAAE,GAAG,IAAI,CAEtB"}
|
package/dist/index.cjs
CHANGED
|
@@ -24,13 +24,7 @@ __export(index_exports, {
|
|
|
24
24
|
BLOCK_EXPLORER: () => BLOCK_EXPLORER,
|
|
25
25
|
CHAIN: () => CHAIN,
|
|
26
26
|
CHAIN_MAP: () => CHAIN_MAP,
|
|
27
|
-
KERNEL_ACCOUNT_REGISTRY_Dev: () => KERNEL_ACCOUNT_REGISTRY_Dev,
|
|
28
27
|
KERNEL_CHAIN_BY_MODE: () => KERNEL_CHAIN_BY_MODE,
|
|
29
|
-
KERNEL_EVENT_EMITTER_Dev: () => KERNEL_EVENT_EMITTER_Dev,
|
|
30
|
-
KERNEL_EXECUTOR_REGISTRY_Dev: () => KERNEL_EXECUTOR_REGISTRY_Dev,
|
|
31
|
-
KERNEL_MANAGER_Dev: () => KERNEL_MANAGER_Dev,
|
|
32
|
-
KERNEL_MESSAGE_BOX_Dev: () => KERNEL_MESSAGE_BOX_Dev,
|
|
33
|
-
KERNEL_POOL_IMPL_Dev: () => KERNEL_POOL_IMPL_Dev,
|
|
34
28
|
KERNEL_POOL_USDC_USDT_Dev: () => KERNEL_POOL_USDC_USDT_Dev,
|
|
35
29
|
KernelChain: () => KernelChain,
|
|
36
30
|
KernelEventEmitterAddress: () => KernelEventEmitterAddress,
|
|
@@ -42,8 +36,6 @@ __export(index_exports, {
|
|
|
42
36
|
MIN_SQRT_RATIO: () => MIN_SQRT_RATIO,
|
|
43
37
|
MIN_TICK: () => MIN_TICK,
|
|
44
38
|
PERIPHERY_DEV: () => PERIPHERY_DEV,
|
|
45
|
-
PERIPHERY_PROD: () => PERIPHERY_PROD,
|
|
46
|
-
PERIPHERY_STAGING: () => PERIPHERY_STAGING,
|
|
47
39
|
POOL_INFO_Dev: () => POOL_INFO_Dev,
|
|
48
40
|
POOL_INFO_Production: () => POOL_INFO_Production,
|
|
49
41
|
POOL_INFO_Staging: () => POOL_INFO_Staging,
|
|
@@ -58,7 +50,6 @@ __export(index_exports, {
|
|
|
58
50
|
base58ToBytes32: () => base58ToBytes32,
|
|
59
51
|
base58ToHex: () => base58ToHex,
|
|
60
52
|
bufferFromBase58: () => bufferFromBase58,
|
|
61
|
-
bytes32HexRegex: () => bytes32HexRegex,
|
|
62
53
|
bytes32ToBase58: () => bytes32ToBase58,
|
|
63
54
|
bytes32ToEvmAddress: () => bytes32ToEvmAddress,
|
|
64
55
|
evmAddressToBytes32: () => evmAddressToBytes32,
|
|
@@ -83,8 +74,6 @@ __export(index_exports, {
|
|
|
83
74
|
getSupportedTokens: () => getSupportedTokens,
|
|
84
75
|
getTickAtSqrtRatio: () => getTickAtSqrtRatio,
|
|
85
76
|
hexToBase58: () => hexToBase58,
|
|
86
|
-
isHexString: () => isHexString,
|
|
87
|
-
isHexStringLoose: () => isHexStringLoose,
|
|
88
77
|
kernelPoolToPoolKey: () => kernelPoolToPoolKey,
|
|
89
78
|
mulDiv: () => mulDiv,
|
|
90
79
|
mulDivRoundingUp: () => mulDivRoundingUp,
|
|
@@ -240,12 +229,8 @@ var SdkError = class extends Error {
|
|
|
240
229
|
};
|
|
241
230
|
|
|
242
231
|
// src/deployment/kernel.ts
|
|
243
|
-
var KERNEL_EXECUTOR_REGISTRY_Dev = "0x45F5e211B2CAeA14d5E5cB028923F8A5D7b1ab5d";
|
|
244
|
-
var KERNEL_MESSAGE_BOX_Dev = "0xe3aC86bF5D9Ab5d9705b5e9187437e978397528B";
|
|
245
|
-
var KERNEL_ACCOUNT_REGISTRY_Dev = "0xeD9e139CAcb439744277be5D7fbEe5aAF4DB8fA2";
|
|
246
232
|
var KERNEL_MANAGER_Dev = "0x17B7207837e8884f7f687f1f4057751BDAf70a01";
|
|
247
233
|
var KERNEL_EVENT_EMITTER_Dev = "0x8989b3ecb65f250ab7A0DC03589B0Cc8b8b04b81";
|
|
248
|
-
var KERNEL_POOL_IMPL_Dev = "0x9BffA944Df7914621A7Cc638C9104C106c5C6846";
|
|
249
234
|
var KERNEL_POOL_USDC_USDT_Dev = "0x2c23334eE3b030e6bacEDEDf7C511eEA08Cf7E7e";
|
|
250
235
|
var KERNEL_CHAIN_BY_MODE = {
|
|
251
236
|
DEV: 4326 /* MEGAETH */,
|
|
@@ -282,22 +267,25 @@ var PERIPHERY_DEV = {
|
|
|
282
267
|
peripheryPoolImpl: "0x803ed7fa8934D4fe51A276cA02506b585cdb3eb4"
|
|
283
268
|
}
|
|
284
269
|
};
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
return table[chain] ?? null;
|
|
270
|
+
function notDeployed2(scope, mode) {
|
|
271
|
+
throw new SdkError(
|
|
272
|
+
`${scope}: SDK v2 is not yet deployed to ${mode}; only DEV is wired today. Either pass mode="DEV" or wait for the v2 service to ship to ${mode}.`
|
|
273
|
+
);
|
|
290
274
|
}
|
|
291
|
-
function
|
|
275
|
+
function PeripheryDeploymentFor(chain, mode) {
|
|
276
|
+
if (mode !== "DEV") return notDeployed2("PeripheryDeploymentFor", mode);
|
|
277
|
+
return PERIPHERY_DEV[chain] ?? null;
|
|
278
|
+
}
|
|
279
|
+
function PeripheryManagerAddress(chain, mode) {
|
|
292
280
|
return PeripheryDeploymentFor(chain, mode)?.peripheryManager ?? null;
|
|
293
281
|
}
|
|
294
|
-
function PeripheryEventEmitterAddress(chain, mode
|
|
282
|
+
function PeripheryEventEmitterAddress(chain, mode) {
|
|
295
283
|
return PeripheryDeploymentFor(chain, mode)?.eventEmitter ?? null;
|
|
296
284
|
}
|
|
297
|
-
function SkateGatewayAddress(chain, mode
|
|
285
|
+
function SkateGatewayAddress(chain, mode) {
|
|
298
286
|
return PeripheryDeploymentFor(chain, mode)?.skateGateway ?? null;
|
|
299
287
|
}
|
|
300
|
-
function ActionBoxAddress(chain, mode
|
|
288
|
+
function ActionBoxAddress(chain, mode) {
|
|
301
289
|
return PeripheryDeploymentFor(chain, mode)?.actionBox ?? null;
|
|
302
290
|
}
|
|
303
291
|
|
|
@@ -430,14 +418,11 @@ __export(skate_exports, {
|
|
|
430
418
|
base58ToBytes32: () => base58ToBytes32,
|
|
431
419
|
base58ToHex: () => base58ToHex,
|
|
432
420
|
bufferFromBase58: () => bufferFromBase58,
|
|
433
|
-
bytes32HexRegex: () => bytes32HexRegex,
|
|
434
421
|
bytes32ToBase58: () => bytes32ToBase58,
|
|
435
422
|
bytes32ToEvmAddress: () => bytes32ToEvmAddress,
|
|
436
423
|
evmAddressToBytes32: () => evmAddressToBytes32,
|
|
437
424
|
fromBytes32Address: () => fromBytes32Address,
|
|
438
425
|
hexToBase58: () => hexToBase58,
|
|
439
|
-
isHexString: () => isHexString,
|
|
440
|
-
isHexStringLoose: () => isHexStringLoose,
|
|
441
426
|
toBase58: () => toBase58,
|
|
442
427
|
toBytes32Address: () => toBytes32Address
|
|
443
428
|
});
|
|
@@ -561,12 +546,6 @@ function bytes32ToBase58(hexStr) {
|
|
|
561
546
|
return bs58Encode(trimmed);
|
|
562
547
|
}
|
|
563
548
|
var bytes32HexRegex = /^(?:0x)?[0-9a-fA-F]{64}$/;
|
|
564
|
-
function isHexString(str) {
|
|
565
|
-
return typeof str === "string" && /^0x[0-9a-fA-F]+$/.test(str);
|
|
566
|
-
}
|
|
567
|
-
function isHexStringLoose(str) {
|
|
568
|
-
return typeof str === "string" && /^(?:0x)?[0-9a-fA-F]+$/.test(str);
|
|
569
|
-
}
|
|
570
549
|
function evmAddressToBytes32(address) {
|
|
571
550
|
if (!address.startsWith("0x") && !address.startsWith("0X")) {
|
|
572
551
|
throw new TypeError(`evmAddressToBytes32: expected 0x-prefixed address, got "${address}"`);
|
|
@@ -963,13 +942,7 @@ function addDelta(x, y) {
|
|
|
963
942
|
BLOCK_EXPLORER,
|
|
964
943
|
CHAIN,
|
|
965
944
|
CHAIN_MAP,
|
|
966
|
-
KERNEL_ACCOUNT_REGISTRY_Dev,
|
|
967
945
|
KERNEL_CHAIN_BY_MODE,
|
|
968
|
-
KERNEL_EVENT_EMITTER_Dev,
|
|
969
|
-
KERNEL_EXECUTOR_REGISTRY_Dev,
|
|
970
|
-
KERNEL_MANAGER_Dev,
|
|
971
|
-
KERNEL_MESSAGE_BOX_Dev,
|
|
972
|
-
KERNEL_POOL_IMPL_Dev,
|
|
973
946
|
KERNEL_POOL_USDC_USDT_Dev,
|
|
974
947
|
KernelChain,
|
|
975
948
|
KernelEventEmitterAddress,
|
|
@@ -981,8 +954,6 @@ function addDelta(x, y) {
|
|
|
981
954
|
MIN_SQRT_RATIO,
|
|
982
955
|
MIN_TICK,
|
|
983
956
|
PERIPHERY_DEV,
|
|
984
|
-
PERIPHERY_PROD,
|
|
985
|
-
PERIPHERY_STAGING,
|
|
986
957
|
POOL_INFO_Dev,
|
|
987
958
|
POOL_INFO_Production,
|
|
988
959
|
POOL_INFO_Staging,
|
|
@@ -997,7 +968,6 @@ function addDelta(x, y) {
|
|
|
997
968
|
base58ToBytes32,
|
|
998
969
|
base58ToHex,
|
|
999
970
|
bufferFromBase58,
|
|
1000
|
-
bytes32HexRegex,
|
|
1001
971
|
bytes32ToBase58,
|
|
1002
972
|
bytes32ToEvmAddress,
|
|
1003
973
|
evmAddressToBytes32,
|
|
@@ -1022,8 +992,6 @@ function addDelta(x, y) {
|
|
|
1022
992
|
getSupportedTokens,
|
|
1023
993
|
getTickAtSqrtRatio,
|
|
1024
994
|
hexToBase58,
|
|
1025
|
-
isHexString,
|
|
1026
|
-
isHexStringLoose,
|
|
1027
995
|
kernelPoolToPoolKey,
|
|
1028
996
|
mulDiv,
|
|
1029
997
|
mulDivRoundingUp,
|
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// =====================================================================\nexport const KERNEL_EXECUTOR_REGISTRY_Dev = \"0x45F5e211B2CAeA14d5E5cB028923F8A5D7b1ab5d\";\nexport const KERNEL_MESSAGE_BOX_Dev = \"0xe3aC86bF5D9Ab5d9705b5e9187437e978397528B\";\nexport const KERNEL_ACCOUNT_REGISTRY_Dev = \"0xeD9e139CAcb439744277be5D7fbEe5aAF4DB8fA2\";\nexport const KERNEL_MANAGER_Dev = \"0x17B7207837e8884f7f687f1f4057751BDAf70a01\";\nexport const KERNEL_EVENT_EMITTER_Dev = \"0x8989b3ecb65f250ab7A0DC03589B0Cc8b8b04b81\";\nexport const KERNEL_POOL_IMPL_Dev = \"0x9BffA944Df7914621A7Cc638C9104C106c5C6846\";\nexport const KERNEL_POOL_USDC_USDT_Dev = \"0x2c23334eE3b030e6bacEDEDf7C511eEA08Cf7E7e\";\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\";\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\nexport const PERIPHERY_STAGING: Partial<Record<CHAIN, PeripheryDeployment>> = {};\nexport const PERIPHERY_PROD: Partial<Record<CHAIN, PeripheryDeployment>> = {};\n\nexport function PeripheryDeploymentFor(\n chain: CHAIN,\n mode: EnvMode = \"PRODUCTION\",\n): PeripheryDeployment | null {\n const table =\n mode === \"DEV\" ? PERIPHERY_DEV : mode === \"STAGING\" ? PERIPHERY_STAGING : PERIPHERY_PROD;\n return table[chain] ?? null;\n}\n\nexport function PeripheryManagerAddress(\n chain: CHAIN,\n mode: EnvMode = \"PRODUCTION\",\n): `0x${string}` | null {\n return PeripheryDeploymentFor(chain, mode)?.peripheryManager ?? null;\n}\n\nexport function PeripheryEventEmitterAddress(\n chain: CHAIN,\n mode: EnvMode = \"PRODUCTION\",\n): `0x${string}` | null {\n return PeripheryDeploymentFor(chain, mode)?.eventEmitter ?? null;\n}\n\nexport function SkateGatewayAddress(\n chain: CHAIN,\n mode: EnvMode = \"PRODUCTION\",\n): `0x${string}` | null {\n return PeripheryDeploymentFor(chain, mode)?.skateGateway ?? null;\n}\n\nexport function ActionBoxAddress(\n chain: CHAIN,\n mode: EnvMode = \"PRODUCTION\",\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\nexport const bytes32HexRegex = /^(?:0x)?[0-9a-fA-F]{64}$/;\n\nexport function isHexString(str: unknown): boolean {\n return typeof str === \"string\" && /^0x[0-9a-fA-F]+$/.test(str);\n}\n\nexport function isHexStringLoose(str: unknown): boolean {\n return typeof str === \"string\" && /^(?:0x)?[0-9a-fA-F]+$/.test(str);\n}\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","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","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
|
@@ -148,12 +148,8 @@ var SdkError = class extends Error {
|
|
|
148
148
|
};
|
|
149
149
|
|
|
150
150
|
// src/deployment/kernel.ts
|
|
151
|
-
var KERNEL_EXECUTOR_REGISTRY_Dev = "0x45F5e211B2CAeA14d5E5cB028923F8A5D7b1ab5d";
|
|
152
|
-
var KERNEL_MESSAGE_BOX_Dev = "0xe3aC86bF5D9Ab5d9705b5e9187437e978397528B";
|
|
153
|
-
var KERNEL_ACCOUNT_REGISTRY_Dev = "0xeD9e139CAcb439744277be5D7fbEe5aAF4DB8fA2";
|
|
154
151
|
var KERNEL_MANAGER_Dev = "0x17B7207837e8884f7f687f1f4057751BDAf70a01";
|
|
155
152
|
var KERNEL_EVENT_EMITTER_Dev = "0x8989b3ecb65f250ab7A0DC03589B0Cc8b8b04b81";
|
|
156
|
-
var KERNEL_POOL_IMPL_Dev = "0x9BffA944Df7914621A7Cc638C9104C106c5C6846";
|
|
157
153
|
var KERNEL_POOL_USDC_USDT_Dev = "0x2c23334eE3b030e6bacEDEDf7C511eEA08Cf7E7e";
|
|
158
154
|
var KERNEL_CHAIN_BY_MODE = {
|
|
159
155
|
DEV: 4326 /* MEGAETH */,
|
|
@@ -190,22 +186,25 @@ var PERIPHERY_DEV = {
|
|
|
190
186
|
peripheryPoolImpl: "0x803ed7fa8934D4fe51A276cA02506b585cdb3eb4"
|
|
191
187
|
}
|
|
192
188
|
};
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
return table[chain] ?? null;
|
|
189
|
+
function notDeployed2(scope, mode) {
|
|
190
|
+
throw new SdkError(
|
|
191
|
+
`${scope}: SDK v2 is not yet deployed to ${mode}; only DEV is wired today. Either pass mode="DEV" or wait for the v2 service to ship to ${mode}.`
|
|
192
|
+
);
|
|
198
193
|
}
|
|
199
|
-
function
|
|
194
|
+
function PeripheryDeploymentFor(chain, mode) {
|
|
195
|
+
if (mode !== "DEV") return notDeployed2("PeripheryDeploymentFor", mode);
|
|
196
|
+
return PERIPHERY_DEV[chain] ?? null;
|
|
197
|
+
}
|
|
198
|
+
function PeripheryManagerAddress(chain, mode) {
|
|
200
199
|
return PeripheryDeploymentFor(chain, mode)?.peripheryManager ?? null;
|
|
201
200
|
}
|
|
202
|
-
function PeripheryEventEmitterAddress(chain, mode
|
|
201
|
+
function PeripheryEventEmitterAddress(chain, mode) {
|
|
203
202
|
return PeripheryDeploymentFor(chain, mode)?.eventEmitter ?? null;
|
|
204
203
|
}
|
|
205
|
-
function SkateGatewayAddress(chain, mode
|
|
204
|
+
function SkateGatewayAddress(chain, mode) {
|
|
206
205
|
return PeripheryDeploymentFor(chain, mode)?.skateGateway ?? null;
|
|
207
206
|
}
|
|
208
|
-
function ActionBoxAddress(chain, mode
|
|
207
|
+
function ActionBoxAddress(chain, mode) {
|
|
209
208
|
return PeripheryDeploymentFor(chain, mode)?.actionBox ?? null;
|
|
210
209
|
}
|
|
211
210
|
|
|
@@ -338,14 +337,11 @@ __export(skate_exports, {
|
|
|
338
337
|
base58ToBytes32: () => base58ToBytes32,
|
|
339
338
|
base58ToHex: () => base58ToHex,
|
|
340
339
|
bufferFromBase58: () => bufferFromBase58,
|
|
341
|
-
bytes32HexRegex: () => bytes32HexRegex,
|
|
342
340
|
bytes32ToBase58: () => bytes32ToBase58,
|
|
343
341
|
bytes32ToEvmAddress: () => bytes32ToEvmAddress,
|
|
344
342
|
evmAddressToBytes32: () => evmAddressToBytes32,
|
|
345
343
|
fromBytes32Address: () => fromBytes32Address,
|
|
346
344
|
hexToBase58: () => hexToBase58,
|
|
347
|
-
isHexString: () => isHexString,
|
|
348
|
-
isHexStringLoose: () => isHexStringLoose,
|
|
349
345
|
toBase58: () => toBase58,
|
|
350
346
|
toBytes32Address: () => toBytes32Address
|
|
351
347
|
});
|
|
@@ -469,12 +465,6 @@ function bytes32ToBase58(hexStr) {
|
|
|
469
465
|
return bs58Encode(trimmed);
|
|
470
466
|
}
|
|
471
467
|
var bytes32HexRegex = /^(?:0x)?[0-9a-fA-F]{64}$/;
|
|
472
|
-
function isHexString(str) {
|
|
473
|
-
return typeof str === "string" && /^0x[0-9a-fA-F]+$/.test(str);
|
|
474
|
-
}
|
|
475
|
-
function isHexStringLoose(str) {
|
|
476
|
-
return typeof str === "string" && /^(?:0x)?[0-9a-fA-F]+$/.test(str);
|
|
477
|
-
}
|
|
478
468
|
function evmAddressToBytes32(address) {
|
|
479
469
|
if (!address.startsWith("0x") && !address.startsWith("0X")) {
|
|
480
470
|
throw new TypeError(`evmAddressToBytes32: expected 0x-prefixed address, got "${address}"`);
|
|
@@ -870,13 +860,7 @@ export {
|
|
|
870
860
|
BLOCK_EXPLORER,
|
|
871
861
|
CHAIN,
|
|
872
862
|
CHAIN_MAP,
|
|
873
|
-
KERNEL_ACCOUNT_REGISTRY_Dev,
|
|
874
863
|
KERNEL_CHAIN_BY_MODE,
|
|
875
|
-
KERNEL_EVENT_EMITTER_Dev,
|
|
876
|
-
KERNEL_EXECUTOR_REGISTRY_Dev,
|
|
877
|
-
KERNEL_MANAGER_Dev,
|
|
878
|
-
KERNEL_MESSAGE_BOX_Dev,
|
|
879
|
-
KERNEL_POOL_IMPL_Dev,
|
|
880
864
|
KERNEL_POOL_USDC_USDT_Dev,
|
|
881
865
|
KernelChain,
|
|
882
866
|
KernelEventEmitterAddress,
|
|
@@ -888,8 +872,6 @@ export {
|
|
|
888
872
|
MIN_SQRT_RATIO,
|
|
889
873
|
MIN_TICK,
|
|
890
874
|
PERIPHERY_DEV,
|
|
891
|
-
PERIPHERY_PROD,
|
|
892
|
-
PERIPHERY_STAGING,
|
|
893
875
|
POOL_INFO_Dev,
|
|
894
876
|
POOL_INFO_Production,
|
|
895
877
|
POOL_INFO_Staging,
|
|
@@ -904,7 +886,6 @@ export {
|
|
|
904
886
|
base58ToBytes32,
|
|
905
887
|
base58ToHex,
|
|
906
888
|
bufferFromBase58,
|
|
907
|
-
bytes32HexRegex,
|
|
908
889
|
bytes32ToBase58,
|
|
909
890
|
bytes32ToEvmAddress,
|
|
910
891
|
evmAddressToBytes32,
|
|
@@ -929,8 +910,6 @@ export {
|
|
|
929
910
|
getSupportedTokens,
|
|
930
911
|
getTickAtSqrtRatio,
|
|
931
912
|
hexToBase58,
|
|
932
|
-
isHexString,
|
|
933
|
-
isHexStringLoose,
|
|
934
913
|
kernelPoolToPoolKey,
|
|
935
914
|
mulDiv,
|
|
936
915
|
mulDivRoundingUp,
|
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// =====================================================================\nexport const KERNEL_EXECUTOR_REGISTRY_Dev = \"0x45F5e211B2CAeA14d5E5cB028923F8A5D7b1ab5d\";\nexport const KERNEL_MESSAGE_BOX_Dev = \"0xe3aC86bF5D9Ab5d9705b5e9187437e978397528B\";\nexport const KERNEL_ACCOUNT_REGISTRY_Dev = \"0xeD9e139CAcb439744277be5D7fbEe5aAF4DB8fA2\";\nexport const KERNEL_MANAGER_Dev = \"0x17B7207837e8884f7f687f1f4057751BDAf70a01\";\nexport const KERNEL_EVENT_EMITTER_Dev = \"0x8989b3ecb65f250ab7A0DC03589B0Cc8b8b04b81\";\nexport const KERNEL_POOL_IMPL_Dev = \"0x9BffA944Df7914621A7Cc638C9104C106c5C6846\";\nexport const KERNEL_POOL_USDC_USDT_Dev = \"0x2c23334eE3b030e6bacEDEDf7C511eEA08Cf7E7e\";\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\";\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\nexport const PERIPHERY_STAGING: Partial<Record<CHAIN, PeripheryDeployment>> = {};\nexport const PERIPHERY_PROD: Partial<Record<CHAIN, PeripheryDeployment>> = {};\n\nexport function PeripheryDeploymentFor(\n chain: CHAIN,\n mode: EnvMode = \"PRODUCTION\",\n): PeripheryDeployment | null {\n const table =\n mode === \"DEV\" ? PERIPHERY_DEV : mode === \"STAGING\" ? PERIPHERY_STAGING : PERIPHERY_PROD;\n return table[chain] ?? null;\n}\n\nexport function PeripheryManagerAddress(\n chain: CHAIN,\n mode: EnvMode = \"PRODUCTION\",\n): `0x${string}` | null {\n return PeripheryDeploymentFor(chain, mode)?.peripheryManager ?? null;\n}\n\nexport function PeripheryEventEmitterAddress(\n chain: CHAIN,\n mode: EnvMode = \"PRODUCTION\",\n): `0x${string}` | null {\n return PeripheryDeploymentFor(chain, mode)?.eventEmitter ?? null;\n}\n\nexport function SkateGatewayAddress(\n chain: CHAIN,\n mode: EnvMode = \"PRODUCTION\",\n): `0x${string}` | null {\n return PeripheryDeploymentFor(chain, mode)?.skateGateway ?? null;\n}\n\nexport function ActionBoxAddress(\n chain: CHAIN,\n mode: EnvMode = \"PRODUCTION\",\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\nexport const bytes32HexRegex = /^(?:0x)?[0-9a-fA-F]{64}$/;\n\nexport function isHexString(str: unknown): boolean {\n return typeof str === \"string\" && /^0x[0-9a-fA-F]+$/.test(str);\n}\n\nexport function isHexStringLoose(str: unknown): boolean {\n return typeof str === \"string\" && /^(?:0x)?[0-9a-fA-F]+$/.test(str);\n}\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","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","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"]}
|