@hawksightco/hawk-sdk 1.1.73 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/src/addresses.d.ts +3 -0
  2. package/dist/src/addresses.d.ts.map +1 -1
  3. package/dist/src/addresses.js +4 -1
  4. package/dist/src/anchor.d.ts +2 -0
  5. package/dist/src/anchor.d.ts.map +1 -1
  6. package/dist/src/anchor.js +2 -0
  7. package/dist/src/classes/HawkAPI.js +1 -2
  8. package/dist/src/classes/SimpleIxGenerator.d.ts +28 -5
  9. package/dist/src/classes/SimpleIxGenerator.d.ts.map +1 -1
  10. package/dist/src/classes/SimpleIxGenerator.js +29 -6
  11. package/dist/src/classes/Transactions.d.ts +34 -1
  12. package/dist/src/classes/Transactions.d.ts.map +1 -1
  13. package/dist/src/classes/Transactions.js +124 -1
  14. package/dist/src/classes/TxGenerator.d.ts +17 -1
  15. package/dist/src/classes/TxGenerator.d.ts.map +1 -1
  16. package/dist/src/classes/TxGenerator.js +135 -10
  17. package/dist/src/classes/TxGeneratorAutomations.d.ts.map +1 -1
  18. package/dist/src/classes/TxGeneratorAutomations.js +5 -0
  19. package/dist/src/functions.d.ts +10 -0
  20. package/dist/src/functions.d.ts.map +1 -1
  21. package/dist/src/functions.js +53 -1
  22. package/dist/src/idl/iyf-extension-idl.d.ts +166 -210
  23. package/dist/src/idl/iyf-extension-idl.d.ts.map +1 -1
  24. package/dist/src/idl/iyf-extension-idl.js +168 -212
  25. package/dist/src/idl/iyf-main-idl.d.ts +288 -0
  26. package/dist/src/idl/iyf-main-idl.d.ts.map +1 -1
  27. package/dist/src/idl/iyf-main-idl.js +288 -0
  28. package/dist/src/idl/raydium-idl.d.ts +3054 -0
  29. package/dist/src/idl/raydium-idl.d.ts.map +1 -0
  30. package/dist/src/idl/raydium-idl.js +3055 -0
  31. package/dist/src/ixGenerator/IyfExtensionIxGenerator.d.ts +80 -1
  32. package/dist/src/ixGenerator/IyfExtensionIxGenerator.d.ts.map +1 -1
  33. package/dist/src/ixGenerator/IyfExtensionIxGenerator.js +289 -1
  34. package/dist/src/ixGenerator/IyfMainIxGenerator.d.ts +31 -0
  35. package/dist/src/ixGenerator/IyfMainIxGenerator.d.ts.map +1 -1
  36. package/dist/src/ixGenerator/IyfMainIxGenerator.js +183 -0
  37. package/dist/src/ixGenerator/RaydiumIxGenerator.d.ts +114 -0
  38. package/dist/src/ixGenerator/RaydiumIxGenerator.d.ts.map +1 -0
  39. package/dist/src/ixGenerator/RaydiumIxGenerator.js +398 -0
  40. package/dist/src/pdaGenerator/RaydiumPdaGenerator.d.ts +44 -1
  41. package/dist/src/pdaGenerator/RaydiumPdaGenerator.d.ts.map +1 -1
  42. package/dist/src/pdaGenerator/RaydiumPdaGenerator.js +96 -1
  43. package/dist/src/types.d.ts +36 -2
  44. package/dist/src/types.d.ts.map +1 -1
  45. package/package.json +1 -1
@@ -42,6 +42,7 @@ const hawksight_1 = require("../hawksight");
42
42
  const functions_1 = require("../functions");
43
43
  const addresses_1 = require("../addresses");
44
44
  const bn_js_1 = __importDefault(require("bn.js"));
45
+ const token_1 = require("@coral-xyz/anchor/dist/cjs/utils/token");
45
46
  /**
46
47
  * Iyf Main IX Generator
47
48
  */
