@symmetry-hq/sdk 1.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 (121) hide show
  1. package/dist/src/constants.d.ts +23 -0
  2. package/dist/src/constants.js +38 -0
  3. package/dist/src/index.d.ts +804 -0
  4. package/dist/src/index.js +2097 -0
  5. package/dist/src/instructions/automation/auction.d.ts +6 -0
  6. package/dist/src/instructions/automation/auction.js +40 -0
  7. package/dist/src/instructions/automation/claimBounty.d.ts +12 -0
  8. package/dist/src/instructions/automation/claimBounty.js +44 -0
  9. package/dist/src/instructions/automation/flashSwap.d.ts +21 -0
  10. package/dist/src/instructions/automation/flashSwap.js +74 -0
  11. package/dist/src/instructions/automation/priceUpdate.d.ts +19 -0
  12. package/dist/src/instructions/automation/priceUpdate.js +89 -0
  13. package/dist/src/instructions/automation/rebalanceIntent.d.ts +32 -0
  14. package/dist/src/instructions/automation/rebalanceIntent.js +117 -0
  15. package/dist/src/instructions/automation/rebalanceSwap.d.ts +11 -0
  16. package/dist/src/instructions/automation/rebalanceSwap.js +42 -0
  17. package/dist/src/instructions/management/addBounty.d.ts +7 -0
  18. package/dist/src/instructions/management/addBounty.js +41 -0
  19. package/dist/src/instructions/management/admin.d.ts +9 -0
  20. package/dist/src/instructions/management/admin.js +53 -0
  21. package/dist/src/instructions/management/claimFees.d.ts +15 -0
  22. package/dist/src/instructions/management/claimFees.js +95 -0
  23. package/dist/src/instructions/management/createBasket.d.ts +21 -0
  24. package/dist/src/instructions/management/createBasket.js +98 -0
  25. package/dist/src/instructions/management/edit.d.ts +51 -0
  26. package/dist/src/instructions/management/edit.js +477 -0
  27. package/dist/src/instructions/management/luts.d.ts +30 -0
  28. package/dist/src/instructions/management/luts.js +99 -0
  29. package/dist/src/instructions/pda.d.ts +25 -0
  30. package/dist/src/instructions/pda.js +128 -0
  31. package/dist/src/instructions/user/deposit.d.ts +20 -0
  32. package/dist/src/instructions/user/deposit.js +100 -0
  33. package/dist/src/instructions/user/withdraw.d.ts +8 -0
  34. package/dist/src/instructions/user/withdraw.js +36 -0
  35. package/dist/src/jup.d.ts +49 -0
  36. package/dist/src/jup.js +80 -0
  37. package/dist/src/keeperMonitor.d.ts +52 -0
  38. package/dist/src/keeperMonitor.js +624 -0
  39. package/dist/src/layouts/basket.d.ts +191 -0
  40. package/dist/src/layouts/basket.js +51 -0
  41. package/dist/src/layouts/config.d.ts +281 -0
  42. package/dist/src/layouts/config.js +237 -0
  43. package/dist/src/layouts/fraction.d.ts +20 -0
  44. package/dist/src/layouts/fraction.js +164 -0
  45. package/dist/src/layouts/intents/bounty.d.ts +18 -0
  46. package/dist/src/layouts/intents/bounty.js +19 -0
  47. package/dist/src/layouts/intents/intent.d.ts +209 -0
  48. package/dist/src/layouts/intents/intent.js +97 -0
  49. package/dist/src/layouts/intents/rebalanceIntent.d.ts +212 -0
  50. package/dist/src/layouts/intents/rebalanceIntent.js +94 -0
  51. package/dist/src/layouts/lookupTable.d.ts +7 -0
  52. package/dist/src/layouts/lookupTable.js +10 -0
  53. package/dist/src/layouts/oracle.d.ts +63 -0
  54. package/dist/src/layouts/oracle.js +96 -0
  55. package/dist/src/states/basket.d.ts +14 -0
  56. package/dist/src/states/basket.js +479 -0
  57. package/dist/src/states/config.d.ts +3 -0
  58. package/dist/src/states/config.js +71 -0
  59. package/dist/src/states/intents/intent.d.ts +10 -0
  60. package/dist/src/states/intents/intent.js +316 -0
  61. package/dist/src/states/intents/rebalanceIntent.d.ts +42 -0
  62. package/dist/src/states/intents/rebalanceIntent.js +680 -0
  63. package/dist/src/states/oracles/constants.d.ts +9 -0
  64. package/dist/src/states/oracles/constants.js +15 -0
  65. package/dist/src/states/oracles/oracle.d.ts +24 -0
  66. package/dist/src/states/oracles/oracle.js +168 -0
  67. package/dist/src/states/oracles/pythOracle.d.ts +132 -0
  68. package/dist/src/states/oracles/pythOracle.js +609 -0
  69. package/dist/src/states/oracles/raydiumClmmOracle.d.ts +184 -0
  70. package/dist/src/states/oracles/raydiumClmmOracle.js +843 -0
  71. package/dist/src/states/oracles/raydiumCpmmOracle.d.ts +120 -0
  72. package/dist/src/states/oracles/raydiumCpmmOracle.js +540 -0
  73. package/dist/src/states/oracles/switchboardOracle.d.ts +0 -0
  74. package/dist/src/states/oracles/switchboardOracle.js +1 -0
  75. package/dist/src/states/withdrawBasketFees.d.ts +10 -0
  76. package/dist/src/states/withdrawBasketFees.js +154 -0
  77. package/dist/src/txUtils.d.ts +65 -0
  78. package/dist/src/txUtils.js +306 -0
  79. package/dist/test.d.ts +1 -0
  80. package/dist/test.js +561 -0
  81. package/package.json +31 -0
  82. package/src/constants.ts +40 -0
  83. package/src/index.ts +2431 -0
  84. package/src/instructions/automation/auction.ts +55 -0
  85. package/src/instructions/automation/claimBounty.ts +69 -0
  86. package/src/instructions/automation/flashSwap.ts +104 -0
  87. package/src/instructions/automation/priceUpdate.ts +117 -0
  88. package/src/instructions/automation/rebalanceIntent.ts +181 -0
  89. package/src/instructions/management/addBounty.ts +55 -0
  90. package/src/instructions/management/admin.ts +72 -0
  91. package/src/instructions/management/claimFees.ts +129 -0
  92. package/src/instructions/management/createBasket.ts +138 -0
  93. package/src/instructions/management/edit.ts +602 -0
  94. package/src/instructions/management/luts.ts +157 -0
  95. package/src/instructions/pda.ts +151 -0
  96. package/src/instructions/user/deposit.ts +143 -0
  97. package/src/instructions/user/withdraw.ts +53 -0
  98. package/src/jup.ts +113 -0
  99. package/src/keeperMonitor.ts +585 -0
  100. package/src/layouts/basket.ts +233 -0
  101. package/src/layouts/config.ts +576 -0
  102. package/src/layouts/fraction.ts +164 -0
  103. package/src/layouts/intents/bounty.ts +35 -0
  104. package/src/layouts/intents/intent.ts +324 -0
  105. package/src/layouts/intents/rebalanceIntent.ts +306 -0
  106. package/src/layouts/lookupTable.ts +14 -0
  107. package/src/layouts/oracle.ts +157 -0
  108. package/src/states/basket.ts +527 -0
  109. package/src/states/config.ts +62 -0
  110. package/src/states/intents/intent.ts +311 -0
  111. package/src/states/intents/rebalanceIntent.ts +751 -0
  112. package/src/states/oracles/constants.ts +13 -0
  113. package/src/states/oracles/oracle.ts +212 -0
  114. package/src/states/oracles/pythOracle.ts +874 -0
  115. package/src/states/oracles/raydiumClmmOracle.ts +1193 -0
  116. package/src/states/oracles/raydiumCpmmOracle.ts +784 -0
  117. package/src/states/oracles/switchboardOracle.ts +0 -0
  118. package/src/states/withdrawBasketFees.ts +160 -0
  119. package/src/txUtils.ts +424 -0
  120. package/test.ts +609 -0
  121. package/tsconfig.json +101 -0
