@haven-fi/solauto-sdk 1.0.835 → 1.0.837

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 (45) hide show
  1. package/dist/constants/switchboardConstants.d.ts.map +1 -1
  2. package/dist/constants/switchboardConstants.js +2 -25
  3. package/dist/externalSdks/marginfi/types/oracleSetup.d.ts +22 -1
  4. package/dist/externalSdks/marginfi/types/oracleSetup.d.ts.map +1 -1
  5. package/dist/externalSdks/marginfi/types/oracleSetup.js +21 -0
  6. package/dist/services/flashLoans/marginfiFlProvider.d.ts.map +1 -1
  7. package/dist/services/flashLoans/marginfiFlProvider.js +5 -8
  8. package/dist/services/solauto/solautoMarginfiClient.d.ts +3 -0
  9. package/dist/services/solauto/solautoMarginfiClient.d.ts.map +1 -1
  10. package/dist/services/solauto/solautoMarginfiClient.js +22 -12
  11. package/dist/services/transactions/manager/transactionsManager.d.ts.map +1 -1
  12. package/dist/services/transactions/manager/transactionsManager.js +2 -1
  13. package/dist/solautoPosition/marginfiSolautoPositionEx.d.ts.map +1 -1
  14. package/dist/solautoPosition/marginfiSolautoPositionEx.js +4 -2
  15. package/dist/utils/marginfi/data.d.ts.map +1 -1
  16. package/dist/utils/marginfi/data.js +9 -15
  17. package/dist/utils/marginfi/general.d.ts +5 -0
  18. package/dist/utils/marginfi/general.d.ts.map +1 -1
  19. package/dist/utils/marginfi/general.js +36 -8
  20. package/dist/utils/marginfi/index.d.ts +1 -0
  21. package/dist/utils/marginfi/index.d.ts.map +1 -1
  22. package/dist/utils/marginfi/index.js +1 -0
  23. package/dist/utils/marginfi/prices.d.ts +14 -0
  24. package/dist/utils/marginfi/prices.d.ts.map +1 -0
  25. package/dist/utils/marginfi/prices.js +119 -0
  26. package/dist/utils/switchboardUtils.d.ts +5 -3
  27. package/dist/utils/switchboardUtils.d.ts.map +1 -1
  28. package/dist/utils/switchboardUtils.js +35 -12
  29. package/local/txSandbox.ts +3 -3
  30. package/package.json +1 -1
  31. package/src/constants/switchboardConstants.ts +2 -27
  32. package/src/externalSdks/marginfi/types/oracleSetup.ts +21 -0
  33. package/src/services/flashLoans/marginfiFlProvider.ts +10 -11
  34. package/src/services/solauto/solautoMarginfiClient.ts +34 -12
  35. package/src/services/transactions/manager/transactionsManager.ts +4 -1
  36. package/src/solautoPosition/marginfiSolautoPositionEx.ts +14 -3
  37. package/src/utils/marginfi/data.ts +16 -16
  38. package/src/utils/marginfi/general.ts +46 -12
  39. package/src/utils/marginfi/index.ts +2 -1
  40. package/src/utils/marginfi/prices.ts +165 -0
  41. package/src/utils/switchboardUtils.ts +55 -17
  42. package/tests/fixtures/README.md +17 -0
  43. package/tests/fixtures/marginfiOracles.json +82 -0
  44. package/tests/unit/marginfiOracles.ts +333 -0
  45. package/tests/unit/transactionsManager.ts +44 -1
@@ -1 +1 @@
1
- {"version":3,"file":"switchboardConstants.d.ts","sourceRoot":"","sources":["../../src/constants/switchboardConstants.ts"],"names":[],"mappings":"AAGA,UAAU,eAAe;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAGD,eAAO,MAAM,0BAA0B,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAAA;CA+CxE,CAAC"}
1
+ {"version":3,"file":"switchboardConstants.d.ts","sourceRoot":"","sources":["../../src/constants/switchboardConstants.ts"],"names":[],"mappings":"AAEA,UAAU,eAAe;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAKD,eAAO,MAAM,0BAA0B,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAAA;CAqBxE,CAAC"}
@@ -34,34 +34,11 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.SWITCHBOARD_PRICE_FEED_IDS = void 0;
37
- const spl_token_1 = require("@solana/spl-token");
38
37
  const tokens = __importStar(require("./tokenConstants"));
39
38
  // https://beta.ondemand.switchboard.xyz/solana/mainnet
