@haven-fi/solauto-sdk 1.0.626 → 1.0.627

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 (56) hide show
  1. package/README.md +115 -0
  2. package/dist/constants/marginfiAccounts.d.ts +3 -4
  3. package/dist/constants/marginfiAccounts.d.ts.map +1 -1
  4. package/dist/constants/marginfiAccounts.js +9 -37
  5. package/dist/constants/pythConstants.d.ts +4 -0
  6. package/dist/constants/pythConstants.d.ts.map +1 -1
  7. package/dist/constants/pythConstants.js +5 -1
  8. package/dist/services/flashLoans/marginfiFlProvider.d.ts.map +1 -1
  9. package/dist/services/flashLoans/marginfiFlProvider.js +7 -8
  10. package/dist/services/solauto/solautoClient.d.ts.map +1 -1
  11. package/dist/services/solauto/solautoClient.js +5 -6
  12. package/dist/services/solauto/solautoMarginfiClient.d.ts.map +1 -1
  13. package/dist/services/solauto/solautoMarginfiClient.js +4 -9
  14. package/dist/services/transactions/transactionUtils.d.ts.map +1 -1
  15. package/dist/services/transactions/transactionUtils.js +3 -2
  16. package/dist/solautoPosition/marginfiSolautoPositionEx.d.ts +5 -0
  17. package/dist/solautoPosition/marginfiSolautoPositionEx.d.ts.map +1 -1
  18. package/dist/solautoPosition/marginfiSolautoPositionEx.js +15 -2
  19. package/dist/solautoPosition/solautoPositionEx.d.ts +2 -0
  20. package/dist/solautoPosition/solautoPositionEx.d.ts.map +1 -1
  21. package/dist/solautoPosition/utils.js +1 -1
  22. package/dist/types/accounts.d.ts +0 -1
  23. package/dist/types/accounts.d.ts.map +1 -1
  24. package/dist/utils/generalUtils.d.ts +1 -0
  25. package/dist/utils/generalUtils.d.ts.map +1 -1
  26. package/dist/utils/generalUtils.js +10 -0
  27. package/dist/utils/index.d.ts +1 -0
  28. package/dist/utils/index.d.ts.map +1 -1
  29. package/dist/utils/index.js +1 -0
  30. package/dist/utils/marginfiUtils.d.ts +7 -2
  31. package/dist/utils/marginfiUtils.d.ts.map +1 -1
  32. package/dist/utils/marginfiUtils.js +44 -11
  33. package/dist/utils/pythUtils.d.ts +21 -0
  34. package/dist/utils/pythUtils.d.ts.map +1 -0
  35. package/dist/utils/pythUtils.js +67 -0
  36. package/dist/utils/solautoUtils.js +1 -1
  37. package/local/txSandbox.ts +3 -3
  38. package/local/updateMarginfiLUT.ts +9 -15
  39. package/package.json +1 -1
  40. package/src/constants/marginfiAccounts.ts +13 -39
  41. package/src/constants/pythConstants.ts +8 -0
  42. package/src/services/flashLoans/marginfiFlProvider.ts +9 -9
  43. package/src/services/solauto/solautoClient.ts +6 -6
  44. package/src/services/solauto/solautoMarginfiClient.ts +5 -11
  45. package/src/services/transactions/transactionUtils.ts +1 -1
  46. package/src/solautoPosition/marginfiSolautoPositionEx.ts +22 -3
  47. package/src/solautoPosition/solautoPositionEx.ts +2 -0
  48. package/src/solautoPosition/utils.ts +1 -1
  49. package/src/types/accounts.ts +0 -1
  50. package/src/utils/generalUtils.ts +12 -0
  51. package/src/utils/index.ts +1 -0
  52. package/src/utils/marginfiUtils.ts +75 -17
  53. package/src/utils/pythUtils.ts +84 -0
  54. package/src/utils/solautoUtils.ts +1 -1
  55. package/tests/unit/accounts.ts +7 -13
  56. package/tests/unit/lookupTables.ts +27 -48
@@ -1 +1 @@
1
- {"version":3,"file":"solautoPositionEx.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/solautoPositionEx.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"solautoPositionEx.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/solautoPositionEx.ts"],"names":[],"mappings":"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"}
@@ -19,7 +19,7 @@ function createSolautoSettings(settings) {
19
19
  };
20
20
  }
