@symmetry-hq/temp-v3-sdk 0.0.1

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 (148) hide show
  1. package/dist/idl/idl.d.ts +8 -0
  2. package/dist/idl/idl.js +4958 -0
  3. package/dist/idl/types.d.ts +4955 -0
  4. package/dist/idl/types.js +2 -0
  5. package/dist/index.d.ts +24 -0
  6. package/dist/index.js +60 -0
  7. package/dist/layouts/basket.d.ts +42 -0
  8. package/dist/layouts/basket.js +43 -0
  9. package/dist/layouts/config.d.ts +97 -0
  10. package/dist/layouts/config.js +102 -0
  11. package/dist/layouts/fraction.d.ts +6 -0
  12. package/dist/layouts/fraction.js +9 -0
  13. package/dist/layouts/oracle.d.ts +36 -0
  14. package/dist/layouts/oracle.js +37 -0
  15. package/dist/src/constants.d.ts +15 -0
  16. package/dist/src/constants.js +19 -0
  17. package/dist/src/idl/idl.d.ts +8 -0
  18. package/dist/src/idl/idl.js +4958 -0
  19. package/dist/src/idl/types.d.ts +4955 -0
  20. package/dist/src/idl/types.js +2 -0
  21. package/dist/src/index.d.ts +53 -0
  22. package/dist/src/index.js +199 -0
  23. package/dist/src/instructions/accounts.d.ts +27 -0
  24. package/dist/src/instructions/accounts.js +110 -0
  25. package/dist/src/instructions/auction.d.ts +7 -0
  26. package/dist/src/instructions/auction.js +43 -0
  27. package/dist/src/instructions/automation/auction.d.ts +6 -0
  28. package/dist/src/instructions/automation/auction.js +40 -0
  29. package/dist/src/instructions/automation/claimBounty.d.ts +12 -0
  30. package/dist/src/instructions/automation/claimBounty.js +44 -0
  31. package/dist/src/instructions/automation/priceUpdate.d.ts +15 -0
  32. package/dist/src/instructions/automation/priceUpdate.js +47 -0
  33. package/dist/src/instructions/automation/rebalanceSwap.d.ts +10 -0
  34. package/dist/src/instructions/automation/rebalanceSwap.js +42 -0
  35. package/dist/src/instructions/basket.d.ts +120 -0
  36. package/dist/src/instructions/basket.js +622 -0
  37. package/dist/src/instructions/bounty.d.ts +18 -0
  38. package/dist/src/instructions/bounty.js +81 -0
  39. package/dist/src/instructions/fee.d.ts +8 -0
  40. package/dist/src/instructions/fee.js +46 -0
  41. package/dist/src/instructions/globalConfig.d.ts +11 -0
  42. package/dist/src/instructions/globalConfig.js +43 -0
  43. package/dist/src/instructions/luts.d.ts +33 -0
  44. package/dist/src/instructions/luts.js +91 -0
  45. package/dist/src/instructions/management/addBounty.d.ts +7 -0
  46. package/dist/src/instructions/management/addBounty.js +39 -0
  47. package/dist/src/instructions/management/admin.d.ts +9 -0
  48. package/dist/src/instructions/management/admin.js +43 -0
  49. package/dist/src/instructions/management/claimFees.d.ts +7 -0
  50. package/dist/src/instructions/management/claimFees.js +47 -0
  51. package/dist/src/instructions/management/createBasket.d.ts +22 -0
  52. package/dist/src/instructions/management/createBasket.js +101 -0
  53. package/dist/src/instructions/management/edit.d.ts +34 -0
  54. package/dist/src/instructions/management/edit.js +192 -0
  55. package/dist/src/instructions/management/luts.d.ts +29 -0
  56. package/dist/src/instructions/management/luts.js +88 -0
  57. package/dist/src/instructions/pda.d.ts +26 -0
  58. package/dist/src/instructions/pda.js +110 -0
  59. package/dist/src/instructions/price.d.ts +17 -0
  60. package/dist/src/instructions/price.js +47 -0
  61. package/dist/src/instructions/user/deposit.d.ts +32 -0
  62. package/dist/src/instructions/user/deposit.js +168 -0
  63. package/dist/src/instructions/user/withdraw.d.ts +16 -0
  64. package/dist/src/instructions/user/withdraw.js +82 -0
  65. package/dist/src/layouts/basket.d.ts +41 -0
  66. package/dist/src/layouts/basket.js +43 -0
  67. package/dist/src/layouts/config.d.ts +133 -0
  68. package/dist/src/layouts/config.js +137 -0
  69. package/dist/src/layouts/fraction.d.ts +6 -0
  70. package/dist/src/layouts/fraction.js +9 -0
  71. package/dist/src/layouts/intents/bounty.d.ts +18 -0
  72. package/dist/src/layouts/intents/bounty.js +19 -0
  73. package/dist/src/layouts/intents/intent.d.ts +101 -0
  74. package/dist/src/layouts/intents/intent.js +113 -0
  75. package/dist/src/layouts/intents/rebalanceIntent.d.ts +56 -0
  76. package/dist/src/layouts/intents/rebalanceIntent.js +63 -0
  77. package/dist/src/layouts/lookupTable.d.ts +7 -0
  78. package/dist/src/layouts/lookupTable.js +10 -0
  79. package/dist/src/layouts/oracle.d.ts +42 -0
  80. package/dist/src/layouts/oracle.js +43 -0
  81. package/dist/src/states/basket.d.ts +8 -0
  82. package/dist/src/states/basket.js +54 -0
  83. package/dist/src/states/intents/intent.d.ts +14 -0
  84. package/dist/src/states/intents/intent.js +90 -0
  85. package/dist/src/states/intents/rebalanceIntent.d.ts +8 -0
  86. package/dist/src/states/intents/rebalanceIntent.js +54 -0
  87. package/dist/src/states/oracles/clmm_oracle.d.ts +178 -0
  88. package/dist/src/states/oracles/clmm_oracle.js +546 -0
  89. package/dist/src/states/oracles/constants.d.ts +8 -0
  90. package/dist/src/states/oracles/constants.js +12 -0
  91. package/dist/src/states/oracles/oracle.d.ts +60 -0
  92. package/dist/src/states/oracles/oracle.js +237 -0
  93. package/dist/src/states/oracles/pythOracle.d.ts +39 -0
  94. package/dist/src/states/oracles/pythOracle.js +202 -0
  95. package/dist/src/states/oracles/pyth_oracle.d.ts +39 -0
  96. package/dist/src/states/oracles/pyth_oracle.js +202 -0
  97. package/dist/src/states/oracles/raydiumClmmOracle.d.ts +178 -0
  98. package/dist/src/states/oracles/raydiumClmmOracle.js +546 -0
  99. package/dist/src/states/oracles/raydiumCpmmOracle.d.ts +139 -0
  100. package/dist/src/states/oracles/raydiumCpmmOracle.js +420 -0
  101. package/dist/src/states/oracles/raydium_cpmm_oracle.d.ts +139 -0
  102. package/dist/src/states/oracles/raydium_cpmm_oracle.js +420 -0
  103. package/dist/src/states/oracles/switchboardOracle.d.ts +0 -0
  104. package/dist/src/states/oracles/switchboardOracle.js +1 -0
  105. package/dist/src/states/oracles/switchboard_oracle.d.ts +0 -0
  106. package/dist/src/states/oracles/switchboard_oracle.js +1 -0
  107. package/dist/src/txUtils.d.ts +26 -0
  108. package/dist/src/txUtils.js +183 -0
  109. package/dist/states/basket.d.ts +8 -0
  110. package/dist/states/basket.js +57 -0
  111. package/dist/test.d.ts +1 -0
  112. package/dist/test.js +39 -0
  113. package/package.json +30 -0
  114. package/src/constants.ts +24 -0
  115. package/src/index.ts +260 -0
  116. package/src/instructions/automation/auction.ts +55 -0
  117. package/src/instructions/automation/claimBounty.ts +69 -0
  118. package/src/instructions/automation/priceUpdate.ts +73 -0
  119. package/src/instructions/automation/rebalanceSwap.ts +60 -0
  120. package/src/instructions/management/addBounty.ts +56 -0
  121. package/src/instructions/management/admin.ts +65 -0
  122. package/src/instructions/management/claimFees.ts +59 -0
  123. package/src/instructions/management/createBasket.ts +148 -0
  124. package/src/instructions/management/edit.ts +255 -0
  125. package/src/instructions/management/luts.ts +134 -0
  126. package/src/instructions/pda.ts +160 -0
  127. package/src/instructions/user/deposit.ts +237 -0
  128. package/src/instructions/user/withdraw.ts +130 -0
  129. package/src/layouts/basket.ts +82 -0
  130. package/src/layouts/config.ts +301 -0
  131. package/src/layouts/fraction.ts +12 -0
  132. package/src/layouts/intents/bounty.ts +35 -0
  133. package/src/layouts/intents/intent.ts +204 -0
  134. package/src/layouts/intents/rebalanceIntent.ts +111 -0
  135. package/src/layouts/lookupTable.ts +14 -0
  136. package/src/layouts/oracle.ts +96 -0
  137. package/src/states/basket.ts +56 -0
  138. package/src/states/intents/intent.ts +107 -0
  139. package/src/states/intents/rebalanceIntent.ts +57 -0
  140. package/src/states/oracles/constants.ts +13 -0
  141. package/src/states/oracles/oracle.ts +260 -0
  142. package/src/states/oracles/pythOracle.ts +270 -0
  143. package/src/states/oracles/raydiumClmmOracle.ts +812 -0
  144. package/src/states/oracles/raydiumCpmmOracle.ts +614 -0
  145. package/src/states/oracles/switchboardOracle.ts +0 -0
  146. package/src/txUtils.ts +250 -0
  147. package/test.ts +30 -0
  148. package/tsconfig.json +101 -0