39
+ // SOL, JitoSOL, JTO, LST, hSOL and JupSOL banks have migrated to Pyth.
40
+ // Marginfi refreshes must still select the feed from the bank's live configuration.
40
41
  exports.SWITCHBOARD_PRICE_FEED_IDS = {
41
- [spl_token_1.NATIVE_MINT.toString()]: {
42
- feedId: "4Hmd6PdjVA9auCoScE12iaBogfwS4ZXQ6VZoBeqanwWW",
43
- feedHash: "0x19089ab8a78c2d6e1b0b17ed50db7d99d7a05260160dfdf727746f656e879539",
44
- },
45
- [tokens.JUP_SOL]: {
46
- feedId: "BRCWKZ1PevwTFzBL2MLZM5hMwCNMWE8NYuS6zFPaXZ6y",
47
- feedHash: "0xd126e3a968e310748ad925d7d728f3e779121b0c26b7d1a3d061cc2da3093005",
48
- },
49
- [tokens.JITO_SOL]: {
50
- feedId: "5htZ4vPKPjAEg8EJv6JHcaCetMM4XehZo8znQvrp6Ur3",
51
- feedHash: "0x44f5a7676baf4c6e5eb26fdde2695e7e3e0971071b76ddc622fa71528092ca25"
52
- },
53
- [tokens.LST]: {
54
- feedId: "BWK8Wnybb7rPteNMqJs9uWoqdfYApNym6WgE59BwLe1v",
55
- feedHash: "0x74e140c452fe29cced80898a51961ed1410c1fe0efbdc970fe5aac986427419e"
56
- },
57
- [tokens.JTO]: {
58
- feedId: "V9o7SWeCFpGpKbWwVQD9x5RnpUEMh8sUAwqi1XnCReu",
59
- feedHash: "0x1ac1e88ed90c78e2514aa346ba1c90807d12524089920348f29b725832f4e070"
60
- },
61
- [tokens.H_SOL]: {
62
- feedId: "3zCUYzDhuyZREWgngzJfUt2UzQ5SzKCUK5AdwiB2HYmU",
63
- feedHash: "0x1b8b079fe96e1749f6418405e91407790689623dee8dc123ae26eb833c9d9bd5",
64
- },
65
42
  [tokens.POPCAT]: {
66
43
  feedId: "FTcFqwCjAgv2VMaowQ9XSBcesVzFzZkaju25nKio6bki",
67
44
  feedHash: "0xeb4f9a43024f8f33786b7291404510af8e94a66e1acb44953a3137878ee7033f",
@@ -12,7 +12,28 @@ export declare enum OracleSetup {
12
12
  SwitchboardLegacy = 2,
13
13
  PythPushOracle = 3,
14
14
  SwitchboardPull = 4,
15
- StakedWithPythPush = 5
15
+ StakedWithPythPush = 5,
16
+ KaminoPythPush = 6,
17
+ KaminoSwitchboardPull = 7,
18
+ Fixed = 8,
19
+ DriftPythPull = 9,
20
+ DriftSwitchboardPull = 10,
21
+ SolendPythPull = 11,
22
+ SolendSwitchboardPull = 12,
23
+ FixedKamino = 13,
24
+ FixedDrift = 14,
25
+ JuplendPythPull = 15,
26
+ JuplendSwitchboardPull = 16,
27
+ FixedJuplend = 17,
28
+ Scope = 18,
29
+ PythMSOL = 19,
30
+ KaminoMSOL = 20,
31
+ JuplendMSOL = 21,
32
+ PythLST = 22,
33
+ KaminoLST = 23,
34
+ JuplendLST = 24,
35
+ PTPyth = 25,
36
+ PTFixed = 26
16
37
  }
17
38
  export type OracleSetupArgs = OracleSetup;
18
39
  export declare function getOracleSetupSerializer(): Serializer<OracleSetupArgs, OracleSetup>;
@@ -1 +1 @@
1
- {"version":3,"file":"oracleSetup.d.ts","sourceRoot":"","sources":["../../../../src/externalSdks/marginfi/types/oracleSetup.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAc,MAAM,sCAAsC,CAAC;AAE9E,oBAAY,WAAW;IACrB,IAAI,IAAA;IACJ,UAAU,IAAA;IACV,iBAAiB,IAAA;IACjB,cAAc,IAAA;IACd,eAAe,IAAA;IACf,kBAAkB,IAAA;CACnB;AAED,MAAM,MAAM,eAAe,GAAG,WAAW,CAAC;AAE1C,wBAAgB,wBAAwB,IAAI,UAAU,CACpD,eAAe,EACf,WAAW,CACZ,CAIA"}
1
+ {"version":3,"file":"oracleSetup.d.ts","sourceRoot":"","sources":["../../../../src/externalSdks/marginfi/types/oracleSetup.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAc,MAAM,sCAAsC,CAAC;AAE9E,oBAAY,WAAW;IACrB,IAAI,IAAA;IACJ,UAAU,IAAA;IACV,iBAAiB,IAAA;IACjB,cAAc,IAAA;IACd,eAAe,IAAA;IACf,kBAAkB,IAAA;IAClB,cAAc,IAAA;IACd,qBAAqB,IAAA;IACrB,KAAK,IAAA;IACL,aAAa,IAAA;IACb,oBAAoB,KAAA;IACpB,cAAc,KAAA;IACd,qBAAqB,KAAA;IACrB,WAAW,KAAA;IACX,UAAU,KAAA;IACV,eAAe,KAAA;IACf,sBAAsB,KAAA;IACtB,YAAY,KAAA;IACZ,KAAK,KAAA;IACL,QAAQ,KAAA;IACR,UAAU,KAAA;IACV,WAAW,KAAA;IACX,OAAO,KAAA;IACP,SAAS,KAAA;IACT,UAAU,KAAA;IACV,MAAM,KAAA;IACN,OAAO,KAAA;CACR;AAED,MAAM,MAAM,eAAe,GAAG,WAAW,CAAC;AAE1C,wBAAgB,wBAAwB,IAAI,UAAU,CACpD,eAAe,EACf,WAAW,CACZ,CAIA"}
@@ -18,6 +18,27 @@ var OracleSetup;
18
18
  OracleSetup[OracleSetup["PythPushOracle"] = 3] = "PythPushOracle";
19
19
  OracleSetup[OracleSetup["SwitchboardPull"] = 4] = "SwitchboardPull";
20
20
  OracleSetup[OracleSetup["StakedWithPythPush"] = 5] = "StakedWithPythPush";
21
+ OracleSetup[OracleSetup["KaminoPythPush"] = 6] = "KaminoPythPush";
22
+ OracleSetup[OracleSetup["KaminoSwitchboardPull"] = 7] = "KaminoSwitchboardPull";
23
+ OracleSetup[OracleSetup["Fixed"] = 8] = "Fixed";
24
+ OracleSetup[OracleSetup["DriftPythPull"] = 9] = "DriftPythPull";
25
+ OracleSetup[OracleSetup["DriftSwitchboardPull"] = 10] = "DriftSwitchboardPull";
26
+ OracleSetup[OracleSetup["SolendPythPull"] = 11] = "SolendPythPull";
27
+ OracleSetup[OracleSetup["SolendSwitchboardPull"] = 12] = "SolendSwitchboardPull";
28
+ OracleSetup[OracleSetup["FixedKamino"] = 13] = "FixedKamino";
29
+ OracleSetup[OracleSetup["FixedDrift"] = 14] = "FixedDrift";
30
+ OracleSetup[OracleSetup["JuplendPythPull"] = 15] = "JuplendPythPull";
31
+ OracleSetup[OracleSetup["JuplendSwitchboardPull"] = 16] = "JuplendSwitchboardPull";
32
+ OracleSetup[OracleSetup["FixedJuplend"] = 17] = "FixedJuplend";
33
+ OracleSetup[OracleSetup["Scope"] = 18] = "Scope";
34
+ OracleSetup[OracleSetup["PythMSOL"] = 19] = "PythMSOL";
35
+ OracleSetup[OracleSetup["KaminoMSOL"] = 20] = "KaminoMSOL";
36
+ OracleSetup[OracleSetup["JuplendMSOL"] = 21] = "JuplendMSOL";
37
+ OracleSetup[OracleSetup["PythLST"] = 22] = "PythLST";
38
+ OracleSetup[OracleSetup["KaminoLST"] = 23] = "KaminoLST";
39
+ OracleSetup[OracleSetup["JuplendLST"] = 24] = "JuplendLST";
40
+ OracleSetup[OracleSetup["PTPyth"] = 25] = "PTPyth";
41
+ OracleSetup[OracleSetup["PTFixed"] = 26] = "PTFixed";
21
42
  })(OracleSetup || (exports.OracleSetup = OracleSetup = {}));
22
43
  function getOracleSetupSerializer() {
23
44
  return (0, serializers_1.scalarEnum)(OracleSetup, {
@@ -1 +1 @@
1
- {"version":3,"file":"marginfiFlProvider.d.ts","sourceRoot":"","sources":["../../../src/services/flashLoans/marginfiFlProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA8B,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAML,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AAclC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAmBlD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAQ5C,qBAAa,kBAAmB,SAAQ,cAAc;IACpD,OAAO,CAAC,wBAAwB,CAAqB;IACrD,OAAO,CAAC,yBAAyB,CAAQ;IACzC,OAAO,CAAC,uBAAuB,CAAQ;IAEvC,OAAO,CAAC,iBAAiB,CAAe;IACxC,OAAO,CAAC,eAAe,CAAe;IACtC,OAAO,CAAC,uBAAuB,CAAiB;IAChD,OAAO,CAAC,qBAAqB,CAAiB;IAC9C,OAAO,CAAC,wBAAwB,CAAiB;IACjD,OAAO,CAAC,sBAAsB,CAAiB;IAEzC,UAAU;YAiBF,iBAAiB;YAgEjB,sBAAsB;IAsD9B,sBAAsB,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAyC3D,gBAAgB,IAAI,SAAS,EAAE;IAY/B,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS;IAI7C,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,kBAAkB;IAM1B,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM;IAI7C,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,eAAe,CAAC,EAAE,OAAO,GAAG,MAAM;IAc9D,WAAW,CACT,SAAS,EAAE,gBAAgB,EAC3B,gBAAgB,EAAE,SAAS,GAC1B,kBAAkB;IAsDrB,UAAU,CAAC,SAAS,EAAE,gBAAgB,GAAG,kBAAkB;IAiD3D,YAAY,CACV,eAAe,EAAE,SAAS,EAC1B,IAAI,EAAE,SAAS,EACf,aAAa,EAAE,SAAS;CAW3B"}
1
+ {"version":3,"file":"marginfiFlProvider.d.ts","sourceRoot":"","sources":["../../../src/services/flashLoans/marginfiFlProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA8B,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAML,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AAclC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAmBlD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAQ5C,qBAAa,kBAAmB,SAAQ,cAAc;IACpD,OAAO,CAAC,wBAAwB,CAAqB;IACrD,OAAO,CAAC,yBAAyB,CAAQ;IACzC,OAAO,CAAC,uBAAuB,CAAQ;IAEvC,OAAO,CAAC,iBAAiB,CAAe;IACxC,OAAO,CAAC,eAAe,CAAe;IACtC,OAAO,CAAC,uBAAuB,CAAiB;IAChD,OAAO,CAAC,qBAAqB,CAAiB;IAC9C,OAAO,CAAC,wBAAwB,CAAiB;IACjD,OAAO,CAAC,sBAAsB,CAAiB;IAEzC,UAAU;YAiBF,iBAAiB;YA+DjB,sBAAsB;IAsD9B,sBAAsB,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAyC3D,gBAAgB,IAAI,SAAS,EAAE;IAY/B,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS;IAI7C,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,kBAAkB;IAM1B,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM;IAI7C,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,eAAe,CAAC,EAAE,OAAO,GAAG,MAAM;IAc9D,WAAW,CACT,SAAS,EAAE,gBAAgB,EAC3B,gBAAgB,EAAE,SAAS,GAC1B,kBAAkB;IAsDrB,UAAU,CAAC,SAAS,EAAE,gBAAgB,GAAG,kBAAkB;IAiD3D,YAAY,CACV,eAAe,EAAE,SAAS,EAC1B,IAAI,EAAE,SAAS,EACf,aAAa,EAAE,SAAS;CAW3B"}
@@ -59,14 +59,11 @@ class MarginfiFlProvider extends flProviderBase_1.FlProviderBase {
59
59
  data: this.debtBankLiquiditySource,
60
60
  }),
61
61
  ]);
62
- this.supplyBankHealthAccounts = [
63
- (0, utils_1.getAccountMeta)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.supplyBankLiquiditySource.publicKey)),
64
- (0, utils_1.getAccountMeta)(supplyPriceOracle),
65
- ];
66
- this.debtBankHealthAccounts = [
67
- (0, utils_1.getAccountMeta)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.debtBankLiquiditySource.publicKey)),
68
- (0, utils_1.getAccountMeta)(debtPriceOracle),
69
- ];
62
+ [this.supplyBankHealthAccounts, this.debtBankHealthAccounts] =
63
+ await Promise.all([
64
+ (0, utils_1.getMarginfiBankHealthAccounts)(this.umi, this.supplyBankLiquiditySource, supplyPriceOracle),
65
+ (0, utils_1.getMarginfiBankHealthAccounts)(this.umi, this.debtBankLiquiditySource, debtPriceOracle),
66
+ ]);
70
67
  }
