@symmetry-hq/temp-v3-sdk 0.0.6 → 0.0.8

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 (46) hide show
  1. package/dist/src/index.d.ts +22 -0
  2. package/dist/src/index.js +150 -7
  3. package/dist/src/instructions/automation/priceUpdate.js +1 -1
  4. package/dist/src/instructions/management/edit.js +43 -15
  5. package/dist/src/instructions/user/deposit.d.ts +1 -0
  6. package/dist/src/instructions/user/deposit.js +3 -1
  7. package/dist/src/instructions/user/withdraw.d.ts +1 -0
  8. package/dist/src/instructions/user/withdraw.js +4 -5
  9. package/dist/src/layouts/basket.d.ts +1 -1
  10. package/dist/src/layouts/basket.js +1 -1
  11. package/dist/src/layouts/config.d.ts +22 -5
  12. package/dist/src/layouts/config.js +22 -5
  13. package/dist/src/layouts/intents/intent.d.ts +3 -2
  14. package/dist/src/layouts/intents/intent.js +1 -0
  15. package/dist/src/layouts/intents/rebalanceIntent.d.ts +6 -4
  16. package/dist/src/layouts/intents/rebalanceIntent.js +5 -3
  17. package/dist/src/layouts/oracle.d.ts +3 -2
  18. package/dist/src/layouts/oracle.js +6 -4
  19. package/dist/src/states/basket.js +67 -9
  20. package/dist/src/states/oracles/oracle.d.ts +4 -4
  21. package/dist/src/states/oracles/oracle.js +36 -16
  22. package/dist/src/states/oracles/pythOracle.d.ts +142 -1
  23. package/dist/src/states/oracles/pythOracle.js +747 -15
  24. package/dist/src/states/oracles/raydiumClmmOracle.d.ts +151 -2
  25. package/dist/src/states/oracles/raydiumClmmOracle.js +346 -44
  26. package/dist/src/states/oracles/raydiumCpmmOracle.d.ts +92 -9
  27. package/dist/src/states/oracles/raydiumCpmmOracle.js +173 -78
  28. package/dist/test.js +111 -13
  29. package/package.json +2 -2
  30. package/src/index.ts +167 -10
  31. package/src/instructions/automation/priceUpdate.ts +1 -1
  32. package/src/instructions/management/createBasket.ts +1 -1
  33. package/src/instructions/management/edit.ts +37 -10
  34. package/src/instructions/user/deposit.ts +4 -0
  35. package/src/instructions/user/withdraw.ts +5 -10
  36. package/src/layouts/basket.ts +2 -2
  37. package/src/layouts/config.ts +54 -19
  38. package/src/layouts/intents/intent.ts +5 -3
  39. package/src/layouts/intents/rebalanceIntent.ts +6 -3
  40. package/src/layouts/oracle.ts +12 -8
  41. package/src/states/basket.ts +83 -13
  42. package/src/states/oracles/oracle.ts +43 -18
  43. package/src/states/oracles/pythOracle.ts +970 -18
  44. package/src/states/oracles/raydiumClmmOracle.ts +434 -57
  45. package/src/states/oracles/raydiumCpmmOracle.ts +224 -94
  46. package/test.ts +120 -17
@@ -56,6 +56,7 @@ export declare class SymmetryCore {
56
56
  amount: number;
57
57
  }[];
58
58
  rebalanceSlippageBps?: number;
59
+ perTradeRebalanceSlippageBps?: number;
59
60
  executionStartTime?: number;
60
61
  }): Promise<VersionedTxs>;
