@shogun-sdk/intents-sdk 1.2.5 → 1.2.6-test

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 (121) hide show
  1. package/README.md +3 -19
  2. package/dist/esm/chains.js +3 -0
  3. package/dist/esm/chains.js.map +1 -1
  4. package/dist/esm/constants.js +9 -0
  5. package/dist/esm/constants.js.map +1 -1
  6. package/dist/esm/core/evm/chain-provider.js +2 -1
  7. package/dist/esm/core/evm/chain-provider.js.map +1 -1
  8. package/dist/esm/core/evm/cross-chain-limit-order.js +1 -1
  9. package/dist/esm/core/evm/cross-chain-limit-order.js.map +1 -1
  10. package/dist/esm/core/evm/permit2-signature-transfer.js +15 -0
  11. package/dist/esm/core/evm/permit2-signature-transfer.js.map +1 -0
  12. package/dist/esm/core/evm/single-chain-dca-order.js +1 -1
  13. package/dist/esm/core/evm/single-chain-dca-order.js.map +1 -1
  14. package/dist/esm/core/evm/single-chain-limit-order.js +1 -1
  15. package/dist/esm/core/evm/single-chain-limit-order.js.map +1 -1
  16. package/dist/esm/core/solana/dca/single-chain-dca-order.js +3 -2
  17. package/dist/esm/core/solana/dca/single-chain-dca-order.js.map +1 -1
  18. package/dist/esm/core/solana/dca/single-chain-limit-order.js +3 -2
  19. package/dist/esm/core/solana/dca/single-chain-limit-order.js.map +1 -1
  20. package/dist/esm/core/solana/utils.js +14 -4
  21. package/dist/esm/core/solana/utils.js.map +1 -1
  22. package/dist/esm/core/sui/single-chain-dca-order.js +2 -1
  23. package/dist/esm/core/sui/single-chain-dca-order.js.map +1 -1
  24. package/dist/esm/core/sui/single-chain-limit-order.js +2 -1
  25. package/dist/esm/core/sui/single-chain-limit-order.js.map +1 -1
  26. package/dist/esm/index.js +6 -3
  27. package/dist/esm/index.js.map +1 -1
  28. package/dist/esm/types/token-list.js +2 -0
  29. package/dist/esm/types/token-list.js.map +1 -0
  30. package/dist/esm/utils/defillama.js +1 -0
  31. package/dist/esm/utils/defillama.js.map +1 -1
  32. package/dist/esm/utils/quote/aggregator.js +158 -42
  33. package/dist/esm/utils/quote/aggregator.js.map +1 -1
  34. package/dist/esm/utils/quote/paraswap.js +1 -0
  35. package/dist/esm/utils/quote/paraswap.js.map +1 -1
  36. package/dist/esm/utils/quote/pumpfun/estimations.js +169 -0
  37. package/dist/esm/utils/quote/pumpfun/estimations.js.map +1 -0
  38. package/dist/esm/utils/quote/pumpfun/estimations_amm.js +130 -0
  39. package/dist/esm/utils/quote/pumpfun/estimations_amm.js.map +1 -0
  40. package/dist/esm/utils/quote/pumpfun/index.js +198 -0
  41. package/dist/esm/utils/quote/pumpfun/index.js.map +1 -0
  42. package/dist/esm/utils/quote/pumpfun/models.js +70 -0
  43. package/dist/esm/utils/quote/pumpfun/models.js.map +1 -0
  44. package/dist/esm/utils/quote/pumpfun/utils.js +269 -0
  45. package/dist/esm/utils/quote/pumpfun/utils.js.map +1 -0
  46. package/dist/esm/utils/quote/raydium.js +336 -0
  47. package/dist/esm/utils/quote/raydium.js.map +1 -0
  48. package/dist/esm/utils/quote/stablecoins-tokens.js +1 -0
  49. package/dist/esm/utils/quote/stablecoins-tokens.js.map +1 -1
  50. package/dist/esm/utils/quote/utils.js +8 -0
  51. package/dist/esm/utils/quote/utils.js.map +1 -0
  52. package/dist/esm/utils/tokens/index.js +37 -0
  53. package/dist/esm/utils/tokens/index.js.map +1 -0
  54. package/dist/types/chains.d.ts +4 -2
  55. package/dist/types/chains.d.ts.map +1 -1
  56. package/dist/types/constants.d.ts +2 -1
  57. package/dist/types/constants.d.ts.map +1 -1
  58. package/dist/types/core/evm/chain-provider.d.ts.map +1 -1
  59. package/dist/types/core/evm/permit2-signature-transfer.d.ts +3 -0
  60. package/dist/types/core/evm/permit2-signature-transfer.d.ts.map +1 -0
  61. package/dist/types/core/solana/dca/single-chain-dca-order.d.ts +1 -2
  62. package/dist/types/core/solana/dca/single-chain-dca-order.d.ts.map +1 -1
  63. package/dist/types/core/solana/dca/single-chain-limit-order.d.ts +1 -2
  64. package/dist/types/core/solana/dca/single-chain-limit-order.d.ts.map +1 -1
  65. package/dist/types/core/solana/utils.d.ts +2 -0
  66. package/dist/types/core/solana/utils.d.ts.map +1 -1
  67. package/dist/types/core/sui/single-chain-dca-order.d.ts.map +1 -1
  68. package/dist/types/core/sui/single-chain-limit-order.d.ts.map +1 -1
  69. package/dist/types/index.d.ts +5 -3
  70. package/dist/types/index.d.ts.map +1 -1
  71. package/dist/types/types/token-list.d.ts +30 -0
  72. package/dist/types/types/token-list.d.ts.map +1 -0
  73. package/dist/types/utils/defillama.d.ts +1 -0
  74. package/dist/types/utils/defillama.d.ts.map +1 -1
  75. package/dist/types/utils/quote/aggregator.d.ts +42 -5
  76. package/dist/types/utils/quote/aggregator.d.ts.map +1 -1
  77. package/dist/types/utils/quote/paraswap.d.ts.map +1 -1
  78. package/dist/types/utils/quote/pumpfun/estimations.d.ts +30 -0
  79. package/dist/types/utils/quote/pumpfun/estimations.d.ts.map +1 -0
  80. package/dist/types/utils/quote/pumpfun/estimations_amm.d.ts +49 -0
  81. package/dist/types/utils/quote/pumpfun/estimations_amm.d.ts.map +1 -0
  82. package/dist/types/utils/quote/pumpfun/index.d.ts +10 -0
  83. package/dist/types/utils/quote/pumpfun/index.d.ts.map +1 -0
  84. package/dist/types/utils/quote/pumpfun/models.d.ts +94 -0
  85. package/dist/types/utils/quote/pumpfun/models.d.ts.map +1 -0
  86. package/dist/types/utils/quote/pumpfun/utils.d.ts +50 -0
  87. package/dist/types/utils/quote/pumpfun/utils.d.ts.map +1 -0
  88. package/dist/types/utils/quote/raydium.d.ts +98 -0
  89. package/dist/types/utils/quote/raydium.d.ts.map +1 -0
  90. package/dist/types/utils/quote/stablecoins-tokens.d.ts.map +1 -1
  91. package/dist/types/utils/quote/utils.d.ts +5 -0
  92. package/dist/types/utils/quote/utils.d.ts.map +1 -0
  93. package/dist/types/utils/tokens/index.d.ts +20 -0
  94. package/dist/types/utils/tokens/index.d.ts.map +1 -0
  95. package/package.json +20 -18
  96. package/src/chains.ts +3 -0
  97. package/src/constants.ts +12 -2
  98. package/src/core/evm/chain-provider.ts +2 -1
  99. package/src/core/evm/cross-chain-limit-order.ts +1 -1
  100. package/src/core/evm/permit2-signature-transfer.ts +15 -0
  101. package/src/core/evm/single-chain-dca-order.ts +1 -1
  102. package/src/core/evm/single-chain-limit-order.ts +1 -1
  103. package/src/core/solana/dca/single-chain-dca-order.ts +3 -3
  104. package/src/core/solana/dca/single-chain-limit-order.ts +3 -2
  105. package/src/core/solana/utils.ts +24 -12
  106. package/src/core/sui/single-chain-dca-order.ts +2 -2
  107. package/src/core/sui/single-chain-limit-order.ts +2 -2
  108. package/src/index.ts +14 -4
  109. package/src/types/token-list.ts +35 -0
  110. package/src/utils/defillama.ts +1 -0
  111. package/src/utils/quote/aggregator.ts +210 -55
  112. package/src/utils/quote/paraswap.ts +1 -0
  113. package/src/utils/quote/pumpfun/estimations.ts +206 -0
  114. package/src/utils/quote/pumpfun/estimations_amm.ts +165 -0
  115. package/src/utils/quote/pumpfun/index.ts +266 -0
  116. package/src/utils/quote/pumpfun/models.ts +163 -0
  117. package/src/utils/quote/pumpfun/utils.ts +343 -0
  118. package/src/utils/quote/raydium.ts +506 -0
  119. package/src/utils/quote/stablecoins-tokens.ts +1 -0
  120. package/src/utils/quote/utils.ts +8 -0
  121. package/src/utils/tokens/index.ts +38 -0
