@haven-fi/solauto-sdk 1.0.668 → 1.0.669

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 (35) hide show
  1. package/dist/services/rebalance/rebalanceTxBuilder.js +1 -1
  2. package/dist/solautoPosition/positionUtils.d.ts.map +1 -1
  3. package/dist/solautoPosition/solautoPositionEx.d.ts +3 -3
  4. package/dist/solautoPosition/solautoPositionEx.d.ts.map +1 -1
  5. package/dist/solautoPosition/solautoPositionEx.js +14 -8
  6. package/dist/utils/index.d.ts +1 -1
  7. package/dist/utils/index.d.ts.map +1 -1
  8. package/dist/utils/index.js +1 -1
  9. package/dist/utils/marginfi/data.d.ts +41 -0
  10. package/dist/utils/marginfi/data.d.ts.map +1 -0
  11. package/dist/utils/{marginfiUtils.js → marginfi/data.js} +8 -145
  12. package/dist/utils/marginfi/general.d.ts +27 -0
  13. package/dist/utils/marginfi/general.d.ts.map +1 -0
  14. package/dist/utils/marginfi/general.js +146 -0
  15. package/dist/utils/marginfi/index.d.ts +3 -0
  16. package/dist/utils/marginfi/index.d.ts.map +1 -0
  17. package/dist/utils/marginfi/index.js +18 -0
  18. package/dist/utils/solanaUtils.js +3 -3
  19. package/dist/utils/solautoUtils.d.ts.map +1 -1
  20. package/dist/utils/solautoUtils.js +4 -4
  21. package/local/txSandbox.ts +3 -3
  22. package/package.json +1 -1
  23. package/src/services/rebalance/rebalanceTxBuilder.ts +1 -1
  24. package/src/solautoPosition/positionUtils.ts +0 -1
  25. package/src/solautoPosition/solautoPositionEx.ts +24 -9
  26. package/src/utils/index.ts +1 -1
  27. package/src/utils/{marginfiUtils.ts → marginfi/data.ts} +10 -220
  28. package/src/utils/marginfi/general.ts +226 -0
  29. package/src/utils/marginfi/index.ts +2 -0
  30. package/src/utils/solanaUtils.ts +2 -2
  31. package/src/utils/solautoUtils.ts +1 -4
  32. package/tests/transactions/shared.ts +3 -1
  33. package/tests/transactions/solautoMarginfi.ts +3 -1
  34. package/dist/utils/marginfiUtils.d.ts +0 -62
  35. package/dist/utils/marginfiUtils.d.ts.map +0 -1