21
21
  async function getPositionExBulk(umi, publicKeys) {
22
- const batches = (0, utils_1.getBatches)(publicKeys, 30);
22
+ const batches = (0, utils_1.getBatches)(publicKeys, 50);
23
23
  const data = (await Promise.all(batches.map(async (pubkeys) => {
24
24
  return (0, utils_1.retryWithExponentialBackoff)(async () => await (0, generated_1.safeFetchAllSolautoPosition)(umi, pubkeys.map((x) => (0, umi_web3js_adapters_1.fromWeb3JsPublicKey)(x))));
25
25
  }))).flat();
@@ -2,6 +2,5 @@ export interface MarginfiAssetAccounts {
2
2
  bank: string;
3
3
  liquidityVault: string;
4
4
  vaultAuthority: string;
5
- priceOracle: string;
6
5
  }
7
6
  //# sourceMappingURL=accounts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../src/types/accounts.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB"}
1
+ {"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../src/types/accounts.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB"}
@@ -19,4 +19,5 @@ export type ErrorsToThrow = Array<new (...args: any[]) => Error>;
19
19
  export declare function retryWithExponentialBackoff<T>(fn: (attemptNum: number, prevErr?: Error) => Promise<T>, retries?: number, delay?: number, errorsToThrow?: ErrorsToThrow): Promise<T>;
20
20
  export declare function toEnumValue<E extends object>(enumObj: E, value: number): E[keyof E] | undefined;
21
21
  export declare function customRpcCall(umi: Umi, method: string, params?: any): Promise<any>;
22
+ export declare function u16ToArrayBufferLE(value: number): Uint8Array;
22
23
  //# sourceMappingURL=generalUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"generalUtils.d.ts","sourceRoot":"","sources":["../../src/utils/generalUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAa,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAc,SAAS,EAAE,MAAM,cAAc,CAAC;AAErD,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,UAErD;AAED,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,MAAM,UAE3D;AAED,wBAAgB,UAAU,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAI/C;AAED,wBAAgB,SAAS,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAErD;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAW1D;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,yBAQ/C;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,CAAC,EAAE,EAAE,CAMlE;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAO1C;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,GAAG,EACR,EAAE,EAAE,SAAS,GACZ,OAAO,CAAC,OAAO,CAAC,CAKlB;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAEnE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAU1E;AAED,wBAAgB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAS1D;AAED,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,KAAK,CAAC,CAAC;AAEjE,wBAAgB,2BAA2B,CAAC,CAAC,EAC3C,EAAE,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,EACvD,OAAO,GAAE,MAAU,EACnB,KAAK,GAAE,MAAY,EACnB,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC,CAAC,CAAC,CA8BZ;AAED,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,EAC1C,OAAO,EAAE,CAAC,EACV,KAAK,EAAE,MAAM,GACZ,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAUxB;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,gBAuBzE"}
1
+ {"version":3,"file":"generalUtils.d.ts","sourceRoot":"","sources":["../../src/utils/generalUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAa,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAc,SAAS,EAAE,MAAM,cAAc,CAAC;AAErD,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,UAErD;AAED,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,MAAM,UAE3D;AAED,wBAAgB,UAAU,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAI/C;AAED,wBAAgB,SAAS,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAErD;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAW1D;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,yBAQ/C;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,CAAC,EAAE,EAAE,CAMlE;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAO1C;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,GAAG,EACR,EAAE,EAAE,SAAS,GACZ,OAAO,CAAC,OAAO,CAAC,CAKlB;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAEnE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAU1E;AAED,wBAAgB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAS1D;AAED,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,KAAK,CAAC,CAAC;AAEjE,wBAAgB,2BAA2B,CAAC,CAAC,EAC3C,EAAE,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,EACvD,OAAO,GAAE,MAAU,EACnB,KAAK,GAAE,MAAY,EACnB,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC,CAAC,CAAC,CA8BZ;AAED,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,EAC1C,OAAO,EAAE,CAAC,EACV,KAAK,EAAE,MAAM,GACZ,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAUxB;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,gBAuBzE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAU5D"}
@@ -20,6 +20,7 @@ exports.zip = zip;
20
20
  exports.retryWithExponentialBackoff = retryWithExponentialBackoff;
21
21
  exports.toEnumValue = toEnumValue;
22
22
  exports.customRpcCall = customRpcCall;
23
+ exports.u16ToArrayBufferLE = u16ToArrayBufferLE;
23
24
  const axios_1 = __importDefault(require("axios"));
24
25
  const web3_js_1 = require("@solana/web3.js");
25
26
  const umi_1 = require("@metaplex-foundation/umi");
@@ -159,3 +160,12 @@ async function customRpcCall(umi, method, params) {
159
160
  return data;
160
161
  }
161
162
  }
163
+ function u16ToArrayBufferLE(value) {
164
+ // Create a buffer of 2 bytes
165
+ const buffer = new ArrayBuffer(2);
166
+ const dataView = new DataView(buffer);
167
+ // Set the Uint16 value in little-endian order
168
+ dataView.setUint16(0, value, true);
169
+ // Return the buffer
170
+ return new Uint8Array(buffer);
171
+ }
@@ -8,5 +8,6 @@ export * from "./solautoUtils";
8
8
  export * from "./solanaUtils";
9
9
  export * from "./stringUtils";
10
10
  export * from "./priceUtils";
11
+ export * from "./pythUtils";
11
12
  export * from "./switchboardUtils";
12
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC"}
@@ -24,4 +24,5 @@ __exportStar(require("./solautoUtils"), exports);
24
24
  __exportStar(require("./solanaUtils"), exports);
25
25
  __exportStar(require("./stringUtils"), exports);
26
26
  __exportStar(require("./priceUtils"), exports);
27
+ __exportStar(require("./pythUtils"), exports);
27
28
  __exportStar(require("./switchboardUtils"), exports);
@@ -2,17 +2,22 @@ import { PublicKey } from "@solana/web3.js";
2
2
  import { Program, Umi } from "@metaplex-foundation/umi";
3
3
  import { ProgramEnv, MarginfiAssetAccounts } from "../types";
4
4
  import { PositionState } from "../generated";
5
+ import { MarginfiBankAccountsMap } from "../constants";
5
6
  import { Bank, MarginfiAccount } from "../marginfi-sdk";
6
7
  import { ContextUpdates } from "./solautoUtils";
7
- export declare function getMarginfiProgram(env: ProgramEnv): PublicKey;
8
- export declare function isMarginfiProgram(programId: PublicKey): boolean;
9
8
  export declare function createDynamicMarginfiProgram(env?: ProgramEnv): Program;
10
9
  export declare function umiWithMarginfiProgram(umi: Umi, marginfiEnv?: ProgramEnv): Umi;
10
+ export declare function getAllBankRelatedAccounts(umi: Umi, bankAccountsMap: MarginfiBankAccountsMap): Promise<PublicKey[]>;
11
11
  export declare function fetchBankAddresses(umi: Umi, bankPk: PublicKey): Promise<{
12
12
  bank: PublicKey;
13
13
  liquidityVault: PublicKey;
14
14
  vaultAuthority: PublicKey | undefined;
15
+ priceOracle: PublicKey;
15
16
  }>;
17
+ export declare function getMarginfiPriceOracle(umi: Umi, bank: {
18
+ pk?: PublicKey;
19
+ data?: Bank;
20
+ }): Promise<PublicKey>;
16
21
  interface AllMarginfiAssetAccounts extends MarginfiAssetAccounts {
17
22
  mint: PublicKey;
18
23
  }
@@ -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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"}
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getMarginfiProgram = getMarginfiProgram;
4
- exports.isMarginfiProgram = isMarginfiProgram;
5
3
  exports.createDynamicMarginfiProgram = createDynamicMarginfiProgram;
6
4
  exports.umiWithMarginfiProgram = umiWithMarginfiProgram;
5
+ exports.getAllBankRelatedAccounts = getAllBankRelatedAccounts;
7
6
  exports.fetchBankAddresses = fetchBankAddresses;
7
+ exports.getMarginfiPriceOracle = getMarginfiPriceOracle;
8
8
  exports.findMarginfiAccounts = findMarginfiAccounts;
9
9
  exports.calcMarginfiMaxLtvAndLiqThresholdBps = calcMarginfiMaxLtvAndLiqThresholdBps;
10
10
  exports.getMarginfiMaxLtvAndLiqThresholdBps = getMarginfiMaxLtvAndLiqThresholdBps;
@@ -24,17 +24,11 @@ const priceUtils_1 = require("./priceUtils");
24
24
  const generalUtils_1 = require("./generalUtils");
25
25
  const numberUtils_1 = require("./numberUtils");
26
26
  const accountUtils_1 = require("./accountUtils");
27
- function getMarginfiProgram(env) {
28
- return env === "Prod" ? constants_1.MARGINFI_PROD_PROGRAM : constants_1.MARGINFI_STAGING_PROGRAM;
29
- }
30
- function isMarginfiProgram(programId) {
31
- return (programId.equals(constants_1.MARGINFI_PROD_PROGRAM) ||
32
- programId.equals(constants_1.MARGINFI_STAGING_PROGRAM));
33
- }
27
+ const pythUtils_1 = require("./pythUtils");
34
28
  function createDynamicMarginfiProgram(env) {
35
29
  return {
36
30
  name: "marginfi",
37
- publicKey: (0, umi_1.publicKey)(getMarginfiProgram(env ?? "Prod")),
31
+ publicKey: (0, umi_1.publicKey)((0, constants_1.getMarginfiAccounts)(env ?? "Prod").program),
38
32
  getErrorFromCode(code, cause) {
39
33
  return (0, marginfi_sdk_1.getMarginfiErrorFromCode)(code, this, cause);
40
34
  },
@@ -53,17 +47,56 @@ function umiWithMarginfiProgram(umi, marginfiEnv) {
53
47
  },
54
48
  });
55
49
  }