71
68
  async setIntermediaryAccount(sources) {
72
69
  const compatibleMarginfiAccounts = this.existingMarginfiAccounts.filter((x) => x.group.toString() == this.liquidityBank(sources[0]).group);
@@ -15,6 +15,9 @@ export declare class SolautoMarginfiClient extends SolautoClient {
15
15
  marginfiDebtAccounts: MarginfiAssetAccounts;
16
16
  supplyPriceOracle: PublicKey;
17
17
  debtPriceOracle: PublicKey;
18
+ private supplyBankHealthAccounts;
19
+ private debtBankHealthAccounts;
20
+ private auxiliaryOracleAccounts;
18
21
  initialize(args: SolautoClientArgs): Promise<void>;
19
22
  defaultLookupTables(): string[];
20
23
  lutAccountsToAdd(): PublicKey[];
@@ -1 +1 @@
1
- {"version":3,"file":"solautoMarginfiClient.d.ts","sourceRoot":"","sources":["../../../src/services/solauto/solautoMarginfiClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA8B,MAAM,iBAAiB,CAAC;AACxE,OAAO,EACL,MAAM,EACN,kBAAkB,EAIlB,WAAW,EACZ,MAAM,0BAA0B,CAAC;AAKlC,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAuB,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EACL,kBAAkB,EAClB,eAAe,EAEf,SAAS,EAET,aAAa,EACb,iBAAiB,EAEjB,gCAAgC,EAOjC,MAAM,iBAAiB,CAAC;AAoBzB,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAMnE,qBAAa,qBAAsB,SAAQ,aAAa;IAC/C,eAAe,kBAA4B;IAE3C,WAAW,EAAG,uBAAuB,CAAC;IAEtC,eAAe,EAAG,SAAS,GAAG,MAAM,CAAC;IACrC,iBAAiB,EAAG,SAAS,CAAC;IAC9B,4BAA4B,EAAG,WAAW,EAAE,CAAC;IAC7C,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;IAE7B,UAAU,CAAC,IAAI,EAAE,iBAAiB;IA8ExC,mBAAmB,IAAI,MAAM,EAAE;IAO/B,gBAAgB,IAAI,SAAS,EAAE;IAI/B,yBAAyB,CAAC,eAAe,EAAE,MAAM,GAAG,kBAAkB;IAStE,cAAc,CACZ,QAAQ,CAAC,EAAE,gCAAgC,EAC3C,GAAG,CAAC,EAAE,kBAAkB,GACvB,kBAAkB;IAMrB,OAAO,CAAC,sBAAsB;IA0C9B,eAAe,IAAI,kBAAkB;IAYrC,SAAS,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,kBAAkB;IAepD,qBAAqB,CAAC,IAAI,EAAE,iBAAiB,GAAG,kBAAkB;IAUlE,OAAO,CAAC,6BAA6B;IAiGrC,OAAO,CAAC,oCAAoC;IA0D5C,WAAW,CACT,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE,gBAAgB,GACrB,kBAAkB;CA4EtB"}
1
+ {"version":3,"file":"solautoMarginfiClient.d.ts","sourceRoot":"","sources":["../../../src/services/solauto/solautoMarginfiClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA8B,MAAM,iBAAiB,CAAC;AACxE,OAAO,EACL,MAAM,EACN,kBAAkB,EAIlB,WAAW,EACZ,MAAM,0BAA0B,CAAC;AAKlC,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAuB,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EACL,kBAAkB,EAClB,eAAe,EAEf,SAAS,EAET,aAAa,EACb,iBAAiB,EAEjB,gCAAgC,EAOjC,MAAM,iBAAiB,CAAC;AAuBzB,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAMnE,qBAAa,qBAAsB,SAAQ,aAAa;IAC/C,eAAe,kBAA4B;IAE3C,WAAW,EAAG,uBAAuB,CAAC;IAEtC,eAAe,EAAG,SAAS,GAAG,MAAM,CAAC;IACrC,iBAAiB,EAAG,SAAS,CAAC;IAC9B,4BAA4B,EAAG,WAAW,EAAE,CAAC;IAC7C,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;IACnC,OAAO,CAAC,wBAAwB,CAAiB;IACjD,OAAO,CAAC,sBAAsB,CAAiB;IAC/C,OAAO,CAAC,uBAAuB,CAAqB;IAE9C,UAAU,CAAC,IAAI,EAAE,iBAAiB;IA8FxC,mBAAmB,IAAI,MAAM,EAAE;IAO/B,gBAAgB,IAAI,SAAS,EAAE;IAU/B,yBAAyB,CAAC,eAAe,EAAE,MAAM,GAAG,kBAAkB;IAStE,cAAc,CACZ,QAAQ,CAAC,EAAE,gCAAgC,EAC3C,GAAG,CAAC,EAAE,kBAAkB,GACvB,kBAAkB;IAMrB,OAAO,CAAC,sBAAsB;IA0C9B,eAAe,IAAI,kBAAkB;IAYrC,SAAS,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,kBAAkB;IAepD,qBAAqB,CAAC,IAAI,EAAE,iBAAiB,GAAG,kBAAkB;IAUlE,OAAO,CAAC,6BAA6B;IA2FrC,OAAO,CAAC,oCAAoC;IA0D5C,WAAW,CACT,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE,gBAAgB,GACrB,kBAAkB;CA4EtB"}
@@ -16,6 +16,7 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
16
16
  constructor() {
17
17
  super(...arguments);
18
18
  this.lendingPlatform = generated_1.LendingPlatform.Marginfi;
19
+ this.auxiliaryOracleAccounts = [];
19
20
  }
20
21
  async initialize(args) {
21
22
  await super.initialize(args);
@@ -58,6 +59,17 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
58
59
  this.mfiAccounts.bankAccounts[this.marginfiGroup.toString()][this.pos.debtMint.toString()];
59
60
  [this.supplyPriceOracle, this.debtPriceOracle] =
60
61
  await this.pos.priceOracles();
62
+ const banks = await (0, marginfi_1.fetchAllBank)(this.umi, [
63
+ (0, umi_1.publicKey)(this.marginfiSupplyAccounts.bank),
64
+ (0, umi_1.publicKey)(this.marginfiDebtAccounts.bank),
65
+ ]);
66
+ [this.supplyBankHealthAccounts, this.debtBankHealthAccounts] =
67
+ await Promise.all([
68
+ (0, utils_1.getMarginfiBankHealthAccounts)(this.umi, banks[0], this.supplyPriceOracle),
69
+ (0, utils_1.getMarginfiBankHealthAccounts)(this.umi, banks[1], this.debtPriceOracle),
70
+ ]);
71
+ this.auxiliaryOracleAccounts = Array.from(new Set(banks.flatMap(utils_1.getMarginfiAuxiliaryOracleAccounts)
72
+ .map((key) => key.toString()))).map((key) => (0, utils_1.getAccountMeta)(new web3_js_1.PublicKey(key)));
61
73
  this.log("Marginfi account:", this.marginfiAccountPk.toString());
62
74
  this.log("Supply price oracle:", this.supplyPriceOracle.toString());
63
75
  this.log("Debt price oracle:", this.debtPriceOracle.toString());
@@ -69,7 +81,11 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
69
81
  ];
70
82
  }
71
83
  lutAccountsToAdd() {
72
- return [...super.lutAccountsToAdd(), this.marginfiAccountPk];
84
+ return [
85
+ ...super.lutAccountsToAdd(),
86
+ this.marginfiAccountPk,
87
+ ...this.auxiliaryOracleAccounts.map((account) => (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(account.pubkey)),
88
+ ];
73
89
  }
74
90
  marginfiAccountInitialize(marginfiAccount) {
75
91
  return (0, marginfi_1.marginfiAccountInitialize)(this.umi, {
@@ -142,7 +158,7 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
142
158
  debtPriceOracle: (0, umi_1.publicKey)(this.debtPriceOracle),
143
159
  solautoPosition: (0, umi_1.publicKey)(this.pos.publicKey),
144
160
  priceType: priceType ?? generated_1.PriceType.Realtime,
145
- });
161
+ }).addRemainingAccounts(this.auxiliaryOracleAccounts);
146
162
  }
147
163
  protocolInteractionIx(args) {
148
164
  let tx = super.protocolInteractionIx(args);
@@ -159,10 +175,7 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
159
175
  if (!this.healthCheckRemainingAccounts
160
176
  .map((x) => x.pubkey.toString())
161
177
  .includes(this.marginfiSupplyAccounts.bank)) {
162
- this.healthCheckRemainingAccounts.push(...[
163
- (0, utils_1.getAccountMeta)(new web3_js_1.PublicKey(this.marginfiSupplyAccounts.bank)),
164
- (0, utils_1.getAccountMeta)(this.supplyPriceOracle),
165
- ]);
178
+ this.healthCheckRemainingAccounts.push(...this.supplyBankHealthAccounts);
166
179
  }
167
180
  return (0, marginfi_1.lendingAccountDeposit)(this.umi, {
168
181
  signer: this.signer,
@@ -178,10 +191,7 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
178
191
  case "Borrow": {
179
192
  const remainingAccounts = this.healthCheckRemainingAccounts;
180
193
  if (!remainingAccounts.find((x) => x.pubkey.toString() === this.marginfiDebtAccounts.bank.toString())) {
181
- remainingAccounts.push(...[
182
- (0, utils_1.getAccountMeta)(new web3_js_1.PublicKey(this.marginfiDebtAccounts.bank)),
183
- (0, utils_1.getAccountMeta)(this.debtPriceOracle),
184
- ]);
194
+ remainingAccounts.push(...this.debtBankHealthAccounts);
185
195
  }
186
196
  return (0, marginfi_1.lendingAccountBorrow)(this.umi, {
187
197
  amount: args.fields[0],
@@ -265,7 +275,7 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
265
275
  vaultDebtTa,
266
276
  debtVaultAuthority,
267
277
  solautoAction: args,
268
- });
278
+ }).addRemainingAccounts(this.auxiliaryOracleAccounts);
269
279
  }
270
280
  rebalanceIx(rebalanceStep, data) {
271
281
  const preSwapRebalance = rebalanceStep === generated_1.RebalanceStep.PreSwap;
@@ -322,7 +332,7 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
322
332
  flashLoanFeeBps: data.flashLoan?.flFeeBps && isFirstRebalance
323
333
  ? data.flashLoan.flFeeBps
324
334
  : null,
325
- });
335
+ }).addRemainingAccounts(this.auxiliaryOracleAccounts);
326
336
  }
