@haven-fi/solauto-sdk 1.0.39 → 1.0.41

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 (32) hide show
  1. package/dist/clients/solautoClient.d.ts +1 -1
  2. package/dist/clients/solautoClient.d.ts.map +1 -1
  3. package/dist/clients/solautoClient.js +3 -3
  4. package/dist/clients/solautoMarginfiClient.d.ts +1 -1
  5. package/dist/clients/solautoMarginfiClient.d.ts.map +1 -1
  6. package/dist/clients/solautoMarginfiClient.js +25 -9
  7. package/dist/generated/instructions/marginfiRebalance.d.ts +1 -1
  8. package/dist/generated/instructions/marginfiRebalance.d.ts.map +1 -1
  9. package/dist/generated/instructions/marginfiRebalance.js +2 -2
  10. package/dist/transactions/transactionUtils.d.ts.map +1 -1
  11. package/dist/transactions/transactionUtils.js +15 -13
  12. package/dist/transactions/transactionsManager.d.ts +22 -1
  13. package/dist/transactions/transactionsManager.d.ts.map +1 -1
  14. package/dist/transactions/transactionsManager.js +33 -3
  15. package/dist/types/solauto.d.ts +1 -1
  16. package/dist/types/solauto.d.ts.map +1 -1
  17. package/dist/utils/generalUtils.d.ts.map +1 -1
  18. package/dist/utils/generalUtils.js +1 -1
  19. package/dist/utils/jupiterUtils.d.ts +1 -1
  20. package/dist/utils/jupiterUtils.d.ts.map +1 -1
  21. package/dist/utils/jupiterUtils.js +6 -4
  22. package/local/shared.ts +7 -6
  23. package/package.json +1 -1
  24. package/src/clients/solautoClient.ts +6 -4
  25. package/src/clients/solautoMarginfiClient.ts +31 -19
  26. package/src/generated/instructions/marginfiRebalance.ts +3 -3
  27. package/src/transactions/transactionUtils.ts +37 -18
  28. package/src/transactions/transactionsManager.ts +50 -5
  29. package/src/types/solauto.ts +1 -1
  30. package/src/utils/generalUtils.ts +2 -1
  31. package/src/utils/jupiterUtils.ts +19 -13
  32. package/tests/transactions/solautoMarginfi.ts +6 -6
@@ -69,7 +69,7 @@ export declare abstract class SolautoClient {
69
69
  protocolInteraction(args: SolautoActionArgs): TransactionBuilder;
70
70
  abstract flashBorrow(flashLoanDetails: FlashLoanDetails, destinationTokenAccount: PublicKey): TransactionBuilder;
71
71
  abstract flashRepay(flashLoanDetails: FlashLoanDetails): TransactionBuilder;
72
- abstract rebalance(rebalanceStep: "A" | "B", swapDetails: JupSwapDetails, rebalanceType: SolautoRebalanceTypeArgs, targetLiqUtilizationRateBps?: number, limitGapBps?: number): TransactionBuilder;
72
+ abstract rebalance(rebalanceStep: "A" | "B", swapDetails: JupSwapDetails, rebalanceType: SolautoRebalanceTypeArgs, flashLoan?: FlashLoanDetails, targetLiqUtilizationRateBps?: number, limitGapBps?: number): TransactionBuilder;
73
73
  getFreshPositionState(): Promise<PositionState | undefined>;
74
74
  }
75
75
  //# sourceMappingURL=solautoClient.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"solautoClient.d.ts","sourceRoot":"","sources":["../../src/clients/solautoClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"solautoClient.d.ts","sourceRoot":"","sources":["../../src/clients/solautoClient.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAC;AACxC,OAAO,EAEL,UAAU,EACV,SAAS,EACV,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,MAAM,EACN,kBAAkB,EAClB,GAAG,EAQJ,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,aAAa,EAEd,MAAM,iDAAiD,CAAC;AACzD,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,wBAAwB,EACxB,yBAAyB,EACzB,gCAAgC,EAChC,sBAAsB,EASvB,MAAM,cAAc,CAAC;AAOtB,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAMvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAInE,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEpE,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,aAAa,CAAC;IAEvB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB,oBAAoB,CAAC,EAAE,SAAS,CAAC;IACjC,mBAAmB,CAAC,EAAE,SAAS,CAAC;CACjC;AAED,8BAAsB,aAAa;IAyCxB,SAAS,CAAC;IAxCZ,GAAG,EAAG,GAAG,CAAC;IACV,UAAU,EAAG,UAAU,CAAC;IACxB,eAAe,EAAG,eAAe,CAAC;IAElC,SAAS,EAAG,SAAS,CAAC;IACtB,MAAM,EAAG,MAAM,CAAC;IAEhB,UAAU,EAAG,MAAM,CAAC;IACpB,WAAW,EAAG,OAAO,CAAC;IACtB,eAAe,EAAG,SAAS,CAAC;IAC5B,mBAAmB,EAAG,eAAe,GAAG,IAAI,CAAC;IAC7C,oBAAoB,EAAG,aAAa,GAAG,SAAS,CAAC;IAEjD,UAAU,EAAG,SAAS,CAAC;IACvB,gBAAgB,EAAG,SAAS,CAAC;IAC7B,cAAc,EAAG,SAAS,CAAC;IAE3B,QAAQ,EAAG,SAAS,CAAC;IACrB,cAAc,EAAG,SAAS,CAAC;IAC3B,YAAY,EAAG,SAAS,CAAC;IAEzB,sBAAsB,EAAG,SAAS,CAAC;IACnC,0BAA0B,EAAG,aAAa,GAAG,IAAI,CAAC;IAClD,6BAA6B,EAAG,SAAS,CAAC;IAC1C,uBAAuB,EAAG,SAAS,CAAC;IAEpC,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,mBAAmB,CAAC,EAAE,SAAS,CAAC;IAChC,kBAAkB,CAAC,EAAE,SAAS,CAAC;IAE/B,iBAAiB,EAAG,SAAS,CAAC;IAC9B,mBAAmB,EAAG,SAAS,CAAC;IAEhC,mBAAmB,CAAC,EAAE,SAAS,CAAC;IAChC,mBAAmB,EAAG,SAAS,EAAE,CAAC;IAElC,mBAAmB,EAAE,mBAAmB,CAA6B;gBAG1E,YAAY,EAAE,MAAM,EACb,SAAS,CAAC,qBAAS;IAWtB,UAAU,CAAC,IAAI,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe;IAmH1E,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAMnB,wBAAwB;IAoB9B,mBAAmB,IAAI,MAAM,EAAE;IAK/B,gBAAgB,IAAI,SAAS,EAAE;IAiBzB,iCAAiC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAUzD,iBAAiB,IAAI,OAAO,CAChC;QAAE,WAAW,EAAE,kBAAkB,CAAC;QAAC,iBAAiB,EAAE,OAAO,CAAA;KAAE,GAAG,SAAS,CAC5E;IA2DD,uBAAuB,IAAI,yBAAyB,GAAG,SAAS;IAOhE,wBAAwB,IAAI,WAAW,GAAG,SAAS;IAOnD,sBAAsB,IAAI,kBAAkB;IAiB5C,mBAAmB,IAAI,kBAAkB;IAmBzC,YAAY,CACV,aAAa,CAAC,EAAE,gCAAgC,EAChD,GAAG,CAAC,EAAE,kBAAkB,GACvB,kBAAkB;IAuBrB,gBAAgB,CAAC,IAAI,EAAE,sBAAsB,GAAG,kBAAkB;IA2DlE,eAAe,IAAI,kBAAkB;IAWrC,WAAW,IAAI,kBAAkB;IA4BjC,QAAQ,CAAC,OAAO,IAAI,kBAAkB;IAEtC,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,kBAAkB;IAuFhE,QAAQ,CAAC,WAAW,CAClB,gBAAgB,EAAE,gBAAgB,EAClC,uBAAuB,EAAE,SAAS,GACjC,kBAAkB;IAErB,QAAQ,CAAC,UAAU,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,kBAAkB;IAE3E,QAAQ,CAAC,SAAS,CAChB,aAAa,EAAE,GAAG,GAAG,GAAG,EACxB,WAAW,EAAE,cAAc,EAC3B,aAAa,EAAE,wBAAwB,EACvC,SAAS,CAAC,EAAE,gBAAgB,EAC5B,2BAA2B,CAAC,EAAE,MAAM,EACpC,WAAW,CAAC,EAAE,MAAM,GACnB,kBAAkB;IAEf,qBAAqB,IAAI,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;CAYlE"}
@@ -172,9 +172,9 @@ class SolautoClient {
172
172
  addresses: accountsToAdd,
173
173
  })));
174
174
  }
175
- const addingReferredBy = accountsToAdd.length === 1;
176
- // && accountsToAdd[0].toString().toLowerCase() ===
177
- // this.referredBySupplyTa?.toString().toLowerCase();
175
+ const addingReferredBy = accountsToAdd.length === 1 &&
176
+ accountsToAdd[0].toString().toLowerCase() ===
177
+ this.referredBySupplyTa?.toString().toLowerCase();
178
178
  if (tx.getInstructions().length > 0) {
179
179
  this.log("Updating authority lookup table...");
180
180
  }
