@haven-fi/solauto-sdk 1.0.423 → 1.0.425

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.
@@ -212,8 +212,8 @@ async function sendJitoBundledTransactions(umi, connection, signer, txs, txType,
212
212
  }
213
213
  if (txType !== "only-simulate") {
214
214
  const signers = [...builtTxs].map((tx) => getRequiredSigners(tx.message));
215
- if (Array.from(new Set(signers.flatMap((x) => x).filter((x) => x.publicKey)))
216
- .length > 1) {
215
+ const uniqueSigners = Array.from(new Set(signers.flatMap((x) => x).map((x) => x.publicKey)));
216
+ if (uniqueSigners.length > 1) {
217
217
  (0, generalUtils_1.consoleLog)("Signers:", signers);
218
218
  throw new Error("Unexpected error 301. Please retry.");
219
219
  }
@@ -9,6 +9,7 @@ export interface JupSwapDetails {
9
9
  slippageIncFactor?: number;
10
10
  exactOut?: boolean;
11
11
  exactIn?: boolean;
12
+ addPadding?: boolean;
12
13
  }
13
14
  export interface JupSwapTransaction {
14
15
  jupQuote: QuoteResponse;
@@ -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;AAOrB,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,SAAS,CAAC;IACtB,iBAAiB,EAAE,SAAS,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAgBD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,aAAa,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,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,CAsF7B;AAED,wBAAsB,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,SAAS,CAAC,EAAE,OAAO;;GAiB5E"}
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;AAOrB,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,SAAS,CAAC;IACtB,iBAAiB,EAAE,SAAS,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAgBD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,aAAa,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,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,CAmG7B;AAED,wBAAsB,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,SAAS,CAAC,EAAE,OAAO;;GAiB5E"}
@@ -60,6 +60,13 @@ async function getJupSwapTransaction(signer, swapDetails, attemptNum) {
60
60
  (0, generalUtils_1.consoleLog)("Raw price impact bps:", priceImpactBps);
61
61
  const finalPriceImpactBps = priceImpactBps * (1 + (swapDetails.slippageIncFactor ?? 0));
62
62
  (0, generalUtils_1.consoleLog)("Increased price impact bps:", finalPriceImpactBps);
63
+ if (swapDetails.addPadding) {
64
+ (0, generalUtils_1.consoleLog)("Raw inAmount:", quoteResponse.inAmount);
65
+ quoteResponse.inAmount = Math.round(parseInt(quoteResponse.inAmount) +
66
+ parseInt(quoteResponse.inAmount) *
67
+ Math.max((0, numberUtils_1.fromBps)(finalPriceImpactBps), (0, numberUtils_1.fromBps)(finalPriceImpactBps) / 2)).toString();
68
+ (0, generalUtils_1.consoleLog)("Increased inAmount:", quoteResponse.inAmount);
69
+ }
63
70
  return {
64
71
  jupQuote: quoteResponse,
65
72
  priceImpactBps: finalPriceImpactBps,
@@ -1 +1 @@
1
- {"version":3,"file":"solanaUtils.d.ts","sourceRoot":"","sources":["../../src/utils/solanaUtils.ts"],"names":[],"mappings":"AACA,OAAO,EACL,uBAAuB,EACvB,MAAM,EACN,kBAAkB,EAClB,GAAG,EACH,kBAAkB,EAGnB,MAAM,0BAA0B,CAAC;AAOlC,OAAO,EAIL,UAAU,EACV,SAAS,EAKT,sBAAsB,EAEvB,MAAM,iBAAiB,CAAC;AAgBzB,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAIlE,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,UAErD;AAED,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,MAAM,UAE3D;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,SAAgC,GAC1C,CAAC,UAAU,EAAE,GAAG,CAAC,CAQnB;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,sBAAsB,GACzB,kBAAkB,CAMpB;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,GACtB,kBAAkB,CAOpB;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,kBAAkB,CAOpB;AAED,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,SAAS,GACd,kBAAkB,CAUpB;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,SAAS,EACtB,QAAQ,EAAE,MAAM,GACf,kBAAkB,CASpB;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,SAAS,EACvB,SAAS,EAAE,SAAS,GACnB,kBAAkB,CAKpB;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,SAAS,EACf,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,GACb,kBAAkB,CAKpB;AAED,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,GAAG,EACR,oBAAoB,EAAE,MAAM,EAAE,GAC7B,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAmBpC;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,kBAAkB,EAC/B,gBAAgB,CAAC,EAAE,MAAM,EACzB,gBAAgB,CAAC,EAAE,MAAM,sBAa1B;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,kBAAkB,EAC/B,gBAAgB,CAAC,EAAE,MAAM,EACzB,gBAAgB,CAAC,EAAE,MAAM,sBA2D1B;AAuBD,wBAAsB,2BAA2B,CAC/C,GAAG,EAAE,GAAG,EACR,EAAE,EAAE,kBAAkB,EACtB,eAAe,EAAE,kBAAkB,EACnC,WAAW,CAAC,EAAE,OAAO,GACpB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAwB7B;AAiDD,wBAAsB,8BAA8B,CAClD,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,UAAU,EACtB,EAAE,EAAE,kBAAkB,EACtB,MAAM,CAAC,EAAE,kBAAkB,EAC3B,eAAe,GAAE,kBAA2C,EAC5D,cAAc,CAAC,EAAE,MAAM,IAAI,GAC1B,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAmEjC"}
1
+ {"version":3,"file":"solanaUtils.d.ts","sourceRoot":"","sources":["../../src/utils/solanaUtils.ts"],"names":[],"mappings":"AACA,OAAO,EACL,uBAAuB,EACvB,MAAM,EACN,kBAAkB,EAClB,GAAG,EACH,kBAAkB,EAGnB,MAAM,0BAA0B,CAAC;AAOlC,OAAO,EAIL,UAAU,EACV,SAAS,EAKT,sBAAsB,EAEvB,MAAM,iBAAiB,CAAC;AAgBzB,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAIlE,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,UAErD;AAED,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,MAAM,UAE3D;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,SAAgC,GAC1C,CAAC,UAAU,EAAE,GAAG,CAAC,CAQnB;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,sBAAsB,GACzB,kBAAkB,CAMpB;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,GACtB,kBAAkB,CAOpB;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,kBAAkB,CAOpB;AAED,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,SAAS,GACd,kBAAkB,CAUpB;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,SAAS,EACtB,QAAQ,EAAE,MAAM,GACf,kBAAkB,CASpB;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,SAAS,EACvB,SAAS,EAAE,SAAS,GACnB,kBAAkB,CAKpB;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,SAAS,EACf,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,GACb,kBAAkB,CAKpB;AAED,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,GAAG,EACR,oBAAoB,EAAE,MAAM,EAAE,GAC7B,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAmBpC;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,kBAAkB,EAC/B,gBAAgB,CAAC,EAAE,MAAM,EACzB,gBAAgB,CAAC,EAAE,MAAM,sBAa1B;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,kBAAkB,EAC/B,gBAAgB,CAAC,EAAE,MAAM,EACzB,gBAAgB,CAAC,EAAE,MAAM,sBA2D1B;AAuBD,wBAAsB,2BAA2B,CAC/C,GAAG,EAAE,GAAG,EACR,EAAE,EAAE,kBAAkB,EACtB,eAAe,EAAE,kBAAkB,EACnC,WAAW,CAAC,EAAE,OAAO,GACpB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAwC7B;AAiDD,wBAAsB,8BAA8B,CAClD,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,UAAU,EACtB,EAAE,EAAE,kBAAkB,EACtB,MAAM,CAAC,EAAE,kBAAkB,EAC3B,eAAe,GAAE,kBAA2C,EAC5D,cAAc,CAAC,EAAE,MAAM,IAAI,GAC1B,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAmEjC"}
@@ -156,18 +156,36 @@ async function getComputeUnitPriceEstimate(umi, tx, prioritySetting, useAccounts
156
156
  .getInstructions()
157
157
  .flatMap((x) => x.keys.flatMap((x) => x.pubkey.toString()));
158
158
  let feeEstimate;
159
- const resp = await umi.rpc.call("getPriorityFeeEstimate", [
160
- {
161
- transaction: !useAccounts
162
- ? bs58_1.default.encode(web3Transaction.serialize())
163
- : undefined,
164
- accountKeys: useAccounts ? accountKeys : undefined,
165
- options: {
166
- priorityLevel: prioritySetting.toString(),
159
+ try {
160
+ const resp = await umi.rpc.call("getPriorityFeeEstimate", [
161
+ {
162
+ transaction: !useAccounts
163
+ ? bs58_1.default.encode(web3Transaction.serialize())
164
+ : undefined,
165
+ accountKeys: useAccounts ? accountKeys : undefined,
166
+ options: {
167
+ priorityLevel: prioritySetting.toString(),
168
+ },
167
169
  },
168
- },
169
- ]);
170
- feeEstimate = Math.round(resp.priorityFeeEstimate);
170
+ ]);
171
+ feeEstimate = Math.round(resp.priorityFeeEstimate);
172
+ }
173
+ catch (e) {
174
+ try {
175
+ const resp = await umi.rpc.call("getPriorityFeeEstimate", [
176
+ {
177
+ accountKeys,
178
+ options: {
179
+ priorityLevel: prioritySetting.toString(),
180
+ },
181
+ },
182
+ ]);
183
+ feeEstimate = Math.round(resp.priorityFeeEstimate);
184
+ }
185
+ catch (e) {
186
+ // console.error(e);
187
+ }
188
+ }
171
189
  return feeEstimate;
172
190
  }
173
191
  async function spamSendTransactionUntilConfirmed(connection, transaction, blockhash, spamInterval = 1500) {
@@ -1 +1 @@
1
- {"version":3,"file":"rebalanceUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/solauto/rebalanceUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EACL,WAAW,EACX,aAAa,EAEb,kBAAkB,EAClB,yBAAyB,EACzB,SAAS,EACV,MAAM,iBAAiB,CAAC;AAOzB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAajD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAmI9C,MAAM,WAAW,eAAe;IAC9B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,eAAe,EAAE,eAAe,CAAC;IACjC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,yBAAyB,GAAG,SAAS,EAC/C,GAAG,EAAE,WAAW,GAAG,SAAS,EAC5B,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,2BAA2B,CAAC,EAAE,MAAM,GACnC,eAAe,CAwDjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,aAAa,GACtB,gBAAgB,GAAG,SAAS,CAuE9B;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe,EACvB,2BAA2B,CAAC,EAAE,MAAM,EACpC,UAAU,CAAC,EAAE,MAAM,GAClB,cAAc,CA2ChB"}
1
+ {"version":3,"file":"rebalanceUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/solauto/rebalanceUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EACL,WAAW,EACX,aAAa,EAEb,kBAAkB,EAClB,yBAAyB,EACzB,SAAS,EACV,MAAM,iBAAiB,CAAC;AAOzB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAajD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAmI9C,MAAM,WAAW,eAAe;IAC9B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,eAAe,EAAE,eAAe,CAAC;IACjC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,yBAAyB,GAAG,SAAS,EAC/C,GAAG,EAAE,WAAW,GAAG,SAAS,EAC5B,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,2BAA2B,CAAC,EAAE,MAAM,GACnC,eAAe,CAwDjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,aAAa,GACtB,gBAAgB,GAAG,SAAS,CAuE9B;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe,EACvB,2BAA2B,CAAC,EAAE,MAAM,EACpC,UAAU,CAAC,EAAE,MAAM,GAClB,cAAc,CA8ChB"}
@@ -122,7 +122,7 @@ function getFlashLoanDetails(client, values, jupQuote) {
122
122
  ? debtUsd + debtAdjustmentUsdAbs
123
123
  : debtUsd;
124
124
  const tempLiqUtilizationRateBps = (0, numberUtils_1.getLiqUtilzationRateBps)(supplyUsd, debtUsd, client.solautoPositionState.liqThresholdBps);
125
- const maxLiqUtilizationRateBps = (0, numberUtils_1.getMaxLiqUtilizationRateBps)(client.solautoPositionState.maxLtvBps, client.solautoPositionState.liqThresholdBps, 0.015);
125
+ const maxLiqUtilizationRateBps = (0, numberUtils_1.getMaxLiqUtilizationRateBps)(client.solautoPositionState.maxLtvBps, client.solautoPositionState.liqThresholdBps, 0.02);
126
126
  const requiresFlashLoan = supplyUsd <= 0 || tempLiqUtilizationRateBps > maxLiqUtilizationRateBps;
127
127
  (0, generalUtils_2.consoleLog)("Requires flash loan:", requiresFlashLoan);
128
128
  (0, generalUtils_2.consoleLog)("Intermediary liq utilization rate:", tempLiqUtilizationRateBps, `$${supplyUsd}`, `$${debtUsd}`, "Max:", maxLiqUtilizationRateBps);
@@ -166,6 +166,7 @@ function getJupSwapRebalanceDetails(client, values, targetLiqUtilizationRateBps,
166
166
  : (0, numberUtils_1.toBaseUnit)(usdToSwap / (0, priceUtils_1.safeGetPrice)(output.mint), output.decimals);
167
167
  const exactOut = targetLiqUtilizationRateBps === 0 || values.repayingCloseToMaxLtv;
168
168
  const exactIn = !exactOut;
169
+ const addPadding = targetLiqUtilizationRateBps === 0;
169
170
  return {
170
171
  inputMint: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(input.mint),
171
172
  outputMint: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(output.mint),
@@ -174,5 +175,6 @@ function getJupSwapRebalanceDetails(client, values, targetLiqUtilizationRateBps,
174
175
  amount: exactOut ? outputAmount : inputAmount,
175
176
  exactIn: exactIn,
176
177
  exactOut: exactOut,
178
+ addPadding,
177
179
  };
178
180
  }
@@ -2,6 +2,7 @@ import { publicKey } from "@metaplex-foundation/umi";
2
2
  import {
3
3
  buildHeliusApiUrl,
4
4
  fetchTokenPrices,
5
+ fromBaseUnit,
5
6
  getSolanaRpcConnection,
6
7
  getSolautoManagedPositions,
7
8
  PositionState,
@@ -17,7 +18,6 @@ import {
17
18
  import { PublicKey, SystemProgram, VersionedTransaction } from "@solana/web3.js";
18
19
  import { NATIVE_MINT } from "@solana/spl-token";
19
20
  import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters";
20
- import { fromBaseUnit } from "../dist";
21
21
  import path from "path";
22
22
  import { config } from "dotenv";
23
23
 
@@ -240,18 +240,18 @@ function decodeVersionedTx(base58Tx: string) {
240
240
  return { versionedTx, signatures };
241
241
  }
242
242
 
243
- // const filterWhitelist = true;
244
- // main(filterWhitelist).then((x) => x);
245
-
246
- console.log(
247
- decodeVersionedTx(
248
- "mQkqpyEB1JEkGUsowzhUXvn2v1kwdGYApNGDUsRZ1BmpmKJhMUXQhmyZoDXKPtVhcjgWQHqN6S94p2fNiPxyRhBUvN1Vs5HjbhdVjhhG4XEDCXRw4K2PPEeTowWf7N5GjQ4wZdpdP8UZtnz3CXtbkCYGnxfjt6AtanQXsJpWUpC84g7ZSfYiNAYRv2geHp6E13yNXya9FGFekmsN3S9UcmWJTQgLu9vFxmL9S6DD6npDK7wPyZ66dcKWTMg2nb8Drig8aLAiFRnkqC99QjN7YYG65qq9VkzTC7o8EbGddddrfLu6Hyk2SgEqebMvhiV729y3sWpDpbbKakknJj4PUodasfKza4XNg3jRGBoVRxvSb3QGFdhbDJa86YvQbsP7pWLqMuJcoaGX3uLgsBFA2z8kGmZBuzGAS3FtgnmE7L8dFMLWGDDKTdFwsTbeZQJsGGtn5sy627onUqyTxHy9UfuBz57h3kd26yUBUmbR9RVgCX2WMSHdEW58uYd2BYbAG4NVQYCzgcWzZEjayXn73fo2Y72Y4BrxnKcqJ8WixHjaj7PPRdvX87wxiHy9b8CxsngKhYM5sWoXVWj5CAq6drS2g7b4b7CZzjeQYkCF"
249
- )
250
- );
251
- console.log(
252
- decodeVersionedTx(
253
- "e6uLxBWUSbPnkYKPWoyoR6YZw7Qt4NnZcabGwaAChdAN4N4GFwvxMxwq3mrxoRM3CDzPHhAh7rbEmzAzyA8pJAhGAaDWfCG3CjnVoWbpdDQvpwUxRffK3xFDGqJeoQvQBvQtZidwaDvDnnkJ6xRgsnpujS65jcGP5AsECsaJ2uRMSsLt8ucynZjQzVw24jqaYRRmUN4otF2mSgbgkXLu9G82g8sfcj3VQuZxoA9Hrpm9kTMNu28R9wRG9yZKCQozSJjL4GGwe3ZMDRdfggbq9xPddNcHFgUGk6PYHgLvVWTr8GSLQpj8HLdtekxdywwXYcK3oS8RNmgrnbm6o7PADSWRYZhAHJLD8G92N5yCnFy8sRGHhMosdgQ5TjF8d5uG92tMfmS67VkjSJqMsX6pZnhnN9K5EFmdZxutaHMuyo5kv9DoXivrCdQrku5yfYbfCPgPY3Ei25tBYN1kTLYXoJvdUuxehjLkR2pVseae2TbApigLAhdvrxGNHLZTncunfp18c2kmWVrwLqc7UPANuKSmNAyy4ntU9nL1zkA9WTxFLsNK5xZukZi8vsK8XoM8f1wyyoiGHPHCF5i2QAat1kwEZ71GdRodeumYb96GwLyskbJJo8g8Yp5oVQhLeKopTSezEgJ3awQCgpd4xqg3rd9ijvRUq5g3aR2NbmrtEZUxumuf5G2RfPK5Nx7MFUuJeT2Pn6LHShsGCzsKt1GewgErWSJMNktBgkJkAyWMQkxt6No8ZSKjDbrnyQEGuuXLKCeMhdFFC6dm8oMgiWC6KLJjzLkG5T4iySKnYcM7pCKtfZLLXXTEGJ8Zz3rqspCGozrwzUGeL86FFqqNNCHFY2Zx2de75krrPo5QfiLMQ1ECgMkLbrmYTx8owsPeM3nDgmMTpooKoVp94GZi22XCda9F3M7HTHrMXsAjNHm7C26VSUbKJCySneNnKzpZ3wP88Kf8qmq6B392k3HdaUyoWXMTaBHKnkzhyMECXSzxbpZPoNa4ra6bscXUSqQijSg2uh6TR7X7hLEmDQKuDTbTVL62oMvw1qgNtsQmkeZFhrumLHj4askbDFzV8ghK15T6GDDnN9gEaFKZU7LbyWscJjdb4RGHy79LCYB2iAg6kJw4efc6p16gqKqnYPBJdXbJjXHKZpUhrJa8YcSwbFWM3YabHNFxwjNHzXJydEg37DpAjjaLVfBhcVCXEBh8K7FcojQ9yT6u3HMjFZwV4fvrBBBSMiNrhvgFVUAQtUaFVmx4BhMvkJTPsR6UrXp4HCPXgohUEUtFEJeyGQPEibBqwgjUpMLWyKUAxjKpYQ3AmdjnseE23njArKaEwrRQA4NnxpUUazzsWJqHymHPJG73GQhQtxNtvfDDMVSj95UkiscssHNEpkt6dqLeohDR1rP2kg41EBGQMNEdeYtUt1JkzdjZBsvU1oV81GG1tEQoSUR1skjq9tWpfoiSPVN9QTQC3kQUgZQQPR9arK5XWqj6y5iPnusQk8zdzoHJt5EFm7aagfLG3uJxdd9ZF7Gk4tMzijx5d1fV1uGhcxAyb5B5m8nkCdap"
254
- )
255
- );
256
-
257
- console.log(SystemProgram.programId.toString());
243
+ const filterWhitelist = true;
244
+ main(filterWhitelist).then((x) => x);
245
+
246
+ // console.log(
247
+ // decodeVersionedTx(
248
+ // "mQkqpyEB1JEkGUsowzhUXvn2v1kwdGYApNGDUsRZ1BmpmKJhMUXQhmyZoDXKPtVhcjgWQHqN6S94p2fNiPxyRhBUvN1Vs5HjbhdVjhhG4XEDCXRw4K2PPEeTowWf7N5GjQ4wZdpdP8UZtnz3CXtbkCYGnxfjt6AtanQXsJpWUpC84g7ZSfYiNAYRv2geHp6E13yNXya9FGFekmsN3S9UcmWJTQgLu9vFxmL9S6DD6npDK7wPyZ66dcKWTMg2nb8Drig8aLAiFRnkqC99QjN7YYG65qq9VkzTC7o8EbGddddrfLu6Hyk2SgEqebMvhiV729y3sWpDpbbKakknJj4PUodasfKza4XNg3jRGBoVRxvSb3QGFdhbDJa86YvQbsP7pWLqMuJcoaGX3uLgsBFA2z8kGmZBuzGAS3FtgnmE7L8dFMLWGDDKTdFwsTbeZQJsGGtn5sy627onUqyTxHy9UfuBz57h3kd26yUBUmbR9RVgCX2WMSHdEW58uYd2BYbAG4NVQYCzgcWzZEjayXn73fo2Y72Y4BrxnKcqJ8WixHjaj7PPRdvX87wxiHy9b8CxsngKhYM5sWoXVWj5CAq6drS2g7b4b7CZzjeQYkCF"
249
+ // )
250
+ // );
251
+ // console.log(
252
+ // decodeVersionedTx(
253
+ // "e6uLxBWUSbPnkYKPWoyoR6YZw7Qt4NnZcabGwaAChdAN4N4GFwvxMxwq3mrxoRM3CDzPHhAh7rbEmzAzyA8pJAhGAaDWfCG3CjnVoWbpdDQvpwUxRffK3xFDGqJeoQvQBvQtZidwaDvDnnkJ6xRgsnpujS65jcGP5AsECsaJ2uRMSsLt8ucynZjQzVw24jqaYRRmUN4otF2mSgbgkXLu9G82g8sfcj3VQuZxoA9Hrpm9kTMNu28R9wRG9yZKCQozSJjL4GGwe3ZMDRdfggbq9xPddNcHFgUGk6PYHgLvVWTr8GSLQpj8HLdtekxdywwXYcK3oS8RNmgrnbm6o7PADSWRYZhAHJLD8G92N5yCnFy8sRGHhMosdgQ5TjF8d5uG92tMfmS67VkjSJqMsX6pZnhnN9K5EFmdZxutaHMuyo5kv9DoXivrCdQrku5yfYbfCPgPY3Ei25tBYN1kTLYXoJvdUuxehjLkR2pVseae2TbApigLAhdvrxGNHLZTncunfp18c2kmWVrwLqc7UPANuKSmNAyy4ntU9nL1zkA9WTxFLsNK5xZukZi8vsK8XoM8f1wyyoiGHPHCF5i2QAat1kwEZ71GdRodeumYb96GwLyskbJJo8g8Yp5oVQhLeKopTSezEgJ3awQCgpd4xqg3rd9ijvRUq5g3aR2NbmrtEZUxumuf5G2RfPK5Nx7MFUuJeT2Pn6LHShsGCzsKt1GewgErWSJMNktBgkJkAyWMQkxt6No8ZSKjDbrnyQEGuuXLKCeMhdFFC6dm8oMgiWC6KLJjzLkG5T4iySKnYcM7pCKtfZLLXXTEGJ8Zz3rqspCGozrwzUGeL86FFqqNNCHFY2Zx2de75krrPo5QfiLMQ1ECgMkLbrmYTx8owsPeM3nDgmMTpooKoVp94GZi22XCda9F3M7HTHrMXsAjNHm7C26VSUbKJCySneNnKzpZ3wP88Kf8qmq6B392k3HdaUyoWXMTaBHKnkzhyMECXSzxbpZPoNa4ra6bscXUSqQijSg2uh6TR7X7hLEmDQKuDTbTVL62oMvw1qgNtsQmkeZFhrumLHj4askbDFzV8ghK15T6GDDnN9gEaFKZU7LbyWscJjdb4RGHy79LCYB2iAg6kJw4efc6p16gqKqnYPBJdXbJjXHKZpUhrJa8YcSwbFWM3YabHNFxwjNHzXJydEg37DpAjjaLVfBhcVCXEBh8K7FcojQ9yT6u3HMjFZwV4fvrBBBSMiNrhvgFVUAQtUaFVmx4BhMvkJTPsR6UrXp4HCPXgohUEUtFEJeyGQPEibBqwgjUpMLWyKUAxjKpYQ3AmdjnseE23njArKaEwrRQA4NnxpUUazzsWJqHymHPJG73GQhQtxNtvfDDMVSj95UkiscssHNEpkt6dqLeohDR1rP2kg41EBGQMNEdeYtUt1JkzdjZBsvU1oV81GG1tEQoSUR1skjq9tWpfoiSPVN9QTQC3kQUgZQQPR9arK5XWqj6y5iPnusQk8zdzoHJt5EFm7aagfLG3uJxdd9ZF7Gk4tMzijx5d1fV1uGhcxAyb5B5m8nkCdap"
254
+ // )
255
+ // );
256
+
257
+ // console.log(SystemProgram.programId.toString());
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haven-fi/solauto-sdk",
3
- "version": "1.0.423",
3
+ "version": "1.0.425",
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",
@@ -343,10 +343,10 @@ export async function sendJitoBundledTransactions(
343
343
 
344
344
  if (txType !== "only-simulate") {
345
345
  const signers = [...builtTxs].map((tx) => getRequiredSigners(tx.message));
346
- if (
347
- Array.from(new Set(signers.flatMap((x) => x).filter((x) => x.publicKey)))
348
- .length > 1
349
- ) {
346
+ const uniqueSigners = Array.from(
347
+ new Set(signers.flatMap((x) => x).map((x) => x.publicKey))
348
+ );
349
+ if (uniqueSigners.length > 1) {
350
350
  consoleLog("Signers:", signers);
351
351
  throw new Error("Unexpected error 301. Please retry.");
352
352
  }
@@ -25,6 +25,7 @@ export interface JupSwapDetails {
25
25
  slippageIncFactor?: number;
26
26
  exactOut?: boolean;
27
27
  exactIn?: boolean;
28
+ addPadding?: boolean;
28
29
  }
29
30
 
30
31
  function createTransactionInstruction(
@@ -116,6 +117,19 @@ export async function getJupSwapTransaction(
116
117
  priceImpactBps * (1 + (swapDetails.slippageIncFactor ?? 0));
117
118
  consoleLog("Increased price impact bps:", finalPriceImpactBps);
118
119
 
120
+ if (swapDetails.addPadding) {
121
+ consoleLog("Raw inAmount:", quoteResponse.inAmount);
122
+ quoteResponse.inAmount = Math.round(
123
+ parseInt(quoteResponse.inAmount) +
124
+ parseInt(quoteResponse.inAmount) *
125
+ Math.max(
126
+ fromBps(finalPriceImpactBps),
127
+ fromBps(finalPriceImpactBps) / 2
128
+ )
129
+ ).toString();
130
+ consoleLog("Increased inAmount:", quoteResponse.inAmount);
131
+ }
132
+
119
133
  return {
120
134
  jupQuote: quoteResponse,
121
135
  priceImpactBps: finalPriceImpactBps,
@@ -300,19 +300,35 @@ export async function getComputeUnitPriceEstimate(
300
300
  .getInstructions()
301
301
  .flatMap((x) => x.keys.flatMap((x) => x.pubkey.toString()));
302
302
 
303
- let feeEstimate: number | undefined;
304
- const resp = await umi.rpc.call("getPriorityFeeEstimate", [
305
- {
306
- transaction: !useAccounts
307
- ? bs58.encode(web3Transaction.serialize())
308
- : undefined,
309
- accountKeys: useAccounts ? accountKeys : undefined,
310
- options: {
311
- priorityLevel: prioritySetting.toString(),
312
- },
313
- },
314
- ]);
315
- feeEstimate = Math.round((resp as any).priorityFeeEstimate as number);
303
+ let feeEstimate: number | undefined;
304
+ try {
305
+ const resp = await umi.rpc.call("getPriorityFeeEstimate", [
306
+ {
307
+ transaction: !useAccounts
308
+ ? bs58.encode(web3Transaction.serialize())
309
+ : undefined,
310
+ accountKeys: useAccounts ? accountKeys : undefined,
311
+ options: {
312
+ priorityLevel: prioritySetting.toString(),
313
+ },
314
+ },
315
+ ]);
316
+ feeEstimate = Math.round((resp as any).priorityFeeEstimate as number);
317
+ } catch (e) {
318
+ try {
319
+ const resp = await umi.rpc.call("getPriorityFeeEstimate", [
320
+ {
321
+ accountKeys,
322
+ options: {
323
+ priorityLevel: prioritySetting.toString(),
324
+ },
325
+ },
326
+ ]);
327
+ feeEstimate = Math.round((resp as any).priorityFeeEstimate as number);
328
+ } catch (e) {
329
+ // console.error(e);
330
+ }
331
+ }
316
332
 
317
333
  return feeEstimate;
318
334
  }
@@ -275,7 +275,7 @@ export function getFlashLoanDetails(
275
275
  const maxLiqUtilizationRateBps = getMaxLiqUtilizationRateBps(
276
276
  client.solautoPositionState!.maxLtvBps,
277
277
  client.solautoPositionState!.liqThresholdBps,
278
- 0.015
278
+ 0.02
279
279
  );
280
280
  const requiresFlashLoan =
281
281
  supplyUsd <= 0 || tempLiqUtilizationRateBps > maxLiqUtilizationRateBps;
@@ -357,6 +357,8 @@ export function getJupSwapRebalanceDetails(
357
357
  targetLiqUtilizationRateBps === 0 || values.repayingCloseToMaxLtv;
358
358
  const exactIn = !exactOut;
359
359
 
360
+ const addPadding = targetLiqUtilizationRateBps === 0;
361
+
360
362
  return {
361
363
  inputMint: toWeb3JsPublicKey(input.mint),
362
364
  outputMint: toWeb3JsPublicKey(output.mint),
@@ -365,5 +367,6 @@ export function getJupSwapRebalanceDetails(
365
367
  amount: exactOut ? outputAmount : inputAmount,
366
368
  exactIn: exactIn,
367
369
  exactOut: exactOut,
370
+ addPadding,
368
371
  };
369
372
  }