@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.
- package/README.md +48 -12
- package/dist/{chunk-AT33RY6T.cjs → chunk-3BW6IVP3.cjs} +46 -37
- package/dist/chunk-3BW6IVP3.cjs.map +1 -0
- package/dist/{chunk-ZQEEGBXT.js → chunk-NMTYI3TB.js} +23 -26
- package/dist/chunk-NMTYI3TB.js.map +1 -0
- package/dist/{chunk-2NFQKIOB.js → chunk-TVBSIQIX.js} +35 -26
- package/dist/chunk-TVBSIQIX.js.map +1 -0
- package/dist/{chunk-LL7TW3GU.cjs → chunk-W5TMS4RD.cjs} +56 -59
- package/dist/chunk-W5TMS4RD.cjs.map +1 -0
- package/dist/{oracle-CU-nZnja.d.cts → oracle-DN8BrGPh.d.cts} +28 -28
- package/dist/{oracle-CU-nZnja.d.ts → oracle-DN8BrGPh.d.ts} +28 -28
- package/dist/{pda-FLNTBIC5.js → pda-5D3GD5S6.js} +3 -3
- package/dist/pda-5D3GD5S6.js.map +1 -0
- package/dist/{pda-G25AJSXG.cjs → pda-GNZYNRUH.cjs} +17 -17
- package/dist/{pda-G25AJSXG.cjs.map → pda-GNZYNRUH.cjs.map} +1 -1
- package/dist/solana/index.cjs +910 -743
- package/dist/solana/index.cjs.map +1 -1
- package/dist/solana/index.d.cts +560 -472
- package/dist/solana/index.d.ts +560 -472
- package/dist/solana/index.js +772 -607
- package/dist/solana/index.js.map +1 -1
- package/dist/solana/react/index.cjs +57 -57
- package/dist/solana/react/index.cjs.map +1 -1
- package/dist/solana/react/index.d.cts +5 -5
- package/dist/solana/react/index.d.ts +5 -5
- package/dist/solana/react/index.js +15 -15
- package/dist/solana/react/index.js.map +1 -1
- package/package.json +4 -2
- package/dist/chunk-2NFQKIOB.js.map +0 -1
- package/dist/chunk-AT33RY6T.cjs.map +0 -1
- package/dist/chunk-LL7TW3GU.cjs.map +0 -1
- package/dist/chunk-ZQEEGBXT.js.map +0 -1
- 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
|
|
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
|
|
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
|
-
- **
|
|
12
|
-
- **
|
|
13
|
-
- **
|
|
14
|
-
- **
|
|
15
|
-
- **Token Management**: Built-in support for DERC20 tokens with vesting
|
|
16
|
-
- **Type Safety**: Full TypeScript support
|
|
17
|
-
- **
|
|
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
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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
|
|
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
|
|
31
|
-
var
|
|
32
|
-
var
|
|
33
|
-
var
|
|
34
|
-
var
|
|
35
|
-
var
|
|
36
|
-
var
|
|
37
|
-
var
|
|
38
|
-
var
|
|
39
|
-
var
|
|
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:
|
|
167
|
-
|
|
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:
|
|
188
|
-
|
|
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
|
|
290
|
+
async function getProtocolFeePositionAddress(pool, programId = CPMM_PROGRAM_ID) {
|
|
282
291
|
return kit.getProgramDerivedAddress({
|
|
283
292
|
programAddress: programId,
|
|
284
293
|
seeds: [
|
|
285
|
-
textEncoder.encode(
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
335
|
+
getProtocolFeePositionAddress(pool, programId),
|
|
327
336
|
getOracleAddress(pool, programId)
|
|
328
337
|
]);
|
|
329
|
-
return { config, authority, position,
|
|
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.
|
|
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.
|
|
383
|
+
exports.getProtocolFeePositionAddress = getProtocolFeePositionAddress;
|
|
375
384
|
exports.getSwapAddresses = getSwapAddresses;
|
|
376
385
|
exports.sortMints = sortMints;
|
|
377
|
-
//# sourceMappingURL=chunk-
|
|
378
|
-
//# sourceMappingURL=chunk-
|
|
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 {
|
|
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
|
-
["
|
|
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
|
-
["
|
|
81
|
-
["
|
|
77
|
+
["hookProgram", addressCodec],
|
|
78
|
+
["hookFlags", u32Codec],
|
|
82
79
|
["numeraireMint", addressCodec],
|
|
83
|
-
["
|
|
80
|
+
["liquidityMeasureTokenIndex", u8Codec],
|
|
84
81
|
["routeNextPool", addressCodec],
|
|
85
82
|
["routeBridgeMint", addressCodec],
|
|
86
83
|
["kLast", u128Codec],
|
|
87
|
-
["
|
|
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
|
-
["
|
|
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
|
-
["
|
|
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
|
-
["
|
|
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
|
|
226
|
-
["
|
|
227
|
-
["
|
|
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
|
-
["
|
|
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
|
|
278
|
-
return new Uint8Array(
|
|
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,
|
|
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] =
|
|
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,
|
|
379
|
-
const [reserveIn, reserveOut] =
|
|
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,
|
|
977
|
-
//# sourceMappingURL=chunk-
|
|
978
|
-
//# sourceMappingURL=chunk-
|
|
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
|