@@ -0,0 +1,56 @@
1
+ import { BN } from '@coral-xyz/anchor';
2
+ import { SYSTEM_PROGRAM_ID } from '@coral-xyz/anchor/dist/cjs/native/system';
3
+ import {
4
+ ASSOCIATED_TOKEN_PROGRAM_ID,
5
+ TOKEN_2022_PROGRAM_ID, TOKEN_PROGRAM_ID
6
+ } from '@solana/spl-token';
7
+ import { PublicKey, SystemProgram, TransactionInstruction } from '@solana/web3.js';
8
+ import { BASKETS_V3_PROGRAM_ID } from '../../constants';
9
+ import { getAta, getBountyVaultPda, getGlobalConfigPda } from '../pda';
10
+
11
+ const ADD_BOUNTY_DISCRIMINATOR = Buffer.from([84, 56, 167, 193, 17, 91, 42, 143,]);
12
+
13
+
14
+ export function addBountyIx(params: {
15
+ keeper: PublicKey;
16
+ basket: PublicKey;
17
+ bountyMint: PublicKey;
18
+ amount: number;
19
+ }): TransactionInstruction {
20
+ const {
21
+ keeper,
22
+ basket,
23
+ bountyMint,
24
+ amount,
25
+ } = params;
26
+
27
+ let bountyVault = getBountyVaultPda();
28
+ let globalConfig = getGlobalConfigPda();
29
+ let keeperBountyAta = getAta(keeper, bountyMint);
30
+ let bountyVaultAta = getAta(bountyMint, bountyVault);
31
+
32
+ const data = Buffer.concat([
33
+ ADD_BOUNTY_DISCRIMINATOR,
34
+ Buffer.from(new BN(amount).toArray("le", 8)), // u64 LE
35
+ ]);
36
+
37
+ const keys = [
38
+ { pubkey: keeper, isSigner: true, isWritable: true },
39
+ { pubkey: basket, isSigner: false, isWritable: true },
40
+ { pubkey: bountyMint, isSigner: false, isWritable: false },
41
+ { pubkey: keeperBountyAta, isSigner: false, isWritable: true },
42
+ { pubkey: bountyVault, isSigner: false, isWritable: true },
43
+ { pubkey: bountyVaultAta, isSigner: false, isWritable: true },
44
+ { pubkey: globalConfig, isSigner: false, isWritable: false },
45
+ { pubkey: SYSTEM_PROGRAM_ID, isSigner: false, isWritable: false },
46
+ { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },
47
+ { pubkey: TOKEN_2022_PROGRAM_ID, isSigner: false, isWritable: false },
48
+ { pubkey: ASSOCIATED_TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },
49
+ ];
50
+
51
+ return new TransactionInstruction({
52
+ keys,
53
+ programId: BASKETS_V3_PROGRAM_ID,
54
+ data,
55
+ });
56
+ }
@@ -0,0 +1,65 @@
1
+ import { BN, Program } from '@coral-xyz/anchor';
2
+ import { SYSTEM_PROGRAM_ID } from '@coral-xyz/anchor/dist/cjs/native/system';
3
+ import { array, publicKey, struct, u16, u64, u8 } from '@coral-xyz/borsh';
4
+ import {
5
+ PublicKey, SystemProgram, SYSVAR_RENT_PUBKEY, TransactionInstruction
6
+ } from '@solana/web3.js';
7
+ import { BASKETS_V3_PROGRAM_ID } from '../../constants';
8
+ import { GlobalConfig, GlobalConfigLayout } from '../../layouts/config';
9
+ import { getGlobalConfigPda } from '../pda';
10
+
11
+
12
+ const CREATE_GLOBAL_CONFIG_DISCRIMINATOR = Buffer.from([62, 50, 47, 241, 153, 49, 252, 239]);
13
+
14
+ const EDIT_GLOBAL_CONFIG_DISCRIMINATOR = Buffer.from([209, 246, 241, 219, 204, 153, 103, 175]);
15
+
16
+
17
+
18
+ export function createGlobalConfigIx(params: {
19
+ admin: PublicKey;
20
+ }): TransactionInstruction {
21
+ const { admin } = params;
22
+
23
+ let globalConfig = getGlobalConfigPda();
24
+
25
+ const data = CREATE_GLOBAL_CONFIG_DISCRIMINATOR;
26
+
27
+ const keys = [
28
+ { pubkey: admin, isSigner: true, isWritable: true },
29
+ { pubkey: globalConfig, isSigner: false, isWritable: true },
30
+ { pubkey: SYSTEM_PROGRAM_ID, isSigner: false, isWritable: false },
31
+ { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false },
32
+ ];
33
+
34
+ return new TransactionInstruction({
35
+ keys,
36
+ programId: BASKETS_V3_PROGRAM_ID,
37
+ data,
38
+ });
39
+ }
40
+
41
+
42
+ export function editGlobalConfigIx( params: {
43
+ signer: PublicKey;
44
+ config: GlobalConfig;
45
+ }): TransactionInstruction {
46
+
47
+ const discriminator = EDIT_GLOBAL_CONFIG_DISCRIMINATOR;
48
+
49
+ let globalConfig = getGlobalConfigPda();
50
+
51
+ const buffer = Buffer.alloc(GlobalConfigLayout.span);
52
+ const len = GlobalConfigLayout.encode(params.config, buffer);
53
+ const data = Buffer.concat([discriminator, buffer.slice(0, len)]);
54
+
55
+ const keys = [
56
+ { pubkey: params.signer, isSigner: true, isWritable: true },
57
+ { pubkey: globalConfig, isSigner: false, isWritable: true },
58
+ ];
59
+
60
+ return new TransactionInstruction({
61
+ keys,
62
+ programId: BASKETS_V3_PROGRAM_ID,
63
+ data,
64
+ });
65
+ }
@@ -0,0 +1,59 @@
1
+ import {
2
+ ASSOCIATED_TOKEN_PROGRAM_ID,
3
+ TOKEN_2022_PROGRAM_ID,
4
+ TOKEN_PROGRAM_ID
5
+ } from '@solana/spl-token';
6
+ import { PublicKey, SystemProgram, TransactionInstruction } from '@solana/web3.js';
7
+ import { BASKETS_V3_PROGRAM_ID } from '../../constants';
8
+ import { getAta, getBasketFeesPda, getBasketTokenMintPda, getGlobalConfigPda } from '../pda';
9
+
10
+ const CLAIM_FEES_DISCRIMINATOR = Buffer.from([97, 50, 216, 3, 144, 118, 13, 164]);
11
+
12
+ export function claimFeesIx(params: {
13
+ claimer: PublicKey,
14
+ basket: PublicKey,
15
+ feeType: number,
16
+ managers: PublicKey[]
17
+ }): TransactionInstruction {
18
+ const { claimer, basket, feeType, managers } = params;
19
+ let basketTokenMint = getBasketTokenMintPda(basket);
20
+ let basketFeesWallet = getBasketFeesPda(basket);
21
+ let basketFeesTokenAccount = getAta(basketFeesWallet, basketTokenMint);
22
+ let globalConfig = getGlobalConfigPda();
23
+
24
+ const discriminator = CLAIM_FEES_DISCRIMINATOR;
25
+
26
+ const args = Buffer.from([params.feeType]);
27
+ const data = Buffer.concat([discriminator, args]);
28
+
29
+ const keys = [
30
+ { pubkey: claimer, isWritable: true, isSigner: true },
31
+ { pubkey: basket, isWritable: true, isSigner: false },
32
+ { pubkey: basketTokenMint, isWritable: false, isSigner: false },
33
+ { pubkey: basketFeesWallet, isWritable: true, isSigner: false },
34
+ { pubkey: basketFeesTokenAccount, isWritable: true, isSigner: false },
35
+ { pubkey: globalConfig, isWritable: true, isSigner: false },
36
+ { pubkey: SystemProgram.programId, isWritable: false, isSigner: false },
37
+ { pubkey: TOKEN_PROGRAM_ID, isWritable: false, isSigner: false },
38
+ { pubkey: TOKEN_2022_PROGRAM_ID, isWritable: false, isSigner: false },
39
+ { pubkey: ASSOCIATED_TOKEN_PROGRAM_ID, isWritable: false, isSigner: false }
40
+ ];
41
+
42
+ // remaining accounts
43
+ if(feeType === 0 || feeType === 1 || feeType === 2) {
44
+ const claimerATA = getAta(claimer, basketTokenMint);
45
+ keys.push({ pubkey: claimerATA, isWritable: true, isSigner: false });
46
+ }
47
+ if(feeType === 3) {
48
+ managers.forEach((managerPubkey) => {
49
+ const managerATA = getAta(managerPubkey, basketTokenMint);
50
+ keys.push({ pubkey: managerPubkey, isWritable: true, isSigner: false });
51
+ keys.push({ pubkey: managerATA, isWritable: true, isSigner: false });
52
+ });
53
+ }
54
+ return new TransactionInstruction({
55
+ keys,
56
+ programId: BASKETS_V3_PROGRAM_ID,
57
+ data,
58
+ });
59
+ }
@@ -0,0 +1,148 @@
1
+ import { BN } from '@coral-xyz/anchor';
2
+ import {
3
+ ASSOCIATED_TOKEN_PROGRAM_ID,
4
+ TOKEN_PROGRAM_ID
5
+ } from '@solana/spl-token';
6
+ import {
7
+ PublicKey, SYSVAR_RENT_PUBKEY, TransactionInstruction, SystemProgram
8
+ } from '@solana/web3.js';
9
+
10
+ import {
11
+ ADDRESS_LOOKUP_TABLE_PROGRAM_ID,
12
+ BASKETS_V3_PROGRAM_ID,
13
+ METADATA_PROGRAM_ID,
14
+ PYTH_SOL_ACCOUNT,
15
+ PYTH_USDC_ACCOUNT,
16
+ USDC_MINT,
17
+ WSOL_MINT
18
+ } from '../../constants';
19
+ import { Fraction } from '../../layouts/fraction';
20
+ import { getAta, getBasketTokenMintPda, getLookupTableAccount, getLookupTableInfoAccount, getMetadataAccount, getRandomSeed, getRentPayerPda, serializeString } from '../pda';
21
+ import { HostFees, HostFeesLayout, MetadataParams } from '../../layouts/intents/intent';
22
+
23
+
24
+ const CREATE_BASKET_STATE_ACCOUNT_DISCRIMINATOR = Buffer.from([119, 105, 241, 40, 193, 2, 32, 12]);
25
+ const RESIZE_BASKET_STATE_DISCRIMINATOR = Uint8Array.from([103, 216, 111, 212, 45, 172, 125, 84]);
26
+ const CREATE_BASKET_DISCRIMINATOR = Buffer.from([175, 138, 181, 18, 46, 58, 146, 159]);
27
+
28
+
29
+ export function createBasketStateAccountIx(params: {
30
+ creator: PublicKey;
31
+ seed: number[];
32
+ basket: PublicKey;
33
+ }): TransactionInstruction {
34
+
35
+ let { creator, seed, basket } = params;
36
+ let rentPayerPda = getRentPayerPda();
37
+
38
+ const data = Buffer.concat([
39
+ CREATE_BASKET_STATE_ACCOUNT_DISCRIMINATOR,
40
+ Buffer.from(seed),
41
+ ]);
42
+
43
+ const keys = [
44
+ { pubkey: creator, isSigner: true, isWritable: true },
45
+ { pubkey: basket, isSigner: false, isWritable: true },
46
+ { pubkey: rentPayerPda, isSigner: false, isWritable: true },
47
+ { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false },
48
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
49
+ ];
50
+
51
+ return new TransactionInstruction({
52
+ keys,
53
+ programId: BASKETS_V3_PROGRAM_ID,
54
+ data,
55
+ });
56
+ }
57
+
58
+ export function resizeBasketStateIx(params: {
59
+ basket: PublicKey;
60
+ }): TransactionInstruction {
61
+ let { basket } = params;
62
+ const data = Buffer.concat([
63
+ RESIZE_BASKET_STATE_DISCRIMINATOR,
64
+ ]);
65
+
66
+ const keys = [
67
+ { pubkey: basket, isSigner: false, isWritable: true },
68
+ ];
69
+
70
+ return new TransactionInstruction({
71
+ keys,
72
+ programId: BASKETS_V3_PROGRAM_ID,
73
+ data,
74
+ });
75
+ }
76
+
77
+ export function createBasketIx(params: {
78
+ basket: PublicKey,
79
+ seed: number[],
80
+ slot: number,
81
+ creator: PublicKey,
82
+ host: PublicKey,
83
+ startPrice: Fraction,
84
+ hostFees: HostFees, // [u16; 3]
85
+ metadataParams: MetadataParams,
86
+ metadataModificationDelay: number
87
+ }): TransactionInstruction {
88
+ let { basket, seed, slot, creator, host, startPrice, hostFees, metadataParams, metadataModificationDelay } = params;
89
+
90
+ let basketTokenMintPda = getBasketTokenMintPda(basket);
91
+ let metadataAccount = getMetadataAccount(basketTokenMintPda);
92
+
93
+ let lookupTable0 = getLookupTableAccount(basket, slot);
94
+ let lookupTable1 = getLookupTableAccount(basket, slot - 1);
95
+
96
+ let lookupTableInfo0 = getLookupTableInfoAccount(lookupTable0);
97
+ let lookupTableInfo1 = getLookupTableInfoAccount(lookupTable1);
98
+
99
+ let wsolBasketTokenAccount = getAta(basket, WSOL_MINT);
100
+ let usdcBasketTokenAccount = getAta(basket, USDC_MINT);
101
+
102
+
103
+ const hostFeesBuffer = Buffer.alloc(HostFeesLayout.span);
104
+ HostFeesLayout.encode(hostFees, hostFeesBuffer);
105
+
106
+ const data = Buffer.concat([
107
+ CREATE_BASKET_DISCRIMINATOR,
108
+ Buffer.from(seed),
109
+ Buffer.from(new BN(slot).toArray("le", 8)),
110
+ host.toBuffer(),
111
+ Buffer.from(startPrice.numerator.toArray("le", 8)),
112
+ Buffer.from(startPrice.exponent.toArray("le", 8)),
113
+ hostFeesBuffer,
114
+ serializeString(metadataParams.name),
115
+ serializeString(metadataParams.symbol),
116
+ serializeString(metadataParams.uri),
117
+ Buffer.from(new BN(metadataModificationDelay).toArray("le", 8)),
118
+ ]);
119
+
120
+ const keys = [
121
+ { pubkey: creator, isSigner: true, isWritable: true },
122
+ { pubkey: basket, isSigner: false, isWritable: true },
123
+ { pubkey: basketTokenMintPda, isSigner: false, isWritable: true },
124
+ { pubkey: metadataAccount, isSigner: false, isWritable: true },
125
+ { pubkey: lookupTable0, isSigner: false, isWritable: true },
126
+ { pubkey: lookupTable1, isSigner: false, isWritable: true },
127
+ { pubkey: lookupTableInfo0, isSigner: false, isWritable: true },
128
+ { pubkey: lookupTableInfo1, isSigner: false, isWritable: true },
129
+ { pubkey: wsolBasketTokenAccount, isSigner: false, isWritable: true },
130
+ { pubkey: WSOL_MINT, isSigner: false, isWritable: true },
131
+ { pubkey: PYTH_SOL_ACCOUNT, isSigner: false, isWritable: true },
132
+ { pubkey: usdcBasketTokenAccount, isSigner: false, isWritable: true },
133
+ { pubkey: USDC_MINT, isSigner: false, isWritable: true },
134
+ { pubkey: PYTH_USDC_ACCOUNT, isSigner: false, isWritable: true },
135
+ { pubkey: ADDRESS_LOOKUP_TABLE_PROGRAM_ID, isSigner: false, isWritable: false },
136
+ { pubkey: METADATA_PROGRAM_ID, isSigner: false, isWritable: false },
137
+ { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false },
138
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
139
+ { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },
140
+ { pubkey: ASSOCIATED_TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },
141
+ ];
142
+
143
+ return new TransactionInstruction({
144
+ keys,
145
+ programId: BASKETS_V3_PROGRAM_ID,
146
+ data,
147
+ });
148
+ }
@@ -0,0 +1,255 @@
1
+ import { PublicKey } from "@solana/web3.js";
2
+ import { AddTokenDelay, AddTokenDelayLayout, AuthorityBitmasks, AuthorityBitmasksLayout, EditData, ManagerSettingsWithAuthorityBitmasks, ManagerSettingsWithAuthorityBitmasksLayout, MetadataParams, MetadataParamsLayout, TaskType, UpdateWeights, UpdateWeightsDelay, UpdateWeightsDelayLayout, UpdateWeightsLayout } from "../../layouts/intents/intent";
3
+ import { TransactionInstruction } from "@solana/web3.js";
4
+ import { BASKETS_V3_PROGRAM_ID } from "../../constants";
5
+ import { getAta, getBountyVaultPda, getGlobalConfigPda, getIntentPda, getMetadataAccount, METADATA_PROGRAM_ID, serializeString } from "../pda";
6
+ import { ASSOCIATED_TOKEN_PROGRAM_ID, getAssociatedTokenAddressSync, TOKEN_2022_PROGRAM_ID, TOKEN_PROGRAM_ID } from "@solana/spl-token";
7
+ import { SYSTEM_PROGRAM_ID } from "@coral-xyz/anchor/dist/cjs/native/system";
8
+ import { AutomationSettings, AutomationSettingsLayout, FeeSettings, FeeSettingsLayout, LpSettings, LpSettingsLayout, ManagerSettings, ManagerSettingsLayout, MetadataSettings, MetadataSettingsLayout, ScheduleSettings, ScheduleSettingsLayout } from "../../layouts/config";
9
+ import { BN } from "@coral-xyz/anchor";
10
+
11
+ const EDIT_PRIVATE_BASKET_SETTINGS_DISCRIMINATOR = Buffer.from([202,54,138,17,3,104,128,229]);
12
+ const CREATE_EDIT_BASKET_INTENT_DISCRIMINATOR = Buffer.from([82, 150, 58, 227, 153, 129, 20, 30]);
13
+ const EDIT_BASKET_DISCRIMINATOR = Buffer.from([156, 31, 4, 39, 248, 29, 55, 220]);
14
+
15
+ export function editPrivateBasketSettingsIx(
16
+ params: {
17
+ creator: PublicKey,
18
+ basket: PublicKey,
19
+ basketType: number,
20
+ scheduleBytes: ScheduleSettings,
21
+ feeSettingsBytes: FeeSettings,
22
+ managerSettingsBytes: ManagerSettings,
23
+ automationSettingsBytes: AutomationSettings,
24
+ lpSettingsBytes: LpSettings,
25
+ authorityBitmasks: AuthorityBitmasks,
26
+ metadataParams: MetadataParams,
27
+ metadataModificationDelay: number,
28
+ }): TransactionInstruction {
29
+
30
+ let metadataAccount = getMetadataAccount(params.basket);
31
+ let globalConfig = getGlobalConfigPda();
32
+
33
+ const scheduleSettingsBuffer = Buffer.alloc(ScheduleSettingsLayout.span);
34
+ const scheduleBytesLen = ScheduleSettingsLayout.encode(params.scheduleBytes, scheduleSettingsBuffer);
35
+ const feeSettingsBuffer = Buffer.alloc(FeeSettingsLayout.span);
36
+ const feeSettingsBytesLen = FeeSettingsLayout.encode(params.feeSettingsBytes, feeSettingsBuffer);
37
+ const managerSettingsBuffer = Buffer.alloc(ManagerSettingsLayout.span);
38
+ const managerSettingsBytesLen = ManagerSettingsLayout.encode(params.managerSettingsBytes, managerSettingsBuffer);
39
+ const automationSettingsBuffer = Buffer.alloc(AutomationSettingsLayout.span);
40
+ const automationSettingsBytesLen = AutomationSettingsLayout.encode(params.automationSettingsBytes, automationSettingsBuffer);
41
+ const lpSettingsBuffer = Buffer.alloc(LpSettingsLayout.span);
42
+ const lpSettingsByteslen = LpSettingsLayout.encode(params.lpSettingsBytes, lpSettingsBuffer);
43
+ const authorityBitmasksBuffer = Buffer.alloc(AuthorityBitmasksLayout.span);
44
+ const authorityBitmasksBytesLen = AuthorityBitmasksLayout.encode(params.authorityBitmasks, authorityBitmasksBuffer);
45
+ const metadataParamsBuffer = Buffer.alloc(MetadataParamsLayout.span);
46
+ const metadataParamsBytesLen = MetadataParamsLayout.encode(params.metadataParams, metadataParamsBuffer);
47
+
48
+ const data = Buffer.concat([
49
+ EDIT_PRIVATE_BASKET_SETTINGS_DISCRIMINATOR,
50
+ Buffer.from([params.basketType]),
51
+ scheduleSettingsBuffer,
52
+ feeSettingsBuffer,
53
+ managerSettingsBuffer,
54
+ automationSettingsBuffer,
55
+ lpSettingsBuffer,
56
+ authorityBitmasksBuffer,
57
+ serializeString(params.metadataParams.name),
58
+ serializeString(params.metadataParams.symbol),
59
+ serializeString(params.metadataParams.uri),
60
+ Buffer.from(new BN(params.metadataModificationDelay).toArray("le", 8)),
61
+ ]);
62
+
63
+ const keys = [
64
+ { pubkey: params.creator, isSigner: true, isWritable: true },
65
+ { pubkey: params.basket, isSigner: false, isWritable: true },
66
+ { pubkey: metadataAccount, isSigner: false, isWritable: true },
67
+ { pubkey: globalConfig, isSigner: false, isWritable: false },
68
+ { pubkey: METADATA_PROGRAM_ID, isSigner: false, isWritable: false }
69
+ ];
70
+
71
+ return new TransactionInstruction({
72
+ keys,
73
+ programId: BASKETS_V3_PROGRAM_ID,
74
+ data
75
+ });
76
+ }
77
+
78
+
79
+
80
+ export function createEditBasketIntentIx(params: {
81
+ manager: PublicKey;
82
+ basket: PublicKey;
83
+ bountyMint: PublicKey;
84
+ editType: TaskType; // u8
85
+ editData: EditData; // 260 bytes
86
+ useBounty: number; // u8
87
+ }): TransactionInstruction {
88
+ const {
89
+ manager,
90
+ basket,
91
+ bountyMint,
92
+ editType,
93
+ editData,
94
+ useBounty,
95
+ } = params;
96
+
97
+ let intent = getIntentPda(basket, manager, editType);
98
+ let globalConfig = getGlobalConfigPda();
99
+ let bountyVault = getBountyVaultPda();
100
+
101
+ let managerBountyATA = getAta(manager, bountyMint);
102
+ let bountyVaultATA = getAta(bountyVault, bountyMint);
103
+
104
+ const editTypeBuf = Buffer.from([editType]);
105
+
106
+ const editDataBuf = Buffer.alloc(260);
107
+ switch (editType) {
108
+ case TaskType.EditSchedule: // 1
109
+ ScheduleSettingsLayout.encode(editData as ScheduleSettings, editDataBuf);
110
+ break;
111
+ case TaskType.EditFeeSettings: // 2
112
+ FeeSettingsLayout.encode(editData as FeeSettings, editDataBuf);
113
+ break;
114
+ case TaskType.EditManagerSettings: // 3
115
+ // TODO: ?????
116
+ ManagerSettingsWithAuthorityBitmasksLayout.encode(editData as ManagerSettingsWithAuthorityBitmasks, editDataBuf)
117
+ (editData as ManagerSettingsWithAuthorityBitmasks).managers.forEach((managerPubkey: PublicKey) => {
118
+ keys.push({ pubkey: managerPubkey, isWritable: true, isSigner: false });
119
+ });
120
+ break;
121
+ case TaskType.EditAutomationSettings: // 4
122
+ AutomationSettingsLayout.encode(editData as AutomationSettings, editDataBuf);
123
+ break;
124
+ case TaskType.EditLpSettings: // 5
125
+ LpSettingsLayout.encode(editData as LpSettings, editDataBuf);
126
+ break;
127
+ case TaskType.EditMetadataSettings: // 6
128
+ MetadataSettingsLayout.encode(editData as MetadataSettings, editDataBuf);
129
+ break;
130
+ case TaskType.EditAddTokenDelay: // 7
131
+ AddTokenDelayLayout.encode(editData as AddTokenDelay, editDataBuf);
132
+ break;
133
+ case TaskType.EditUpdateWeightsDelay: // 8
134
+ UpdateWeightsDelayLayout.encode(editData as UpdateWeightsDelay, editDataBuf);
135
+ break;
136
+ // case TaskType.AddToken: // 9
137
+ // AddTokenLayout.encode(editData as AddToken, editDataBuf);
138
+ // keys.push({pubkey: (editData as AddToken).tokenMint, isWritable: false, isSigner: false});
139
+ // const basketNewTokenAta = getAssociatedTokenAddressSync(
140
+ // (editData as AddToken).tokenMint,
141
+ // basket,
142
+ // true
143
+ // );
144
+ // keys.push({pubkey: basketNewTokenAta, isWritable: true, isSigner: false});
145
+ // additionalAccounts.lookupTables.forEach((lookupTablePubkey) => {
146
+ // keys.push({ pubkey: lookupTablePubkey, isWritable: true, isSigner: false });
147
+ // });
148
+ // additionalAccounts.additionalOracleAccounts.forEach((oraclePubkey) => {
149
+ // keys.push({ pubkey: oraclePubkey, isWritable: false, isSigner: false });
150
+ // });
151
+ // break;
152
+ case TaskType.UpdateWeights: // 10
153
+ UpdateWeightsLayout.encode(editData as UpdateWeights, editDataBuf);
154
+ break;
155
+ case TaskType.Swap: // 11
156
+ break;
157
+ default:
158
+ break;
159
+ }
160
+
161
+ const useBountyBuf = Buffer.from([useBounty]);
162
+
163
+ const data = Buffer.concat([
164
+ CREATE_EDIT_BASKET_INTENT_DISCRIMINATOR,
165
+ editTypeBuf,
166
+ editDataBuf,
167
+ useBountyBuf,
168
+ ]);
169
+
170
+
171
+ const keys = [
172
+ { pubkey: manager, isSigner: true, isWritable: true },
173
+ { pubkey: basket, isSigner: false, isWritable: true },
174
+ { pubkey: intent, isSigner: false, isWritable: true },
175
+ { pubkey: globalConfig, isSigner: false, isWritable: false },
176
+ { pubkey: bountyMint, isSigner: false, isWritable: false },
177
+ { pubkey: managerBountyATA, isSigner: false, isWritable: true },
178
+ { pubkey: bountyVault, isSigner: false, isWritable: true },
179
+ { pubkey: bountyVaultATA, isSigner: false, isWritable: true },
180
+ { pubkey: SYSTEM_PROGRAM_ID, isSigner: false, isWritable: false },
181
+ { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },
182
+ { pubkey: TOKEN_2022_PROGRAM_ID, isSigner: false, isWritable: false },
183
+ { pubkey: ASSOCIATED_TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },
184
+ ];
185
+
186
+ return new TransactionInstruction({
187
+ keys,
188
+ programId: BASKETS_V3_PROGRAM_ID,
189
+ data,
190
+ });
191
+ }
192
+
193
+
194
+
195
+ export function editBasketIx(params: {
196
+ keeper: PublicKey,
197
+ basket: PublicKey,
198
+ intent: PublicKey,
199
+ bountyMint: PublicKey,
200
+ manager: PublicKey,
201
+ editType: TaskType,
202
+ metadataAccount: PublicKey,
203
+ }): TransactionInstruction {
204
+ const {
205
+ keeper,
206
+ basket,
207
+ intent,
208
+ bountyMint,
209
+ manager
210
+ } = params;
211
+
212
+ let globalConfig = getGlobalConfigPda();
213
+ let bountyVault = getBountyVaultPda();
214
+ let keeperBountyATA = getAta(keeper, bountyMint);
215
+ let managerBountyATA = getAta(manager, bountyMint);
216
+ let bountyVaultATA = getAta(bountyVault, bountyMint);
217
+
218
+ // discriminator
219
+ const data = EDIT_BASKET_DISCRIMINATOR;
220
+
221
+ // accounts
222
+ const keys = [
223
+ { pubkey: keeper, isSigner: true, isWritable: true },
224
+ { pubkey: basket, isSigner: false, isWritable: true },
225
+ { pubkey: intent, isSigner: false, isWritable: true },
226
+ { pubkey: globalConfig, isSigner: false, isWritable: true },
227
+ { pubkey: bountyMint, isSigner: false, isWritable: false },
228
+ { pubkey: keeperBountyATA, isSigner: false, isWritable: true },
229
+ { pubkey: manager, isSigner: false, isWritable: true },
230
+ { pubkey: managerBountyATA, isSigner: false, isWritable: true },
231
+ { pubkey: bountyVault, isSigner: false, isWritable: true },
232
+ { pubkey: bountyVaultATA, isSigner: false, isWritable: true },
233
+ { pubkey: SYSTEM_PROGRAM_ID, isSigner: false, isWritable: false },
234
+ { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },
235
+ { pubkey: TOKEN_2022_PROGRAM_ID, isSigner: false, isWritable: false },
236
+ { pubkey: ASSOCIATED_TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },
237
+ ];
238
+ // remaining accounts
239
+ if(params.editType === TaskType.EditMetadataSettings){
240
+ keys.push({ pubkey: params.basket, isSigner: true, isWritable: false });
241
+ keys.push({ pubkey: params.metadataAccount, isSigner: false, isWritable: true });
242
+ keys.push({ pubkey: METADATA_PROGRAM_ID, isSigner: false, isWritable: false });
243
+ };
244
+ // if(params.editType === TaskType.AddToken){
245
+ // params.lookupTables.forEach((lookupTablePubkey) => {
246
+ // keys.push({ pubkey: lookupTablePubkey, isWritable: false, isSigner: false });
247
+ // });
248
+ // };
249
+
250
+ return new TransactionInstruction({
251
+ keys,
252
+ programId: BASKETS_V3_PROGRAM_ID,
253
+ data,
254
+ });
255
+ }