@@ -34,7 +34,7 @@ export declare class SolautoMarginfiClient extends SolautoClient {
34
34
  protocolInteraction(args: SolautoActionArgs): TransactionBuilder;
35
35
  private marginfiProtocolInteractionIx;
36
36
  private marginfiSolautoProtocolInteractionIx;
37
- rebalance(rebalanceStep: "A" | "B", swapDetails: JupSwapDetails, rebalanceType: SolautoRebalanceTypeArgs, targetLiqUtilizationRateBps?: number, limitGapBps?: number): TransactionBuilder;
37
+ rebalance(rebalanceStep: "A" | "B", swapDetails: JupSwapDetails, rebalanceType: SolautoRebalanceTypeArgs, flashLoan?: FlashLoanDetails, targetLiqUtilizationRateBps?: number, limitGapBps?: number): TransactionBuilder;
38
38
  flashBorrow(flashLoanDetails: FlashLoanDetails, destinationTokenAccount: PublicKey): TransactionBuilder;
39
39
  flashRepay(flashLoanDetails: FlashLoanDetails): TransactionBuilder;
40
40
  createIntermediaryMarginfiAccount(): TransactionBuilder;
@@ -1 +1 @@
1
- {"version":3,"file":"solautoMarginfiClient.d.ts","sourceRoot":"","sources":["../../src/clients/solautoMarginfiClient.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,MAAM,EACN,kBAAkB,EAMnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,SAAS,EAEV,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAK1D,OAAO,EACL,kBAAkB,EAElB,aAAa,EACb,iBAAiB,EACjB,wBAAwB,EACxB,gCAAgC,EAKjC,MAAM,cAAc,CAAC;AAGtB,OAAO,EAEL,eAAe,EAUhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAQnE,MAAM,WAAW,yBAA0B,SAAQ,iBAAiB;IAClE,eAAe,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IACrC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,aAAa,CAAC,EAAE,SAAS,CAAC;CAC3B;AAED,qBAAa,qBAAsB,SAAQ,aAAa;IACtD,OAAO,CAAC,WAAW,CAAkB;IAE9B,eAAe,EAAG,SAAS,CAAC;IAE5B,sBAAsB,EAAE,MAAM,CAAa;IAC3C,eAAe,EAAG,SAAS,GAAG,MAAM,CAAC;IACrC,iBAAiB,EAAG,SAAS,CAAC;IAC9B,aAAa,EAAG,SAAS,CAAC;IAE1B,0BAA0B,EAAG,qBAAqB,CAAC;IACnD,wBAAwB,EAAG,qBAAqB,CAAC;IAGjD,iCAAiC,CAAC,EAAE,MAAM,CAAC;IAC3C,6BAA6B,EAAG,SAAS,CAAC;IAC1C,2BAA2B,CAAC,EAAE,eAAe,CAAC;IAE/C,UAAU,CAAC,IAAI,EAAE,yBAAyB;IA0C1C,8BAA8B;IAsCpC,mBAAmB,IAAI,MAAM,EAAE;IAI/B,gBAAgB,IAAI,SAAS,EAAE;IAQ/B,yBAAyB,IAAI,kBAAkB;IAS/C,YAAY,CACV,aAAa,CAAC,EAAE,gCAAgC,EAChD,GAAG,CAAC,EAAE,kBAAkB,GACvB,kBAAkB;IAMrB,OAAO,CAAC,sBAAsB;IA2C9B,OAAO,IAAI,kBAAkB;IAc7B,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,kBAAkB;IAUhE,OAAO,CAAC,6BAA6B;IAmErC,OAAO,CAAC,oCAAoC;IA8D5C,SAAS,CACP,aAAa,EAAE,GAAG,GAAG,GAAG,EACxB,WAAW,EAAE,cAAc,EAC3B,aAAa,EAAE,wBAAwB,EACvC,2BAA2B,CAAC,EAAE,MAAM,EACpC,WAAW,CAAC,EAAE,MAAM,GACnB,kBAAkB;IAgDrB,WAAW,CACT,gBAAgB,EAAE,gBAAgB,EAClC,uBAAuB,EAAE,SAAS,GACjC,kBAAkB;IA2BrB,UAAU,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,kBAAkB;IA8ElE,iCAAiC,IAAI,kBAAkB;IASjD,qBAAqB,IAAI,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;CAiBlE"}
1
+ {"version":3,"file":"solautoMarginfiClient.d.ts","sourceRoot":"","sources":["../../src/clients/solautoMarginfiClient.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,MAAM,EACN,kBAAkB,EAMnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAA8B,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAK1D,OAAO,EACL,kBAAkB,EAElB,aAAa,EACb,iBAAiB,EACjB,wBAAwB,EACxB,gCAAgC,EAKjC,MAAM,cAAc,CAAC;AAGtB,OAAO,EAEL,eAAe,EAUhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAQnE,MAAM,WAAW,yBAA0B,SAAQ,iBAAiB;IAClE,eAAe,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IACrC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,aAAa,CAAC,EAAE,SAAS,CAAC;CAC3B;AAED,qBAAa,qBAAsB,SAAQ,aAAa;IACtD,OAAO,CAAC,WAAW,CAAkB;IAE9B,eAAe,EAAG,SAAS,CAAC;IAE5B,sBAAsB,EAAE,MAAM,CAAa;IAC3C,eAAe,EAAG,SAAS,GAAG,MAAM,CAAC;IACrC,iBAAiB,EAAG,SAAS,CAAC;IAC9B,aAAa,EAAG,SAAS,CAAC;IAE1B,0BAA0B,EAAG,qBAAqB,CAAC;IACnD,wBAAwB,EAAG,qBAAqB,CAAC;IAGjD,iCAAiC,CAAC,EAAE,MAAM,CAAC;IAC3C,6BAA6B,EAAG,SAAS,CAAC;IAC1C,2BAA2B,CAAC,EAAE,eAAe,CAAC;IAE/C,UAAU,CAAC,IAAI,EAAE,yBAAyB;IA0C1C,8BAA8B;IAsCpC,mBAAmB,IAAI,MAAM,EAAE;IAI/B,gBAAgB,IAAI,SAAS,EAAE;IAQ/B,yBAAyB,IAAI,kBAAkB;IAS/C,YAAY,CACV,aAAa,CAAC,EAAE,gCAAgC,EAChD,GAAG,CAAC,EAAE,kBAAkB,GACvB,kBAAkB;IAMrB,OAAO,CAAC,sBAAsB;IA6C9B,OAAO,IAAI,kBAAkB;IAc7B,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,kBAAkB;IAUhE,OAAO,CAAC,6BAA6B;IAmErC,OAAO,CAAC,oCAAoC;IA8D5C,SAAS,CACP,aAAa,EAAE,GAAG,GAAG,GAAG,EACxB,WAAW,EAAE,cAAc,EAC3B,aAAa,EAAE,wBAAwB,EACvC,SAAS,CAAC,EAAE,gBAAgB,EAC5B,2BAA2B,CAAC,EAAE,MAAM,EACpC,WAAW,CAAC,EAAE,MAAM,GACnB,kBAAkB;IA4DrB,WAAW,CACT,gBAAgB,EAAE,gBAAgB,EAClC,uBAAuB,EAAE,SAAS,GACjC,kBAAkB;IA2BrB,UAAU,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,kBAAkB;IA8ElE,iCAAiC,IAAI,kBAAkB;IASjD,qBAAqB,IAAI,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;CAiBlE"}
@@ -125,7 +125,9 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
125
125
  settingParams: settingParams ?? null,
126
126
  dca: dca ?? null,
127
127
  },
128
- marginfiAccountSeedIdx: !this.selfManaged ? this.marginfiAccountSeedIdx : null,
128
+ marginfiAccountSeedIdx: !this.selfManaged
129
+ ? this.marginfiAccountSeedIdx
130
+ : null,
129
131
  });
130
132
  }
131
133
  refresh() {
@@ -248,15 +250,21 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
248
250
  solautoAction: args,
249
251
  });
250
252
  }
