@haven-fi/solauto-sdk 1.0.625 → 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 (58) hide show
  1. package/README.md +115 -0
  2. package/dist/constants/marginfiAccounts.d.ts +10 -6
  3. package/dist/constants/marginfiAccounts.d.ts.map +1 -1
  4. package/dist/constants/marginfiAccounts.js +61 -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 +9 -9
  10. package/dist/services/solauto/solautoClient.d.ts.map +1 -1
  11. package/dist/services/solauto/solautoClient.js +6 -6
  12. package/dist/services/solauto/solautoMarginfiClient.d.ts +2 -1
  13. package/dist/services/solauto/solautoMarginfiClient.d.ts.map +1 -1
  14. package/dist/services/solauto/solautoMarginfiClient.js +15 -17
  15. package/dist/services/transactions/transactionUtils.d.ts.map +1 -1
  16. package/dist/services/transactions/transactionUtils.js +3 -2
  17. package/dist/solautoPosition/marginfiSolautoPositionEx.d.ts +5 -0
  18. package/dist/solautoPosition/marginfiSolautoPositionEx.d.ts.map +1 -1
  19. package/dist/solautoPosition/marginfiSolautoPositionEx.js +20 -6
  20. package/dist/solautoPosition/solautoPositionEx.d.ts +5 -1
  21. package/dist/solautoPosition/solautoPositionEx.d.ts.map +1 -1
  22. package/dist/solautoPosition/solautoPositionEx.js +11 -4
  23. package/dist/solautoPosition/utils.js +1 -1
  24. package/dist/types/accounts.d.ts +0 -1
  25. package/dist/types/accounts.d.ts.map +1 -1
  26. package/dist/utils/generalUtils.d.ts +1 -0
  27. package/dist/utils/generalUtils.d.ts.map +1 -1
  28. package/dist/utils/generalUtils.js +10 -0
  29. package/dist/utils/index.d.ts +1 -0
  30. package/dist/utils/index.d.ts.map +1 -1
  31. package/dist/utils/index.js +1 -0
  32. package/dist/utils/marginfiUtils.d.ts +13 -3
  33. package/dist/utils/marginfiUtils.d.ts.map +1 -1
  34. package/dist/utils/marginfiUtils.js +78 -20
  35. package/dist/utils/pythUtils.d.ts +21 -0
  36. package/dist/utils/pythUtils.d.ts.map +1 -0
  37. package/dist/utils/pythUtils.js +67 -0
  38. package/dist/utils/solautoUtils.js +1 -1
  39. package/local/txSandbox.ts +3 -3
  40. package/local/updateMarginfiLUT.ts +17 -26
  41. package/package.json +1 -1
  42. package/src/constants/marginfiAccounts.ts +80 -37
  43. package/src/constants/pythConstants.ts +8 -0
  44. package/src/services/flashLoans/marginfiFlProvider.ts +13 -11
  45. package/src/services/solauto/solautoClient.ts +7 -6
  46. package/src/services/solauto/solautoMarginfiClient.ts +18 -26
  47. package/src/services/transactions/transactionUtils.ts +1 -1
  48. package/src/solautoPosition/marginfiSolautoPositionEx.ts +28 -9
  49. package/src/solautoPosition/solautoPositionEx.ts +18 -5
  50. package/src/solautoPosition/utils.ts +1 -1
  51. package/src/types/accounts.ts +0 -1
  52. package/src/utils/generalUtils.ts +12 -0
  53. package/src/utils/index.ts +1 -0
  54. package/src/utils/marginfiUtils.ts +123 -30
  55. package/src/utils/pythUtils.ts +84 -0
  56. package/src/utils/solautoUtils.ts +1 -1
  57. package/tests/unit/accounts.ts +7 -13
  58. package/tests/unit/lookupTables.ts +27 -48
@@ -14,6 +14,7 @@ const marginfi_sdk_1 = require("../../marginfi-sdk");
14
14
  const swap_1 = require("../swap");