61
62
  updateTokenPricesTx(params: {
@@ -63,6 +64,27 @@ export declare class SymmetryCore {
63
64
  rebalanceIntent: RebalanceIntent;
64
65
  basket: Basket;
65
66
  }): Promise<VersionedTxs>;
67
+ executeSwap(params: {
68
+ keeper: PublicKey;
69
+ rebalanceIntent: RebalanceIntent;
70
+ mintFrom: PublicKey;
71
+ mintTo: PublicKey;
72
+ amount: number;
73
+ side: number;
74
+ }): Promise<VersionedTxs>;
75
+ mintTx(params: {
76
+ keeper: PublicKey;
77
+ buyer: PublicKey;
78
+ basket: PublicKey;
79
+ }): Promise<VersionedTxs>;
80
+ redeemTokensTx(params: {
81
+ keeper: PublicKey;
82
+ rebalanceIntent: RebalanceIntent;
83
+ }): Promise<VersionedTxs>;
84
+ claimBountyTx(params: {
85
+ keeper: PublicKey;
86
+ rebalanceIntent: RebalanceIntent;
87
+ }): Promise<VersionedTxs>;
66
88
  signAndSendVersionedTxs(params: {
67
89
  vtxs: VersionedTxs;
68
90
  wallet: Wallet;
package/dist/src/index.js CHANGED
@@ -28,6 +28,9 @@ const txUtils_1 = require("./txUtils");
28
28
  const decimal_js_1 = __importDefault(require("decimal.js"));
29
29
  const deposit_1 = require("./instructions/user/deposit");
30
30
  const priceUpdate_1 = require("./instructions/automation/priceUpdate");
31
+ const rebalanceSwap_1 = require("./instructions/automation/rebalanceSwap");
32
+ const withdraw_1 = require("./instructions/user/withdraw");
33
+ const claimBounty_1 = require("./instructions/automation/claimBounty");
31
34
  exports.COMPUTE_UNITS = 1000000;
32
35
  exports.PRIORITY_FEE = 100000;
33
36
  exports.JUPITER_API_KEY = "https://quote-api.jup.ag/v6/";
@@ -169,9 +172,11 @@ class SymmetryCore {
169
172
  }
170
173
  depositTx(params) {
171
174
  return __awaiter(this, void 0, void 0, function* () {
172
- let { buyer, basket, contributions, rebalanceSlippageBps, executionStartTime } = params;
175
+ let { buyer, basket, contributions, rebalanceSlippageBps, perTradeRebalanceSlippageBps, executionStartTime } = params;
173
176
  if (!rebalanceSlippageBps)
174
177
  rebalanceSlippageBps = 100;
178
+ if (!perTradeRebalanceSlippageBps)
179
+ perTradeRebalanceSlippageBps = 100;
175
180
  if (!executionStartTime)
176
181
  executionStartTime = 0;
177
182
  let rebalanceIntent = (0, pda_1.getRebalanceIntentPda)(basket, buyer);
@@ -187,7 +192,8 @@ class SymmetryCore {
187
192
  basket,
188
193
  bountyMint: constants_1.BOUNTY_MINT,
189
194
  rebalanceIntentRentPayer: buyer,
190
- rebalanceSlippageBps: rebalanceSlippageBps,
195
+ rebalanceSlippageBps,
196
+ perTradeRebalanceSlippageBps,
191
197
  executionStartTime: executionStartTime,
192
198
  }),
193
199
  ]
@@ -205,6 +211,11 @@ class SymmetryCore {
205
211
  owner: buyer,
206
212
  basket: basket,
207
213
  }),
214
+ (0, priceUpdate_1.startPriceUpdatesIx)({
215
+ keeper: buyer,
216
+ basket: basket,
217
+ rebalanceIntent: rebalanceIntent,
218
+ }),
208
219
  ]);
209
220
  let signers = [];
210
221
  let multipleLookupTableAddresses = [];
@@ -230,8 +241,7 @@ class SymmetryCore {
230
241
  let ixs = [];
231
242
  let signers = [];
232
243
  let multipleLookupTableAddresses = [];
233
- let batches = [];
234
- let batchSize = 5;
244
+ let batchSize = 7;
235
245
  for (let batchStart = 0; batchStart < basket.numTokens; batchStart += batchSize) {
236
246
  let allKeys = [];
237
247
  let tokenIndices = [];
@@ -265,8 +275,141 @@ class SymmetryCore {
265
275
  }),
266
276
  ]);
267
277
  signers.push([]);
