@haven-fi/solauto-sdk 1.0.450 → 1.0.452

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.
@@ -32,6 +32,11 @@ export type TransactionManagerStatuses = {
32
32
  simulationSuccessful?: boolean;
33
33
  txSig?: string;
34
34
  }[];
35
+ interface RetryConfig {
36
+ signableRetries?: number;
37
+ totalRetries?: number;
38
+ retryDelay?: number;
39
+ }
35
40
  export declare class TransactionsManager {
36
41
  private txHandler;
37
42
  private statusCallback?;
@@ -39,11 +44,12 @@ export declare class TransactionsManager {
39
44
  private priorityFeeSetting;
40
45
  private atomically;
41
46
  private errorsToThrow?;
42
- private retries;
43
- private retryDelay;
44
47
  private statuses;
45
48
  private lookupTables;
46
- constructor(txHandler: SolautoClient | ReferralStateManager, statusCallback?: ((statuses: TransactionManagerStatuses) => void) | undefined, txType?: TransactionRunType | undefined, priorityFeeSetting?: PriorityFeeSetting, atomically?: boolean, errorsToThrow?: ErrorsToThrow | undefined, retries?: number, retryDelay?: number);
49
+ private signableRetries;
50
+ private totalRetries;
51
+ private retryDelay;
52
+ constructor(txHandler: SolautoClient | ReferralStateManager, statusCallback?: ((statuses: TransactionManagerStatuses) => void) | undefined, txType?: TransactionRunType | undefined, priorityFeeSetting?: PriorityFeeSetting, atomically?: boolean, errorsToThrow?: ErrorsToThrow | undefined, retryConfig?: RetryConfig);
47
53
  private assembleTransactionSets;
48
54
  private updateStatus;
49
55
  private debugAccounts;
@@ -57,4 +63,5 @@ export declare class TransactionsManager {
57
63
  private refreshItemSet;
58
64
  private sendTransaction;
59
65
  }
66
+ export {};
60
67
  //# 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,EAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAMzD,OAAO,EACL,aAAa,EAEd,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,kBAAkB,EAElB,qBAAqB,EACrB,kBAAkB,EACnB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,oBAAoB,EAAa,MAAM,YAAY,CAAC;AAW7D,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,EAAE,MAAM;CAK5B;AAqCD,qBAAa,eAAe;IAMjB,OAAO,EAAE,CACd,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IACxC,IAAI,CAAC,EAAE,MAAM;IARtB,oBAAoB,EAAG,MAAM,EAAE,CAAC;IAChC,EAAE,CAAC,EAAE,kBAAkB,CAAC;IACjB,WAAW,EAAE,OAAO,CAAS;gBAG3B,OAAO,EAAE,CACd,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,EACxC,IAAI,CAAC,EAAE,MAAM,YAAA;IAGhB,UAAU;IAKV,OAAO,CAAC,UAAU,EAAE,MAAM;IAMhC,cAAc,IAAI,MAAM,EAAE;CAY3B;AA0FD,oBAAY,iBAAiB;IAC3B,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,UAAU,eAAe;IACzB,MAAM,WAAW;CAClB;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,EAAE,CAAC;AAEJ,qBAAa,mBAAmB;IAK5B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,cAAc,CAAC;IACvB,OAAO,CAAC,MAAM,CAAC;IACf,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,aAAa,CAAC;IACtB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,UAAU;IAXpB,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,YAAY,CAAe;gBAGzB,SAAS,EAAE,aAAa,GAAG,oBAAoB,EAC/C,cAAc,CAAC,GAAE,CAAC,QAAQ,EAAE,0BAA0B,KAAK,IAAI,aAAA,EAC/D,MAAM,CAAC,EAAE,kBAAkB,YAAA,EAC3B,kBAAkB,GAAE,kBAA2C,EAC/D,UAAU,GAAE,OAAe,EAC3B,aAAa,CAAC,EAAE,aAAa,YAAA,EAC7B,OAAO,GAAE,MAAU,EACnB,UAAU,GAAE,MAAY;YAQpB,uBAAuB;IAwCrC,OAAO,CAAC,YAAY;YA6CN,aAAa;IAoB3B,OAAO,CAAC,4BAA4B;IAgBpC,OAAO,CAAC,mBAAmB;YAoBb,SAAS;IAiBV,UAAU,CACrB,YAAY,EAAE,eAAe,EAAE,GAC9B,OAAO,CAAC,0BAA0B,CAAC;IA+FzB,IAAI,CACf,KAAK,EAAE,eAAe,EAAE,GACvB,OAAO,CAAC,0BAA0B,CAAC;YA4BxB,6BAA6B;YAyH7B,qBAAqB;YA2CrB,cAAc;YAqCd,eAAe;CA0D9B"}
1
+ {"version":3,"file":"transactionsManager.d.ts","sourceRoot":"","sources":["../../src/transactions/transactionsManager.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,kBAAkB,EAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAMzD,OAAO,EACL,aAAa,EAEd,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,kBAAkB,EAElB,qBAAqB,EACrB,kBAAkB,EACnB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,oBAAoB,EAAa,MAAM,YAAY,CAAC;AAW7D,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,EAAE,MAAM;CAK5B;AAqCD,qBAAa,eAAe;IAMjB,OAAO,EAAE,CACd,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IACxC,IAAI,CAAC,EAAE,MAAM;IARtB,oBAAoB,EAAG,MAAM,EAAE,CAAC;IAChC,EAAE,CAAC,EAAE,kBAAkB,CAAC;IACjB,WAAW,EAAE,OAAO,CAAS;gBAG3B,OAAO,EAAE,CACd,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,EACxC,IAAI,CAAC,EAAE,MAAM,YAAA;IAGhB,UAAU;IAKV,OAAO,CAAC,UAAU,EAAE,MAAM;IAMhC,cAAc,IAAI,MAAM,EAAE;CAY3B;AA0FD,oBAAY,iBAAiB;IAC3B,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,UAAU,eAAe;IACzB,MAAM,WAAW;CAClB;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,EAAE,CAAC;AAEJ,UAAU,WAAW;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,mBAAmB;IAQ5B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,cAAc,CAAC;IACvB,OAAO,CAAC,MAAM,CAAC;IACf,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,aAAa,CAAC;IAZxB,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,UAAU,CAAS;gBAGjB,SAAS,EAAE,aAAa,GAAG,oBAAoB,EAC/C,cAAc,CAAC,GAAE,CAAC,QAAQ,EAAE,0BAA0B,KAAK,IAAI,aAAA,EAC/D,MAAM,CAAC,EAAE,kBAAkB,YAAA,EAC3B,kBAAkB,GAAE,kBAA2C,EAC/D,UAAU,GAAE,OAAe,EAC3B,aAAa,CAAC,EAAE,aAAa,YAAA,EACrC,WAAW,CAAC,EAAE,WAAW;YAab,uBAAuB;IAwCrC,OAAO,CAAC,YAAY;YA6CN,aAAa;IAoB3B,OAAO,CAAC,4BAA4B;IAgBpC,OAAO,CAAC,mBAAmB;YAoBb,SAAS;IAiBV,UAAU,CACrB,YAAY,EAAE,eAAe,EAAE,GAC9B,OAAO,CAAC,0BAA0B,CAAC;IA+FzB,IAAI,CACf,KAAK,EAAE,eAAe,EAAE,GACvB,OAAO,CAAC,0BAA0B,CAAC;YA4BxB,6BAA6B;YAiI7B,qBAAqB;YAmDrB,cAAc;YAqCd,eAAe;CA0D9B"}
@@ -142,17 +142,20 @@ var TransactionStatus;
142
142
  TransactionStatus["Failed"] = "Failed";
143
143
  })(TransactionStatus || (exports.TransactionStatus = TransactionStatus = {}));
144
144
  class TransactionsManager {
145
- constructor(txHandler, statusCallback, txType, priorityFeeSetting = types_1.PriorityFeeSetting.Min, atomically = false, errorsToThrow, retries = 4, retryDelay = 150) {
145
+ constructor(txHandler, statusCallback, txType, priorityFeeSetting = types_1.PriorityFeeSetting.Min, atomically = false, errorsToThrow, retryConfig) {
146
146
  this.txHandler = txHandler;
147
147
  this.statusCallback = statusCallback;
148
148
  this.txType = txType;
149
149
  this.priorityFeeSetting = priorityFeeSetting;
150
150
  this.atomically = atomically;
151
151
  this.errorsToThrow = errorsToThrow;
152
- this.retries = retries;
153
- this.retryDelay = retryDelay;
154
152
  this.statuses = [];
155
153
  this.lookupTables = new LookupTables(this.txHandler.defaultLookupTables(), this.txHandler.umi);
154
+ this.signableRetries =
155
+ retryConfig?.signableRetries ?? retryConfig?.totalRetries ?? 3;
156
+ this.totalRetries =
157
+ retryConfig?.totalRetries ?? retryConfig?.signableRetries ?? 4;
158
+ this.retryDelay = retryConfig?.retryDelay ?? 150;
156
159
  }
157
160
  async assembleTransactionSets(items) {
158
161
  let transactionSets = [];
@@ -335,6 +338,11 @@ class TransactionsManager {
335
338
  let num = 0;
336
339
  let transactions = [];
337
340
  await (0, generalUtils_1.retryWithExponentialBackoff)(async (attemptNum, prevError) => {
341
+ if (prevError &&
342
+ this.statuses.filter((x) => x.simulationSuccessful).length >
343
+ this.signableRetries) {
344
+ throw prevError;
345
+ }
338
346
  num = attemptNum;
339
347
  if (attemptNum > 0) {
340
348
  for (let i = 0; i < itemSets.length; i++) {
@@ -367,7 +375,7 @@ class TransactionsManager {
367
375
  throw error ? error : new Error("Unknown error");
368
376
  }
369
377
  this.updateStatusForSets(itemSets, TransactionStatus.Successful, attemptNum, txSigs);
370
- }, this.retries, this.retryDelay, this.errorsToThrow).catch((e) => {
378
+ }, this.totalRetries, this.retryDelay, this.errorsToThrow).catch((e) => {
371
379
  this.txHandler.log("Capturing error info...");
372
380
  const errorDetails = (0, transactionUtils_1.getErrorInfo)(this.txHandler.umi, transactions, e, itemSets.filter((x) => this.statuses.find((y) => x.name() === y.name)?.simulationSuccessful).length === itemSets.length);
373
381
  const errorString = `${errorDetails.errorName ?? "Unknown error"}: ${errorDetails.errorInfo?.split("\n")[0] ?? "unknown"}`;
@@ -385,6 +393,11 @@ class TransactionsManager {
385
393
  let itemSet = itemSets[currentIndex];
386
394
  let num = 0;
387
395
  await (0, generalUtils_1.retryWithExponentialBackoff)(async (attemptNum, prevError) => {
396
+ if (prevError &&
397
+ this.statuses.filter((x) => x.simulationSuccessful).length >
398
+ this.signableRetries) {
399
+ throw prevError;
400
+ }
388
401
  num = attemptNum;
389
402
  if (currentIndex > 0 || attemptNum > 0) {
390
403
  itemSet = await this.refreshItemSet(itemSets, currentIndex, attemptNum);
@@ -399,7 +412,7 @@ class TransactionsManager {
399
412
  await this.debugAccounts(itemSet, tx);
400
413
  await this.sendTransaction(tx, itemSet.name(), attemptNum, this.getUpdatedPriorityFeeSetting(prevError, attemptNum));
401
414
  }
402
- }, this.retries, this.retryDelay, this.errorsToThrow);
415
+ }, this.totalRetries, this.retryDelay, this.errorsToThrow);
403
416
  }
404
417
  async refreshItemSet(itemSets, currentIndex, attemptNum) {
405
418
  const itemSet = itemSets[currentIndex];
@@ -1 +1 @@
1
- {"version":3,"file":"jitoUtils.d.ts","sourceRoot":"","sources":["../../src/utils/jitoUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,SAAS,EAKV,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,MAAM,EACN,kBAAkB,EAClB,GAAG,EAEH,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AAQlC,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAMlE,wBAAgB,mBAAmB,IAAI,SAAS,CAa/C;AA8ND,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,kBAAkB;;;;IAkB7D;AAED,wBAAsB,2BAA2B,CAC/C,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EAAE,EACtB,GAAG,EAAE,kBAAkB,EAAE,EACzB,MAAM,CAAC,EAAE,kBAAkB,EAC3B,kBAAkB,GAAE,kBAA2C,EAC/D,cAAc,CAAC,EAAE,MAAM,IAAI,GAC1B,OAAO,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,CA8F/B"}
1
+ {"version":3,"file":"jitoUtils.d.ts","sourceRoot":"","sources":["../../src/utils/jitoUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,SAAS,EAKV,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,MAAM,EACN,kBAAkB,EAClB,GAAG,EAEH,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AAQlC,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAMlE,wBAAgB,mBAAmB,IAAI,SAAS,CAa/C;AA+ND,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,kBAAkB;;;;IAkB7D;AAED,wBAAsB,2BAA2B,CAC/C,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EAAE,EACtB,GAAG,EAAE,kBAAkB,EAAE,EACzB,MAAM,CAAC,EAAE,kBAAkB,EAC3B,kBAAkB,GAAE,kBAA2C,EAC/D,cAAc,CAAC,EAAE,MAAM,IAAI,GAC1B,OAAO,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,CA8F/B"}
@@ -8,7 +8,6 @@ exports.getRequiredSigners = getRequiredSigners;
8
8
  exports.sendJitoBundledTransactions = sendJitoBundledTransactions;
9
9
  const web3_js_1 = require("@solana/web3.js");
10
10
  const umi_web3js_adapters_1 = require("@metaplex-foundation/umi-web3js-adapters");
11
- const solautoConstants_1 = require("../constants/solautoConstants");
12
11
  const solanaUtils_1 = require("./solanaUtils");
13
12
  const generalUtils_1 = require("./generalUtils");
14
13
  const types_1 = require("../types");
@@ -129,8 +128,8 @@ async function umiToVersionedTransactions(umi, blockhash, userSigner, otherSigne
129
128
  }
130
129
  return builtTxs.map((x) => (0, umi_web3js_adapters_1.toWeb3JsTransaction)(x));
131
130
  }
132
- async function getBundleStatus(bundleId) {
133
- const res = await axios_1.default.post(`${solautoConstants_1.JITO_BLOCK_ENGINE}/api/v1/bundles`, {
131
+ async function getBundleStatus(umi, bundleId) {
132
+ const res = await axios_1.default.post(umi.rpc.getEndpoint(), {
134
133
  jsonrpc: "2.0",
135
134
  id: 1,
136
135
  method: "getBundleStatuses",
@@ -141,11 +140,11 @@ async function getBundleStatus(bundleId) {
141
140
  }
142
141
  return res.data.result;
143
142
  }
144
- async function pollBundleStatus(bundleId, interval = 1000, timeout = 40000) {
143
+ async function pollBundleStatus(umi, bundleId, interval = 1000, timeout = 40000) {
145
144
  const endTime = Date.now() + timeout;
146
145
  while (Date.now() < endTime) {
147
146
  await new Promise((resolve) => setTimeout(resolve, interval));
148
- const statuses = await getBundleStatus(bundleId);
147
+ const statuses = await getBundleStatus(umi, bundleId);
149
148
  if (statuses?.value?.length > 0) {
150
149
  (0, generalUtils_1.consoleLog)("Statuses:", statuses);
151
150
  const status = statuses.value[0].confirmation_status;
@@ -182,7 +181,7 @@ async function sendJitoBundle(umi, transactions) {
182
181
  }
183
182
  const bundleId = resp.data.result;
184
183
  (0, generalUtils_1.consoleLog)("Bundle ID:", bundleId);
185
- return bundleId ? await pollBundleStatus(bundleId) : [];
184
+ return bundleId ? await pollBundleStatus(umi, bundleId) : [];
186
185
  }
187
186
  function getRequiredSigners(message) {
188
187
  const { numRequiredSignatures, numReadonlySignedAccounts } = message.header;
@@ -1 +1 @@
1
- {"version":3,"file":"marginfiUtils.d.ts","sourceRoot":"","sources":["../../src/utils/marginfiUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAa,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EACL,IAAI,EAGJ,eAAe,EAGhB,MAAM,iBAAiB,CAAC;AAazB,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAsB,MAAM,cAAc,CAAC;AAEjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAI7D,UAAU,wBAAyB,SAAQ,qBAAqB;IAC9D,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,SAAS,GACd,wBAAwB,CAY1B;AAED,wBAAgB,iCAAiC,CAC/C,UAAU,EAAE,IAAI,EAChB,QAAQ,EAAE,IAAI,EACd,WAAW,EAAE,MAAM,GAClB,CAAC,MAAM,EAAE,MAAM,CAAC,CA6BlB;AAED,wBAAsB,gCAAgC,CACpD,GAAG,EAAE,GAAG,EACR,aAAa,EAAE,SAAS,EACxB,MAAM,EAAE;IACN,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACpB,EACD,IAAI,EAAE;IACJ,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACpB,EACD,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA4C3B;AAED,wBAAsB,iCAAiC,CACrD,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,EACpB,KAAK,CAAC,EAAE,SAAS,EACjB,qBAAqB,CAAC,EAAE,OAAO,GAC9B,OAAO,CACR;IAAE,eAAe,EAAE,SAAS,CAAC;IAAC,UAAU,CAAC,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,EAAE,CAC/E,CAiEA;AAED,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,IAAI,GAAG,IAAI,EACjB,OAAO,EAAE,OAAO,UAejB;AAsDD,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,KAAK,UAAU,GAAG;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAA;CAAE,CAAC;AAEhE,wBAAsB,+BAA+B,CACnD,GAAG,EAAE,GAAG,EACR,eAAe,EAAE;IAAE,EAAE,EAAE,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,eAAe,CAAA;CAAE,EAC1D,aAAa,CAAC,EAAE,SAAS,EACzB,MAAM,CAAC,EAAE,aAAa,EACtB,IAAI,CAAC,EAAE,aAAa,EACpB,mBAAmB,CAAC,EAAE,mBAAmB,GACxC,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CA0LpC;AA+DD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,oBAU7C;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAgBnE;AAED,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,eAAe,WASpE"}
1
+ {"version":3,"file":"marginfiUtils.d.ts","sourceRoot":"","sources":["../../src/utils/marginfiUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAa,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EACL,IAAI,EAGJ,eAAe,EAGhB,MAAM,iBAAiB,CAAC;AAazB,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAsB,MAAM,cAAc,CAAC;AAEjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAI7D,UAAU,wBAAyB,SAAQ,qBAAqB;IAC9D,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,SAAS,GACd,wBAAwB,CAY1B;AAED,wBAAgB,iCAAiC,CAC/C,UAAU,EAAE,IAAI,EAChB,QAAQ,EAAE,IAAI,EACd,WAAW,EAAE,MAAM,GAClB,CAAC,MAAM,EAAE,MAAM,CAAC,CA6BlB;AAED,wBAAsB,gCAAgC,CACpD,GAAG,EAAE,GAAG,EACR,aAAa,EAAE,SAAS,EACxB,MAAM,EAAE;IACN,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACpB,EACD,IAAI,EAAE;IACJ,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACpB,EACD,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA4C3B;AAED,wBAAsB,iCAAiC,CACrD,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,EACpB,KAAK,CAAC,EAAE,SAAS,EACjB,qBAAqB,CAAC,EAAE,OAAO,GAC9B,OAAO,CACR;IAAE,eAAe,EAAE,SAAS,CAAC;IAAC,UAAU,CAAC,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,EAAE,CAC/E,CAiEA;AAED,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,IAAI,GAAG,IAAI,EACjB,OAAO,EAAE,OAAO,UAejB;AAsDD,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,KAAK,UAAU,GAAG;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAA;CAAE,CAAC;AAEhE,wBAAsB,+BAA+B,CACnD,GAAG,EAAE,GAAG,EACR,eAAe,EAAE;IAAE,EAAE,EAAE,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,eAAe,CAAA;CAAE,EAC1D,aAAa,CAAC,EAAE,SAAS,EACzB,MAAM,CAAC,EAAE,aAAa,EACtB,IAAI,CAAC,EAAE,aAAa,EACpB,mBAAmB,CAAC,EAAE,mBAAmB,GACxC,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CA6LpC;AA+DD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,oBAU7C;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAgBnE;AAED,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,eAAe,WASpE"}
@@ -253,6 +253,8 @@ async function getMarginfiAccountPositionState(umi, protocolAccount, marginfiGro
253
253
  }, supplyPrice);
254
254
  const supplyUsd = (0, numberUtils_1.fromBaseUnit)(supplyUsage.amountUsed.baseAmountUsdValue, generalAccounts_1.USD_DECIMALS);
255
255
  const debtUsd = (0, numberUtils_1.fromBaseUnit)(debtUsage?.amountUsed?.baseAmountUsdValue ?? BigInt(0), generalAccounts_1.USD_DECIMALS);
256
+ console.log("Asset weight init", (0, numberUtils_1.bytesToI80F48)(supplyBank.config.assetWeightInit.value));
257
+ console.log("Liability weight init", (0, numberUtils_1.bytesToI80F48)(debtBank.config.liabilityWeightInit.value));
256
258
  return {
257
259
  liqUtilizationRateBps: (0, numberUtils_1.getLiqUtilzationRateBps)(supplyUsd, debtUsd, (0, numberUtils_1.toBps)(liqThreshold)),
258
260
  netWorth: {
@@ -119,7 +119,7 @@ function getMaxLiqUtilizationRateBps(maxLtvBps, liqThresholdBps, offsetFromMaxLt
119
119
  1); // -1 to account for any rounding issues
120
120
  }
121
121
  function maxRepayFromBps(maxLtvBps, liqThresholdBps) {
122
- return Math.min(9000, getMaxLiqUtilizationRateBps(maxLtvBps, liqThresholdBps - 1000, 0.01));
122
+ return Math.min(8700, getMaxLiqUtilizationRateBps(maxLtvBps, liqThresholdBps - 1000, 0.01));
123
123
  }
124
124
  function maxRepayToBps(maxLtvBps, liqThresholdBps) {
125
125
  return Math.min(maxRepayFromBps(maxLtvBps, liqThresholdBps) - constants_1.MIN_REPAY_GAP_BPS, getMaxLiqUtilizationRateBps(maxLtvBps, liqThresholdBps, 0.01));
@@ -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;AAoI9C,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,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe;;;EAsDxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,SAAS,CAAC;IAChB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,aAAa,GACtB,gBAAgB,GAAG,SAAS,CAmC9B;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe,EACvB,2BAA2B,CAAC,EAAE,MAAM,EACpC,UAAU,CAAC,EAAE,MAAM,GAClB,cAAc,CA4DhB"}
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;AAcjD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAoI9C,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,CA2DjB;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe;;;EAsDxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,SAAS,CAAC;IAChB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,aAAa,GACtB,gBAAgB,GAAG,SAAS,CAmC9B;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe,EACvB,2BAA2B,CAAC,EAAE,MAAM,EACpC,UAAU,CAAC,EAAE,MAAM,GAClB,cAAc,CA4DhB"}
@@ -82,7 +82,8 @@ function getTargetRateAndDcaAmount(state, settings, dca, currentUnixTime, target
82
82
  }
83
83
  }
84
84
  function getRebalanceValues(state, settings, dca, currentUnixTime, supplyPrice, debtPrice, targetLiqUtilizationRateBps) {
85
- const { targetRateBps, amountToDcaIn } = getTargetRateAndDcaAmount(state, settings, dca, currentUnixTime, targetLiqUtilizationRateBps);
85
+ let { targetRateBps, amountToDcaIn } = getTargetRateAndDcaAmount(state, settings, dca, currentUnixTime, targetLiqUtilizationRateBps);
86
+ // targetRateBps = 6500;
86
87
  const amountUsdToDcaIn = (0, numberUtils_1.fromBaseUnit)(BigInt(Math.round(amountToDcaIn ?? 0)), state.debt.decimals) *
87
88
  (dca?.tokenType === generated_1.TokenType.Debt ? debtPrice : supplyPrice);
88
89
  const rebalanceDirection = amountUsdToDcaIn > 0 || state.liqUtilizationRateBps <= targetRateBps
@@ -93,6 +94,7 @@ function getRebalanceValues(state, settings, dca, currentUnixTime, supplyPrice,
93
94
  amountUsdToDcaIn;
94
95
  const debtUsd = (0, numberUtils_1.fromBaseUnit)(state.debt.amountUsed.baseAmountUsdValue, generalAccounts_1.USD_DECIMALS);
95
96
  let debtAdjustmentUsd = (0, numberUtils_1.getDebtAdjustmentUsd)(state.liqThresholdBps, supplyUsd, debtUsd, targetRateBps, adjustmentFeeBps);
97
+ (0, generalUtils_2.consoleLog)("Target rate:", targetRateBps);
96
98
  const maxRepayTo = (0, numberUtils_1.maxRepayToBps)(state.maxLtvBps, state.liqThresholdBps);
97
99
  return {
98
100
  debtAdjustmentUsd,
package/local/shared.ts CHANGED
@@ -21,7 +21,7 @@ export function getSecretKey(keypairFilename: string = "id"): Uint8Array {
21
21
  );
22
22
  }
23
23
 
24
- const keypair = Keypair.fromSecretKey(getSecretKey("solauto-auth"));
24
+ const keypair = Keypair.fromSecretKey(getSecretKey("solauto-fees"));
25
25
  const [connection, _] = getSolanaRpcConnection(buildHeliusApiUrl(process.env.HELIUS_API_KEY ?? ""));
26
26
 
27
27
  async function createAndSendV0Tx(txInstructions: TransactionInstruction[]) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haven-fi/solauto-sdk",
3
- "version": "1.0.450",
3
+ "version": "1.0.452",
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",
@@ -218,9 +218,18 @@ export type TransactionManagerStatuses = {
218
218
  txSig?: string;
219
219
  }[];
220
220
 
221
+ interface RetryConfig {
222
+ signableRetries?: number;
223
+ totalRetries?: number;
224
+ retryDelay?: number;
225
+ }
226
+
221
227
  export class TransactionsManager {
222
228
  private statuses: TransactionManagerStatuses = [];
223
229
  private lookupTables: LookupTables;
230
+ private signableRetries: number;
231
+ private totalRetries: number;
232
+ private retryDelay: number;
224
233
 
225
234
  constructor(
226
235
  private txHandler: SolautoClient | ReferralStateManager,
@@ -229,13 +238,17 @@ export class TransactionsManager {
229
238
  private priorityFeeSetting: PriorityFeeSetting = PriorityFeeSetting.Min,
230
239
  private atomically: boolean = false,
231
240
  private errorsToThrow?: ErrorsToThrow,
232
- private retries: number = 4,
233
- private retryDelay: number = 150
241
+ retryConfig?: RetryConfig
234
242
  ) {
235
243
  this.lookupTables = new LookupTables(
236
244
  this.txHandler.defaultLookupTables(),
237
245
  this.txHandler.umi
238
246
  );
247
+ this.signableRetries =
248
+ retryConfig?.signableRetries ?? retryConfig?.totalRetries ?? 3;
249
+ this.totalRetries =
250
+ retryConfig?.totalRetries ?? retryConfig?.signableRetries ?? 4;
251
+ this.retryDelay = retryConfig?.retryDelay ?? 150;
239
252
  }
240
253
 
241
254
  private async assembleTransactionSets(
@@ -529,6 +542,14 @@ export class TransactionsManager {
529
542
 
530
543
  await retryWithExponentialBackoff(
531
544
  async (attemptNum, prevError) => {
545
+ if (
546
+ prevError &&
547
+ this.statuses.filter((x) => x.simulationSuccessful).length >
548
+ this.signableRetries
549
+ ) {
550
+ throw prevError;
551
+ }
552
+
532
553
  num = attemptNum;
533
554
 
534
555
  if (attemptNum > 0) {
@@ -609,7 +630,7 @@ export class TransactionsManager {
609
630
  txSigs
610
631
  );
611
632
  },
612
- this.retries,
633
+ this.totalRetries,
613
634
  this.retryDelay,
614
635
  this.errorsToThrow
615
636
  ).catch((e: Error) => {
@@ -653,6 +674,14 @@ export class TransactionsManager {
653
674
 
654
675
  await retryWithExponentialBackoff(
655
676
  async (attemptNum, prevError) => {
677
+ if (
678
+ prevError &&
679
+ this.statuses.filter((x) => x.simulationSuccessful).length >
680
+ this.signableRetries
681
+ ) {
682
+ throw prevError;
683
+ }
684
+
656
685
  num = attemptNum;
657
686
 
658
687
  if (currentIndex > 0 || attemptNum > 0) {
@@ -681,7 +710,7 @@ export class TransactionsManager {
681
710
  );
682
711
  }
683
712
  },
684
- this.retries,
713
+ this.totalRetries,
685
714
  this.retryDelay,
686
715
  this.errorsToThrow
687
716
  );
@@ -196,8 +196,8 @@ async function umiToVersionedTransactions(
196
196
  return builtTxs.map((x) => toWeb3JsTransaction(x));
197
197
  }
198
198
 
199
- async function getBundleStatus(bundleId: string) {
200
- const res = await axios.post(`${JITO_BLOCK_ENGINE}/api/v1/bundles`, {
199
+ async function getBundleStatus(umi: Umi, bundleId: string) {
200
+ const res = await axios.post(umi.rpc.getEndpoint(), {
201
201
  jsonrpc: "2.0",
202
202
  id: 1,
203
203
  method: "getBundleStatuses",
@@ -211,6 +211,7 @@ async function getBundleStatus(bundleId: string) {
211
211
  }
212
212
 
213
213
  async function pollBundleStatus(
214
+ umi: Umi,
214
215
  bundleId: string,
215
216
  interval = 1000,
216
217
  timeout = 40000
@@ -218,7 +219,7 @@ async function pollBundleStatus(
218
219
  const endTime = Date.now() + timeout;
219
220
  while (Date.now() < endTime) {
220
221
  await new Promise((resolve) => setTimeout(resolve, interval));
221
- const statuses = await getBundleStatus(bundleId);
222
+ const statuses = await getBundleStatus(umi, bundleId);
222
223
  if (statuses?.value?.length > 0) {
223
224
  consoleLog("Statuses:", statuses);
224
225
  const status = statuses.value[0].confirmation_status;
@@ -260,7 +261,7 @@ async function sendJitoBundle(
260
261
 
261
262
  const bundleId = resp.data.result;
262
263
  consoleLog("Bundle ID:", bundleId);
263
- return bundleId ? await pollBundleStatus(bundleId) : [];
264
+ return bundleId ? await pollBundleStatus(umi, bundleId) : [];
264
265
  }
265
266
 
266
267
  export function getRequiredSigners(message: TransactionMessage) {
@@ -464,6 +464,9 @@ export async function getMarginfiAccountPositionState(
464
464
  USD_DECIMALS
465
465
  );
466
466
 
467
+ console.log("Asset weight init", bytesToI80F48(supplyBank.config.assetWeightInit.value));
468
+ console.log("Liability weight init", bytesToI80F48(debtBank.config.liabilityWeightInit.value));
469
+
467
470
  return {
468
471
  liqUtilizationRateBps: getLiqUtilzationRateBps(
469
472
  supplyUsd,
@@ -166,7 +166,7 @@ export function getMaxLiqUtilizationRateBps(
166
166
 
167
167
  export function maxRepayFromBps(maxLtvBps: number, liqThresholdBps: number) {
168
168
  return Math.min(
169
- 9000,
169
+ 8700,
170
170
  getMaxLiqUtilizationRateBps(maxLtvBps, liqThresholdBps - 1000, 0.01)
171
171
  );
172
172
  }
@@ -24,6 +24,7 @@ import {
24
24
  getLiqUtilzationRateBps,
25
25
  getMaxLiqUtilizationRateBps,
26
26
  getSolautoFeesBps,
27
+ maxBoostToBps,
27
28
  maxRepayToBps,
28
29
  toBaseUnit,
29
30
  } from "../numberUtils";
@@ -180,7 +181,7 @@ export function getRebalanceValues(
180
181
  debtPrice: number,
181
182
  targetLiqUtilizationRateBps?: number
182
183
  ): RebalanceValues {
183
- const { targetRateBps, amountToDcaIn } = getTargetRateAndDcaAmount(
184
+ let { targetRateBps, amountToDcaIn } = getTargetRateAndDcaAmount(
184
185
  state,
185
186
  settings,
186
187
  dca,
@@ -188,6 +189,8 @@ export function getRebalanceValues(
188
189
  targetLiqUtilizationRateBps
189
190
  );
190
191
 
192
+ // targetRateBps = 6500;
193
+
191
194
  const amountUsdToDcaIn =
192
195
  fromBaseUnit(BigInt(Math.round(amountToDcaIn ?? 0)), state.debt.decimals) *
193
196
  (dca?.tokenType === TokenType.Debt ? debtPrice : supplyPrice);
@@ -218,6 +221,7 @@ export function getRebalanceValues(
218
221
  adjustmentFeeBps
219
222
  );
220
223
 
224
+ consoleLog("Target rate:", targetRateBps);
221
225
  const maxRepayTo = maxRepayToBps(state.maxLtvBps, state.liqThresholdBps);
222
226
  return {
223
227
  debtAdjustmentUsd,
@@ -40,7 +40,7 @@ describe("Solauto Marginfi tests", async () => {
40
40
  // const signer = setupTest();
41
41
  const signer = setupTest("solauto-manager");
42
42
 
43
- const payForTransactions = false;
43
+ const payForTransactions = true;
44
44
  const testProgram = false;
45
45
  const positionId = 1;
46
46
 
@@ -58,7 +58,7 @@ describe("Solauto Marginfi tests", async () => {
58
58
  await client.initialize({
59
59
  signer,
60
60
  positionId,
61
- authority: new PublicKey("He4ka5Q3N1UvZikZvykdi47xyk5PoVP2tcQL5sVp31Sz"),
61
+ authority: new PublicKey("7GMmfZdCgJSCawA7roGiGgvueU3XoEHQXUtiCnuDYUde"),
62
62
  // new: true,
63
63
  // marginfiAccount: new PublicKey(
64
64
  // ""