@@ -0,0 +1,269 @@
1
+ import { address, fetchEncodedAccount, fetchEncodedAccounts, getAddressEncoder, getProgramDerivedAddress, unwrapOption, } from '@solana/kit';
2
+ import { getDefaultSolanaRPC } from '../../../core/solana/client.js';
3
+ import { getBondingCurveDecoder, getGlobalAccountDecoder, getGlobalConfigDecoder, getPumpPoolDataDecoder, } from './models.js';
4
+ import { getTokenDecoder } from '@solana-program/token';
5
+ import { ONE_DAY_MS, TEN_MINUTES_MS, TWO_SECONDS_MS } from '../utils.js';
6
+ export const PUMP_FUN_PROGRAM_ADDRESS = address('6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P');
7
+ export const PUMP_FUN_AMM_PROGRAM_ADDRESS = address('pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA');
8
+ export const WRAPPED_NATIVE_TOKEN_PUBKEY = address('So11111111111111111111111111111111111111112');
9
+ export const GLOBAL_CONFIG_AMM = address('ADyA8hdefvWN2dbGGWFotbzWxrAvLW83WG6QCVXvJKqw');
10
+ export const ANCHOR_DISCRIMINATOR_SIZE = 8;
11
+ let globalAccountCache = null;
12
+ let globalConfigCache = null;
13
+ const migratedPoolCache = new Map();
14
+ const poolTokensInfoCache = new Map();
15
+ /**
16
+ * Finds the PDA for a PumpFun bonding curve
17
+ */
18
+ async function findBondingCurvePda(tokenMint) {
19
+ const [pda] = await getProgramDerivedAddress({
20
+ programAddress: PUMP_FUN_PROGRAM_ADDRESS,
21
+ seeds: [new TextEncoder().encode('bonding-curve'), getAddressEncoder().encode(tokenMint)],
22
+ });
23
+ return pda;
24
+ }
25
+ /**
26
+ * Finds the PDA for the PumpFun global account
27
+ */
28
+ async function findGlobalAccountPda() {
29
+ const [pda] = await getProgramDerivedAddress({
30
+ programAddress: PUMP_FUN_PROGRAM_ADDRESS,
31
+ seeds: [new TextEncoder().encode('global')],
32
+ });
33
+ return pda;
34
+ }
35
+ /**
36
+ * Finds the PDA for pool authority in the AMM program
37
+ */
38
+ async function findPoolAuthorityPdaAmm(mint) {
39
+ const [pda] = await getProgramDerivedAddress({
40
+ programAddress: PUMP_FUN_PROGRAM_ADDRESS,
41
+ seeds: [new TextEncoder().encode('pool-authority'), getAddressEncoder().encode(mint)],
42
+ });
43
+ return pda;
44
+ }
45
+ /**
46
+ * Finds the PDA for a pool in the AMM program
47
+ */
48
+ async function findPoolPdaAmm(poolAuthority, baseMint, quoteMint) {
49
+ const [pda] = await getProgramDerivedAddress({
50
+ programAddress: PUMP_FUN_AMM_PROGRAM_ADDRESS,
51
+ seeds: [
52
+ new TextEncoder().encode('pool'),
53
+ new Uint8Array([0, 0]), // Pool type bytes
54
+ getAddressEncoder().encode(poolAuthority),
55
+ getAddressEncoder().encode(baseMint),
56
+ getAddressEncoder().encode(quoteMint),
57
+ ],
58
+ });
59
+ return pda;
60
+ }
61
+ /**
62
+ * Fetches and deserializes a PumpFun bonding curve account
63
+ *
64
+ * @param tokenMint - The token mint address
65
+ * @param options - Optional RPC configuration
66
+ * @returns Tuple of [BondingCurve data, PDA address]
67
+ * @throws Error if account doesn't exist or deserialization fails
68
+ */
69
+ export async function getPumpFunBondingCurve(tokenMint) {
70
+ const rpc = getDefaultSolanaRPC();
71
+ try {
72
+ // Derive the PDA for the bonding curve
73
+ const pda = await findBondingCurvePda(tokenMint);
74
+ // Fetch the account data
75
+ const encodedAccount = await fetchEncodedAccount(rpc, pda);
76
+ if (!encodedAccount.exists) {
77
+ throw new Error(`Bonding curve account not found for token mint: ${tokenMint}`);
78
+ }
79
+ // Anchor accounts have an 8-byte discriminator prefix
80
+ const dataWithoutDiscriminator = encodedAccount.data.slice(8);
81
+ try {
82
+ const decoder = getBondingCurveDecoder();
83
+ const bondingCurve = decoder.decode(dataWithoutDiscriminator);
84
+ return [bondingCurve, pda];
85
+ }
86
+ catch (decodingError) {
87
+ throw new Error(`Failed to deserialize bonding curve: ${decodingError instanceof Error ? decodingError.message : String(decodingError)}`);
88
+ }
89
+ }
90
+ catch (error) {
91
+ throw new Error(`Failed to fetch bonding curve account: ${error instanceof Error ? error.message : String(error)}`);
92
+ }
93
+ }
94
+ /**
95
+ * Fetches and deserializes the PumpFun global account
96
+ *
97
+ * @returns Tuple of [GlobalAccount data, PDA address]
98
+ * @throws {Error} if account doesn't exist
99
+ * @throws {Error} if deserialization fails
100
+ */
101
+ export async function getPumpFunGlobalAccount() {
102
+ // Return cached value if valid
103
+ if (globalAccountCache && Date.now() < globalAccountCache.expiresAt) {
104
+ return globalAccountCache.data;
105
+ }
106
+ const rpc = getDefaultSolanaRPC();
107
+ const pda = await findGlobalAccountPda();
108
+ const encodedAccount = await fetchEncodedAccount(rpc, pda);
109
+ if (!encodedAccount.exists) {
110
+ throw new Error(`GlobalAccount not found: ${pda}`);
111
+ }
112
+ // Validate minimum size
113
+ if (encodedAccount.data.length < ANCHOR_DISCRIMINATOR_SIZE) {
114
+ throw new Error(`GlobalAccount deserialization failed: Account data too small: ${encodedAccount.data.length} bytes`);
115
+ }
116
+ // Skip Anchor's 8-byte discriminator
117
+ const dataWithoutDiscriminator = encodedAccount.data.slice(ANCHOR_DISCRIMINATOR_SIZE);
118
+ try {
119
+ const decoder = getGlobalAccountDecoder();
120
+ const globalAccount = decoder.decode(dataWithoutDiscriminator);
121
+ // Update cache
122
+ globalAccountCache = {
123
+ data: [globalAccount, pda],
124
+ expiresAt: Date.now() + TEN_MINUTES_MS,
125
+ };
126
+ return [globalAccount, pda];
127
+ }
128
+ catch (error) {
129
+ throw new Error(`GlobalAccount deserialization failed: ${error instanceof Error ? error.message : String(error)}`);
130
+ }
131
+ }
132
+ /**
133
+ * Fetches and deserializes the PumpFun global config account
134
+ *
135
+ * @returns Tuple of [GlobalConfig data, PDA address]
136
+ * @throws {Error} if account doesn't exist
137
+ * @throws {Error} if deserialization fails
138
+ */
139
+ export async function getPumpFunGlobalConfig() {
140
+ // Return cached value if valid
141
+ if (globalConfigCache && Date.now() < globalConfigCache.expiresAt) {
142
+ return globalConfigCache.data;
143
+ }
144
+ const rpc = getDefaultSolanaRPC();
145
+ const encodedAccount = await fetchEncodedAccount(rpc, GLOBAL_CONFIG_AMM);
146
+ if (!encodedAccount.exists) {
147
+ throw new Error(`GlobalConfig account not found: ${GLOBAL_CONFIG_AMM}`);
148
+ }
149
+ // Validate minimum size
150
+ if (encodedAccount.data.length < ANCHOR_DISCRIMINATOR_SIZE) {
151
+ throw new Error(`GlobalConfig deserialization failed: Account data too small: ${encodedAccount.data.length} bytes`);
152
+ }
153
+ // Skip Anchor's 8-byte discriminator
154
+ const dataWithoutDiscriminator = encodedAccount.data.slice(ANCHOR_DISCRIMINATOR_SIZE);
155
+ try {
156
+ const decoder = getGlobalConfigDecoder();
157
+ const globalConfig = decoder.decode(dataWithoutDiscriminator);
158
+ // Update cache
159
+ globalConfigCache = {
160
+ data: [globalConfig, GLOBAL_CONFIG_AMM],
161
+ expiresAt: Date.now() + TEN_MINUTES_MS,
162
+ };
163
+ return [globalConfig, GLOBAL_CONFIG_AMM];
164
+ }
165
+ catch (error) {
166
+ throw new Error(`GlobalConfig deserialization failed: ${error instanceof Error ? error.message : String(error)}`);
167
+ }
168
+ }
169
+ /**
170
+ * Fetches the migrated AMM pool for a token
171
+ *
172
+ * @param baseMint - The token mint address (NOT WSOL)
173
+ * @returns Tuple of [PumpPoolData, pool PDA address]
174
+ * @throws Error if pool doesn't exist or deserialization fails
175
+ */
176
+ export async function getPumpFunMigratedPool(baseMint) {
177
+ // 2s in-memory cache
178
+ const cacheKey = String(baseMint);
179
+ const cached = migratedPoolCache.get(cacheKey);
180
+ if (cached && Date.now() < cached.expiresAt) {
181
+ return cached.data;
182
+ }
183
+ const rpc = getDefaultSolanaRPC();
184
+ try {
185
+ const poolAuthorityPda = await findPoolAuthorityPdaAmm(baseMint);
186
+ const poolPda = await findPoolPdaAmm(poolAuthorityPda, baseMint, WRAPPED_NATIVE_TOKEN_PUBKEY);
187
+ const encodedAccount = await fetchEncodedAccount(rpc, poolPda);
188
+ if (!encodedAccount.exists) {
189
+ throw new Error(`Migrated pool not found for token mint: ${baseMint}`);
190
+ }
191
+ const dataWithoutDiscriminator = encodedAccount.data.slice(ANCHOR_DISCRIMINATOR_SIZE);
192
+ try {
193
+ const decoder = getPumpPoolDataDecoder();
194
+ const poolData = decoder.decode(dataWithoutDiscriminator);
195
+ // Update short-lived cache
196
+ migratedPoolCache.set(cacheKey, {
197
+ data: [poolData, poolPda],
198
+ expiresAt: Date.now() + ONE_DAY_MS,
199
+ });
200
+ return [poolData, poolPda];
201
+ }
202
+ catch (decodingError) {
203
+ throw new Error(`Failed to deserialize pool data: ${decodingError instanceof Error ? decodingError.message : String(decodingError)}`);
204
+ }
205
+ }
206
+ catch (error) {
207
+ throw new Error(`Failed to fetch migrated pool: ${error instanceof Error ? error.message : String(error)}`);
208
+ }
209
+ }
210
+ /**
211
+ * Fetches and deserializes token account information for pool base and quote tokens
212
+ *
213
+ * @param poolBaseTokenAccount - Base token account public key
214
+ * @param poolQuoteTokenAccount - Quote token account public key
215
+ * @returns Tuple containing [baseTokenAccount, quoteTokenAccount]
216
+ * @throws Error if accounts don't exist or deserialization fails
217
+ */
218
+ export async function getPoolTokensInfo(poolBaseTokenAccount, poolQuoteTokenAccount) {
219
+ // 2s in-memory cache
220
+ const cacheKey = `${poolBaseTokenAccount}-${poolQuoteTokenAccount}`;
221
+ const cached = poolTokensInfoCache.get(cacheKey);
222
+ if (cached && Date.now() < cached.expiresAt) {
223
+ return cached.data;
224
+ }
225
+ const rpc = getDefaultSolanaRPC();
226
+ const accountsInfo = await fetchEncodedAccounts(rpc, [poolBaseTokenAccount, poolQuoteTokenAccount]);
227
+ // Validate base token account exists
228
+ const baseAccountInfo = accountsInfo[0];
229
+ if (!baseAccountInfo || !baseAccountInfo.exists) {
230
+ throw new Error(`Base token account not found: ${poolBaseTokenAccount}`);
231
+ }
232
+ // Validate quote token account exists
233
+ const quoteAccountInfo = accountsInfo[1];
234
+ if (!quoteAccountInfo || !quoteAccountInfo.exists) {
235
+ throw new Error(`Quote token account not found: ${poolQuoteTokenAccount}`);
236
+ }
237
+ const tokenDecoder = getTokenDecoder();
238
+ // Deserialize base token account
239
+ const baseDecoded = tokenDecoder.decode(baseAccountInfo.data);
240
+ const baseTokenAccount = {
241
+ mint: baseDecoded.mint,
242
+ owner: baseDecoded.owner,
243
+ amount: baseDecoded.amount,
244
+ delegate: unwrapOption(baseDecoded.delegate),
245
+ state: baseDecoded.state,
246
+ isNative: unwrapOption(baseDecoded.isNative),
247
+ delegatedAmount: baseDecoded.delegatedAmount,
248
+ closeAuthority: unwrapOption(baseDecoded.closeAuthority),
249
+ };
250
+ // Deserialize quote token account
251
+ const quoteDecoded = tokenDecoder.decode(quoteAccountInfo.data);
252
+ const quoteTokenAccount = {
253
+ mint: quoteDecoded.mint,
254
+ owner: quoteDecoded.owner,
255
+ amount: quoteDecoded.amount,
256
+ delegate: unwrapOption(quoteDecoded.delegate),
257
+ state: quoteDecoded.state,
258
+ isNative: unwrapOption(quoteDecoded.isNative),
259
+ delegatedAmount: quoteDecoded.delegatedAmount,
260
+ closeAuthority: unwrapOption(quoteDecoded.closeAuthority),
261
+ };
262
+ // Update short-lived cache
263
+ poolTokensInfoCache.set(cacheKey, {
264
+ data: [baseTokenAccount, quoteTokenAccount],
265
+ expiresAt: Date.now() + TWO_SECONDS_MS,
266
+ });
267
+ return [baseTokenAccount, quoteTokenAccount];
268
+ }
269
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../src/utils/quote/pumpfun/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,336 @@
1
+ import { NATIVE_SOLANA_TOKEN_ADDRESS, WRAPPED_SOL_MINT_ADDRESS } from '../../constants.js';
2
+ import { API_URLS, getPdaLaunchpadPoolId, Raydium, LAUNCHPAD_PROGRAM, PlatformConfig, Curve, } from '@raydium-io/raydium-sdk-v2';
3
+ import {} from './aggregator.js';
4
+ import { Connection, clusterApiUrl, PublicKey } from '@solana/web3.js'; // Used this package for raydium-sdk-v2 compatibility
5
+ import BN from 'bn.js';
6
+ import { Decimal } from 'decimal.js';
7
+ import { JupiterQuoteProvider } from './jupiter.js';
8
+ import { TWO_SECONDS_MS, TEN_MINUTES_MS } from './utils.js';
9
+ const launchpadPoolCache = new Map();
10
+ const launchpadPoolInfoCache = new Map();
11
+ const platformConfigCache = new Map();
12
+ const mintInfoCache = new Map();
13
+ // Local implementation of compareAddresses function
14
+ const compareAddresses = (firstAddress, secondAddress) => {
15
+ return !!firstAddress && !!secondAddress && firstAddress.toLowerCase() === secondAddress.toLowerCase();
16
+ };
17
+ const LAUNCHPAD_WHITELISTED_QUOTE_TOKENS = [
18
+ new PublicKey('So11111111111111111111111111111111111111112'), // WSOL
19
+ new PublicKey('EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'), // USDC
20
+ new PublicKey('Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB'), // USDT
21
+ new PublicKey('USD1ttGY1N17NEEHLmELoaybftRBUSErhqYiQzvEmuB'), // USD1
22
+ ];
23
+ let raydium;
24
+ export const initSdk = async () => {
25
+ if (raydium)
26
+ return raydium;
27
+ raydium = await Raydium.load({
28
+ connection: new Connection(clusterApiUrl('mainnet-beta')),
29
+ disableFeatureCheck: true,
30
+ disableLoadToken: true,
31
+ });
32
+ return raydium;
33
+ };
34
+ // Using API_URLS from Raydium SDK v2
35
+ export class RaydiumQuoteProvider {
36
+ /**
37
+ * Get priority fee recommendations from Raydium API
38
+ * @returns Priority fee data with different tiers (vh, h, m)
39
+ */
40
+ async getPriorityFee() {
41
+ const url = new URL(API_URLS.PRIORITY_FEE, API_URLS.BASE_HOST);
42
+ const response = await fetch(url);
43
+ if (!response.ok) {
44
+ throw new Error(`Failed to fetch priority fee from Raydium API: ${response.status} ${response.statusText}`);
45
+ }
46
+ const data = await response.json();
47
+ if (!data.success) {
48
+ throw new Error('Raydium API returned unsuccessful response for priority fee');
49
+ }
50
+ return data.data.default;
51
+ }
52
+ async getQuote(raydiumParams) {
53
+ const params = { ...raydiumParams };
54
+ // Handle native SOL token mapping for Solana
55
+ if (compareAddresses(params.inputMint, NATIVE_SOLANA_TOKEN_ADDRESS)) {
56
+ params.inputMint = WRAPPED_SOL_MINT_ADDRESS;
57
+ }
58
+ if (compareAddresses(params.outputMint, NATIVE_SOLANA_TOKEN_ADDRESS)) {
59
+ params.outputMint = WRAPPED_SOL_MINT_ADDRESS;
60
+ }
61
+ const url = new URL('/compute/swap-base-in', API_URLS.SWAP_HOST);
62
+ url.searchParams.set('inputMint', params.inputMint);
63
+ url.searchParams.set('outputMint', params.outputMint);
64
+ url.searchParams.set('amount', params.amount);
65
+ url.searchParams.set('slippageBps', params.slippageBps.toString());
66
+ url.searchParams.set('txVersion', 'V0');
67
+ const response = await fetch(url);
68
+ if (!response.ok) {
69
+ throw new Error(`Failed to fetch quote from Raydium API: ${response.status} ${response.statusText}`);
70
+ }
71
+ const data = await response.json();
72
+ if (!data.success) {
73
+ throw new Error('Raydium API returned unsuccessful response');
74
+ }
75
+ return data;
76
+ }
77
+ /**
78
+ * Get transaction data for executing a swap
79
+ * @param params - Transaction parameters
80
+ * @returns Serialized transaction data
81
+ */
82
+ async getSwapTransaction(params) {
83
+ const url = new URL('/transaction/swap-base-in', API_URLS.SWAP_HOST);
84
+ const response = await fetch(url, {
85
+ method: 'POST',
86
+ headers: {
87
+ 'Content-Type': 'application/json',
88
+ },
89
+ body: JSON.stringify({
90
+ computeUnitPriceMicroLamports: params.computeUnitPriceMicroLamports || '0',
91
+ swapResponse: params.swapResponse,
92
+ txVersion: params.txVersion,
93
+ wallet: params.wallet,
94
+ wrapSol: params.wrapSol || false,
95
+ unwrapSol: params.unwrapSol || false,
96
+ inputAccount: params.inputAccount,
97
+ outputAccount: params.outputAccount,
98
+ }),
99
+ });
100
+ if (!response.ok) {
101
+ throw new Error(`Failed to get swap transaction from Raydium API: ${response.status} ${response.statusText}`);
102
+ }
103
+ const data = await response.json();
104
+ if (!data.success) {
105
+ throw new Error('Raydium API returned unsuccessful response for swap transaction');
106
+ }
107
+ return data;
108
+ }
109
+ async getQuotePrebonded(raydiumParams) {
110
+ // First, get the Raydium quote token
111
+ let raydiumSdk = await initSdk();
112
+ let inputMintPk = new PublicKey(raydiumParams.inputMint);
113
+ let outputMintPk = new PublicKey(raydiumParams.outputMint);
114
+ // Check if either input or output mint is in the launchpad whitelisted tokens
115
+ let poolInfo, inputPoolInfo, outputPoolInfo, quoteToken, isInputPrebonded, inputQuoteToken, outputQuoteToken;
116
+ try {
117
+ [inputPoolInfo, inputQuoteToken] = await this.checkPreboundedTokensSwapLaunchpad(raydiumSdk, inputMintPk);
118
+ if (inputPoolInfo && inputQuoteToken) {
119
+ isInputPrebonded = true;
120
+ poolInfo = inputPoolInfo;
121
+ quoteToken = inputQuoteToken;
122
+ }
123
+ }
124
+ catch (e) { }
125
+ try {
126
+ [outputPoolInfo, outputQuoteToken] = await this.checkPreboundedTokensSwapLaunchpad(raydiumSdk, outputMintPk);
127
+ if (outputPoolInfo && outputQuoteToken) {
128
+ isInputPrebonded = false;
129
+ poolInfo = outputPoolInfo;
130
+ quoteToken = outputQuoteToken;
131
+ }
132
+ }
133
+ catch (e) { }
134
+ if (inputPoolInfo && outputPoolInfo) {
135
+ // Both input and output are prebonded, which is not supported
136
+ throw new Error('Both input and output tokens are prebonded, which is not supported');
137
+ }
138
+ else if (!quoteToken || !poolInfo) {
139
+ // Neither input nor output is prebonded, fallback to regular Raydium quote
140
+ throw new Error('Neither input nor output tokens are prebonded');
141
+ }
142
+ let quoteIsInput = quoteToken.equals(inputMintPk);
143
+ let quoteIsOutput = quoteToken.equals(outputMintPk);
144
+ if (isInputPrebonded) {
145
+ // We have to estimate prebonded first and then swap from quote token to output token (if needed)
146
+ let { expectedAmountOut, minimumAmountOut } = await this.estimatePrebondedToQuote(raydiumSdk, inputMintPk, poolInfo, 'sell', new BN(raydiumParams.amount), new BN(raydiumParams.slippageBps));
147
+ // Then, if output token is not quote token, we have to swap from quote token to output token
148
+ if (!quoteIsOutput) {
149
+ let jupiterQuoteRequest = {
150
+ amount: BigInt(expectedAmountOut.toString()),
151
+ tokenIn: quoteToken.toString(),
152
+ tokenOut: raydiumParams.outputMint,
153
+ swapMode: 'ExactIn',
154
+ slippageBps: raydiumParams.slippageBps, // Use full slippage for simplicity
155
+ };
156
+ const jupiterQuoter = new JupiterQuoteProvider();
157
+ const jupiterQuote = await jupiterQuoter.getQuote(jupiterQuoteRequest);
158
+ if (!jupiterQuote.quote) {
159
+ throw new Error('Jupiter quote failed');
160
+ }
161
+ return {
162
+ amountIn: BigInt(raydiumParams.amount),
163
+ amountOut: BigInt(jupiterQuote.quote.outAmount),
164
+ amountOutMin: BigInt(jupiterQuote.quote.otherAmountThreshold),
165
+ slippage: raydiumParams.slippageBps / 100,
166
+ };
167
+ }
168
+ else {
169
+ return {
170
+ amountIn: BigInt(raydiumParams.amount),
171
+ amountOut: BigInt(expectedAmountOut.toString()),
172
+ amountOutMin: BigInt(minimumAmountOut.toString()),
173
+ slippage: raydiumParams.slippageBps / 100,
174
+ };
175
+ }
176
+ }
177
+ else {
178
+ // We have to swap from input token to quote token and then estimate prebonded
179
+ let amountOutFromInput = new BN(raydiumParams.amount);
180
+ if (!quoteIsInput) {
181
+ let jupiterQuoteRequest = {
182
+ amount: BigInt(raydiumParams.amount),
183
+ tokenIn: raydiumParams.inputMint,
184
+ tokenOut: quoteToken.toString(),
185
+ swapMode: 'ExactIn',
186
+ slippageBps: raydiumParams.slippageBps, // Use full slippage for simplicity
187
+ };
188
+ const jupiterQuoter = new JupiterQuoteProvider();
189
+ const jupiterQuote = await jupiterQuoter.getQuote(jupiterQuoteRequest);
190
+ if (!jupiterQuote.quote) {
191
+ throw new Error('Jupiter quote failed');
192
+ }
193
+ // Calculate minimum amount with slippage applied
194
+ amountOutFromInput = new BN(jupiterQuote.quote.outAmount);
195
+ }
196
+ // Now estimate prebonded
197
+ let { expectedAmountOut, minimumAmountOut } = await this.estimatePrebondedToQuote(raydiumSdk, outputMintPk, poolInfo, 'buy', amountOutFromInput, new BN(raydiumParams.slippageBps));
198
+ return {
199
+ amountIn: BigInt(raydiumParams.amount),
200
+ amountOut: BigInt(expectedAmountOut.toString()),
201
+ amountOutMin: BigInt(minimumAmountOut.toString()),
202
+ slippage: raydiumParams.slippageBps / 100,
203
+ };
204
+ }
205
+ }
206
+ async checkPreboundedTokensSwapLaunchpad(raydiumSdk, raydiumMint) {
207
+ // Try cache first
208
+ const cacheKey = raydiumMint.toBase58();
209
+ const cached = launchpadPoolCache.get(cacheKey);
210
+ if (cached && Date.now() < cached.expiresAt) {
211
+ return cached.data;
212
+ }
213
+ // Check if either input or output mint is in the launchpad whitelisted tokens
214
+ // Check for input mint
215
+ for (const quoteToken of LAUNCHPAD_WHITELISTED_QUOTE_TOKENS) {
216
+ try {
217
+ const poolId = getPdaLaunchpadPoolId(LAUNCHPAD_PROGRAM, raydiumMint, quoteToken).publicKey;
218
+ const poolCacheKey = poolId.toBase58();
219
+ const cachedPoolInfo = launchpadPoolInfoCache.get(poolCacheKey);
220
+ const poolInfo = cachedPoolInfo && Date.now() < cachedPoolInfo.expiresAt
221
+ ? cachedPoolInfo.data
222
+ : await raydiumSdk.launchpad.getRpcPoolInfo({ poolId });
223
+ launchpadPoolInfoCache.set(poolCacheKey, {
224
+ data: poolInfo,
225
+ expiresAt: Date.now() + TWO_SECONDS_MS,
226
+ });
227
+ // Cache positive result for a short period
228
+ launchpadPoolCache.set(cacheKey, {
229
+ data: [poolInfo, quoteToken],
230
+ expiresAt: Date.now() + TWO_SECONDS_MS,
231
+ });
232
+ return [poolInfo, quoteToken];
233
+ }
234
+ catch (e) {
235
+ // Ignore and continue trying with next quote token
236
+ }
237
+ }
238
+ throw new Error('No launchpad pool found for the given token pair');
239
+ }
240
+ async estimatePrebondedToQuote(raydiumSdk, raydiumMint, poolInfo, trade_type, amount, slippage) {
241
+ const epochInfo = await raydiumSdk.connection.getEpochInfo();
242
+ const slot = await raydiumSdk.connection.getSlot();
243
+ const platformCacheKey = poolInfo.platformId.toBase58();
244
+ let platformInfoEntry = platformConfigCache.get(platformCacheKey);
245
+ if (!platformInfoEntry || Date.now() > platformInfoEntry.expiresAt) {
246
+ const accountInfo = await raydiumSdk.connection.getAccountInfo(poolInfo.platformId);
247
+ if (!accountInfo) {
248
+ throw new Error('Platform account not found');
249
+ }
250
+ platformInfoEntry = {
251
+ data: PlatformConfig.decode(accountInfo.data),
252
+ expiresAt: Date.now() + TEN_MINUTES_MS,
253
+ };
254
+ platformConfigCache.set(platformCacheKey, platformInfoEntry);
255
+ }
256
+ const platformInfo = platformInfoEntry.data;
257
+ const mintCacheKey = raydiumMint.toBase58();
258
+ let mintInfo = mintInfoCache.get(mintCacheKey);
259
+ if (!mintInfo) {
260
+ mintInfo = await raydiumSdk.token.getTokenInfo(raydiumMint);
261
+ mintInfoCache.set(mintCacheKey, mintInfo);
262
+ }
263
+ const shareFeeRate = new BN(0);
264
+ let expectedAmountOut;
265
+ let minimumAmountOut;
266
+ if (trade_type === 'buy') {
267
+ const res = Curve.buyExactIn({
268
+ poolInfo,
269
+ amountB: amount,
270
+ protocolFeeRate: poolInfo.configInfo.tradeFeeRate,
271
+ platformFeeRate: platformInfo.feeRate,
272
+ curveType: poolInfo.configInfo.curveType,
273
+ shareFeeRate,
274
+ creatorFeeRate: platformInfo.creatorFeeRate,
275
+ transferFeeConfigA: mintInfo.extensions.feeConfig
276
+ ? {
277
+ transferFeeConfigAuthority: PublicKey.default,
278
+ withdrawWithheldAuthority: PublicKey.default,
279
+ withheldAmount: BigInt(0),
280
+ olderTransferFee: {
281
+ epoch: BigInt(mintInfo.extensions.feeConfig.olderTransferFee.epoch ?? epochInfo?.epoch ?? 0),
282
+ maximumFee: BigInt(mintInfo.extensions.feeConfig.olderTransferFee.maximumFee),
283
+ transferFeeBasisPoints: mintInfo.extensions.feeConfig.olderTransferFee.transferFeeBasisPoints,
284
+ },
285
+ newerTransferFee: {
286
+ epoch: BigInt(mintInfo.extensions.feeConfig.newerTransferFee.epoch ?? epochInfo?.epoch ?? 0),
287
+ maximumFee: BigInt(mintInfo.extensions.feeConfig.newerTransferFee.maximumFee),
288
+ transferFeeBasisPoints: mintInfo.extensions.feeConfig.newerTransferFee.transferFeeBasisPoints,
289
+ },
290
+ }
291
+ : undefined,
292
+ slot,
293
+ });
294
+ expectedAmountOut = new BN(res.amountA.amount.sub(res.amountA.fee ?? new BN(0)).toString());
295
+ minimumAmountOut = new BN(new Decimal(res.amountA.amount.sub(res.amountA.fee ?? new BN(0)).toString())
296
+ .mul((10000 - slippage.toNumber()) / 10000)
297
+ .toFixed(0));
298
+ }
299
+ else if (trade_type === 'sell') {
300
+ const res = Curve.sellExactIn({
301
+ poolInfo,
302
+ amountA: amount,
303
+ protocolFeeRate: poolInfo.configInfo.tradeFeeRate,
304
+ platformFeeRate: platformInfo.feeRate,
305
+ curveType: poolInfo.configInfo.curveType,
306
+ shareFeeRate,
307
+ creatorFeeRate: platformInfo.creatorFeeRate,
308
+ slot,
309
+ transferFeeConfigA: mintInfo.extensions.feeConfig
310
+ ? {
311
+ transferFeeConfigAuthority: PublicKey.default,
312
+ withdrawWithheldAuthority: PublicKey.default,
313
+ withheldAmount: BigInt(0),
314
+ olderTransferFee: {
315
+ epoch: BigInt(mintInfo.extensions.feeConfig.olderTransferFee.epoch ?? epochInfo?.epoch ?? 0),
316
+ maximumFee: BigInt(mintInfo.extensions.feeConfig.olderTransferFee.maximumFee),
317
+ transferFeeBasisPoints: mintInfo.extensions.feeConfig.olderTransferFee.transferFeeBasisPoints,
318
+ },
319
+ newerTransferFee: {
320
+ epoch: BigInt(mintInfo.extensions.feeConfig.newerTransferFee.epoch ?? epochInfo?.epoch ?? 0),
321
+ maximumFee: BigInt(mintInfo.extensions.feeConfig.newerTransferFee.maximumFee),
322
+ transferFeeBasisPoints: mintInfo.extensions.feeConfig.newerTransferFee.transferFeeBasisPoints,
323
+ },
324
+ }
325
+ : undefined,
326
+ });
327
+ expectedAmountOut = new BN(res.amountB);
328
+ minimumAmountOut = new BN(new Decimal(res.amountB.toString()).mul((10000 - slippage.toNumber()) / 10000).toFixed(0));
329
+ }
330
+ else {
331
+ throw new Error('Invalid trade type. Must be "buy" or "sell".');
332
+ }
333
+ return { expectedAmountOut, minimumAmountOut };
334
+ }
335
+ }
336
+ //# sourceMappingURL=raydium.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"raydium.js","sourceRoot":"","sources":["../../../../src/utils/quote/raydium.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ export const CROSS_CHAIN_TOKENS = {
7
7
  [ChainID.Hyperliquid]: '0xb8ce59fc3717ada4c02eadf9682a9e934f625ebb', // USDT on Hyperliquid (No USDC on Hyperliquid)