@@ -119,7 +119,7 @@ class RebalanceTxBuilder {
119
119
  if (!rebalanceValues) {
120
120
  return undefined;
121
121
  }
122
- if (!this.client.pos.rebalanceHelper.validRealtimePricesBoost(rebalanceValues.debtAdjustmentUsd)) {
122
+ if (!this.client.pos.rebalance.validRealtimePricesBoost(rebalanceValues.debtAdjustmentUsd)) {
123
123
  this.priceType = generated_1.PriceType.Ema;
124
124
  rebalanceValues = this.getRebalanceValues();
125
125
  if (!rebalanceValues) {
@@ -1 +1 @@
1
- {"version":3,"file":"positionUtils.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/positionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAK/C,OAAO,EAEL,aAAa,EAGb,yBAAyB,EACzB,gCAAgC,EACjC,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,cAAc,EASf,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,kBAAkB,EAElB,iBAAiB,EAClB,MAAM,qBAAqB,CAAC;AAI7B,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,gCAAgC,GACzC,yBAAyB,CAQ3B;AAED,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,SAAS,EAAE,GACtB,OAAO,CAAC,iBAAiB,EAAE,CAAC,CA4B9B;AAED,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,SAAS,EACpB,UAAU,CAAC,EAAE,kBAAkB,EAC/B,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,iBAAiB,CAAC,CAoC5B;AAED,UAAU,UAAU;IAClB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,GACtB,aAAa,CAgEf"}
1
+ {"version":3,"file":"positionUtils.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/positionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAK/C,OAAO,EAEL,aAAa,EAGb,yBAAyB,EACzB,gCAAgC,EACjC,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,cAAc,EASf,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,kBAAkB,EAElB,iBAAiB,EAClB,MAAM,qBAAqB,CAAC;AAG7B,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,gCAAgC,GACzC,yBAAyB,CAQ3B;AAED,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,SAAS,EAAE,GACtB,OAAO,CAAC,iBAAiB,EAAE,CAAC,CA4B9B;AAED,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,SAAS,EACpB,UAAU,CAAC,EAAE,kBAAkB,EAC/B,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,iBAAiB,CAAC,CAoC5B;AAED,UAAU,UAAU;IAClB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,GACtB,aAAa,CAgEf"}
@@ -41,7 +41,7 @@ export declare abstract class SolautoPositionEx {
41
41
  private readonly firstState;
42
42
  private _supplyPrice?;
43
43
  private _debtPrice?;
44
- rebalanceHelper: PositionRebalanceHelper;
44
+ rebalance: PositionRebalanceHelper;
45
45
  constructor(args: PositionExArgs);
46
46
  abstract lendingPool(): Promise<PublicKey>;
47
47
  get exists(): boolean;
@@ -83,7 +83,7 @@ export declare abstract class SolautoPositionEx {
83
83
  abstract maxLtvAndLiqThresholdBps(): Promise<[number, number]>;
84
84
  abstract priceOracles(): Promise<PublicKey[]>;
85
85
  get memecoinPosition(): boolean | undefined;
86
- eligibleForRebalance(bpsDistanceThreshold?: number): RebalanceAction | undefined;
86
+ eligibleForRebalance(bpsDistanceThreshold?: number, skipExtraChecks?: boolean): RebalanceAction | undefined;
87
87
  eligibleForRefresh(): boolean;
88
88
  abstract refreshPositionState(priceType?: PriceType): Promise<void>;
89
89
  utilizationRateBpsDrift(priceType?: PriceType): Promise<number>;
@@ -102,7 +102,7 @@ declare class PositionRebalanceHelper {
102
102
  private sufficientLiquidityToBoost;
103
103
  validRealtimePricesBoost(debtAdjustmentUsd: number): boolean;
104
104
  private validBoostFromHere;
105
- eligibleForRebalance(bpsDistanceThreshold: number): RebalanceAction | undefined;
105
+ eligibleForRebalance(bpsDistanceThreshold: number, skipExtraChecks?: boolean): RebalanceAction | undefined;
106
106
  }
107
107
  export {};
108
108
  //# sourceMappingURL=solautoPositionEx.d.ts.map
@@ -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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"}
@@ -27,7 +27,7 @@ class SolautoPositionEx {
27
27
  this.lpEnv = args.customArgs?.lpEnv ?? "Prod";
28
28
  this._data = args.data;
29
29
  this.firstState = { ...args.data.state };
30
- this.rebalanceHelper = new PositionRebalanceHelper(this);
30
+ this.rebalance = new PositionRebalanceHelper(this);
31
31
  }
32
32
  get exists() {
33
33
  return this._data.position !== undefined;
@@ -143,8 +143,8 @@ class SolautoPositionEx {
143
143
  get memecoinPosition() {
144
144
  return (0, utils_1.tokenInfo)(this.supplyMint).isMeme || (0, utils_1.tokenInfo)(this.debtMint).isMeme;
145
145
  }
146
- eligibleForRebalance(bpsDistanceThreshold = 0) {
147
- return this.rebalanceHelper.eligibleForRebalance(bpsDistanceThreshold);
146
+ eligibleForRebalance(bpsDistanceThreshold = 0, skipExtraChecks) {
147
+ return this.rebalance.eligibleForRebalance(bpsDistanceThreshold, skipExtraChecks);
148
148
  }
149
149
  eligibleForRefresh() {
150
150
  if (this.selfManaged)
@@ -227,14 +227,20 @@ class PositionRebalanceHelper {
227
227
  return postRebalanceLiqUtilRate <= this.pos.maxBoostToBps;
228
228
  }
229
229
  validBoostFromHere() {
230
+ const realtimeSupplyUsd = this.pos.supplyUsd(generated_1.PriceType.Realtime);
231
+ const realtimeDebtUsd = this.pos.debtUsd(generated_1.PriceType.Realtime);
232
+ if (realtimeSupplyUsd === this.pos.supplyUsd(generated_1.PriceType.Ema) &&
233
+ realtimeDebtUsd === this.pos.debtUsd(generated_1.PriceType.Ema)) {
234
+ return true;
235
+ }
230
236
  const { debtAdjustmentUsd } = (0, rebalance_1.getDebtAdjustment)(this.pos.state.liqThresholdBps, {
231
- supplyUsd: this.pos.supplyUsd(generated_1.PriceType.Realtime),
232
- debtUsd: this.pos.debtUsd(generated_1.PriceType.Realtime),
237
+ supplyUsd: realtimeSupplyUsd,
238
+ debtUsd: realtimeDebtUsd,
233
239
  }, this.pos.boostToBps, { solauto: 25, lpBorrow: 0, flashLoan: 0 } // Undershoot fees
234
240
  );
235
241
  return this.validRealtimePricesBoost(debtAdjustmentUsd);
236
242
  }
237
- eligibleForRebalance(bpsDistanceThreshold) {
243
+ eligibleForRebalance(bpsDistanceThreshold, skipExtraChecks) {
238
244
  if (!this.pos.settings || !this.pos.supplyUsd()) {
239
245
  return undefined;
240
246
  }
@@ -244,8 +250,8 @@ class PositionRebalanceHelper {
244
250
  return "repay";
245
251
  }
246
252
  else if (realtimeLiqUtilRateBps - this.pos.boostFromBps <= bpsDistanceThreshold &&
247
- this.validBoostFromHere() &&
248
- this.sufficientLiquidityToBoost()) {
253
+ (!skipExtraChecks ||
254
+ (this.validBoostFromHere() && this.sufficientLiquidityToBoost()))) {
249
255
  return "boost";
250
256
  }
251
257
  return undefined;
@@ -3,7 +3,7 @@ export * from "./generalUtils";
3
3
  export * from "./instructionUtils";
4
4
  export * from "./jitoUtils";
5
5
  export * from "./jupiterUtils";
6
- export * from "./marginfiUtils";
6
+ export * from "./marginfi";
7
7
  export * from "./numberUtils";
8
8
  export * from "./solautoUtils";
9
9
  export * from "./solanaUtils";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC"}
@@ -19,7 +19,7 @@ __exportStar(require("./generalUtils"), exports);
19
19
  __exportStar(require("./instructionUtils"), exports);
20
20
  __exportStar(require("./jitoUtils"), exports);
21
21
  __exportStar(require("./jupiterUtils"), exports);
22
- __exportStar(require("./marginfiUtils"), exports);
22
+ __exportStar(require("./marginfi"), exports);
23
23
  __exportStar(require("./numberUtils"), exports);
24
24
  __exportStar(require("./solautoUtils"), exports);
25
25
  __exportStar(require("./solanaUtils"), exports);
@@ -0,0 +1,41 @@
1
+ import { PublicKey } from "@solana/web3.js";
2
+ import { Umi } from "@metaplex-foundation/umi";
3
+ import { ProgramEnv } from "../../types";
4
+ import { PositionState, PriceType } from "../../generated";
5
+ import { Bank, MarginfiAccount } from "../../marginfi-sdk";
6
+ import { ContextUpdates } from "../solautoUtils";
7
+ export declare function getMarginfiMaxLtvAndLiqThresholdBps(umi: Umi, marginfiGroup: PublicKey, supply: {
8
+ mint: PublicKey;
9
+ bank?: Bank | null;
10
+ }, debt: {
11
+ mint: PublicKey;
12
+ bank?: Bank | null;
13
+ }, supplyPrice?: number): Promise<[number, number]>;
14
+ export declare function getEmptyMarginfiAccountsByAuthority(umi: Umi, authority: PublicKey): Promise<MarginfiAccount[]>;
15
+ export declare function getAllMarginfiAccountsByAuthority(umi: Umi, authority: PublicKey, group?: PublicKey, compatibleWithSolauto?: boolean): Promise<{
16
+ marginfiAccount: PublicKey;
17
+ supplyMint?: PublicKey;
18
+ debtMint?: PublicKey;
19
+ }[]>;
20
+ export declare function getBankLiquidityAvailableBaseUnit(bank: Bank | null, availableToDeposit: boolean): bigint;
21
+ interface BankSelection {
22
+ mint?: PublicKey;
23
+ banksCache?: BanksCache;
24
+ }
25
+ type BanksCache = {
26
+ [group: string]: {
27
+ [mint: string]: Bank;
28
+ };
29
+ };
30
+ export declare function getMarginfiAccountPositionState(umi: Umi, lpUserAccount: {
31
+ pk?: PublicKey;
32
+ data?: MarginfiAccount | null;
33
+ }, marginfiGroup?: PublicKey, supply?: BankSelection, debt?: BankSelection, programEnv?: ProgramEnv, contextUpdates?: ContextUpdates, priceType?: PriceType): Promise<{
34
+ supplyBank: Bank | null;
35
+ debtBank: Bank | null;
36
+ state: PositionState;
37
+ } | undefined>;
38
+ export declare function calculateAnnualAPYs(bank: Bank): [number, number];
39
+ export declare function getUpToDateShareValues(bank: Bank): [number, number];
40
+ export {};
41
+ //# sourceMappingURL=data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../src/utils/marginfi/data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAa,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAI1D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAsB,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAO/E,OAAO,EACL,IAAI,EAGJ,eAAe,EAIhB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAajD,wBAAsB,mCAAmC,CACvD,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,CA8C3B;AAED,wBAAsB,mCAAmC,CACvD,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,eAAe,EAAE,CAAC,CA6B5B;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,CAyDA;AAED,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,IAAI,GAAG,IAAI,EACjB,kBAAkB,EAAE,OAAO,UAqB5B;AA0DD,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;AAwBhE,wBAAsB,+BAA+B,CACnD,GAAG,EAAE,GAAG,EACR,aAAa,EAAE;IAAE,EAAE,CAAC,EAAE,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,eAAe,GAAG,IAAI,CAAA;CAAE,EAChE,aAAa,CAAC,EAAE,SAAS,EACzB,MAAM,CAAC,EAAE,aAAa,EACtB,IAAI,CAAC,EAAE,aAAa,EACpB,UAAU,CAAC,EAAE,UAAU,EACvB,cAAc,CAAC,EAAE,cAAc,EAC/B,SAAS,CAAC,EAAE,SAAS,GACpB,OAAO,CACN;IAAE,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;IAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,aAAa,CAAA;CAAE,GACxE,SAAS,CACZ,CA2KA;AA+DD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,oBAU7C;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAgBnE"}
@@ -1,13 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createDynamicMarginfiProgram = createDynamicMarginfiProgram;
4
- exports.umiWithMarginfiProgram = umiWithMarginfiProgram;
5
- exports.getAllBankRelatedAccounts = getAllBankRelatedAccounts;
6
- exports.fetchBankAddresses = fetchBankAddresses;
7
- exports.getMarginfiPriceOracle = getMarginfiPriceOracle;
8
- exports.findMarginfiAccounts = findMarginfiAccounts;
9
- exports.getRemainingAccountsForMarginfiHealthCheck = getRemainingAccountsForMarginfiHealthCheck;
10
- exports.calcMarginfiMaxLtvAndLiqThresholdBps = calcMarginfiMaxLtvAndLiqThresholdBps;
11
3
  exports.getMarginfiMaxLtvAndLiqThresholdBps = getMarginfiMaxLtvAndLiqThresholdBps;
12
4
  exports.getEmptyMarginfiAccountsByAuthority = getEmptyMarginfiAccountsByAuthority;
13
5
  exports.getAllMarginfiAccountsByAuthority = getAllMarginfiAccountsByAuthority;
@@ -15,139 +7,15 @@ exports.getBankLiquidityAvailableBaseUnit = getBankLiquidityAvailableBaseUnit;
15
7
  exports.getMarginfiAccountPositionState = getMarginfiAccountPositionState;
16
8
  exports.calculateAnnualAPYs = calculateAnnualAPYs;
17
9
  exports.getUpToDateShareValues = getUpToDateShareValues;
18
- exports.marginfiAccountEmpty = marginfiAccountEmpty;
19
10
  const web3_js_1 = require("@solana/web3.js");
20
11
  const umi_1 = require("@metaplex-foundation/umi");
21
12
  const umi_web3js_adapters_1 = require("@metaplex-foundation/umi-web3js-adapters");
22
- const constants_1 = require("../constants");
23
- const marginfi_sdk_1 = require("../marginfi-sdk");
24
- const priceUtils_1 = require("./priceUtils");
25
- const generalUtils_1 = require("./generalUtils");
26
- const numberUtils_1 = require("./numberUtils");
27
- const accountUtils_1 = require("./accountUtils");
28
- const pythUtils_1 = require("./pythUtils");
29
- const solanaUtils_1 = require("./solanaUtils");
30
- function createDynamicMarginfiProgram(env) {
31
- return {
32
- name: "marginfi",
33
- publicKey: (0, umi_1.publicKey)((0, constants_1.getMarginfiAccounts)(env ?? "Prod").program),
34
- getErrorFromCode(code, cause) {
35
- return (0, marginfi_sdk_1.getMarginfiErrorFromCode)(code, this, cause);
36
- },
37
- getErrorFromName(name, cause) {
38
- return (0, marginfi_sdk_1.getMarginfiErrorFromName)(name, this, cause);
39
- },
40
- isOnCluster() {
41
- return true;
42
- },
43
- };
44
- }
45
- function umiWithMarginfiProgram(umi, marginfiEnv) {
46
- return umi.use({
47
- install(umi) {
48
- umi.programs.add(createDynamicMarginfiProgram(marginfiEnv ?? "Prod"), false);
49
- },
50
- });
51
- }
52
- async function getAllBankRelatedAccounts(umi, bankAccountsMap) {
53
- const banks = Object.values(bankAccountsMap).flatMap((group) => Object.values(group).map((accounts) => accounts.bank));
54
- const banksData = await (0, marginfi_sdk_1.safeFetchAllBank)(umi, banks.map((x) => (0, umi_1.publicKey)(x)));
55
- const oracles = banksData
56
- .map((bank) => {
57
- const oracleKey = (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(bank.config.oracleKeys[0]);
58
- return bank.config.oracleSetup === marginfi_sdk_1.OracleSetup.PythPushOracle
59
- ? [
60
- (0, pythUtils_1.getPythPushOracleAddress)(oracleKey, constants_1.PYTH_SPONSORED_SHARD_ID),
61
- (0, pythUtils_1.getPythPushOracleAddress)(oracleKey, constants_1.MARGINFI_SPONSORED_SHARD_ID),
62
- ]
63
- : [oracleKey];
64
- })
65
- .flat()
66
- .map((x) => x.toString());
67
- const otherAccounts = Object.entries(bankAccountsMap).flatMap(([groupName, tokenMap]) => Object.values(tokenMap).flatMap((accounts) => [
68
- groupName,
69
- accounts.liquidityVault,
70
- accounts.vaultAuthority,
71
- ]));
72
- return Array.from(new Set([...banks, ...oracles, ...otherAccounts]))
73
- .filter((x) => x !== web3_js_1.PublicKey.default.toString())
74
- .map((x) => new web3_js_1.PublicKey(x));
75
- }
76
- async function fetchBankAddresses(umi, bankPk) {
77
- const bank = await (0, marginfi_sdk_1.fetchBank)(umi, (0, umi_web3js_adapters_1.fromWeb3JsPublicKey)(bankPk));
78
- const liquidityVault = (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(bank.liquidityVault);
79
- const vaultAuthority = (await (0, accountUtils_1.getTokenAccountData)(umi, liquidityVault))
80
- ?.owner;
81
- const priceOracle = await getMarginfiPriceOracle(umi, { data: bank });
82
- return {
83
- bank: bankPk,
84
- liquidityVault,
85
- vaultAuthority,
86
- priceOracle,
87
- };
88
- }
89
- async function getMarginfiPriceOracle(umi, bank) {
90
- if (!bank.data) {
91
- bank.data = await (0, marginfi_sdk_1.fetchBank)(umi, (0, umi_web3js_adapters_1.fromWeb3JsPublicKey)(bank.pk));
92
- }
93
- const oracleKey = (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(bank.data.config.oracleKeys[0]);
94
- const priceOracle = bank.data.config.oracleSetup === marginfi_sdk_1.OracleSetup.PythPushOracle
95
- ? await (0, pythUtils_1.getMostUpToDatePythOracle)(umi, [
96
- (0, pythUtils_1.getPythPushOracleAddress)(oracleKey, constants_1.PYTH_SPONSORED_SHARD_ID),
97
- (0, pythUtils_1.getPythPushOracleAddress)(oracleKey, constants_1.MARGINFI_SPONSORED_SHARD_ID),
98
- ])
99
- : oracleKey;
100
- return priceOracle;
101
- }
102
- function findMarginfiAccounts(bank) {
103
- const search = (bankAccounts) => {
104
- for (const group in bankAccounts) {
105
- for (const key in bankAccounts[group]) {
106
- const account = bankAccounts[group][key];
107
- if (account.bank.toString().toLowerCase() ===
108
- bank.toString().toLowerCase()) {
109
- return { ...account, mint: new web3_js_1.PublicKey(key) };
110
- }
111
- }
112
- }
113
- };
114
- let res = search((0, constants_1.getMarginfiAccounts)("Prod").bankAccounts);
115
- if (res) {
116
- return res;
117
- }
118
- res = search((0, constants_1.getMarginfiAccounts)("Staging").bankAccounts);
119
- if (res) {
120
- return res;
121
- }
122
- throw new Error(`Marginfi accounts not found by the bank: ${bank}`);
123
- }
124
- async function getRemainingAccountsForMarginfiHealthCheck(umi, balance) {
125
- if (!balance.active) {
126
- return [];
127
- }
128
- const priceOracle = await getMarginfiPriceOracle(umi, {
129
- pk: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(balance.bankPk),
130
- });
131
- return [
132
- (0, solanaUtils_1.getAccountMeta)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(balance.bankPk)),
133
- (0, solanaUtils_1.getAccountMeta)(priceOracle),
134
- ];
135
- }
136
- function calcMarginfiMaxLtvAndLiqThresholdBps(supplyBank, debtBank, supplyPrice) {
137
- let maxLtv = (0, numberUtils_1.bytesToI80F48)(supplyBank.config.assetWeightInit.value) /
138
- (0, numberUtils_1.bytesToI80F48)(debtBank.config.liabilityWeightInit.value);
139
- const liqThreshold = (0, numberUtils_1.bytesToI80F48)(supplyBank.config.assetWeightMaint.value) /
140
- (0, numberUtils_1.bytesToI80F48)(debtBank.config.liabilityWeightMaint.value);
141
- const totalDepositedUsdValue = (0, numberUtils_1.fromBaseUnit)(BigInt(Math.round((0, numberUtils_1.bytesToI80F48)(supplyBank.totalAssetShares.value) *
142
- (0, numberUtils_1.bytesToI80F48)(supplyBank.assetShareValue.value))), supplyBank.mintDecimals) * supplyPrice;
143
- if (supplyBank.config.totalAssetValueInitLimit !== BigInt(0) &&
144
- totalDepositedUsdValue > supplyBank.config.totalAssetValueInitLimit) {
145
- const discount = Number(supplyBank.config.totalAssetValueInitLimit) /
146
- totalDepositedUsdValue;
147
- maxLtv = maxLtv * Number(discount);
148
- }
149
- return [(0, numberUtils_1.toBps)(maxLtv, "Floor"), (0, numberUtils_1.toBps)(liqThreshold, "Floor")];
150
- }
13
+ const constants_1 = require("../../constants");
14
+ const marginfi_sdk_1 = require("../../marginfi-sdk");
15
+ const priceUtils_1 = require("../priceUtils");
16
+ const generalUtils_1 = require("../generalUtils");
17
+ const numberUtils_1 = require("../numberUtils");
18
+ const general_1 = require("./general");
151
19
  async function getMarginfiMaxLtvAndLiqThresholdBps(umi, marginfiGroup, supply, debt, supplyPrice) {
152
20
  if (!supply.bank && !(0, generalUtils_1.validPubkey)(supply.mint)) {
153
21
  return [0, 0];
@@ -168,7 +36,7 @@ async function getMarginfiMaxLtvAndLiqThresholdBps(umi, marginfiGroup, supply, d
168
36
  if (!debt.bank || debt.bank === null) {
169
37
  return [0, 0];
170
38
  }
171
- return calcMarginfiMaxLtvAndLiqThresholdBps(supply.bank, debt.bank, supplyPrice);
39
+ return (0, general_1.calcMarginfiMaxLtvAndLiqThresholdBps)(supply.bank, debt.bank, supplyPrice);
172
40
  }
173
41
  async function getEmptyMarginfiAccountsByAuthority(umi, authority) {
174
42
  const marginfiAccounts = await umi.rpc.getProgramAccounts(umi.programs.get("marginfi").publicKey, {
@@ -194,7 +62,7 @@ async function getEmptyMarginfiAccountsByAuthority(umi, authority) {
194
62
  });
195
63
  return marginfiAccounts
196
64
  .map((x) => (0, marginfi_sdk_1.deserializeMarginfiAccount)(x))
197
- .filter((x) => marginfiAccountEmpty(x));
65
+ .filter((x) => (0, general_1.marginfiAccountEmpty)(x));
198
66
  }
199
67
  async function getAllMarginfiAccountsByAuthority(umi, authority, group, compatibleWithSolauto) {
200
68
  const marginfiAccounts = await umi.rpc.getProgramAccounts(umi.programs.get("marginfi").publicKey, {
@@ -452,8 +320,3 @@ function getUpToDateShareValues(bank) {
452
320
  calcAccruedInterestPaymentPerPeriod(borrowingApr, timeDelta, (0, numberUtils_1.bytesToI80F48)(bank.liabilityShareValue.value)),
453
321
  ];
454
322
  }
455
- function marginfiAccountEmpty(marginfiAccount) {
456
- return (marginfiAccount.lendingAccount.balances.find((x) => x.bankPk.toString() !== web3_js_1.PublicKey.default.toString() &&
457
- ((0, numberUtils_1.bytesToI80F48)(x.assetShares.value) > 0.000001 ||
458
- (0, numberUtils_1.bytesToI80F48)(x.liabilityShares.value) > 0.000001)) === undefined);
459
- }
@@ -0,0 +1,27 @@
1
+ import { PublicKey } from "@solana/web3.js";
2
+ import { AccountMeta, Program, Umi } from "@metaplex-foundation/umi";
3
+ import { ProgramEnv, MarginfiAssetAccounts } from "../../types";
4
+ import { MarginfiBankAccountsMap } from "../../constants";
5
+ import { Balance, Bank, MarginfiAccount } from "../../marginfi-sdk";
6
+ export declare function createDynamicMarginfiProgram(env?: ProgramEnv): Program;
7
+ export declare function umiWithMarginfiProgram(umi: Umi, marginfiEnv?: ProgramEnv): Umi;
8
+ export declare function getAllBankRelatedAccounts(umi: Umi, bankAccountsMap: MarginfiBankAccountsMap): Promise<PublicKey[]>;
9
+ export declare function fetchBankAddresses(umi: Umi, bankPk: PublicKey): Promise<{
10
+ bank: PublicKey;
11
+ liquidityVault: PublicKey;
12
+ vaultAuthority: PublicKey | undefined;
13
+ priceOracle: PublicKey;
14
+ }>;
15
+ export declare function getMarginfiPriceOracle(umi: Umi, bank: {
16
+ pk?: PublicKey;
17
+ data?: Bank;
18
+ }): Promise<PublicKey>;
19
+ interface AllMarginfiAssetAccounts extends MarginfiAssetAccounts {
20
+ mint: PublicKey;
21
+ }
22
+ export declare function findMarginfiAccounts(bank: PublicKey): AllMarginfiAssetAccounts;
23
+ export declare function getRemainingAccountsForMarginfiHealthCheck(umi: Umi, balance: Balance): Promise<AccountMeta[]>;
24
+ export declare function calcMarginfiMaxLtvAndLiqThresholdBps(supplyBank: Bank, debtBank: Bank, supplyPrice: number): [number, number];
25
+ export declare function marginfiAccountEmpty(marginfiAccount: MarginfiAccount): boolean;
26
+ export {};
27
+ //# sourceMappingURL=general.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"general.d.ts","sourceRoot":"","sources":["../../../src/utils/marginfi/general.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,OAAO,EAAa,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAKhF,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAGL,uBAAuB,EAExB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,OAAO,EACP,IAAI,EAIJ,eAAe,EAGhB,MAAM,oBAAoB,CAAC;AAS5B,wBAAgB,4BAA4B,CAAC,GAAG,CAAC,EAAE,UAAU,GAAG,OAAO,CActE;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,WAAW,CAAC,EAAE,UAAU,OASxE;AAED,wBAAsB,yBAAyB,CAC7C,GAAG,EAAE,GAAG,EACR,eAAe,EAAE,uBAAuB,GACvC,OAAO,CAAC,SAAS,EAAE,CAAC,CAkCtB;AAED,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS;;;;;GAanE;AAED,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,GAAG,EACR,IAAI,EAAE;IAAE,EAAE,CAAC,EAAE,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,IAAI,CAAA;CAAE,sBAgBtC;AAED,UAAU,wBAAyB,SAAQ,qBAAqB;IAC9D,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,SAAS,GACd,wBAAwB,CAyB1B;AAED,wBAAsB,0CAA0C,CAC9D,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,WAAW,EAAE,CAAC,CAWxB;AAED,wBAAgB,oCAAoC,CAClD,UAAU,EAAE,IAAI,EAChB,QAAQ,EAAE,IAAI,EACd,WAAW,EAAE,MAAM,GAClB,CAAC,MAAM,EAAE,MAAM,CAAC,CA6BlB;AAED,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,eAAe,WASpE"}
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createDynamicMarginfiProgram = createDynamicMarginfiProgram;
4
+ exports.umiWithMarginfiProgram = umiWithMarginfiProgram;
5
+ exports.getAllBankRelatedAccounts = getAllBankRelatedAccounts;
6
+ exports.fetchBankAddresses = fetchBankAddresses;
7
+ exports.getMarginfiPriceOracle = getMarginfiPriceOracle;
8
+ exports.findMarginfiAccounts = findMarginfiAccounts;
9
+ exports.getRemainingAccountsForMarginfiHealthCheck = getRemainingAccountsForMarginfiHealthCheck;
10
+ exports.calcMarginfiMaxLtvAndLiqThresholdBps = calcMarginfiMaxLtvAndLiqThresholdBps;
11
+ exports.marginfiAccountEmpty = marginfiAccountEmpty;
12
+ const web3_js_1 = require("@solana/web3.js");
13
+ const umi_1 = require("@metaplex-foundation/umi");
14
+ const umi_web3js_adapters_1 = require("@metaplex-foundation/umi-web3js-adapters");
15
+ const constants_1 = require("../../constants");
16
+ const marginfi_sdk_1 = require("../../marginfi-sdk");
17
+ const numberUtils_1 = require("../numberUtils");
18
+ const accountUtils_1 = require("../accountUtils");
19
+ const pythUtils_1 = require("../pythUtils");
20
+ const solanaUtils_1 = require("../solanaUtils");
21
+ function createDynamicMarginfiProgram(env) {
22
+ return {
23
+ name: "marginfi",
24
+ publicKey: (0, umi_1.publicKey)((0, constants_1.getMarginfiAccounts)(env ?? "Prod").program),
25
+ getErrorFromCode(code, cause) {
26
+ return (0, marginfi_sdk_1.getMarginfiErrorFromCode)(code, this, cause);
27
+ },
28
+ getErrorFromName(name, cause) {
29
+ return (0, marginfi_sdk_1.getMarginfiErrorFromName)(name, this, cause);
30
+ },
31
+ isOnCluster() {
32
+ return true;
33
+ },
34
+ };
35
+ }
36
+ function umiWithMarginfiProgram(umi, marginfiEnv) {
37
+ return umi.use({
38
+ install(umi) {
39
+ umi.programs.add(createDynamicMarginfiProgram(marginfiEnv ?? "Prod"), false);
40
+ },
41
+ });
42
+ }
43
+ async function getAllBankRelatedAccounts(umi, bankAccountsMap) {
44
+ const banks = Object.values(bankAccountsMap).flatMap((group) => Object.values(group).map((accounts) => accounts.bank));
45
+ const banksData = await (0, marginfi_sdk_1.safeFetchAllBank)(umi, banks.map((x) => (0, umi_1.publicKey)(x)));
46
+ const oracles = banksData
47
+ .map((bank) => {
48
+ const oracleKey = (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(bank.config.oracleKeys[0]);
49
+ return bank.config.oracleSetup === marginfi_sdk_1.OracleSetup.PythPushOracle
50
+ ? [
51
+ (0, pythUtils_1.getPythPushOracleAddress)(oracleKey, constants_1.PYTH_SPONSORED_SHARD_ID),
52
+ (0, pythUtils_1.getPythPushOracleAddress)(oracleKey, constants_1.MARGINFI_SPONSORED_SHARD_ID),
53
+ ]
54
+ : [oracleKey];
55
+ })
56
+ .flat()
57
+ .map((x) => x.toString());
58
+ const otherAccounts = Object.entries(bankAccountsMap).flatMap(([groupName, tokenMap]) => Object.values(tokenMap).flatMap((accounts) => [
59
+ groupName,
60
+ accounts.liquidityVault,
61
+ accounts.vaultAuthority,
62
+ ]));
63
+ return Array.from(new Set([...banks, ...oracles, ...otherAccounts]))
64
+ .filter((x) => x !== web3_js_1.PublicKey.default.toString())
65
+ .map((x) => new web3_js_1.PublicKey(x));
66
+ }
67
+ async function fetchBankAddresses(umi, bankPk) {
68
+ const bank = await (0, marginfi_sdk_1.fetchBank)(umi, (0, umi_web3js_adapters_1.fromWeb3JsPublicKey)(bankPk));
69
+ const liquidityVault = (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(bank.liquidityVault);
70
+ const vaultAuthority = (await (0, accountUtils_1.getTokenAccountData)(umi, liquidityVault))
71
+ ?.owner;
72
+ const priceOracle = await getMarginfiPriceOracle(umi, { data: bank });
73
+ return {
74
+ bank: bankPk,
75
+ liquidityVault,
76
+ vaultAuthority,
77
+ priceOracle,
78
+ };
79
+ }
80
+ async function getMarginfiPriceOracle(umi, bank) {
81
+ if (!bank.data) {
82
+ bank.data = await (0, marginfi_sdk_1.fetchBank)(umi, (0, umi_web3js_adapters_1.fromWeb3JsPublicKey)(bank.pk));
83
+ }
84
+ const oracleKey = (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(bank.data.config.oracleKeys[0]);
85
+ const priceOracle = bank.data.config.oracleSetup === marginfi_sdk_1.OracleSetup.PythPushOracle
86
+ ? await (0, pythUtils_1.getMostUpToDatePythOracle)(umi, [
87
+ (0, pythUtils_1.getPythPushOracleAddress)(oracleKey, constants_1.PYTH_SPONSORED_SHARD_ID),
88
+ (0, pythUtils_1.getPythPushOracleAddress)(oracleKey, constants_1.MARGINFI_SPONSORED_SHARD_ID),
89
+ ])
90
+ : oracleKey;
91
+ return priceOracle;
92
+ }
93
+ function findMarginfiAccounts(bank) {
94
+ const search = (bankAccounts) => {
95
+ for (const group in bankAccounts) {
96
+ for (const key in bankAccounts[group]) {
97
+ const account = bankAccounts[group][key];
98
+ if (account.bank.toString().toLowerCase() ===
99
+ bank.toString().toLowerCase()) {
100
+ return { ...account, mint: new web3_js_1.PublicKey(key) };
101
+ }
102
+ }
103
+ }
104
+ };
105
+ let res = search((0, constants_1.getMarginfiAccounts)("Prod").bankAccounts);
106
+ if (res) {
107
+ return res;
108
+ }
109
+ res = search((0, constants_1.getMarginfiAccounts)("Staging").bankAccounts);
110
+ if (res) {
111
+ return res;
112
+ }
113
+ throw new Error(`Marginfi accounts not found by the bank: ${bank}`);
114
+ }
115
+ async function getRemainingAccountsForMarginfiHealthCheck(umi, balance) {
116
+ if (!balance.active) {
117
+ return [];
118
+ }
119
+ const priceOracle = await getMarginfiPriceOracle(umi, {
120
+ pk: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(balance.bankPk),
121
+ });
122
+ return [
123
+ (0, solanaUtils_1.getAccountMeta)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(balance.bankPk)),
124
+ (0, solanaUtils_1.getAccountMeta)(priceOracle),
125
+ ];
126
+ }
127
+ function calcMarginfiMaxLtvAndLiqThresholdBps(supplyBank, debtBank, supplyPrice) {
128
+ let maxLtv = (0, numberUtils_1.bytesToI80F48)(supplyBank.config.assetWeightInit.value) /
129
+ (0, numberUtils_1.bytesToI80F48)(debtBank.config.liabilityWeightInit.value);
130
+ const liqThreshold = (0, numberUtils_1.bytesToI80F48)(supplyBank.config.assetWeightMaint.value) /
131
+ (0, numberUtils_1.bytesToI80F48)(debtBank.config.liabilityWeightMaint.value);
132
+ const totalDepositedUsdValue = (0, numberUtils_1.fromBaseUnit)(BigInt(Math.round((0, numberUtils_1.bytesToI80F48)(supplyBank.totalAssetShares.value) *
133
+ (0, numberUtils_1.bytesToI80F48)(supplyBank.assetShareValue.value))), supplyBank.mintDecimals) * supplyPrice;
134
+ if (supplyBank.config.totalAssetValueInitLimit !== BigInt(0) &&
135
+ totalDepositedUsdValue > supplyBank.config.totalAssetValueInitLimit) {
136
+ const discount = Number(supplyBank.config.totalAssetValueInitLimit) /
137
+ totalDepositedUsdValue;
138
+ maxLtv = maxLtv * Number(discount);
139
+ }
140
+ return [(0, numberUtils_1.toBps)(maxLtv, "Floor"), (0, numberUtils_1.toBps)(liqThreshold, "Floor")];
141
+ }
142
+ function marginfiAccountEmpty(marginfiAccount) {
143
+ return (marginfiAccount.lendingAccount.balances.find((x) => x.bankPk.toString() !== web3_js_1.PublicKey.default.toString() &&
144
+ ((0, numberUtils_1.bytesToI80F48)(x.assetShares.value) > 0.000001 ||
145
+ (0, numberUtils_1.bytesToI80F48)(x.liabilityShares.value) > 0.000001)) === undefined);
146
+ }
@@ -0,0 +1,3 @@
1
+ export * from "./data";
2
+ export * from "./general";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/marginfi/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./data"), exports);
18
+ __exportStar(require("./general"), exports);
@@ -30,7 +30,7 @@ const marginfi_sdk_1 = require("../marginfi-sdk");
30
30
  const accountUtils_1 = require("./accountUtils");
31
31
  const generalUtils_1 = require("./generalUtils");
32
32
  const solautoUtils_1 = require("./solautoUtils");
33
- const marginfiUtils_1 = require("./marginfiUtils");
33
+ const marginfi_1 = require("./marginfi");
34
34
  function getSolanaRpcConnection(rpcUrl, programId, lpEnv) {
35
35
  const connection = new web3_js_1.Connection(rpcUrl, {
36
36
  commitment: "confirmed",
@@ -38,7 +38,7 @@ function getSolanaRpcConnection(rpcUrl, programId, lpEnv) {
38
38
  const umi = (0, umi_bundle_defaults_1.createUmi)(connection).use({
39
39
  install(umi) {
40
40
  umi.programs.add((0, solautoUtils_1.createDynamicSolautoProgram)(programId), false);
41
- umi.programs.add((0, marginfiUtils_1.createDynamicMarginfiProgram)(lpEnv), false);
41
+ umi.programs.add((0, marginfi_1.createDynamicMarginfiProgram)(lpEnv), false);
42
42
  },
43
43
  });
44
44
  return [connection, umi];
@@ -272,7 +272,7 @@ async function sendSingleOptimizedTransaction(umi, connection, tx, txType, prior
272
272
  let cuPrice;
273
273
  if (prioritySetting !== types_1.PriorityFeeSetting.None) {
274
274
  cuPrice = await getComputeUnitPriceEstimate(umi, tx, prioritySetting);
275
- cuPrice = Math.min(cuPrice ?? 0, 100 * 1000000);
275
+ cuPrice = Math.min(cuPrice ?? 0, 100000000);
276
276
  (0, generalUtils_1.consoleLog)("Compute unit price: ", cuPrice);
277
277
  }
278
278
  if (txType !== "only-simulate") {
@@ -1 +1 @@
1
- {"version":3,"file":"solautoUtils.d.ts","sourceRoot":"","sources":["../../src/utils/solautoUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"solautoUtils.d.ts","sourceRoot":"","sources":["../../src/utils/solautoUtils.ts"],"names":[],"mappings":"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"}