package/test.ts ADDED
@@ -0,0 +1,609 @@
1
+ import { Connection, Keypair, PublicKey } from "@solana/web3.js";
2
+ import { BN, Wallet } from "@coral-xyz/anchor";
3
+ import { bs58 } from "@coral-xyz/anchor/dist/cjs/utils/bytes";
4
+ import { Basket, Intent, RebalanceIntent, SymmetryCore, TaskContext, KeeperMonitor } from "./src";
5
+ import { AddOrEditTokenInput, UpdateWeightsInput, MakeDirectSwapInput } from "./src";
6
+ import { EditCreatorSettings, EditManagerSettings, EditFeeSettings, EditScheduleSettings, EditAutomationSettings, EditLpSettings, EditMetadataSettings, EditDepositsSettings, EditForceRebalanceSettings, EditCustomRebalanceSettings, EditAddTokenSettings, EditUpdateWeightsSettings, EditMakeDirectSwapSettings } from "./src";
7
+ import { getRebalanceIntentPda } from "./src/instructions/pda";
8
+ import { PYTHNET_CUSTODY_PRICE_WSOL_ACCOUNT } from "./src/constants";
9
+ import { getJupTokenLedgerAndSwapInstructions } from "./src/jup";
10
+ import { getSwapPairs } from "./src/states/intents/rebalanceIntent";
11
+
12
+
13
+ let kp = Array.from(Keypair.generate().secretKey);
14
+
15
+ let jupApiKey = "";
16
+
17
+ let connection = new Connection("https://api.devnet.solana.com");
18
+
19
+ async function testStates() {
20
+ return;
21
+ let wallet = new Wallet(Keypair.fromSecretKey(new Uint8Array(kp)));
22
+ console.log(wallet.publicKey.toBase58());
23
+
24
+ let sdk = new SymmetryCore({
25
+ connection: connection,
26
+ network: "mainnet",
27
+ priorityFee: 5237,
28
+ });
29
+ // while (true) {
30
+ // try {
31
+ // let keeperMonitor = new KeeperMonitor({
32
+ // wallet: wallet,
33
+ // connection: connection,
34
+ // network: "mainnet",
35
+ // jupiterApiKey: jupApiKey,
36
+ // maxAllowedAccounts: 40,
37
+ // simulateTransactions: false,
38
+ // priorityFee: 5237,
39
+ // });
40
+ // await keeperMonitor.run();
41
+ // } catch (e) { }
42
+ // }
43
+
44
+ console.log("SDK created:", wallet.publicKey.toBase58());
45
+ console.log("Total baskets: ", (await sdk.fetchAllBaskets()).length);
46
+ console.log("Total intents: ", (await sdk.fetchAllIntents()).length);
47
+ console.log("Total rebalance intents: ", (await sdk.fetchAllRebalanceIntents()).length);
48
+ console.log("Total withdraw basket fees: ", (await sdk.fetchAllWithdrawBasketFees()).length);
49
+
50
+ let basket = await sdk.fetchBasket("GrBFFvtdRL25o7gcRnV1kGvz1Qc7iscUmDp1ZvyBSyUa");
51
+ basket = await sdk.loadBasketPrice(basket);
52
+ // let ri =(await sdk.fetchAllRebalanceIntents())[0];
53
+ // ri = await sdk.fetchRebalanceIntent(ri.formatted_data.pubkey);
54
+ // console.log(ri.deposit_data);
55
+ // console.log(ri.price_updates_data);
56
+ // console.log(ri.auction_data);
57
+ // console.log(ri.mint_data);
58
+ // console.log(ri.redeem_data);
59
+ // console.log(ri.claim_bounty_data);
60
+ // console.log(ri);
61
+ // console.log(basket.formatted);
62
+ // console.log(basket.composition[0].mint.toBase58(), "amount:", basket.composition[0].amount.toString(), "price:", basket.composition[0].price?.price, "value:", basket.composition[0].value);
63
+ // console.log(basket.composition[1].mint.toBase58(), "amount:", basket.composition[1].amount.toString(), "price:", basket.composition[1].price?.price, "value:", basket.composition[1].value);
64
+ // console.log(basket.composition[2].mint.toBase58(), "amount:", basket.composition[2].amount.toString(), "price:", basket.composition[2].price?.price, "value:", basket.composition[2].value);
65
+ // return;
66
+
67
+ let tests = {
68
+
69
+ createGlobalConfig: false, // TESTED
70
+ editGlobalConfig: false, // TESTED
71
+
72
+ createBasket: false, // TESTED
73
+ editPrivateBasketSettings: false, // NOT TESTED
74
+ addBounty: false, // TESTED
75
+
76
+ editCreator: false, // TESTED
77
+ editManagerSettings: false, // TESTED
78
+ editFeeSettings: false, // TESTED
79
+ editScheduleSettings: false, // TESTED
80
+ editAutomationSettings: false, // TESTED
81
+ editLpSettings: false, // TESTED
82
+ editMetadata: false, // TESTED
83
+ editDepositsSettings: false, // TESTED
84
+ editForceRebalanceSettings: false, // TESTED
85
+ editCustomRebalanceSettings: false, // TESTED
86
+ editAddTokenDelay: false, // NOT TESTED
87
+ editUpdateWeightsDelay: false, // NOT TESTED
88
+ editMakeDirectSwapDelay: false, // NOT TESTED
89
+
90
+ addOrEditToken: false, // TESTED
91
+ updateWeights: false, // NOT TESTED
92
+ makeDirectSwap: false, // NOT TESTED
93
+
94
+ executeIntent: false, // TESTED
95
+
96
+ buyBasket: false, // TESTED
97
+ depositTokens: false, // TESTED
98
+ lockDeposits: false, // TESTED
99
+
100
+ sellBasket: false, // TESTED
101
+
102
+ rebalanceBasket: false, // TESTED
103
+ rebalanceBasketCustom: false, // NOT TESTED
104
+
105
+ updateTokenPrices: false, // TESTED
106
+ updateTokenPricesCustom: false, // NOT TESTED
107
+
108
+ rebalanceSwapAll: false, // TESTED
109
+ rebalanceSwap: false, // TESTED
110
+
111
+ mintBasket: false, // TESTED
112
+
113
+ redeemTokens: false, // TESTED
114
+ claimBounty: false, // TESTED
115
+
116
+ withdrawBasketFees: false, // NOT TESTED
117
+ claimTokenFeesFromBasket: false, // NOT TESTED
118
+ }
119
+
120
+ if (tests.createBasket) {
121
+ let createBasketTx = await sdk.createBasketTx({
122
+ creator: wallet.publicKey.toBase58(),
123
+ start_price: "1",
124
+ name: "Test Basket",
125
+ symbol: "TBC",
126
+ metadata_uri: "https://test.com",
127
+ });
128
+ console.log(createBasketTx.batches[0].transactions[0]);
129
+ return;
130
+ let resCreateBasket = await sdk.signAndSendTxPayloadBatchSequence({
131
+ txPayloadBatchSequence: createBasketTx,
132
+ wallet,
133
+ });
134
+ console.log(resCreateBasket);
135
+ }
136
+
137
+ if (tests.addBounty) {
138
+ let tx = await sdk.addBountyTx({
139
+ keeper: wallet.publicKey.toBase58(),
140
+ basket: basket.ownAddress.toBase58(),
141
+ amount: 250 * 10 ** 6,
142
+ });
143
+ let res = await sdk.signAndSendTxPayloadBatchSequence({txPayloadBatchSequence: tx, wallet});
144
+ console.log(res);
145
+ }
146
+
147
+ let task_context: TaskContext = {
148
+ basket: basket.ownAddress.toBase58(),
149
+ manager: wallet.publicKey.toBase58(),
150
+ }
151
+
152
+ if (tests.editCreator) {
153
+ let creator_settings: EditCreatorSettings = {
154
+ creator: wallet.publicKey.toBase58(),
155
+ }
156
+ let tx = await sdk.editCreatorTx(task_context, creator_settings);
157
+ let res = await sdk.signAndSendTxPayloadBatchSequence({txPayloadBatchSequence: tx, wallet});
158
+ console.log(res);
159
+ }
160
+
161
+ if (tests.editManagerSettings) {
162
+ let manager_settings: EditManagerSettings = {
163
+ managers: [
164
+ {
165
+ pubkey: wallet.publicKey.toBase58(),
166
+ fee_split_weight_bps: 5000,
167
+ authorities: {
168
+ managers: true, fees: true, schedule: true, automation: true, lp: true, metadata: true, deposits: true, force_rebalance: true, custom_rebalance: true, add_token: true, update_weights: true, make_direct_swap: true,
169
+ },
170
+ },
171
+ {
172
+ pubkey: "UserevMsvU5K9u6iW7DT9XJVyVLpmfDCEAfXixBbE7R",
173
+ fee_split_weight_bps: 5000,
174
+ authorities: {
175
+ managers: true, fees: true, schedule: true, automation: true, lp: true, metadata: true, deposits: true, force_rebalance: true, custom_rebalance: true, add_token: true, update_weights: true, make_direct_swap: true,
176
+ },
177
+ },
178
+ ],
179
+ modification_delay: 0,
180
+ };
181
+ let tx = await sdk.editManagersTx(task_context, manager_settings);
182
+ let res = await sdk.signAndSendTxPayloadBatchSequence({txPayloadBatchSequence: tx, wallet});
183
+ console.log(res);
184
+ }
185
+
186
+ if (tests.editFeeSettings) {
187
+ let fee_settings: EditFeeSettings = {
188
+ creator_deposit_fee_bps: 100,
189
+ creator_withdraw_fee_bps: 100,
190
+ creator_management_fee_bps: 0,
191
+ creator_performance_fee_bps: 0,
192
+ managers_deposit_fee_bps: 100,
193
+ managers_withdraw_fee_bps: 100,
194
+ managers_management_fee_bps: 0,
195
+ managers_performance_fee_bps: 0,
196
+ basket_deposit_fee_bps: 100,
197
+ basket_withdraw_fee_bps: 100,
198
+ modification_delay: 0,
199
+ };
200
+ let tx = await sdk.editFeesTx({ ...task_context, activation_timestamp: Date.now() / 1000 + 10 }, fee_settings);
201
+ let res = await sdk.signAndSendTxPayloadBatchSequence({txPayloadBatchSequence: tx, wallet});
202
+ console.log(res);
203
+ }
204
+
205
+ if (tests.editScheduleSettings) {
206
+ let schedule_settings: EditScheduleSettings ={
207
+ cycle_start_time: 0,
208
+ cycle_duration: 86400,
209
+ deposits_start: 0,
210
+ deposits_end: 86400,
211
+ automation_start: 0,
212
+ automation_end: 86400,
213
+ management_start: 0,
214
+ management_end: 86400,
215
+ modification_delay: 0,
216
+ };
217
+ let tx = await sdk.editScheduleTx(task_context, schedule_settings);
218
+ let res = await sdk.signAndSendTxPayloadBatchSequence({txPayloadBatchSequence: tx, wallet});
219
+ console.log(res);
220
+ }
221
+
222
+ if (tests.editAutomationSettings) {
223
+ let automation_settings: EditAutomationSettings = {
224
+ enabled: true,
225
+ rebalance_slippage_threshold_bps: 100,
226
+ per_trade_rebalance_slippage_threshold_bps: 100,
227
+ rebalance_activation_threshold_abs_bps: 100,
228
+ rebalance_activation_threshold_rel_bps: 100,
229
+ rebalance_activation_cooldown: 100,
230
+ modification_delay: 0,
231
+ };
232
+ let tx = await sdk.editAutomationTx(task_context, automation_settings);
233
+ let res = await sdk.signAndSendTxPayloadBatchSequence({txPayloadBatchSequence: tx, wallet});
234
+ console.log(res);
235
+ }
236
+
237
+ if (tests.editLpSettings) {
238
+ let lp_settings: EditLpSettings = {
239
+ enabled: true,
240
+ lp_threshold_bps: 100,
241
+ modification_delay: 0,
242
+ };
243
+ let tx = await sdk.editLpTx(task_context, lp_settings);
244
+ let res = await sdk.signAndSendTxPayloadBatchSequence({txPayloadBatchSequence: tx, wallet});
245
+ console.log(res);
246
+ }
247
+
248
+ if (tests.editMetadata) {
249
+ let metadata_settings: EditMetadataSettings = {
250
+ symbol: "YSOLTEST",
251
+ name: "Solana Test",
252
+ uri: "https://raw.githubusercontent.com/symmetry-protocol/markets/8179d21e003459a615eb21e3113166b7576d8e5e/ysol-metadata.json",
253
+ modification_delay: 0,
254
+ };
255
+ let tx = await sdk.editMetadataTx(task_context, metadata_settings);
256
+ let res = await sdk.signAndSendTxPayloadBatchSequence({txPayloadBatchSequence: tx, wallet});
257
+ console.log(res);
258
+ }
259
+
260
+ if (tests.editDepositsSettings) {
261
+ let deposits_settings: EditDepositsSettings = {
262
+ enabled: true,
263
+ };
264
+ let tx = await sdk.editDepositsTx(task_context, deposits_settings);
265
+ let res = await sdk.signAndSendTxPayloadBatchSequence({txPayloadBatchSequence: tx, wallet});
266
+ console.log(res);
267
+ }
268
+
269
+ if (tests.editForceRebalanceSettings) {
270
+ let force_rebalance_settings: EditForceRebalanceSettings = {
271
+ enabled: true,
272
+ modification_delay: 0,
273
+ };
274
+ let tx = await sdk.editForceRebalanceTx(task_context, force_rebalance_settings);
275
+ let res = await sdk.signAndSendTxPayloadBatchSequence({txPayloadBatchSequence: tx, wallet});
276
+ console.log(res);
277
+ }
278
+
279
+ if (tests.editCustomRebalanceSettings) {
280
+ let custom_rebalance_settings: EditCustomRebalanceSettings = {
281
+ enabled: true,
282
+ modification_delay: 0,
283
+ };
284
+ let tx = await sdk.editCustomRebalanceTx(task_context, custom_rebalance_settings);
285
+ let res = await sdk.signAndSendTxPayloadBatchSequence({txPayloadBatchSequence: tx, wallet});
286
+ console.log(res);
287
+ }
288
+
289
+ if (tests.editAddTokenDelay) {
290
+ let add_token_delay: EditAddTokenSettings = {
291
+ modification_delay: 0,
292
+ };
293
+ let tx = await sdk.editAddTokenDelayTx(task_context, add_token_delay);
294
+ let res = await sdk.signAndSendTxPayloadBatchSequence({txPayloadBatchSequence: tx, wallet});
295
+ console.log(res);
296
+ }
297
+
298
+ if (tests.editUpdateWeightsDelay) {
299
+ let update_weights_settings: EditUpdateWeightsSettings = {
300
+ modification_delay: 0,
301
+ };
302
+ let tx = await sdk.editUpdateWeightsDelayTx(task_context, update_weights_settings);
303
+ let res = await sdk.signAndSendTxPayloadBatchSequence({txPayloadBatchSequence: tx, wallet});
304
+ console.log(res);
305
+ }
306
+
307
+ if (tests.editMakeDirectSwapDelay) {
308
+ let make_direct_swap_delay: EditMakeDirectSwapSettings = {
309
+ modification_delay: 0,
310
+ };
311
+ let tx = await sdk.editSwapDelayTx(task_context, make_direct_swap_delay);
312
+ let res = await sdk.signAndSendTxPayloadBatchSequence({txPayloadBatchSequence: tx, wallet});
313
+ console.log(res);
314
+ }
315
+
316
+ if (tests.addOrEditToken) {
317
+ let add_token: AddOrEditTokenInput = {
318
+ token_mint: "So11111111111111111111111111111111111111112",
319
+ active: true,
320
+ min_oracles_thresh: 1,
321
+ min_conf_bps: 100,
322
+ conf_thresh_bps: 200,
323
+ conf_multiplier: 1,
324
+ oracles: [
325
+ {
326
+ oracle_type: "pyth",
327
+ account_lut_id: 0,
328
+ account_lut_index: 0,
329
+ account: PYTHNET_CUSTODY_PRICE_WSOL_ACCOUNT.toBase58(),
330
+ weight: 100,
331
+ is_required: true,
332
+ conf_thresh_bps: 100,
333
+ volatility_thresh_bps: 100,
334
+ max_slippage_bps: 100,
335
+ min_liquidity: 100,
336
+ staleness_thresh: 10000,
337
+ staleness_conf_rate_bps: 100,
338
+ token_decimals: 9,
339
+ twap_seconds_ago: 100,
340
+ twap_secondary_seconds_ago: 100,
341
+ },
342
+ ],
343
+ };
344
+ let tx = await sdk.addOrEditTokenTx(task_context, add_token);
345
+ let res = await sdk.signAndSendTxPayloadBatchSequence({txPayloadBatchSequence: tx, wallet});
346
+ console.log(res);
347
+ }
348
+
349
+ if (tests.updateWeights) {
350
+ let update_weights: UpdateWeightsInput = {
351
+ token_weights: [
352
+ {
353
+ mint: "So11111111111111111111111111111111111111112",
354
+ weight_bps: 100,
355
+ },
356
+ ],
357
+ token_mints_hash: [
358
+ 0, 0, 0, 0,
359
+ ],
360
+ };
361
+ let tx = await sdk.updateWeightsTx(task_context, update_weights);
362
+ let res = await sdk.signAndSendTxPayloadBatchSequence({txPayloadBatchSequence: tx, wallet});
363
+ console.log(res);
364
+ }
365
+
366
+ if (tests.makeDirectSwap) {
367
+ let make_direct_swap: MakeDirectSwapInput = {
368
+ from_token_mint: "So11111111111111111111111111111111111111112",
369
+ to_token_mint: "So11111111111111111111111111111111111111112",
370
+ amount_from: 100,
371
+ amount_to: 100,
372
+ };
373
+ let tx = await sdk.makeDirectSwapTx(task_context, make_direct_swap);
374
+ let res = await sdk.signAndSendTxPayloadBatchSequence({txPayloadBatchSequence: tx, wallet});
375
+ console.log(res);
376
+ }
377
+
378
+ if (tests.buyBasket) {
379
+ let tx = await sdk.buyBasketTx({
380
+ buyer: wallet.publicKey.toBase58(),
381
+ basket_mint: basket.mint.toBase58(),
382
+ contributions: [
383
+ // {mint: "So11111111111111111111111111111111111111112", amount: 1000000000},
384
+ {mint: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", amount: 2000000},
385
+ ],
386
+ });
387
+ let res = await sdk.signAndSendTxPayloadBatchSequence({txPayloadBatchSequence: tx, wallet});
388
+ console.log(res);
389
+ }
390
+
391
+ if (tests.sellBasket) {
392
+ let tx = await sdk.sellBasketTx({
393
+ seller: wallet.publicKey.toBase58(),
394
+ basket_mint: basket.mint.toBase58(),
395
+ withdraw_amount: 2 * 10 ** 6,
396
+ keep_tokens: ["USDCoctVLVnvTXBEuP9s8hntucdJokbo17RwHuNXemT"],
397
+ });
398
+ let res = await sdk.signAndSendTxPayloadBatchSequence({txPayloadBatchSequence: tx, wallet});
399
+ console.log(res);
400
+ }
401
+
402
+ if (tests.rebalanceBasket) {
403
+ let tx = await sdk.rebalanceBasketTx({
404
+ keeper: wallet.publicKey.toBase58(),
405
+ basket_mint: "9j28U9fKfPbau7jLGw8zKT1SZouyEaRizBT9DFXpYHQ9",
406
+ });
407
+ let res = await sdk.signAndSendTxPayloadBatchSequence({txPayloadBatchSequence: tx, wallet});
408
+ console.log(res);
409
+ }
410
+
411
+ if (tests.updateTokenPrices) {
412
+ let rebalanceIntent = getRebalanceIntentPda(basket.ownAddress, wallet.publicKey);
413
+ let tx = await sdk.updateTokenPricesTx({
414
+ keeper: wallet.publicKey.toBase58(),
415
+ basket: basket.ownAddress.toBase58(),
416
+ rebalance_intent: rebalanceIntent.toBase58(),
417
+ });
418
+ let res = await sdk.signAndSendTxPayloadBatchSequence({txPayloadBatchSequence: tx, wallet});
419
+ console.log(res);
420
+ }
421
+
422
+ if (tests.rebalanceSwapAll) {
423
+ let rebalanceIntent = getRebalanceIntentPda(basket.ownAddress, wallet.publicKey);
424
+ let state = await sdk.fetchRebalanceIntent(rebalanceIntent.toBase58());
425
+ let pairs = getSwapPairs(state.chain_data, basket);
426
+ console.log(pairs);
427
+ for (let pair of pairs) try {
428
+ let { tokenLedgerInstruction, swapInstruction, addressLookupTableAddresses , quoteResponse} = await getJupTokenLedgerAndSwapInstructions({
429
+ keeper: wallet.publicKey,
430
+ basketMintIn: basket.mint,
431
+ basketMintOut: basket.mint,
432
+ basketAmountIn: pair.inAmount,
433
+ basketAmountOut: pair.outAmount,
434
+ swapMode: "ioc",
435
+ apiKey: jupApiKey,
436
+ maxJupAccounts: 45,
437
+ });
438
+ console.log(quoteResponse);
439
+ let tx = await sdk.flashSwapTx({
440
+ keeper: wallet.publicKey.toBase58(),
441
+ basket: basket.ownAddress.toBase58(),
442
+ rebalance_intent: rebalanceIntent.toBase58(),
443
+ mint_in: pair.inMint,
444
+ mint_out: pair.outMint,
445
+ amount_in: pair.inAmount,
446
+ amount_out: pair.outAmount,
447
+ mode: 2,
448
+ jup_token_ledger_ix: tokenLedgerInstruction,
449
+ jup_swap_ix: swapInstruction,
450
+ jup_address_lookup_table_addresses: addressLookupTableAddresses,
451
+ });
452
+ let res = await sdk.signAndSendTxPayloadBatchSequence({txPayloadBatchSequence: tx, wallet});
453
+ console.log(res);
454
+ } catch { continue; }
455
+ }
456
+
457
+ if (tests.rebalanceSwap) {
458
+ let rebalanceIntent = getRebalanceIntentPda(basket.ownAddress, wallet.publicKey);
459
+ let tx = await sdk.flashSwapTx({
460
+ keeper: wallet.publicKey.toBase58(),
461
+ basket: basket.ownAddress.toBase58(),
462
+ rebalance_intent: rebalanceIntent.toBase58(),
463
+ mint_in: "USDCoctVLVnvTXBEuP9s8hntucdJokbo17RwHuNXemT",
464
+ mint_out: "So11111111111111111111111111111111111111112",
465
+ amount_in: 100 * 10 ** 6,
466
+ amount_out: 1 * 10 ** 9,
467
+ mode: 2,
468
+ });
469
+ let res = await sdk.signAndSendTxPayloadBatchSequence({txPayloadBatchSequence: tx, wallet});
470
+ console.log(res);
471
+ }
472
+
473
+ if (tests.mintBasket) {
474
+ let rebalanceIntent = getRebalanceIntentPda(basket.ownAddress, wallet.publicKey);
475
+ let tx = await sdk.mintTx({
476
+ keeper: wallet.publicKey.toBase58(),
477
+ rebalance_intent: rebalanceIntent.toBase58(),
478
+ });
479
+ let res = await sdk.signAndSendTxPayloadBatchSequence({txPayloadBatchSequence: tx, wallet});
480
+ console.log(res);
481
+ return;
482
+ }
483
+
484
+ if (tests.redeemTokens) {
485
+ let rebalanceIntent = getRebalanceIntentPda(basket.ownAddress, wallet.publicKey);
486
+ let state = await sdk.fetchRebalanceIntent(rebalanceIntent.toBase58());
487
+ let endTimestamp = state.formatted_data.auctions[2].end_time ?? 0;
488
+ let now = Date.now() / 1000;
489
+ console.log(now, endTimestamp, endTimestamp - now);
490
+ let tx = await sdk.redeemTokensTx({
491
+ keeper: wallet.publicKey.toBase58(),
492
+ rebalance_intent: rebalanceIntent.toBase58(),
493
+ });
494
+ let res = await sdk.signAndSendTxPayloadBatchSequence({txPayloadBatchSequence: tx, wallet});
495
+ console.log(res);
496
+ }
497
+
498
+ if (tests.claimBounty) {
499
+ let rebalanceIntent = getRebalanceIntentPda(basket.ownAddress, wallet.publicKey);
500
+ let tx = await sdk.claimBountyTx({
501
+ keeper: wallet.publicKey.toBase58(),
502
+ rebalance_intent: rebalanceIntent.toBase58(),
503
+ });
504
+ let res = await sdk.signAndSendTxPayloadBatchSequence({txPayloadBatchSequence: tx, wallet});
505
+ console.log(res);
506
+ }
507
+
508
+ if (tests.withdrawBasketFees) {
509
+ let tx = await sdk.withdrawBasketFeesTx({
510
+ claimer: wallet.publicKey.toBase58(),
511
+ basket: basket.ownAddress.toBase58(),
512
+ });
513
+ let res = await sdk.signAndSendTxPayloadBatchSequence({txPayloadBatchSequence: tx, wallet});
514
+ console.log(res);
515
+ }
516
+
517
+ if (tests.claimTokenFeesFromBasket) {
518
+ let tx = await sdk.claimTokenFeesFromBasketTx({
519
+ claimer: wallet.publicKey.toBase58(),
520
+ withdrawBasketFees: new PublicKey("").toBase58(),
521
+ });
522
+ let res = await sdk.signAndSendTxPayloadBatchSequence({txPayloadBatchSequence: tx, wallet});
523
+ console.log(res);
524
+ }
525
+
526
+ if (tests.editGlobalConfig) {
527
+ let editGlobalConfigTx = await sdk.editGlobalConfigTx({
528
+ signer: wallet.publicKey,
529
+ config: {
530
+ admin: new PublicKey("DEVePdJBmogeJkAmaWRpdV7KaynaQJHt9zowCisSQkAf"),
531
+ owners: [
532
+ new PublicKey("UserevMsvU5K9u6iW7DT9XJVyVLpmfDCEAfXixBbE7R"),
533
+ new PublicKey("Bm7uwxU8sTKhNhrsa5YWAQWmVTDBNMjgmYmAb4o1uDhq"),
534
+ new PublicKey("DEVePdJBmogeJkAmaWRpdV7KaynaQJHt9zowCisSQkAf")
535
+ ],
536
+
537
+ totalNumberOfBaskets: new BN(0),
538
+
539
+ allowInteractions: 1,
540
+ allowCreation: 1,
541
+ allowManagement: 1,
542
+ allowAutomation: 1,
543
+ allowDeposits: 1,
544
+ allowWithdraws: 1,
545
+
546
+ maxDepositFeeBps: 1000,
547
+ maxWithdrawFeeBps: 1000,
548
+ maxManagementFeeBps: 2000,
549
+ maxPerformanceFeeBps: 2000,
550
+
551
+ symmetryFeeCollector: new PublicKey("UserevMsvU5K9u6iW7DT9XJVyVLpmfDCEAfXixBbE7R"),
552
+ symmetryDepositFeeBps: 10,
553
+ symmetryDepositFeeShareBps: 50,
554
+ symmetryWithdrawFeeBps: 50,
555
+ symmetryWithdrawFeeShareBps: 50,
556
+ symmetryManagementFeeBps: 50,
557
+ symmetryManagementFeeShareBps: 50,
558
+ symmetryPerformanceFeeBps: 50,
559
+ symmetryPerformanceFeeShareBps: 50,
560
+ symmetryTradeFeeBps: 50,
561
+ symmetryLimitOrderFeeBps: 50,
562
+ symmetryFeesExtraData: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,],
563
+
564
+ bountyMint: new PublicKey("So11111111111111111111111111111111111111112"),
565
+ minBountyForBasketAutomation: new BN(200 * 50 * 10 ** 3),
566
+ bountyBondAmount: new BN(5 * 50 * 10 ** 3),
567
+ bountyPerTask: {
568
+ minBounty: new BN(1 * 50 * 10 ** 3),
569
+ maxBounty: new BN(2 * 50 * 10 ** 3),
570
+ minBountyUntil: new BN(1),
571
+ maxBountyAfter: new BN(101),
572
+ },
573
+ bountyPerPriceUpdateTaskDivisor: new BN(5),
574
+ minRemainingValue: {high: new BN(0), low: new BN("1844674407370955161")},
575
+ minMintRatio: {high: new BN(0), low: new BN("18444899399302180660")},
576
+
577
+ aprBpsPerYear: 3334,
578
+ rebalanceIntentLifetime: new BN(10 * 60),
579
+ rebalanceAuction1Timeframe: new BN(100),
580
+ rebalanceAuction2Timeframe: new BN(50),
581
+ rebalanceAuction3Timeframe: new BN(25),
582
+
583
+ priceUpdateDelayAfterCreation: new BN(16),
584
+ priceUpdateLifetime: new BN(60),
585
+ priceUpdateReexecutionDelay: new BN(30),
586
+
587
+ extraData: [
588
+ new BN(0), new BN(0), new BN(0), new BN(0),
589
+ new BN(0), new BN(0), new BN(0), new BN(0),
590
+ new BN(0), new BN(0), new BN(0), new BN(0),
591
+ new BN(0), new BN(0), new BN(0), new BN(0),
592
+ new BN(0), new BN(0), new BN(0), new BN(0),
593
+ new BN(0), new BN(0), new BN(0), new BN(0),
594
+ new BN(0), new BN(0), new BN(0), new BN(0),
595
+ new BN(0), new BN(0), new BN(0), new BN(0),
596
+ ]
597
+ }
598
+ ,
599
+ });
600
+ let resEditGlobalConfigTx = await sdk.signAndSendTxPayloadBatchSequence({
601
+ txPayloadBatchSequence: editGlobalConfigTx,
602
+ wallet,
603
+ });
604
+ console.log(resEditGlobalConfigTx);
605
+ return;
606
+ }
607
+ }
608
+
609
+ testStates();