327
337
  }
328
338
  exports.SolautoMarginfiClient = SolautoMarginfiClient;
@@ -1 +1 @@
1
- {"version":3,"file":"transactionsManager.d.ts","sourceRoot":"","sources":["../../../../src/services/transactions/manager/transactionsManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transactionsManager.d.ts","sourceRoot":"","sources":["../../../../src/services/transactions/manager/transactionsManager.ts"],"names":[],"mappings":"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"}
@@ -309,7 +309,8 @@ class TransactionsManager {
309
309
  const refreshedSets = await this.refreshItemSets(itemSets, attemptNum, prevError, currentIndex);
310
310
  itemSet = refreshedSets ? refreshedSets[0] : undefined;
311
311
  }
312
- if (!itemSet || !this.shouldProceedToSend([itemSet], attemptNum)) {
312
+ if (!itemSet ||
313
+ !this.shouldProceedToSend(itemSets.slice(currentIndex), attemptNum)) {
313
314
  return;
314
315
  }
315
316
  const tx = await itemSet.getSingleTransaction();
@@ -1 +1 @@
1
- {"version":3,"file":"marginfiSolautoPositionEx.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/marginfiSolautoPositionEx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAA+B,MAAM,0BAA0B,CAAC;AAgB7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE1D,qBAAa,yBAA0B,SAAQ,iBAAiB;IAC9D,eAAe,kBAA4B;IAC3C,eAAe,YAAiB;IAEzB,UAAU,EAAE,IAAI,GAAG,IAAI,CAAQ;IAC/B,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAQ;IAEpC,WAAW,CACT,SAAS,CAAC,EAAE,SAAS,EACrB,WAAW,CAAC,EAAE,OAAO,GACpB,MAAM,GAAG,SAAS;IAWrB,SAAS,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS;IAW3E,OAAO,CAAC,eAAe;IAMjB,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAW3B,YAAY,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IASpC,wBAAwB,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAa3D,OAAO,CAAC,6BAA6B;IAwBrC,gCAAgC,CAAC,KAAK,EAAE,IAAI,EAAE;IAK9C,4BAA4B,CAAC,KAAK,EAAE,IAAI,EAAE;IAQ1C,IAAI,eAAe,cAElB;IAED,IAAI,aAAa,cAEhB;IAED,IAAI,wBAAwB,IAAI,MAAM,CAKrC;IAED,IAAI,qBAAqB,IAAI,MAAM,CAUlC;IAEK,oBAAoB,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;CA2BjE"}
1
+ {"version":3,"file":"marginfiSolautoPositionEx.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/marginfiSolautoPositionEx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAA+B,MAAM,0BAA0B,CAAC;AAiB7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE1D,qBAAa,yBAA0B,SAAQ,iBAAiB;IAC9D,eAAe,kBAA4B;IAC3C,eAAe,YAAiB;IAEzB,UAAU,EAAE,IAAI,GAAG,IAAI,CAAQ;IAC/B,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAQ;IAEpC,WAAW,CACT,SAAS,CAAC,EAAE,SAAS,EACrB,WAAW,CAAC,EAAE,OAAO,GACpB,MAAM,GAAG,SAAS;IAgBrB,SAAS,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS;IAgB3E,OAAO,CAAC,eAAe;IAMjB,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAW3B,YAAY,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IASpC,wBAAwB,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAa3D,OAAO,CAAC,6BAA6B;IAwBrC,gCAAgC,CAAC,KAAK,EAAE,IAAI,EAAE;IAK9C,4BAA4B,CAAC,KAAK,EAAE,IAAI,EAAE;IAQ1C,IAAI,eAAe,cAElB;IAED,IAAI,aAAa,cAEhB;IAED,IAAI,wBAAwB,IAAI,MAAM,CAKrC;IAED,IAAI,qBAAqB,IAAI,MAAM,CAUlC;IAEK,oBAAoB,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;CA2BjE"}
@@ -18,10 +18,12 @@ class MarginfiSolautoPositionEx extends solautoPositionEx_1.SolautoPositionEx {
18
18
  }
19
19
  supplyPrice(priceType, withoutBias) {
20
20
  return (this._supplyPrice ??
21
+ (0, utils_1.safeGetMarginfiBankPrice)(this.supplyBank, priceType, !withoutBias ? marginfi_1.PriceBias.Low : undefined) ??
21
22
  (0, utils_1.safeGetPrice)(this.supplyMint, priceType, !withoutBias ? marginfi_1.PriceBias.Low : undefined));
22
23
  }
23
24
  debtPrice(priceType, withoutBias) {
24
25
  return (this._debtPrice ??
26
+ (0, utils_1.safeGetMarginfiBankPrice)(this.debtBank, priceType, !withoutBias ? marginfi_1.PriceBias.High : undefined) ??
25
27
  (0, utils_1.safeGetPrice)(this.debtMint, priceType, !withoutBias ? marginfi_1.PriceBias.High : undefined));
26
28
  }
27
29
  getBankAccounts(mint) {
@@ -47,7 +49,7 @@ class MarginfiSolautoPositionEx extends solautoPositionEx_1.SolautoPositionEx {
47
49
  }
48
50
  async maxLtvAndLiqThresholdBps() {
49
51
  const [supplyBank, debtBank] = await this.getBanks();
50
- const [supplyPrice] = await (0, utils_1.fetchTokenPrices)([this.supplyMint]);
52
+ const supplyPrice = await (0, utils_1.getMarginfiBankPrice)(this.umi, supplyBank);
51
53
  const [maxLtvBps, liqThresholdBps] = (0, utils_1.calcMarginfiMaxLtvAndLiqThresholdBps)(supplyBank, debtBank, supplyPrice);
52
54
  return [maxLtvBps, liqThresholdBps];
53
55
  }
@@ -58,7 +60,7 @@ class MarginfiSolautoPositionEx extends solautoPositionEx_1.SolautoPositionEx {
58
60
  return {
59
61
  baseUnit: baseUnit,
60
62
  baseAmountUsdValue: (0, utils_1.toRoundedUsdValue)((0, utils_1.fromBaseUnit)(baseUnit, (0, utils_1.tokenInfo)(mint).decimals) *
61
- ((0, utils_1.safeGetPrice)(mint) ?? 0)),
63
+ ((0, utils_1.safeGetMarginfiBankPrice)(bank ?? null) ?? (0, utils_1.safeGetPrice)(mint) ?? 0)),
62
64
  };
63
65
  }
64
66
  updateSupplyLiquidityDepositable(banks) {
@@ -1 +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;AAE1D,OAAO,EAAE,aAAa,EAAsB,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAO/E,OAAO,EACL,IAAI,EAGJ,eAAe,EAIhB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAgBjD,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;AAED,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,IAAI,GAAG,IAAI,EACjB,KAAK,EAAE,OAAO,UAgBf;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,cAAc,CAAC,EAAE,cAAc,EAC/B,SAAS,CAAC,EAAE,SAAS,GACpB,OAAO,CACN;IACE,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,aAAa,EAAE,SAAS,CAAC;IACzB,KAAK,EAAE,aAAa,CAAC;CACtB,GACD,SAAS,CACZ,CAmLA;AA+DD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,oBAU7C;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAgBnE"}
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;AAE1D,OAAO,EAAE,aAAa,EAAsB,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAO/E,OAAO,EACL,IAAI,EAGJ,eAAe,EAIhB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAgBjD,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,CA2C3B;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;AAED,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,IAAI,GAAG,IAAI,EACjB,KAAK,EAAE,OAAO,UAgBf;AAwDD,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,cAAc,CAAC,EAAE,cAAc,EAC/B,SAAS,CAAC,EAAE,SAAS,GACpB,OAAO,CACN;IACE,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,aAAa,EAAE,SAAS,CAAC;IACzB,KAAK,EAAE,aAAa,CAAC;CACtB,GACD,SAAS,CACZ,CAwLA;AA+DD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,oBAU7C;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAgBnE"}
@@ -13,10 +13,10 @@ const umi_1 = require("@metaplex-foundation/umi");
13
13
  const umi_web3js_adapters_1 = require("@metaplex-foundation/umi-web3js-adapters");
14
14
  const constants_1 = require("../../constants");
15
15
  const marginfi_1 = require("../../externalSdks/marginfi");
16
- const priceUtils_1 = require("../priceUtils");
17
16
  const generalUtils_1 = require("../generalUtils");
18
17
  const numberUtils_1 = require("../numberUtils");
19
18
  const general_1 = require("./general");
19
+ const prices_1 = require("./prices");
20
20
  async function getMarginfiMaxLtvAndLiqThresholdBps(umi, marginfiGroup, supply, debt, supplyPrice) {
21
21
  if (!supply.bank && !(0, generalUtils_1.validPubkey)(supply.mint)) {
22
22
  return [0, 0];
@@ -29,10 +29,7 @@ async function getMarginfiMaxLtvAndLiqThresholdBps(umi, marginfiGroup, supply, d
29
29
  debt.bank = await (0, marginfi_1.safeFetchBank)(umi, (0, umi_1.publicKey)(bankAccounts[marginfiGroup.toString()][debt.mint.toString()].bank), { commitment: "confirmed" });
30
30
  }
31
31
  if (!supplyPrice) {
32
- const [price] = await (0, priceUtils_1.fetchTokenPrices)([
33
- (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(supply.bank.mint),
34
- ]);
35
- supplyPrice = price;
32
+ supplyPrice = await (0, prices_1.getMarginfiBankPrice)(umi, supply.bank);
36
33
  }
37
34
  if (!debt.bank || debt.bank === null) {
38
35
  return [0, 0];
@@ -138,13 +135,13 @@ function getBankLiquidityUsedBaseUnit(bank, asset) {
138
135
  }
139
136
  return BigInt(Math.floor(amountUsed));
140
137
  }
141
- async function getTokenUsage(bank, isAsset, shares, amountUsedAdjustment, priceType) {
138
+ async function getTokenUsage(umi, bank, isAsset, shares, amountUsedAdjustment, priceType) {
142
139
  let amountUsed = 0;
143
140
  let amountCanBeUsed = BigInt(0);
144
141
  let marketPrice = 0;
145
142
  let originationFee = 0;
146
143
  if (bank !== null) {
147
- [marketPrice] = await (0, priceUtils_1.fetchTokenPrices)([(0, umi_web3js_adapters_1.toWeb3JsPublicKey)(bank.mint)], priceType);
144
+ marketPrice = await (0, prices_1.getMarginfiBankPrice)(umi, bank, priceType);
148
145
  const [assetShareValue, liabilityShareValue] = getUpToDateShareValues(bank);
149
146
  const shareValue = isAsset ? assetShareValue : liabilityShareValue;
150
147
  amountUsed = shares * shareValue + Number(amountUsedAdjustment ?? 0);
@@ -202,9 +199,6 @@ async function getMarginfiAccountPositionState(umi, lpUserAccount, marginfiGroup
202
199
  let debtBank = await getBank(umi, debt, marginfiGroup);
203
200
  let supplyUsage = undefined;
204
201
  let debtUsage = undefined;
205
- if (supply.mint && debt.mint) {
206
- await (0, priceUtils_1.fetchTokenPrices)([supply.mint, debt.mint]);
207
- }
208
202
  if (marginfiAccount !== null &&
209
203
  marginfiAccount.lendingAccount.balances.filter((x) => x.active).length > 0) {
210
204
  const supplyBalances = marginfiAccount.lendingAccount.balances.filter((balance) => balance.active && (0, numberUtils_1.bytesToI80F48)(balance.assetShares.value) > 0);
@@ -222,7 +216,7 @@ async function getMarginfiAccountPositionState(umi, lpUserAccount, marginfiGroup
222
216
  if (!supply.mint) {
223
217
  supply.mint = (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(supplyBank.mint);
224
218
  }
225
- supplyUsage = await getTokenUsage(supplyBank, true, (0, numberUtils_1.bytesToI80F48)(supplyBalances[0].assetShares.value), contextUpdates?.supplyAdjustment, priceType);
219
+ supplyUsage = await getTokenUsage(umi, supplyBank, true, (0, numberUtils_1.bytesToI80F48)(supplyBalances[0].assetShares.value), contextUpdates?.supplyAdjustment, priceType);
226
220
  }
227
221
  if (debtBalances.length > 0) {
228
222
  if (debtBank === null) {
@@ -233,14 +227,14 @@ async function getMarginfiAccountPositionState(umi, lpUserAccount, marginfiGroup
233
227
  if (!debt.mint) {
234
228
  debt.mint = (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(debtBank.mint);
235
229
  }
236
- debtUsage = await getTokenUsage(debtBank, false, (0, numberUtils_1.bytesToI80F48)(debtBalances[0].liabilityShares.value), contextUpdates?.debtAdjustment, priceType);
230
+ debtUsage = await getTokenUsage(umi, debtBank, false, (0, numberUtils_1.bytesToI80F48)(debtBalances[0].liabilityShares.value), contextUpdates?.debtAdjustment, priceType);
237
231
  }
238
232
  }
239
233
  if (supplyBank === null) {
240
234
  return undefined;
241
235
  }
242
236
  if (!supplyUsage) {
243
- supplyUsage = await getTokenUsage(supplyBank, true, 0, contextUpdates?.supplyAdjustment);
237
+ supplyUsage = await getTokenUsage(umi, supplyBank, true, 0, contextUpdates?.supplyAdjustment, priceType);
244
238
  }
245
239
  if (debtBank === null) {
246
240
  return undefined;
@@ -257,12 +251,12 @@ async function getMarginfiAccountPositionState(umi, lpUserAccount, marginfiGroup
257
251
  return undefined;
258
252
  }
259
253
  if (!debtUsage) {
260
- debtUsage = await getTokenUsage(debtBank, false, 0, contextUpdates?.debtAdjustment);
254
+ debtUsage = await getTokenUsage(umi, debtBank, false, 0, contextUpdates?.debtAdjustment, priceType);
261
255
  }
262
256
  if (!marginfiGroup) {
263
257
  marginfiGroup = (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(supplyBank.group);
264
258
  }
265
- const supplyPrice = (0, priceUtils_1.safeGetPrice)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(supplyBank.mint));
259
+ const supplyPrice = (0, numberUtils_1.fromBaseUnit)(supplyUsage.baseAmountMarketPriceUsd, constants_1.USD_DECIMALS);
266
260
  let [maxLtvBps, liqThresholdBps] = await getMarginfiMaxLtvAndLiqThresholdBps(umi, marginfiGroup, {
267
261
  mint: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(supplyBank.mint),
268
262
  bank: supplyBank,
@@ -16,6 +16,11 @@ export declare function getMarginfiPriceOracle(umi: Umi, bank: {
16
16
  pk?: PublicKey;
17
17
  data?: Bank;
18
18
  }): Promise<PublicKey>;
19
+ export type MarginfiHealthAccountMeta = AccountMeta & {
20
+ oracleAccountCount?: number;
21
+ };
22
+ export declare function getMarginfiAuxiliaryOracleAccounts(bank: Bank): PublicKey[];
23
+ export declare function getMarginfiBankHealthAccounts(umi: Umi, bank: Bank, priceOracle?: PublicKey): Promise<MarginfiHealthAccountMeta[]>;
19
24
  interface AllMarginfiAssetAccounts extends MarginfiAssetAccounts {
20
25
  mint: PublicKey;
21
26
  }
@@ -1 +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,EAEL,uBAAuB,EACxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,OAAO,EACP,IAAI,EAIJ,eAAe,EAGhB,MAAM,6BAA6B,CAAC;AASrC,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,CA8BtB;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,sBAiBtC;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;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,CAoB3E"}
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,EAEL,uBAAuB,EACxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,OAAO,EACP,IAAI,EAIJ,eAAe,EAGhB,MAAM,6BAA6B,CAAC;AASrC,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,CA8BtB;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,sBAiBtC;AAGD,MAAM,MAAM,yBAAyB,GAAG,WAAW,GAAG;IACpD,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,wBAAgB,kCAAkC,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,EAAE,CAS1E;AAED,wBAAsB,6BAA6B,CACjD,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,IAAI,EACV,WAAW,CAAC,EAAE,SAAS,GACtB,OAAO,CAAC,yBAAyB,EAAE,CAAC,CAYtC;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,CAMxB;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;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,CAyB3E"}
@@ -5,6 +5,8 @@ exports.umiWithMarginfiProgram = umiWithMarginfiProgram;
5
5
  exports.getAllBankRelatedAccounts = getAllBankRelatedAccounts;
6
6
  exports.fetchBankAddresses = fetchBankAddresses;
7
7
  exports.getMarginfiPriceOracle = getMarginfiPriceOracle;
8
+ exports.getMarginfiAuxiliaryOracleAccounts = getMarginfiAuxiliaryOracleAccounts;
9
+ exports.getMarginfiBankHealthAccounts = getMarginfiBankHealthAccounts;
8
10
  exports.findMarginfiAccounts = findMarginfiAccounts;
9
11
  exports.getRemainingAccountsForMarginfiHealthCheck = getRemainingAccountsForMarginfiHealthCheck;
10
12
  exports.calcMarginfiMaxLtvAndLiqThresholdBps = calcMarginfiMaxLtvAndLiqThresholdBps;
@@ -84,6 +86,29 @@ async function getMarginfiPriceOracle(umi, bank) {
84
86
  : (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(bank.data.config.oracleKeys[0]);
85
87
  return priceOracle;
86
88
  }
89
+ function getMarginfiAuxiliaryOracleAccounts(bank) {
90
+ if (bank.config.oracleSetup !== marginfi_1.OracleSetup.PythLST) {
91
+ return [];
92
+ }
93
+ const pool = (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(bank.config.oracleKeys[1]);
94
+ if (!(0, generalUtils_1.validPubkey)(pool)) {
95
+ throw new Error(`Missing PythLST stake pool for bank ${bank.publicKey}`);
96
+ }
97
+ return [pool];
98
+ }
99
+ async function getMarginfiBankHealthAccounts(umi, bank, priceOracle) {
100
+ const oracles = [
101
+ priceOracle ?? (await getMarginfiPriceOracle(umi, { data: bank })),
102
+ ...getMarginfiAuxiliaryOracleAccounts(bank),
103
+ ];
104
+ return [
105
+ {
106
+ ...(0, solanaUtils_1.getAccountMeta)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(bank.publicKey)),
107
+ oracleAccountCount: oracles.length,
108
+ },
109
+ ...oracles.map((oracle) => (0, solanaUtils_1.getAccountMeta)(oracle)),
110
+ ];
111
+ }
87
112
  function findMarginfiAccounts(bank) {
88
113
  const search = (bankAccounts) => {
89
114
  for (const group in bankAccounts) {
@@ -110,13 +135,8 @@ async function getRemainingAccountsForMarginfiHealthCheck(umi, balance) {
110
135
  if (!balance.active) {
111
136
  return [];
112
137
  }
113
- const priceOracle = await getMarginfiPriceOracle(umi, {
114
- pk: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(balance.bankPk),
115
- });
116
- return [
117
- (0, solanaUtils_1.getAccountMeta)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(balance.bankPk)),
118
- (0, solanaUtils_1.getAccountMeta)(priceOracle),
119
- ];
138
+ const bank = await (0, marginfi_1.fetchBank)(umi, balance.bankPk);
139
+ return getMarginfiBankHealthAccounts(umi, bank);
120
140
  }
121
141
  function calcMarginfiMaxLtvAndLiqThresholdBps(supplyBank, debtBank, supplyPrice) {
122
142
  let maxLtv = (0, numberUtils_1.bytesToI80F48)(supplyBank.config.assetWeightInit.value) /
@@ -139,7 +159,15 @@ function marginfiAccountEmpty(marginfiAccount) {
139
159
  (0, numberUtils_1.bytesToI80F48)(x.liabilityShares.value) > 0.000001)) === undefined);
140
160
  }
141
161
  function composeRemainingAccounts(accs) {
142
- const banksAndOracles = accs.reduce((acc, _, i) => i % 2 === 0 ? [...acc, [accs[i], accs[i + 1]]] : acc, []);
162
+ const banksAndOracles = [];
163
+ for (let i = 0; i < accs.length;) {
164
+ const count = 1 + (accs[i].oracleAccountCount ?? 1);
165
+ if (!Number.isInteger(count) || count < 2 || i + count > accs.length) {
166
+ throw new Error("Incomplete Marginfi bank oracle accounts");
167
+ }
168
+ banksAndOracles.push(accs.slice(i, i + count));
169
+ i += count;
170
+ }
143
171
  return banksAndOracles
144
172
  .sort((a, b) => {
145
173
  const aBytes = (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(a[0].pubkey).toBuffer();
@@ -1,3 +1,4 @@
1
1
  export * from "./data";
2
2
  export * from "./general";
3
+ export * from "./prices";
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/marginfi/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC"}
@@ -16,3 +16,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./data"), exports);
18
18
  __exportStar(require("./general"), exports);
19
+ __exportStar(require("./prices"), exports);
@@ -0,0 +1,14 @@
1
+ import { RpcAccount, Umi } from "@metaplex-foundation/umi";
2
+ import { Bank, PriceBias } from "../../externalSdks/marginfi";
3
+ import { PriceType } from "../../generated";
4
+ interface BankPrice {
5
+ realtimePrice: number;
6
+ emaPrice: number;
7
+ confInterval: number;
8
+ emaConfInterval: number;
9
+ }
10
+ export declare function getPythLstPriceData(bank: Bank, oracle: RpcAccount, stakePool: RpcAccount, clock: RpcAccount): BankPrice;
11
+ export declare function safeGetMarginfiBankPrice(bank: Bank | null, type?: PriceType, bias?: PriceBias): number | undefined;
12
+ export declare function getMarginfiBankPrice(umi: Umi, bank: Bank, type?: PriceType, bias?: PriceBias): Promise<number>;
13
+ export {};
14
+ //# sourceMappingURL=prices.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prices.d.ts","sourceRoot":"","sources":["../../../src/utils/marginfi/prices.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,UAAU,EACV,GAAG,EAEJ,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,IAAI,EAAe,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE3E,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAW5C,UAAU,SAAS;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;CACzB;AAeD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,UAAU,EACrB,KAAK,EAAE,UAAU,GAChB,SAAS,CAsDX;AAiBD,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,IAAI,GAAG,IAAI,EACjB,IAAI,CAAC,EAAE,SAAS,EAChB,IAAI,CAAC,EAAE,SAAS,sBAIjB;AAED,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,IAAI,EACV,IAAI,CAAC,EAAE,SAAS,EAChB,IAAI,CAAC,EAAE,SAAS,GACf,OAAO,CAAC,MAAM,CAAC,CAkCjB"}