15
15
  const jupiter_sdk_1 = require("../../jupiter-sdk");
16
16
  const types_1 = require("../../types");
17
+ const constants_1 = require("../../constants");
17
18
  function getWSolUsage(client, solautoActions, initiatingDcaIn, cancellingDcaIn) {
18
19
  const supplyIsWsol = client.pos.supplyMint().equals(spl_token_1.NATIVE_MINT);
19
20
  const debtIsWsol = client.pos.debtMint().equals(spl_token_1.NATIVE_MINT);
@@ -204,7 +205,7 @@ function getSolautoActions(umi, tx) {
204
205
  }
205
206
  catch { }
206
207
  }
207
- if ((0, utils_1.isMarginfiProgram)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(x.programId))) {
208
+ if ((0, constants_1.isMarginfiProgram)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(x.programId))) {
208
209
  try {
209
210
  const serializer = (0, marginfi_sdk_1.getLendingAccountDepositInstructionDataSerializer)();
210
211
  const discriminator = (0, utils_1.uint8ArrayToBigInt)(serializer
@@ -388,7 +389,7 @@ function getErrorInfo(umi, txs, error, simulationSuccessful) {
388
389
  }
389
390
  else if (errCode !== undefined &&
390
391
  errIx &&
391
- (0, utils_1.isMarginfiProgram)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(errIx.programId))) {
392
+ (0, constants_1.isMarginfiProgram)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(errIx.programId))) {
392
393
  programName = "Marginfi";
393
394
  programError = marginfiError;
394
395
  }
@@ -1,10 +1,15 @@
1
1
  import { PublicKey } from "@solana/web3.js";
2
+ import { Bank } from "../marginfi-sdk";
2
3
  import { SolautoPositionEx } from "./solautoPositionEx";
4
+ import { LendingPlatform } from "../generated";
3
5
  export declare class MarginfiSolautoPositionEx extends SolautoPositionEx {
6
+ lendingPlatform: LendingPlatform;
4
7
  private marginfiAccountData;
5
8
  private supplyBank;
6
9
  private debtBank;
7
10
  lendingPool(): Promise<PublicKey>;
11
+ getBanks(): Promise<Bank[]>;
12
+ priceOracles(): Promise<PublicKey[]>;
8
13
  maxLtvAndLiqThresholdBps(): Promise<[number, number]>;
9
14
  supplyLiquidityAvailable(): number;
10
15
  refreshPositionState(): Promise<void>;
@@ -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;AAC5C,OAAO,EACL,IAAI,EAIL,MAAM,iBAAiB,CAAC;AAYzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,qBAAa,yBAA0B,SAAQ,iBAAiB;IAC9D,eAAe,kBAA4B;IAE3C,OAAO,CAAC,mBAAmB,CAAgC;IAC3D,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,QAAQ,CAAqB;IAExB,WAAW,IAAI,OAAO,CAAC,SAAS,CAAC;IAyBxC,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAgB3B,YAAY,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IASpC,wBAAwB,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAa3D,wBAAwB,IAAI,MAAM;IAO5B,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;CA0B5C"}
@@ -8,9 +8,11 @@ const umi_web3js_adapters_1 = require("@metaplex-foundation/umi-web3js-adapters"
8
8
  const utils_1 = require("../utils");
9
9
  const constants_1 = require("../constants");
10
10
  const solautoPositionEx_1 = require("./solautoPositionEx");
11
+ const generated_1 = require("../generated");
11
12
  class MarginfiSolautoPositionEx extends solautoPositionEx_1.SolautoPositionEx {
12
13
  constructor() {
13
14
  super(...arguments);
15
+ this.lendingPlatform = generated_1.LendingPlatform.Marginfi;
14
16
  this.marginfiAccountData = null;
15
17
  this.supplyBank = null;
16
18
  this.debtBank = null;
@@ -26,22 +28,34 @@ class MarginfiSolautoPositionEx extends solautoPositionEx_1.SolautoPositionEx {
26
28
  this.lp = (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.marginfiAccountData.group);
27
29
  }
28
30
  if (!this.lp) {
29
- this.lp = new web3_js_1.PublicKey(constants_1.DEFAULT_MARGINFI_GROUP);
31
+ this.lp = (0, constants_1.getMarginfiAccounts)(this.lpEnv).defaultGroup;
30
32
  }
31
33
  return this.lp;
32
34
  }
33
- async maxLtvAndLiqThresholdBps() {
35
+ async getBanks() {
34
36
  if (!this.supplyBank || !this.debtBank) {
35
37
  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;
38
+ const bankAccounts = (0, constants_1.getMarginfiAccounts)(this.lpEnv).bankAccounts;
39
+ const supplyBank = bankAccounts[group][this.supplyMint().toString()].bank;
40
+ const debtBank = bankAccounts[group][this.debtMint().toString()].bank;
38
41
  [this.supplyBank, this.debtBank] = await (0, marginfi_sdk_1.safeFetchAllBank)(this.umi, [
39
42
  (0, umi_1.publicKey)(supplyBank),
40
43
  (0, umi_1.publicKey)(debtBank),
41
44
  ]);
42
45
  }
46
+ return [this.supplyBank, this.debtBank];
47
+ }
48
+ async priceOracles() {
49
+ const [supplyBank, debtBank] = await this.getBanks();
50
+ return await Promise.all([
51
+ (0, utils_1.getMarginfiPriceOracle)(this.umi, { data: supplyBank }),
52
+ (0, utils_1.getMarginfiPriceOracle)(this.umi, { data: debtBank }),
53
+ ]);
54
+ }
55
+ async maxLtvAndLiqThresholdBps() {
56
+ const [supplyBank, debtBank] = await this.getBanks();
43
57
  const [supplyPrice] = await (0, utils_1.fetchTokenPrices)([this.supplyMint()]);
44
- const [maxLtvBps, liqThresholdBps] = (0, utils_1.calcMarginfiMaxLtvAndLiqThresholdBps)(this.supplyBank, this.debtBank, supplyPrice);
58
+ const [maxLtvBps, liqThresholdBps] = (0, utils_1.calcMarginfiMaxLtvAndLiqThresholdBps)(supplyBank, debtBank, supplyPrice);
45
59
  return [maxLtvBps, liqThresholdBps];
46
60
  }
47
61
  supplyLiquidityAvailable() {
@@ -56,7 +70,7 @@ class MarginfiSolautoPositionEx extends solautoPositionEx_1.SolautoPositionEx {
56
70
  ? { mint: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.state().supply.mint) }
57
71
  : undefined, useDesignatedMint
58
72
  ? { mint: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.state().debt.mint) }
59
- : undefined, this.contextUpdates);
73
+ : undefined, this.lpEnv, this.contextUpdates);
60
74
  if (resp) {
61
75
  this.supplyBank = resp.supplyBank;
62
76
  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;
@@ -22,10 +23,12 @@ interface PositionExArgs {
22
23
  contextUpdates?: ContextUpdates;
23
24
  }
24
25
  export declare abstract class SolautoPositionEx {
26
+ lendingPlatform: LendingPlatform;
25
27
  umi: Umi;
26
28
  publicKey: PublicKey;
27
29
  protected _data: SolautoPositionExData;
28
30
  protected lp?: PublicKey;
31
+ protected lpEnv: ProgramEnv;
29
32
  lpUserAccount?: PublicKey;
30
33
  protected contextUpdates?: ContextUpdates;
31
34
  private readonly firstState;
@@ -59,6 +62,7 @@ export declare abstract class SolautoPositionEx {
59
62
  debtLiquidityAvailable(): number;
60
63
  debtLiquidityUsdAvailable(): number;
61
64
  abstract maxLtvAndLiqThresholdBps(): Promise<[number, number]>;
65
+ abstract priceOracles(): Promise<PublicKey[]>;
62
66
  abstract supplyLiquidityAvailable(): number;
63
67
  sufficientLiquidityToBoost(): boolean;
64
68
  eligibleForRebalance(bpsDistanceThreshold?: number): RebalanceAction | undefined;
@@ -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,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() <=
@@ -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,12 +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
+ export declare function fetchBankAddresses(umi: Umi, bankPk: PublicKey): Promise<{
12
+ bank: PublicKey;
13
+ liquidityVault: PublicKey;
14
+ vaultAuthority: PublicKey | undefined;
15
+ priceOracle: PublicKey;
16
+ }>;
17
+ export declare function getMarginfiPriceOracle(umi: Umi, bank: {
18
+ pk?: PublicKey;
19
+ data?: Bank;
20
+ }): Promise<PublicKey>;
11
21
  interface AllMarginfiAssetAccounts extends MarginfiAssetAccounts {
12
22
  mint: PublicKey;
13
23
  }
@@ -39,7 +49,7 @@ type BanksCache = {
39
49
  export declare function getMarginfiAccountPositionState(umi: Umi, lpUserAccount: {
40
50
  pk?: PublicKey;
41
51
  data?: MarginfiAccount | null;
42
- }, marginfiGroup?: PublicKey, supply?: BankSelection, debt?: BankSelection, contextUpdates?: ContextUpdates): Promise<{
52
+ }, marginfiGroup?: PublicKey, supply?: BankSelection, debt?: BankSelection, programEnv?: ProgramEnv, contextUpdates?: ContextUpdates): Promise<{
43
53
  supplyBank: Bank | null;
44
54
  debtBank: Bank | null;
45
55
  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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"}
@@ -1,9 +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;
6
+ exports.fetchBankAddresses = fetchBankAddresses;
7
+ exports.getMarginfiPriceOracle = getMarginfiPriceOracle;
7
8
  exports.findMarginfiAccounts = findMarginfiAccounts;
8
9
  exports.calcMarginfiMaxLtvAndLiqThresholdBps = calcMarginfiMaxLtvAndLiqThresholdBps;
9
10
  exports.getMarginfiMaxLtvAndLiqThresholdBps = getMarginfiMaxLtvAndLiqThresholdBps;
@@ -22,17 +23,12 @@ 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");
25
- function getMarginfiProgram(env) {
26
- return env === "Prod" ? constants_1.MARGINFI_PROD_PROGRAM : constants_1.MARGINFI_STAGING_PROGRAM;
27
- }
28
- function isMarginfiProgram(programId) {
29
- return (programId.equals(constants_1.MARGINFI_PROD_PROGRAM) ||
30
- programId.equals(constants_1.MARGINFI_STAGING_PROGRAM));
31
- }
26
+ const accountUtils_1 = require("./accountUtils");
27
+ const pythUtils_1 = require("./pythUtils");
32
28
  function createDynamicMarginfiProgram(env) {
33
29
  return {
34
30
  name: "marginfi",
35
- publicKey: (0, umi_1.publicKey)(getMarginfiProgram(env ?? "Prod")),
31
+ publicKey: (0, umi_1.publicKey)((0, constants_1.getMarginfiAccounts)(env ?? "Prod").program),
36
32
  getErrorFromCode(code, cause) {
37
33
  return (0, marginfi_sdk_1.getMarginfiErrorFromCode)(code, this, cause);
38
34
  },
@@ -51,14 +47,75 @@ function umiWithMarginfiProgram(umi, marginfiEnv) {
51
47
  },
52
48
  });
53
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
+ }
74
+ async function fetchBankAddresses(umi, bankPk) {
75
+ const bank = await (0, marginfi_sdk_1.fetchBank)(umi, (0, umi_web3js_adapters_1.fromWeb3JsPublicKey)(bankPk));
76
+ const liquidityVault = (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(bank.liquidityVault);
77
+ const vaultAuthority = (await (0, accountUtils_1.getTokenAccountData)(umi, liquidityVault))
78
+ ?.owner;
79
+ const priceOracle = await getMarginfiPriceOracle(umi, { data: bank });
80
+ return {
81
+ bank: bankPk,
82
+ liquidityVault,
83
+ vaultAuthority,
84
+ priceOracle,
85
+ };
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
+ }
54
100
  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) };
101
+ const search = (bankAccounts) => {
102
+ for (const group in bankAccounts) {
103
+ for (const key in bankAccounts[group]) {
104
+ const account = bankAccounts[group][key];
105
+ if (account.bank.toString().toLowerCase() ===
106
+ bank.toString().toLowerCase()) {
107
+ return { ...account, mint: new web3_js_1.PublicKey(key) };
108
+ }
60
109
  }
61
110
  }
111
+ };
112
+ let res = search((0, constants_1.getMarginfiAccounts)("Prod").bankAccounts);
113
+ if (res) {
114
+ return res;
115
+ }
116
+ res = search((0, constants_1.getMarginfiAccounts)("Staging").bankAccounts);
117
+ if (res) {
118
+ return res;
62
119
  }
63
120
  throw new Error(`Marginfi accounts not found by the bank: ${bank}`);
64
121
  }
@@ -81,12 +138,13 @@ async function getMarginfiMaxLtvAndLiqThresholdBps(umi, marginfiGroup, supply, d
81
138
  if (!supply.bank && supply.mint.equals(web3_js_1.PublicKey.default)) {
82
139
  return [0, 0];
83
140
  }
141
+ const bankAccounts = (0, constants_1.getMarginfiAccounts)(undefined, marginfiGroup).bankAccounts;
84
142
  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" });
143
+ supply.bank = await (0, marginfi_sdk_1.safeFetchBank)(umi, (0, umi_1.publicKey)(bankAccounts[marginfiGroup.toString()][supply.mint.toString()].bank), { commitment: "confirmed" });
86
144
  }
87
145
  if ((!debt.bank || debt.bank === null) &&
88
146
  !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" });
147
+ debt.bank = await (0, marginfi_sdk_1.safeFetchBank)(umi, (0, umi_1.publicKey)(bankAccounts[marginfiGroup.toString()][debt.mint.toString()].bank), { commitment: "confirmed" });
90
148
  }
91
149
  if (!supplyPrice) {
92
150
  const [price] = await (0, priceUtils_1.fetchTokenPrices)([
@@ -228,10 +286,10 @@ async function getBank(umi, data, marginfiGroup) {
228
286
  return data?.banksCache && data.mint && marginfiGroup
229
287
  ? data.banksCache[marginfiGroup.toString()][data?.mint?.toString()]
230
288
  : 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" })
289
+ ? 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
290
  : null;
233
291
  }
234
- async function getMarginfiAccountPositionState(umi, lpUserAccount, marginfiGroup, supply, debt, contextUpdates) {
292
+ async function getMarginfiAccountPositionState(umi, lpUserAccount, marginfiGroup, supply, debt, programEnv, contextUpdates) {
235
293
  let marginfiAccount = lpUserAccount.data ??
236
294
  (lpUserAccount.pk
237
295
  ? await (0, marginfi_sdk_1.safeFetchMarginfiAccount)(umi, (0, umi_1.publicKey)(lpUserAccount.pk), {
@@ -306,7 +364,7 @@ async function getMarginfiAccountPositionState(umi, lpUserAccount, marginfiGroup
306
364
  debtUsage = await getTokenUsage(debtBank, false, 0, contextUpdates?.debtAdjustment);
307
365
  }
308
366
  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), {
367
+ let [maxLtvBps, liqThresholdBps] = await getMarginfiMaxLtvAndLiqThresholdBps(umi, marginfiGroup ?? (0, constants_1.getMarginfiAccounts)(programEnv).defaultGroup, {
310
368
  mint: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(supplyBank.mint),
311
369
  bank: supplyBank,
312
370
  }, {
@@ -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[] = [];