@haven-fi/solauto-sdk 1.0.634 → 1.0.636

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.
@@ -16,6 +16,7 @@ export declare class RebalanceTxBuilder {
16
16
  private getFlashLoanDetails;
17
17
  private setRebalanceType;
18
18
  private realtimeUsdToEmaUsd;
19
+ private getInitialRebalanceValues;
19
20
  private setRebalanceDetails;
20
21
  private refreshBeforeRebalance;
21
22
  private assembleTransaction;
@@ -1 +1 @@
1
- {"version":3,"file":"rebalanceTxBuilder.d.ts","sourceRoot":"","sources":["../../../src/services/rebalance/rebalanceTxBuilder.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAGL,qBAAqB,EACtB,MAAM,aAAa,CAAC;AA0BrB,qBAAa,kBAAkB;IAQ3B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,2BAA2B,CAAC;IARtC,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,WAAW,CAAwB;IAC3C,OAAO,CAAC,cAAc,CAAC,CAAwB;IAC/C,OAAO,CAAC,SAAS,CAAa;gBAGpB,MAAM,EAAE,aAAa,EACrB,2BAA2B,CAAC,EAAE,MAAM,YAAA;IAG9C,OAAO,CAAC,0BAA0B;IAQlC,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,oBAAoB;YAyCd,qBAAqB;IAyCnC,OAAO,CAAC,mBAAmB;IAwB3B,OAAO,CAAC,gBAAgB;IA+BxB,OAAO,CAAC,mBAAmB;YAOb,mBAAmB;YAqCnB,sBAAsB;YAyBtB,mBAAmB;IAkEpB,gBAAgB,CAC3B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;CAW9C"}
1
+ {"version":3,"file":"rebalanceTxBuilder.d.ts","sourceRoot":"","sources":["../../../src/services/rebalance/rebalanceTxBuilder.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAGL,qBAAqB,EACtB,MAAM,aAAa,CAAC;AA0BrB,qBAAa,kBAAkB;IAQ3B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,2BAA2B,CAAC;IARtC,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,WAAW,CAAwB;IAC3C,OAAO,CAAC,cAAc,CAAC,CAAwB;IAC/C,OAAO,CAAC,SAAS,CAAiC;gBAGxC,MAAM,EAAE,aAAa,EACrB,2BAA2B,CAAC,EAAE,MAAM,YAAA;IAG9C,OAAO,CAAC,0BAA0B;IAQlC,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,oBAAoB;YAyCd,qBAAqB;IAyCnC,OAAO,CAAC,mBAAmB;IAwB3B,OAAO,CAAC,gBAAgB;IA+BxB,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,yBAAyB;YA4BnB,mBAAmB;YAwBnB,sBAAsB;YAyBtB,mBAAmB;IAkEpB,gBAAgB,CAC3B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;CAe9C"}
@@ -13,6 +13,7 @@ class RebalanceTxBuilder {
13
13
  constructor(client, targetLiqUtilizationRateBps) {
14
14
  this.client = client;
15
15
  this.targetLiqUtilizationRateBps = targetLiqUtilizationRateBps;
16
+ this.priceType = generated_1.PriceType.Realtime;
16
17
  }
17
18
  shouldProceedWithRebalance() {
18
19
  return (this.client.pos.supplyUsd() > 0 &&
@@ -117,14 +118,27 @@ class RebalanceTxBuilder {
117
118
  return ((realtimeAmountUsd / (0, utils_1.safeGetPrice)(mint, generated_1.PriceType.Realtime)) *
118
119
  (0, utils_1.safeGetPrice)(mint, generated_1.PriceType.Ema));
119
120
  }
120
- async setRebalanceDetails(attemptNum) {
121
- this.priceType = generated_1.PriceType.Realtime;
122
- this.values = this.getRebalanceValues();
123
- const postRebalanceEmaUtilRateBps = (0, utils_1.getLiqUtilzationRateBps)(this.realtimeUsdToEmaUsd(this.values.endResult.supplyUsd, this.client.pos.supplyMint), this.realtimeUsdToEmaUsd(this.values.endResult.debtUsd, this.client.pos.debtMint), this.client.pos.state.liqThresholdBps);
121
+ getInitialRebalanceValues() {
122
+ let rebalanceValues = this.getRebalanceValues();
123
+ if (!rebalanceValues) {
124
+ return undefined;
125
+ }
126
+ const postRebalanceEmaUtilRateBps = (0, utils_1.getLiqUtilzationRateBps)(this.realtimeUsdToEmaUsd(rebalanceValues.endResult.supplyUsd, this.client.pos.supplyMint), this.realtimeUsdToEmaUsd(rebalanceValues.endResult.debtUsd, this.client.pos.debtMint), this.client.pos.state.liqThresholdBps);
124
127
  if (postRebalanceEmaUtilRateBps > this.client.pos.maxBoostToBps) {
125
128
  this.priceType = generated_1.PriceType.Ema;
126
- this.values = this.getRebalanceValues();
129
+ rebalanceValues = this.getRebalanceValues();
130
+ if (!rebalanceValues) {
131
+ return undefined;
132
+ }
127
133
  }
134
+ return rebalanceValues;
135
+ }
136
+ async setRebalanceDetails(attemptNum) {
137
+ const rebalanceValues = this.getInitialRebalanceValues();
138
+ if (!rebalanceValues) {
139
+ return false;
140
+ }
141
+ this.values = rebalanceValues;
128
142
  this.flRequirements = await this.flashLoanRequirements(attemptNum);
129
143
  if (this.flRequirements?.flFeeBps) {
130
144
  this.values = this.getRebalanceValues(this.flRequirements.flFeeBps);
@@ -132,6 +146,7 @@ class RebalanceTxBuilder {
132
146
  this.swapManager = new rebalanceSwapManager_1.RebalanceSwapManager(this.client, this.values, this.flRequirements, this.targetLiqUtilizationRateBps);
133
147
  await this.swapManager.setSwapParams(attemptNum);
134
148
  this.setRebalanceType();
149
+ return true;
135
150
  }
136
151
  async refreshBeforeRebalance() {
137
152
  if (this.client.selfManaged ||
@@ -200,7 +215,10 @@ class RebalanceTxBuilder {
200
215
  this.client.log("Not eligible for a rebalance");
201
216
  return undefined;
202
217
  }
203
- await this.setRebalanceDetails(attemptNum);
218
+ const proceed = await this.setRebalanceDetails(attemptNum);
219
+ if (!proceed) {
220
+ return undefined;
221
+ }
204
222
  return await this.assembleTransaction();
205
223
  }
206
224
  }
@@ -26,6 +26,6 @@ export interface RebalanceValues extends DebtAdjustment {
26
26
  tokenBalanceChange?: TokenBalanceChange;
27
27
  repayingCloseToMaxLtv: boolean;
28
28
  }
29
- export declare function getRebalanceValues(solautoPosition: SolautoPositionEx, priceType: PriceType, targetLiqUtilizationRateBps?: number, solautoFeeBps?: SolautoFeesBps, flFeeBps?: number): RebalanceValues;
29
+ export declare function getRebalanceValues(solautoPosition: SolautoPositionEx, priceType: PriceType, targetLiqUtilizationRateBps?: number, solautoFeeBps?: SolautoFeesBps, flFeeBps?: number): RebalanceValues | undefined;
30
30
  export {};
31
31
  //# sourceMappingURL=rebalanceValues.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rebalanceValues.d.ts","sourceRoot":"","sources":["../../../src/services/rebalance/rebalanceValues.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,SAAS,EACT,kBAAkB,EAClB,kBAAkB,EAEnB,MAAM,iBAAiB,CAAC;AAOzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,cAAc,CAAC;IAC1B,iCAAiC,EAAE,MAAM,CAAC;CAC3C;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,yBAAyB;IACjC,MAAM,EAAE,cAAc,CAAC;IACvB,iCAAiC,EAAE,MAAM,CAAC;CAC3C;AAED,wBAAgB,sBAAsB,CACpC,iBAAiB,EAAE,MAAM,EACzB,GAAG,EAAE,cAAc,EACnB,YAAY,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE,gBAAgB,GACtB,yBAAyB,CA8B3B;AAED,wBAAgB,iBAAiB,CAC/B,eAAe,EAAE,MAAM,EACvB,GAAG,EAAE,cAAc,EACnB,2BAA2B,EAAE,MAAM,EACnC,IAAI,CAAC,EAAE,gBAAgB,GACtB,cAAc,CAgChB;AA2ED,MAAM,WAAW,eAAgB,SAAQ,cAAc;IACrD,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAED,wBAAgB,kBAAkB,CAChC,eAAe,EAAE,iBAAiB,EAClC,SAAS,EAAE,SAAS,EACpB,2BAA2B,CAAC,EAAE,MAAM,EACpC,aAAa,CAAC,EAAE,cAAc,EAC9B,QAAQ,CAAC,EAAE,MAAM,GAChB,eAAe,CA2CjB"}
1
+ {"version":3,"file":"rebalanceValues.d.ts","sourceRoot":"","sources":["../../../src/services/rebalance/rebalanceValues.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,SAAS,EACT,kBAAkB,EAClB,kBAAkB,EAEnB,MAAM,iBAAiB,CAAC;AAOzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,cAAc,CAAC;IAC1B,iCAAiC,EAAE,MAAM,CAAC;CAC3C;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,yBAAyB;IACjC,MAAM,EAAE,cAAc,CAAC;IACvB,iCAAiC,EAAE,MAAM,CAAC;CAC3C;AAED,wBAAgB,sBAAsB,CACpC,iBAAiB,EAAE,MAAM,EACzB,GAAG,EAAE,cAAc,EACnB,YAAY,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE,gBAAgB,GACtB,yBAAyB,CA8B3B;AAED,wBAAgB,iBAAiB,CAC/B,eAAe,EAAE,MAAM,EACvB,GAAG,EAAE,cAAc,EACnB,2BAA2B,EAAE,MAAM,EACnC,IAAI,CAAC,EAAE,gBAAgB,GACtB,cAAc,CAgChB;AA2ED,MAAM,WAAW,eAAgB,SAAQ,cAAc;IACrD,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAED,wBAAgB,kBAAkB,CAChC,eAAe,EAAE,iBAAiB,EAClC,SAAS,EAAE,SAAS,EACpB,2BAA2B,CAAC,EAAE,MAAM,EACpC,aAAa,CAAC,EAAE,cAAc,EAC9B,QAAQ,CAAC,EAAE,MAAM,GAChB,eAAe,GAAG,SAAS,CA8C7B"}
@@ -67,7 +67,7 @@ function getTargetLiqUtilizationRateBps(solautoPosition, priceType, targetLiqUti
67
67
  // else if (tokenBalanceChange !== null) {
68
68
  // return currentRate;
69
69
  // }
70
- throw new generated_1.InvalidRebalanceConditionError((0, generated_1.createSolautoProgram)());
70
+ return undefined;
71
71
  }
72
72
  function getAdjustedPositionValues(solautoPosition, priceType, tokenBalanceChange) {
73
73
  let supplyUsd = solautoPosition.supplyUsd(priceType);
@@ -100,6 +100,9 @@ function getRebalanceDirection(solautoPosition, targetLtvBps) {
100
100
  function getRebalanceValues(solautoPosition, priceType, targetLiqUtilizationRateBps, solautoFeeBps, flFeeBps) {
101
101
  const tokenBalanceChange = getTokenBalanceChange();
102
102
  const targetRate = getTargetLiqUtilizationRateBps(solautoPosition, priceType, targetLiqUtilizationRateBps, tokenBalanceChange);
103
+ if (targetRate === undefined) {
104
+ return undefined;
105
+ }
103
106
  const rebalanceDirection = getRebalanceDirection(solautoPosition, targetRate);
104
107
  const position = getAdjustedPositionValues(solautoPosition, priceType, tokenBalanceChange);
105
108
  const fees = {
@@ -1 +1 @@
1
- {"version":3,"file":"transactionUtils.d.ts","sourceRoot":"","sources":["../../../src/services/transactions/transactionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA8B,MAAM,iBAAiB,CAAC;AAKxE,OAAO,EAIL,kBAAkB,EAClB,GAAG,EAGJ,MAAM,0BAA0B,CAAC;AAiBlC,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AA2BjE,OAAO,EAAE,qBAAqB,EAAyB,MAAM,aAAa,CAAC;AAwL3E,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,EACtB,sBAAsB,EAAE,MAAM,EAAE,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CAyF7B;AA8LD,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,GACrB,OAAO,CAAC,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,CA0BnD;AAED,wBAAsB,gCAAgC,CACpD,eAAe,EAAE,oBAAoB,EACrC,YAAY,EAAE,SAAS,EACvB,eAAe,EAAE,SAAS,GACzB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAuC5C;AAED,wBAAgB,YAAY,CAC1B,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,kBAAkB,EAAE,EACzB,KAAK,EAAE,KAAK,EACZ,oBAAoB,CAAC,EAAE,OAAO;;;;EAuH/B"}
1
+ {"version":3,"file":"transactionUtils.d.ts","sourceRoot":"","sources":["../../../src/services/transactions/transactionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA8B,MAAM,iBAAiB,CAAC;AAKxE,OAAO,EAIL,kBAAkB,EAClB,GAAG,EAGJ,MAAM,0BAA0B,CAAC;AAiBlC,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AA2BjE,OAAO,EAAE,qBAAqB,EAAyB,MAAM,aAAa,CAAC;AAwL3E,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,EACtB,sBAAsB,EAAE,MAAM,EAAE,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CAyF7B;AA8LD,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,GACrB,OAAO,CAAC,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,CA0BnD;AAED,wBAAsB,gCAAgC,CACpD,eAAe,EAAE,oBAAoB,EACrC,YAAY,EAAE,SAAS,EACvB,eAAe,EAAE,SAAS,GACzB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAuC5C;AAED,wBAAgB,YAAY,CAC1B,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,kBAAkB,EAAE,EACzB,KAAK,EAAE,KAAK,EACZ,oBAAoB,CAAC,EAAE,OAAO;;;;EA8G/B"}
@@ -339,14 +339,6 @@ async function convertReferralFeesToDestination(referralManager, tokenAccount, d
339
339
  return { tx, lookupTableAddresses };
340
340
  }
341
341
  function getErrorInfo(umi, txs, error, simulationSuccessful) {
342
- if (error instanceof generated_1.InvalidRebalanceConditionError) {
343
- return {
344
- canBeIgnored: true,
345
- errorName: generated_1.InvalidRebalanceConditionError.name,
346
- errorInfo: new generated_1.InvalidRebalanceConditionError((0, generated_1.createSolautoProgram)())
347
- .message,
348
- };
349
- }
350
342
  let canBeIgnored = false;
351
343
  let errorName = undefined;
352
344
  let errorInfo = undefined;
@@ -80,13 +80,13 @@ export declare abstract class SolautoPositionEx {
80
80
  updateSupply(newSupplyUsd: number, supplyPrice?: number): void;
81
81
  updateDebt(newDebtUsd: number, debtPrice?: number): void;
82
82
  updateNetWorth(supplyPrice?: number): void;
83
- updateLiqUtilizationRate(priceType?: PriceType): void;
83
+ updateLiqUtilizationRate(supplyUsd?: number, debtUsd?: number, priceType?: PriceType): void;
84
84
  updateWithLatestPrices(data?: {
85
85
  priceType?: PriceType;
86
86
  supplyPrice?: number;
87
87
  debtPrice?: number;
88
88
  }): Promise<void>;
89
- simulateRebalance(unixTime: number, supplyPrice: number, debtPrice: number, targetLiqUtilizationRateBps?: number): void;
89
+ simulateRebalance(unixTime: number, supplyPrice: number, debtPrice: number, targetLiqUtilizationRateBps?: number): undefined;
90
90
  refetchPositionData(): Promise<void>;
91
91
  }
92
92
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"solautoPositionEx.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/solautoPositionEx.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"solautoPositionEx.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/solautoPositionEx.ts"],"names":[],"mappings":"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"}
@@ -201,8 +201,8 @@ class SolautoPositionEx {
201
201
  (0, utils_1.toRoundedUsdValue)(netWorthUsd);
202
202
  this._data.state.netWorth.baseUnit = (0, utils_1.toBaseUnit)(netWorthUsd / (supplyPrice ?? (0, utils_1.safeGetPrice)(this.supplyMint) ?? 0), this.supplyMintInfo.decimals);
203
203
  }
204
- updateLiqUtilizationRate(priceType) {
205
- this._data.state.liqUtilizationRateBps = (0, utils_1.getLiqUtilzationRateBps)(this.supplyUsd(priceType), this.debtUsd(priceType), this.state.liqThresholdBps);
204
+ updateLiqUtilizationRate(supplyUsd, debtUsd, priceType) {
205
+ this._data.state.liqUtilizationRateBps = (0, utils_1.getLiqUtilzationRateBps)(supplyUsd ?? this.supplyUsd(priceType), debtUsd ?? this.debtUsd(priceType), this.state.liqThresholdBps);
206
206
  }
207
207
  async updateWithLatestPrices(data) {
208
208
  if (!data) {
@@ -216,15 +216,18 @@ class SolautoPositionEx {
216
216
  this.updateSupply(supplyUsd, data.supplyPrice);
217
217
  this.updateDebt(debtUsd, data.debtPrice);
218
218
  this.updateNetWorth(data.supplyPrice);
219
- this.updateLiqUtilizationRate();
219
+ this.updateLiqUtilizationRate(this.totalSupply * data.supplyPrice, this.totalDebt * data.debtPrice);
220
220
  }
221
221
  simulateRebalance(unixTime, supplyPrice, debtPrice, targetLiqUtilizationRateBps) {
222
222
  this._data.state.lastRefreshed = BigInt(unixTime);
223
223
  const rebalance = (0, rebalance_1.getRebalanceValues)(this, generated_1.PriceType.Realtime, targetLiqUtilizationRateBps, rebalance_1.SolautoFeesBps.create(true, targetLiqUtilizationRateBps, this.netWorthUsd));
224
+ if (!rebalance) {
225
+ return undefined;
226
+ }
224
227
  this.updateSupply(rebalance.endResult.supplyUsd, supplyPrice);
225
228
  this.updateDebt(rebalance.endResult.debtUsd, debtPrice);
226
229
  this.updateNetWorth(supplyPrice);
227
- this.updateLiqUtilizationRate();
230
+ this.updateLiqUtilizationRate(rebalance.endResult.supplyUsd, rebalance.endResult.debtUsd);
228
231
  }
229
232
  async refetchPositionData() {
230
233
  this._data = await (0, generated_1.fetchSolautoPosition)(this.umi, (0, umi_web3js_adapters_1.fromWeb3JsPublicKey)(this.publicKey));
@@ -3,29 +3,28 @@ import { createSignerFromKeypair } from "@metaplex-foundation/umi";
3
3
  import { fromWeb3JsKeypair } from "@metaplex-foundation/umi-web3js-adapters";
4
4
  import {
5
5
  consoleLog,
6
- fetchTokenPrices,
7
6
  getClient,
8
7
  getSolanaRpcConnection,
9
8
  LendingPlatform,
10
9
  LOCAL_IRONFORGE_API_URL,
11
- PriceType,
12
10
  PriorityFeeSetting,
11
+ ProgramEnv,
13
12
  rebalance,
14
- safeGetPrice,
15
13
  SOLAUTO_PROD_PROGRAM,
16
14
  SOLAUTO_TEST_PROGRAM,
17
15
  TransactionsManager,
18
16
  } from "../src";
19
17
  import { getSecretKey } from "./shared";
20
- import { NATIVE_MINT } from "@solana/spl-token";
21
18
 
22
19
  const payForTransaction = false;
23
20
  const testProgram = true;
21
+ const lpEnv: ProgramEnv = "Prod";
24
22
 
25
23
  export async function main() {
26
- const [, umi] = getSolanaRpcConnection(
24
+ let [, umi] = getSolanaRpcConnection(
27
25
  LOCAL_IRONFORGE_API_URL,
28
- testProgram ? SOLAUTO_TEST_PROGRAM : SOLAUTO_PROD_PROGRAM
26
+ testProgram ? SOLAUTO_TEST_PROGRAM : SOLAUTO_PROD_PROGRAM,
27
+ lpEnv
29
28
  );
30
29
 
31
30
  const signer = createSignerFromKeypair(
@@ -33,36 +32,33 @@ export async function main() {
33
32
  fromWeb3JsKeypair(Keypair.fromSecretKey(getSecretKey("solauto-manager")))
34
33
  );
35
34
 
36
- await fetchTokenPrices([NATIVE_MINT]);
35
+ const client = getClient(LendingPlatform.Marginfi, {
36
+ signer,
37
+ showLogs: true,
38
+ rpcUrl: LOCAL_IRONFORGE_API_URL,
39
+ programId: testProgram ? SOLAUTO_TEST_PROGRAM : SOLAUTO_PROD_PROGRAM,
40
+ lpEnv,
41
+ });
37
42
 
38
- console.log(safeGetPrice(NATIVE_MINT), safeGetPrice(NATIVE_MINT, PriceType.Ema));
43
+ await client.initialize({
44
+ positionId: 1,
45
+ authority: new PublicKey("5UqsR2PGzbP8pGPbXEeXx86Gjz2N2UFBAuFZUSVydAEe"),
46
+ });
39
47
 
40
- // const client = getClient(LendingPlatform.Marginfi, {
41
- // signer,
42
- // showLogs: true,
43
- // rpcUrl: LOCAL_IRONFORGE_API_URL,
44
- // programId: testProgram ? SOLAUTO_TEST_PROGRAM : SOLAUTO_PROD_PROGRAM,
45
- // });
48
+ const transactionItems = [rebalance(client)];
46
49
 
47
- // await client.initialize({
48
- // positionId: 3,
49
- // authority: new PublicKey("5UqsR2PGzbP8pGPbXEeXx86Gjz2N2UFBAuFZUSVydAEe"),
50
- // });
51
-
52
- // const transactionItems = [rebalance(client)];
53
-
54
- // const txManager = new TransactionsManager(
55
- // client,
56
- // undefined,
57
- // payForTransaction ? "normal" : "only-simulate",
58
- // PriorityFeeSetting.Min,
59
- // true,
60
- // undefined,
61
- // { totalRetries: 5 }
62
- // );
63
- // const statuses = await txManager.clientSend(transactionItems);
50
+ const txManager = new TransactionsManager(
51
+ client,
52
+ undefined,
53
+ payForTransaction ? "normal" : "only-simulate",
54
+ PriorityFeeSetting.Min,
55
+ true,
56
+ undefined,
57
+ { totalRetries: 5 }
58
+ );
59
+ const statuses = await txManager.clientSend(transactionItems);
64
60
 
65
- // consoleLog(statuses);
61
+ consoleLog(statuses);
66
62
  }
67
63
 
68
64
  main();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haven-fi/solauto-sdk",
3
- "version": "1.0.634",
3
+ "version": "1.0.636",
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",
@@ -37,7 +37,7 @@ export class RebalanceTxBuilder {
37
37
  private rebalanceType!: SolautoRebalanceType;
38
38
  private swapManager!: RebalanceSwapManager;
39
39
  private flRequirements?: FlashLoanRequirements;
40
- private priceType!: PriceType;
40
+ private priceType: PriceType = PriceType.Realtime;
41
41
 
42
42
  constructor(
43
43
  private client: SolautoClient,
@@ -210,30 +210,44 @@ export class RebalanceTxBuilder {
210
210
  );
211
211
  }
212
212
 
213
- private async setRebalanceDetails(attemptNum: number) {
214
- this.priceType = PriceType.Realtime;
215
- this.values = this.getRebalanceValues();
213
+ private getInitialRebalanceValues() {
214
+ let rebalanceValues = this.getRebalanceValues();
215
+ if (!rebalanceValues) {
216
+ return undefined;
217
+ }
216
218
 
217
219
  const postRebalanceEmaUtilRateBps = getLiqUtilzationRateBps(
218
220
  this.realtimeUsdToEmaUsd(
219
- this.values.endResult.supplyUsd,
221
+ rebalanceValues.endResult.supplyUsd,
220
222
  this.client.pos.supplyMint
221
223
  ),
222
224
  this.realtimeUsdToEmaUsd(
223
- this.values.endResult.debtUsd,
225
+ rebalanceValues.endResult.debtUsd,
224
226
  this.client.pos.debtMint
225
227
  ),
226
228
  this.client.pos.state.liqThresholdBps
227
229
  );
228
230
  if (postRebalanceEmaUtilRateBps > this.client.pos.maxBoostToBps) {
229
231
  this.priceType = PriceType.Ema;
230
- this.values = this.getRebalanceValues();
232
+ rebalanceValues = this.getRebalanceValues();
233
+ if (!rebalanceValues) {
234
+ return undefined;
235
+ }
231
236
  }
232
237
 
233
- this.flRequirements = await this.flashLoanRequirements(attemptNum);
238
+ return rebalanceValues;
239
+ }
240
+
241
+ private async setRebalanceDetails(attemptNum: number): Promise<boolean> {
242
+ const rebalanceValues = this.getInitialRebalanceValues();
243
+ if (!rebalanceValues) {
244
+ return false;
245
+ }
246
+ this.values = rebalanceValues;
234
247
 
248
+ this.flRequirements = await this.flashLoanRequirements(attemptNum);
235
249
  if (this.flRequirements?.flFeeBps) {
236
- this.values = this.getRebalanceValues(this.flRequirements.flFeeBps);
250
+ this.values = this.getRebalanceValues(this.flRequirements.flFeeBps)!;
237
251
  }
238
252
 
239
253
  this.swapManager = new RebalanceSwapManager(
@@ -245,6 +259,7 @@ export class RebalanceTxBuilder {
245
259
  await this.swapManager.setSwapParams(attemptNum);
246
260
 
247
261
  this.setRebalanceType();
262
+ return true;
248
263
  }
249
264
 
250
265
  private async refreshBeforeRebalance() {
@@ -348,7 +363,11 @@ export class RebalanceTxBuilder {
348
363
  return undefined;
349
364
  }
350
365
 
351
- await this.setRebalanceDetails(attemptNum);
366
+ const proceed = await this.setRebalanceDetails(attemptNum);
367
+ if (!proceed) {
368
+ return undefined;
369
+ }
370
+
352
371
  return await this.assembleTransaction();
353
372
  }
354
373
  }
@@ -123,7 +123,7 @@ function getTargetLiqUtilizationRateBps(
123
123
  priceType: PriceType,
124
124
  targetLiqUtilizationRateBps: number | undefined,
125
125
  tokenBalanceChange: TokenBalanceChange | undefined
126
- ): number {
126
+ ): number | undefined {
127
127
  if (targetLiqUtilizationRateBps !== undefined) {
128
128
  return targetLiqUtilizationRateBps;
129
129
  }
@@ -144,7 +144,7 @@ function getTargetLiqUtilizationRateBps(
144
144
  // return currentRate;
145
145
  // }
146
146
 
147
- throw new InvalidRebalanceConditionError(createSolautoProgram());
147
+ return undefined;
148
148
  }
149
149
 
150
150
  function getAdjustedPositionValues(
@@ -198,7 +198,7 @@ export function getRebalanceValues(
198
198
  targetLiqUtilizationRateBps?: number,
199
199
  solautoFeeBps?: SolautoFeesBps,
200
200
  flFeeBps?: number
201
- ): RebalanceValues {
201
+ ): RebalanceValues | undefined {
202
202
  const tokenBalanceChange = getTokenBalanceChange();
203
203
 
204
204
  const targetRate = getTargetLiqUtilizationRateBps(
@@ -207,6 +207,9 @@ export function getRebalanceValues(
207
207
  targetLiqUtilizationRateBps,
208
208
  tokenBalanceChange
209
209
  );
210
+ if (targetRate === undefined) {
211
+ return undefined;
212
+ }
210
213
 
211
214
  const rebalanceDirection = getRebalanceDirection(solautoPosition, targetRate);
212
215
 
@@ -604,15 +604,6 @@ export function getErrorInfo(
604
604
  error: Error,
605
605
  simulationSuccessful?: boolean
606
606
  ) {
607
- if (error instanceof InvalidRebalanceConditionError) {
608
- return {
609
- canBeIgnored: true,
610
- errorName: InvalidRebalanceConditionError.name,
611
- errorInfo: new InvalidRebalanceConditionError(createSolautoProgram())
612
- .message,
613
- };
614
- }
615
-
616
607
  let canBeIgnored = false;
617
608
  let errorName: string | undefined = undefined;
618
609
  let errorInfo: string | undefined = undefined;
@@ -71,7 +71,7 @@ interface PositionExArgs {
71
71
  export abstract class SolautoPositionEx {
72
72
  public umi!: Umi;
73
73
  protected contextUpdates?: ContextUpdates;
74
-
74
+
75
75
  public publicKey!: PublicKey;
76
76
  public lendingPlatform!: LendingPlatform;
77
77
  protected _data!: SolautoPositionExData;
@@ -368,10 +368,14 @@ export abstract class SolautoPositionEx {
368
368
  );
369
369
  }
370
370
 
371
- updateLiqUtilizationRate(priceType?: PriceType) {
371
+ updateLiqUtilizationRate(
372
+ supplyUsd?: number,
373
+ debtUsd?: number,
374
+ priceType?: PriceType
375
+ ) {
372
376
  this._data.state.liqUtilizationRateBps = getLiqUtilzationRateBps(
373
- this.supplyUsd(priceType),
374
- this.debtUsd(priceType),
377
+ supplyUsd ?? this.supplyUsd(priceType),
378
+ debtUsd ?? this.debtUsd(priceType),
375
379
  this.state.liqThresholdBps
376
380
  );
377
381
  }
@@ -398,7 +402,10 @@ export abstract class SolautoPositionEx {
398
402
  this.updateSupply(supplyUsd, data.supplyPrice);
399
403
  this.updateDebt(debtUsd, data.debtPrice);
400
404
  this.updateNetWorth(data.supplyPrice);
401
- this.updateLiqUtilizationRate();
405
+ this.updateLiqUtilizationRate(
406
+ this.totalSupply * data.supplyPrice,
407
+ this.totalDebt * data.debtPrice
408
+ );
402
409
  }
403
410
 
404
411
  simulateRebalance(
@@ -414,10 +421,14 @@ export abstract class SolautoPositionEx {
414
421
  targetLiqUtilizationRateBps,
415
422
  SolautoFeesBps.create(true, targetLiqUtilizationRateBps, this.netWorthUsd)
416
423
  );
424
+ if (!rebalance) {
425
+ return undefined;
426
+ }
427
+
417
428
  this.updateSupply(rebalance.endResult.supplyUsd, supplyPrice);
418
429
  this.updateDebt(rebalance.endResult.debtUsd, debtPrice);
419
430
  this.updateNetWorth(supplyPrice);
420
- this.updateLiqUtilizationRate();
431
+ this.updateLiqUtilizationRate(rebalance.endResult.supplyUsd, rebalance.endResult.debtUsd);
421
432
  }
422
433
 
423
434
  async refetchPositionData() {