@whetstone-research/doppler-sdk 1.0.13 → 1.0.15

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.
Files changed (33) hide show
  1. package/README.md +48 -12
  2. package/dist/{chunk-AT33RY6T.cjs → chunk-3BW6IVP3.cjs} +46 -37
  3. package/dist/chunk-3BW6IVP3.cjs.map +1 -0
  4. package/dist/{chunk-ZQEEGBXT.js → chunk-NMTYI3TB.js} +23 -26
  5. package/dist/chunk-NMTYI3TB.js.map +1 -0
  6. package/dist/{chunk-2NFQKIOB.js → chunk-TVBSIQIX.js} +35 -26
  7. package/dist/chunk-TVBSIQIX.js.map +1 -0
  8. package/dist/{chunk-LL7TW3GU.cjs → chunk-W5TMS4RD.cjs} +56 -59
  9. package/dist/chunk-W5TMS4RD.cjs.map +1 -0
  10. package/dist/{oracle-CU-nZnja.d.cts → oracle-DN8BrGPh.d.cts} +28 -28
  11. package/dist/{oracle-CU-nZnja.d.ts → oracle-DN8BrGPh.d.ts} +28 -28
  12. package/dist/{pda-FLNTBIC5.js → pda-5D3GD5S6.js} +3 -3
  13. package/dist/pda-5D3GD5S6.js.map +1 -0
  14. package/dist/{pda-G25AJSXG.cjs → pda-GNZYNRUH.cjs} +17 -17
  15. package/dist/{pda-G25AJSXG.cjs.map → pda-GNZYNRUH.cjs.map} +1 -1
  16. package/dist/solana/index.cjs +910 -743
  17. package/dist/solana/index.cjs.map +1 -1
  18. package/dist/solana/index.d.cts +560 -472
  19. package/dist/solana/index.d.ts +560 -472
  20. package/dist/solana/index.js +772 -607
  21. package/dist/solana/index.js.map +1 -1
  22. package/dist/solana/react/index.cjs +57 -57
  23. package/dist/solana/react/index.cjs.map +1 -1
  24. package/dist/solana/react/index.d.cts +5 -5
  25. package/dist/solana/react/index.d.ts +5 -5
  26. package/dist/solana/react/index.js +15 -15
  27. package/dist/solana/react/index.js.map +1 -1
  28. package/package.json +4 -2
  29. package/dist/chunk-2NFQKIOB.js.map +0 -1
  30. package/dist/chunk-AT33RY6T.cjs.map +0 -1
  31. package/dist/chunk-LL7TW3GU.cjs.map +0 -1
  32. package/dist/chunk-ZQEEGBXT.js.map +0 -1
  33. package/dist/pda-FLNTBIC5.js.map +0 -1
package/README.md CHANGED
@@ -1,20 +1,20 @@
1
1
  # Doppler SDK
2
2
 
3
- A unified TypeScript SDK for interacting with the Doppler Protocol - enabling fair token launches through Dutch auction mechanisms on Uniswap.
3
+ A unified TypeScript SDK for interacting with the Doppler Protocol across EVM and Solana/SVM deployments.
4
4
 
5
5
  ## Overview
6
6
 
7
- The Doppler SDK consolidates functionality from the previous `doppler-v3-sdk` and `doppler-v4-sdk` packages into a single, intuitive interface. It provides comprehensive support for creating and managing token auctions on Ethereum and EVM-compatible chains.
7
+ The Doppler SDK exposes network-specific entrypoints for creating, managing, and interacting with Doppler launches. The EVM entrypoint consolidates functionality from the previous `doppler-v3-sdk` and `doppler-v4-sdk` packages into one interface for Ethereum and EVM-compatible chains. The Solana entrypoint provides generated instruction builders, PDA helpers, clients, React bindings, and examples for Doppler's SVM programs.
8
8
 
9
9
  ### Key Features
10
10
 
11
- - **Static Auctions**: Fixed price range liquidity bootstrapping using Uniswap V3
12
- - **Dynamic Auctions**: Gradual Dutch auctions using Uniswap V4 hooks
13
- - **Multicurve Initializer**: Seed Uniswap V4 pools across multiple curves
14
- - **Flexible Migration**: Support for V2, V2 split, V4, V4 split, DopplerHook, and no-op migration paths
15
- - **Token Management**: Built-in support for DERC20 tokens with vesting
16
- - **Type Safety**: Full TypeScript support with discriminated unions
17
- - **Chain Support**: Works with Base, Unichain, Ink, and other EVM chains
11
+ - **EVM Auctions**: Static auctions, dynamic auctions, and multicurve launches across Uniswap V3/V4 paths
12
+ - **EVM Migration Paths**: Support for V2, V2 split, V4, V4 split, DopplerHook, and no-op migration
13
+ - **Solana Launches**: Initializer, CPMM, migrator, hook, oracle, and Token-2022-compatible instruction helpers
14
+ - **Solana Clients and React**: Read clients, PDA helpers, generated codecs, and optional React bindings
15
+ - **Token Management**: Built-in EVM support for DERC20 tokens with vesting
16
+ - **Type Safety**: Full TypeScript support across EVM and Solana entrypoints
17
+ - **Network Support**: EVM deployments on Base, Unichain, Ink, and other supported chains; Solana/SVM support via explicit Solana program deployments
18
18
 
19
19
  ## Installation
20
20
 
@@ -26,12 +26,18 @@ yarn add @whetstone-research/doppler-sdk viem
26
26
  pnpm add @whetstone-research/doppler-sdk viem
27
27
  ```
28
28
 
29
- Import EVM APIs from `@whetstone-research/doppler-sdk/evm`. Solana APIs live under
30
- `@whetstone-research/doppler-sdk/solana` and React bindings under
31
- `@whetstone-research/doppler-sdk/solana/react`.
29
+ Use network-specific entrypoints:
30
+
31
+ ```typescript
32
+ import { DopplerSDK } from '@whetstone-research/doppler-sdk/evm';
33
+ import { initializer, cpmm, cpmmMigrator } from '@whetstone-research/doppler-sdk/solana';
34
+ import { DopplerSolanaProvider } from '@whetstone-research/doppler-sdk/solana/react';
35
+ ```
32
36
 
33
37
  ## Quick Start
34
38
 
39
+ ### EVM
40
+
35
41
  ```typescript
36
42
  import { DopplerSDK } from '@whetstone-research/doppler-sdk/evm';
37
43
  import { createPublicClient, createWalletClient, http } from 'viem';
@@ -57,6 +63,36 @@ const sdk = new DopplerSDK({
57
63
  });