@@ -132,6 +133,40 @@ class IyfMainIxGenerator {
132
133
  return ix;
133
134
  });
134
135
  }
136
+ /**
137
+ * Invoke iyf extension
138
+ *
139
+ * @param connection
140
+ * @param params
141
+ */
142
+ iyfExtensionExecuteV2(connection_1, _a) {
143
+ return __awaiter(this, arguments, void 0, function* (connection, { userWallet, ix, }) {
144
+ // Initialize anchor
145
+ anchor_1.Anchor.initialize(connection);
146
+ // Generate user pda
147
+ const userPda = (0, functions_1.generateUserPda)(userWallet);
148
+ // Validate whether instruction is valid
149
+ const invalidInstruction = !ix.programId.equals(addresses_1.IYF_EXTENSION) ||
150
+ ix.keys.length < 2 ||
151
+ ix.data.length < 8 ||
152
+ !ix.keys[0].pubkey.equals(userPda) ||
153
+ !ix.keys[1].pubkey.equals(userWallet);
154
+ if (invalidInstruction) {
155
+ throw new Error('The given instruction is not a valid iyf extension v2 instruction.');
156
+ }
157
+ // Generate iyf extension instruction
158
+ return yield anchor_1.Anchor.instance().iyfMain
159
+ .methods
160
+ .iyfExtensionExecuteV2(ix.data)
161
+ .accounts({
162
+ userPda,
163
+ authority: userWallet,
164
+ iyfExtensionProgram: ix.programId
165
+ })
166
+ .remainingAccounts(ix.keys.slice(4))
167
+ .instruction();
168
+ });
169
+ }
135
170
  jupiterRouteIx(_a) {
136
171
  return __awaiter(this, arguments, void 0, function* ({ connection, userWallet, userPda, sourceTokenAccount, destinationTokenAccount, destinationMint, platformFeeAccount, eventAuthority, remainingAccounts, data, slippageOutPct, quotedOutAmount_override, slippageBps, platformFeeBps, }) {
137
172
  var _b;
@@ -348,5 +383,153 @@ class IyfMainIxGenerator {
348
383
  return ix;
349
384
  });
350
385
  }
386
+ raydiumDynamicCpi(connection_1, _a) {
387
+ return __awaiter(this, arguments, void 0, function* (connection, { userWallet, raydiumIx, }) {
388
+ // Initialize anchor
389
+ anchor_1.Anchor.initialize(connection);
390
+ // Generate user pda
391
+ const userPda = (0, functions_1.generateUserPda)(userWallet);
392
+ const nftOwner = (0, functions_1.generateUserPdaLamport)(userWallet);
393
+ if (raydiumIx.programId == addresses_1.RAYDIUM_PROGRAM) {
394
+ // Define the whitelisted instructions
395
+ const whitelist = {
396
+ "open_position_with_token22_nft": 1,
397
+ "close_position": 0,
398
+ "increase_liquidity_v2": 0,
399
+ };
400
+ // Find the instruction
401
+ const key = Object.keys(whitelist).find(discriminator => (0, functions_1.sighashMatch)(raydiumIx.data, discriminator));
402
+ // Key has to return a value. Otherwise, throw error (means we try to execute ix not in the whitelist)
403
+ if (key === undefined) {
404
+ throw new Error('raydiumDynamicCpi: Instruction not in whitelist.');
405
+ }
406
+ const index = whitelist[key];
407
+ // Remove nft owner
408
+ raydiumIx.keys.splice(index, 1);
409
+ // Raydium dynamic cpi wrapper
410
+ const ix = yield anchor_1.Anchor.instance().iyfMain.methods
411
+ .raydiumDynamicCpi(raydiumIx.data)
412
+ .accounts({
413
+ raydiumProgram: addresses_1.RAYDIUM_PROGRAM,
414
+ userPda,
415
+ authority: userWallet,
416
+ nftOwner,
417
+ })
418
+ .remainingAccounts([
419
+ ...raydiumIx.keys
420
+ ])
421
+ .instruction();
422
+ return ix;
423
+ }
424
+ else if (raydiumIx.programId == addresses_1.IYF_EXTENSION) {
425
+ // Raydium dynamic cpi wrapper
426
+ const ix = yield anchor_1.Anchor.instance().iyfMain.methods
427
+ .raydiumDynamicCpi(raydiumIx.data)
428
+ .accounts({
429
+ raydiumProgram: addresses_1.RAYDIUM_PROGRAM,
430
+ userPda,
431
+ authority: raydiumIx.keys[2].pubkey,
432
+ nftOwner,
433
+ })
434
+ .remainingAccounts([
435
+ { pubkey: addresses_1.IYF_EXTENSION, isSigner: false, isWritable: false },
436
+ ...raydiumIx.keys.slice(4)
437
+ ])
438
+ .instruction();
439
+ return ix;
440
+ }
441
+ else {
442
+ throw new Error(`raydiumDynamicCpi: Invalid raydiumIx.programId: ${raydiumIx.programId}`);
443
+ }
444
+ });
445
+ }
446
+ depositMultipleLamportPdaToken(_a) {
447
+ return __awaiter(this, arguments, void 0, function* ({ userWallet, deposit }) {
448
+ const farm = addresses_1.USDC_FARM;
449
+ const userPda = (0, functions_1.generateUserPda)(userWallet);
450
+ const userPdaLamport = (0, functions_1.generateUserPdaLamport)(userWallet);
451
+ const amounts = deposit.map((d) => d.amount);
452
+ const remainingAccounts = [];
453
+ deposit.map((d) => {
454
+ const mint = d.mint;
455
+ const userToken = (0, functions_1.generateAta)(userWallet, d.mint);
456
+ const userPdaToken = (0, functions_1.generateAta)(userPdaLamport, d.mint);
457
+ const ownerFeeToken = (0, functions_1.generateAta)(addresses_1.SITE_FEE_OWNER, d.mint);
458
+ remainingAccounts.push({ pubkey: mint, isSigner: false, isWritable: true });
459
+ remainingAccounts.push({
460
+ pubkey: userToken,
461
+ isSigner: false,
462
+ isWritable: true,
463
+ });
464
+ remainingAccounts.push({
465
+ pubkey: userPdaToken,
466
+ isSigner: false,
467
+ isWritable: true,
468
+ });
469
+ remainingAccounts.push({
470
+ pubkey: ownerFeeToken,
471
+ isSigner: false,
472
+ isWritable: true,
473
+ });
474
+ });
475
+ const ix = yield anchor_1.Anchor.instance().iyfMain.methods
476
+ .depositMultipleLamportPdaToken(amounts)
477
+ .accounts({
478
+ userPda,
479
+ userPdaLamport,
480
+ payer: userWallet,
481
+ hsFeeOwner: addresses_1.SITE_FEE_OWNER,
482
+ associatedTokenProgram: token_1.ASSOCIATED_PROGRAM_ID,
483
+ tokenProgram: addresses_1.TOKEN_PROGRAM_ID,
484
+ systemProgram: web3.SystemProgram.programId,
485
+ })
486
+ .remainingAccounts(remainingAccounts)
487
+ .instruction();
488
+ return ix;
489
+ });
490
+ }
491
+ withdrawMultipleLamportPdaToken(_a) {
492
+ return __awaiter(this, arguments, void 0, function* ({ userWallet, withdraw }) {
493
+ const userPda = (0, functions_1.generateUserPda)(userWallet);
494
+ const userPdaLamport = (0, functions_1.generateUserPdaLamport)(userWallet);
495
+ const remainingAccounts = [];
496
+ withdraw.map((d) => {
497
+ const mint = d.mint;
498
+ const userToken = (0, functions_1.generateAta)(userWallet, d.mint);
499
+ const userPdaToken = (0, functions_1.generateAta)(userPdaLamport, d.mint);
500
+ const ownerFeeToken = (0, functions_1.generateAta)(addresses_1.SITE_FEE_OWNER, d.mint);
501
+ remainingAccounts.push({ pubkey: mint, isSigner: false, isWritable: true });
502
+ remainingAccounts.push({
503
+ pubkey: userToken,
504
+ isSigner: false,
505
+ isWritable: true,
506
+ });
507
+ remainingAccounts.push({
508
+ pubkey: userPdaToken,
509
+ isSigner: false,
510
+ isWritable: true,
511
+ });
512
+ remainingAccounts.push({
513
+ pubkey: ownerFeeToken,
514
+ isSigner: false,
515
+ isWritable: true,
516
+ });
517
+ });
518
+ const ix = yield anchor_1.Anchor.instance().iyfMain.methods
519
+ .withdrawMultipleLamportPdaToken()
520
+ .accounts({
521
+ userPda,
522
+ userPdaLamport,
523
+ payer: userWallet,
524
+ hsFeeOwner: addresses_1.SITE_FEE_OWNER,
525
+ associatedTokenProgram: token_1.ASSOCIATED_PROGRAM_ID,
526
+ tokenProgram: addresses_1.TOKEN_PROGRAM_ID,
527
+ systemProgram: web3.SystemProgram.programId,
528
+ })
529
+ .remainingAccounts(remainingAccounts)
530
+ .instruction();
531
+ return ix;
532
+ });
533
+ }
351
534
  }