50
+ async function getAllBankRelatedAccounts(umi, bankAccountsMap) {
51
+ const banks = Object.values(bankAccountsMap).flatMap((group) => Object.values(group).map((accounts) => accounts.bank));
52
+ const banksData = await (0, marginfi_sdk_1.safeFetchAllBank)(umi, banks.map((x) => (0, umi_1.publicKey)(x)));
53
+ const oracles = banksData
54
+ .map((bank) => {
55
+ const oracleKey = (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(bank.config.oracleKeys[0]);
56
+ return bank.config.oracleSetup === marginfi_sdk_1.OracleSetup.PythPushOracle
57
+ ? [
58
+ (0, pythUtils_1.getPythPushOracleAddress)(oracleKey, constants_1.PYTH_SPONSORED_SHARD_ID),
59
+ (0, pythUtils_1.getPythPushOracleAddress)(oracleKey, constants_1.MARGINFI_SPONSORED_SHARD_ID),
60
+ ]
61
+ : [oracleKey];
62
+ })
63
+ .flat()
64
+ .map((x) => x.toString());
65
+ const otherAccounts = Object.entries(bankAccountsMap).flatMap(([groupName, tokenMap]) => Object.values(tokenMap).flatMap((accounts) => [
66
+ groupName,
67
+ accounts.liquidityVault,
68
+ accounts.vaultAuthority,
69
+ ]));
70
+ return Array.from(new Set([...banks, ...oracles, ...otherAccounts]))
71
+ .filter((x) => x !== web3_js_1.PublicKey.default.toString())
72
+ .map((x) => new web3_js_1.PublicKey(x));
73
+ }
56
74
  async function fetchBankAddresses(umi, bankPk) {
57
- const bank = await (0, marginfi_sdk_1.safeFetchBank)(umi, (0, umi_web3js_adapters_1.fromWeb3JsPublicKey)(bankPk));
75
+ const bank = await (0, marginfi_sdk_1.fetchBank)(umi, (0, umi_web3js_adapters_1.fromWeb3JsPublicKey)(bankPk));
58
76
  const liquidityVault = (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(bank.liquidityVault);
59
77
  const vaultAuthority = (await (0, accountUtils_1.getTokenAccountData)(umi, liquidityVault))
60
78
  ?.owner;
79
+ const priceOracle = await getMarginfiPriceOracle(umi, { data: bank });
61
80
  return {
62
81
  bank: bankPk,
63
82
  liquidityVault,
64
83
  vaultAuthority,
84
+ priceOracle,
65
85
  };
66
86
  }
87
+ async function getMarginfiPriceOracle(umi, bank) {
88
+ if (!bank.data) {
89
+ bank.data = await (0, marginfi_sdk_1.fetchBank)(umi, (0, umi_web3js_adapters_1.fromWeb3JsPublicKey)(bank.pk));
90
+ }
91
+ const oracleKey = (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(bank.data.config.oracleKeys[0]);
92
+ const priceOracle = bank.data.config.oracleSetup === marginfi_sdk_1.OracleSetup.PythPushOracle
93
+ ? await (0, pythUtils_1.getMostUpToDatePythOracle)(umi, [
94
+ (0, pythUtils_1.getPythPushOracleAddress)(oracleKey, constants_1.PYTH_SPONSORED_SHARD_ID),
95
+ (0, pythUtils_1.getPythPushOracleAddress)(oracleKey, constants_1.MARGINFI_SPONSORED_SHARD_ID),
96
+ ])
97
+ : oracleKey;
98
+ return priceOracle;
99
+ }
67
100
  function findMarginfiAccounts(bank) {
68
101
  const search = (bankAccounts) => {
69
102
  for (const group in bankAccounts) {
@@ -0,0 +1,21 @@
1
+ import { PublicKey } from "@solana/web3.js";
2
+ import { Umi } from "@metaplex-foundation/umi";
3
+ type PriceUpdateV2 = {
4
+ writeAuthority: Buffer;
5
+ verificationLevel: number;
6
+ priceMessage: {
7
+ feedId: Buffer;
8
+ price: bigint;
9
+ conf: bigint;
10
+ exponent: number;
11
+ publishTime: bigint;
12
+ prevPublishTime: bigint;
13
+ emaPrice: bigint;
14
+ emaConf: bigint;
15
+ };
16
+ };
17
+ export declare function parsePriceInfo(data: Uint8Array): PriceUpdateV2;
18
+ export declare function getMostUpToDatePythOracle(umi: Umi, oracleKeys: PublicKey[]): Promise<PublicKey>;
19
+ export declare function getPythPushOracleAddress(feedId: PublicKey, shardId: number, programId?: PublicKey): PublicKey;
20
+ export {};
21
+ //# sourceMappingURL=pythUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pythUtils.d.ts","sourceRoot":"","sources":["../../src/utils/pythUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAG/C,KAAK,aAAa,GAAG;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,eAAe,EAAE,MAAM,CAAC;QACxB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH,CAAC;AAwBF,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,CAM9D;AAED,wBAAsB,yBAAyB,CAC7C,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,SAAS,EAAE,sBAiBxB;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,SAA6B,GACvC,SAAS,CAMX"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.parsePriceInfo = parsePriceInfo;
27
+ exports.getMostUpToDatePythOracle = getMostUpToDatePythOracle;
28
+ exports.getPythPushOracleAddress = getPythPushOracleAddress;
29
+ const web3_js_1 = require("@solana/web3.js");
30
+ const constants_1 = require("../constants");
31
+ const generalUtils_1 = require("./generalUtils");
32
+ const borsh = __importStar(require("borsh"));
33
+ const umi_web3js_adapters_1 = require("@metaplex-foundation/umi-web3js-adapters");
34
+ const priceUpdateV2Schema = {
35
+ struct: {
36
+ writeAuthority: {
37
+ array: { type: "u8", len: 32 },
38
+ },
39
+ verificationLevel: "u8",
40
+ priceMessage: {
41
+ struct: {
42
+ feedId: { array: { type: "u8", len: 32 } },
43
+ price: "i64",
44
+ conf: "u64",
45
+ exponent: "i32",
46
+ publishTime: "i64",
47
+ prevPublishTime: "i64",
48
+ emaPrice: "i64",
49
+ emaConf: "u64",
50
+ },
51
+ },
52
+ postedSlot: "u64",
53
+ },
54
+ };
55
+ function parsePriceInfo(data) {
56
+ let decoded = borsh.deserialize(priceUpdateV2Schema, data);
57
+ return decoded;
58
+ }
59
+ async function getMostUpToDatePythOracle(umi, oracleKeys) {
60
+ const oracles = (0, generalUtils_1.zip)(oracleKeys, (await umi.rpc.getAccounts(oracleKeys.map((x) => (0, umi_web3js_adapters_1.fromWeb3JsPublicKey)(x)), { commitment: "confirmed" })).map((x) => (x.exists ? parsePriceInfo(x.data.slice(8)) : undefined))).sort((a, b) => Number(b[1]?.priceMessage.publishTime ?? 0) -
61
+ Number(a[1]?.priceMessage.publishTime ?? 0));
62
+ return oracles[0][0];
63
+ }
64
+ function getPythPushOracleAddress(feedId, shardId, programId = constants_1.PYTH_PUSH_PROGRAM) {
65
+ const shardBytes = (0, generalUtils_1.u16ToArrayBufferLE)(shardId);
66
+ return web3_js_1.PublicKey.findProgramAddressSync([shardBytes, feedId.toBuffer()], programId)[0];
67
+ }
@@ -323,7 +323,7 @@ function getClient(lendingPlatform, txHandlerProps) {
323
323
  }
324
324
  }
325
325
  function isMarginfiClient(client) {
326
- return client.lendingPlatform == generated_1.LendingPlatform.Marginfi;
326
+ return client.lendingPlatform === generated_1.LendingPlatform.Marginfi;
327
327
  }
328
328
  // TODO: PF
329
329
  function hasFirstRebalance(rebalanceType) {
@@ -17,7 +17,7 @@ import {
17
17
  import { getSecretKey } from "./shared";
18
18
 
19
19
  const payForTransaction = false;
20
- const testProgram = true;
20
+ const testProgram = false;
21
21
 
22
22
  export async function main() {
23
23
  const [, umi] = getSolanaRpcConnection(
@@ -38,8 +38,8 @@ export async function main() {
38
38
  });
39
39
 
40
40
  await client.initialize({
41
- positionId: 5,
42
- authority: new PublicKey("5UqsR2PGzbP8pGPbXEeXx86Gjz2N2UFBAuFZUSVydAEe"),
41
+ positionId: 1,
42
+ authority: new PublicKey("7ZN1w3ZE51FTXxdDjPPNpdZHuXWRvDK2h6osTHNXfsuL"),
43
43
  });
44
44
 
45
45
  const transactionItems: TransactionItem[] = [];
@@ -16,6 +16,7 @@ import {
16
16
  marginfiAccountInitialize,
17
17
  LOCAL_IRONFORGE_API_URL,
18
18
  getMarginfiAccounts,
19
+ getAllBankRelatedAccounts,
19
20
  } from "../src";
20
21
  import { createAndSendV0Tx, getSecretKey, updateLookupTable } from "./shared";
21
22
 
@@ -38,21 +39,14 @@ const solautoManager = createSignerFromKeypair(
38
39
  );
39
40
 
40
41
  async function addBanks() {
41
- for (const group in mfiAccounts.bankAccounts) {
42
- for (const key in mfiAccounts.bankAccounts[group]) {
43
- const accounts = mfiAccounts.bankAccounts[group][key];
44
- await updateLookupTable(
45
- [
46
- group,
47
- accounts.bank,
48
- accounts.liquidityVault,
49
- accounts.vaultAuthority,
50
- accounts.priceOracle,
51
- ],
52
- LOOKUP_TABLE_ADDRESS
53
- );
54
- }
55
- }
42
+ const accounts = await getAllBankRelatedAccounts(
43
+ umi,
44
+ mfiAccounts.bankAccounts
45
+ );
46
+ await updateLookupTable(
47
+ accounts.map((x) => x.toString()),
48
+ LOOKUP_TABLE_ADDRESS
49
+ );
56
50
  }
57
51
 
58
52
  async function addImfiAccounts() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haven-fi/solauto-sdk",
3
- "version": "1.0.626",
3
+ "version": "1.0.627",
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",
@@ -5,10 +5,10 @@ import { MarginfiAssetAccounts } from "../types/accounts";
5
5
  import { SWITCHBOARD_PRICE_FEED_IDS } from "./switchboardConstants";
6
6
  import { ProgramEnv } from "../types";
7
7
 
8
- export const MARGINFI_PROD_PROGRAM = new PublicKey(
8
+ const MARGINFI_PROD_PROGRAM = new PublicKey(
9
9
  "MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA"
10
10
  );
11
- export const MARGINFI_STAGING_PROGRAM = new PublicKey(
11
+ const MARGINFI_STAGING_PROGRAM = new PublicKey(
12
12
  "stag8sTKds2h4KzjUw3zKTsxbqvT4XKHdaR9X9E6Rct"
13
13
  );
14
14
 
@@ -18,150 +18,126 @@ const PROD_DEFAULT_MARGINFI_GROUP =
18
18
  const STAGING_DEFAULT_MARGINFI_GROUP =
19
19
  "FCPfpHA69EbS8f9KKSreTRkXbzFpunsKuYf5qNmnJjpo";
20
20
 
21
- const USDC_PRICE_ORACLE = "Dpw1EAVrSB1ibxiDQyTAW6Zip3J4Btk2x4SgApQCeFbX";
22
-
23
- export type MarginfiAccountsMap = {
21
+ export type MarginfiBankAccountsMap = {
24
22
  [group: string]: { [token: string]: MarginfiAssetAccounts };
25
23
  };
26
24
 
27
- const MARGINFI_STAGING_ACCOUNTS: MarginfiAccountsMap = {
25
+ const MARGINFI_STAGING_ACCOUNTS: MarginfiBankAccountsMap = {
28
26
  [STAGING_DEFAULT_MARGINFI_GROUP]: {
29
27
  [NATIVE_MINT.toString()]: {
30
28
  bank: "3evdJSa25nsUiZzEUzd92UNa13TPRJrje1dRyiQP5Lhp",
31
29
  liquidityVault: "FVXESa7wCd1tf3o9LGroBc3Ym8Gpcq1HdsLek6oo7Ykv",
32
30
  vaultAuthority: "DuYk1WGq8UsjW5ThLtaehFLrnJeupTjtF7TaPzja9LBQ",
33
- priceOracle: "7UVimffxr9ow1uXYxsr4LHAcV58mLzhmwaeKvJ1pjLiE",
34
31
  },
35
32
  [tokens.USDC]: {
36
33
  bank: "Ek5JSFJFD8QgXM6rPDCzf31XhDp1q3xezaWYSkJWqbqc",
37
34
  liquidityVault: "6n7xXMni5WJKUMb4Vm5Zis6UaUtGF5xEGmagZNVWWoKB",
38
35
  vaultAuthority: "9mXNyA5yS4WSTpYUa5gi3yBrSJWWM7XNPNDWRzWGjdVe",
39
- priceOracle: USDC_PRICE_ORACLE,
40
36
  },
41
37
  [tokens.USDT]: {
42
38
  bank: "4WFCsVXwfnQvZG52VvPwae7CtL13PUFVWdjkw5YCRBo6",
43
39
  liquidityVault: "BFSyniKfXU9rHqUvHLKeZMivQsAKWTE7HZ1fW6vZcvJp",
44
40
  vaultAuthority: "Fgxe3SUMzcNuLtT9Xkv8QhhWXCmu4VxynzUMwCF4HvJd",
45
- priceOracle: "HT2PLQBcG5EiCcNSaMHAjSgd9F98ecpATbk4Sk5oYuM",
46
41
  },
47
42
  },
48
43
  };
49
44
 
50
- const MARGINFI_PROD_ACCOUNTS: MarginfiAccountsMap = {
45
+ const MARGINFI_PROD_ACCOUNTS: MarginfiBankAccountsMap = {
51
46
  [PROD_DEFAULT_MARGINFI_GROUP.toString()]: {
52
47
  [NATIVE_MINT.toString()]: {
53
48
  bank: "CCKtUs6Cgwo4aaQUmBPmyoApH2gUDErxNZCAntD6LYGh",
54
49
  liquidityVault: "2eicbpitfJXDwqCuFAmPgDP7t2oUotnAzbGzRKLMgSLe",
55
50
  vaultAuthority: "DD3AeAssFvjqTvRTrRAtpfjkBF8FpVKnFuwnMLN9haXD",
56
- priceOracle: "7UVimffxr9ow1uXYxsr4LHAcV58mLzhmwaeKvJ1pjLiE",
57
51
  },
58
52
  [tokens.B_SOL]: {
59
53
  bank: "6hS9i46WyTq1KXcoa2Chas2Txh9TJAVr6n1t3tnrE23K",
60
54
  liquidityVault: "2WMipeKDB2CENxbzdmnVrRbsxCA2LY6kCtBe6AAqDP9p",
61
55
  vaultAuthority: "8RcZHucpVHkHWRRdMhJZsxBK9mqKSYnMKGqtF84U8YEo",
62
- priceOracle: "5cN76Xm2Dtx9MnrQqBDeZZRsWruTTcw37UruznAdSvvE",
63
56
  },
64
57
  [tokens.M_SOL]: {
65
58
  bank: "22DcjMZrMwC5Bpa5AGBsmjc5V9VuQrXG6N9ZtdUNyYGE",
66
59
  liquidityVault: "B6HqNn83a2bLqo4i5ygjLHJgD11ePtQksUyx4MjD55DV",
67
60
  vaultAuthority: "6YxGd65JbXzgFGWjE44jsyVeCnZp7Bb1wfL9jDia1n8w",
68
- priceOracle: "5CKzb9j4ChgLUt8Gfm5CNGLN6khXKiqMbnGAW4cgXgxK",
69
61
  },
70
62
  [tokens.JITO_SOL]: {
71
63
  bank: "Bohoc1ikHLD7xKJuzTyiTyCwzaL5N7ggJQu75A8mKYM8",
72
64
  liquidityVault: "38VGtXd2pDPq9FMh1z6AVjcHCoHgvWyMhdNyamDTeeks",
73
65
  vaultAuthority: "7Ng54qf7BrCcZLqXmKA9WSR7SVRn4q6RX1YpLksBQ21A",
74
- priceOracle: "AxaxyeDT8JnWERSaTKvFXvPKkEdxnamKSqpWbsSjYg1g",
75
66
  },
76
67
  [tokens.LST]: {
77
68
  bank: "DMoqjmsuoru986HgfjqrKEvPv8YBufvBGADHUonkadC5",
78
69
  liquidityVault: "DMQUXpb6K5L8osgV4x3NeEPUoJCf2VBgnA8FQusDjSou",
79
70
  vaultAuthority: "6PWVauGLhBFHUJspsnBVZHr56ZnbvmhSD2gS7czBHGpE",
80
- priceOracle: "7aT9A5knp62jVvnEW33xaWopaPHa3Y7ggULyYiUsDhu8",
81
71
  },
82
72
  [tokens.INF]: {
83
73
  bank: "AwLRW3aPMMftXEjgWhTkYwM9CGBHdtKecvahCJZBwAqY",
84
74
  liquidityVault: "HQ1CGcqRshMhuonTGTnnmgw9ffcXxizGdZ6F6PKffWWi",
85
75
  vaultAuthority: "AEZb1XH5bfLwqk3hBKDuLfWyJKdLTgDPCkgn64BJKcvV",
86
- priceOracle: "Ceg5oePJv1a6RR541qKeQaTepvERA3i8SvyueX9tT8Sq",
87
76
  },
88
77
  [tokens.H_SOL]: {
89
78
  bank: "GJCi1uj3kYPZ64puA5sLUiCQfFapxT2xnREzrbDzFkYY",
90
79
  liquidityVault: "8M97jkdr4rJtPnQ4yQ9stD6qVwaUvjrBdDPDbHJnPJLf",
91
80
  vaultAuthority: "8x7mgTn5RvHR8Tn3CJqexSuQwrs6MLEy8csuXCDVvvpt",
92
- priceOracle: SWITCHBOARD_PRICE_FEED_IDS[tokens.H_SOL.toString()].feedId,
93
81
  },
94
82
  [tokens.JUP_SOL]: {
95
83
  bank: "8LaUZadNqtzuCG7iCvZd7d5cbquuYfv19KjAg6GPuuCb",
96
84
  liquidityVault: "B1zjqKPoYp9bTMhzFADaAvjyGb49FMitLpi6P3Pa3YR6",
97
85
  vaultAuthority: "93Qqsge2jHVsWLd8vas4cWghrsZJooMUr5JKN5DtcfMX",
98
- priceOracle: SWITCHBOARD_PRICE_FEED_IDS[tokens.JUP_SOL.toString()].feedId,
99
86
  },
100
87
  [tokens.JUP]: {
101
88
  bank: "Guu5uBc8k1WK1U2ihGosNaCy57LSgCkpWAabtzQqrQf8",
102
89
  liquidityVault: "4w49W4fNDn778wsBa6TNq9hvebZKU17ymsptrEZ8zrsm",
103
90
  vaultAuthority: "2MBwwAhL3c73Jy7HkWd9ofzh1bU39JBabrZCFQR2tUof",
104
- priceOracle: "7dbob1psH1iZBS7qPsm3Kwbf5DzSXK8Jyg31CTgTnxH5",
105
91
  },
106
92
  [tokens.JTO]: {
107
93
  bank: "EdB7YADw4XUt6wErT8kHGCUok4mnTpWGzPUU9rWDebzb",
108
94
  liquidityVault: "3bY1DEkXodGmPMG5f7ABA12228MBG5JdAAKf5cgkB6G1",
109
95
  vaultAuthority: "H2b4f2fGSKFortxwzrMZBnYVfr2yrKVUakg4Md9be3Wv",
110
- priceOracle: "7ajR2zA4MGMMTqRAVjghTKqPPn4kbrj3pYkAVRVwTGzP",
111
96
  },
112
97
  [tokens.JLP]: {
113
98
  bank: "Amtw3n7GZe5SWmyhMhaFhDTi39zbTkLeWErBsmZXwpDa",
114
99
  liquidityVault: "9xfyL8gxbV77VvhdgFmacHyLEG4h7d2eDWkSMfhXUPQ",
115
100
  vaultAuthority: "F4RSGd4BRXscCqAVG3rFLiPVpo7v6j1drVqnvSM3rBKH",
116
- priceOracle: "2TTGSRSezqFzeLUH8JwRUbtN66XLLaymfYsWRTMjfiMw",
117
101
  },
118
102
  [tokens.WBTC]: {
119
103
  bank: "BKsfDJCMbYep6gr9pq8PsmJbb5XGLHbAJzUV8vmorz7a",
120
104
  liquidityVault: "CMNdnjfaDQZo3VMoX31wZQBnSGu5FMmb1CnBaU4tApZk",
121
105
  vaultAuthority: "7P2TQHYgVJkXv1VPaREsL5Pi1gnNjVif5aF3pJewZ9kj",
122
- priceOracle: "4cSM2e6rvbGQUFiJbqytoVMi5GgghSMr8LwVrT9VPSPo",
123
106
  },
124
107
  [tokens.WETH]: {
125
108
  bank: "BkUyfXjbBBALcfZvw76WAFRvYQ21xxMWWeoPtJrUqG3z",
126
109
  liquidityVault: "AxPJtiTEDksJWvCqNHCziK4uUcabqfmwW41dqtZrPFkp",
127
110
  vaultAuthority: "ELXogWuyXrFyUG1vevffVbEhVxdFrHf2GCJTtRGKBWdM",
128
- priceOracle: "42amVS4KgzR9rA28tkVYqVXjq9Qa8dcZQMbH5EYFX6XC",
129
111
  },
130
112
  [tokens.HNT]: {
131
113
  bank: "JBcir4DPRPYVUpks9hkS1jtHMXejfeBo4xJGv3AYYHg6",
132
114
  liquidityVault: "E8Q7u5e9L9Uykx16em75ERT9wfbBPtkNL8gsRjoP8GB9",
133
115
  vaultAuthority: "AjsyrYpgaH275DBSnvNWdGK33hVycSFuXN87FKnX6fVY",
134
- priceOracle: "4DdmDswskDxXGpwHrXUfn2CNUm9rt21ac79GHNTN3J33",
135
116
  },
136
117
  [tokens.PYTH]: {
137
118
  bank: "E4td8i8PT2BZkMygzW4MGHCv2KPPs57dvz5W2ZXf9Twu",
138
119
  liquidityVault: "DUrAkkaMAckzes7so9T5frXm9YFFgjAAm3MMwHwTfVJq",
139
120
  vaultAuthority: "9b5KdVnbbfEQ2qhLeFjWvcAx2VWe9XHx7ZgayZyL9a6C",
140
- priceOracle: "8vjchtMuJNY4oFQdTi8yCe6mhCaNBFaUbktT482TpLPS",
141
121
  },
142
122
  [tokens.USDC]: {
143
123
  bank: "2s37akK2eyBbp8DZgCm7RtsaEz8eJP3Nxd4urLHQv7yB",
144
124
  liquidityVault: "7jaiZR5Sk8hdYN9MxTpczTcwbWpb5WEoxSANuUwveuat",
145
125
  vaultAuthority: "3uxNepDbmkDNq6JhRja5Z8QwbTrfmkKP8AKZV5chYDGG",
146
- priceOracle: USDC_PRICE_ORACLE,
147
126
  },
148
127
  [tokens.USDT]: {
149
128
  bank: "HmpMfL8942u22htC4EMiWgLX931g3sacXFR6KjuLgKLV",
150
129
  liquidityVault: "77t6Fi9qj4s4z22K1toufHtstM8rEy7Y3ytxik7mcsTy",
151
130
  vaultAuthority: "9r6z6KgkEytHCdQWNxvDQH98PsfU98f1m5PCg47mY2XE",
152
- priceOracle: "HT2PLQBcG5EiCcNSaMHAjSgd9F98ecpATbk4Sk5oYuM",
153
131
  },
154
132
  [tokens.BONK]: {
155
133
  bank: "DeyH7QxWvnbbaVB4zFrf4hoq7Q8z1ZT14co42BGwGtfM",
156
134
  liquidityVault: "7FdQsXmCW3N5JQbknj3F9Yqq73er9VZJjGhEEMS8Ct2A",
157
135
  vaultAuthority: "26kcZkdjJc94PdhqiLiEaGiLCYgAVVUfpDaZyK4cqih3",
158
- priceOracle: "DBE3N8uNjhKPRHfANdwGvCZghWXyLPdqdSbEW2XFwBiX",
159
136
  },
160
137
  [tokens.WIF]: {
161
138
  bank: "9dpu8KL5ABYiD3WP2Cnajzg1XaotcJvZspv29Y1Y3tn1",
162
139
  liquidityVault: "4kT3EXc5dDVndUU9mV6EH3Jh3CSEvpcCZjuMkwqrtxUy",
163
140
  vaultAuthority: "9gNrvvZ9RuTyRWooiEEypwcXU6kyXW8yWuhXU8tWUH5L",
164
- priceOracle: "6B23K3tkb51vLZA14jcEQVCA1pfHptzEHFA93V5dYwbT",
165
141
  },
166
142
  },
167
143
  ["DQ2jqDJw9uzTwttf6h6r217BQ7kws3jZbJXDkfbCJa1q"]: {
@@ -169,13 +145,11 @@ const MARGINFI_PROD_ACCOUNTS: MarginfiAccountsMap = {
169
145
  bank: "845oEvt1oduoBj5zQxTr21cWWaUVnRjGerJuW3yMo2nn",
170
146
  liquidityVault: "At6R64ip51zay4dT6k1WnVGETSMcaiY5vggD5DVTgxri",
171
147
  vaultAuthority: "dNraDCWb5usDSoW4kD1Mi2E9WsNu6EABcQZqnrDfjNb",
172
- priceOracle: SWITCHBOARD_PRICE_FEED_IDS[tokens.POPCAT.toString()].feedId,
173
148
  },
174
149
  [tokens.USDC]: {
175
150
  bank: "EXrnNVfLagt3j4hCHSD9WqK75o6dkZBtjpnrSrSC78MA",
176
151
  liquidityVault: "D9HSUYz3Rg2cTH65dUPaQS1MYxofNTeLecsAjiBgVPur",
177
152
  vaultAuthority: "5ivKgJnxQ9CewJcKYSPQUiQFdfJki6YS87FqohnMSsFM",
178
- priceOracle: USDC_PRICE_ORACLE,
179
153
  },
180
154
  },
181
155
  ["EpzY5EYF1A5eFDRfjtsPXSYMPmEx1FXKaXPnouTMF4dm"]: {
@@ -183,14 +157,11 @@ const MARGINFI_PROD_ACCOUNTS: MarginfiAccountsMap = {
183
157
  bank: "3J5rKmCi7JXG6qmiobFJyAidVTnnNAMGj4jomfBxKGRM",
184
158
  liquidityVault: "863K9YPVT3xbUGFZevrQJLqMux3UdRkwNQ6usAp4hJyy",
185
159
  vaultAuthority: "Qsv2rnNRdv59AwRU3YmGPMCTdKT41CDAKyYAr4srCJR",
186
- priceOracle:
187
- SWITCHBOARD_PRICE_FEED_IDS[tokens.RETARDIO.toString()].feedId,
188
160
  },
189
161
  [tokens.USDC]: {
190
162
  bank: "6cgYhBFWCc5sNHxkvSRhd5H9AdAHR41zKwuF37HmLry5",
191
163
  liquidityVault: "7orVfNL5ZjqvdSaDgYLgBk4i5B3AnwFXNqqAvJbx6DFy",
192
164
  vaultAuthority: "G4Azxk4PYtNRmDZkJppYo3rNAinkZXzYpQPG5dVDh4Nj",
193
- priceOracle: USDC_PRICE_ORACLE,
194
165
  },
195
166
  },
196
167
  ["G1rt3EpQ43K3bY457rhukQGRAo2QxydFAGRKqnjKzyr5"]: {
@@ -198,13 +169,11 @@ const MARGINFI_PROD_ACCOUNTS: MarginfiAccountsMap = {
198
169
  bank: "Dj3PndQ3j1vuga5ApiFWWAfQ4h3wBtgS2SeLZBT2LD4g",
199
170
  liquidityVault: "BRcRMDVPBQzXNXWtSS6bNotcGxhVsxfiAt1qf8nFVUpx",
200
171
  vaultAuthority: "36SgFh1qBRyj1PEhsn7Kg9Sfwbrn7rHP7kvTM5o5n6AL",
201
- priceOracle: SWITCHBOARD_PRICE_FEED_IDS[tokens.BILLY.toString()].feedId,
202
172
  },
203
173
  [tokens.USDC]: {
204
174
  bank: "A7vBgCowCYeja7GTc3pyqUBdC9Gkue2gWaMjGZW38meM",
205
175
  liquidityVault: "DBGhZ8TJTG2Pacdva27zY9etaro24o1tTA3LToSjYHbx",
206
176
  vaultAuthority: "Cg6BCqkGny7A2AXCV8rikhHXM82wqqfzmdsTobEeTQkH",
207
- priceOracle: USDC_PRICE_ORACLE,
208
177
  },
209
178
  },
210
179
  ["DESG67cExEcw7d6MmENLEzaocR8pLrhfiw9VrNtGWUKD"]: {
@@ -212,13 +181,11 @@ const MARGINFI_PROD_ACCOUNTS: MarginfiAccountsMap = {
212
181
  bank: "Br3yzg2WSb81RaFWK9UsKtq8fD5viwooZG34mKqQWxdM",
213
182
  liquidityVault: "J45Je52qv2rDBuCQWPwp3bjRhf3bGzRWhKZtGDuLooCX",
214
183
  vaultAuthority: "CKDsAKjNruDSz4tmUairh8PDGD1Rqh9WMTLWERYnnZrH",
215
- priceOracle: SWITCHBOARD_PRICE_FEED_IDS[tokens.HMTR.toString()].feedId,
216
184
  },
217
185
  [tokens.USDC]: {
218
186
  bank: "9yNnhJ8c1vGbu3DMf6eeeUi6TDJ2ddGgaRA88rL2R3rP",
219
187
  liquidityVault: "4U1UBjXrPrW7JuQ894JbLUBqcb5LFfK9rfkWFwT7EdQ9",
220
188
  vaultAuthority: "CY74V1r48kuuHA6APD3AaU2oPV1mBqe9srikrQQSHNR6",
221
- priceOracle: USDC_PRICE_ORACLE,
222
189
  },
223
190
  },
224
191
  };
@@ -233,7 +200,7 @@ export interface MarginfiProgramAccounts {
233
200
  program: PublicKey;
234
201
  defaultGroup: PublicKey;
235
202
  lookupTable: PublicKey;
236
- bankAccounts: MarginfiAccountsMap;
203
+ bankAccounts: MarginfiBankAccountsMap;
237
204
  }
238
205
 
239
206
  export function getMarginfiAccounts(
@@ -268,3 +235,10 @@ export function getMarginfiAccounts(
268
235
  };
269
236
  }
270
237
  }
238
+
239
+ export function isMarginfiProgram(programId: PublicKey) {
240
+ return (
241
+ programId.equals(MARGINFI_PROD_PROGRAM) ||
242
+ programId.equals(MARGINFI_STAGING_PROGRAM)
243
+ );
244
+ }