@haven-fi/solauto-sdk 1.0.625 → 1.0.626

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 (27) hide show
  1. package/dist/constants/marginfiAccounts.d.ts +9 -4
  2. package/dist/constants/marginfiAccounts.d.ts.map +1 -1
  3. package/dist/constants/marginfiAccounts.js +58 -6
  4. package/dist/services/flashLoans/marginfiFlProvider.d.ts.map +1 -1
  5. package/dist/services/flashLoans/marginfiFlProvider.js +4 -3
  6. package/dist/services/solauto/solautoClient.d.ts.map +1 -1
  7. package/dist/services/solauto/solautoClient.js +1 -0
  8. package/dist/services/solauto/solautoMarginfiClient.d.ts +2 -1
  9. package/dist/services/solauto/solautoMarginfiClient.d.ts.map +1 -1
  10. package/dist/services/solauto/solautoMarginfiClient.js +11 -8
  11. package/dist/solautoPosition/marginfiSolautoPositionEx.d.ts.map +1 -1
  12. package/dist/solautoPosition/marginfiSolautoPositionEx.js +5 -4
  13. package/dist/solautoPosition/solautoPositionEx.d.ts +3 -1
  14. package/dist/solautoPosition/solautoPositionEx.d.ts.map +1 -1
  15. package/dist/solautoPosition/solautoPositionEx.js +11 -4
  16. package/dist/utils/marginfiUtils.d.ts +6 -1
  17. package/dist/utils/marginfiUtils.d.ts.map +1 -1
  18. package/dist/utils/marginfiUtils.js +35 -10
  19. package/local/updateMarginfiLUT.ts +11 -14
  20. package/package.json +1 -1
  21. package/src/constants/marginfiAccounts.ts +75 -6
  22. package/src/services/flashLoans/marginfiFlProvider.ts +6 -4
  23. package/src/services/solauto/solautoClient.ts +1 -0
  24. package/src/services/solauto/solautoMarginfiClient.ts +13 -15
  25. package/src/solautoPosition/marginfiSolautoPositionEx.ts +6 -6
  26. package/src/solautoPosition/solautoPositionEx.ts +16 -5
  27. package/src/utils/marginfiUtils.ts +51 -16
@@ -1,13 +1,18 @@
1
1
  import { PublicKey } from "@solana/web3.js";
2
2
  import { MarginfiAssetAccounts } from "../types/accounts";
3
+ import { ProgramEnv } from "../types";
3
4
  export declare const MARGINFI_PROD_PROGRAM: PublicKey;
4
5
  export declare const MARGINFI_STAGING_PROGRAM: PublicKey;