352
535
  exports.IyfMainIxGenerator = IyfMainIxGenerator;
@@ -0,0 +1,114 @@
1
+ import * as web3 from "@solana/web3.js";
2
+ import { IyfMainIxGenerator } from "./IyfMainIxGenerator";
3
+ import { RaydiumClosePosition, RaydiumDecreaseLiquidity, RaydiumIncreaseLiquidity, RaydiumOpenPosition, RaydiumSweepDust, TxgenParams } from '../types';
4
+ import { IyfExtensionIxGenerator } from "./IyfExtensionIxGenerator";
5
+ import { SimplePdaGenerator } from "../classes/SimplePdaGenerator";
6
+ export type RaydiumFetch = {
7
+ poolStateInfo: {
8
+ tokenMint0: web3.PublicKey;
9
+ tokenMint1: web3.PublicKey;
10
+ tokenVault0: web3.PublicKey;
11
+ tokenVault1: web3.PublicKey;
12
+ ammConfig: web3.PublicKey;
13
+ observationKey: web3.PublicKey;
14
+ tickCurrent: number;
15
+ tickSpacing: number;
16
+ rewardInfos: {
17
+ tokenMint: web3.PublicKey;
18
+ tokenVault: web3.PublicKey;
19
+ }[];
20
+ };
21
+ positionInfo?: {
22
+ poolId: web3.PublicKey;
23
+ tickLowerIndex: number;
24
+ tickUpperIndex: number;
25
+ nftMint: web3.PublicKey;
26
+ };
27
+ };
28
+ export type RaydiumFetchParams = {
29
+ personalPosition?: web3.PublicKey;
30
+ poolState?: web3.PublicKey;
31
+ };
32
+ /**
33
+ * Meteora related instructions executed via iyf extension or iyf main
34
+ */
35
+ export declare class RaydiumIxGenerator {
36
+ private iyfMain;
37
+ private iyfExtension;
38
+ private pda;
39
+ constructor(iyfMain: IyfMainIxGenerator, iyfExtension: IyfExtensionIxGenerator, pda: SimplePdaGenerator);
40
+ raydiumFetch({ personalPosition, poolState }: RaydiumFetchParams): Promise<RaydiumFetch>;
41
+ /**
42
+ *
43
+ * @param connection The Solana web3 connection object for blockchain interactions.
44
+ * @param payer The public key of the payer for transaction fees.
45
+ * @param params Parameters required
46
+ * @returns A ResponseWithStatus containing either TransactionMetadataResponse.
47
+ */
48
+ raydiumOpenPosition({ connection, params, fetch }: TxgenParams<RaydiumOpenPosition, RaydiumFetch>): Promise<web3.TransactionInstruction>;
49
+ /**
50
+ *
51
+ * @param connection The Solana web3 connection object for blockchain interactions.
52
+ * @param payer The public key of the payer for transaction fees.
53
+ * @param params Parameters required
54
+ * @returns A ResponseWithStatus containing either TransactionMetadataResponse.
55
+ */
56
+ raydiumOpenPositionAutomation({ connection, params }: TxgenParams<RaydiumOpenPosition>): Promise<web3.TransactionInstruction>;
57
+ /**
58
+ *
59
+ * @param connection The Solana web3 connection object for blockchain interactions.
60
+ * @param payer The public key of the payer for transaction fees.
61
+ * @param params Parameters required
62
+ * @returns A ResponseWithStatus containing either TransactionMetadataResponse.
63
+ */
64
+ raydiumClosePosition({ connection, params, fetch }: TxgenParams<RaydiumClosePosition, RaydiumFetch>): Promise<web3.TransactionInstruction>;
65
+ /**
66
+ *
67
+ * @param connection The Solana web3 connection object for blockchain interactions.
68
+ * @param payer The public key of the payer for transaction fees.
69
+ * @param params Parameters required
70
+ * @returns A ResponseWithStatus containing either TransactionMetadataResponse.
71
+ */
72
+ raydiumClosePositionAutomation({ connection, params }: TxgenParams<RaydiumOpenPosition>): Promise<web3.TransactionInstruction>;
73
+ /**
74
+ *
75
+ * @param connection The Solana web3 connection object for blockchain interactions.
76
+ * @param payer The public key of the payer for transaction fees.
77
+ * @param params Parameters required
78
+ * @returns A ResponseWithStatus containing either TransactionMetadataResponse.
79
+ */
80
+ raydiumIncreaseLiquidity({ connection, params, fetch }: TxgenParams<RaydiumIncreaseLiquidity, RaydiumFetch>): Promise<web3.TransactionInstruction>;
81
+ /**
82
+ *
83
+ * @param connection The Solana web3 connection object for blockchain interactions.
84
+ * @param payer The public key of the payer for transaction fees.
85
+ * @param params Parameters required
86
+ * @returns A ResponseWithStatus containing either TransactionMetadataResponse.
87
+ */
88
+ raydiumIncreaseLiquidityAutomation({ connection, params, fetch }: TxgenParams<RaydiumIncreaseLiquidity, RaydiumFetch>): Promise<web3.TransactionInstruction>;
89
+ /**
90
+ *
91
+ * @param connection The Solana web3 connection object for blockchain interactions.
92
+ * @param payer The public key of the payer for transaction fees.
93
+ * @param params Parameters required
94
+ * @returns A ResponseWithStatus containing either TransactionMetadataResponse.
95
+ */
96
+ raydiumDecreaseLiquidity({ connection, params, fetch }: TxgenParams<RaydiumDecreaseLiquidity, RaydiumFetch>): Promise<web3.TransactionInstruction>;
97
+ /**
98
+ *
99
+ * @param connection The Solana web3 connection object for blockchain interactions.
100
+ * @param payer The public key of the payer for transaction fees.
101
+ * @param params Parameters required
102
+ * @returns A ResponseWithStatus containing either TransactionMetadataResponse.
103
+ */
104
+ raydiumDecreaseLiquidityAutomation({ connection, params, fetch }: TxgenParams<RaydiumDecreaseLiquidity, RaydiumFetch>): Promise<web3.TransactionInstruction>;
105
+ /**
106
+ *
107
+ * @param connection The Solana web3 connection object for blockchain interactions.
108
+ * @param payer The public key of the payer for transaction fees.
109
+ * @param params Parameters required
110
+ * @returns A ResponseWithStatus containing either TransactionMetadataResponse.
111
+ */
112
+ raydiumSweepDust({ connection, params, fetch }: TxgenParams<RaydiumSweepDust, RaydiumFetch>): Promise<web3.TransactionInstruction>;
113
+ }
114
+ //# sourceMappingURL=RaydiumIxGenerator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RaydiumIxGenerator.d.ts","sourceRoot":"","sources":["../../../src/ixGenerator/RaydiumIxGenerator.ts"],"names":[],"mappings":"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"}