268
- multipleLookupTableAddresses.push([]);
269
- batches.push(1);
278
+ multipleLookupTableAddresses.push([basket.lookupTables.active[0], basket.lookupTables.active[1]]);
279
+ break;
280
+ }
281
+ let vtxs = yield (0, txUtils_1.prepareV0Transactions)({
282
+ connection: this.sdkParams.connection,
283
+ payer: keeper,
284
+ priorityFee: this.sdkParams.priorityFee,
285
+ multipleIxs: ixs,
286
+ multipleLookupTableAddresses: multipleLookupTableAddresses,
287
+ signers: signers,
288
+ batches: [ixs.length],
289
+ });
290
+ return vtxs;
291
+ });
292
+ }
293
+ executeSwap(params) {
294
+ return __awaiter(this, void 0, void 0, function* () {
295
+ let { keeper, rebalanceIntent, mintFrom, mintTo, amount, side } = params;
296
+ let ix = (0, rebalanceSwap_1.rebalanceSwapIx)({
297
+ keeper: keeper,
298
+ basket: rebalanceIntent.basket,
299
+ mintFrom: mintFrom,
300
+ mintTo: mintTo,
301
+ amount: amount,
302
+ side: side,
303
+ });
304
+ let vtxs = yield (0, txUtils_1.prepareV0Transactions)({
305
+ connection: this.sdkParams.connection,
306
+ payer: keeper,
307
+ priorityFee: this.sdkParams.priorityFee,
308
+ multipleIxs: [[ix]],
309
+ multipleLookupTableAddresses: [],
310
+ signers: [[]],
311
+ batches: [1],
312
+ });
313
+ return vtxs;
314
+ });
315
+ }
316
+ mintTx(params) {
317
+ return __awaiter(this, void 0, void 0, function* () {
318
+ let { keeper, buyer, basket } = params;
319
+ let ix = (0, deposit_1.mintBasketIx)({
320
+ keeper: keeper,
321
+ basket: basket,
322
+ buyer: buyer,
323
+ });
324
+ let vtxs = yield (0, txUtils_1.prepareV0Transactions)({
325
+ connection: this.sdkParams.connection,
326
+ payer: keeper,
327
+ priorityFee: this.sdkParams.priorityFee,
328
+ multipleIxs: [[ix]],
329
+ multipleLookupTableAddresses: [],
330
+ signers: [[]],
331
+ batches: [1],
332
+ });
333
+ return vtxs;
334
+ });
335
+ }
336
+ redeemTokensTx(params) {
337
+ return __awaiter(this, void 0, void 0, function* () {
338
+ let { keeper, rebalanceIntent } = params;
339
+ let batchSize = 7;
340
+ let ixs = [];
341
+ let signers = [];
342
+ let multipleLookupTableAddresses = [];
343
+ for (let batchStart = 0; batchStart < rebalanceIntent.tokens.length; batchStart += batchSize) {
344
+ let tokenMints = [];
345
+ for (let i = batchStart; i < rebalanceIntent.tokens.length && i < batchStart + batchSize; i++)
346
+ if (rebalanceIntent.tokens[i].amount.gt(new anchor_1.BN(0)))
347
+ tokenMints.push(rebalanceIntent.tokens[i].mint);
348
+ if (tokenMints.length > 0) {
349
+ ixs.push([
350
+ (0, withdraw_1.redeemTokensIx)({
351
+ keeper: keeper,
352
+ basket: rebalanceIntent.basket,
353
+ owner: rebalanceIntent.owner,
354
+ tokenMints: tokenMints,
355
+ })
356
+ ]);
357
+ signers.push([]);
358
+ multipleLookupTableAddresses.push([]);
359
+ }
360
+ }
361
+ let vtxs = yield (0, txUtils_1.prepareV0Transactions)({
362
+ connection: this.sdkParams.connection,
363
+ payer: keeper,
364
+ priorityFee: this.sdkParams.priorityFee,
365
+ multipleIxs: ixs,
366
+ multipleLookupTableAddresses: multipleLookupTableAddresses,
367
+ signers: signers,
368
+ batches: [ixs.length],
369
+ });
370
+ return vtxs;
371
+ });
372
+ }
373
+ claimBountyTx(params) {
374
+ return __awaiter(this, void 0, void 0, function* () {
375
+ let { keeper, rebalanceIntent } = params;
376
+ let keepersArray = [];
377
+ if (!rebalanceIntent.startPriceUpdateTask.completedBy.equals(web3_js_1.PublicKey.default))
378
+ keepersArray.push(rebalanceIntent.startPriceUpdateTask.completedBy);
379
+ if (!rebalanceIntent.finishPriceUpdateTask.completedBy.equals(web3_js_1.PublicKey.default))
380
+ keepersArray.push(rebalanceIntent.finishPriceUpdateTask.completedBy);
381
+ if (!rebalanceIntent.mintBasketTask.completedBy.equals(web3_js_1.PublicKey.default))
382
+ keepersArray.push(rebalanceIntent.mintBasketTask.completedBy);
383
+ for (let i = 0; i < rebalanceIntent.priceUpdateTasks.length; i++)
384
+ if (!rebalanceIntent.priceUpdateTasks[i].completedBy.equals(web3_js_1.PublicKey.default))
385
+ keepersArray.push(rebalanceIntent.priceUpdateTasks[i].completedBy);
386
+ for (let i = 0; i < rebalanceIntent.tokenSettlementTasks.length; i++)
387
+ if (!rebalanceIntent.tokenSettlementTasks[i].completedBy.equals(web3_js_1.PublicKey.default))
388
+ keepersArray.push(rebalanceIntent.tokenSettlementTasks[i].completedBy);
389
+ keepersArray = Array.from(new Set(keepersArray));
390
+ let batchSize = 10;
391
+ let ixs = [];
392
+ let signers = [];
393
+ let multipleLookupTableAddresses = [];
394
+ for (let batchStart = 0; batchStart < keepersArray.length; batchStart += batchSize) {
395
+ let keepers = [];
396
+ for (let i = batchStart; i < keepersArray.length && i < batchStart + batchSize; i++)
397
+ keepers.push(keepersArray[i]);
398
+ if (keepers.length > 0) {
399
+ ixs.push([
400
+ (0, claimBounty_1.claimBountyIx)({
401
+ keeper: keeper,
402
+ basket: rebalanceIntent.basket, //@ts-ignore
403
+ intent: rebalanceIntent.ownAddress,
404
+ bountyMint: rebalanceIntent.bounty.bountyMint,
405
+ bountyDepositor: rebalanceIntent.bounty.bountyDepositor,
406
+ rentPayer: rebalanceIntent.rentPayer,
407
+ keepers: keepers,
408
+ })
409
+ ]);
410
+ signers.push([]);
411
+ multipleLookupTableAddresses.push([]);
412
+ }
270
413
  }
271
414
  let vtxs = yield (0, txUtils_1.prepareV0Transactions)({
272
415
  connection: this.sdkParams.connection,
@@ -275,7 +418,7 @@ class SymmetryCore {
275
418
  multipleIxs: ixs,
276
419
  multipleLookupTableAddresses: multipleLookupTableAddresses,
277
420
  signers: signers,
278
- batches: batches,
421
+ batches: [ixs.length],
279
422
  });
280
423
  return vtxs;
281
424
  });
@@ -10,7 +10,7 @@ const UPDATE_TOKEN_PRICES_DISCRIMINATOR = Buffer.from([147, 87, 140, 33, 214, 18
10
10
  function startPriceUpdatesIx(params) {
11
11
  const keys = [
12
12
  { pubkey: params.keeper, isSigner: true, isWritable: true },
13
- { pubkey: params.basket, isSigner: false, isWritable: false },
13
+ { pubkey: params.basket, isSigner: false, isWritable: true },
14
14
  { pubkey: params.rebalanceIntent, isSigner: false, isWritable: true },
15
15
  ];
16
16
  const data = START_PRICE_UPDATES_DISCRIMINATOR;
@@ -3,14 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.editPrivateBasketSettingsIx = editPrivateBasketSettingsIx;
4
4
  exports.createEditBasketIntentIx = createEditBasketIntentIx;
5
5
  exports.editBasketIx = editBasketIx;
6
- const intent_1 = require("../../layouts/intents/intent");
7
6
  const web3_js_1 = require("@solana/web3.js");
7
+ const intent_1 = require("../../layouts/intents/intent");
8
+ const web3_js_2 = require("@solana/web3.js");
8
9
  const constants_1 = require("../../constants");
9
10
  const pda_1 = require("../pda");
10
11
  const spl_token_1 = require("@solana/spl-token");
11
12
  const config_1 = require("../../layouts/config");
12
13
  const anchor_1 = require("@coral-xyz/anchor");
13
- const web3_js_2 = require("@solana/web3.js");
14
+ const web3_js_3 = require("@solana/web3.js");
14
15
  const oracle_1 = require("../../layouts/oracle");
15
16
  const EDIT_PRIVATE_BASKET_SETTINGS_DISCRIMINATOR = Buffer.from([202, 54, 138, 17, 3, 104, 128, 229]);
16
17
  const CREATE_EDIT_BASKET_INTENT_DISCRIMINATOR = Buffer.from([82, 150, 58, 227, 153, 129, 20, 30]);
@@ -53,7 +54,7 @@ function editPrivateBasketSettingsIx(params) {
53
54
  { pubkey: globalConfig, isSigner: false, isWritable: false },
54
55
  { pubkey: constants_1.METADATA_PROGRAM_ID, isSigner: false, isWritable: false }
55
56
  ];
56
- return new web3_js_1.TransactionInstruction({
57
+ return new web3_js_2.TransactionInstruction({
57
58
  keys,
58
59
  programId: constants_1.BASKETS_V3_PROGRAM_ID,
59
60
  data
@@ -79,6 +80,10 @@ function createEditBasketIntentIx(params) {
79
80
  break;
80
81
  case intent_1.TaskType.EditManagerSettings: // 3
81
82
  let startIndex = 0;
83
+ while (editData.managerSettings.managersWeightBps.length < config_1.MAX_MANAGERS_PER_BASKET) {
84
+ editData.managerSettings.managersWeightBps.push(0);
85
+ editData.managerSettings.managers.push(web3_js_1.PublicKey.default);
86
+ }
82
87
  for (let i = 0; i < config_1.MAX_MANAGERS_PER_BASKET; i++) {
83
88
  let managerWeight = editData.managerSettings.managersWeightBps[i];
84
89
  editDataBuf.writeUInt16LE(managerWeight, startIndex);
@@ -93,7 +98,9 @@ function createEditBasketIntentIx(params) {
93
98
  intent_1.AuthorityBitmasksLayout.encode(editData.authorityBitmasks, authorityBitmasksBuffer);
94
99
  editDataBuf.set(authorityBitmasksBuffer, startIndex);
95
100
  startIndex += intent_1.AuthorityBitmasksLayout.span;
96
- editDataBuf.writeBigUint64LE(editData.managerSettings.modificationDelay, startIndex);
101
+ let modificationDelayBN = editData.managerSettings.modificationDelay;
102
+ editDataBuf.writeBigUint64LE(BigInt(modificationDelayBN.toString()), startIndex);
103
+ startIndex += 8;
97
104
  break;
98
105
  case intent_1.TaskType.EditAutomationSettings: // 4
99
106
  config_1.AutomationSettingsLayout.encode(editData, editDataBuf);
@@ -111,7 +118,21 @@ function createEditBasketIntentIx(params) {
111
118
  intent_1.UpdateWeightsDelayLayout.encode(editData, editDataBuf);
112
119
  break;
113
120
  case intent_1.TaskType.AddToken: // 9
114
- oracle_1.OracleAggregatorLayout.encode(editData.oracleAggregator, editDataBuf);
121
+ let data = editData.oracleAggregator;
122
+ while (data.oracles.length < constants_1.MAX_ORACLES_PER_TOKEN) {
123
+ data.oracles.push({
124
+ oracleSettings: oracle_1.DEFAULT_ORACLE_SETTINGS,
125
+ accountsToLoadLutIds: [],
126
+ accountsToLoadLutIndices: [],
127
+ });
128
+ }
129
+ for (let i = 0; i < data.oracles.length; i++) {
130
+ while (data.oracles[i].accountsToLoadLutIds.length < oracle_1.MAX_ACCOUNTS_PER_ORACLE) {
131
+ data.oracles[i].accountsToLoadLutIds.push(0);
132
+ data.oracles[i].accountsToLoadLutIndices.push(0);
133
+ }
134
+ }
135
+ oracle_1.OracleAggregatorLayout.encode(data, editDataBuf);
115
136
  additionalAccounts.push({
116
137
  pubkey: editData.tokenMint,
117
138
  isWritable: false,
@@ -132,14 +153,21 @@ function createEditBasketIntentIx(params) {
132
153
  isWritable: true,
133
154
  isSigner: false
134
155
  });
135
- additionalAccounts.push({
136
- pubkey: editData.oracleAccount,
137
- isWritable: false,
138
- isSigner: false
139
- });
156
+ for (let i = 0; i < editData.oracleAccounts.length; i++) {
157
+ additionalAccounts.push({
158
+ pubkey: editData.oracleAccounts[i],
159
+ isWritable: false,
160
+ isSigner: false
161
+ });
162
+ }
140
163
  break;
141
164
  case intent_1.TaskType.UpdateWeights: // 10
142
- intent_1.UpdateWeightsLayout.encode(editData, editDataBuf);
165
+ let updateWeightsData = editData;
166
+ while (updateWeightsData.tokenMintsHash.length < 32)
167
+ updateWeightsData.tokenMintsHash.push(0);
168
+ while (updateWeightsData.tokenWeights.length < constants_1.MAX_SUPPORTED_TOKENS_PER_BASKET)
169
+ updateWeightsData.tokenWeights.push(0);
170
+ intent_1.UpdateWeightsLayout.encode(updateWeightsData, editDataBuf);
143
171
  break;
144
172
  case intent_1.TaskType.Swap: // 11
145
173
  break;
@@ -162,13 +190,13 @@ function createEditBasketIntentIx(params) {
162
190
  { pubkey: managerBountyATA, isSigner: false, isWritable: true },
163
191
  { pubkey: bountyVault, isSigner: false, isWritable: true },
164
192
  { pubkey: bountyVaultATA, isSigner: false, isWritable: true },
165
- { pubkey: web3_js_2.SystemProgram.programId, isSigner: false, isWritable: false },
193
+ { pubkey: web3_js_3.SystemProgram.programId, isSigner: false, isWritable: false },
166
194
  { pubkey: spl_token_1.TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },
167
195
  { pubkey: spl_token_1.TOKEN_2022_PROGRAM_ID, isSigner: false, isWritable: false },
168
196
  { pubkey: spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },
169
197
  ];
170
198
  keys.push(...additionalAccounts);
171
- return new web3_js_1.TransactionInstruction({
199
+ return new web3_js_2.TransactionInstruction({
172
200
  keys,
173
201
  programId: constants_1.BASKETS_V3_PROGRAM_ID,
174
202
  data,
@@ -198,7 +226,7 @@ function editBasketIx(params) {
198
226
  { pubkey: managerBountyATA, isSigner: false, isWritable: true },
199
227
  { pubkey: bountyVault, isSigner: false, isWritable: true },
200
228
  { pubkey: bountyVaultATA, isSigner: false, isWritable: true },
201
- { pubkey: web3_js_2.SystemProgram.programId, isSigner: false, isWritable: false },
229
+ { pubkey: web3_js_3.SystemProgram.programId, isSigner: false, isWritable: false },
202
230
  { pubkey: spl_token_1.TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },
203
231
  { pubkey: spl_token_1.TOKEN_2022_PROGRAM_ID, isSigner: false, isWritable: false },
204
232
  { pubkey: spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },
@@ -210,7 +238,7 @@ function editBasketIx(params) {
210
238
  keys.push({ pubkey: constants_1.METADATA_PROGRAM_ID, isSigner: false, isWritable: false });
211
239
  }
212
240
  ;
213
- return new web3_js_1.TransactionInstruction({
241
+ return new web3_js_2.TransactionInstruction({
214
242
  keys,
215
243
  programId: constants_1.BASKETS_V3_PROGRAM_ID,
216
244
  data,
@@ -11,6 +11,7 @@ export declare function depositStateIx(params: {
11
11
  bountyMint: PublicKey;
12
12
  rebalanceIntentRentPayer: PublicKey;
13
13
  rebalanceSlippageBps: number;
14
+ perTradeRebalanceSlippageBps: number;
14
15
  executionStartTime: number;
15
16
  }): TransactionInstruction;
16
17
  export declare function depositTokensIx(params: {
@@ -53,7 +53,7 @@ function resizeRebalanceIntentIx(rebalanceIntent) {
53
53
  });
54
54
  }
55
55
  function depositStateIx(params) {
56
- const { buyer, basket, bountyMint, rebalanceIntentRentPayer, rebalanceSlippageBps, executionStartTime, } = params;
56
+ const { buyer, basket, bountyMint, rebalanceIntentRentPayer, rebalanceSlippageBps, perTradeRebalanceSlippageBps, executionStartTime, } = params;
57
57
  let rebalanceIntent = (0, pda_1.getRebalanceIntentPda)(basket, buyer);
58
58
  let basketTokenMint = (0, pda_1.getBasketTokenMintPda)(basket);
59
59
  let globalConfig = (0, pda_1.getGlobalConfigPda)();
@@ -64,11 +64,13 @@ function depositStateIx(params) {
64
64
  let buyerBasketAta = (0, pda_1.getAta)(buyer, basketTokenMint);
65
65
  const rebalanceIntentRentPayerBuf = rebalanceIntentRentPayer.toBuffer();
66
66
  const rebalanceSlippageBuf = Buffer.from(new anchor_1.BN(rebalanceSlippageBps).toArray("le", 2));
67
+ const perTradeRebalanceSlippageBuf = Buffer.from(new anchor_1.BN(perTradeRebalanceSlippageBps).toArray("le", 2));
67
68
  const executionStartBuf = Buffer.from(new anchor_1.BN(executionStartTime).toArray("le", 8));
68
69
  const data = Buffer.concat([
69
70
  CREATE_DEPOSIT_STATE_DISCRIMINATOR,
70
71
  rebalanceIntentRentPayerBuf,
71
72
  rebalanceSlippageBuf,
73
+ perTradeRebalanceSlippageBuf,
72
74
  executionStartBuf
73
75
  ]);
74
76
  const keys = [
@@ -5,6 +5,7 @@ export declare function createWithdrawStateIx(params: {
5
5
  basket: PublicKey;
6
6
  withdrawAmount: number;
7
7
  rebalanceSlippageBps: number;
8
+ perTradeRebalanceSlippageBps: number;
8
9
  executionStartTime: number;
9
10
  bountyMint: PublicKey;
10
11
  }): TransactionInstruction;
@@ -11,7 +11,7 @@ const web3_js_2 = require("@solana/web3.js");
11
11
  const CREATE_WITHDRAW_STATE_DISCRIMINATOR = Buffer.from([161, 45, 253, 59, 110, 240, 65, 3]);
12
12
  const REDEEM_TOKENS_DISCRIMINATOR = Buffer.from([83, 49, 112, 2, 105, 193, 106, 126]);
13
13
  function createWithdrawStateIx(params) {
14
- const { seller, basket, withdrawAmount, rebalanceSlippageBps, executionStartTime, bountyMint, } = params;
14
+ const { seller, basket, withdrawAmount, rebalanceSlippageBps, perTradeRebalanceSlippageBps, executionStartTime, bountyMint, } = params;
15
15
  let rebalanceIntent = (0, pda_1.getRebalanceIntentPda)(basket, seller);
16
16
  let rentPayerPda = (0, pda_1.getRentPayerPda)();
17
17
  let basketTokenMint = (0, pda_1.getBasketTokenMintPda)(basket);
@@ -25,6 +25,7 @@ function createWithdrawStateIx(params) {
25
25
  CREATE_WITHDRAW_STATE_DISCRIMINATOR,
26
26
  Buffer.from(new anchor_1.BN(withdrawAmount).toArray("le", 8)),
27
27
  Buffer.from(new anchor_1.BN(rebalanceSlippageBps).toArray("le", 2)),
28
+ Buffer.from(new anchor_1.BN(perTradeRebalanceSlippageBps).toArray("le", 2)),
28
29
  Buffer.from(new anchor_1.BN(executionStartTime).toArray("le", 8)),
29
30
  ]);
30
31
  const keys = [
@@ -67,10 +68,8 @@ function redeemTokensIx(params) {
67
68
  // remaining accounts
68
69
  params.tokenMints.forEach((mint) => {
69
70
  keys.push({ pubkey: mint, isWritable: false, isSigner: false });
70
- const ownerAta = (0, spl_token_1.getAssociatedTokenAddressSync)(mint, owner);
71
- keys.push({ pubkey: ownerAta, isWritable: true, isSigner: false });
72
- const basketAta = (0, spl_token_1.getAssociatedTokenAddressSync)(mint, basket);
73
- keys.push({ pubkey: basketAta, isWritable: true, isSigner: false });
71
+ keys.push({ pubkey: (0, pda_1.getAta)(owner, mint), isWritable: true, isSigner: false });
72
+ keys.push({ pubkey: (0, pda_1.getAta)(basket, mint), isWritable: true, isSigner: false });
74
73
  });
75
74
  const discriminator = REDEEM_TOKENS_DISCRIMINATOR;
76
75
  const data = discriminator;
@@ -22,6 +22,7 @@ export interface Asset {
22
22
  mint: PublicKey;
23
23
  amount: BN;
24
24
  weight: number;
25
+ active: number;
25
26
  oracleAggregator: OracleAggregator;
26
27
  price?: OraclePrice;
27
28
  value?: Decimal;
@@ -43,7 +44,6 @@ export interface Basket {
43
44
  settings: BasketSettings;
44
45
  accumulatedFees: BasketFees;
45
46
  lookupTables: LookupTables;
46
- writeVersion: BN;
47
47
  numTokens: number;
48
48
  composition: Asset[];
49
49
  lutPubkeys?: AddressLookupTableAccount[];
@@ -23,6 +23,7 @@ exports.AssetLayout = (0, borsh_1.struct)([
23
23
  (0, borsh_1.publicKey)('mint'),
24
24
  (0, borsh_1.u64)('amount'),
25
25
  (0, borsh_1.u16)('weight'),
26
+ (0, borsh_1.u8)('active'),
26
27
  oracle_1.OracleAggregatorLayout.replicate('oracleAggregator'),
27
28
  ]);
28
29
  ;
@@ -37,7 +38,6 @@ exports.BasketLayout = (0, borsh_1.struct)([
37
38
  config_1.BasketSettingsLayout.replicate('settings'),
38
39
  exports.BasketFeesLayout.replicate('accumulatedFees'),
39
40
  exports.LookupTablesLayout.replicate('lookupTables'),
40
- (0, borsh_1.u64)('writeVersion'),
41
41
  (0, borsh_1.u8)('numTokens'),
42
42
  (0, borsh_1.array)(exports.AssetLayout, exports.MAX_SUPPORTED_TOKENS_PER_BASKET, 'composition'),
43
43
  ]);
@@ -11,6 +11,7 @@ export declare enum BasketType {
11
11
  Public = 1
12
12
  }
13
13
  export interface ScheduleSettings {
14
+ cycleStartTime: BN;
14
15
  cycleDuration: BN;
15
16
  depositsStart: BN;
16
17
  depositsEnd: BN;
@@ -23,16 +24,20 @@ export interface ScheduleSettings {
23
24
  export declare const ScheduleSettingsLayout: any;
24
25
  export interface FeeSettings {
25
26
  hostDepositFeeBps: number;
27
+ hostWithdrawFeeBps: number;
26
28
  hostManagementFeeBps: number;
27
29
  hostPerformanceFeeBps: number;
28
30
  creatorDepositFeeBps: number;
31
+ creatorWithdrawFeeBps: number;
29
32
  creatorManagementFeeBps: number;
30
33
  creatorPerformanceFeeBps: number;
31
34
  managersDepositFeeBps: number;
35
+ managerWithdrawFeeBps: number;
32
36
  managersManagementFeeBps: number;
33
37
  managersPerformanceFeeBps: number;
34
38
  basketDepositFeeBps: number;
35
39
  basketWithdrawFeeBps: number;
40
+ extraData: number[];
36
41
  modificationDelay: BN;
37
42
  }
38
43
  export declare const FeeSettingsLayout: any;
@@ -44,15 +49,19 @@ export interface ManagerSettings {
44
49
  export declare const ManagerSettingsLayout: any;
45
50
  export interface AutomationSettings {
46
51
  allowAutomation: number;
47
- rebalanceSlippageBps: number;
48
- rebalanceThresholdBps: number;
49
- rebalanceIntervalSeconds: BN;
52
+ rebalanceSlippageThresholdBps: number;
53
+ perTradeRebalanceSlippageThresholdBps: number;
54
+ rebalanceActivationThresholdAbsBps: number;
55
+ rebalanceActivationThresholdRelBps: number;
56
+ rebalanceActivationCooldown: BN;
57
+ extraData: PublicKey[];
50
58
  modificationDelay: BN;
51
59
  }
52
60
  export declare const AutomationSettingsLayout: any;
53
61
  export interface LpSettings {
54
- lpThresholdBps: number;
55
62
  allowLp: number;
63
+ lpThresholdBps: number;
64
+ extraData: number[];
56
65
  modificationDelay: BN;
57
66
  }
58
67
  export declare const LpSettingsLayout: any;
@@ -98,6 +107,7 @@ export declare const BasketSettingsLayout: any;
98
107
  export interface GlobalConfig {
99
108
  admin: PublicKey;
100
109
  owners: PublicKey[];
110
+ allowInteractions: number;
101
111
  allowCreation: number;
102
112
  allowManagement: number;
103
113
  allowAutomation: number;
@@ -109,10 +119,16 @@ export interface GlobalConfig {
109
119
  maxPerformanceFeeBps: number;
110
120
  symmetryFeeCollector: PublicKey;
111
121
  symmetryDepositFeeBps: number;
122
+ symmetryDepositFeeShareBps: number;
112
123
  symmetryWithdrawFeeBps: number;
113
- symmetryRebalanceFeeBps: number;
124
+ symmetryWithdrawFeeShareBps: number;
114
125
  symmetryManagementFeeBps: number;
126
+ symmetryManagementFeeShareBps: number;
115
127
  symmetryPerformanceFeeBps: number;
128
+ symmetryPerformanceFeeShareBps: number;
129
+ symmetryTradeFeeBps: number;
130
+ symmetryLimitOrderFeeBps: number;
131
+ symmetryFeesExtraData: number[];
116
132
  bountyMint: PublicKey;
117
133
  minBountyForBasketAutomation: BN;
118
134
  bountyBondAmount: BN;
@@ -128,5 +144,6 @@ export interface GlobalConfig {
128
144
  priceUpdateDelayAfterCreation: BN;
129
145
  priceUpdateLifetime: BN;
130
146
  priceUpdateReexecutionDelay: BN;
147
+ extraData: BN[];
131
148
  }
132
149
  export declare const GlobalConfigLayout: any;
@@ -16,6 +16,7 @@ var BasketType;
16
16
  ;
17
17
  ;
18
18
  exports.ScheduleSettingsLayout = (0, borsh_1.struct)([
19
+ (0, borsh_1.u64)('cycleStartTime'),
19
20
  (0, borsh_1.u64)('cycleDuration'),
20
21
  (0, borsh_1.u64)('depositsStart'),
21
22
  (0, borsh_1.u64)('depositsEnd'),
@@ -28,16 +29,20 @@ exports.ScheduleSettingsLayout = (0, borsh_1.struct)([
28
29
  ;
29
30
  exports.FeeSettingsLayout = (0, borsh_1.struct)([
30
31
  (0, borsh_1.u16)('hostDepositFeeBps'),
32
+ (0, borsh_1.u16)('hostWithdrawFeeBps'),
31
33
  (0, borsh_1.u16)('hostManagementFeeBps'),
32
34
  (0, borsh_1.u16)('hostPerformanceFeeBps'),
33
35
  (0, borsh_1.u16)('creatorDepositFeeBps'),
36
+ (0, borsh_1.u16)('creatorWithdrawFeeBps'),
34
37
  (0, borsh_1.u16)('creatorManagementFeeBps'),
35
38
  (0, borsh_1.u16)('creatorPerformanceFeeBps'),
36
39
  (0, borsh_1.u16)('managersDepositFeeBps'),
40
+ (0, borsh_1.u16)('managerWithdrawFeeBps'),
37
41
  (0, borsh_1.u16)('managersManagementFeeBps'),
38
42
  (0, borsh_1.u16)('managersPerformanceFeeBps'),
39
43
  (0, borsh_1.u16)('basketDepositFeeBps'),
40
44
  (0, borsh_1.u16)('basketWithdrawFeeBps'),
45
+ (0, borsh_1.array)((0, borsh_1.u8)(), 32, 'extraData'),
41
46
  (0, borsh_1.u64)('modificationDelay'),
42
47
  ]);
43
48
  exports.ManagerSettingsLayout = (0, borsh_1.struct)([
@@ -48,15 +53,19 @@ exports.ManagerSettingsLayout = (0, borsh_1.struct)([
48
53
  ;
49
54
  exports.AutomationSettingsLayout = (0, borsh_1.struct)([
50
55
  (0, borsh_1.u8)('allowAutomation'),
51
- (0, borsh_1.u16)('rebalanceSlippageBps'),
52
- (0, borsh_1.u16)('rebalanceThresholdBps'),
53
- (0, borsh_1.u64)('rebalanceIntervalSeconds'),
56
+ (0, borsh_1.u16)('rebalanceSlippageThresholdBps'),
57
+ (0, borsh_1.u16)('perTradeRebalanceSlippageThresholdBps'),
58
+ (0, borsh_1.u16)('rebalanceActivationThresholdAbsBps'),
59
+ (0, borsh_1.u16)('rebalanceActivationThresholdRelBps'),
60
+ (0, borsh_1.u64)('rebalanceActivationCooldown'),
61
+ (0, borsh_1.array)((0, borsh_1.publicKey)(), 4, 'extraData'),
54
62
  (0, borsh_1.u64)('modificationDelay'),
55
63
  ]);
56
64
  ;
57
65
  exports.LpSettingsLayout = (0, borsh_1.struct)([
58
- (0, borsh_1.u16)('lpThresholdBps'),
59
66
  (0, borsh_1.u8)('allowLp'),
67
+ (0, borsh_1.u16)('lpThresholdBps'),
68
+ (0, borsh_1.array)((0, borsh_1.u8)(), 32, 'extraData'),
60
69
  (0, borsh_1.u64)('modificationDelay'),
61
70
  ]);
62
71
  ;
@@ -101,6 +110,7 @@ exports.BasketSettingsLayout = (0, borsh_1.struct)([
101
110
  exports.GlobalConfigLayout = (0, borsh_1.struct)([
102
111
  (0, borsh_1.publicKey)('admin'),
103
112
  (0, borsh_1.array)((0, borsh_1.publicKey)(), 3, 'owners'),
113
+ (0, borsh_1.u8)('allowInteractions'),
104
114
  (0, borsh_1.u8)('allowCreation'),
105
115
  (0, borsh_1.u8)('allowManagement'),
106
116
  (0, borsh_1.u8)('allowAutomation'),
@@ -112,10 +122,16 @@ exports.GlobalConfigLayout = (0, borsh_1.struct)([
112
122
  (0, borsh_1.u16)('maxPerformanceFeeBps'),
113
123
  (0, borsh_1.publicKey)('symmetryFeeCollector'),
114
124
  (0, borsh_1.u16)('symmetryDepositFeeBps'),
125
+ (0, borsh_1.u16)('symmetryDepositFeeShareBps'),
115
126
  (0, borsh_1.u16)('symmetryWithdrawFeeBps'),
116
- (0, borsh_1.u16)('symmetryRebalanceFeeBps'),
127
+ (0, borsh_1.u16)('symmetryWithdrawFeeShareBps'),
117
128
  (0, borsh_1.u16)('symmetryManagementFeeBps'),
129
+ (0, borsh_1.u16)('symmetryManagementFeeShareBps'),
118
130
  (0, borsh_1.u16)('symmetryPerformanceFeeBps'),
131
+ (0, borsh_1.u16)('symmetryPerformanceFeeShareBps'),
132
+ (0, borsh_1.u16)('symmetryTradeFeeBps'),
133
+ (0, borsh_1.u16)('symmetryLimitOrderFeeBps'),
134
+ (0, borsh_1.array)((0, borsh_1.u16)(), 16, 'symmetryFeesExtraData'),
119
135
  (0, borsh_1.publicKey)('bountyMint'),
120
136
  (0, borsh_1.u64)('minBountyForBasketAutomation'),
121
137
  (0, borsh_1.u64)('bountyBondAmount'),
@@ -131,4 +147,5 @@ exports.GlobalConfigLayout = (0, borsh_1.struct)([
131
147
  (0, borsh_1.u64)('priceUpdateDelayAfterCreation'),
132
148
  (0, borsh_1.u64)('priceUpdateLifetime'),
133
149
  (0, borsh_1.u64)('priceUpdateReexecutionDelay'),
150
+ (0, borsh_1.array)((0, borsh_1.u64)(), 32, 'extraData'),
134
151
  ]);