5
- export declare const DEFAULT_MARGINFI_GROUP = "4qp6Fx6tnZkY5Wropq9wUYgtFxXKwE6viZxFHg3rdAG8";
6
- export declare const MARGINFI_ACCOUNTS: {
6
+ export type MarginfiAccountsMap = {
7
7
  [group: string]: {
8
8
  [token: string]: MarginfiAssetAccounts;
9
9
  };
10
10
  };
11
- export declare const MARGINFI_ACCOUNTS_LOOKUP_TABLE = "GAjmWmBPcH5Gxbiykasydj6RsCEaCLyHEvK6kHdFigc6";
12
- export declare const MARGINFI_STAGING_ACCOUNTS_LOOKUP_TABLE = "EoEVYjz3MnsX6fKyxrwJkRhzMCHKjj6dvnjTCHoZLMc7";
11
+ export interface MarginfiProgramAccounts {
12
+ program: PublicKey;
13
+ defaultGroup: PublicKey;
14
+ lookupTable: PublicKey;
15
+ bankAccounts: MarginfiAccountsMap;
16
+ }
17
+ export declare function getMarginfiAccounts(programEnv?: ProgramEnv, marginfiGroup?: PublicKey): MarginfiProgramAccounts;
13
18
  //# sourceMappingURL=marginfiAccounts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"marginfiAccounts.d.ts","sourceRoot":"","sources":["../../src/constants/marginfiAccounts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAG1D,eAAO,MAAM,qBAAqB,WAEjC,CAAC;AACF,eAAO,MAAM,wBAAwB,WAEpC,CAAC;AAEF,eAAO,MAAM,sBAAsB,iDACa,CAAC;AAIjD,eAAO,MAAM,iBAAiB,EAAE;IAC9B,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,CAAC,KAAK,EAAE,MAAM,GAAG,qBAAqB,CAAA;KAAE,CAAC;CA+K7D,CAAC;AAEF,eAAO,MAAM,8BAA8B,iDACK,CAAC;AAEjD,eAAO,MAAM,sCAAsC,iDACH,CAAC"}
1
+ {"version":3,"file":"marginfiAccounts.d.ts","sourceRoot":"","sources":["../../src/constants/marginfiAccounts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,eAAO,MAAM,qBAAqB,WAEjC,CAAC;AACF,eAAO,MAAM,wBAAwB,WAEpC,CAAC;AAUF,MAAM,MAAM,mBAAmB,GAAG;IAChC,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,CAAC,KAAK,EAAE,MAAM,GAAG,qBAAqB,CAAA;KAAE,CAAC;CAC7D,CAAC;AA+MF,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,SAAS,CAAC;IACnB,YAAY,EAAE,SAAS,CAAC;IACxB,WAAW,EAAE,SAAS,CAAC;IACvB,YAAY,EAAE,mBAAmB,CAAC;CACnC;AAED,wBAAgB,mBAAmB,CACjC,UAAU,CAAC,EAAE,UAAU,EACvB,aAAa,CAAC,EAAE,SAAS,GACxB,uBAAuB,CA4BzB"}
@@ -23,17 +23,41 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.MARGINFI_STAGING_ACCOUNTS_LOOKUP_TABLE = exports.MARGINFI_ACCOUNTS_LOOKUP_TABLE = exports.MARGINFI_ACCOUNTS = exports.DEFAULT_MARGINFI_GROUP = exports.MARGINFI_STAGING_PROGRAM = exports.MARGINFI_PROD_PROGRAM = void 0;
26
+ exports.MARGINFI_STAGING_PROGRAM = exports.MARGINFI_PROD_PROGRAM = void 0;
27
+ exports.getMarginfiAccounts = getMarginfiAccounts;
27
28
  const web3_js_1 = require("@solana/web3.js");
28
29
  const spl_token_1 = require("@solana/spl-token");
29
30
  const tokens = __importStar(require("./tokenConstants"));
30
31
  const switchboardConstants_1 = require("./switchboardConstants");
31
32
  exports.MARGINFI_PROD_PROGRAM = new web3_js_1.PublicKey("MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA");
32
33
  exports.MARGINFI_STAGING_PROGRAM = new web3_js_1.PublicKey("stag8sTKds2h4KzjUw3zKTsxbqvT4XKHdaR9X9E6Rct");
33
- exports.DEFAULT_MARGINFI_GROUP = "4qp6Fx6tnZkY5Wropq9wUYgtFxXKwE6viZxFHg3rdAG8";
34
+ const PROD_DEFAULT_MARGINFI_GROUP = "4qp6Fx6tnZkY5Wropq9wUYgtFxXKwE6viZxFHg3rdAG8";
35
+ const STAGING_DEFAULT_MARGINFI_GROUP = "FCPfpHA69EbS8f9KKSreTRkXbzFpunsKuYf5qNmnJjpo";
34
36
  const USDC_PRICE_ORACLE = "Dpw1EAVrSB1ibxiDQyTAW6Zip3J4Btk2x4SgApQCeFbX";
35
- exports.MARGINFI_ACCOUNTS = {
36
- [exports.DEFAULT_MARGINFI_GROUP.toString()]: {
37
+ const MARGINFI_STAGING_ACCOUNTS = {
38
+ [STAGING_DEFAULT_MARGINFI_GROUP]: {
39
+ [spl_token_1.NATIVE_MINT.toString()]: {
40
+ bank: "3evdJSa25nsUiZzEUzd92UNa13TPRJrje1dRyiQP5Lhp",
41
+ liquidityVault: "FVXESa7wCd1tf3o9LGroBc3Ym8Gpcq1HdsLek6oo7Ykv",
42
+ vaultAuthority: "DuYk1WGq8UsjW5ThLtaehFLrnJeupTjtF7TaPzja9LBQ",
43
+ priceOracle: "7UVimffxr9ow1uXYxsr4LHAcV58mLzhmwaeKvJ1pjLiE",
44
+ },
45
+ [tokens.USDC]: {
46
+ bank: "Ek5JSFJFD8QgXM6rPDCzf31XhDp1q3xezaWYSkJWqbqc",
47
+ liquidityVault: "6n7xXMni5WJKUMb4Vm5Zis6UaUtGF5xEGmagZNVWWoKB",
48
+ vaultAuthority: "9mXNyA5yS4WSTpYUa5gi3yBrSJWWM7XNPNDWRzWGjdVe",
49
+ priceOracle: USDC_PRICE_ORACLE,
50
+ },
51
+ [tokens.USDT]: {
52
+ bank: "4WFCsVXwfnQvZG52VvPwae7CtL13PUFVWdjkw5YCRBo6",
53
+ liquidityVault: "BFSyniKfXU9rHqUvHLKeZMivQsAKWTE7HZ1fW6vZcvJp",
54
+ vaultAuthority: "Fgxe3SUMzcNuLtT9Xkv8QhhWXCmu4VxynzUMwCF4HvJd",
55
+ priceOracle: "HT2PLQBcG5EiCcNSaMHAjSgd9F98ecpATbk4Sk5oYuM",
56
+ },
57
+ },
58
+ };
59
+ const MARGINFI_PROD_ACCOUNTS = {
60
+ [PROD_DEFAULT_MARGINFI_GROUP.toString()]: {
37
61
  [spl_token_1.NATIVE_MINT.toString()]: {
38
62
  bank: "CCKtUs6Cgwo4aaQUmBPmyoApH2gUDErxNZCAntD6LYGh",
39
63
  liquidityVault: "2eicbpitfJXDwqCuFAmPgDP7t2oUotnAzbGzRKLMgSLe",
@@ -206,5 +230,33 @@ exports.MARGINFI_ACCOUNTS = {
206
230
  },
207
231
  },
208
232
  };
209
- exports.MARGINFI_ACCOUNTS_LOOKUP_TABLE = "GAjmWmBPcH5Gxbiykasydj6RsCEaCLyHEvK6kHdFigc6";
210
- exports.MARGINFI_STAGING_ACCOUNTS_LOOKUP_TABLE = "EoEVYjz3MnsX6fKyxrwJkRhzMCHKjj6dvnjTCHoZLMc7";
233
+ const MARGINFI_PROD_ACCOUNTS_LOOKUP_TABLE = "GAjmWmBPcH5Gxbiykasydj6RsCEaCLyHEvK6kHdFigc6";
234
+ const MARGINFI_STAGING_ACCOUNTS_LOOKUP_TABLE = "EoEVYjz3MnsX6fKyxrwJkRhzMCHKjj6dvnjTCHoZLMc7";
235
+ function getMarginfiAccounts(programEnv, marginfiGroup) {
236
+ if (programEnv === undefined) {
237
+ if (Boolean(marginfiGroup)) {
238
+ programEnv = Object.keys(MARGINFI_PROD_ACCOUNTS).includes(marginfiGroup.toString())
239
+ ? "Prod"
240
+ : "Staging";
241
+ }
242
+ else {
243
+ programEnv = "Prod";
244
+ }
245
+ }
246
+ if (programEnv === "Prod") {
247
+ return {
248
+ program: exports.MARGINFI_PROD_PROGRAM,
249
+ defaultGroup: new web3_js_1.PublicKey(PROD_DEFAULT_MARGINFI_GROUP),
250
+ lookupTable: new web3_js_1.PublicKey(MARGINFI_PROD_ACCOUNTS_LOOKUP_TABLE),
251
+ bankAccounts: MARGINFI_PROD_ACCOUNTS,
252
+ };
253
+ }
254
+ else {
255
+ return {
256
+ program: exports.MARGINFI_STAGING_PROGRAM,
257
+ defaultGroup: new web3_js_1.PublicKey(STAGING_DEFAULT_MARGINFI_GROUP),
258
+ lookupTable: new web3_js_1.PublicKey(MARGINFI_STAGING_ACCOUNTS_LOOKUP_TABLE),
259
+ bankAccounts: MARGINFI_STAGING_ACCOUNTS,
260
+ };
261
+ }
262
+ }
@@ -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;AAelD,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;IACvC,OAAO,CAAC,iBAAiB,CAAe;IACxC,OAAO,CAAC,eAAe,CAAe;IAEhC,UAAU;YAiBF,iBAAiB;IA2C/B,OAAO,CAAC,sBAAsB;IA0CxB,sBAAsB,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAyC3D,gBAAgB,IAAI,SAAS,EAAE;IAY/B,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,WAAW;IAMnB,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;IAoCrB,UAAU,CAAC,SAAS,EAAE,gBAAgB,GAAG,kBAAkB;IA2E3D,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;AAelD,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;IACvC,OAAO,CAAC,iBAAiB,CAAe;IACxC,OAAO,CAAC,eAAe,CAAe;IAEhC,UAAU;YAiBF,iBAAiB;IA6C/B,OAAO,CAAC,sBAAsB;IA0CxB,sBAAsB,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAyC3D,gBAAgB,IAAI,SAAS,EAAE;IAY/B,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,WAAW;IAMnB,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;IAoCrB,UAAU,CAAC,SAAS,EAAE,gBAAgB,GAAG,kBAAkB;IA2E3D,YAAY,CACV,eAAe,EAAE,SAAS,EAC1B,IAAI,EAAE,SAAS,EACf,aAAa,EAAE,SAAS;CAW3B"}
@@ -23,13 +23,14 @@ class MarginfiFlProvider extends flProviderBase_1.FlProviderBase {
23
23
  }
24
24
  }
25
25
  async setAvailableBanks() {
26
+ const bankAccounts = (0, constants_1.getMarginfiAccounts)(this.programEnv).bankAccounts;
26
27
  const availableBanks = [];
27
28
  const checkIfUsable = (group, mint) => {
28
- if (Object.keys(constants_1.MARGINFI_ACCOUNTS[group]).includes(mint.toString())) {
29
- availableBanks.push(constants_1.MARGINFI_ACCOUNTS[group][mint.toString()].bank);
29
+ if (Object.keys(bankAccounts[group]).includes(mint.toString())) {
30
+ availableBanks.push(bankAccounts[group][mint.toString()].bank);
30
31
  }
31
32
  };
32
- for (const group of Object.keys(constants_1.MARGINFI_ACCOUNTS)) {
33
+ for (const group of Object.keys(bankAccounts)) {
33
34
  checkIfUsable(group, this.supplyMint);
34
35
  checkIfUsable(group, this.debtMint);
35
36
  }
@@ -1 +1 @@
1
- {"version":3,"file":"solautoClient.d.ts","sourceRoot":"","sources":["../../../src/services/solauto/solautoClient.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAC;AACxC,OAAO,EAA6B,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EACL,kBAAkB,EAMnB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,gCAAgC,EAEhC,sBAAsB,EAGvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAML,cAAc,EACf,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAEL,iBAAiB,EAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,MAAM,WAAW,iBAAkB,SAAQ,wBAAwB;IACjE,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,aAAa,CAAC,EAAE,SAAS,CAAC;CAC3B;AAED,8BAAsB,aAAc,SAAQ,oBAAoB;IACvD,eAAe,EAAG,eAAe,CAAC;IAClC,KAAK,EAAG,UAAU,CAAC;IAEnB,SAAS,EAAG,SAAS,CAAC;IAEtB,UAAU,EAAG,MAAM,CAAC;IACpB,WAAW,EAAG,OAAO,CAAC;IACtB,GAAG,EAAG,iBAAiB,CAAC;IAExB,gBAAgB,EAAG,SAAS,CAAC;IAC7B,cAAc,EAAG,SAAS,CAAC;IAE3B,cAAc,EAAG,SAAS,CAAC;IAC3B,YAAY,EAAG,SAAS,CAAC;IAEzB,mBAAmB,EAAG,SAAS,CAAC;IAChC,iBAAiB,EAAG,SAAS,CAAC;IAE9B,mBAAmB,CAAC,EAAE,SAAS,CAAC;IAEhC,UAAU,EAAG,oBAAoB,CAAC;IAClC,cAAc,EAAE,cAAc,CAAwB;IAE7D,OAAO,CAAC,mBAAmB,CAAqB;IAChD,OAAO,CAAC,iBAAiB,CAAqB;IAExC,UAAU,CAAC,IAAI,EAAE,iBAAiB;IAmFxC,kBAAkB,IAAI,SAAS,GAAG,SAAS;IAO3C,gBAAgB,IAAI,SAAS,GAAG,SAAS;IAOnC,kBAAkB,CAAC,OAAO,CAAC,EAAE,OAAO;IAkB1C,mBAAmB,IAAI,MAAM,EAAE;IAS/B,gBAAgB,IAAI,SAAS,EAAE;IAoBzB,iCAAiC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAUzD,iBAAiB,IAAI,OAAO,CAC9B;QACE,EAAE,EAAE,kBAAkB,CAAC;QACvB,GAAG,EAAE,OAAO,CAAC;QACb,aAAa,EAAE,SAAS,EAAE,CAAC;KAC5B,GACD,SAAS,CACZ;IA4DK,cAAc,IAAI,OAAO,CAAC;QAC9B,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IAgBF,cAAc,CACZ,QAAQ,CAAC,EAAE,gCAAgC,EAC3C,GAAG,CAAC,EAAE,kBAAkB,GACvB,kBAAkB;IA0BrB,gBAAgB,CAAC,IAAI,EAAE,sBAAsB,GAAG,kBAAkB;IAsDlE,QAAQ,CAAC,eAAe,IAAI,kBAAkB;IAE9C,WAAW,IAAI,kBAAkB;IAgCjC,QAAQ,CAAC,SAAS,IAAI,kBAAkB;IAExC,qBAAqB,CAAC,IAAI,EAAE,iBAAiB,GAAG,kBAAkB;IAsFlE,QAAQ,CAAC,WAAW,CAClB,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE,gBAAgB,GACrB,kBAAkB;CACtB"}
1
+ {"version":3,"file":"solautoClient.d.ts","sourceRoot":"","sources":["../../../src/services/solauto/solautoClient.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAC;AACxC,OAAO,EAA6B,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EACL,kBAAkB,EAMnB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,gCAAgC,EAEhC,sBAAsB,EAGvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAML,cAAc,EACf,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAEL,iBAAiB,EAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,MAAM,WAAW,iBAAkB,SAAQ,wBAAwB;IACjE,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,aAAa,CAAC,EAAE,SAAS,CAAC;CAC3B;AAED,8BAAsB,aAAc,SAAQ,oBAAoB;IACvD,eAAe,EAAG,eAAe,CAAC;IAClC,KAAK,EAAG,UAAU,CAAC;IAEnB,SAAS,EAAG,SAAS,CAAC;IAEtB,UAAU,EAAG,MAAM,CAAC;IACpB,WAAW,EAAG,OAAO,CAAC;IACtB,GAAG,EAAG,iBAAiB,CAAC;IAExB,gBAAgB,EAAG,SAAS,CAAC;IAC7B,cAAc,EAAG,SAAS,CAAC;IAE3B,cAAc,EAAG,SAAS,CAAC;IAC3B,YAAY,EAAG,SAAS,CAAC;IAEzB,mBAAmB,EAAG,SAAS,CAAC;IAChC,iBAAiB,EAAG,SAAS,CAAC;IAE9B,mBAAmB,CAAC,EAAE,SAAS,CAAC;IAEhC,UAAU,EAAG,oBAAoB,CAAC;IAClC,cAAc,EAAE,cAAc,CAAwB;IAE7D,OAAO,CAAC,mBAAmB,CAAqB;IAChD,OAAO,CAAC,iBAAiB,CAAqB;IAExC,UAAU,CAAC,IAAI,EAAE,iBAAiB;IAoFxC,kBAAkB,IAAI,SAAS,GAAG,SAAS;IAO3C,gBAAgB,IAAI,SAAS,GAAG,SAAS;IAOnC,kBAAkB,CAAC,OAAO,CAAC,EAAE,OAAO;IAkB1C,mBAAmB,IAAI,MAAM,EAAE;IAS/B,gBAAgB,IAAI,SAAS,EAAE;IAoBzB,iCAAiC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAUzD,iBAAiB,IAAI,OAAO,CAC9B;QACE,EAAE,EAAE,kBAAkB,CAAC;QACvB,GAAG,EAAE,OAAO,CAAC;QACb,aAAa,EAAE,SAAS,EAAE,CAAC;KAC5B,GACD,SAAS,CACZ;IA4DK,cAAc,IAAI,OAAO,CAAC;QAC9B,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IAgBF,cAAc,CACZ,QAAQ,CAAC,EAAE,gCAAgC,EAC3C,GAAG,CAAC,EAAE,kBAAkB,GACvB,kBAAkB;IA0BrB,gBAAgB,CAAC,IAAI,EAAE,sBAAsB,GAAG,kBAAkB;IAsDlE,QAAQ,CAAC,eAAe,IAAI,kBAAkB;IAE9C,WAAW,IAAI,kBAAkB;IAgCjC,QAAQ,CAAC,SAAS,IAAI,kBAAkB;IAExC,qBAAqB,CAAC,IAAI,EAAE,iBAAiB,GAAG,kBAAkB;IAsFlE,QAAQ,CAAC,WAAW,CAClB,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE,gBAAgB,GACrB,kBAAkB;CACtB"}
@@ -31,6 +31,7 @@ class SolautoClient extends referralStateManager_1.ReferralStateManager {
31
31
  lendingPool: args.lendingPool,
32
32
  lpUserAccount: args.lpUserAccount,
33
33
  lendingPlatform: this.lendingPlatform,
34
+ lpEnv: this.lpEnv,
34
35
  }, this.contextUpdates);
35
36
  this.positionSupplyTa = (0, utils_1.getTokenAccount)(this.pos.publicKey, this.pos.supplyMint());
36
37
  this.signerSupplyTa = (0, utils_1.getTokenAccount)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.signer.publicKey), this.pos.supplyMint());
@@ -1,11 +1,12 @@
1
1
  import { PublicKey } from "@solana/web3.js";
2
2
  import { Signer, TransactionBuilder } from "@metaplex-foundation/umi";
3
3
  import { MarginfiAssetAccounts, RebalanceDetails } from "../../types";
4
+ import { MarginfiProgramAccounts } from "../../constants";
4
5
  import { DCASettingsInpArgs, LendingPlatform, RebalanceStep, SolautoActionArgs, SolautoSettingsParametersInpArgs } from "../../generated";
5
6
  import { SolautoClient, SolautoClientArgs } from "./solautoClient";
6
7
  export declare class SolautoMarginfiClient extends SolautoClient {
7
8
  lendingPlatform: LendingPlatform;
8
- marginfiProgram: PublicKey;
9
+ mfiAccounts: MarginfiProgramAccounts;
9
10
  marginfiAccount: PublicKey | Signer;
10
11
  marginfiAccountPk: PublicKey;
11
12
  marginfiGroup: 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,EAInB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAKtE,OAAO,EACL,kBAAkB,EAClB,eAAe,EAGf,aAAa,EACb,iBAAiB,EAEjB,gCAAgC,EAOjC,MAAM,iBAAiB,CAAC;AAezB,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEnE,qBAAa,qBAAsB,SAAQ,aAAa;IAC/C,eAAe,kBAA4B;IAE3C,eAAe,EAAG,SAAS,CAAC;IAE5B,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;IAE7B,UAAU,CAAC,IAAI,EAAE,iBAAiB;IA0ExC,mBAAmB,IAAI,MAAM,EAAE;IAI/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,IAAI,kBAAkB;IAc/B,qBAAqB,CAAC,IAAI,EAAE,iBAAiB,GAAG,kBAAkB;IAUlE,OAAO,CAAC,6BAA6B;IAmErC,OAAO,CAAC,oCAAoC;IA0D5C,WAAW,CACT,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE,gBAAgB,GACrB,kBAAkB;CAiGtB"}
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,EAInB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAuB,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EACL,kBAAkB,EAClB,eAAe,EAGf,aAAa,EACb,iBAAiB,EAEjB,gCAAgC,EAOjC,MAAM,iBAAiB,CAAC;AAezB,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEnE,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,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;IAwExC,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,IAAI,kBAAkB;IAc/B,qBAAqB,CAAC,IAAI,EAAE,iBAAiB,GAAG,kBAAkB;IAUlE,OAAO,CAAC,6BAA6B;IAmErC,OAAO,CAAC,oCAAoC;IA0D5C,WAAW,CACT,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE,gBAAgB,GACrB,kBAAkB;CAiGtB"}
@@ -16,7 +16,7 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
16
16
  }
17
17
  async initialize(args) {
18
18
  await super.initialize(args);
19
- this.marginfiProgram = (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.umi.programs.get("marginfi").publicKey);
19
+ this.mfiAccounts = (0, constants_1.getMarginfiAccounts)(this.lpEnv);
20
20
  this.marginfiGroup = await this.pos.lendingPool();
21
21
  if (this.selfManaged) {
22
22
  this.marginfiAccount =
@@ -46,9 +46,9 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
46
46
  this.otherSigners.push(this.marginfiAccount);
47
47
  }
48
48
  this.marginfiSupplyAccounts =
49
- constants_1.MARGINFI_ACCOUNTS[this.marginfiGroup.toString()][this.pos.supplyMint().toString()];
49
+ this.mfiAccounts.bankAccounts[this.marginfiGroup.toString()][this.pos.supplyMint().toString()];
50
50
  this.marginfiDebtAccounts =
51
- constants_1.MARGINFI_ACCOUNTS[this.marginfiGroup.toString()][this.pos.debtMint().toString()];
51
+ this.mfiAccounts.bankAccounts[this.marginfiGroup.toString()][this.pos.debtMint().toString()];
52
52
  // TODO: Don't dynamically pull oracle from bank until Marginfi sorts out their price oracle issues.
53
53
  // const [supplyBank, debtBank] = await safeFetchAllBank(this.umi, [
54
54
  // publicKey(this.marginfiSupplyAccounts.bank),
@@ -61,7 +61,10 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
61
61
  this.log("Marginfi account:", this.marginfiAccountPk.toString());
62
62
  }
63
63
  defaultLookupTables() {
64
- return [constants_1.MARGINFI_ACCOUNTS_LOOKUP_TABLE, ...super.defaultLookupTables()];
64
+ return [
65
+ this.mfiAccounts.lookupTable.toString(),
66
+ ...super.defaultLookupTables(),
67
+ ];
65
68
  }
66
69
  lutAccountsToAdd() {
67
70
  return [...super.lutAccountsToAdd(), this.marginfiAccountPk];
@@ -86,7 +89,7 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
86
89
  }
87
90
  return (0, generated_1.marginfiOpenPosition)(this.umi, {
88
91
  signer: this.signer,
89
- marginfiProgram: (0, umi_1.publicKey)(this.marginfiProgram),
92
+ marginfiProgram: (0, umi_1.publicKey)(this.mfiAccounts.program),
90
93
  signerReferralState: (0, umi_1.publicKey)(this.referralState),
91
94
  referredByState: this.referredByState
92
95
  ? (0, umi_1.publicKey)(this.referredByState)
@@ -128,7 +131,7 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
128
131
  refreshIx() {
129
132
  return (0, generated_1.marginfiRefreshData)(this.umi, {
130
133
  signer: this.signer,
131
- marginfiProgram: (0, umi_1.publicKey)(this.marginfiProgram),
134
+ marginfiProgram: (0, umi_1.publicKey)(this.mfiAccounts.program),
132
135
  marginfiGroup: (0, umi_1.publicKey)(this.marginfiGroup),
133
136
  marginfiAccount: (0, umi_1.publicKey)(this.marginfiAccount),
134
137
  supplyBank: (0, umi_1.publicKey)(this.marginfiSupplyAccounts.bank),
@@ -228,7 +231,7 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
228
231
  }
229
232
  return (0, generated_1.marginfiProtocolInteraction)(this.umi, {
230
233
  signer: this.signer,
231
- marginfiProgram: (0, umi_1.publicKey)(this.marginfiProgram),
234
+ marginfiProgram: (0, umi_1.publicKey)(this.mfiAccounts.program),
232
235
  solautoPosition: (0, umi_1.publicKey)(this.pos.publicKey),
233
236
  marginfiGroup: (0, umi_1.publicKey)(this.marginfiGroup),
234
237
  marginfiAccount: (0, umi_1.publicKey)(this.marginfiAccountPk),
@@ -262,7 +265,7 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
262
265
  const addAuthorityTas = this.selfManaged || data.values.tokenBalanceChange !== undefined;
263
266
  return (0, generated_1.marginfiRebalance)(this.umi, {
264
267
  signer: this.signer,
265
- marginfiProgram: (0, umi_1.publicKey)(this.marginfiProgram),
268
+ marginfiProgram: (0, umi_1.publicKey)(this.mfiAccounts.program),
266
269
  ixsSysvar: (0, umi_1.publicKey)(web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY),
267
270
  solautoFeesTa: (0, umi_1.publicKey)(data.values.rebalanceDirection === generated_1.RebalanceDirection.Boost
268
271
  ? this.solautoFeesSupplyTa
@@ -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;AAiB5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,qBAAa,yBAA0B,SAAQ,iBAAiB;IAC9D,OAAO,CAAC,mBAAmB,CAAgC;IAC3D,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,QAAQ,CAAqB;IAExB,WAAW,IAAI,OAAO,CAAC,SAAS,CAAC;IAyBxC,wBAAwB,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAwB3D,wBAAwB,IAAI,MAAM;IAO5B,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;CAyB5C"}
1
+ {"version":3,"file":"marginfiSolautoPositionEx.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/marginfiSolautoPositionEx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAiB5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,qBAAa,yBAA0B,SAAQ,iBAAiB;IAC9D,OAAO,CAAC,mBAAmB,CAAgC;IAC3D,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,QAAQ,CAAqB;IAExB,WAAW,IAAI,OAAO,CAAC,SAAS,CAAC;IAyBxC,wBAAwB,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAuB3D,wBAAwB,IAAI,MAAM;IAO5B,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;CA0B5C"}
@@ -26,15 +26,16 @@ class MarginfiSolautoPositionEx extends solautoPositionEx_1.SolautoPositionEx {
26
26
  this.lp = (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.marginfiAccountData.group);
27
27
  }
28
28
  if (!this.lp) {
29
- this.lp = new web3_js_1.PublicKey(constants_1.DEFAULT_MARGINFI_GROUP);
29
+ this.lp = (0, constants_1.getMarginfiAccounts)(this.lpEnv).defaultGroup;
30
30
  }
31
31
  return this.lp;
32
32
  }
33
33
  async maxLtvAndLiqThresholdBps() {
34
34
  if (!this.supplyBank || !this.debtBank) {
35
35
  const group = (await this.lendingPool()).toString();
36
- const supplyBank = constants_1.MARGINFI_ACCOUNTS[group][this.supplyMint().toString()].bank;
37
- const debtBank = constants_1.MARGINFI_ACCOUNTS[group][this.debtMint().toString()].bank;
36
+ const bankAccounts = (0, constants_1.getMarginfiAccounts)(this.lpEnv).bankAccounts;
37
+ const supplyBank = bankAccounts[group][this.supplyMint().toString()].bank;
38
+ const debtBank = bankAccounts[group][this.debtMint().toString()].bank;
38
39
  [this.supplyBank, this.debtBank] = await (0, marginfi_sdk_1.safeFetchAllBank)(this.umi, [
39
40
  (0, umi_1.publicKey)(supplyBank),
40
41
  (0, umi_1.publicKey)(debtBank),
@@ -56,7 +57,7 @@ class MarginfiSolautoPositionEx extends solautoPositionEx_1.SolautoPositionEx {
56
57
  ? { mint: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.state().supply.mint) }
57
58
  : undefined, useDesignatedMint
58
59
  ? { mint: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.state().debt.mint) }
59
- : undefined, this.contextUpdates);
60
+ : undefined, this.lpEnv, this.contextUpdates);
60
61
  if (resp) {
61
62
  this.supplyBank = resp.supplyBank;
62
63
  this.debtBank = resp.debtBank;
@@ -2,7 +2,7 @@ import { PublicKey } from "@solana/web3.js";
2
2
  import { Umi } from "@metaplex-foundation/umi";
3
3
  import { DCASettings, LendingPlatform, PositionState, SolautoPosition, SolautoSettingsParameters } from "../generated";
4
4
  import { ContextUpdates } from "../utils";
5
- import { RebalanceAction } from "../types";
5
+ import { ProgramEnv, RebalanceAction } from "../types";
6
6
  import { TokenInfo } from "../constants";
7
7
  export interface PositionCustomArgs {
8
8
  lendingPlatform: LendingPlatform;
@@ -10,6 +10,7 @@ export interface PositionCustomArgs {
10
10
  debtMint?: PublicKey;
11
11
  lendingPool?: PublicKey;
12
12
  lpUserAccount?: PublicKey;
13
+ lpEnv?: ProgramEnv;
13
14
  }
14
15
  interface SolautoPositionExData extends Partial<SolautoPosition> {
15
16
  state: PositionState;
@@ -26,6 +27,7 @@ export declare abstract class SolautoPositionEx {
26
27
  publicKey: PublicKey;
27
28
  protected _data: SolautoPositionExData;
28
29
  protected lp?: PublicKey;
30
+ protected lpEnv: ProgramEnv;
29
31
  lpUserAccount?: PublicKey;
30
32
  protected contextUpdates?: ContextUpdates;
31
33
  private readonly firstState;
@@ -1 +1 @@
1
- {"version":3,"file":"solautoPositionEx.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/solautoPositionEx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAK/C,OAAO,EACL,WAAW,EAEX,eAAe,EACf,aAAa,EACb,eAAe,EACf,yBAAyB,EAC1B,MAAM,cAAc,CAAC;AACtB,OAAO,EAQL,cAAc,EAgBf,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAM3C,OAAO,EAAqC,SAAS,EAAE,MAAM,cAAc,CAAC;AAE5E,MAAM,WAAW,kBAAkB;IACjC,eAAe,EAAE,eAAe,CAAC;IACjC,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,aAAa,CAAC,EAAE,SAAS,CAAC;CAC3B;AAED,UAAU,qBAAsB,SAAQ,OAAO,CAAC,eAAe,CAAC;IAC9D,KAAK,EAAE,aAAa,CAAC;CACtB;AAED,UAAU,cAAc;IACtB,GAAG,EAAE,GAAG,CAAC;IACT,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,EAAE,qBAAqB,CAAC;IAC5B,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,8BAAsB,iBAAiB;IAC9B,GAAG,EAAG,GAAG,CAAC;IACV,SAAS,EAAG,SAAS,CAAC;IAC7B,SAAS,CAAC,KAAK,EAAG,qBAAqB,CAAC;IACxC,SAAS,CAAC,EAAE,CAAC,EAAE,SAAS,CAAa;IAC9B,aAAa,CAAC,EAAE,SAAS,CAAa;IAC7C,SAAS,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IAE1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB;gBAEhC,IAAI,EAAE,cAAc;IAgBhC,QAAQ,CAAC,WAAW,IAAI,OAAO,CAAC,SAAS,CAAC;IAE1C,MAAM;IAIN,SAAS;IAMT,UAAU;IAIV,YAAY;IAOZ,IAAI,IAAI,qBAAqB;IAI7B,KAAK,IAAI,aAAa;IAItB,QAAQ,IAAI,yBAAyB,GAAG,SAAS;IAIjD,GAAG,IAAI,WAAW,GAAG,SAAS;IAI9B,UAAU,IAAI,SAAS;IAIvB,cAAc,IAAI,SAAS;IAI3B,QAAQ,IAAI,SAAS;IAIrB,YAAY,IAAI,SAAS;IAIzB,UAAU;IAOV,YAAY;IAIZ,UAAU;IAOV,YAAY;IAMZ,QAAQ;IAIR,WAAW;IAIX,WAAW;IAIX,SAAS;IAIT,SAAS;IAIT,OAAO;IAIP,0BAA0B;IAI1B,6BAA6B;IAI7B,2BAA2B;IAI3B,sBAAsB;IAItB,yBAAyB;IAIzB,QAAQ,CAAC,wBAAwB,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9D,QAAQ,CAAC,wBAAwB,IAAI,MAAM;IAE3C,0BAA0B;IA0B1B,oBAAoB,CAAC,oBAAoB,SAAI,GAAG,eAAe,GAAG,SAAS;IAqB3E,kBAAkB,IAAI,OAAO;IAS7B,SAAS,CAAC,uBAAuB;IAWjC,QAAQ,CAAC,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAExC,uBAAuB;IAiB7B,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;IASvD,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;IASjD,cAAc,CAAC,WAAW,CAAC,EAAE,MAAM;IAUnC,wBAAwB;IAQlB,sBAAsB,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;IAiBrE,iBAAiB,CACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,2BAA2B,CAAC,EAAE,MAAM;IAkBhC,mBAAmB;CAM1B"}
1
+ {"version":3,"file":"solautoPositionEx.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/solautoPositionEx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAK/C,OAAO,EACL,WAAW,EAEX,eAAe,EACf,aAAa,EACb,eAAe,EACf,yBAAyB,EAC1B,MAAM,cAAc,CAAC;AACtB,OAAO,EAQL,cAAc,EAgBf,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAMvD,OAAO,EAAqC,SAAS,EAAE,MAAM,cAAc,CAAC;AAE5E,MAAM,WAAW,kBAAkB;IACjC,eAAe,EAAE,eAAe,CAAC;IACjC,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAED,UAAU,qBAAsB,SAAQ,OAAO,CAAC,eAAe,CAAC;IAC9D,KAAK,EAAE,aAAa,CAAC;CACtB;AAED,UAAU,cAAc;IACtB,GAAG,EAAE,GAAG,CAAC;IACT,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,EAAE,qBAAqB,CAAC;IAC5B,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,8BAAsB,iBAAiB;IAC9B,GAAG,EAAG,GAAG,CAAC;IACV,SAAS,EAAG,SAAS,CAAC;IAC7B,SAAS,CAAC,KAAK,EAAG,qBAAqB,CAAC;IACxC,SAAS,CAAC,EAAE,CAAC,EAAE,SAAS,CAAa;IACrC,SAAS,CAAC,KAAK,EAAG,UAAU,CAAC;IACtB,aAAa,CAAC,EAAE,SAAS,CAAa;IAC7C,SAAS,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IAE1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB;gBAEhC,IAAI,EAAE,cAAc;IAiBhC,QAAQ,CAAC,WAAW,IAAI,OAAO,CAAC,SAAS,CAAC;IAE1C,MAAM;IAIN,SAAS;IAMT,UAAU;IAIV,YAAY;IAOZ,IAAI,IAAI,qBAAqB;IAI7B,KAAK,IAAI,aAAa;IAItB,QAAQ,IAAI,yBAAyB,GAAG,SAAS;IAIjD,GAAG,IAAI,WAAW,GAAG,SAAS;IAI9B,UAAU,IAAI,SAAS;IAIvB,cAAc,IAAI,SAAS;IAI3B,QAAQ,IAAI,SAAS;IAIrB,YAAY,IAAI,SAAS;IAIzB,UAAU;IAOV,YAAY;IAIZ,UAAU;IAOV,YAAY;IAMZ,QAAQ;IAIR,WAAW;IAIX,WAAW;IAIX,SAAS;IAOT,SAAS;IAIT,OAAO;IAOP,0BAA0B;IAI1B,6BAA6B;IAI7B,2BAA2B;IAM3B,sBAAsB;IAItB,yBAAyB;IAIzB,QAAQ,CAAC,wBAAwB,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9D,QAAQ,CAAC,wBAAwB,IAAI,MAAM;IAE3C,0BAA0B;IA0B1B,oBAAoB,CAAC,oBAAoB,SAAI,GAAG,eAAe,GAAG,SAAS;IAqB3E,kBAAkB,IAAI,OAAO;IAS7B,SAAS,CAAC,uBAAuB;IAWjC,QAAQ,CAAC,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAExC,uBAAuB;IAiB7B,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;IASvD,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;IASjD,cAAc,CAAC,WAAW,CAAC,EAAE,MAAM;IAUnC,wBAAwB;IAQlB,sBAAsB,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;IAiBrE,iBAAiB,CACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,2BAA2B,CAAC,EAAE,MAAM;IAkBhC,mBAAmB;CAM1B"}
@@ -19,6 +19,7 @@ class SolautoPositionEx {
19
19
  (args.data.position
20
20
  ? (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(args.data.position.protocolUserAccount)
21
21
  : undefined);
22
+ this.lpEnv = args.customArgs?.lpEnv ?? "Prod";
22
23
  this._data = args.data;
23
24
  this.firstState = { ...args.data.state };
24
25
  }
@@ -82,13 +83,19 @@ class SolautoPositionEx {
82
83
  return (0, utils_1.calcTotalSupply)(this.state());
83
84
  }
84
85
  supplyUsd() {
85
- return (0, utils_1.calcSupplyUsd)(this.state());
86
+ const supplyPrice = (0, utils_1.safeGetPrice)(this.supplyMint());
87
+ return supplyPrice
88
+ ? (0, utils_1.calcTotalSupply)(this.state()) * supplyPrice
89
+ : (0, utils_1.calcSupplyUsd)(this.state());
86
90
  }
87
91
  totalDebt() {
88
92
  return (0, utils_1.calcTotalDebt)(this.state());
89
93
  }
90
94
  debtUsd() {
91
- return (0, utils_1.calcDebtUsd)(this.state());
95
+ const debtPrice = (0, utils_1.safeGetPrice)(this.debtMint());
96
+ return debtPrice
97
+ ? (0, utils_1.calcTotalDebt)(this.state()) * debtPrice
98
+ : (0, utils_1.calcDebtUsd)(this.state());
92
99
  }
93
100
  supplyLiquidityDepositable() {
94
101
  return (0, utils_1.supplyLiquidityDepositable)(this.state());
@@ -97,7 +104,7 @@ class SolautoPositionEx {
97
104
  return (0, utils_1.supplyLiquidityUsdDepositable)(this.state());
98
105
  }
99
106
  supplyLiquidityUsdAvailable() {
100
- return this.supplyLiquidityAvailable() * ((0, utils_1.safeGetPrice)(this.supplyMint()) ?? 0);
107
+ return (this.supplyLiquidityAvailable() * ((0, utils_1.safeGetPrice)(this.supplyMint()) ?? 0));
101
108
  }
102
109
  debtLiquidityAvailable() {
103
110
  return (0, utils_1.debtLiquidityAvailable)(this.state());
@@ -121,7 +128,7 @@ class SolautoPositionEx {
121
128
  return true;
122
129
  }
123
130
  eligibleForRebalance(bpsDistanceThreshold = 0) {
124
- if (!this.settings() || !(0, utils_1.calcSupplyUsd)(this.state())) {
131
+ if (!this.settings() || !this.supplyUsd()) {
125
132
  return undefined;
126
133
  }
127
134
  if (this.state().liqUtilizationRateBps - this.boostFromBps() <=
@@ -8,6 +8,11 @@ export declare function getMarginfiProgram(env: ProgramEnv): PublicKey;
8
8
  export declare function isMarginfiProgram(programId: PublicKey): boolean;
9
9
  export declare function createDynamicMarginfiProgram(env?: ProgramEnv): Program;
10
10
  export declare function umiWithMarginfiProgram(umi: Umi, marginfiEnv?: ProgramEnv): Umi;
11
+ export declare function fetchBankAddresses(umi: Umi, bankPk: PublicKey): Promise<{
12
+ bank: PublicKey;
13
+ liquidityVault: PublicKey;
14
+ vaultAuthority: PublicKey | undefined;
15
+ }>;
11
16
  interface AllMarginfiAssetAccounts extends MarginfiAssetAccounts {
12
17
  mint: PublicKey;
13
18
  }
@@ -39,7 +44,7 @@ type BanksCache = {
39
44
  export declare function getMarginfiAccountPositionState(umi: Umi, lpUserAccount: {
40
45
  pk?: PublicKey;
41
46
  data?: MarginfiAccount | null;
42
- }, marginfiGroup?: PublicKey, supply?: BankSelection, debt?: BankSelection, contextUpdates?: ContextUpdates): Promise<{
47
+ }, marginfiGroup?: PublicKey, supply?: BankSelection, debt?: BankSelection, programEnv?: ProgramEnv, contextUpdates?: ContextUpdates): Promise<{
43
48
  supplyBank: Bank | null;
44
49
  debtBank: Bank | null;
45
50
  state: PositionState;
@@ -1 +1 @@
1
- {"version":3,"file":"marginfiUtils.d.ts","sourceRoot":"","sources":["../../src/utils/marginfiUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"marginfiUtils.d.ts","sourceRoot":"","sources":["../../src/utils/marginfiUtils.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ exports.getMarginfiProgram = getMarginfiProgram;
4
4
  exports.isMarginfiProgram = isMarginfiProgram;
5
5
  exports.createDynamicMarginfiProgram = createDynamicMarginfiProgram;
6
6
  exports.umiWithMarginfiProgram = umiWithMarginfiProgram;
7
+ exports.fetchBankAddresses = fetchBankAddresses;
7
8
  exports.findMarginfiAccounts = findMarginfiAccounts;
8
9
  exports.calcMarginfiMaxLtvAndLiqThresholdBps = calcMarginfiMaxLtvAndLiqThresholdBps;
9
10
  exports.getMarginfiMaxLtvAndLiqThresholdBps = getMarginfiMaxLtvAndLiqThresholdBps;
@@ -22,6 +23,7 @@ const marginfi_sdk_1 = require("../marginfi-sdk");
22
23
  const priceUtils_1 = require("./priceUtils");
23
24
  const generalUtils_1 = require("./generalUtils");
24
25
  const numberUtils_1 = require("./numberUtils");
26
+ const accountUtils_1 = require("./accountUtils");
25
27
  function getMarginfiProgram(env) {
26
28
  return env === "Prod" ? constants_1.MARGINFI_PROD_PROGRAM : constants_1.MARGINFI_STAGING_PROGRAM;
27
29
  }
@@ -51,14 +53,36 @@ function umiWithMarginfiProgram(umi, marginfiEnv) {
51
53
  },
52
54
  });
53
55
  }
56
+ async function fetchBankAddresses(umi, bankPk) {
57
+ const bank = await (0, marginfi_sdk_1.safeFetchBank)(umi, (0, umi_web3js_adapters_1.fromWeb3JsPublicKey)(bankPk));
58
+ const liquidityVault = (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(bank.liquidityVault);
59
+ const vaultAuthority = (await (0, accountUtils_1.getTokenAccountData)(umi, liquidityVault))
60
+ ?.owner;
61
+ return {
62
+ bank: bankPk,
63
+ liquidityVault,
64
+ vaultAuthority,
65
+ };
66
+ }
54
67
  function findMarginfiAccounts(bank) {
55
- for (const group in constants_1.MARGINFI_ACCOUNTS) {
56
- for (const key in constants_1.MARGINFI_ACCOUNTS[group]) {
57
- const account = constants_1.MARGINFI_ACCOUNTS[group][key];
58
- if (account.bank.toString().toLowerCase() === bank.toString().toLowerCase()) {
59
- return { ...account, mint: new web3_js_1.PublicKey(key) };
68
+ const search = (bankAccounts) => {
69
+ for (const group in bankAccounts) {
70
+ for (const key in bankAccounts[group]) {
71
+ const account = bankAccounts[group][key];
72
+ if (account.bank.toString().toLowerCase() ===
73
+ bank.toString().toLowerCase()) {
74
+ return { ...account, mint: new web3_js_1.PublicKey(key) };
75
+ }
60
76
  }
61
77
  }
78
+ };
79
+ let res = search((0, constants_1.getMarginfiAccounts)("Prod").bankAccounts);
80
+ if (res) {
81
+ return res;
82
+ }
83
+ res = search((0, constants_1.getMarginfiAccounts)("Staging").bankAccounts);
84
+ if (res) {
85
+ return res;
62
86
  }
63
87
  throw new Error(`Marginfi accounts not found by the bank: ${bank}`);
64
88
  }
@@ -81,12 +105,13 @@ async function getMarginfiMaxLtvAndLiqThresholdBps(umi, marginfiGroup, supply, d
81
105
  if (!supply.bank && supply.mint.equals(web3_js_1.PublicKey.default)) {
82
106
  return [0, 0];
83
107
  }
108
+ const bankAccounts = (0, constants_1.getMarginfiAccounts)(undefined, marginfiGroup).bankAccounts;
84
109
  if (!supply.bank || supply.bank === null) {
85
- supply.bank = await (0, marginfi_sdk_1.safeFetchBank)(umi, (0, umi_1.publicKey)(constants_1.MARGINFI_ACCOUNTS[marginfiGroup.toString()][supply.mint.toString()].bank), { commitment: "confirmed" });
110
+ supply.bank = await (0, marginfi_sdk_1.safeFetchBank)(umi, (0, umi_1.publicKey)(bankAccounts[marginfiGroup.toString()][supply.mint.toString()].bank), { commitment: "confirmed" });
86
111
  }
87
112
  if ((!debt.bank || debt.bank === null) &&
88
113
  !debt.mint.equals(web3_js_1.PublicKey.default)) {
89
- debt.bank = await (0, marginfi_sdk_1.safeFetchBank)(umi, (0, umi_1.publicKey)(constants_1.MARGINFI_ACCOUNTS[marginfiGroup.toString()][debt.mint.toString()].bank), { commitment: "confirmed" });
114
+ debt.bank = await (0, marginfi_sdk_1.safeFetchBank)(umi, (0, umi_1.publicKey)(bankAccounts[marginfiGroup.toString()][debt.mint.toString()].bank), { commitment: "confirmed" });
90
115
  }
91
116
  if (!supplyPrice) {
92
117
  const [price] = await (0, priceUtils_1.fetchTokenPrices)([
@@ -228,10 +253,10 @@ async function getBank(umi, data, marginfiGroup) {
228
253
  return data?.banksCache && data.mint && marginfiGroup
229
254
  ? data.banksCache[marginfiGroup.toString()][data?.mint?.toString()]
230
255
  : data?.mint && data?.mint !== web3_js_1.PublicKey.default
231
- ? await (0, marginfi_sdk_1.safeFetchBank)(umi, (0, umi_1.publicKey)(constants_1.MARGINFI_ACCOUNTS[marginfiGroup?.toString() ?? ""][data?.mint.toString()].bank), { commitment: "confirmed" })
256
+ ? await (0, marginfi_sdk_1.safeFetchBank)(umi, (0, umi_1.publicKey)((0, constants_1.getMarginfiAccounts)(undefined, marginfiGroup).bankAccounts[marginfiGroup?.toString() ?? ""][data?.mint.toString()].bank), { commitment: "confirmed" })
232
257
  : null;
233
258
  }
234
- async function getMarginfiAccountPositionState(umi, lpUserAccount, marginfiGroup, supply, debt, contextUpdates) {
259
+ async function getMarginfiAccountPositionState(umi, lpUserAccount, marginfiGroup, supply, debt, programEnv, contextUpdates) {
235
260
  let marginfiAccount = lpUserAccount.data ??
236
261
  (lpUserAccount.pk
237
262
  ? await (0, marginfi_sdk_1.safeFetchMarginfiAccount)(umi, (0, umi_1.publicKey)(lpUserAccount.pk), {
@@ -306,7 +331,7 @@ async function getMarginfiAccountPositionState(umi, lpUserAccount, marginfiGroup
306
331
  debtUsage = await getTokenUsage(debtBank, false, 0, contextUpdates?.debtAdjustment);
307
332
  }
308
333
  const supplyPrice = (0, priceUtils_1.safeGetPrice)(supply.mint);
309
- let [maxLtvBps, liqThresholdBps] = await getMarginfiMaxLtvAndLiqThresholdBps(umi, marginfiGroup ?? new web3_js_1.PublicKey(constants_1.DEFAULT_MARGINFI_GROUP), {
334
+ let [maxLtvBps, liqThresholdBps] = await getMarginfiMaxLtvAndLiqThresholdBps(umi, marginfiGroup ?? (0, constants_1.getMarginfiAccounts)(programEnv).defaultGroup, {
310
335
  mint: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(supplyBank.mint),
311
336
  bank: supplyBank,
312
337
  }, {
@@ -1,4 +1,4 @@
1
- import { Keypair, PublicKey } from "@solana/web3.js";
1
+ import { Keypair } from "@solana/web3.js";
2
2
  import {
3
3
  createSignerFromKeypair,
4
4
  publicKey,
@@ -10,22 +10,19 @@ import {
10
10
  toWeb3JsKeypair,
11
11
  } from "@metaplex-foundation/umi-web3js-adapters";
12
12
  import {
13
- MARGINFI_ACCOUNTS_LOOKUP_TABLE,
14
- MARGINFI_ACCOUNTS,
15
- DEFAULT_MARGINFI_GROUP,
16
13
  getEmptyMarginfiAccountsByAuthority,
17
14
  getSolanaRpcConnection,
18
15
  SOLAUTO_MANAGER,
19
16
  marginfiAccountInitialize,
20
17
  LOCAL_IRONFORGE_API_URL,
21
- MARGINFI_PROD_PROGRAM,
18
+ getMarginfiAccounts,
22
19
  } from "../src";
23
20
  import { createAndSendV0Tx, getSecretKey, updateLookupTable } from "./shared";
24
21
 
25
- const LOOKUP_TABLE_ADDRESS = new PublicKey(MARGINFI_ACCOUNTS_LOOKUP_TABLE);
26
- let [, umi] = getSolanaRpcConnection(
27
- LOCAL_IRONFORGE_API_URL
28
- );
22
+ const mfiAccounts = getMarginfiAccounts("Prod");
23
+
24
+ const LOOKUP_TABLE_ADDRESS = mfiAccounts.lookupTable;
25
+ let [, umi] = getSolanaRpcConnection(LOCAL_IRONFORGE_API_URL);
29
26
  umi = umi.use(
30
27
  signerIdentity(
31
28
  createSignerFromKeypair(umi, umi.eddsa.generateKeypair()),
@@ -41,9 +38,9 @@ const solautoManager = createSignerFromKeypair(
41
38
  );
42
39
 
43
40
  async function addBanks() {
44
- for (const group in MARGINFI_ACCOUNTS) {
45
- for (const key in MARGINFI_ACCOUNTS[group]) {
46
- const accounts = MARGINFI_ACCOUNTS[group][key];
41
+ for (const group in mfiAccounts.bankAccounts) {
42
+ for (const key in mfiAccounts.bankAccounts[group]) {
43
+ const accounts = mfiAccounts.bankAccounts[group][key];
47
44
  await updateLookupTable(
48
45
  [
49
46
  group,
@@ -65,7 +62,7 @@ async function addImfiAccounts() {
65
62
  );
66
63
 
67
64
  const iMfiAccountsPerGrp = 2;
68
- for (const group in MARGINFI_ACCOUNTS) {
65
+ for (const group in mfiAccounts.bankAccounts) {
69
66
  const emptyAccs = imfiAccounts.filter((x) => x.group.toString() === group);
70
67
  if (emptyAccs.length >= iMfiAccountsPerGrp) {
71
68
  await updateLookupTable(
@@ -97,7 +94,7 @@ async function addImfiAccounts() {
97
94
  }
98
95
 
99
96
  updateLookupTable(
100
- [DEFAULT_MARGINFI_GROUP, MARGINFI_PROD_PROGRAM.toString()], // TODO
97
+ [mfiAccounts.defaultGroup.toString(), mfiAccounts.program.toString()],
101
98
  LOOKUP_TABLE_ADDRESS
102
99
  );
103
100
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haven-fi/solauto-sdk",
3
- "version": "1.0.625",
3
+ "version": "1.0.626",
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",
@@ -3,6 +3,7 @@ import { NATIVE_MINT } from "@solana/spl-token";
3
3
  import * as tokens from "./tokenConstants";
4
4
  import { MarginfiAssetAccounts } from "../types/accounts";
5
5
  import { SWITCHBOARD_PRICE_FEED_IDS } from "./switchboardConstants";
6
+ import { ProgramEnv } from "../types";
6
7
 
7
8
  export const MARGINFI_PROD_PROGRAM = new PublicKey(
8
9
  "MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA"
@@ -11,15 +12,43 @@ export const MARGINFI_STAGING_PROGRAM = new PublicKey(
11
12
  "stag8sTKds2h4KzjUw3zKTsxbqvT4XKHdaR9X9E6Rct"
12
13
  );
13
14
 
14
- export const DEFAULT_MARGINFI_GROUP =
15
+ const PROD_DEFAULT_MARGINFI_GROUP =
15
16
  "4qp6Fx6tnZkY5Wropq9wUYgtFxXKwE6viZxFHg3rdAG8";
16
17
 
18
+ const STAGING_DEFAULT_MARGINFI_GROUP =
19
+ "FCPfpHA69EbS8f9KKSreTRkXbzFpunsKuYf5qNmnJjpo";
20
+
17
21
  const USDC_PRICE_ORACLE = "Dpw1EAVrSB1ibxiDQyTAW6Zip3J4Btk2x4SgApQCeFbX";
18
22
 
19
- export const MARGINFI_ACCOUNTS: {
23
+ export type MarginfiAccountsMap = {
20
24
  [group: string]: { [token: string]: MarginfiAssetAccounts };
21
- } = {
22
- [DEFAULT_MARGINFI_GROUP.toString()]: {
25
+ };
26
+
27
+ const MARGINFI_STAGING_ACCOUNTS: MarginfiAccountsMap = {
28
+ [STAGING_DEFAULT_MARGINFI_GROUP]: {
29
+ [NATIVE_MINT.toString()]: {
30
+ bank: "3evdJSa25nsUiZzEUzd92UNa13TPRJrje1dRyiQP5Lhp",
31
+ liquidityVault: "FVXESa7wCd1tf3o9LGroBc3Ym8Gpcq1HdsLek6oo7Ykv",
32
+ vaultAuthority: "DuYk1WGq8UsjW5ThLtaehFLrnJeupTjtF7TaPzja9LBQ",
33
+ priceOracle: "7UVimffxr9ow1uXYxsr4LHAcV58mLzhmwaeKvJ1pjLiE",
34
+ },
35
+ [tokens.USDC]: {
36
+ bank: "Ek5JSFJFD8QgXM6rPDCzf31XhDp1q3xezaWYSkJWqbqc",
37
+ liquidityVault: "6n7xXMni5WJKUMb4Vm5Zis6UaUtGF5xEGmagZNVWWoKB",
38
+ vaultAuthority: "9mXNyA5yS4WSTpYUa5gi3yBrSJWWM7XNPNDWRzWGjdVe",
39
+ priceOracle: USDC_PRICE_ORACLE,
40
+ },
41
+ [tokens.USDT]: {
42
+ bank: "4WFCsVXwfnQvZG52VvPwae7CtL13PUFVWdjkw5YCRBo6",
43
+ liquidityVault: "BFSyniKfXU9rHqUvHLKeZMivQsAKWTE7HZ1fW6vZcvJp",
44
+ vaultAuthority: "Fgxe3SUMzcNuLtT9Xkv8QhhWXCmu4VxynzUMwCF4HvJd",
45
+ priceOracle: "HT2PLQBcG5EiCcNSaMHAjSgd9F98ecpATbk4Sk5oYuM",
46
+ },
47
+ },
48
+ };
49
+
50
+ const MARGINFI_PROD_ACCOUNTS: MarginfiAccountsMap = {
51
+ [PROD_DEFAULT_MARGINFI_GROUP.toString()]: {
23
52
  [NATIVE_MINT.toString()]: {
24
53
  bank: "CCKtUs6Cgwo4aaQUmBPmyoApH2gUDErxNZCAntD6LYGh",
25
54
  liquidityVault: "2eicbpitfJXDwqCuFAmPgDP7t2oUotnAzbGzRKLMgSLe",
@@ -194,8 +223,48 @@ export const MARGINFI_ACCOUNTS: {
194
223
  },
195
224
  };
196
225
 
197
- export const MARGINFI_ACCOUNTS_LOOKUP_TABLE =
226
+ const MARGINFI_PROD_ACCOUNTS_LOOKUP_TABLE =
198
227
  "GAjmWmBPcH5Gxbiykasydj6RsCEaCLyHEvK6kHdFigc6";
199
228
 
200
- export const MARGINFI_STAGING_ACCOUNTS_LOOKUP_TABLE =
229
+ const MARGINFI_STAGING_ACCOUNTS_LOOKUP_TABLE =
201
230
  "EoEVYjz3MnsX6fKyxrwJkRhzMCHKjj6dvnjTCHoZLMc7";
231
+
232
+ export interface MarginfiProgramAccounts {
233
+ program: PublicKey;
234
+ defaultGroup: PublicKey;
235
+ lookupTable: PublicKey;
236
+ bankAccounts: MarginfiAccountsMap;
237
+ }
238
+
239
+ export function getMarginfiAccounts(
240
+ programEnv?: ProgramEnv,
241
+ marginfiGroup?: PublicKey
242
+ ): MarginfiProgramAccounts {
243
+ if (programEnv === undefined) {
244
+ if (Boolean(marginfiGroup)) {
245
+ programEnv = Object.keys(MARGINFI_PROD_ACCOUNTS).includes(
246
+ marginfiGroup!.toString()
247
+ )
248
+ ? "Prod"
249
+ : "Staging";
250
+ } else {
251
+ programEnv = "Prod";
252
+ }
253
+ }
254
+
255
+ if (programEnv === "Prod") {
256
+ return {
257
+ program: MARGINFI_PROD_PROGRAM,
258
+ defaultGroup: new PublicKey(PROD_DEFAULT_MARGINFI_GROUP),
259
+ lookupTable: new PublicKey(MARGINFI_PROD_ACCOUNTS_LOOKUP_TABLE),
260
+ bankAccounts: MARGINFI_PROD_ACCOUNTS,
261
+ };
262
+ } else {
263
+ return {
264
+ program: MARGINFI_STAGING_PROGRAM,
265
+ defaultGroup: new PublicKey(STAGING_DEFAULT_MARGINFI_GROUP),
266
+ lookupTable: new PublicKey(MARGINFI_STAGING_ACCOUNTS_LOOKUP_TABLE),
267
+ bankAccounts: MARGINFI_STAGING_ACCOUNTS,
268
+ };
269
+ }
270
+ }
@@ -8,7 +8,7 @@ import {
8
8
  TransactionBuilder,
9
9
  } from "@metaplex-foundation/umi";
10
10
  import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters";
11
- import { MARGINFI_ACCOUNTS } from "../../constants";
11
+ import { getMarginfiAccounts } from "../../constants";
12
12
  import {
13
13
  Bank,
14
14
  lendingAccountBorrow,
@@ -69,14 +69,16 @@ export class MarginfiFlProvider extends FlProviderBase {
69
69
  }
70
70
 
71
71
  private async setAvailableBanks() {
72
+ const bankAccounts = getMarginfiAccounts(this.programEnv).bankAccounts;
73
+
72
74
  const availableBanks: string[] = [];
73
75
  const checkIfUsable = (group: string, mint: PublicKey) => {
74
- if (Object.keys(MARGINFI_ACCOUNTS[group]).includes(mint.toString())) {
75
- availableBanks.push(MARGINFI_ACCOUNTS[group][mint.toString()].bank);
76
+ if (Object.keys(bankAccounts[group]).includes(mint.toString())) {
77
+ availableBanks.push(bankAccounts[group][mint.toString()].bank);
76
78
  }
77
79
  };
78
80
 
79
- for (const group of Object.keys(MARGINFI_ACCOUNTS)) {
81
+ for (const group of Object.keys(bankAccounts)) {
80
82
  checkIfUsable(group, this.supplyMint);
81
83
  checkIfUsable(group, this.debtMint);
82
84
  }
@@ -102,6 +102,7 @@ export abstract class SolautoClient extends ReferralStateManager {
102
102
  lendingPool: args.lendingPool,
103
103
  lpUserAccount: args.lpUserAccount,
104
104
  lendingPlatform: this.lendingPlatform,
105
+ lpEnv: this.lpEnv,
105
106
  },
106
107
  this.contextUpdates
107
108
  );
@@ -8,10 +8,7 @@ import {
8
8
  } from "@metaplex-foundation/umi";
9
9
  import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters";
10
10
  import { MarginfiAssetAccounts, RebalanceDetails } from "../../types";
11
- import {
12
- MARGINFI_ACCOUNTS,
13
- MARGINFI_ACCOUNTS_LOOKUP_TABLE,
14
- } from "../../constants";
11
+ import { getMarginfiAccounts, MarginfiProgramAccounts } from "../../constants";
15
12
  import {
16
13
  DCASettingsInpArgs,
17
14
  LendingPlatform,
@@ -47,7 +44,7 @@ import { SolautoClient, SolautoClientArgs } from "./solautoClient";
47
44
  export class SolautoMarginfiClient extends SolautoClient {
48
45
  public lendingPlatform = LendingPlatform.Marginfi;
49
46
 
50
- public marginfiProgram!: PublicKey;
47
+ public mfiAccounts!: MarginfiProgramAccounts;
51
48
 
52
49
  public marginfiAccount!: PublicKey | Signer;
53
50
  public marginfiAccountPk!: PublicKey;
@@ -62,9 +59,7 @@ export class SolautoMarginfiClient extends SolautoClient {
62
59
  async initialize(args: SolautoClientArgs) {
63
60
  await super.initialize(args);
64
61
 
65
- this.marginfiProgram = toWeb3JsPublicKey(
66
- this.umi.programs.get("marginfi").publicKey
67
- );
62
+ this.mfiAccounts = getMarginfiAccounts(this.lpEnv);
68
63
 
69
64
  this.marginfiGroup = await this.pos.lendingPool();
70
65
 
@@ -110,11 +105,11 @@ export class SolautoMarginfiClient extends SolautoClient {
110
105
  }
111
106
 
112
107
  this.marginfiSupplyAccounts =
113
- MARGINFI_ACCOUNTS[this.marginfiGroup.toString()][
108
+ this.mfiAccounts.bankAccounts[this.marginfiGroup.toString()][
114
109
  this.pos.supplyMint().toString()
115
110
  ]!;
116
111
  this.marginfiDebtAccounts =
117
- MARGINFI_ACCOUNTS[this.marginfiGroup.toString()][
112
+ this.mfiAccounts.bankAccounts[this.marginfiGroup.toString()][
118
113
  this.pos.debtMint().toString()
119
114
  ]!;
120
115
 
@@ -134,7 +129,10 @@ export class SolautoMarginfiClient extends SolautoClient {
134
129
  }
135
130
 
136
131
  defaultLookupTables(): string[] {
137
- return [MARGINFI_ACCOUNTS_LOOKUP_TABLE, ...super.defaultLookupTables()];
132
+ return [
133
+ this.mfiAccounts.lookupTable.toString(),
134
+ ...super.defaultLookupTables(),
135
+ ];
138
136
  }
139
137
 
140
138
  lutAccountsToAdd(): PublicKey[] {
@@ -171,7 +169,7 @@ export class SolautoMarginfiClient extends SolautoClient {
171
169
 
172
170
  return marginfiOpenPosition(this.umi, {
173
171
  signer: this.signer,
174
- marginfiProgram: publicKey(this.marginfiProgram),
172
+ marginfiProgram: publicKey(this.mfiAccounts.program),
175
173
  signerReferralState: publicKey(this.referralState),
176
174
  referredByState: this.referredByState
177
175
  ? publicKey(this.referredByState)
@@ -216,7 +214,7 @@ export class SolautoMarginfiClient extends SolautoClient {
216
214
  refreshIx(): TransactionBuilder {
217
215
  return marginfiRefreshData(this.umi, {
218
216
  signer: this.signer,
219
- marginfiProgram: publicKey(this.marginfiProgram),
217
+ marginfiProgram: publicKey(this.mfiAccounts.program),
220
218
  marginfiGroup: publicKey(this.marginfiGroup),
221
219
  marginfiAccount: publicKey(this.marginfiAccount),
222
220
  supplyBank: publicKey(this.marginfiSupplyAccounts.bank),
@@ -344,7 +342,7 @@ export class SolautoMarginfiClient extends SolautoClient {
344
342
 
345
343
  return marginfiProtocolInteraction(this.umi, {
346
344
  signer: this.signer,
347
- marginfiProgram: publicKey(this.marginfiProgram),
345
+ marginfiProgram: publicKey(this.mfiAccounts.program),
348
346
  solautoPosition: publicKey(this.pos.publicKey),
349
347
  marginfiGroup: publicKey(this.marginfiGroup),
350
348
  marginfiAccount: publicKey(this.marginfiAccountPk),
@@ -395,7 +393,7 @@ export class SolautoMarginfiClient extends SolautoClient {
395
393
 
396
394
  return marginfiRebalance(this.umi, {
397
395
  signer: this.signer,
398
- marginfiProgram: publicKey(this.marginfiProgram),
396
+ marginfiProgram: publicKey(this.mfiAccounts.program),
399
397
  ixsSysvar: publicKey(SYSVAR_INSTRUCTIONS_PUBKEY),
400
398
  solautoFeesTa: publicKey(
401
399
  data.values.rebalanceDirection === RebalanceDirection.Boost
@@ -14,7 +14,7 @@ import {
14
14
  getBankLiquidityAvailableBaseUnit,
15
15
  getMarginfiAccountPositionState,
16
16
  } from "../utils";
17
- import { DEFAULT_MARGINFI_GROUP, MARGINFI_ACCOUNTS } from "../constants";
17
+ import { getMarginfiAccounts } from "../constants";
18
18
  import { SolautoPositionEx } from "./solautoPositionEx";
19
19
 
20
20
  export class MarginfiSolautoPositionEx extends SolautoPositionEx {
@@ -41,7 +41,7 @@ export class MarginfiSolautoPositionEx extends SolautoPositionEx {
41
41
  }
42
42
 
43
43
  if (!this.lp) {
44
- this.lp = new PublicKey(DEFAULT_MARGINFI_GROUP);
44
+ this.lp = getMarginfiAccounts(this.lpEnv).defaultGroup;
45
45
  }
46
46
 
47
47
  return this.lp;
@@ -50,10 +50,9 @@ export class MarginfiSolautoPositionEx extends SolautoPositionEx {
50
50
  async maxLtvAndLiqThresholdBps(): Promise<[number, number]> {
51
51
  if (!this.supplyBank || !this.debtBank) {
52
52
  const group = (await this.lendingPool()).toString();
53
- const supplyBank =
54
- MARGINFI_ACCOUNTS[group][this.supplyMint().toString()].bank;
55
- const debtBank =
56
- MARGINFI_ACCOUNTS[group][this.debtMint().toString()].bank;
53
+ const bankAccounts = getMarginfiAccounts(this.lpEnv).bankAccounts;
54
+ const supplyBank = bankAccounts[group][this.supplyMint().toString()].bank;
55
+ const debtBank = bankAccounts[group][this.debtMint().toString()].bank;
57
56
 
58
57
  [this.supplyBank, this.debtBank] = await safeFetchAllBank(this.umi, [
59
58
  publicKey(supplyBank),
@@ -94,6 +93,7 @@ export class MarginfiSolautoPositionEx extends SolautoPositionEx {
94
93
  useDesignatedMint
95
94
  ? { mint: toWeb3JsPublicKey(this.state().debt.mint) }
96
95
  : undefined,
96
+ this.lpEnv,
97
97
  this.contextUpdates
98
98
  );
99
99
 
@@ -37,7 +37,7 @@ import {
37
37
  tokenInfo,
38
38
  toRoundedUsdValue,
39
39
  } from "../utils";
40
- import { RebalanceAction } from "../types";
40
+ import { ProgramEnv, RebalanceAction } from "../types";
41
41
  import {
42
42
  getDebtAdjustment,
43
43
  getRebalanceValues,
@@ -51,6 +51,7 @@ export interface PositionCustomArgs {
51
51
  debtMint?: PublicKey;
52
52
  lendingPool?: PublicKey;
53
53
  lpUserAccount?: PublicKey;
54
+ lpEnv?: ProgramEnv;
54
55
  }
55
56
 
56
57
  interface SolautoPositionExData extends Partial<SolautoPosition> {
@@ -70,6 +71,7 @@ export abstract class SolautoPositionEx {
70
71
  public publicKey!: PublicKey;
71
72
  protected _data!: SolautoPositionExData;
72
73
  protected lp?: PublicKey = undefined;
74
+ protected lpEnv!: ProgramEnv;
73
75
  public lpUserAccount?: PublicKey = undefined;
74
76
  protected contextUpdates?: ContextUpdates;
75
77
 
@@ -86,6 +88,7 @@ export abstract class SolautoPositionEx {
86
88
  (args.data.position
87
89
  ? toWeb3JsPublicKey(args.data.position!.protocolUserAccount)
88
90
  : undefined);
91
+ this.lpEnv = args.customArgs?.lpEnv ?? "Prod";
89
92
 
90
93
  this._data = args.data;
91
94
  this.firstState = { ...args.data.state };
@@ -183,7 +186,10 @@ export abstract class SolautoPositionEx {
183
186
  }
184
187
 
185
188
  supplyUsd() {
186
- return calcSupplyUsd(this.state());
189
+ const supplyPrice = safeGetPrice(this.supplyMint());
190
+ return supplyPrice
191
+ ? calcTotalSupply(this.state()) * supplyPrice
192
+ : calcSupplyUsd(this.state());
187
193
  }
188
194
 
189
195
  totalDebt() {
@@ -191,7 +197,10 @@ export abstract class SolautoPositionEx {
191
197
  }
192
198
 
193
199
  debtUsd() {
194
- return calcDebtUsd(this.state());
200
+ const debtPrice = safeGetPrice(this.debtMint());
201
+ return debtPrice
202
+ ? calcTotalDebt(this.state()) * debtPrice
203
+ : calcDebtUsd(this.state());
195
204
  }
196
205
 
197
206
  supplyLiquidityDepositable() {
@@ -203,7 +212,9 @@ export abstract class SolautoPositionEx {
203
212
  }
204
213
 
205
214
  supplyLiquidityUsdAvailable() {
206
- return this.supplyLiquidityAvailable() * (safeGetPrice(this.supplyMint()) ?? 0);
215
+ return (
216
+ this.supplyLiquidityAvailable() * (safeGetPrice(this.supplyMint()) ?? 0)
217
+ );
207
218
  }
208
219
 
209
220
  debtLiquidityAvailable() {
@@ -244,7 +255,7 @@ export abstract class SolautoPositionEx {
244
255
  }
245
256
 
246
257
  eligibleForRebalance(bpsDistanceThreshold = 0): RebalanceAction | undefined {
247
- if (!this.settings() || !calcSupplyUsd(this.state())) {
258
+ if (!this.settings() || !this.supplyUsd()) {
248
259
  return undefined;
249
260
  }
250
261
 
@@ -1,14 +1,17 @@
1
1
  import { PublicKey } from "@solana/web3.js";
2
2
  import { Program, publicKey, Umi } from "@metaplex-foundation/umi";
3
- import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters";
3
+ import {
4
+ fromWeb3JsPublicKey,
5
+ toWeb3JsPublicKey,
6
+ } from "@metaplex-foundation/umi-web3js-adapters";
4
7
  import { ProgramEnv, MarginfiAssetAccounts } from "../types";
5
8
  import { PositionState, PositionTokenState } from "../generated";
6
9
  import {
7
- DEFAULT_MARGINFI_GROUP,
8
- MARGINFI_ACCOUNTS,
9
10
  ALL_SUPPORTED_TOKENS,
11
+ getMarginfiAccounts,
10
12
  MARGINFI_PROD_PROGRAM,
11
13
  MARGINFI_STAGING_PROGRAM,
14
+ MarginfiAccountsMap,
12
15
  TOKEN_INFO,
13
16
  USD_DECIMALS,
14
17
  } from "../constants";
@@ -34,6 +37,7 @@ import {
34
37
  toBaseUnit,
35
38
  toBps,
36
39
  } from "./numberUtils";
40
+ import { getTokenAccountData } from "./accountUtils";
37
41
 
38
42
  export function getMarginfiProgram(env: ProgramEnv) {
39
43
  return env === "Prod" ? MARGINFI_PROD_PROGRAM : MARGINFI_STAGING_PROGRAM;
@@ -73,6 +77,18 @@ export function umiWithMarginfiProgram(umi: Umi, marginfiEnv?: ProgramEnv) {
73
77
  });
74
78
  }
75
79
 
80
+ export async function fetchBankAddresses(umi: Umi, bankPk: PublicKey) {
81
+ const bank = await safeFetchBank(umi, fromWeb3JsPublicKey(bankPk));
82
+ const liquidityVault = toWeb3JsPublicKey(bank!.liquidityVault);
83
+ const vaultAuthority = (await getTokenAccountData(umi, liquidityVault))
84
+ ?.owner;
85
+ return {
86
+ bank: bankPk,
87
+ liquidityVault,
88
+ vaultAuthority,
89
+ };
90
+ }
91
+
76
92
  interface AllMarginfiAssetAccounts extends MarginfiAssetAccounts {
77
93
  mint: PublicKey;
78
94
  }
@@ -80,16 +96,29 @@ interface AllMarginfiAssetAccounts extends MarginfiAssetAccounts {
80
96
  export function findMarginfiAccounts(
81
97
  bank: PublicKey
82
98
  ): AllMarginfiAssetAccounts {
83
- for (const group in MARGINFI_ACCOUNTS) {
84
- for (const key in MARGINFI_ACCOUNTS[group]) {
85
- const account = MARGINFI_ACCOUNTS[group][key];
86
- if (
87
- account.bank.toString().toLowerCase() === bank.toString().toLowerCase()
88
- ) {
89
- return { ...account, mint: new PublicKey(key) };
99
+ const search = (bankAccounts: MarginfiAccountsMap) => {
100
+ for (const group in bankAccounts) {
101
+ for (const key in bankAccounts[group]) {
102
+ const account = bankAccounts[group][key];
103
+ if (
104
+ account.bank.toString().toLowerCase() ===
105
+ bank.toString().toLowerCase()
106
+ ) {
107
+ return { ...account, mint: new PublicKey(key) };
108
+ }
90
109
  }
91
110
  }
111
+ };
112
+
113
+ let res = search(getMarginfiAccounts("Prod").bankAccounts);
114
+ if (res) {
115
+ return res;
116
+ }
117
+ res = search(getMarginfiAccounts("Staging").bankAccounts);
118
+ if (res) {
119
+ return res;
92
120
  }
121
+
93
122
  throw new Error(`Marginfi accounts not found by the bank: ${bank}`);
94
123
  }
95
124
 
@@ -145,11 +174,16 @@ export async function getMarginfiMaxLtvAndLiqThresholdBps(
145
174
  return [0, 0];
146
175
  }
147
176
 
177
+ const bankAccounts = getMarginfiAccounts(
178
+ undefined,
179
+ marginfiGroup
180
+ ).bankAccounts;
181
+
148
182
  if (!supply.bank || supply.bank === null) {
149
183
  supply.bank = await safeFetchBank(
150
184
  umi,
151
185
  publicKey(
152
- MARGINFI_ACCOUNTS[marginfiGroup.toString()][supply.mint.toString()].bank
186
+ bankAccounts[marginfiGroup.toString()][supply.mint.toString()].bank
153
187
  ),
154
188
  { commitment: "confirmed" }
155
189
  );
@@ -162,7 +196,7 @@ export async function getMarginfiMaxLtvAndLiqThresholdBps(
162
196
  debt.bank = await safeFetchBank(
163
197
  umi,
164
198
  publicKey(
165
- MARGINFI_ACCOUNTS[marginfiGroup.toString()][debt.mint.toString()].bank
199
+ bankAccounts[marginfiGroup.toString()][debt.mint.toString()].bank
166
200
  ),
167
201
  { commitment: "confirmed" }
168
202
  );
@@ -381,9 +415,9 @@ async function getBank(
381
415
  ? await safeFetchBank(
382
416
  umi,
383
417
  publicKey(
384
- MARGINFI_ACCOUNTS[marginfiGroup?.toString() ?? ""][
385
- data?.mint.toString()
386
- ].bank
418
+ getMarginfiAccounts(undefined, marginfiGroup).bankAccounts[
419
+ marginfiGroup?.toString() ?? ""
420
+ ][data?.mint.toString()].bank
387
421
  ),
388
422
  { commitment: "confirmed" }
389
423
  )
@@ -396,6 +430,7 @@ export async function getMarginfiAccountPositionState(
396
430
  marginfiGroup?: PublicKey,
397
431
  supply?: BankSelection,
398
432
  debt?: BankSelection,
433
+ programEnv?: ProgramEnv,
399
434
  contextUpdates?: ContextUpdates
400
435
  ): Promise<
401
436
  | { supplyBank: Bank | null; debtBank: Bank | null; state: PositionState }
@@ -523,7 +558,7 @@ export async function getMarginfiAccountPositionState(
523
558
  const supplyPrice = safeGetPrice(supply.mint!)!;
524
559
  let [maxLtvBps, liqThresholdBps] = await getMarginfiMaxLtvAndLiqThresholdBps(
525
560
  umi,
526
- marginfiGroup ?? new PublicKey(DEFAULT_MARGINFI_GROUP),
561
+ marginfiGroup ?? getMarginfiAccounts(programEnv).defaultGroup,
527
562
  {
528
563
  mint: toWeb3JsPublicKey(supplyBank.mint),
529
564
  bank: supplyBank,