8
8
  [ChainID.Sui]: '0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC', // USDC on Sui
9
9
  [ChainID.Optimism]: '0x7F5c764cBc14f9669B88837ca1490cCa17c31607', // USDC on Optimism
10
+ [ChainID.BSC]: '0x55d398326f99059ff775485246999027b3197955',
10
11
  },
11
12
  // Add more tokens as needed
12
13
  };
@@ -1 +1 @@
1
- {"version":3,"file":"stablecoins-tokens.js","sourceRoot":"","sources":["../../../../src/utils/quote/stablecoins-tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAW1C,MAAM,CAAC,MAAM,kBAAkB,GAA4C;IACzE,IAAI,EAAE;QACJ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,8CAA8C,EAAE,iBAAiB;QACnF,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,4CAA4C,EAAE,eAAe;QAC7E,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,4CAA4C,EAAE,mBAAmB;QACrF,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,4CAA4C,EAAE,+CAA+C;QACpH,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,gFAAgF,EAAE,cAAc;QAC/G,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,4CAA4C,EAAE,mBAAmB;KACtF;IACD,4BAA4B;CAC7B,CAAC"}
1
+ {"version":3,"file":"stablecoins-tokens.js","sourceRoot":"","sources":["../../../../src/utils/quote/stablecoins-tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAW1C,MAAM,CAAC,MAAM,kBAAkB,GAA4C;IACzE,IAAI,EAAE;QACJ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,8CAA8C,EAAE,iBAAiB;QACnF,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,4CAA4C,EAAE,eAAe;QAC7E,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,4CAA4C,EAAE,mBAAmB;QACrF,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,4CAA4C,EAAE,+CAA+C;QACpH,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,gFAAgF,EAAE,cAAc;QAC/G,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,4CAA4C,EAAE,mBAAmB;QACrF,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,4CAA4C;KAC5D;IACD,4BAA4B;CAC7B,CAAC"}