@haven-fi/solauto-sdk 1.0.205 → 1.0.207

Sign up to get free protection for your applications and to get access to all the features.
@@ -1 +1 @@
1
- {"version":3,"file":"solautoMarginfiClient.d.ts","sourceRoot":"","sources":["../../src/clients/solautoMarginfiClient.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,MAAM,EACN,kBAAkB,EAMnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAA8B,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAM1D,OAAO,EACL,kBAAkB,EAElB,aAAa,EAEb,iBAAiB,EACjB,wBAAwB,EACxB,gCAAgC,EAKjC,MAAM,cAAc,CAAC;AAGtB,OAAO,EAEL,eAAe,EAUhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AASnE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,WAAW,yBAA0B,SAAQ,iBAAiB;IAClE,eAAe,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IACrC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,aAAa,CAAC,EAAE,SAAS,CAAC;CAC3B;AAED,qBAAa,qBAAsB,SAAQ,aAAa;IACtD,OAAO,CAAC,WAAW,CAAkB;IAE9B,eAAe,EAAG,SAAS,CAAC;IAE5B,sBAAsB,EAAE,MAAM,CAAa;IAC3C,eAAe,EAAG,SAAS,GAAG,MAAM,CAAC;IACrC,iBAAiB,EAAG,SAAS,CAAC;IAC9B,aAAa,EAAG,SAAS,CAAC;IAE1B,sBAAsB,EAAG,qBAAqB,CAAC;IAC/C,oBAAoB,EAAG,qBAAqB,CAAC;IAE7C,iBAAiB,EAAG,SAAS,CAAC;IAC9B,eAAe,EAAG,SAAS,CAAC;IAG5B,iCAAiC,CAAC,EAAE,MAAM,CAAC;IAC3C,6BAA6B,EAAG,SAAS,CAAC;IAC1C,2BAA2B,CAAC,EAAE,eAAe,CAAC;IAE/C,UAAU,CAAC,IAAI,EAAE,yBAAyB;IA6D1C,8BAA8B;IA0CpC,eAAe,IAAI,SAAS;IAI5B,mBAAmB,IAAI,MAAM,EAAE;IAI/B,gBAAgB,IAAI,SAAS,EAAE;IAUzB,wBAAwB,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IA0BvE,yBAAyB,IAAI,kBAAkB;IAS/C,YAAY,CACV,aAAa,CAAC,EAAE,gCAAgC,EAChD,GAAG,CAAC,EAAE,kBAAkB,GACvB,kBAAkB;IAMrB,OAAO,CAAC,sBAAsB;IA6C9B,OAAO,IAAI,kBAAkB;IAc7B,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,kBAAkB;IAUhE,OAAO,CAAC,6BAA6B;IAmErC,OAAO,CAAC,oCAAoC;IA0D5C,SAAS,CACP,aAAa,EAAE,GAAG,GAAG,GAAG,EACxB,QAAQ,EAAE,aAAa,EACvB,aAAa,EAAE,wBAAwB,EACvC,SAAS,CAAC,EAAE,gBAAgB,EAC5B,2BAA2B,CAAC,EAAE,MAAM,GACnC,kBAAkB;IAqErB,WAAW,CACT,gBAAgB,EAAE,gBAAgB,EAClC,uBAAuB,EAAE,SAAS,GACjC,kBAAkB;IA2BrB,UAAU,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,kBAAkB;IAoFlE,iCAAiC,IAAI,kBAAkB;IASjD,qBAAqB,IAAI,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;CA6ClE"}
1
+ {"version":3,"file":"solautoMarginfiClient.d.ts","sourceRoot":"","sources":["../../src/clients/solautoMarginfiClient.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,MAAM,EACN,kBAAkB,EAMnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAA8B,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAM1D,OAAO,EACL,kBAAkB,EAElB,aAAa,EAEb,iBAAiB,EACjB,wBAAwB,EACxB,gCAAgC,EAKjC,MAAM,cAAc,CAAC;AAGtB,OAAO,EAEL,eAAe,EAUhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAQnE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,WAAW,yBAA0B,SAAQ,iBAAiB;IAClE,eAAe,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IACrC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,aAAa,CAAC,EAAE,SAAS,CAAC;CAC3B;AAED,qBAAa,qBAAsB,SAAQ,aAAa;IACtD,OAAO,CAAC,WAAW,CAAkB;IAE9B,eAAe,EAAG,SAAS,CAAC;IAE5B,sBAAsB,EAAE,MAAM,CAAa;IAC3C,eAAe,EAAG,SAAS,GAAG,MAAM,CAAC;IACrC,iBAAiB,EAAG,SAAS,CAAC;IAC9B,aAAa,EAAG,SAAS,CAAC;IAE1B,sBAAsB,EAAG,qBAAqB,CAAC;IAC/C,oBAAoB,EAAG,qBAAqB,CAAC;IAE7C,iBAAiB,EAAG,SAAS,CAAC;IAC9B,eAAe,EAAG,SAAS,CAAC;IAG5B,iCAAiC,CAAC,EAAE,MAAM,CAAC;IAC3C,6BAA6B,EAAG,SAAS,CAAC;IAC1C,2BAA2B,CAAC,EAAE,eAAe,CAAC;IAE/C,UAAU,CAAC,IAAI,EAAE,yBAAyB;IA6D1C,8BAA8B;IA0CpC,eAAe,IAAI,SAAS;IAI5B,mBAAmB,IAAI,MAAM,EAAE;IAI/B,gBAAgB,IAAI,SAAS,EAAE;IAUzB,wBAAwB,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IA0BvE,yBAAyB,IAAI,kBAAkB;IAS/C,YAAY,CACV,aAAa,CAAC,EAAE,gCAAgC,EAChD,GAAG,CAAC,EAAE,kBAAkB,GACvB,kBAAkB;IAMrB,OAAO,CAAC,sBAAsB;IA6C9B,OAAO,IAAI,kBAAkB;IAc7B,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,kBAAkB;IAUhE,OAAO,CAAC,6BAA6B;IAmErC,OAAO,CAAC,oCAAoC;IA0D5C,SAAS,CACP,aAAa,EAAE,GAAG,GAAG,GAAG,EACxB,QAAQ,EAAE,aAAa,EACvB,aAAa,EAAE,wBAAwB,EACvC,SAAS,CAAC,EAAE,gBAAgB,EAC5B,2BAA2B,CAAC,EAAE,MAAM,GACnC,kBAAkB;IAqErB,WAAW,CACT,gBAAgB,EAAE,gBAAgB,EAClC,uBAAuB,EAAE,SAAS,GACjC,kBAAkB;IA2BrB,UAAU,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,kBAAkB;IAoFlE,iCAAiC,IAAI,kBAAkB;IASjD,qBAAqB,IAAI,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;CA6ClE"}
@@ -429,10 +429,10 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
429
429
  if (state) {
430
430
  return state;
431
431
  }
432
- const freshState = await (0, marginfiUtils_1.getMarginfiAccountPositionState)(this.umi, this.marginfiAccountPk, this.marginfiGroup, !this.selfManaged && this.solautoPositionData === null
433
- ? this.supplyMint
432
+ const freshState = await (0, marginfiUtils_1.getMarginfiAccountPositionState)(this.umi, { pk: this.marginfiAccountPk }, this.marginfiGroup, !this.selfManaged && this.solautoPositionData === null
433
+ ? { mint: this.supplyMint }
434
434
  : undefined, !this.selfManaged && this.solautoPositionData === null
435
- ? this.debtMint
435
+ ? { mint: this.debtMint }
436
436
  : undefined, this.livePositionUpdates);
437
437
  if (freshState) {
438
438
  this.log("Fresh state", freshState);
@@ -1 +1 @@
1
- {"version":3,"file":"transactionUtils.d.ts","sourceRoot":"","sources":["../../src/transactions/transactionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,kBAAkB,EAClB,GAAG,EAGJ,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,SAAS,EAA8B,MAAM,iBAAiB,CAAC;AAKxE,OAAO,EAGL,aAAa,EAYd,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAqOzD,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,EACtB,sBAAsB,EAAE,MAAM,EAAE,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CA+G7B;AAkLD,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,GACrB,OAAO,CAAC,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,CA0BnD;AAED,wBAAsB,8BAA8B,CAAC,MAAM,EAAE,aAAa,oBAyCzE;AAED,wBAAsB,gCAAgC,CACpD,MAAM,EAAE,aAAa,EACrB,2BAA2B,CAAC,EAAE,MAAM,EACpC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CACN;IACE,EAAE,EAAE,kBAAkB,CAAC;IACvB,oBAAoB,EAAE,MAAM,EAAE,CAAC;CAChC,GACD,SAAS,CACZ,CAkHA;AAED,wBAAsB,gCAAgC,CACpD,GAAG,EAAE,GAAG,EACR,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,SAAS,GACtB,OAAO,CAAC,CAAC,kBAAkB,EAAE,MAAM,EAAE,CAAC,GAAG,SAAS,CAAC,CAmCrD;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,GAAG;;;;EAwC9D"}
1
+ {"version":3,"file":"transactionUtils.d.ts","sourceRoot":"","sources":["../../src/transactions/transactionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,kBAAkB,EAClB,GAAG,EAGJ,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,SAAS,EAA8B,MAAM,iBAAiB,CAAC;AAKxE,OAAO,EAGL,aAAa,EAYd,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAqOzD,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,EACtB,sBAAsB,EAAE,MAAM,EAAE,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CA+G7B;AAkLD,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,GACrB,OAAO,CAAC,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,CA0BnD;AAED,wBAAsB,8BAA8B,CAAC,MAAM,EAAE,aAAa,oBAwCzE;AAED,wBAAsB,gCAAgC,CACpD,MAAM,EAAE,aAAa,EACrB,2BAA2B,CAAC,EAAE,MAAM,EACpC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CACN;IACE,EAAE,EAAE,kBAAkB,CAAC;IACvB,oBAAoB,EAAE,MAAM,EAAE,CAAC;CAChC,GACD,SAAS,CACZ,CAkHA;AAED,wBAAsB,gCAAgC,CACpD,GAAG,EAAE,GAAG,EACR,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,SAAS,GACtB,OAAO,CAAC,CAAC,kBAAkB,EAAE,MAAM,EAAE,CAAC,GAAG,SAAS,CAAC,CAmCrD;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,GAAG;;;;EAwC9D"}
@@ -340,8 +340,7 @@ async function requiresRefreshBeforeRebalance(client) {
340
340
  oldStateWithLatestPrices.liqUtilizationRateBps);
341
341
  if (client.livePositionUpdates.supplyAdjustment === BigInt(0) &&
342
342
  client.livePositionUpdates.debtAdjustment === BigInt(0) &&
343
- utilizationRateDiff / oldStateWithLatestPrices.liqUtilizationRateBps >=
344
- 0.005) {
343
+ utilizationRateDiff >= 20) {
345
344
  return true;
346
345
  }
347
346
  }
@@ -1,6 +1,6 @@
1
1
  import { PublicKey } from "@solana/web3.js";
2
2
  import { Umi } from "@metaplex-foundation/umi";
3
- import { Bank } from "../marginfi-sdk";
3
+ import { Bank, MarginfiAccount } from "../marginfi-sdk";
4
4
  import { MarginfiAssetAccounts } from "../types/accounts";
5
5
  import { PositionState } from "../generated";
6
6
  import { LivePositionUpdates } from "./solauto/generalUtils";
@@ -18,7 +18,20 @@ export declare function getAllMarginfiAccountsByAuthority(umi: Umi, authority: P
18
18
  supplyMint?: PublicKey;
19
19
  debtMint?: PublicKey;
20
20
  }[]>;
21
- export declare function getMarginfiAccountPositionState(umi: Umi, marginfiAccountPk: PublicKey, marginfiGroup?: PublicKey, supplyMint?: PublicKey, debtMint?: PublicKey, livePositionUpdates?: LivePositionUpdates): Promise<PositionState | undefined>;
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, protocolAccount: {
31
+ pk: PublicKey;
32
+ data?: MarginfiAccount;
33
+ }, marginfiGroup?: PublicKey, supply?: BankSelection, debt?: BankSelection, livePositionUpdates?: LivePositionUpdates): Promise<PositionState | undefined>;
22
34
  export declare function calculateAnnualAPYs(bank: Bank): [number, number];
23
35
  export declare function getUpToDateShareValues(bank: Bank): Promise<[number, number]>;
36
+ export {};
24
37
  //# sourceMappingURL=marginfiUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"marginfiUtils.d.ts","sourceRoot":"","sources":["../../src/utils/marginfiUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAa,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EACL,IAAI,EAKL,MAAM,iBAAiB,CAAC;AAiBzB,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAsB,MAAM,cAAc,CAAC;AAEjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG7D,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,SAAS,GAAG,qBAAqB,CAY3E;AAED,wBAAgB,gCAAgC,CAC9C,UAAU,EAAE,IAAI,EAChB,QAAQ,EAAE,IAAI,EACd,WAAW,EAAE,MAAM,GAClB,CAAC,MAAM,EAAE,MAAM,CAAC,CA6BlB;AAED,wBAAsB,wBAAwB,CAC5C,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,CAwC3B;AAED,wBAAsB,iCAAiC,CACrD,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,EACpB,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,CAwDA;AA6DD,wBAAsB,+BAA+B,CACnD,GAAG,EAAE,GAAG,EACR,iBAAiB,EAAE,SAAS,EAC5B,aAAa,CAAC,EAAE,SAAS,EACzB,UAAU,CAAC,EAAE,SAAS,EACtB,QAAQ,CAAC,EAAE,SAAS,EACpB,mBAAmB,CAAC,EAAE,mBAAmB,GACxC,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CA+KpC;AA+DD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,oBAU7C;AAED,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAgB3B"}
1
+ {"version":3,"file":"marginfiUtils.d.ts","sourceRoot":"","sources":["../../src/utils/marginfiUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAa,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EACL,IAAI,EAGJ,eAAe,EAGhB,MAAM,iBAAiB,CAAC;AAiBzB,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAsB,MAAM,cAAc,CAAC;AAEjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG7D,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,SAAS,GAAG,qBAAqB,CAY3E;AAED,wBAAgB,gCAAgC,CAC9C,UAAU,EAAE,IAAI,EAChB,QAAQ,EAAE,IAAI,EACd,WAAW,EAAE,MAAM,GAClB,CAAC,MAAM,EAAE,MAAM,CAAC,CA6BlB;AAED,wBAAsB,wBAAwB,CAC5C,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,CAwC3B;AAED,wBAAsB,iCAAiC,CACrD,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,EACpB,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,CAwDA;AA6DD,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,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAgB3B"}
@@ -86,7 +86,7 @@ async function getAllMarginfiAccountsByAuthority(umi, authority, compatibleWithS
86
86
  if (compatibleWithSolauto) {
87
87
  const positionStates = await Promise.all(marginfiAccounts.map(async (x) => ({
88
88
  publicKey: x.publicKey,
89
- state: await getMarginfiAccountPositionState(umi, (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(x.publicKey)),
89
+ state: await getMarginfiAccountPositionState(umi, { pk: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(x.publicKey) }),
90
90
  })));
91
91
  return positionStates
92
92
  .sort((a, b) => (0, numberUtils_1.fromBaseUnit)(b.state?.netWorth.baseAmountUsdValue ?? BigInt(0), generalAccounts_1.USD_DECIMALS) -
@@ -143,17 +143,30 @@ async function getTokenUsage(bank, isAsset, shares, amountUsedAdjustment) {
143
143
  padding: new Uint8Array([]),
144
144
  };
145
145
  }
146
- async function getMarginfiAccountPositionState(umi, marginfiAccountPk, marginfiGroup, supplyMint, debtMint, livePositionUpdates) {
147
- let marginfiAccount = await (0, marginfi_sdk_1.safeFetchMarginfiAccount)(umi, (0, umi_1.publicKey)(marginfiAccountPk), { commitment: "confirmed" });
146
+ async function getMarginfiAccountPositionState(umi, protocolAccount, marginfiGroup, supply, debt, livePositionUpdates) {
147
+ let marginfiAccount = protocolAccount.data ??
148
+ (await (0, marginfi_sdk_1.safeFetchMarginfiAccount)(umi, (0, umi_1.publicKey)(protocolAccount.pk), {
149
+ commitment: "confirmed",
150
+ }));
151
+ if (!supply) {
152
+ supply = {};
153
+ }
154
+ if (!debt) {
155
+ debt = {};
156
+ }
148
157
  if (!marginfiGroup && marginfiAccount) {
149
158
  marginfiGroup = (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(marginfiAccount.group);
150
159
  }
151
- let supplyBank = supplyMint && supplyMint !== web3_js_1.PublicKey.default
152
- ? await (0, marginfi_sdk_1.safeFetchBank)(umi, (0, umi_1.publicKey)(marginfiAccounts_1.MARGINFI_ACCOUNTS[marginfiGroup?.toString() ?? ""][supplyMint.toString()].bank), { commitment: "confirmed" })
153
- : null;
154
- let debtBank = debtMint && debtMint !== web3_js_1.PublicKey.default
155
- ? await (0, marginfi_sdk_1.safeFetchBank)(umi, (0, umi_1.publicKey)(marginfiAccounts_1.MARGINFI_ACCOUNTS[marginfiGroup?.toString() ?? ""][debtMint.toString()].bank), { commitment: "confirmed" })
156
- : null;
160
+ let supplyBank = supply?.banksCache && supply.mint && marginfiGroup
161
+ ? supply.banksCache[marginfiGroup.toString()][supply?.mint?.toString()]
162
+ : supply?.mint && supply?.mint !== web3_js_1.PublicKey.default
163
+ ? await (0, marginfi_sdk_1.safeFetchBank)(umi, (0, umi_1.publicKey)(marginfiAccounts_1.MARGINFI_ACCOUNTS[marginfiGroup?.toString() ?? ""][supply?.mint.toString()].bank), { commitment: "confirmed" })
164
+ : null;
165
+ let debtBank = debt?.banksCache && debt.mint && marginfiGroup
166
+ ? debt.banksCache[marginfiGroup.toString()][debt?.mint?.toString()]
167
+ : debt?.mint && debt?.mint !== web3_js_1.PublicKey.default
168
+ ? await (0, marginfi_sdk_1.safeFetchBank)(umi, (0, umi_1.publicKey)(marginfiAccounts_1.MARGINFI_ACCOUNTS[marginfiGroup?.toString() ?? ""][debt?.mint.toString()].bank), { commitment: "confirmed" })
169
+ : null;
157
170
  let supplyUsage = undefined;
158
171
  let debtUsage = undefined;
159
172
  if (marginfiAccount !== null &&
@@ -170,8 +183,8 @@ async function getMarginfiAccountPositionState(umi, marginfiAccountPk, marginfiG
170
183
  commitment: "confirmed",
171
184
  });
172
185
  }
173
- if (!supplyMint) {
174
- supplyMint = (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(supplyBank.mint);
186
+ if (!supply.mint) {
187
+ supply.mint = (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(supplyBank.mint);
175
188
  }
176
189
  supplyUsage = await getTokenUsage(supplyBank, true, (0, numberUtils_1.bytesToI80F48)(supplyBalances[0].assetShares.value), livePositionUpdates?.supplyAdjustment);
177
190
  }
@@ -181,8 +194,8 @@ async function getMarginfiAccountPositionState(umi, marginfiAccountPk, marginfiG
181
194
  commitment: "confirmed",
182
195
  });
183
196
  }
184
- if (!debtMint) {
185
- debtMint = (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(debtBank.mint);
197
+ if (!debt.mint) {
198
+ debt.mint = (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(debtBank.mint);
186
199
  }
187
200
  debtUsage = await getTokenUsage(debtBank, false, (0, numberUtils_1.bytesToI80F48)(debtBalances[0].liabilityShares.value), livePositionUpdates?.debtAdjustment);
188
201
  }
@@ -204,7 +217,7 @@ async function getMarginfiAccountPositionState(umi, marginfiAccountPk, marginfiG
204
217
  if (!debtUsage) {
205
218
  debtUsage = await getTokenUsage(debtBank, false, 0, livePositionUpdates?.debtAdjustment);
206
219
  }
207
- const supplyPrice = (0, generalUtils_1.safeGetPrice)(supplyMint);
220
+ const supplyPrice = (0, generalUtils_1.safeGetPrice)(supply.mint);
208
221
  let [maxLtv, liqThreshold] = await getMaxLtvAndLiqThreshold(umi, marginfiGroup ?? new web3_js_1.PublicKey(marginfiAccounts_1.DEFAULT_MARGINFI_GROUP), {
209
222
  mint: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(supplyBank.mint),
210
223
  bank: supplyBank,
@@ -238,7 +251,7 @@ function marginfiInterestRateCurve(bank, utilizationRatio) {
238
251
  return (utilizationRatio * plateauIr) / optimalUr;
239
252
  }
240
253
  else {
241
- return ((((utilizationRatio - optimalUr) / (1 - optimalUr)) * (maxIr - plateauIr)) +
254
+ return (((utilizationRatio - optimalUr) / (1 - optimalUr)) * (maxIr - plateauIr) +
242
255
  plateauIr);
243
256
  }
244
257
  }
@@ -251,7 +264,7 @@ function calcInterestRate(bank, utilizationRatio) {
251
264
  const insuranceFixedFeeApr = (0, numberUtils_1.bytesToI80F48)(bank.config.interestRateConfig.insuranceFeeFixedApr.value);
252
265
  const rateFee = protocolIrFee + insuranceIrFee;
253
266
  const totalFixedFeeApr = protocolFixedFeeApr + insuranceFixedFeeApr;
254
- const borrowingRate = (baseRate * (1 + rateFee)) + totalFixedFeeApr;
267
+ const borrowingRate = baseRate * (1 + rateFee) + totalFixedFeeApr;
255
268
  return [lendingRate, borrowingRate];
256
269
  }
257
270
  function calcAccruedInterestPaymentPerPeriod(apr, timeDelta, shareValue) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haven-fi/solauto-sdk",
3
- "version": "1.0.205",
3
+ "version": "1.0.207",
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",
@@ -55,7 +55,6 @@ import {
55
55
  getMaxLtvAndLiqThreshold,
56
56
  } from "../utils/marginfiUtils";
57
57
  import { bytesToI80F48, fromBaseUnit, toBps } from "../utils/numberUtils";
58
- import { createFakePositionState } from "../utils";
59
58
  import { QuoteResponse } from "@jup-ag/api";
60
59
 
61
60
  export interface SolautoMarginfiClientArgs extends SolautoClientArgs {
@@ -650,13 +649,13 @@ export class SolautoMarginfiClient extends SolautoClient {
650
649
 
651
650
  const freshState = await getMarginfiAccountPositionState(
652
651
  this.umi,
653
- this.marginfiAccountPk,
652
+ { pk: this.marginfiAccountPk },
654
653
  this.marginfiGroup,
655
654
  !this.selfManaged && this.solautoPositionData === null
656
- ? this.supplyMint
655
+ ? { mint: this.supplyMint }
657
656
  : undefined,
658
657
  !this.selfManaged && this.solautoPositionData === null
659
- ? this.debtMint
658
+ ? { mint: this.debtMint }
660
659
  : undefined,
661
660
  this.livePositionUpdates
662
661
  );
@@ -612,8 +612,7 @@ export async function requiresRefreshBeforeRebalance(client: SolautoClient) {
612
612
  if (
613
613
  client.livePositionUpdates.supplyAdjustment === BigInt(0) &&
614
614
  client.livePositionUpdates.debtAdjustment === BigInt(0) &&
615
- utilizationRateDiff / oldStateWithLatestPrices.liqUtilizationRateBps >=
616
- 0.005
615
+ utilizationRateDiff >= 20
617
616
  ) {
618
617
  return true;
619
618
  }
@@ -5,6 +5,7 @@ import {
5
5
  Bank,
6
6
  getMarginfiAccountSize,
7
7
  MARGINFI_PROGRAM_ID,
8
+ MarginfiAccount,
8
9
  safeFetchBank,
9
10
  safeFetchMarginfiAccount,
10
11
  } from "../marginfi-sdk";
@@ -168,7 +169,7 @@ export async function getAllMarginfiAccountsByAuthority(
168
169
  publicKey: x.publicKey,
169
170
  state: await getMarginfiAccountPositionState(
170
171
  umi,
171
- toWeb3JsPublicKey(x.publicKey)
172
+ { pk: toWeb3JsPublicKey(x.publicKey) }
172
173
  ),
173
174
  }))
174
175
  );
@@ -256,48 +257,66 @@ async function getTokenUsage(
256
257
  };
257
258
  }
258
259
 
260
+ interface BankSelection {
261
+ mint?: PublicKey;
262
+ banksCache?: BanksCache;
263
+ }
264
+
265
+ type BanksCache = { [group: string]: { [mint: string]: Bank } };
266
+
259
267
  export async function getMarginfiAccountPositionState(
260
268
  umi: Umi,
261
- marginfiAccountPk: PublicKey,
269
+ protocolAccount: { pk: PublicKey; data?: MarginfiAccount },
262
270
  marginfiGroup?: PublicKey,
263
- supplyMint?: PublicKey,
264
- debtMint?: PublicKey,
271
+ supply?: BankSelection,
272
+ debt?: BankSelection,
265
273
  livePositionUpdates?: LivePositionUpdates
266
274
  ): Promise<PositionState | undefined> {
267
- let marginfiAccount = await safeFetchMarginfiAccount(
268
- umi,
269
- publicKey(marginfiAccountPk),
270
- { commitment: "confirmed" }
271
- );
275
+ let marginfiAccount =
276
+ protocolAccount.data ??
277
+ (await safeFetchMarginfiAccount(umi, publicKey(protocolAccount.pk), {
278
+ commitment: "confirmed",
279
+ }));
280
+
281
+ if (!supply) {
282
+ supply = {};
283
+ }
284
+ if (!debt) {
285
+ debt = {};
286
+ }
272
287
 
273
288
  if (!marginfiGroup && marginfiAccount) {
274
289
  marginfiGroup = toWeb3JsPublicKey(marginfiAccount.group);
275
290
  }
276
291
 
277
292
  let supplyBank: Bank | null =
278
- supplyMint && supplyMint !== PublicKey.default
279
- ? await safeFetchBank(
280
- umi,
281
- publicKey(
282
- MARGINFI_ACCOUNTS[marginfiGroup?.toString() ?? ""][
283
- supplyMint.toString()
284
- ].bank
285
- ),
286
- { commitment: "confirmed" }
287
- )
288
- : null;
293
+ supply?.banksCache && supply.mint && marginfiGroup
294
+ ? supply.banksCache[marginfiGroup!.toString()][supply?.mint?.toString()]
295
+ : supply?.mint && supply?.mint !== PublicKey.default
296
+ ? await safeFetchBank(
297
+ umi,
298
+ publicKey(
299
+ MARGINFI_ACCOUNTS[marginfiGroup?.toString() ?? ""][
300
+ supply?.mint.toString()
301
+ ].bank
302
+ ),
303
+ { commitment: "confirmed" }
304
+ )
305
+ : null;
289
306
  let debtBank: Bank | null =
290
- debtMint && debtMint !== PublicKey.default
291
- ? await safeFetchBank(
292
- umi,
293
- publicKey(
294
- MARGINFI_ACCOUNTS[marginfiGroup?.toString() ?? ""][
295
- debtMint.toString()
296
- ].bank
297
- ),
298
- { commitment: "confirmed" }
299
- )
300
- : null;
307
+ debt?.banksCache && debt.mint && marginfiGroup
308
+ ? debt.banksCache[marginfiGroup!.toString()][debt?.mint?.toString()]
309
+ : debt?.mint && debt?.mint !== PublicKey.default
310
+ ? await safeFetchBank(
311
+ umi,
312
+ publicKey(
313
+ MARGINFI_ACCOUNTS[marginfiGroup?.toString() ?? ""][
314
+ debt?.mint.toString()
315
+ ].bank
316
+ ),
317
+ { commitment: "confirmed" }
318
+ )
319
+ : null;
301
320
 
302
321
  let supplyUsage: PositionTokenUsage | undefined = undefined;
303
322
  let debtUsage: PositionTokenUsage | undefined = undefined;
@@ -326,8 +345,8 @@ export async function getMarginfiAccountPositionState(
326
345
  commitment: "confirmed",
327
346
  });
328
347
  }
329
- if (!supplyMint) {
330
- supplyMint = toWeb3JsPublicKey(supplyBank!.mint);
348
+ if (!supply.mint) {
349
+ supply.mint = toWeb3JsPublicKey(supplyBank!.mint);
331
350
  }
332
351
  supplyUsage = await getTokenUsage(
333
352
  supplyBank!,
@@ -343,8 +362,8 @@ export async function getMarginfiAccountPositionState(
343
362
  commitment: "confirmed",
344
363
  });
345
364
  }
346
- if (!debtMint) {
347
- debtMint = toWeb3JsPublicKey(debtBank!.mint);
365
+ if (!debt.mint) {
366
+ debt.mint = toWeb3JsPublicKey(debtBank!.mint);
348
367
  }
349
368
  debtUsage = await getTokenUsage(
350
369
  debtBank!,
@@ -393,7 +412,7 @@ export async function getMarginfiAccountPositionState(
393
412
  );
394
413
  }
395
414
 
396
- const supplyPrice = safeGetPrice(supplyMint!)!;
415
+ const supplyPrice = safeGetPrice(supply.mint!)!;
397
416
  let [maxLtv, liqThreshold] = await getMaxLtvAndLiqThreshold(
398
417
  umi,
399
418
  marginfiGroup ?? new PublicKey(DEFAULT_MARGINFI_GROUP),
@@ -458,7 +477,7 @@ function marginfiInterestRateCurve(
458
477
  return (utilizationRatio * plateauIr) / optimalUr;
459
478
  } else {
460
479
  return (
461
- (((utilizationRatio - optimalUr) / (1 - optimalUr)) * (maxIr - plateauIr)) +
480
+ ((utilizationRatio - optimalUr) / (1 - optimalUr)) * (maxIr - plateauIr) +
462
481
  plateauIr
463
482
  );
464
483
  }
@@ -486,7 +505,7 @@ function calcInterestRate(
486
505
  );
487
506
  const rateFee = protocolIrFee + insuranceIrFee;
488
507
  const totalFixedFeeApr = protocolFixedFeeApr + insuranceFixedFeeApr;
489
- const borrowingRate = (baseRate * (1 + rateFee)) + totalFixedFeeApr;
508
+ const borrowingRate = baseRate * (1 + rateFee) + totalFixedFeeApr;
490
509
 
491
510
  return [lendingRate, borrowingRate];
492
511
  }
@@ -1,16 +1,19 @@
1
1
  import { describe, it } from "mocha";
2
2
  import { none, publicKey, some } from "@metaplex-foundation/umi";
3
3
  import { setupTest } from "../shared";
4
- import {
5
- SolautoMarginfiClient,
6
- } from "../../src/clients/solautoMarginfiClient";
4
+ import { SolautoMarginfiClient } from "../../src/clients/solautoMarginfiClient";
7
5
  import {
8
6
  solautoAction,
9
7
  SolautoSettingsParametersInpArgs,
10
8
  } from "../../src/generated";
11
9
  import { buildSolautoRebalanceTransaction } from "../../src/transactions/transactionUtils";
12
- import { maxBoostToBps, maxRepayFromBps, maxRepayToBps, toBaseUnit } from "../../src/utils/numberUtils";
13
- import { getAssociatedTokenAddress, NATIVE_MINT } from "@solana/spl-token";
10
+ import {
11
+ maxBoostToBps,
12
+ maxRepayFromBps,
13
+ maxRepayToBps,
14
+ toBaseUnit,
15
+ } from "../../src/utils/numberUtils";
16
+ import { NATIVE_MINT } from "@solana/spl-token";
14
17
  import { fetchTokenPrices } from "../../src/utils/generalUtils";
15
18
  import {
16
19
  TransactionItem,
@@ -18,18 +21,17 @@ import {
18
21
  } from "../../src/transactions/transactionsManager";
19
22
  import { PublicKey } from "@solana/web3.js";
20
23
  import { USDC } from "../../src/constants";
21
- import { buildHeliusApiUrl, getMarginfiAccountPositionState } from "../../src/utils";
24
+ import { buildHeliusApiUrl } from "../../src/utils";
22
25
 
23
26
  describe("Solauto Marginfi tests", async () => {
24
27
  // const signer = setupTest();
25
28
  const signer = setupTest("solauto-manager");
26
29
 
27
- const payForTransactions = true;
30
+ const payForTransactions = false;
28
31
  const useJitoBundle = false;
29
32
  const positionId = 1;
30
33
 
31
34
  it("open - deposit - borrow - rebalance to 0 - withdraw - close", async () => {
32
-
33
35
  const client = new SolautoMarginfiClient(
34
36
  buildHeliusApiUrl(process.env.HELIUS_API_KEY!),
35
37
  true
@@ -39,18 +41,16 @@ describe("Solauto Marginfi tests", async () => {
39
41
  const supplyDecimals = 9;
40
42
  const debtDecimals = 6;
41
43
 
42
- await client.initialize(
43
- {
44
- signer,
45
- positionId,
46
- authority: new PublicKey("AprYCPiVeKMCgjQ2ZufwChMzvQ5kFjJo2ekTLSkXsQDm")
47
- // marginfiAccount: new PublicKey(
48
- // "4nNvUXF5YqHFcH2nGweSiuvy1ct7V5FXfoCLKFYUN36z"
49
- // ),
50
- // supplyMint: NATIVE_MINT,
51
- // debtMint: new PublicKey(USDC),
52
- }
53
- );
44
+ await client.initialize({
45
+ signer,
46
+ positionId,
47
+ authority: new PublicKey("AprYCPiVeKMCgjQ2ZufwChMzvQ5kFjJo2ekTLSkXsQDm"),
48
+ // marginfiAccount: new PublicKey(
49
+ // "4nNvUXF5YqHFcH2nGweSiuvy1ct7V5FXfoCLKFYUN36z"
50
+ // ),
51
+ // supplyMint: NATIVE_MINT,
52
+ // debtMint: new PublicKey(USDC),
53
+ });
54
54
 
55
55
  const transactionItems: TransactionItem[] = [];
56
56
  // const settingParams: SolautoSettingsParametersInpArgs = {