58
64
  ```
59
65
 
66
+ ### Solana
67
+
68
+ ```typescript
69
+ import { address, createSolanaRpc, type Address } from '@solana/kit';
70
+ import { cpmm, initializer } from '@whetstone-research/doppler-sdk/solana';
71
+
72
+ const rpc = createSolanaRpc('https://api.devnet.solana.com');
73
+ const WSOL_MINT: Address =
74
+ 'So11111111111111111111111111111111111111112' as Address;
75
+
76
+ if (!process.env.BASE_MINT) {
77
+ throw new Error('BASE_MINT must be set');
78
+ }
79
+
80
+ const baseMint = address(process.env.BASE_MINT);
81
+ const [initializerConfig] = await initializer.getConfigAddress();
82
+ const [cpmmConfig] = await cpmm.getConfigAddress();
83
+ const pool = await cpmm.getPoolByMints(rpc, baseMint, WSOL_MINT);
84
+
85
+ console.log('Initializer config:', initializerConfig);
86
+ console.log('CPMM config:', cpmmConfig);
87
+ console.log('Pool:', pool?.address ?? 'not found');
88
+ ```
89
+
90
+ For runnable Solana flows, see:
91
+
92
+ - [examples/solana-launch-by-marketcap.ts](./examples/solana-launch-by-marketcap.ts)
93
+ - [examples/solana-adv-e2e-launch.ts](./examples/solana-adv-e2e-launch.ts)
94
+ - [examples/solana-swap.ts](./examples/solana-swap.ts)
95
+
60
96
  ## Creating Auctions
61
97
 
62
98
  ### Static Auction (Fixed Price Range)
@@ -18,7 +18,7 @@ var TOKEN_METADATA_PROGRAM_ID = kit.address(
18
18
  var BPS_DENOM = 10000n;
19
19
  var Q64_ONE = 1n << 64n;
20
20
  var ACCOUNT_VERSION = 1;
21
- var MAX_SENTINEL_ALLOWLIST = 32;
21
+ var MAX_HOOK_ALLOWLIST = 32;
22
22
  var MAX_ORACLE_OBSERVATIONS = 64;
23
23
  var SEED_CONFIG = "config";
24
24
  var SEED_POOL = "pool";
@@ -27,16 +27,16 @@ var SEED_VAULT0 = "vault0";
27
27
  var SEED_VAULT1 = "vault1";
28
28
  var SEED_POSITION = "position";
29
29
  var SEED_ORACLE = "oracle";
30
- var SEED_PROTOCOL_POSITION = "protocol_position";
31
- var SF_BEFORE_SWAP = 1 << 0;
32
- var SF_AFTER_SWAP = 1 << 1;
33
- var SF_BEFORE_ADD_LIQ = 1 << 2;
34
- var SF_AFTER_ADD_LIQ = 1 << 3;
35
- var SF_BEFORE_REMOVE_LIQ = 1 << 4;
36
- var SF_AFTER_REMOVE_LIQ = 1 << 5;
37
- var SF_REQUIRE_ORACLE = 1 << 6;
38
- var SF_FORWARD_READONLY_SIGNERS = 1 << 7;
39
- var SENTINEL_NO_CHANGE = 65535;
30
+ var SEED_PROTOCOL_FEE_POSITION = "protocol_position";
31
+ var HF_BEFORE_SWAP = 1 << 0;
32
+ var HF_AFTER_SWAP = 1 << 1;
33
+ var HF_BEFORE_ADD_LIQ = 1 << 2;
34
+ var HF_AFTER_ADD_LIQ = 1 << 3;
35
+ var HF_BEFORE_REMOVE_LIQ = 1 << 4;
36
+ var HF_AFTER_REMOVE_LIQ = 1 << 5;
37
+ var HF_REQUIRE_ORACLE = 1 << 6;
38
+ var HF_FORWARD_READONLY_SIGNERS = 1 << 7;
39
+ var HOOK_NO_CHANGE = 65535;
40
40
  var INSTRUCTION_DISCRIMINATORS = {
41
41
  // SHA256("global:initialize_config")[0:8]
42
42
  initializeConfig: new Uint8Array([
@@ -163,8 +163,8 @@ var INSTRUCTION_DISCRIMINATORS = {
163
163
  143,
164
164
  57
165
165
  ]),
166
- // SHA256("global:set_sentinel")[0:8]
167
- setSentinel: new Uint8Array([94, 200, 82, 129, 53, 149, 232, 113]),
166
+ // SHA256("global:set_hook")[0:8]
167
+ setHook: new Uint8Array([175, 16, 187, 252, 19, 54, 111, 221]),
168
168
  // SHA256("global:set_fees")[0:8]
169
169
  setFees: new Uint8Array([137, 178, 49, 58, 0, 245, 242, 190]),
170
170
  // SHA256("global:set_route")[0:8]
@@ -184,8 +184,17 @@ var INSTRUCTION_DISCRIMINATORS = {
184
184
  pause: new Uint8Array([211, 22, 221, 251, 74, 121, 193, 47]),
185
185
  // SHA256("global:unpause")[0:8]
186
186
  unpause: new Uint8Array([169, 144, 4, 38, 10, 141, 188, 255]),
187
- // SHA256("global:skim")[0:8]
188
- skim: new Uint8Array([238, 120, 221, 138, 82, 60, 100, 218])
187
+ // SHA256("global:withdraw_vault_excess")[0:8]
188
+ withdrawVaultExcess: new Uint8Array([
189
+ 235,
190
+ 197,
191
+ 247,
192
+ 177,
193
+ 137,
194
+ 72,
195
+ 135,
196
+ 113
197
+ ])
189
198
  };
190
199
  var ACCOUNT_DISCRIMINATORS = {
191
200
  // SHA256("account:AmmConfig")[0:8]
@@ -278,11 +287,11 @@ async function getOracleAddress(pool, programId = CPMM_PROGRAM_ID) {
278
287
  seeds: [textEncoder.encode(SEED_ORACLE), addressCodec.encode(pool)]
279
288
  });
280
289
  }
281
- async function getProtocolPositionAddress(pool, programId = CPMM_PROGRAM_ID) {
290
+ async function getProtocolFeePositionAddress(pool, programId = CPMM_PROGRAM_ID) {
282
291
  return kit.getProgramDerivedAddress({
283
292
  programAddress: programId,
284
293
  seeds: [
285
- textEncoder.encode(SEED_PROTOCOL_POSITION),
294
+ textEncoder.encode(SEED_PROTOCOL_FEE_POSITION),
286
295
  addressCodec.encode(pool)
287
296
  ]
288
297
  });
@@ -293,11 +302,11 @@ async function getPoolInitAddresses(mint0, mint1, programId = CPMM_PROGRAM_ID) {
293
302
  getConfigAddress(programId),
294
303
  getPoolAddress(token0, token1, programId)
295
304
  ]);
296
- const [authority, vault0, vault1, protocolPosition] = await Promise.all([
305
+ const [authority, vault0, vault1, protocolFeePosition] = await Promise.all([
297
306
  getPoolAuthorityAddress(pool[0], programId),
298
307
  getPoolVault0Address(pool[0], programId),
299
308
  getPoolVault1Address(pool[0], programId),
300
- getProtocolPositionAddress(pool[0], programId)
309
+ getProtocolFeePositionAddress(pool[0], programId)
301
310
  ]);
302
311
  return {
303
312
  token0,
@@ -307,7 +316,7 @@ async function getPoolInitAddresses(mint0, mint1, programId = CPMM_PROGRAM_ID) {
307
316
  vault0,
308
317
  vault1,
309
318
  config,
310
- protocolPosition
319
+ protocolFeePosition
311
320
  };
312
321
  }
313
322
  async function getSwapAddresses(pool, programId = CPMM_PROGRAM_ID) {
@@ -319,14 +328,14 @@ async function getSwapAddresses(pool, programId = CPMM_PROGRAM_ID) {
319
328
  return { config, authority, oracle };
320
329
  }
321
330
  async function getLiquidityAddresses(pool, owner, positionId, programId = CPMM_PROGRAM_ID) {
322
- const [config, authority, position, protocolPosition, oracle] = await Promise.all([
331
+ const [config, authority, position, protocolFeePosition, oracle] = await Promise.all([
323
332
  getConfigAddress(programId),
324
333
  getPoolAuthorityAddress(pool, programId),
325
334
  getPositionAddress(pool, owner, positionId, programId),
326
- getProtocolPositionAddress(pool, programId),
335
+ getProtocolFeePositionAddress(pool, programId),
327
336
  getOracleAddress(pool, programId)
328
337
  ]);
329
- return { config, authority, position, protocolPosition, oracle };
338
+ return { config, authority, position, protocolFeePosition, oracle };
330
339
  }
331
340
 
332
341
  Object.defineProperty(exports, "TOKEN_PROGRAM_ADDRESS", {
@@ -341,25 +350,25 @@ exports.ACCOUNT_DISCRIMINATORS = ACCOUNT_DISCRIMINATORS;
341
350
  exports.ACCOUNT_VERSION = ACCOUNT_VERSION;
342
351
  exports.BPS_DENOM = BPS_DENOM;
343
352
  exports.CPMM_PROGRAM_ID = CPMM_PROGRAM_ID;
353
+ exports.HF_AFTER_ADD_LIQ = HF_AFTER_ADD_LIQ;
354
+ exports.HF_AFTER_REMOVE_LIQ = HF_AFTER_REMOVE_LIQ;
355
+ exports.HF_AFTER_SWAP = HF_AFTER_SWAP;
356
+ exports.HF_BEFORE_ADD_LIQ = HF_BEFORE_ADD_LIQ;
357
+ exports.HF_BEFORE_REMOVE_LIQ = HF_BEFORE_REMOVE_LIQ;
358
+ exports.HF_BEFORE_SWAP = HF_BEFORE_SWAP;
359
+ exports.HF_FORWARD_READONLY_SIGNERS = HF_FORWARD_READONLY_SIGNERS;
360
+ exports.HF_REQUIRE_ORACLE = HF_REQUIRE_ORACLE;
361
+ exports.HOOK_NO_CHANGE = HOOK_NO_CHANGE;
344
362
  exports.INSTRUCTION_DISCRIMINATORS = INSTRUCTION_DISCRIMINATORS;
363
+ exports.MAX_HOOK_ALLOWLIST = MAX_HOOK_ALLOWLIST;
345
364
  exports.MAX_ORACLE_OBSERVATIONS = MAX_ORACLE_OBSERVATIONS;
346
- exports.MAX_SENTINEL_ALLOWLIST = MAX_SENTINEL_ALLOWLIST;
347
365
  exports.Q64_ONE = Q64_ONE;
348
366
  exports.SEED_AUTHORITY = SEED_AUTHORITY;
349
367
  exports.SEED_CONFIG = SEED_CONFIG;
350
368
  exports.SEED_ORACLE = SEED_ORACLE;
351
369
  exports.SEED_POOL = SEED_POOL;
352
370
  exports.SEED_POSITION = SEED_POSITION;
353
- exports.SEED_PROTOCOL_POSITION = SEED_PROTOCOL_POSITION;
354
- exports.SENTINEL_NO_CHANGE = SENTINEL_NO_CHANGE;
355
- exports.SF_AFTER_ADD_LIQ = SF_AFTER_ADD_LIQ;
356
- exports.SF_AFTER_REMOVE_LIQ = SF_AFTER_REMOVE_LIQ;
357
- exports.SF_AFTER_SWAP = SF_AFTER_SWAP;
358
- exports.SF_BEFORE_ADD_LIQ = SF_BEFORE_ADD_LIQ;
359
- exports.SF_BEFORE_REMOVE_LIQ = SF_BEFORE_REMOVE_LIQ;
360
- exports.SF_BEFORE_SWAP = SF_BEFORE_SWAP;
361
- exports.SF_FORWARD_READONLY_SIGNERS = SF_FORWARD_READONLY_SIGNERS;
362
- exports.SF_REQUIRE_ORACLE = SF_REQUIRE_ORACLE;
371
+ exports.SEED_PROTOCOL_FEE_POSITION = SEED_PROTOCOL_FEE_POSITION;
363
372
  exports.TOKEN_METADATA_PROGRAM_ID = TOKEN_METADATA_PROGRAM_ID;
364
373
  exports.areMintsOrdered = areMintsOrdered;
365
374
  exports.getConfigAddress = getConfigAddress;
@@ -371,8 +380,8 @@ exports.getPoolInitAddresses = getPoolInitAddresses;
371
380
  exports.getPoolVault0Address = getPoolVault0Address;
372
381
  exports.getPoolVault1Address = getPoolVault1Address;
373
382
  exports.getPositionAddress = getPositionAddress;
374
- exports.getProtocolPositionAddress = getProtocolPositionAddress;
383
+ exports.getProtocolFeePositionAddress = getProtocolFeePositionAddress;
375
384
  exports.getSwapAddresses = getSwapAddresses;
376
385
  exports.sortMints = sortMints;
377
- //# sourceMappingURL=chunk-AT33RY6T.cjs.map
378
- //# sourceMappingURL=chunk-AT33RY6T.cjs.map
386
+ //# sourceMappingURL=chunk-3BW6IVP3.cjs.map
387
+ //# sourceMappingURL=chunk-3BW6IVP3.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/solana/core/constants.ts","../src/solana/core/pda.ts"],"names":["address","getAddressCodec","getProgramDerivedAddress"],"mappings":"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","file":"chunk-3BW6IVP3.cjs","sourcesContent":["import { address, type Address } from '@solana/kit';\nexport {\n TOKEN_PROGRAM_ADDRESS,\n ASSOCIATED_TOKEN_PROGRAM_ADDRESS,\n} from '@solana-program/token';\nexport { SYSTEM_PROGRAM_ADDRESS } from '@solana-program/system';\nexport { SYSVAR_RENT_ADDRESS } from '@solana/sysvars';\nexport const SYSVAR_INSTRUCTIONS_ADDRESS: Address = address(\n 'Sysvar1nstructions1111111111111111111111111',\n);\n\n/**\n * CPMM AMM program ID for the currently published Solana deployment.\n */\nexport const CPMM_PROGRAM_ID: Address = address(\n '9PSxVPoPfnbZ8Q1uQhgS6ZxvBjFboZtebNsu34umxkgQ',\n);\n\n/**\n * Metaplex Token Metadata Program ID\n */\nexport const TOKEN_METADATA_PROGRAM_ID: Address = address(\n 'metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s',\n);\n\n// ============================================================================\n// Math Constants\n// ============================================================================\n\n/** Basis points denominator (10,000 = 100%) */\nexport const BPS_DENOM = 10_000n;\n\n/** Q64.64 fixed-point representation of 1.0 (2^64) */\nexport const Q64_ONE = 1n << 64n;\n\n/** Current account version */\nexport const ACCOUNT_VERSION = 1;\n\n// ============================================================================\n// Array Size Constants\n// ============================================================================\n\n/** Maximum number of programs in hook allowlist */\nexport const MAX_HOOK_ALLOWLIST = 32;\n\n/** Maximum number of oracle observations (TWAP buffer size) */\nexport const MAX_ORACLE_OBSERVATIONS = 64;\n\n// ============================================================================\n// PDA Seeds\n// ============================================================================\n\n/** Seed for AmmConfig PDA: ['config'] */\nexport const SEED_CONFIG = 'config';\n\n/** Seed prefix for Pool PDA: ['pool', token0_mint, token1_mint] */\nexport const SEED_POOL = 'pool';\n\n/** Seed prefix for pool authority PDA: ['authority', pool] */\nexport const SEED_AUTHORITY = 'authority';\n\n/** Seed prefix for token0 vault PDA: ['vault0', pool] */\nexport const SEED_VAULT0 = 'vault0';\n\n/** Seed prefix for token1 vault PDA: ['vault1', pool] */\nexport const SEED_VAULT1 = 'vault1';\n\n/** Seed prefix for Position PDA: ['position', pool, owner, position_id] */\nexport const SEED_POSITION = 'position';\n\n/** Seed prefix for OracleState PDA: ['oracle', pool] */\nexport const SEED_ORACLE = 'oracle';\n\n/** Seed prefix for protocol fee position PDA: ['protocol_position', pool] */\nexport const SEED_PROTOCOL_FEE_POSITION = 'protocol_position';\n\n// ============================================================================\n// Hook Flags\n// ============================================================================\n\n/** Hook: called before swap */\nexport const HF_BEFORE_SWAP = 1 << 0;\n\n/** Hook: called after swap */\nexport const HF_AFTER_SWAP = 1 << 1;\n\n/** Hook: called before add liquidity */\nexport const HF_BEFORE_ADD_LIQ = 1 << 2;\n\n/** Hook: called after add liquidity */\nexport const HF_AFTER_ADD_LIQ = 1 << 3;\n\n/** Hook: called before remove liquidity */\nexport const HF_BEFORE_REMOVE_LIQ = 1 << 4;\n\n/** Hook: called after remove liquidity */\nexport const HF_AFTER_REMOVE_LIQ = 1 << 5;\n\n/** Require an oracle account when invoking hooks */\nexport const HF_REQUIRE_ORACLE = 1 << 6;\n\n/** Preserve readonly signer metas when forwarding remaining accounts to hooks */\nexport const HF_FORWARD_READONLY_SIGNERS = 1 << 7;\n\n/** Hook return value indicating \"no change\" to fee parameter */\nexport const HOOK_NO_CHANGE = 0xffff;\n\n// ============================================================================\n// Instruction Discriminators (Anchor 8-byte hashes)\n// ============================================================================\n\n/**\n * Anchor instruction discriminator (first 8 bytes of SHA256(\"global:<instruction_name>\"))\n * These are computed at build time from the instruction names.\n */\nexport const INSTRUCTION_DISCRIMINATORS = {\n // SHA256(\"global:initialize_config\")[0:8]\n initializeConfig: new Uint8Array([\n 0xd0, 0x7f, 0x15, 0x01, 0xc2, 0xbe, 0xc4, 0x46,\n ]),\n // SHA256(\"global:initialize_pool\")[0:8]\n initializePool: new Uint8Array([\n 0x5f, 0xb4, 0x0a, 0xac, 0x54, 0xae, 0xe8, 0x28,\n ]),\n // SHA256(\"global:initialize_oracle\")[0:8]\n initializeOracle: new Uint8Array([\n 0x90, 0xdf, 0x83, 0x78, 0xc4, 0xfd, 0xb5, 0x63,\n ]),\n // SHA256(\"global:create_position\")[0:8]\n createPosition: new Uint8Array([\n 0x30, 0xd7, 0xc5, 0x99, 0x60, 0xcb, 0xb4, 0x85,\n ]),\n // SHA256(\"global:add_liquidity\")[0:8]\n addLiquidity: new Uint8Array([\n 0xb5, 0x9d, 0x59, 0x43, 0x8f, 0xb6, 0x34, 0x48,\n ]),\n // SHA256(\"global:remove_liquidity\")[0:8]\n removeLiquidity: new Uint8Array([\n 0x50, 0x55, 0xd1, 0x48, 0x18, 0xce, 0xb1, 0x6c,\n ]),\n // SHA256(\"global:swap_exact_in\")[0:8]\n swapExactIn: new Uint8Array([0x68, 0x68, 0x83, 0x56, 0xa1, 0xbd, 0xb4, 0xd8]),\n // SHA256(\"global:collect_fees\")[0:8]\n collectFees: new Uint8Array([0xa4, 0x98, 0xcf, 0x63, 0x1e, 0xba, 0x13, 0xb6]),\n // SHA256(\"global:collect_protocol_fees\")[0:8]\n collectProtocolFees: new Uint8Array([\n 0x16, 0x43, 0x17, 0x62, 0x96, 0xb2, 0x46, 0xdc,\n ]),\n // SHA256(\"global:close_position\")[0:8]\n closePosition: new Uint8Array([\n 0x7b, 0x86, 0x51, 0x00, 0x31, 0x44, 0x62, 0x62,\n ]),\n // SHA256(\"global:oracle_update\")[0:8]\n oracleUpdate: new Uint8Array([\n 0x55, 0xd1, 0xf8, 0x8e, 0xba, 0xf9, 0x78, 0xef,\n ]),\n // SHA256(\"global:oracle_consult\")[0:8]\n oracleConsult: new Uint8Array([\n 0xef, 0xed, 0xff, 0xb1, 0x8e, 0x48, 0x60, 0xaf,\n ]),\n // SHA256(\"global:quote_to_numeraire\")[0:8]\n quoteToNumeraire: new Uint8Array([\n 0x04, 0x8e, 0xf9, 0xf0, 0x81, 0x0f, 0x8f, 0x39,\n ]),\n // SHA256(\"global:set_hook\")[0:8]\n setHook: new Uint8Array([0xaf, 0x10, 0xbb, 0xfc, 0x13, 0x36, 0x6f, 0xdd]),\n // SHA256(\"global:set_fees\")[0:8]\n setFees: new Uint8Array([0x89, 0xb2, 0x31, 0x3a, 0x00, 0xf5, 0xf2, 0xbe]),\n // SHA256(\"global:set_route\")[0:8]\n setRoute: new Uint8Array([0xf4, 0xe7, 0x03, 0x54, 0xe9, 0x3d, 0x92, 0x95]),\n // SHA256(\"global:transfer_admin\")[0:8]\n transferAdmin: new Uint8Array([\n 0x2a, 0xf2, 0x42, 0x6a, 0xe4, 0x0a, 0x6f, 0x9c,\n ]),\n // SHA256(\"global:pause\")[0:8]\n pause: new Uint8Array([0xd3, 0x16, 0xdd, 0xfb, 0x4a, 0x79, 0xc1, 0x2f]),\n // SHA256(\"global:unpause\")[0:8]\n unpause: new Uint8Array([0xa9, 0x90, 0x04, 0x26, 0x0a, 0x8d, 0xbc, 0xff]),\n // SHA256(\"global:withdraw_vault_excess\")[0:8]\n withdrawVaultExcess: new Uint8Array([\n 0xeb, 0xc5, 0xf7, 0xb1, 0x89, 0x48, 0x87, 0x71,\n ]),\n} as const;\n\n// ============================================================================\n// Account Discriminators (Anchor 8-byte hashes)\n// ============================================================================\n\n/**\n * Anchor account discriminator (first 8 bytes of SHA256(\"account:<AccountName>\"))\n */\nexport const ACCOUNT_DISCRIMINATORS = {\n // SHA256(\"account:AmmConfig\")[0:8]\n AmmConfig: new Uint8Array([0xda, 0xf4, 0x21, 0x68, 0xcb, 0xcb, 0x2b, 0x6f]),\n // SHA256(\"account:Pool\")[0:8]\n Pool: new Uint8Array([0xf1, 0x9a, 0x6d, 0x04, 0x11, 0xb1, 0x6d, 0xbc]),\n // SHA256(\"account:Position\")[0:8]\n Position: new Uint8Array([0xaa, 0xbc, 0x8f, 0xe4, 0x7a, 0x40, 0xf7, 0xd0]),\n // SHA256(\"account:OracleState\")[0:8]\n OracleState: new Uint8Array([0x61, 0x9c, 0x9d, 0xbd, 0xc2, 0x49, 0x08, 0x0f]),\n} as const;\n","import {\n type Address,\n type ProgramDerivedAddress,\n getAddressCodec,\n getProgramDerivedAddress,\n} from '@solana/kit';\nimport {\n CPMM_PROGRAM_ID,\n SEED_CONFIG,\n SEED_POOL,\n SEED_AUTHORITY,\n SEED_VAULT0,\n SEED_VAULT1,\n SEED_POSITION,\n SEED_ORACLE,\n SEED_PROTOCOL_FEE_POSITION,\n} from './constants.js';\n\nconst addressCodec = getAddressCodec();\nconst textEncoder = new TextEncoder();\n\n// ============================================================================\n// Token Sorting\n// ============================================================================\n\n/**\n * Sort two mints into canonical order (token0 < token1 by bytes)\n * This is required for Pool PDA derivation and instruction ordering.\n *\n * @param mint0 - First mint address\n * @param mint1 - Second mint address\n * @returns Tuple of [token0, token1] in canonical order\n * @throws Error if mints are equal\n */\nexport function sortMints(mint0: Address, mint1: Address): [Address, Address] {\n const bytesA = addressCodec.encode(mint0);\n const bytesB = addressCodec.encode(mint1);\n\n for (let i = 0; i < 32; i++) {\n if (bytesA[i] < bytesB[i]) {\n return [mint0, mint1];\n }\n if (bytesA[i] > bytesB[i]) {\n return [mint1, mint0];\n }\n }\n\n throw new Error('Mints are equal - cannot create pool with identical tokens');\n}\n\n/**\n * Check if mints are in canonical order\n */\nexport function areMintsOrdered(mint0: Address, mint1: Address): boolean {\n const bytes0 = addressCodec.encode(mint0);\n const bytes1 = addressCodec.encode(mint1);\n\n for (let i = 0; i < 32; i++) {\n if (bytes0[i] < bytes1[i]) return true;\n if (bytes0[i] > bytes1[i]) return false;\n }\n return false; // equal\n}\n\n// ============================================================================\n// PDA Derivation Functions\n// ============================================================================\n\n/**\n * Derive the AmmConfig PDA address\n * Seeds: ['config']\n */\nexport async function getConfigAddress(\n programId: Address = CPMM_PROGRAM_ID,\n): Promise<ProgramDerivedAddress> {\n return getProgramDerivedAddress({\n programAddress: programId,\n seeds: [textEncoder.encode(SEED_CONFIG)],\n });\n}\n\n/**\n * Derive the Pool PDA address for a token pair\n * Seeds: ['pool', token0_mint, token1_mint]\n *\n * Note: Mints will be automatically sorted if not in canonical order.\n */\nexport async function getPoolAddress(\n mint0: Address,\n mint1: Address,\n programId: Address = CPMM_PROGRAM_ID,\n): Promise<ProgramDerivedAddress> {\n const [token0, token1] = sortMints(mint0, mint1);\n return getProgramDerivedAddress({\n programAddress: programId,\n seeds: [\n textEncoder.encode(SEED_POOL),\n addressCodec.encode(token0),\n addressCodec.encode(token1),\n ],\n });\n}\n\n/**\n * Derive the Pool authority PDA (vault owner)\n * Seeds: ['authority', pool]\n */\nexport async function getPoolAuthorityAddress(\n pool: Address,\n programId: Address = CPMM_PROGRAM_ID,\n): Promise<ProgramDerivedAddress> {\n return getProgramDerivedAddress({\n programAddress: programId,\n seeds: [textEncoder.encode(SEED_AUTHORITY), addressCodec.encode(pool)],\n });\n}\n\n/**\n * Derive the token0 vault PDA.\n * Seeds: ['vault0', pool]\n */\nexport async function getPoolVault0Address(\n pool: Address,\n programId: Address = CPMM_PROGRAM_ID,\n): Promise<ProgramDerivedAddress> {\n return getProgramDerivedAddress({\n programAddress: programId,\n seeds: [textEncoder.encode(SEED_VAULT0), addressCodec.encode(pool)],\n });\n}\n\n/**\n * Derive the token1 vault PDA.\n * Seeds: ['vault1', pool]\n */\nexport async function getPoolVault1Address(\n pool: Address,\n programId: Address = CPMM_PROGRAM_ID,\n): Promise<ProgramDerivedAddress> {\n return getProgramDerivedAddress({\n programAddress: programId,\n seeds: [textEncoder.encode(SEED_VAULT1), addressCodec.encode(pool)],\n });\n}\n\n/**\n * Derive the Position PDA address\n * Seeds: ['position', pool, owner, position_id_le_bytes]\n */\nexport async function getPositionAddress(\n pool: Address,\n owner: Address,\n positionId: bigint,\n programId: Address = CPMM_PROGRAM_ID,\n): Promise<ProgramDerivedAddress> {\n const positionIdBytes = new Uint8Array(8);\n const view = new DataView(positionIdBytes.buffer);\n view.setBigUint64(0, positionId, true); // little-endian\n\n return getProgramDerivedAddress({\n programAddress: programId,\n seeds: [\n textEncoder.encode(SEED_POSITION),\n addressCodec.encode(pool),\n addressCodec.encode(owner),\n positionIdBytes,\n ],\n });\n}\n\n/**\n * Derive the OracleState PDA address\n * Seeds: ['oracle', pool]\n */\nexport async function getOracleAddress(\n pool: Address,\n programId: Address = CPMM_PROGRAM_ID,\n): Promise<ProgramDerivedAddress> {\n return getProgramDerivedAddress({\n programAddress: programId,\n seeds: [textEncoder.encode(SEED_ORACLE), addressCodec.encode(pool)],\n });\n}\n\n/**\n * Derive the protocol fee position PDA address\n * Seeds: ['protocol_position', pool]\n */\nexport async function getProtocolFeePositionAddress(\n pool: Address,\n programId: Address = CPMM_PROGRAM_ID,\n): Promise<ProgramDerivedAddress> {\n return getProgramDerivedAddress({\n programAddress: programId,\n seeds: [\n textEncoder.encode(SEED_PROTOCOL_FEE_POSITION),\n addressCodec.encode(pool),\n ],\n });\n}\n\n// ============================================================================\n// Batch PDA Derivation\n// ============================================================================\n\n/**\n * Derive all PDAs needed for pool initialization\n */\nexport async function getPoolInitAddresses(\n mint0: Address,\n mint1: Address,\n programId: Address = CPMM_PROGRAM_ID,\n): Promise<{\n token0: Address;\n token1: Address;\n pool: ProgramDerivedAddress;\n authority: ProgramDerivedAddress;\n vault0: ProgramDerivedAddress;\n vault1: ProgramDerivedAddress;\n config: ProgramDerivedAddress;\n protocolFeePosition: ProgramDerivedAddress;\n}> {\n const [token0, token1] = sortMints(mint0, mint1);\n const [config, pool] = await Promise.all([\n getConfigAddress(programId),\n getPoolAddress(token0, token1, programId),\n ]);\n const [authority, vault0, vault1, protocolFeePosition] = await Promise.all([\n getPoolAuthorityAddress(pool[0], programId),\n getPoolVault0Address(pool[0], programId),\n getPoolVault1Address(pool[0], programId),\n getProtocolFeePositionAddress(pool[0], programId),\n ]);\n\n return {\n token0,\n token1,\n pool,\n authority,\n vault0,\n vault1,\n config,\n protocolFeePosition,\n };\n}\n\n/**\n * Derive all PDAs needed for swap operation\n */\nexport async function getSwapAddresses(\n pool: Address,\n programId: Address = CPMM_PROGRAM_ID,\n): Promise<{\n config: ProgramDerivedAddress;\n authority: ProgramDerivedAddress;\n oracle: ProgramDerivedAddress;\n}> {\n const [config, authority, oracle] = await Promise.all([\n getConfigAddress(programId),\n getPoolAuthorityAddress(pool, programId),\n getOracleAddress(pool, programId),\n ]);\n\n return { config, authority, oracle };\n}\n\n/**\n * Derive all PDAs needed for liquidity operations\n */\nexport async function getLiquidityAddresses(\n pool: Address,\n owner: Address,\n positionId: bigint,\n programId: Address = CPMM_PROGRAM_ID,\n): Promise<{\n config: ProgramDerivedAddress;\n authority: ProgramDerivedAddress;\n position: ProgramDerivedAddress;\n protocolFeePosition: ProgramDerivedAddress;\n oracle: ProgramDerivedAddress;\n}> {\n const [config, authority, position, protocolFeePosition, oracle] =\n await Promise.all([\n getConfigAddress(programId),\n getPoolAuthorityAddress(pool, programId),\n getPositionAddress(pool, owner, positionId, programId),\n getProtocolFeePositionAddress(pool, programId),\n getOracleAddress(pool, programId),\n ]);\n\n return { config, authority, position, protocolFeePosition, oracle };\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { MAX_SENTINEL_ALLOWLIST, MAX_ORACLE_OBSERVATIONS, ACCOUNT_DISCRIMINATORS, CPMM_PROGRAM_ID, Q64_ONE, BPS_DENOM, getPoolAddress, sortMints, getPositionAddress, getOracleAddress } from './chunk-2NFQKIOB.js';
1
+ import { MAX_HOOK_ALLOWLIST, MAX_ORACLE_OBSERVATIONS, ACCOUNT_DISCRIMINATORS, CPMM_PROGRAM_ID, Q64_ONE, BPS_DENOM, getPoolAddress, sortMints, getPositionAddress, getOracleAddress } from './chunk-TVBSIQIX.js';
2
2
  import { getAddressCodec, getBooleanCodec, getU8Codec, getU16Codec, getU32Codec, getU64Codec, getU128Codec, transformCodec, getArrayCodec, fixCodecSize, getBytesCodec, getStructCodec, getHiddenPrefixDecoder, getConstantDecoder, getOptionCodec, unwrapOption, mergeBytes } from '@solana/kit';
3
3
 
4
4
  var addressCodec = getAddressCodec();
@@ -47,11 +47,8 @@ var ammConfigDataCodec = getStructCodec([
47
47
  ["admin", addressCodec],
48
48
  ["paused", boolCodec],
49
49
  ["numeraireMint", addressCodec],
50
- ["sentinelAllowlistLen", u8Codec],
51
- [
52
- "sentinelAllowlist",
53
- getArrayCodec(addressCodec, { size: MAX_SENTINEL_ALLOWLIST })
54
- ],
50
+ ["hookAllowlistLen", u8Codec],
51
+ ["hookAllowlist", getArrayCodec(addressCodec, { size: MAX_HOOK_ALLOWLIST })],
55
52
  ["maxSwapFeeBps", u16Codec],
56
53
  ["maxFeeSplitBps", u16Codec],
57
54
  ["maxRouteHops", u8Codec],
@@ -77,14 +74,14 @@ var poolDataCodec = getStructCodec([
77
74
  ["feeGrowthGlobal1Q64", u128Codec],
78
75
  ["feesUnclaimed0", u64Codec],
79
76
  ["feesUnclaimed1", u64Codec],
80
- ["sentinelProgram", addressCodec],
81
- ["sentinelFlags", u32Codec],
77
+ ["hookProgram", addressCodec],
78
+ ["hookFlags", u32Codec],
82
79
  ["numeraireMint", addressCodec],
83
- ["liquidityMeasureSide", u8Codec],
80
+ ["liquidityMeasureTokenIndex", u8Codec],
84
81
  ["routeNextPool", addressCodec],
85
82
  ["routeBridgeMint", addressCodec],
86
83
  ["kLast", u128Codec],
87
- ["protocolPosition", addressCodec],
84
+ ["protocolFeePosition", addressCodec],
88
85
  ["locked", u8Codec],
89
86
  ["version", u8Codec],
90
87
  ["reserved", reservedBytesCodec]
@@ -167,7 +164,7 @@ var optionAddressCodec = transformCodec(
167
164
  var swapExactInArgsCodec = getStructCodec([
168
165
  ["amountIn", u64Codec],
169
166
  ["minAmountOut", u64Codec],
170
- ["direction", u8Codec],
167
+ ["tradeDirection", u8Codec],
171
168
  ["updateOracle", boolCodec]
172
169
  ]);
173
170
  var addLiquidityArgsWithOracleCodec = getStructCodec([
@@ -207,14 +204,14 @@ var initializeConfigArgsCodec = getStructCodec([
207
204
  ["maxRouteHops", u8Codec],
208
205
  ["protocolFeeEnabled", boolCodec],
209
206
  ["protocolFeeBps", u16Codec],
210
- ["sentinelAllowlist", getArrayCodec(addressCodec, { size: u32Codec })]
207
+ ["hookAllowlist", getArrayCodec(addressCodec, { size: u32Codec })]
211
208
  ]);
212
209
  var initializePoolArgsCodec = getStructCodec([
213
210
  ["mintA", addressCodec],
214
211
  ["mintB", addressCodec],
215
212
  ["initialSwapFeeBps", u16Codec],
216
213
  ["initialFeeSplitBps", u16Codec],
217
- ["liquidityMeasureSide", u8Codec],
214
+ ["liquidityMeasureTokenIndex", u8Codec],
218
215
  ["numeraireMintOverride", optionAddressCodec]
219
216
  ]);
220
217
  var initializeOracleArgsCodec = getStructCodec([
@@ -222,9 +219,9 @@ var initializeOracleArgsCodec = getStructCodec([
222
219
  ["observationIntervalSec", u32Codec],
223
220
  ["numObservations", u16Codec]
224
221
  ]);
225
- var setSentinelArgsCodec = getStructCodec([
226
- ["sentinelProgram", addressCodec],
227
- ["sentinelFlags", u32Codec]
222
+ var setHookArgsCodec = getStructCodec([
223
+ ["hookProgram", addressCodec],
224
+ ["hookFlags", u32Codec]
228
225
  ]);
229
226
  var setFeesArgsCodec = getStructCodec([
230
227
  ["swapFeeBps", u16Codec],
@@ -242,7 +239,7 @@ var oracleConsultArgsCodec = getStructCodec([
242
239
  ]);
243
240
  var quoteToNumeraireArgsCodec = getStructCodec([
244
241
  ["amount", u128Codec],
245
- ["side", u8Codec],
242
+ ["inputTokenIndex", u8Codec],
246
243
  ["maxHops", u8Codec],
247
244
  ["useTwap", boolCodec],
248
245
  ["windowSeconds", u32Codec]
@@ -274,8 +271,8 @@ function encodeInitializePoolArgs(args) {
274
271
  function encodeInitializeOracleArgs(args) {
275
272
  return new Uint8Array(initializeOracleArgsCodec.encode(args));
276
273
  }
277
- function encodeSetSentinelArgs(args) {
278
- return new Uint8Array(setSentinelArgsCodec.encode(args));
274
+ function encodeSetHookArgs(args) {
275
+ return new Uint8Array(setHookArgsCodec.encode(args));
279
276
  }
280
277
  function encodeSetFeesArgs(args) {
281
278
  return new Uint8Array(setFeesArgsCodec.encode(args));
@@ -343,7 +340,7 @@ function ratioToNumber(numerator, denominator) {
343
340
  const q64 = (numerator << 64n) / denominator;
344
341
  return q64ToNumber(q64);
345
342
  }
346
- function getSwapQuote(pool, amountIn, direction) {
343
+ function getSwapQuote(pool, amountIn, tradeDirection) {
347
344
  if (amountIn === 0n) {
348
345
  return {
349
346
  amountOut: 0n,
@@ -354,7 +351,7 @@ function getSwapQuote(pool, amountIn, direction) {
354
351
  executionPrice: 0
355
352
  };
356
353
  }
357
- const [reserveIn, reserveOut] = direction === 0 ? [pool.reserve0, pool.reserve1] : [pool.reserve1, pool.reserve0];
354
+ const [reserveIn, reserveOut] = tradeDirection === 0 ? [pool.reserve0, pool.reserve1] : [pool.reserve1, pool.reserve0];
358
355
  if (reserveIn === 0n || reserveOut === 0n) {
359
356
  throw new Error("Pool has zero liquidity");
360
357
  }
@@ -375,8 +372,8 @@ function getSwapQuote(pool, amountIn, direction) {
375
372
  executionPrice
376
373
  };
377
374
  }
378
- function getSwapQuoteExactOut(pool, amountOut, direction) {
379
- const [reserveIn, reserveOut] = direction === 0 ? [pool.reserve0, pool.reserve1] : [pool.reserve1, pool.reserve0];
375
+ function getSwapQuoteExactOut(pool, amountOut, tradeDirection) {
376
+ const [reserveIn, reserveOut] = tradeDirection === 0 ? [pool.reserve0, pool.reserve1] : [pool.reserve1, pool.reserve0];
380
377
  if (reserveIn === 0n || reserveOut === 0n) {
381
378
  throw new Error("Pool has zero liquidity");
382
379
  }
@@ -973,6 +970,6 @@ function comparePoolAndOraclePrices(pool, oracle) {
973
970
  };
974
971
  }
975
972
 
976
- export { addLiquidityArgsCodec, ammConfigDataCodec, calculateAccruedFees, calculateTwap, calculateTwapNumber, ceilDiv, collectFeesArgsCodec, collectProtocolFeesArgsCodec, comparePoolAndOraclePrices, computePrice0Q64, computePrice1Q64, consultTwap, createPositionArgsCodec, decodeAmmConfig, decodeOracleState, decodePool, decodePosition, encodeAddLiquidityArgs, encodeCollectFeesArgs, encodeCollectProtocolFeesArgs, encodeCreatePositionArgs, encodeInitializeConfigArgs, encodeInitializeOracleArgs, encodeInitializePoolArgs, encodeInstructionData, encodeOracleConsultArgs, encodeQuoteToNumeraireArgs, encodeRemoveLiquidityArgs, encodeSetFeesArgs, encodeSetRouteArgs, encodeSetSentinelArgs, encodeSwapExactInArgs, encodeTransferAdminArgs, fetchAllPools, fetchOracle, fetchOraclesBatch, fetchPool, fetchPoolPositions, fetchPoolsBatch, fetchPosition, fetchPositionByParams, fetchPositionsBatch, fetchUserPositions, filterActivePositions, filterPoolsByMint, getAddLiquidityQuote, getK, getOracleAddressFromPool, getOracleAge, getOracleBufferStats, getOracleDeviation, getOracleForPool, getOracleSpotPrices, getPendingFees, getPoolAddressFromMints, getPoolByMints, getPositionAddressFromParams, getPositionValue, getRemoveLiquidityQuote, getSpotPrice0, getSpotPrice1, getSwapQuote, getSwapQuoteExactOut, getTvl, initializeConfigArgsCodec, initializeOracleArgsCodec, initializePoolArgsCodec, isOracleStale, isqrt, maxBigInt, minBigInt, numberToQ64, observationCodec, oracleConsultArgsCodec, oracleStateDataCodec, poolDataCodec, poolExists, positionDataCodec, q64Div, q64Mul, q64ToNumber, quoteToNumeraireArgsCodec, ratioToNumber, removeLiquidityArgsCodec, setFeesArgsCodec, setRouteArgsCodec, setSentinelArgsCodec, sortPoolsByReserves, sortPositionsByShares, swapExactInArgsCodec, transferAdminArgsCodec };
977
- //# sourceMappingURL=chunk-ZQEEGBXT.js.map
978
- //# sourceMappingURL=chunk-ZQEEGBXT.js.map
973
+ export { addLiquidityArgsCodec, ammConfigDataCodec, calculateAccruedFees, calculateTwap, calculateTwapNumber, ceilDiv, collectFeesArgsCodec, collectProtocolFeesArgsCodec, comparePoolAndOraclePrices, computePrice0Q64, computePrice1Q64, consultTwap, createPositionArgsCodec, decodeAmmConfig, decodeOracleState, decodePool, decodePosition, encodeAddLiquidityArgs, encodeCollectFeesArgs, encodeCollectProtocolFeesArgs, encodeCreatePositionArgs, encodeInitializeConfigArgs, encodeInitializeOracleArgs, encodeInitializePoolArgs, encodeInstructionData, encodeOracleConsultArgs, encodeQuoteToNumeraireArgs, encodeRemoveLiquidityArgs, encodeSetFeesArgs, encodeSetHookArgs, encodeSetRouteArgs, encodeSwapExactInArgs, encodeTransferAdminArgs, fetchAllPools, fetchOracle, fetchOraclesBatch, fetchPool, fetchPoolPositions, fetchPoolsBatch, fetchPosition, fetchPositionByParams, fetchPositionsBatch, fetchUserPositions, filterActivePositions, filterPoolsByMint, getAddLiquidityQuote, getK, getOracleAddressFromPool, getOracleAge, getOracleBufferStats, getOracleDeviation, getOracleForPool, getOracleSpotPrices, getPendingFees, getPoolAddressFromMints, getPoolByMints, getPositionAddressFromParams, getPositionValue, getRemoveLiquidityQuote, getSpotPrice0, getSpotPrice1, getSwapQuote, getSwapQuoteExactOut, getTvl, initializeConfigArgsCodec, initializeOracleArgsCodec, initializePoolArgsCodec, isOracleStale, isqrt, maxBigInt, minBigInt, numberToQ64, observationCodec, oracleConsultArgsCodec, oracleStateDataCodec, poolDataCodec, poolExists, positionDataCodec, q64Div, q64Mul, q64ToNumber, quoteToNumeraireArgsCodec, ratioToNumber, removeLiquidityArgsCodec, setFeesArgsCodec, setHookArgsCodec, setRouteArgsCodec, sortPoolsByReserves, sortPositionsByShares, swapExactInArgsCodec, transferAdminArgsCodec };
974
+ //# sourceMappingURL=chunk-NMTYI3TB.js.map
975
+ //# sourceMappingURL=chunk-NMTYI3TB.js.map