251
- rebalance(rebalanceStep, swapDetails, rebalanceType, targetLiqUtilizationRateBps, limitGapBps) {
253
+ rebalance(rebalanceStep, swapDetails, rebalanceType, flashLoan, targetLiqUtilizationRateBps, limitGapBps) {
254
+ const inputIsSupply = swapDetails.inputMint.equals(this.supplyMint);
255
+ const outputIsSupply = swapDetails.outputMint.equals(this.supplyMint);
256
+ const needSupplyAccounts = (inputIsSupply && rebalanceStep === "A") ||
257
+ (outputIsSupply && rebalanceStep === "B") ||
258
+ (inputIsSupply && flashLoan !== undefined && rebalanceStep == "B");
259
+ const needDebtAccounts = (!inputIsSupply && rebalanceStep === "A") ||
260
+ (!outputIsSupply && rebalanceStep === "B") ||
261
+ (!inputIsSupply && flashLoan !== undefined && rebalanceStep == "B");
252
262
  return (0, generated_1.marginfiRebalance)(this.umi, {
253
263
  signer: this.signer,
254
264
  marginfiProgram: (0, umi_1.publicKey)(marginfi_sdk_1.MARGINFI_PROGRAM_ID),
255
265
  ixsSysvar: (0, umi_1.publicKey)(web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY),
256
266
  solautoFeesSupplyTa: rebalanceStep === "B" ? (0, umi_1.publicKey)(this.solautoFeesSupplyTa) : undefined,
257
- authorityReferralState: rebalanceStep === "B"
258
- ? (0, umi_1.publicKey)(this.authorityReferralState)
259
- : undefined,
267
+ authorityReferralState: (0, umi_1.publicKey)(this.authorityReferralState),
260
268
  referredBySupplyTa: rebalanceStep === "B" && this.referredBySupplyTa
261
269
  ? (0, umi_1.publicKey)(this.referredBySupplyTa)
262
270
  : undefined,
@@ -270,14 +278,22 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
270
278
  signerSupplyTa: this.selfManaged
271
279
  ? (0, umi_1.publicKey)(this.signerSupplyTa)
272
280
  : undefined,
273
- vaultSupplyTa: (0, umi_1.publicKey)(this.marginfiSupplyBankAccounts.liquidityVault),
274
- supplyVaultAuthority: (0, umi_1.publicKey)(this.marginfiSupplyBankAccounts.vaultAuthority),
281
+ vaultSupplyTa: needSupplyAccounts
282
+ ? (0, umi_1.publicKey)(this.marginfiSupplyBankAccounts.liquidityVault)
283
+ : undefined,
284
+ supplyVaultAuthority: needSupplyAccounts
285
+ ? (0, umi_1.publicKey)(this.marginfiSupplyBankAccounts.vaultAuthority)
286
+ : undefined,
275
287
  debtBank: (0, umi_1.publicKey)(this.marginfiDebtBankAccounts.bank),
276
288
  debtPriceOracle: (0, umi_1.publicKey)(this.marginfiDebtBankAccounts.priceOracle),
277
289
  positionDebtTa: (0, umi_1.publicKey)(this.positionDebtTa),
278
290
  signerDebtTa: this.selfManaged ? (0, umi_1.publicKey)(this.signerDebtTa) : undefined,
279
- vaultDebtTa: (0, umi_1.publicKey)(this.marginfiDebtBankAccounts.liquidityVault),
280
- debtVaultAuthority: (0, umi_1.publicKey)(this.marginfiDebtBankAccounts.vaultAuthority),
291
+ vaultDebtTa: needDebtAccounts
292
+ ? (0, umi_1.publicKey)(this.marginfiDebtBankAccounts.liquidityVault)
293
+ : undefined,
294
+ debtVaultAuthority: needDebtAccounts
295
+ ? (0, umi_1.publicKey)(this.marginfiDebtBankAccounts.vaultAuthority)
296
+ : undefined,
281
297
  rebalanceType,
282
298
  targetLiqUtilizationRateBps: targetLiqUtilizationRateBps ?? null,
283
299
  limitGapBps: limitGapBps ?? null,
@@ -15,7 +15,7 @@ export type MarginfiRebalanceInstructionAccounts = {
15
15
  tokenProgram?: PublicKey | Pda;
16
16
  ixsSysvar: PublicKey | Pda;
17
17
  solautoFeesSupplyTa?: PublicKey | Pda;
18
- authorityReferralState?: PublicKey | Pda;
18
+ authorityReferralState: PublicKey | Pda;
19
19
  referredBySupplyTa?: PublicKey | Pda;
20
20
  solautoPosition: PublicKey | Pda;
21
21
  marginfiGroup: PublicKey | Pda;
@@ -1 +1 @@
1
- {"version":3,"file":"marginfiRebalance.d.ts","sourceRoot":"","sources":["../../../src/generated/instructions/marginfiRebalance.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,OAAO,EACP,MAAM,EACN,gBAAgB,EAChB,GAAG,EACH,SAAS,EACT,MAAM,EACN,kBAAkB,EAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,UAAU,EAMX,MAAM,sCAAsC,CAAC;AAM9C,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EAEzB,MAAM,UAAU,CAAC;AAGlB,MAAM,MAAM,oCAAoC,GAAG;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,SAAS,GAAG,GAAG,CAAC;IACjC,aAAa,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;IAChC,YAAY,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;IAC/B,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;IAC3B,mBAAmB,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;IACtC,sBAAsB,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;IACzC,kBAAkB,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;IACrC,eAAe,EAAE,SAAS,GAAG,GAAG,CAAC;IACjC,aAAa,EAAE,SAAS,GAAG,GAAG,CAAC;IAC/B,eAAe,EAAE,SAAS,GAAG,GAAG,CAAC;IACjC,cAAc,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;IACjC,UAAU,EAAE,SAAS,GAAG,GAAG,CAAC;IAC5B,iBAAiB,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;IACpC,gBAAgB,EAAE,SAAS,GAAG,GAAG,CAAC;IAClC,cAAc,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;IACjC,aAAa,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;IAChC,oBAAoB,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;IACvC,QAAQ,EAAE,SAAS,GAAG,GAAG,CAAC;IAC1B,eAAe,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;IAClC,cAAc,EAAE,SAAS,GAAG,GAAG,CAAC;IAChC,YAAY,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;IAC/B,WAAW,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;IAC9B,kBAAkB,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;CACtC,CAAC;AAGF,MAAM,MAAM,gCAAgC,GAAG;IAC7C,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,oBAAoB,CAAC;IACpC,2BAA2B,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5C,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,oCAAoC,GAAG;IACjD,aAAa,EAAE,wBAAwB,CAAC;IACxC,2BAA2B,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACtD,WAAW,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;CACvC,CAAC;AAEF,wBAAgB,6CAA6C,IAAI,UAAU,CACzE,oCAAoC,EACpC,gCAAgC,CACjC,CAoBA;AAGD,MAAM,MAAM,gCAAgC,GAC1C,oCAAoC,CAAC;AAGvC,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,EAClC,KAAK,EAAE,oCAAoC,GAAG,gCAAgC,GAC7E,kBAAkB,CA6KpB"}
1
+ {"version":3,"file":"marginfiRebalance.d.ts","sourceRoot":"","sources":["../../../src/generated/instructions/marginfiRebalance.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,OAAO,EACP,MAAM,EACN,gBAAgB,EAChB,GAAG,EACH,SAAS,EACT,MAAM,EACN,kBAAkB,EAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,UAAU,EAMX,MAAM,sCAAsC,CAAC;AAM9C,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EAEzB,MAAM,UAAU,CAAC;AAGlB,MAAM,MAAM,oCAAoC,GAAG;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,SAAS,GAAG,GAAG,CAAC;IACjC,aAAa,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;IAChC,YAAY,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;IAC/B,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;IAC3B,mBAAmB,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;IACtC,sBAAsB,EAAE,SAAS,GAAG,GAAG,CAAC;IACxC,kBAAkB,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;IACrC,eAAe,EAAE,SAAS,GAAG,GAAG,CAAC;IACjC,aAAa,EAAE,SAAS,GAAG,GAAG,CAAC;IAC/B,eAAe,EAAE,SAAS,GAAG,GAAG,CAAC;IACjC,cAAc,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;IACjC,UAAU,EAAE,SAAS,GAAG,GAAG,CAAC;IAC5B,iBAAiB,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;IACpC,gBAAgB,EAAE,SAAS,GAAG,GAAG,CAAC;IAClC,cAAc,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;IACjC,aAAa,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;IAChC,oBAAoB,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;IACvC,QAAQ,EAAE,SAAS,GAAG,GAAG,CAAC;IAC1B,eAAe,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;IAClC,cAAc,EAAE,SAAS,GAAG,GAAG,CAAC;IAChC,YAAY,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;IAC/B,WAAW,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;IAC9B,kBAAkB,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;CACtC,CAAC;AAGF,MAAM,MAAM,gCAAgC,GAAG;IAC7C,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,oBAAoB,CAAC;IACpC,2BAA2B,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5C,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,oCAAoC,GAAG;IACjD,aAAa,EAAE,wBAAwB,CAAC;IACxC,2BAA2B,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACtD,WAAW,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;CACvC,CAAC;AAEF,wBAAgB,6CAA6C,IAAI,UAAU,CACzE,oCAAoC,EACpC,gCAAgC,CACjC,CAoBA;AAGD,MAAM,MAAM,gCAAgC,GAC1C,oCAAoC,CAAC;AAGvC,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,EAClC,KAAK,EAAE,oCAAoC,GAAG,gCAAgC,GAC7E,kBAAkB,CA6KpB"}
@@ -114,7 +114,7 @@ function marginfiRebalance(context, input) {
114
114
  },
115
115
  supplyVaultAuthority: {
116
116
  index: 17,
117
- isWritable: true,
117
+ isWritable: false,
118
118
  value: input.supplyVaultAuthority ?? null,
119
119
  },
120
120
  debtBank: {
@@ -144,7 +144,7 @@ function marginfiRebalance(context, input) {
144
144
  },
145
145
  debtVaultAuthority: {
146
146
  index: 23,
147
- isWritable: true,
147
+ isWritable: false,
148
148
  value: input.debtVaultAuthority ?? null,
149
149
  },
150
150
  };
@@ -1 +1 @@
1
- {"version":3,"file":"transactionUtils.d.ts","sourceRoot":"","sources":["../../src/transactions/transactionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,kBAAkB,EAClB,GAAG,EAGJ,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAGL,OAAO,IAAI,eAAe,EAC3B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAEL,aAAa,EASd,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAqMzD,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,EACtB,sBAAsB,EAAE,MAAM,EAAE,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CAgG7B;AAmLD,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,GACrB,OAAO,CAAC,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,CA4BnD;AAED,wBAAsB,gCAAgC,CACpD,MAAM,EAAE,aAAa,EACrB,2BAA2B,CAAC,EAAE,MAAM,EACpC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CACN;IACE,EAAE,EAAE,kBAAkB,CAAC;IACvB,oBAAoB,EAAE,MAAM,EAAE,CAAC;CAChC,GACD,SAAS,CACZ,CA4GA;AAED,wBAAsB,gCAAgC,CACpD,GAAG,EAAE,GAAG,EACR,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,eAAe,GAC5B,OAAO,CAAC,CAAC,kBAAkB,EAAE,MAAM,EAAE,CAAC,CAAC,CA8BzC"}
1
+ {"version":3,"file":"transactionUtils.d.ts","sourceRoot":"","sources":["../../src/transactions/transactionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,kBAAkB,EAClB,GAAG,EAGJ,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAGL,OAAO,IAAI,eAAe,EAC3B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAEL,aAAa,EASd,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAqMzD,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,EACtB,sBAAsB,EAAE,MAAM,EAAE,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CAgH7B;AAkLD,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,GACrB,OAAO,CAAC,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,CA4BnD;AAED,wBAAsB,gCAAgC,CACpD,MAAM,EAAE,aAAa,EACrB,2BAA2B,CAAC,EAAE,MAAM,EACpC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CACN;IACE,EAAE,EAAE,kBAAkB,CAAC;IACvB,oBAAoB,EAAE,MAAM,EAAE,CAAC;CAChC,GACD,SAAS,CACZ,CAgHA;AAED,wBAAsB,gCAAgC,CACpD,GAAG,EAAE,GAAG,EACR,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,eAAe,GAC5B,OAAO,CAAC,CAAC,kBAAkB,EAAE,MAAM,EAAE,CAAC,CAAC,CA8BzC"}
@@ -115,8 +115,7 @@ async function rebalanceChoresBefore(client, tx, accountsGettingCreated) {
115
115
  if (rebalanceInstructions.length === 0) {
116
116
  return (0, umi_1.transactionBuilder)();
117
117
  }
118
- const usesAccount = (key) => rebalanceInstructions
119
- .some((t) => t.keys.some((k) => (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(k.pubkey).equals(key)));
118
+ const usesAccount = (key) => rebalanceInstructions.some((t) => t.keys.some((k) => (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(k.pubkey).equals(key)));
120
119
  const checkReferralSupplyTa = client.referredBySupplyTa && usesAccount(client.referredBySupplyTa);
121
120
  const checkSolautoFeesTa = usesAccount(client.solautoFeesSupplyTa);
122
121
  const checkIntermediaryMfiAccount = client.lendingPlatform === generated_1.LendingPlatform.Marginfi &&
@@ -134,7 +133,7 @@ async function rebalanceChoresBefore(client, tx, accountsGettingCreated) {
134
133
  ...[checkSignerSupplyTa ? client.signerSupplyTa : web3_js_1.PublicKey.default],
135
134
  ...[checkSignerDebtTa ? client.signerDebtTa : web3_js_1.PublicKey.default],
136
135
  ];
137
- const [referredBySupplyTa, solautoFeesSupplyTa, intermediaryMarginfiAccount, signerSupplyTa, signerDebtTa] = await client.umi.rpc.getAccounts(accountsNeeded.map((x) => (0, umi_1.publicKey)(x ?? web3_js_1.PublicKey.default)));
136
+ const [referredBySupplyTa, solautoFeesSupplyTa, intermediaryMarginfiAccount, signerSupplyTa, signerDebtTa,] = await client.umi.rpc.getAccounts(accountsNeeded.map((x) => (0, umi_1.publicKey)(x ?? web3_js_1.PublicKey.default)));
138
137
  let chores = (0, umi_1.transactionBuilder)();
139
138
  if (checkReferralSupplyTa && !(0, generalUtils_1.rpcAccountCreated)(referredBySupplyTa)) {
140
139
  client.log("Creating referred-by TA for ", client.supplyMint.toString());
@@ -148,12 +147,16 @@ async function rebalanceChoresBefore(client, tx, accountsGettingCreated) {
148
147
  !(0, generalUtils_1.rpcAccountCreated)(intermediaryMarginfiAccount)) {
149
148
  chores = chores.add(client.createIntermediaryMarginfiAccount());
150
149
  }
151
- if (checkSignerSupplyTa && !(0, generalUtils_1.rpcAccountCreated)(signerSupplyTa) && !accountsGettingCreated.includes(signerSupplyTa.publicKey.toString())) {
150
+ if (checkSignerSupplyTa &&
151
+ !(0, generalUtils_1.rpcAccountCreated)(signerSupplyTa) &&
152
+ !accountsGettingCreated.includes(signerSupplyTa.publicKey.toString())) {
152
153
  client.log("Creating signer supply token account");
153
154
  chores = chores.add((0, solanaUtils_1.createAssociatedTokenAccountUmiIx)(client.signer, (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(client.signer.publicKey), client.supplyMint));
154
155
  accountsGettingCreated.push(signerSupplyTa.publicKey.toString());
155
156
  }
156
- if (checkSignerDebtTa && !(0, generalUtils_1.rpcAccountCreated)(signerDebtTa) && !accountsGettingCreated.includes(signerDebtTa.publicKey.toString())) {
157
+ if (checkSignerDebtTa &&
158
+ !(0, generalUtils_1.rpcAccountCreated)(signerDebtTa) &&
159
+ !accountsGettingCreated.includes(signerDebtTa.publicKey.toString())) {
157
160
  client.log("Creating signer debt token account");
158
161
  chores = chores.add((0, solanaUtils_1.createAssociatedTokenAccountUmiIx)(client.signer, (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(client.signer.publicKey), client.debtMint));
159
162
  accountsGettingCreated.push(signerDebtTa.publicKey.toString());
@@ -177,7 +180,7 @@ function getRebalanceInstructions(tx) {
177
180
  const discriminator = serializer.serialize({
178
181
  limitGapBps: 0,
179
182
  rebalanceType: generated_1.SolautoRebalanceType.None,
180
- targetLiqUtilizationRateBps: 0
183
+ targetLiqUtilizationRateBps: 0,
181
184
  })[0];
182
185
  const [data, _] = serializer.deserialize(x.data);
183
186
  if (data.discriminator === discriminator) {
@@ -195,8 +198,7 @@ function getSolautoActions(tx) {
195
198
  if (x.programId === generated_1.SOLAUTO_PROGRAM_ID) {
196
199
  try {
197
200
  const serializer = (0, generated_1.getMarginfiProtocolInteractionInstructionDataSerializer)();
198
- const discriminator = serializer
199
- .serialize({
201
+ const discriminator = serializer.serialize({
200
202
  solautoAction: (0, generated_1.solautoAction)("Deposit", [BigInt(0)]),
201
203
  })[0];
202
204
  const [data, _] = serializer.deserialize(x.data);
@@ -328,7 +330,7 @@ async function buildSolautoRebalanceTransaction(client, targetLiqUtilizationRate
328
330
  const values = (0, rebalanceUtils_1.getRebalanceValues)(client, targetLiqUtilizationRateBps);
329
331
  client.log("Rebalance values: ", values);
330
332
  const swapDetails = (0, rebalanceUtils_1.getJupSwapRebalanceDetails)(client, values, targetLiqUtilizationRateBps, attemptNum);
331
- const { jupQuote, lookupTableAddresses, setupInstructions, tokenLedgerIx, swapIx, } = await (0, jupiterUtils_1.getJupSwapTransaction)(client.signer, swapDetails);
333
+ const { jupQuote, lookupTableAddresses, setupInstructions, tokenLedgerIx, swapIx, } = await (0, jupiterUtils_1.getJupSwapTransaction)(client.signer, swapDetails, attemptNum);
332
334
  const flashLoan = (0, rebalanceUtils_1.getFlashLoanDetails)(client, values, jupQuote);
333
335
  let tx = (0, umi_1.transactionBuilder)();
334
336
  if (flashLoan) {
@@ -343,11 +345,11 @@ async function buildSolautoRebalanceTransaction(client, targetLiqUtilizationRate
343
345
  client.flashBorrow(flashLoan, (0, accountUtils_1.getTokenAccount)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(client.signer.publicKey), swapDetails.inputMint)),
344
346
  ...(addFirstRebalance
345
347
  ? [
346
- client.rebalance("A", swapDetails, rebalanceType, targetLiqUtilizationRateBps),
348
+ client.rebalance("A", swapDetails, rebalanceType, flashLoan, targetLiqUtilizationRateBps),
347
349
  ]
348
350
  : []),
349
351
  swapIx,
350
- client.rebalance("B", swapDetails, rebalanceType, targetLiqUtilizationRateBps),
352
+ client.rebalance("B", swapDetails, rebalanceType, flashLoan, targetLiqUtilizationRateBps),
351
353
  client.flashRepay(flashLoan),
352
354
  ]);
353
355
  }
@@ -356,9 +358,9 @@ async function buildSolautoRebalanceTransaction(client, targetLiqUtilizationRate
356
358
  tx = tx.add([
357
359
  setupInstructions,
358
360
  tokenLedgerIx,
359
- client.rebalance("A", swapDetails, rebalanceType, targetLiqUtilizationRateBps),
361
+ client.rebalance("A", swapDetails, rebalanceType, undefined, targetLiqUtilizationRateBps),
360
362
  swapIx,
361
- client.rebalance("B", swapDetails, rebalanceType, targetLiqUtilizationRateBps),
363
+ client.rebalance("B", swapDetails, rebalanceType, undefined, targetLiqUtilizationRateBps),
362
364
  ]);
363
365
  }
364
366
  if (client.solautoPositionState.liqUtilizationRateBps >
@@ -1,6 +1,13 @@
1
- import { TransactionBuilder } from "@metaplex-foundation/umi";
1
+ import { AddressLookupTableInput, TransactionBuilder } from "@metaplex-foundation/umi";
2
2
  import { SolautoClient } from "../clients/solautoClient";
3
3
  import { ErrorsToThrow } from "../utils/generalUtils";
4
+ declare class LookupTables {
5
+ private client;
6
+ defaultLuts: string[];
7
+ cache: AddressLookupTableInput[];
8
+ constructor(client: SolautoClient);
9
+ getLutInputs(additionalAddresses: string[]): Promise<AddressLookupTableInput[]>;
10
+ }
4
11
  export declare class TransactionItem {
5
12
  fetchTx: (attemptNum: number) => Promise<{
6
13
  tx: TransactionBuilder;
@@ -17,6 +24,18 @@ export declare class TransactionItem {
17
24
  refetch(attemptNum: number): Promise<void>;
18
25
  uniqueAccounts(): string[];
19
26
  }
27
+ declare class TransactionSet {
28
+ private client;
29
+ lookupTables: LookupTables;
30
+ items: TransactionItem[];
31
+ constructor(client: SolautoClient, lookupTables: LookupTables, items?: TransactionItem[]);
32
+ fitsWith(item: TransactionItem): Promise<boolean>;
33
+ add(...items: TransactionItem[]): void;
34
+ refetchAll(attemptNum: number): Promise<void>;
35
+ getSingleTransaction(): Promise<TransactionBuilder>;
36
+ lutAddresses(): string[];
37
+ name(): string;
38
+ }
20
39
  export declare enum TransactionStatus {
21
40
  Skipped = "Skipped",
22
41
  Processing = "Processing",
@@ -40,6 +59,8 @@ export declare class TransactionsManager {
40
59
  constructor(client: SolautoClient, items: TransactionItem[], statusCallback?: ((statuses: TransactionManagerStatuses) => void) | undefined, simulateOnly?: boolean | undefined, mustBeAtomic?: boolean | undefined, errorsToThrow?: ErrorsToThrow | undefined);
41
60
  private assembleTransactionSets;
42
61
  updateStatus(name: string, status: TransactionStatus, txSig?: string): void;
62
+ debugAccounts(itemSet: TransactionSet, tx: TransactionBuilder): Promise<void>;
43
63
  send(): Promise<void>;
44
64
  }
65
+ export {};
45
66
  //# sourceMappingURL=transactionsManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transactionsManager.d.ts","sourceRoot":"","sources":["../../src/transactions/transactionsManager.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAKzD,OAAO,EACL,aAAa,EAEd,MAAM,uBAAuB,CAAC;AAqC/B,qBAAa,eAAe;IAKjB,OAAO,EAAE,CACd,UAAU,EAAE,MAAM,KACf,OAAO,CACV;QAAE,EAAE,EAAE,kBAAkB,CAAC;QAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,SAAS,CACxE;IACM,IAAI,CAAC;IATd,oBAAoB,EAAG,MAAM,EAAE,CAAC;IAChC,EAAE,CAAC,EAAE,kBAAkB,CAAC;gBAGf,OAAO,EAAE,CACd,UAAU,EAAE,MAAM,KACf,OAAO,CACV;QAAE,EAAE,EAAE,kBAAkB,CAAC;QAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,SAAS,CACxE,EACM,IAAI,CAAC,oBAAQ;IAGhB,UAAU;IAIV,OAAO,CAAC,UAAU,EAAE,MAAM;IAMhC,cAAc,IAAI,MAAM,EAAE;CAY3B;AAgFD,oBAAY,iBAAiB;IAC3B,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,UAAU,eAAe;CAC1B;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,iBAAiB,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,EAAE,CAAC;AAEJ,qBAAa,mBAAmB;IAK5B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,cAAc,CAAC;IACvB,OAAO,CAAC,YAAY,CAAC;IACrB,OAAO,CAAC,YAAY,CAAC;IACrB,OAAO,CAAC,aAAa,CAAC;IATxB,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,YAAY,CAAe;gBAGzB,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,eAAe,EAAE,EACxB,cAAc,CAAC,6CAA4C,IAAI,aAAA,EAC/D,YAAY,CAAC,qBAAS,EACtB,YAAY,CAAC,qBAAS,EACtB,aAAa,CAAC,2BAAe;YAKzB,uBAAuB;IAsCrC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,KAAK,CAAC,EAAE,MAAM;IAgB9D,IAAI;CAgJX"}
1
+ {"version":3,"file":"transactionsManager.d.ts","sourceRoot":"","sources":["../../src/transactions/transactionsManager.ts"],"names":[],"mappings":"AACA,OAAO,EACL,uBAAuB,EAGvB,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAKzD,OAAO,EACL,aAAa,EAEd,MAAM,uBAAuB,CAAC;AAK/B,cAAM,YAAY;IAIJ,OAAO,CAAC,MAAM;IAH1B,WAAW,EAAE,MAAM,EAAE,CAAM;IAC3B,KAAK,EAAE,uBAAuB,EAAE,CAAM;gBAElB,MAAM,EAAE,aAAa;IAInC,YAAY,CAChB,mBAAmB,EAAE,MAAM,EAAE,GAC5B,OAAO,CAAC,uBAAuB,EAAE,CAAC;CAqBtC;AAED,qBAAa,eAAe;IAKjB,OAAO,EAAE,CACd,UAAU,EAAE,MAAM,KACf,OAAO,CACV;QAAE,EAAE,EAAE,kBAAkB,CAAC;QAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,SAAS,CACxE;IACM,IAAI,CAAC;IATd,oBAAoB,EAAG,MAAM,EAAE,CAAC;IAChC,EAAE,CAAC,EAAE,kBAAkB,CAAC;gBAGf,OAAO,EAAE,CACd,UAAU,EAAE,MAAM,KACf,OAAO,CACV;QAAE,EAAE,EAAE,kBAAkB,CAAC;QAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,SAAS,CACxE,EACM,IAAI,CAAC,oBAAQ;IAGhB,UAAU;IAIV,OAAO,CAAC,UAAU,EAAE,MAAM;IAMhC,cAAc,IAAI,MAAM,EAAE;CAY3B;AAED,cAAM,cAAc;IAEhB,OAAO,CAAC,MAAM;IACP,YAAY,EAAE,YAAY;IAC1B,KAAK,EAAE,eAAe,EAAE;gBAFvB,MAAM,EAAE,aAAa,EACtB,YAAY,EAAE,YAAY,EAC1B,KAAK,GAAE,eAAe,EAAO;IAGhC,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;IA0BvD,GAAG,CAAC,GAAG,KAAK,EAAE,eAAe,EAAE;IAMzB,UAAU,CAAC,UAAU,EAAE,MAAM;IAO7B,oBAAoB,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAYzD,YAAY,IAAI,MAAM,EAAE;IAMxB,IAAI,IAAI,MAAM;CAYf;AAED,oBAAY,iBAAiB;IAC3B,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,UAAU,eAAe;CAC1B;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,iBAAiB,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,EAAE,CAAC;AAEJ,qBAAa,mBAAmB;IAK5B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,cAAc,CAAC;IACvB,OAAO,CAAC,YAAY,CAAC;IACrB,OAAO,CAAC,YAAY,CAAC;IACrB,OAAO,CAAC,aAAa,CAAC;IATxB,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,YAAY,CAAe;gBAGzB,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,eAAe,EAAE,EACxB,cAAc,CAAC,6CAA4C,IAAI,aAAA,EAC/D,YAAY,CAAC,qBAAS,EACtB,YAAY,CAAC,qBAAS,EACtB,aAAa,CAAC,2BAAe;YAKzB,uBAAuB;IA0CrC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,KAAK,CAAC,EAAE,MAAM;IAiB9D,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,kBAAkB;IA6B7D,IAAI;CAyJX"}
@@ -29,7 +29,7 @@ class LookupTables {
29
29
  const additionalInputs = await (0, solanaUtils_1.getAdressLookupInputs)(this.client.umi, missingAddresses);
30
30
  this.cache.push(...additionalInputs);
31
31
  }
32
- return this.cache.filter((x) => addresses.includes(x.publicKey.toString()));
32
+ return this.cache;
33
33
  }
34
34
  }
35
35
  class TransactionItem {
@@ -141,7 +141,11 @@ class TransactionsManager {
141
141
  }
142
142
  const transaction = item.tx.setAddressLookupTables(await this.lookupTables.getLutInputs(item.lookupTableAddresses));
143
143
  if (!transaction.fitsInOneTransaction(this.client.umi)) {
144
- throw new Error(`Transaction exceeds max transaction size (${transaction.getTransactionSize(this.client.umi)})`);
144
+ // TODO: revert me
145
+ // throw new Error(
146
+ // `Transaction exceeds max transaction size (${transaction.getTransactionSize(this.client.umi)})`
147
+ // );
148
+ transactionSets.push(new TransactionSet(this.client, this.lookupTables, [item]));
145
149
  }
146
150
  else {
147
151
  let newSet = new TransactionSet(this.client, this.lookupTables, [item]);
@@ -176,9 +180,32 @@ class TransactionsManager {
176
180
  this.client.log(`${name} is ${status.toString().toLowerCase()}`);
177
181
  this.statusCallback?.(this.statuses);
178
182
  }
183
+ // TODO remove me
184
+ async debugAccounts(itemSet, tx) {
185
+ const lutInputs = await itemSet.lookupTables.getLutInputs([]);
186
+ const lutAccounts = lutInputs.map((x) => x.addresses).flat();
187
+ const keys = tx
188
+ .getInstructions()
189
+ .map((x) => x.keys)
190
+ .flat();
191
+ for (const ix of tx.getInstructions()) {
192
+ const ixAccounts = ix.keys.map((x) => x.pubkey);
193
+ const accountsNotInLut = ixAccounts.filter((x) => !lutAccounts.includes(x));
194
+ console.log("Program", ix.programId, " data ", ix.data.length, ix.keys.filter((x) => lutAccounts.includes(x.pubkey)).length * 3);
195
+ if (accountsNotInLut.length > 0) {
196
+ console.log("Accounts not in LUT:");
197
+ for (const key of accountsNotInLut) {
198
+ console.log(key.toString());
199
+ }
200
+ console.log(ix.keys.length);
201
+ }
202
+ }
203
+ }
179
204
  async send() {
180
205
  const updateLookupTable = await this.client.updateLookupTable();
181
- if (updateLookupTable && updateLookupTable?.needsToBeIsolated) {
206
+ if (updateLookupTable &&
207
+ updateLookupTable.updateLutTx.getInstructions().length > 0 &&
208
+ updateLookupTable?.needsToBeIsolated) {
182
209
  this.updateStatus("update lookup table", TransactionStatus.Processing);
183
210
  await (0, generalUtils_1.retryWithExponentialBackoff)(async (attemptNum) => await (0, solanaUtils_1.sendSingleOptimizedTransaction)(this.client.umi, this.client.connection, updateLookupTable.updateLutTx, this.simulateOnly, attemptNum), 3, 150, this.errorsToThrow);
184
211
  this.updateStatus("update lookup table", TransactionStatus.Successful);
@@ -257,6 +284,9 @@ class TransactionsManager {
257
284
  }
258
285
  else {
259
286
  this.updateStatus(itemSet.name(), TransactionStatus.Processing);
287
+ if (this.client.localTest) {
288
+ await this.debugAccounts(itemSet, tx);
289
+ }
260
290
  const txSig = await (0, solanaUtils_1.sendSingleOptimizedTransaction)(this.client.umi, this.client.connection, tx, this.simulateOnly, attemptNum);
261
291
  this.updateStatus(itemSet.name(), TransactionStatus.Successful, txSig ? bs58_1.default.encode(txSig) : undefined);
262
292
  }
@@ -1,7 +1,7 @@
1
1
  import { PublicKey } from "@solana/web3.js";
2
2
  import { LendingPlatform } from "../generated";
3
3
  export interface SolautoPositionDetails {
4
- publicKey: PublicKey;
4
+ publicKey?: PublicKey;
5
5
  authority: PublicKey;
6
6
  positionId: number;
7
7
  lendingPlatform: LendingPlatform;
@@ -1 +1 @@
1
- {"version":3,"file":"solauto.d.ts","sourceRoot":"","sources":["../../src/types/solauto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,eAAe,CAAC;IACjC,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB"}
1
+ {"version":3,"file":"solauto.d.ts","sourceRoot":"","sources":["../../src/types/solauto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,WAAW,sBAAsB;IACrC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,eAAe,CAAC;IACjC,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB"}
@@ -1 +1 @@
1
- {"version":3,"file":"generalUtils.d.ts","sourceRoot":"","sources":["../../src/utils/generalUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAa,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAK3E,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAO1C;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,GAAG,EACR,EAAE,EAAE,SAAS,GACZ,OAAO,CAAC,OAAO,CAAC,CAGlB;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAEnE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAU1E;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAiD1E;AAED,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,KAAK,CAAC,CAAC;AAEjE,wBAAgB,2BAA2B,CAAC,CAAC,EAC3C,EAAE,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,EACtC,OAAO,GAAE,MAAU,EACnB,KAAK,GAAE,MAAY,EACnB,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC,CAAC,CAAC,CA8BZ"}
1
+ {"version":3,"file":"generalUtils.d.ts","sourceRoot":"","sources":["../../src/utils/generalUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAa,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAM3E,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAO1C;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,GAAG,EACR,EAAE,EAAE,SAAS,GACZ,OAAO,CAAC,OAAO,CAAC,CAGlB;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAEnE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAU1E;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAiD1E;AAED,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,KAAK,CAAC,CAAC;AAEjE,wBAAgB,2BAA2B,CAAC,CAAC,EAC3C,EAAE,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,EACtC,OAAO,GAAE,MAAU,EACnB,KAAK,GAAE,MAAY,EACnB,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC,CAAC,CAAC,CA8BZ"}
@@ -94,7 +94,7 @@ function retryWithExponentialBackoff(fn, retries = 5, delay = 150, errorsToThrow
94
94
  return;
95
95
  }
96
96
  if (attemptNum < retries) {
97
- console.log(error);
97
+ console.log(error.message);
98
98
  setTimeout(() => {
99
99
  console.log("Retrying...");
100
100
  return attempt(attemptNum);
@@ -17,5 +17,5 @@ export interface JupSwapTransaction {
17
17
  tokenLedgerIx: TransactionBuilder;
18
18
  swapIx: TransactionBuilder;
19
19
  }
20
- export declare function getJupSwapTransaction(signer: Signer, swapDetails: JupSwapDetails): Promise<JupSwapTransaction>;
20
+ export declare function getJupSwapTransaction(signer: Signer, swapDetails: JupSwapDetails, attemptNum?: number): Promise<JupSwapTransaction>;
21
21
  //# sourceMappingURL=jupiterUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"jupiterUtils.d.ts","sourceRoot":"","sources":["../../src/utils/jupiterUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,kBAAkB,EAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAA0B,MAAM,iBAAiB,CAAC;AAGpE,OAAO,EAGL,aAAa,EACd,MAAM,aAAa,CAAC;AAKrB,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,SAAS,CAAC;IACtB,iBAAiB,EAAE,SAAS,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAgBD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,aAAa,CAAC;IACxB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,iBAAiB,EAAE,kBAAkB,CAAC;IACtC,aAAa,EAAE,kBAAkB,CAAC;IAClC,MAAM,EAAE,kBAAkB,CAAC;CAC5B;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,cAAc,GAC1B,OAAO,CAAC,kBAAkB,CAAC,CAkE7B"}
1
+ {"version":3,"file":"jupiterUtils.d.ts","sourceRoot":"","sources":["../../src/utils/jupiterUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,kBAAkB,EAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAA0B,MAAM,iBAAiB,CAAC;AAGpE,OAAO,EAGL,aAAa,EACd,MAAM,aAAa,CAAC;AAMrB,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,SAAS,CAAC;IACtB,iBAAiB,EAAE,SAAS,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAgBD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,aAAa,CAAC;IACxB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,iBAAiB,EAAE,kBAAkB,CAAC;IACtC,aAAa,EAAE,kBAAkB,CAAC;IAClC,MAAM,EAAE,kBAAkB,CAAC;CAC5B;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,cAAc,EAC3B,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,kBAAkB,CAAC,CAsE7B"}
@@ -7,6 +7,7 @@ const solanaUtils_1 = require("./solanaUtils");
7
7
  const numberUtils_1 = require("./numberUtils");
8
8
  const api_1 = require("@jup-ag/api");
9
9
  const accountUtils_1 = require("./accountUtils");
10
+ const generalUtils_1 = require("./generalUtils");
10
11
  const jupApi = (0, api_1.createJupiterApiClient)();
11
12
  function createTransactionInstruction(instruction) {
12
13
  return new web3_js_1.TransactionInstruction({
@@ -19,9 +20,9 @@ function createTransactionInstruction(instruction) {
19
20
  data: Buffer.from(instruction.data, "base64"),
20
21
  });
21
22
  }
22
- async function getJupSwapTransaction(signer, swapDetails) {
23
+ async function getJupSwapTransaction(signer, swapDetails, attemptNum) {
23
24
  console.log("Getting jup quote...");
24
- const quoteResponse = await jupApi.quoteGet({
25
+ const quoteResponse = await (0, generalUtils_1.retryWithExponentialBackoff)(async () => await jupApi.quoteGet({
25
26
  amount: Number(swapDetails.amount),
26
27
  inputMint: swapDetails.inputMint.toString(),
27
28
  outputMint: swapDetails.outputMint.toString(),
@@ -30,8 +31,9 @@ async function getJupSwapTransaction(signer, swapDetails) {
30
31
  : swapDetails.exactIn
31
32
  ? "ExactIn"
32
33
  : undefined,
33
- slippageBps: 10
34
- });
34
+ slippageBps: 10,
35
+ maxAccounts: 60,
36
+ }), 3);
35
37
  const finalPriceSlippageBps = Math.round(Math.max(quoteResponse.slippageBps ?? 10, Math.round((0, numberUtils_1.toBps)(parseFloat(quoteResponse.priceImpactPct)))) *
36
38
  (1 + (swapDetails.slippageBpsIncFactor ?? 0)));
37
39
  quoteResponse.slippageBps = finalPriceSlippageBps;
package/local/shared.ts CHANGED
@@ -8,7 +8,7 @@ import {
8
8
  VersionedTransaction,
9
9
  PublicKey,
10
10
  } from "@solana/web3.js";
11
- import { CONNECTION } from "../src/constants/solautoConstants";
11
+ import { getSolanaRpcConnection } from "../src/utils/solanaUtils";
12
12
 
13
13
  function loadSecretKey(keypairPath: string) {
14
14
  const secretKey = JSON.parse(fs.readFileSync(keypairPath, "utf8"));
@@ -22,9 +22,10 @@ export function getSecretKey(keypairFilename: string = "id"): Uint8Array {
22
22
  }
23
23
 
24
24
  const keypair = Keypair.fromSecretKey(getSecretKey());
25
+ const [connection, _] = getSolanaRpcConnection(process.env.HELIUS_API_KEY ?? "");
25
26
 
26
27
  async function createAndSendV0Tx(txInstructions: TransactionInstruction[]) {
27
- let latestBlockhash = await CONNECTION.getLatestBlockhash("finalized");
28
+ let latestBlockhash = await connection.getLatestBlockhash("finalized");
28
29
 
29
30
  const messageV0 = new TransactionMessage({
30
31
  payerKey: keypair.publicKey,
@@ -35,11 +36,11 @@ async function createAndSendV0Tx(txInstructions: TransactionInstruction[]) {
35
36
 
36
37
  transaction.sign([keypair]);
37
38
 
38
- const txid = await CONNECTION.sendTransaction(transaction, {
39
+ const txid = await connection.sendTransaction(transaction, {
39
40
  maxRetries: 5,
40
41
  });
41
42
 
42
- const confirmation = await CONNECTION.confirmTransaction({
43
+ const confirmation = await connection.confirmTransaction({
43
44
  signature: txid,
44
45
  blockhash: latestBlockhash.blockhash,
45
46
  lastValidBlockHeight: latestBlockhash.lastValidBlockHeight,
@@ -76,13 +77,13 @@ export async function updateLookupTable(
76
77
  lookupTableAddress?: PublicKey
77
78
  ) {
78
79
  let lookupTable = lookupTableAddress
79
- ? await CONNECTION.getAddressLookupTable(lookupTableAddress)
80
+ ? await connection.getAddressLookupTable(lookupTableAddress)
80
81
  : null;
81
82
  if (lookupTable === null) {
82
83
  const [createLutIx, addr] = AddressLookupTableProgram.createLookupTable({
83
84
  authority: keypair.publicKey,
84
85
  payer: keypair.publicKey,
85
- recentSlot: await CONNECTION.getSlot({ commitment: "finalized" }),
86
+ recentSlot: await connection.getSlot({ commitment: "finalized" }),
86
87
  });
87
88
  lookupTableAddress = addr;
88
89
  console.log("Lookup Table Address:", lookupTableAddress.toString());
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haven-fi/solauto-sdk",
3
- "version": "1.0.39",
3
+ "version": "1.0.41",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "description": "Typescript SDK for the Solauto program on the Solana blockchain",
@@ -347,9 +347,10 @@ export abstract class SolautoClient {
347
347
  );
348
348
  }
349
349
 
350
- const addingReferredBy = accountsToAdd.length === 1;
351
- // && accountsToAdd[0].toString().toLowerCase() ===
352
- // this.referredBySupplyTa?.toString().toLowerCase();
350
+ const addingReferredBy =
351
+ accountsToAdd.length === 1 &&
352
+ accountsToAdd[0].toString().toLowerCase() ===
353
+ this.referredBySupplyTa?.toString().toLowerCase();
353
354
 
354
355
  if (tx.getInstructions().length > 0) {
355
356
  this.log("Updating authority lookup table...");
@@ -632,8 +633,9 @@ export abstract class SolautoClient {
632
633
  rebalanceStep: "A" | "B",
633
634
  swapDetails: JupSwapDetails,
634
635
  rebalanceType: SolautoRebalanceTypeArgs,
636
+ flashLoan?: FlashLoanDetails,
635
637
  targetLiqUtilizationRateBps?: number,
636
- limitGapBps?: number
638
+ limitGapBps?: number,
637
639
  ): TransactionBuilder;
638
640
 
639
641
  async getFreshPositionState(): Promise<PositionState | undefined> {
@@ -11,10 +11,7 @@ import {
11
11
  createSignerFromKeypair,
12
12
  AccountMeta,
13
13
  } from "@metaplex-foundation/umi";
14
- import {
15
- PublicKey,
16
- SYSVAR_INSTRUCTIONS_PUBKEY,
17
- } from "@solana/web3.js";
14
+ import { PublicKey, SYSVAR_INSTRUCTIONS_PUBKEY } from "@solana/web3.js";
18
15
  import { SolautoClient, SolautoClientArgs } from "./solautoClient";
19
16
  import { MarginfiTokenAccounts } from "../types/accounts";
20
17
  import {
@@ -216,7 +213,7 @@ export class SolautoMarginfiClient extends SolautoClient {
216
213
  marginfiGroup: publicKey(this.marginfiGroup),
217
214
  marginfiAccount:
218
215
  "publicKey" in this.marginfiAccount
219
- ? this.marginfiAccount as Signer
216
+ ? (this.marginfiAccount as Signer)
220
217
  : publicKey(this.marginfiAccount),
221
218
  supplyMint: publicKey(this.supplyMint),
222
219
  supplyBank: publicKey(this.marginfiSupplyBankAccounts.bank),
@@ -230,7 +227,9 @@ export class SolautoMarginfiClient extends SolautoClient {
230
227
  settingParams: settingParams ?? null,
231
228
  dca: dca ?? null,
232
229
  },
233
- marginfiAccountSeedIdx: !this.selfManaged ? this.marginfiAccountSeedIdx : null,
230
+ marginfiAccountSeedIdx: !this.selfManaged
231
+ ? this.marginfiAccountSeedIdx
232
+ : null,
234
233
  });
235
234
  }
236
235
 
@@ -391,19 +390,28 @@ export class SolautoMarginfiClient extends SolautoClient {
391
390
  rebalanceStep: "A" | "B",
392
391
  swapDetails: JupSwapDetails,
393
392
  rebalanceType: SolautoRebalanceTypeArgs,
393
+ flashLoan?: FlashLoanDetails,
394
394
  targetLiqUtilizationRateBps?: number,
395
- limitGapBps?: number
395
+ limitGapBps?: number,
396
396
  ): TransactionBuilder {
397
+ const inputIsSupply = swapDetails.inputMint.equals(this.supplyMint);
398
+ const outputIsSupply = swapDetails.outputMint.equals(this.supplyMint);
399
+ const needSupplyAccounts =
400
+ (inputIsSupply && rebalanceStep === "A") ||
401
+ (outputIsSupply && rebalanceStep === "B") ||
402
+ (inputIsSupply && flashLoan !== undefined && rebalanceStep == "B");
403
+ const needDebtAccounts =
404
+ (!inputIsSupply && rebalanceStep === "A") ||
405
+ (!outputIsSupply && rebalanceStep === "B") ||
406
+ (!inputIsSupply && flashLoan !== undefined && rebalanceStep == "B");
407
+
397
408
  return marginfiRebalance(this.umi, {
398
409
  signer: this.signer,
399
410
  marginfiProgram: publicKey(MARGINFI_PROGRAM_ID),
400
411
  ixsSysvar: publicKey(SYSVAR_INSTRUCTIONS_PUBKEY),
401
412
  solautoFeesSupplyTa:
402
413
  rebalanceStep === "B" ? publicKey(this.solautoFeesSupplyTa) : undefined,
403
- authorityReferralState:
404
- rebalanceStep === "B"
405
- ? publicKey(this.authorityReferralState)
406
- : undefined,
414
+ authorityReferralState: publicKey(this.authorityReferralState),
407
415
  referredBySupplyTa:
408
416
  rebalanceStep === "B" && this.referredBySupplyTa
409
417
  ? publicKey(this.referredBySupplyTa)
@@ -423,18 +431,22 @@ export class SolautoMarginfiClient extends SolautoClient {
423
431
  signerSupplyTa: this.selfManaged
424
432
  ? publicKey(this.signerSupplyTa)
425
433
  : undefined,
426
- vaultSupplyTa: publicKey(this.marginfiSupplyBankAccounts.liquidityVault),
427
- supplyVaultAuthority: publicKey(
428
- this.marginfiSupplyBankAccounts.vaultAuthority
429
- ),
434
+ vaultSupplyTa: needSupplyAccounts
435
+ ? publicKey(this.marginfiSupplyBankAccounts.liquidityVault)
436
+ : undefined,
437
+ supplyVaultAuthority: needSupplyAccounts
438
+ ? publicKey(this.marginfiSupplyBankAccounts.vaultAuthority)
439
+ : undefined,
430
440
  debtBank: publicKey(this.marginfiDebtBankAccounts.bank),
431
441
  debtPriceOracle: publicKey(this.marginfiDebtBankAccounts.priceOracle),
432
442
  positionDebtTa: publicKey(this.positionDebtTa),
433
443
  signerDebtTa: this.selfManaged ? publicKey(this.signerDebtTa) : undefined,
434
- vaultDebtTa: publicKey(this.marginfiDebtBankAccounts.liquidityVault),
435
- debtVaultAuthority: publicKey(
436
- this.marginfiDebtBankAccounts.vaultAuthority
437
- ),
444
+ vaultDebtTa: needDebtAccounts
445
+ ? publicKey(this.marginfiDebtBankAccounts.liquidityVault)
446
+ : undefined,
447
+ debtVaultAuthority: needDebtAccounts
448
+ ? publicKey(this.marginfiDebtBankAccounts.vaultAuthority)
449
+ : undefined,
438
450
  rebalanceType,
439
451
  targetLiqUtilizationRateBps: targetLiqUtilizationRateBps ?? null,
440
452
  limitGapBps: limitGapBps ?? null,
@@ -43,7 +43,7 @@ export type MarginfiRebalanceInstructionAccounts = {
43
43
  tokenProgram?: PublicKey | Pda;
44
44
  ixsSysvar: PublicKey | Pda;
45
45
  solautoFeesSupplyTa?: PublicKey | Pda;
46
- authorityReferralState?: PublicKey | Pda;
46
+ authorityReferralState: PublicKey | Pda;
47
47
  referredBySupplyTa?: PublicKey | Pda;
48
48
  solautoPosition: PublicKey | Pda;
49
49
  marginfiGroup: PublicKey | Pda;
@@ -206,7 +206,7 @@ export function marginfiRebalance(
206
206
  },
207
207
  supplyVaultAuthority: {
208
208
  index: 17,
209
- isWritable: true as boolean,
209
+ isWritable: false as boolean,
210
210
  value: input.supplyVaultAuthority ?? null,
211
211
  },
212
212
  debtBank: {
@@ -236,7 +236,7 @@ export function marginfiRebalance(
236
236
  },
237
237
  debtVaultAuthority: {
238
238
  index: 23,
239
- isWritable: true as boolean,
239
+ isWritable: false as boolean,
240
240
  value: input.debtVaultAuthority ?? null,
241
241
  },
242
242
  } satisfies ResolvedAccountsWithIndices;
@@ -103,7 +103,7 @@ async function transactionChoresBefore(
103
103
  client: SolautoClient,
104
104
  accountsGettingCreated: string[],
105
105
  solautoActions?: SolautoAction[],
106
- initiatingDcaIn?: bigint,
106
+ initiatingDcaIn?: bigint
107
107
  ): Promise<TransactionBuilder> {
108
108
  let chores = transactionBuilder();
109
109
 
@@ -233,8 +233,9 @@ export async function rebalanceChoresBefore(
233
233
  }
234
234
 
235
235
  const usesAccount = (key: PublicKey) =>
236
- rebalanceInstructions
237
- .some((t) => t.keys.some((k) => toWeb3JsPublicKey(k.pubkey).equals(key)));
236
+ rebalanceInstructions.some((t) =>
237
+ t.keys.some((k) => toWeb3JsPublicKey(k.pubkey).equals(key))
238
+ );
238
239
 
239
240
  const checkReferralSupplyTa =
240
241
  client.referredBySupplyTa && usesAccount(client.referredBySupplyTa);
@@ -244,8 +245,10 @@ export async function rebalanceChoresBefore(
244
245
  usesAccount(
245
246
  (client as SolautoMarginfiClient).intermediaryMarginfiAccountPk
246
247
  );
247
- const checkSignerSupplyTa = client.selfManaged && usesAccount(client.signerSupplyTa);
248
- const checkSignerDebtTa = client.selfManaged && usesAccount(client.signerSupplyTa);
248
+ const checkSignerSupplyTa =
249
+ client.selfManaged && usesAccount(client.signerSupplyTa);
250
+ const checkSignerDebtTa =
251
+ client.selfManaged && usesAccount(client.signerSupplyTa);
249
252
 
250
253
  const accountsNeeded = [
251
254
  ...[checkReferralSupplyTa ? client.referredBySupplyTa : PublicKey.default],
@@ -259,10 +262,15 @@ export async function rebalanceChoresBefore(
259
262
  ...[checkSignerDebtTa ? client.signerDebtTa : PublicKey.default],
260
263
  ];
261
264
 
262
- const [referredBySupplyTa, solautoFeesSupplyTa, intermediaryMarginfiAccount, signerSupplyTa, signerDebtTa] =
263
- await client.umi.rpc.getAccounts(
264
- accountsNeeded.map((x) => publicKey(x ?? PublicKey.default))
265
- );
265
+ const [
266
+ referredBySupplyTa,
267
+ solautoFeesSupplyTa,
268
+ intermediaryMarginfiAccount,
269
+ signerSupplyTa,
270
+ signerDebtTa,
271
+ ] = await client.umi.rpc.getAccounts(
272
+ accountsNeeded.map((x) => publicKey(x ?? PublicKey.default))
273
+ );
266
274
 
267
275
  let chores = transactionBuilder();
268
276
 
@@ -297,7 +305,11 @@ export async function rebalanceChoresBefore(
297
305
  );
298
306
  }
299
307
 
300
- if (checkSignerSupplyTa && !rpcAccountCreated(signerSupplyTa) && !accountsGettingCreated.includes(signerSupplyTa.publicKey.toString())) {
308
+ if (
309
+ checkSignerSupplyTa &&
310
+ !rpcAccountCreated(signerSupplyTa) &&
311
+ !accountsGettingCreated.includes(signerSupplyTa.publicKey.toString())
312
+ ) {
301
313
  client.log("Creating signer supply token account");
302
314
  chores = chores.add(
303
315
  createAssociatedTokenAccountUmiIx(
@@ -309,7 +321,11 @@ export async function rebalanceChoresBefore(
309
321
  accountsGettingCreated.push(signerSupplyTa.publicKey.toString());
310
322
  }
311
323
 
312
- if (checkSignerDebtTa && !rpcAccountCreated(signerDebtTa) && !accountsGettingCreated.includes(signerDebtTa.publicKey.toString())) {
324
+ if (
325
+ checkSignerDebtTa &&
326
+ !rpcAccountCreated(signerDebtTa) &&
327
+ !accountsGettingCreated.includes(signerDebtTa.publicKey.toString())
328
+ ) {
313
329
  client.log("Creating signer debt token account");
314
330
  chores = chores.add(
315
331
  createAssociatedTokenAccountUmiIx(
@@ -358,7 +374,7 @@ function getRebalanceInstructions(tx: TransactionBuilder): Instruction[] {
358
374
  const discriminator = serializer.serialize({
359
375
  limitGapBps: 0,
360
376
  rebalanceType: SolautoRebalanceType.None,
361
- targetLiqUtilizationRateBps: 0
377
+ targetLiqUtilizationRateBps: 0,
362
378
  })[0];
363
379
  const [data, _] = serializer.deserialize(x.data);
364
380
  if (data.discriminator === discriminator) {
@@ -378,10 +394,9 @@ function getSolautoActions(tx: TransactionBuilder): SolautoAction[] {
378
394
  try {
379
395
  const serializer =
380
396
  getMarginfiProtocolInteractionInstructionDataSerializer();
381
- const discriminator = serializer
382
- .serialize({
383
- solautoAction: solautoAction("Deposit", [BigInt(0)]),
384
- })[0];
397
+ const discriminator = serializer.serialize({
398
+ solautoAction: solautoAction("Deposit", [BigInt(0)]),
399
+ })[0];
385
400
  const [data, _] = serializer.deserialize(x.data);
386
401
  if (data.discriminator === discriminator) {
387
402
  solautoActions?.push(data.solautoAction);
@@ -518,7 +533,7 @@ export async function getTransactionChores(
518
533
  solautoActions,
519
534
  client.livePositionUpdates.debtTaBalanceAdjustment > 0
520
535
  ? client.livePositionUpdates.debtTaBalanceAdjustment
521
- : undefined,
536
+ : undefined
522
537
  ),
523
538
  await rebalanceChoresBefore(client, tx, accountsGettingCreated),
524
539
  ]);
@@ -576,7 +591,7 @@ export async function buildSolautoRebalanceTransaction(
576
591
  setupInstructions,
577
592
  tokenLedgerIx,
578
593
  swapIx,
579
- } = await getJupSwapTransaction(client.signer, swapDetails);
594
+ } = await getJupSwapTransaction(client.signer, swapDetails, attemptNum);
580
595
  const flashLoan = getFlashLoanDetails(client, values, jupQuote);
581
596
 
582
597
  let tx = transactionBuilder();
@@ -604,6 +619,7 @@ export async function buildSolautoRebalanceTransaction(
604
619
  "A",
605
620
  swapDetails,
606
621
  rebalanceType,
622
+ flashLoan,
607
623
  targetLiqUtilizationRateBps
608
624
  ),
609
625
  ]
@@ -613,6 +629,7 @@ export async function buildSolautoRebalanceTransaction(
613
629
  "B",
614
630
  swapDetails,
615
631
  rebalanceType,
632
+ flashLoan,
616
633
  targetLiqUtilizationRateBps
617
634
  ),
618
635
  client.flashRepay(flashLoan),
@@ -626,6 +643,7 @@ export async function buildSolautoRebalanceTransaction(
626
643
  "A",
627
644
  swapDetails,
628
645
  rebalanceType,
646
+ undefined,
629
647
  targetLiqUtilizationRateBps
630
648
  ),
631
649
  swapIx,
@@ -633,6 +651,7 @@ export async function buildSolautoRebalanceTransaction(
633
651
  "B",
634
652
  swapDetails,
635
653
  rebalanceType,
654
+ undefined,
636
655
  targetLiqUtilizationRateBps
637
656
  ),
638
657
  ]);
@@ -1,6 +1,7 @@
1
1
  import bs58 from "bs58";
2
2
  import {
3
3
  AddressLookupTableInput,
4
+ Instruction,
4
5
  transactionBuilder,
5
6
  TransactionBuilder,
6
7
  } from "@metaplex-foundation/umi";
@@ -14,6 +15,7 @@ import {
14
15
  retryWithExponentialBackoff,
15
16
  } from "../utils/generalUtils";
16
17
  import { getTransactionChores } from "./transactionUtils";
18
+ import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters";
17
19
  // import { sendJitoBundledTransactions } from "../utils/jitoUtils";
18
20
 
19
21
  class LookupTables {
@@ -45,7 +47,7 @@ class LookupTables {
45
47
  this.cache.push(...additionalInputs);
46
48
  }
47
49
 
48
- return this.cache.filter((x) => addresses.includes(x.publicKey.toString()));
50
+ return this.cache;
49
51
  }
50
52
  }
51
53
 
@@ -89,7 +91,7 @@ export class TransactionItem {
89
91
  class TransactionSet {
90
92
  constructor(
91
93
  private client: SolautoClient,
92
- private lookupTables: LookupTables,
94
+ public lookupTables: LookupTables,
93
95
  public items: TransactionItem[] = []
94
96
  ) {}
95
97
 
@@ -210,8 +212,12 @@ export class TransactionsManager {
210
212
  await this.lookupTables.getLutInputs(item.lookupTableAddresses)
211
213
  );
212
214
  if (!transaction.fitsInOneTransaction(this.client.umi)) {
213
- throw new Error(
214
- `Transaction exceeds max transaction size (${transaction.getTransactionSize(this.client.umi)})`
215
+ // TODO: revert me
216
+ // throw new Error(
217
+ // `Transaction exceeds max transaction size (${transaction.getTransactionSize(this.client.umi)})`
218
+ // );
219
+ transactionSets.push(
220
+ new TransactionSet(this.client, this.lookupTables, [item])
215
221
  );
216
222
  } else {
217
223
  let newSet = new TransactionSet(this.client, this.lookupTables, [item]);
@@ -246,9 +252,43 @@ export class TransactionsManager {
246
252
  this.statusCallback?.(this.statuses);
247
253
  }
248
254
 
255
+ // TODO remove me
256
+ async debugAccounts(itemSet: TransactionSet, tx: TransactionBuilder) {
257
+ const lutInputs = await itemSet.lookupTables.getLutInputs([]);
258
+ const lutAccounts = lutInputs.map((x) => x.addresses).flat();
259
+ const keys = tx
260
+ .getInstructions()
261
+ .map((x) => x.keys)
262
+ .flat();
263
+ for (const ix of tx.getInstructions()) {
264
+ const ixAccounts = ix.keys.map((x) => x.pubkey);
265
+ const accountsNotInLut = ixAccounts.filter(
266
+ (x) => !lutAccounts.includes(x)
267
+ );
268
+ console.log(
269
+ "Program",
270
+ ix.programId,
271
+ " data ",
272
+ ix.data.length,
273
+ ix.keys.filter((x) => lutAccounts.includes(x.pubkey)).length * 3
274
+ );
275
+ if (accountsNotInLut.length > 0) {
276
+ console.log("Accounts not in LUT:");
277
+ for (const key of accountsNotInLut) {
278
+ console.log(key.toString());
279
+ }
280
+ console.log(ix.keys.length);
281
+ }
282
+ }
283
+ }
284
+
249
285
  async send() {
250
286
  const updateLookupTable = await this.client.updateLookupTable();
251
- if (updateLookupTable && updateLookupTable?.needsToBeIsolated) {
287
+ if (
288
+ updateLookupTable &&
289
+ updateLookupTable.updateLutTx.getInstructions().length > 0 &&
290
+ updateLookupTable?.needsToBeIsolated
291
+ ) {
252
292
  this.updateStatus("update lookup table", TransactionStatus.Processing);
253
293
  await retryWithExponentialBackoff(
254
294
  async (attemptNum) =>
@@ -365,6 +405,11 @@ export class TransactionsManager {
365
405
  this.updateStatus(itemSet.name(), TransactionStatus.Skipped);
366
406
  } else {
367
407
  this.updateStatus(itemSet.name(), TransactionStatus.Processing);
408
+
409
+ if (this.client.localTest) {
410
+ await this.debugAccounts(itemSet, tx);
411
+ }
412
+
368
413
  const txSig = await sendSingleOptimizedTransaction(
369
414
  this.client.umi,
370
415
  this.client.connection,
@@ -2,7 +2,7 @@ import { PublicKey } from "@solana/web3.js";
2
2
  import { LendingPlatform } from "../generated";
3
3
 
4
4
  export interface SolautoPositionDetails {
5
- publicKey: PublicKey;
5
+ publicKey?: PublicKey;
6
6
  authority: PublicKey;
7
7
  positionId: number;
8
8
  lendingPlatform: LendingPlatform;
@@ -3,6 +3,7 @@ import { MaybeRpcAccount, publicKey, Umi } from "@metaplex-foundation/umi";
3
3
  import { PYTH_PRICE_FEED_IDS } from "../constants/pythConstants";
4
4
  import { fromBaseUnit, toBaseUnit } from "./numberUtils";
5
5
  import { PRICES } from "../constants/solautoConstants";
6
+ import { ResponseError } from "@jup-ag/api";
6
7
 
7
8
  export function generateRandomU8(): number {
8
9
  return Math.floor(Math.random() * 255 + 1);
@@ -120,7 +121,7 @@ export function retryWithExponentialBackoff<T>(
120
121
  }
121
122
 
122
123
  if (attemptNum < retries) {
123
- console.log(error);
124
+ console.log(error.message);
124
125
  setTimeout(() => {
125
126
  console.log("Retrying...");
126
127
  return attempt(attemptNum);
@@ -12,6 +12,7 @@ import {
12
12
  QuoteResponse,
13
13
  } from "@jup-ag/api";
14
14
  import { getTokenAccount } from "./accountUtils";
15
+ import { retryWithExponentialBackoff } from "./generalUtils";
15
16
 
16
17
  const jupApi = createJupiterApiClient();
17
18
 
@@ -49,21 +50,26 @@ export interface JupSwapTransaction {
49
50
 
50
51
  export async function getJupSwapTransaction(
51
52
  signer: Signer,
52
- swapDetails: JupSwapDetails
53
+ swapDetails: JupSwapDetails,
54
+ attemptNum?: number
53
55
  ): Promise<JupSwapTransaction> {
54
56
  console.log("Getting jup quote...");
55
-
56
- const quoteResponse = await jupApi.quoteGet({
57
- amount: Number(swapDetails.amount),
58
- inputMint: swapDetails.inputMint.toString(),
59
- outputMint: swapDetails.outputMint.toString(),
60
- swapMode: swapDetails.exactOut
61
- ? "ExactOut"
62
- : swapDetails.exactIn
63
- ? "ExactIn"
64
- : undefined,
65
- slippageBps: 10
66
- });
57
+ const quoteResponse = await retryWithExponentialBackoff(
58
+ async () =>
59
+ await jupApi.quoteGet({
60
+ amount: Number(swapDetails.amount),
61
+ inputMint: swapDetails.inputMint.toString(),
62
+ outputMint: swapDetails.outputMint.toString(),
63
+ swapMode: swapDetails.exactOut
64
+ ? "ExactOut"
65
+ : swapDetails.exactIn
66
+ ? "ExactIn"
67
+ : undefined,
68
+ slippageBps: 10,
69
+ maxAccounts: 60,
70
+ }),
71
+ 3
72
+ );
67
73
 
68
74
  const finalPriceSlippageBps = Math.round(
69
75
  Math.max(
@@ -24,7 +24,7 @@ describe("Solauto Marginfi tests", async () => {
24
24
 
25
25
  const payForTransactions = false;
26
26
  const useJitoBundle = false;
27
- const positionId = 1;
27
+ const positionId = 0;
28
28
 
29
29
  it("open - deposit - borrow - rebalance to 0 - withdraw - close", async () => {
30
30
  const client = new SolautoMarginfiClient(process.env.HELIUS_API_KEY!, true);
@@ -37,11 +37,11 @@ describe("Solauto Marginfi tests", async () => {
37
37
  {
38
38
  signer,
39
39
  positionId,
40
- // marginfiAccount: new PublicKey(
41
- // "4nNvUXF5YqHFcH2nGweSiuvy1ct7V5FXfoCLKFYUN36z"
42
- // ),
43
- // supplyMint: NATIVE_MINT,
44
- // debtMint: new PublicKey(USDC_MINT),
40
+ marginfiAccount: new PublicKey(
41
+ "4nNvUXF5YqHFcH2nGweSiuvy1ct7V5FXfoCLKFYUN36z"
42
+ ),
43
+ supplyMint: NATIVE_MINT,
44
+ debtMint: new PublicKey(USDC_MINT),
45
45
  }
46
46
  );
47
47