@haven-fi/solauto-sdk 1.0.582 → 1.0.583

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 (260) hide show
  1. package/dist/constants/solautoConstants.d.ts +1 -0
  2. package/dist/constants/solautoConstants.d.ts.map +1 -1
  3. package/dist/constants/solautoConstants.js +4 -10
  4. package/dist/generated/accounts/solautoPosition.js +2 -2
  5. package/dist/generated/errors/solauto.d.ts +14 -2
  6. package/dist/generated/errors/solauto.d.ts.map +1 -1
  7. package/dist/generated/errors/solauto.js +27 -5
  8. package/dist/generated/instructions/claimReferralFees.d.ts +1 -1
  9. package/dist/generated/instructions/claimReferralFees.d.ts.map +1 -1
  10. package/dist/generated/instructions/closePosition.d.ts +1 -1
  11. package/dist/generated/instructions/closePosition.d.ts.map +1 -1
  12. package/dist/generated/instructions/closePosition.js +2 -2
  13. package/dist/generated/instructions/marginfiOpenPosition.d.ts +1 -3
  14. package/dist/generated/instructions/marginfiOpenPosition.d.ts.map +1 -1
  15. package/dist/generated/instructions/marginfiOpenPosition.js +0 -1
  16. package/dist/generated/instructions/marginfiRebalance.d.ts +7 -3
  17. package/dist/generated/instructions/marginfiRebalance.d.ts.map +1 -1
  18. package/dist/generated/instructions/marginfiRebalance.js +3 -1
  19. package/dist/generated/types/index.d.ts +7 -1
  20. package/dist/generated/types/index.d.ts.map +1 -1
  21. package/dist/generated/types/index.js +7 -1
  22. package/dist/generated/types/positionData.d.ts +2 -2
  23. package/dist/generated/types/positionData.d.ts.map +1 -1
  24. package/dist/generated/types/positionData.js +1 -1
  25. package/dist/generated/types/positionState.d.ts +7 -7
  26. package/dist/generated/types/positionState.d.ts.map +1 -1
  27. package/dist/generated/types/positionState.js +3 -3
  28. package/dist/generated/types/{positionTokenUsage.d.ts → positionTokenState.d.ts} +6 -8
  29. package/dist/generated/types/positionTokenState.d.ts.map +1 -0
  30. package/dist/generated/types/{positionTokenUsage.js → positionTokenState.js} +6 -7
  31. package/dist/generated/types/rebalanceData.d.ts +7 -13
  32. package/dist/generated/types/rebalanceData.d.ts.map +1 -1
  33. package/dist/generated/types/rebalanceData.js +3 -6
  34. package/dist/generated/types/rebalanceDirection.d.ts +3 -2
  35. package/dist/generated/types/rebalanceDirection.d.ts.map +1 -1
  36. package/dist/generated/types/rebalanceDirection.js +3 -2
  37. package/dist/generated/types/rebalanceInstructionData.d.ts +27 -0
  38. package/dist/generated/types/rebalanceInstructionData.d.ts.map +1 -0
  39. package/dist/generated/types/rebalanceInstructionData.js +22 -0
  40. package/dist/generated/types/rebalanceStateValues.d.ts +27 -0
  41. package/dist/generated/types/rebalanceStateValues.d.ts.map +1 -0
  42. package/dist/generated/types/rebalanceStateValues.js +22 -0
  43. package/dist/generated/types/rebalanceStep.d.ts +15 -0
  44. package/dist/generated/types/rebalanceStep.d.ts.map +1 -0
  45. package/dist/generated/types/rebalanceStep.js +22 -0
  46. package/dist/generated/types/solautoRebalanceType.d.ts +4 -5
  47. package/dist/generated/types/solautoRebalanceType.d.ts.map +1 -1
  48. package/dist/generated/types/solautoRebalanceType.js +4 -5
  49. package/dist/generated/types/solautoSettingsParameters.d.ts +2 -15
  50. package/dist/generated/types/solautoSettingsParameters.d.ts.map +1 -1
  51. package/dist/generated/types/solautoSettingsParameters.js +1 -5
  52. package/dist/generated/types/solautoSettingsParametersInp.d.ts +1 -12
  53. package/dist/generated/types/solautoSettingsParametersInp.d.ts.map +1 -1
  54. package/dist/generated/types/solautoSettingsParametersInp.js +0 -3
  55. package/dist/generated/types/swapType.d.ts +15 -0
  56. package/dist/generated/types/swapType.d.ts.map +1 -0
  57. package/dist/generated/types/swapType.js +22 -0
  58. package/dist/generated/types/tokenBalanceChange.d.ts +21 -0
  59. package/dist/generated/types/tokenBalanceChange.d.ts.map +1 -0
  60. package/dist/generated/types/tokenBalanceChange.js +19 -0
  61. package/dist/generated/types/tokenBalanceChangeType.d.ts +18 -0
  62. package/dist/generated/types/tokenBalanceChangeType.d.ts.map +1 -0
  63. package/dist/generated/types/tokenBalanceChangeType.js +25 -0
  64. package/dist/generated/types/updatePositionData.d.ts +2 -2
  65. package/dist/generated/types/updatePositionData.d.ts.map +1 -1
  66. package/dist/generated/types/updatePositionData.js +1 -1
  67. package/dist/index.d.ts +8 -6
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js +5 -5
  70. package/dist/marginfi-sdk/types/interestRateConfig.d.ts +3 -1
  71. package/dist/marginfi-sdk/types/interestRateConfig.d.ts.map +1 -1
  72. package/dist/marginfi-sdk/types/interestRateConfig.js +2 -1
  73. package/dist/services/flashLoans/flProviderAggregator.d.ts +19 -0
  74. package/dist/services/flashLoans/flProviderAggregator.d.ts.map +1 -0
  75. package/dist/services/flashLoans/flProviderAggregator.js +46 -0
  76. package/dist/services/flashLoans/flProviderBase.d.ts +23 -0
  77. package/dist/services/flashLoans/flProviderBase.d.ts.map +1 -0
  78. package/dist/services/flashLoans/flProviderBase.js +37 -0
  79. package/dist/services/flashLoans/index.d.ts +4 -0
  80. package/dist/services/flashLoans/index.d.ts.map +1 -0
  81. package/dist/services/flashLoans/index.js +19 -0
  82. package/dist/services/flashLoans/marginfiFlProvider.d.ts +25 -0
  83. package/dist/services/flashLoans/marginfiFlProvider.d.ts.map +1 -0
  84. package/dist/services/flashLoans/marginfiFlProvider.js +246 -0
  85. package/dist/services/index.d.ts +6 -0
  86. package/dist/services/index.d.ts.map +1 -0
  87. package/dist/services/index.js +21 -0
  88. package/dist/services/rebalance/index.d.ts +3 -0
  89. package/dist/services/rebalance/index.d.ts.map +1 -0
  90. package/dist/services/rebalance/index.js +18 -0
  91. package/dist/services/rebalance/rebalanceSwapManager.d.ts +30 -0
  92. package/dist/services/rebalance/rebalanceSwapManager.d.ts.map +1 -0
  93. package/dist/services/rebalance/rebalanceSwapManager.js +144 -0
  94. package/dist/services/rebalance/rebalanceTxBuilder.d.ts +22 -0
  95. package/dist/services/rebalance/rebalanceTxBuilder.d.ts.map +1 -0
  96. package/dist/services/rebalance/rebalanceTxBuilder.js +200 -0
  97. package/dist/services/rebalance/rebalanceValues.d.ts +31 -0
  98. package/dist/services/rebalance/rebalanceValues.d.ts.map +1 -0
  99. package/dist/services/rebalance/rebalanceValues.js +118 -0
  100. package/dist/services/rebalance/solautoFees.d.ts +13 -0
  101. package/dist/services/rebalance/solautoFees.d.ts.map +1 -0
  102. package/dist/services/rebalance/solautoFees.js +54 -0
  103. package/dist/services/solauto/index.d.ts +5 -0
  104. package/dist/services/solauto/index.d.ts.map +1 -0
  105. package/dist/{clients → services/solauto}/referralStateManager.d.ts +4 -5
  106. package/dist/services/solauto/referralStateManager.d.ts.map +1 -0
  107. package/dist/{clients → services/solauto}/referralStateManager.js +10 -12
  108. package/dist/services/solauto/solautoClient.d.ts +59 -0
  109. package/dist/services/solauto/solautoClient.d.ts.map +1 -0
  110. package/dist/{clients → services/solauto}/solautoClient.js +78 -109
  111. package/dist/services/solauto/solautoMarginfiClient.d.ts +34 -0
  112. package/dist/services/solauto/solautoMarginfiClient.d.ts.map +1 -0
  113. package/dist/services/solauto/solautoMarginfiClient.js +322 -0
  114. package/dist/{clients → services/solauto}/txHandler.d.ts +11 -2
  115. package/dist/services/solauto/txHandler.d.ts.map +1 -0
  116. package/dist/services/solauto/txHandler.js +38 -0
  117. package/dist/services/swap/index.d.ts +2 -0
  118. package/dist/services/swap/index.d.ts.map +1 -0
  119. package/dist/{utils/solauto → services/swap}/index.js +1 -2
  120. package/dist/services/swap/jupSwapManager.d.ts +37 -0
  121. package/dist/services/swap/jupSwapManager.d.ts.map +1 -0
  122. package/dist/services/swap/jupSwapManager.js +108 -0
  123. package/dist/services/transactions/index.d.ts.map +1 -0
  124. package/dist/{transactions → services/transactions}/transactionUtils.d.ts +3 -5
  125. package/dist/services/transactions/transactionUtils.d.ts.map +1 -0
  126. package/dist/{transactions → services/transactions}/transactionUtils.js +29 -137
  127. package/dist/{transactions → services/transactions}/transactionsManager.d.ts +4 -4
  128. package/dist/services/transactions/transactionsManager.d.ts.map +1 -0
  129. package/dist/{transactions → services/transactions}/transactionsManager.js +10 -8
  130. package/dist/solautoPosition/index.d.ts +4 -0
  131. package/dist/solautoPosition/index.d.ts.map +1 -0
  132. package/dist/solautoPosition/index.js +19 -0
  133. package/dist/solautoPosition/marginfiSolautoPositionEx.d.ts +14 -0
  134. package/dist/solautoPosition/marginfiSolautoPositionEx.d.ts.map +1 -0
  135. package/dist/solautoPosition/marginfiSolautoPositionEx.js +73 -0
  136. package/dist/solautoPosition/solautoPositionEx.d.ts +67 -0
  137. package/dist/solautoPosition/solautoPositionEx.d.ts.map +1 -0
  138. package/dist/solautoPosition/solautoPositionEx.js +143 -0
  139. package/dist/solautoPosition/utils.d.ts +17 -0
  140. package/dist/solautoPosition/utils.d.ts.map +1 -0
  141. package/dist/solautoPosition/utils.js +115 -0
  142. package/dist/types/solauto.d.ts +19 -1
  143. package/dist/types/solauto.d.ts.map +1 -1
  144. package/dist/utils/generalUtils.d.ts +1 -0
  145. package/dist/utils/generalUtils.d.ts.map +1 -1
  146. package/dist/utils/generalUtils.js +9 -1
  147. package/dist/utils/index.d.ts +1 -1
  148. package/dist/utils/index.d.ts.map +1 -1
  149. package/dist/utils/index.js +1 -1
  150. package/dist/utils/jitoUtils.d.ts.map +1 -1
  151. package/dist/utils/jupiterUtils.d.ts +3 -28
  152. package/dist/utils/jupiterUtils.d.ts.map +1 -1
  153. package/dist/utils/jupiterUtils.js +2 -73
  154. package/dist/utils/marginfiUtils.d.ts +4 -3
  155. package/dist/utils/marginfiUtils.d.ts.map +1 -1
  156. package/dist/utils/marginfiUtils.js +47 -18
  157. package/dist/utils/numberUtils.d.ts +3 -6
  158. package/dist/utils/numberUtils.d.ts.map +1 -1
  159. package/dist/utils/numberUtils.js +13 -48
  160. package/dist/utils/solanaUtils.js +2 -2
  161. package/dist/utils/{solauto/generalUtils.d.ts → solautoUtils.d.ts} +9 -16
  162. package/dist/utils/solautoUtils.d.ts.map +1 -0
  163. package/dist/utils/{solauto/generalUtils.js → solautoUtils.js} +48 -173
  164. package/local/createTokenAccounts.ts +1 -5
  165. package/local/logPositions.ts +22 -68
  166. package/local/shared.ts +29 -24
  167. package/local/txSandbox.ts +27 -0
  168. package/local/updateMarginfiLUT.ts +80 -4
  169. package/package.json +3 -6
  170. package/src/constants/solautoConstants.ts +4 -9
  171. package/src/generated/accounts/solautoPosition.ts +2 -2
  172. package/src/generated/errors/solauto.ts +45 -4
  173. package/src/generated/instructions/claimReferralFees.ts +1 -1
  174. package/src/generated/instructions/closePosition.ts +3 -3
  175. package/src/generated/instructions/marginfiOpenPosition.ts +0 -7
  176. package/src/generated/instructions/marginfiRebalance.ts +12 -3
  177. package/src/generated/types/index.ts +7 -1
  178. package/src/generated/types/positionData.ts +3 -3
  179. package/src/generated/types/positionState.ts +12 -12
  180. package/src/generated/types/{positionTokenUsage.ts → positionTokenState.ts} +13 -16
  181. package/src/generated/types/rebalanceData.ts +16 -27
  182. package/src/generated/types/rebalanceDirection.ts +1 -0
  183. package/src/generated/types/rebalanceInstructionData.ts +62 -0
  184. package/src/generated/types/rebalanceStateValues.ts +59 -0
  185. package/src/generated/types/rebalanceStep.ts +25 -0
  186. package/src/generated/types/solautoRebalanceType.ts +0 -1
  187. package/src/generated/types/solautoSettingsParameters.ts +4 -25
  188. package/src/generated/types/solautoSettingsParametersInp.ts +2 -24
  189. package/src/generated/types/swapType.ts +22 -0
  190. package/src/generated/types/tokenBalanceChange.ts +46 -0
  191. package/src/generated/types/tokenBalanceChangeType.ts +28 -0
  192. package/src/generated/types/updatePositionData.ts +3 -3
  193. package/src/index.ts +8 -8
  194. package/src/marginfi-sdk/types/interestRateConfig.ts +6 -2
  195. package/src/services/flashLoans/flProviderAggregator.ts +74 -0
  196. package/src/services/flashLoans/flProviderBase.ts +88 -0
  197. package/src/services/flashLoans/index.ts +3 -0
  198. package/src/services/flashLoans/marginfiFlProvider.ts +392 -0
  199. package/src/services/index.ts +5 -0
  200. package/src/services/rebalance/index.ts +2 -0
  201. package/src/services/rebalance/rebalanceSwapManager.ts +218 -0
  202. package/src/services/rebalance/rebalanceTxBuilder.ts +330 -0
  203. package/src/services/rebalance/rebalanceValues.ts +232 -0
  204. package/src/services/rebalance/solautoFees.ts +61 -0
  205. package/src/services/solauto/index.ts +4 -0
  206. package/src/{clients → services/solauto}/referralStateManager.ts +17 -31
  207. package/src/{clients → services/solauto}/solautoClient.ts +142 -205
  208. package/src/services/solauto/solautoMarginfiClient.ts +472 -0
  209. package/src/services/solauto/txHandler.ts +69 -0
  210. package/src/services/swap/index.ts +1 -0
  211. package/src/services/swap/jupSwapManager.ts +189 -0
  212. package/src/{transactions → services/transactions}/transactionUtils.ts +40 -280
  213. package/src/{transactions → services/transactions}/transactionsManager.ts +15 -10
  214. package/src/solautoPosition/index.ts +3 -0
  215. package/src/solautoPosition/marginfiSolautoPositionEx.ts +111 -0
  216. package/src/solautoPosition/solautoPositionEx.ts +281 -0
  217. package/src/solautoPosition/utils.ts +188 -0
  218. package/src/types/solauto.ts +30 -2
  219. package/src/utils/generalUtils.ts +9 -1
  220. package/src/utils/index.ts +2 -2
  221. package/src/utils/jitoUtils.ts +0 -4
  222. package/src/utils/jupiterUtils.ts +3 -164
  223. package/src/utils/marginfiUtils.ts +77 -43
  224. package/src/utils/numberUtils.ts +18 -77
  225. package/src/utils/solanaUtils.ts +1 -1
  226. package/src/utils/{solauto/generalUtils.ts → solautoUtils.ts} +66 -288
  227. package/tests/transactions/shared.ts +135 -0
  228. package/tests/transactions/solautoMarginfi.ts +8 -198
  229. package/tests/unit/accounts.ts +3 -10
  230. package/tests/unit/lookupTables.ts +23 -2
  231. package/tests/unit/rebalanceCalculations.ts +65 -343
  232. package/dist/clients/index.d.ts +0 -5
  233. package/dist/clients/index.d.ts.map +0 -1
  234. package/dist/clients/referralStateManager.d.ts.map +0 -1
  235. package/dist/clients/solautoClient.d.ts +0 -71
  236. package/dist/clients/solautoClient.d.ts.map +0 -1
  237. package/dist/clients/solautoMarginfiClient.d.ts +0 -51
  238. package/dist/clients/solautoMarginfiClient.d.ts.map +0 -1
  239. package/dist/clients/solautoMarginfiClient.js +0 -497
  240. package/dist/clients/txHandler.d.ts.map +0 -1
  241. package/dist/clients/txHandler.js +0 -23
  242. package/dist/generated/types/positionTokenUsage.d.ts.map +0 -1
  243. package/dist/transactions/index.d.ts.map +0 -1
  244. package/dist/transactions/transactionUtils.d.ts.map +0 -1
  245. package/dist/transactions/transactionsManager.d.ts.map +0 -1
  246. package/dist/utils/solauto/generalUtils.d.ts.map +0 -1
  247. package/dist/utils/solauto/index.d.ts +0 -3
  248. package/dist/utils/solauto/index.d.ts.map +0 -1
  249. package/dist/utils/solauto/rebalanceUtils.d.ts +0 -30
  250. package/dist/utils/solauto/rebalanceUtils.d.ts.map +0 -1
  251. package/dist/utils/solauto/rebalanceUtils.js +0 -287
  252. package/src/clients/index.ts +0 -4
  253. package/src/clients/solautoMarginfiClient.ts +0 -774
  254. package/src/clients/txHandler.ts +0 -38
  255. package/src/utils/solauto/index.ts +0 -2
  256. package/src/utils/solauto/rebalanceUtils.ts +0 -562
  257. package/dist/{clients → services/solauto}/index.js +2 -2
  258. /package/dist/{transactions → services/transactions}/index.d.ts +0 -0
  259. /package/dist/{transactions → services/transactions}/index.js +0 -0
  260. /package/src/{transactions → services/transactions}/index.ts +0 -0
@@ -1,774 +0,0 @@
1
- import {
2
- fromWeb3JsPublicKey,
3
- toWeb3JsPublicKey,
4
- } from "@metaplex-foundation/umi-web3js-adapters";
5
- import {
6
- Signer,
7
- TransactionBuilder,
8
- publicKey,
9
- PublicKey as UmiPublicKey,
10
- transactionBuilder,
11
- createSignerFromKeypair,
12
- AccountMeta,
13
- } from "@metaplex-foundation/umi";
14
- import { PublicKey, SYSVAR_INSTRUCTIONS_PUBKEY } from "@solana/web3.js";
15
- import { SolautoClient, SolautoClientArgs } from "./solautoClient";
16
- import { MarginfiAssetAccounts } from "../types/accounts";
17
- import {
18
- DEFAULT_MARGINFI_GROUP,
19
- MARGINFI_ACCOUNTS,
20
- MARGINFI_ACCOUNTS_LOOKUP_TABLE,
21
- } from "../constants/marginfiAccounts";
22
- import {
23
- DCASettingsInpArgs,
24
- LendingPlatform,
25
- PositionState,
26
- PositionType,
27
- RebalanceDirection,
28
- SolautoActionArgs,
29
- SolautoRebalanceType,
30
- SolautoRebalanceTypeArgs,
31
- SolautoSettingsParametersInpArgs,
32
- marginfiOpenPosition,
33
- marginfiProtocolInteraction,
34
- marginfiRebalance,
35
- marginfiRefreshData,
36
- } from "../generated";
37
- import { getTokenAccount } from "../utils/accountUtils";
38
- import {
39
- Bank,
40
- MARGINFI_PROGRAM_ID,
41
- MarginfiAccount,
42
- lendingAccountBorrow,
43
- lendingAccountDeposit,
44
- lendingAccountEndFlashloan,
45
- lendingAccountRepay,
46
- lendingAccountStartFlashloan,
47
- lendingAccountWithdraw,
48
- marginfiAccountInitialize,
49
- safeFetchAllMarginfiAccount,
50
- safeFetchMarginfiAccount,
51
- } from "../marginfi-sdk";
52
- import {
53
- FlashLoanDetails,
54
- RebalanceValues,
55
- } from "../utils/solauto/rebalanceUtils";
56
- import {
57
- findMarginfiAccounts,
58
- getAllMarginfiAccountsByAuthority,
59
- getBankLiquidityAvailableBaseUnit,
60
- getMarginfiAccountPositionState,
61
- getMarginfiMaxLtvAndLiqThreshold,
62
- marginfiAccountEmpty,
63
- } from "../utils/marginfiUtils";
64
- import { fromBaseUnit, toBps } from "../utils/numberUtils";
65
- import { QuoteResponse } from "@jup-ag/api";
66
- import { consoleLog, safeGetPrice, splTokenTransferUmiIx } from "../utils";
67
-
68
- export interface SolautoMarginfiClientArgs extends SolautoClientArgs {
69
- marginfiAccount?: PublicKey | Signer;
70
- marginfiAccountSeedIdx?: bigint;
71
- marginfiGroup?: PublicKey;
72
- }
73
-
74
- export class SolautoMarginfiClient extends SolautoClient {
75
- private initializedFor?: PublicKey;
76
-
77
- public marginfiProgram!: PublicKey;
78
-
79
- public marginfiAccountSeedIdx: bigint = BigInt(0);
80
- public marginfiAccount!: PublicKey | Signer;
81
- public marginfiAccountPk!: PublicKey;
82
- public marginfiGroup!: PublicKey;
83
-
84
- public marginfiSupplyAccounts!: MarginfiAssetAccounts;
85
- public marginfiDebtAccounts!: MarginfiAssetAccounts;
86
-
87
- public supplyPriceOracle!: PublicKey;
88
- public debtPriceOracle!: PublicKey;
89
-
90
- // For flash loans
91
- public intermediaryMarginfiAccountSigner?: Signer;
92
- public intermediaryMarginfiAccountPk!: PublicKey;
93
- public intermediaryMarginfiAccount?: MarginfiAccount;
94
-
95
- private supplyBank: Bank | null = null;
96
- private debtBank: Bank | null = null;
97
-
98
- async initialize(args: SolautoMarginfiClientArgs) {
99
- await super.initialize(args);
100
-
101
- this.lendingPlatform = LendingPlatform.Marginfi;
102
-
103
- if (this.selfManaged) {
104
- this.marginfiAccount =
105
- args.marginfiAccount ??
106
- createSignerFromKeypair(this.umi, this.umi.eddsa.generateKeypair());
107
- } else {
108
- if (this.solautoPositionData) {
109
- this.marginfiAccount = toWeb3JsPublicKey(
110
- this.solautoPositionData.position.protocolUserAccount
111
- );
112
- } else {
113
- const accounts = await getAllMarginfiAccountsByAuthority(
114
- this.umi,
115
- this.solautoPosition,
116
- args.marginfiGroup ?? new PublicKey(DEFAULT_MARGINFI_GROUP),
117
- false
118
- );
119
- const reusableAccounts =
120
- accounts.length > 0
121
- ? (
122
- await safeFetchAllMarginfiAccount(
123
- this.umi,
124
- accounts.map((x) => publicKey(x.marginfiAccount))
125
- )
126
- ).filter((x) => marginfiAccountEmpty(x))
127
- : [];
128
- this.marginfiAccount =
129
- reusableAccounts.length > 0
130
- ? toWeb3JsPublicKey(reusableAccounts[0].publicKey)
131
- : createSignerFromKeypair(
132
- this.umi,
133
- this.umi.eddsa.generateKeypair()
134
- );
135
- }
136
- }
137
- this.marginfiAccountPk =
138
- "publicKey" in this.marginfiAccount
139
- ? toWeb3JsPublicKey(this.marginfiAccount.publicKey)
140
- : this.marginfiAccount;
141
-
142
- if ("publicKey" in this.marginfiAccount) {
143
- this.otherSigners.push(this.marginfiAccount);
144
- }
145
-
146
- const marginfiAccountData = !args.new
147
- ? await safeFetchMarginfiAccount(
148
- this.umi,
149
- publicKey(this.marginfiAccountPk),
150
- { commitment: "confirmed" }
151
- )
152
- : null;
153
- this.marginfiGroup = new PublicKey(
154
- marginfiAccountData
155
- ? marginfiAccountData.group.toString()
156
- : (args.marginfiGroup ?? DEFAULT_MARGINFI_GROUP)
157
- );
158
-
159
- this.marginfiSupplyAccounts =
160
- MARGINFI_ACCOUNTS[this.marginfiGroup.toString()][
161
- this.supplyMint.toString()
162
- ]!;
163
- this.marginfiDebtAccounts =
164
- MARGINFI_ACCOUNTS[this.marginfiGroup.toString()][
165
- this.debtMint.toString()
166
- ]!;
167
-
168
- // TODO: Don't dynamically pull oracle from bank until Marginfi sorts out their price oracle issues.
169
- // const [supplyBank, debtBank] = await safeFetchAllBank(this.umi, [
170
- // publicKey(this.marginfiSupplyAccounts.bank),
171
- // publicKey(this.marginfiDebtAccounts.bank),
172
- // ]);
173
- // this.supplyPriceOracle = toWeb3JsPublicKey(supplyBank.config.oracleKeys[0]);
174
- // this.debtPriceOracle = toWeb3JsPublicKey(debtBank.config.oracleKeys[0]);
175
- this.supplyPriceOracle = new PublicKey(
176
- this.marginfiSupplyAccounts.priceOracle
177
- );
178
- this.debtPriceOracle = new PublicKey(this.marginfiDebtAccounts.priceOracle);
179
-
180
- if (
181
- !this.initializedFor ||
182
- !this.initializedFor.equals(toWeb3JsPublicKey(this.signer.publicKey))
183
- ) {
184
- await this.setIntermediaryMarginfiDetails();
185
- this.initializedFor = toWeb3JsPublicKey(this.signer.publicKey);
186
- }
187
-
188
- consoleLog("Marginfi account:", this.marginfiAccountPk.toString());
189
- consoleLog(
190
- "Intermediary MF account:",
191
- this.intermediaryMarginfiAccountPk.toString()
192
- );
193
- }
194
-
195
- async setIntermediaryMarginfiDetails() {
196
- const existingMarginfiAccounts = (
197
- await getAllMarginfiAccountsByAuthority(
198
- this.umi,
199
- toWeb3JsPublicKey(this.signer.publicKey),
200
- this.marginfiGroup
201
- )
202
- )
203
- .filter((x) => !x.marginfiAccount.equals(this.marginfiAccountPk))
204
- .sort((a, b) =>
205
- a.marginfiAccount.toString().localeCompare(b.marginfiAccount.toString())
206
- );
207
- const compatibleMarginfiAccounts =
208
- existingMarginfiAccounts.length > 0
209
- ? (
210
- await safeFetchAllMarginfiAccount(
211
- this.umi,
212
- existingMarginfiAccounts.map((x) => publicKey(x.marginfiAccount))
213
- )
214
- ).filter((x) => marginfiAccountEmpty(x))
215
- : [];
216
-
217
- this.intermediaryMarginfiAccountSigner =
218
- compatibleMarginfiAccounts.length > 0
219
- ? undefined
220
- : createSignerFromKeypair(this.umi, this.umi.eddsa.generateKeypair());
221
- this.intermediaryMarginfiAccountPk =
222
- compatibleMarginfiAccounts.length > 0
223
- ? toWeb3JsPublicKey(compatibleMarginfiAccounts[0].publicKey)
224
- : toWeb3JsPublicKey(this.intermediaryMarginfiAccountSigner!.publicKey);
225
- this.intermediaryMarginfiAccount =
226
- compatibleMarginfiAccounts.length > 0
227
- ? compatibleMarginfiAccounts[0]
228
- : undefined;
229
-
230
- if (this.intermediaryMarginfiAccountSigner) {
231
- this.otherSigners.push(this.intermediaryMarginfiAccountSigner);
232
- }
233
- }
234
-
235
- protocolAccount(): PublicKey {
236
- return this.marginfiAccountPk;
237
- }
238
-
239
- defaultLookupTables(): string[] {
240
- return [MARGINFI_ACCOUNTS_LOOKUP_TABLE, ...super.defaultLookupTables()];
241
- }
242
-
243
- lutAccountsToAdd(): PublicKey[] {
244
- return [
245
- ...super.lutAccountsToAdd(),
246
- this.marginfiAccountPk,
247
- ...(this.signer.publicKey.toString() === this.authority.toString()
248
- ? [this.intermediaryMarginfiAccountPk]
249
- : []),
250
- ];
251
- }
252
-
253
- async maxLtvAndLiqThresholdBps(): Promise<[number, number]> {
254
- const result = await super.maxLtvAndLiqThresholdBps();
255
- if (result[0] && result[1]) {
256
- return result;
257
- } else if (
258
- this.supplyMint.equals(PublicKey.default) ||
259
- this.debtMint.equals(PublicKey.default)
260
- ) {
261
- return [0, 0];
262
- } else {
263
- const [maxLtv, liqThreshold] = await getMarginfiMaxLtvAndLiqThreshold(
264
- this.umi,
265
- this.marginfiGroup,
266
- {
267
- mint: this.supplyMint,
268
- },
269
- {
270
- mint: this.debtMint,
271
- }
272
- );
273
- this.maxLtvBps = toBps(maxLtv);
274
- this.liqThresholdBps = toBps(liqThreshold);
275
- return [this.maxLtvBps, this.liqThresholdBps];
276
- }
277
- }
278
-
279
- marginfiAccountInitialize(marginfiAccount: Signer): TransactionBuilder {
280
- return marginfiAccountInitialize(this.umi, {
281
- marginfiAccount: marginfiAccount,
282
- marginfiGroup: publicKey(this.marginfiGroup),
283
- authority: this.signer,
284
- feePayer: this.signer,
285
- });
286
- }
287
-
288
- openPosition(
289
- settingParams?: SolautoSettingsParametersInpArgs,
290
- dca?: DCASettingsInpArgs
291
- ): TransactionBuilder {
292
- return super
293
- .openPosition(settingParams, dca)
294
- .add(this.marginfiOpenPositionIx(settingParams, dca));
295
- }
296
-
297
- private marginfiOpenPositionIx(
298
- settingParams?: SolautoSettingsParametersInpArgs,
299
- dca?: DCASettingsInpArgs,
300
- positionType?: PositionType
301
- ): TransactionBuilder {
302
- let signerDebtTa: UmiPublicKey | undefined = undefined;
303
- if (dca) {
304
- signerDebtTa = publicKey(this.signerDebtTa);
305
- }
306
-
307
- return marginfiOpenPosition(this.umi, {
308
- signer: this.signer,
309
- marginfiProgram: publicKey(MARGINFI_PROGRAM_ID),
310
- signerReferralState: publicKey(this.referralState),
311
- referredByState: this.referredByState
312
- ? publicKey(this.referredByState)
313
- : undefined,
314
- referredBySupplyTa: this.referredBySupplyTa()
315
- ? publicKey(this.referredBySupplyTa()!)
316
- : undefined,
317
- solautoPosition: publicKey(this.solautoPosition),
318
- marginfiGroup: publicKey(this.marginfiGroup),
319
- marginfiAccount:
320
- "publicKey" in this.marginfiAccount
321
- ? (this.marginfiAccount as Signer)
322
- : publicKey(this.marginfiAccount),
323
- supplyMint: publicKey(this.supplyMint),
324
- supplyBank: publicKey(this.marginfiSupplyAccounts.bank),
325
- positionSupplyTa: publicKey(this.positionSupplyTa),
326
- debtMint: publicKey(this.debtMint),
327
- debtBank: publicKey(this.marginfiDebtAccounts.bank),
328
- positionDebtTa: publicKey(this.positionDebtTa),
329
- signerDebtTa: signerDebtTa,
330
- positionType: positionType ?? PositionType.Leverage,
331
- positionData: {
332
- positionId: this.positionId!,
333
- settingParams: settingParams ?? null,
334
- dca: dca ?? null,
335
- },
336
- marginfiAccountSeedIdx: !this.selfManaged
337
- ? this.marginfiAccountSeedIdx
338
- : null,
339
- });
340
- }
341
-
342
- refresh(): TransactionBuilder {
343
- return marginfiRefreshData(this.umi, {
344
- signer: this.signer,
345
- marginfiProgram: publicKey(MARGINFI_PROGRAM_ID),
346
- marginfiGroup: publicKey(this.marginfiGroup),
347
- marginfiAccount: publicKey(this.marginfiAccount),
348
- supplyBank: publicKey(this.marginfiSupplyAccounts.bank),
349
- supplyPriceOracle: publicKey(this.supplyPriceOracle),
350
- debtBank: publicKey(this.marginfiDebtAccounts.bank),
351
- debtPriceOracle: publicKey(this.debtPriceOracle),
352
- solautoPosition: publicKey(this.solautoPosition),
353
- });
354
- }
355
-
356
- protocolInteraction(args: SolautoActionArgs): TransactionBuilder {
357
- let tx = super.protocolInteraction(args);
358
-
359
- if (this.selfManaged) {
360
- return tx.add(this.marginfiProtocolInteractionIx(args));
361
- } else {
362
- return tx.add(this.marginfiSolautoProtocolInteractionIx(args));
363
- }
364
- }
365
-
366
- private marginfiProtocolInteractionIx(args: SolautoActionArgs) {
367
- switch (args.__kind) {
368
- case "Deposit": {
369
- return lendingAccountDeposit(this.umi, {
370
- amount: args.fields[0],
371
- signer: this.signer,
372
- signerTokenAccount: publicKey(this.signerSupplyTa),
373
- marginfiAccount: publicKey(this.marginfiAccountPk),
374
- marginfiGroup: publicKey(this.marginfiGroup),
375
- bank: publicKey(this.marginfiSupplyAccounts.bank),
376
- bankLiquidityVault: publicKey(
377
- this.marginfiSupplyAccounts.liquidityVault
378
- ),
379
- });
380
- }
381
- case "Borrow": {
382
- return lendingAccountBorrow(this.umi, {
383
- amount: args.fields[0],
384
- signer: this.signer,
385
- destinationTokenAccount: publicKey(this.signerDebtTa),
386
- marginfiAccount: publicKey(this.marginfiAccountPk),
387
- marginfiGroup: publicKey(this.marginfiGroup),
388
- bank: publicKey(this.marginfiDebtAccounts.bank),
389
- bankLiquidityVault: publicKey(
390
- this.marginfiDebtAccounts.liquidityVault
391
- ),
392
- bankLiquidityVaultAuthority: publicKey(
393
- this.marginfiDebtAccounts.vaultAuthority
394
- ),
395
- });
396
- }
397
- case "Repay": {
398
- return lendingAccountRepay(this.umi, {
399
- amount:
400
- args.fields[0].__kind === "Some" ? args.fields[0].fields[0] : 0,
401
- repayAll: args.fields[0].__kind === "All" ? true : false,
402
- signer: this.signer,
403
- signerTokenAccount: publicKey(this.signerDebtTa),
404
- marginfiAccount: publicKey(this.marginfiAccountPk),
405
- marginfiGroup: publicKey(this.marginfiGroup),
406
- bank: publicKey(this.marginfiDebtAccounts.bank),
407
- bankLiquidityVault: publicKey(
408
- this.marginfiDebtAccounts.liquidityVault
409
- ),
410
- });
411
- }
412
- case "Withdraw": {
413
- return lendingAccountWithdraw(this.umi, {
414
- amount:
415
- args.fields[0].__kind === "Some" ? args.fields[0].fields[0] : 0,
416
- withdrawAll: args.fields[0].__kind === "All" ? true : false,
417
- signer: this.signer,
418
- destinationTokenAccount: publicKey(this.signerSupplyTa),
419
- marginfiAccount: publicKey(this.marginfiAccountPk),
420
- marginfiGroup: publicKey(this.marginfiGroup),
421
- bank: publicKey(this.marginfiSupplyAccounts.bank),
422
- bankLiquidityVault: publicKey(
423
- this.marginfiSupplyAccounts.liquidityVault
424
- ),
425
- bankLiquidityVaultAuthority: publicKey(
426
- this.marginfiSupplyAccounts.vaultAuthority
427
- ),
428
- });
429
- }
430
- }
431
- }
432
-
433
- private marginfiSolautoProtocolInteractionIx(
434
- args: SolautoActionArgs
435
- ): TransactionBuilder {
436
- let positionSupplyTa: UmiPublicKey | undefined = undefined;
437
- let vaultSupplyTa: UmiPublicKey | undefined = undefined;
438
- let supplyVaultAuthority: UmiPublicKey | undefined = undefined;
439
- if (args.__kind === "Deposit" || args.__kind === "Withdraw") {
440
- positionSupplyTa = publicKey(
441
- args.__kind === "Withdraw" || this.selfManaged
442
- ? this.signerSupplyTa
443
- : this.positionSupplyTa
444
- );
445
- vaultSupplyTa = publicKey(this.marginfiSupplyAccounts.liquidityVault);
446
- supplyVaultAuthority = publicKey(
447
- this.marginfiSupplyAccounts.vaultAuthority
448
- );
449
- }
450
-
451
- let positionDebtTa: UmiPublicKey | undefined = undefined;
452
- let vaultDebtTa: UmiPublicKey | undefined = undefined;
453
- let debtVaultAuthority: UmiPublicKey | undefined = undefined;
454
- if (args.__kind === "Borrow" || args.__kind === "Repay") {
455
- positionDebtTa = publicKey(
456
- args.__kind === "Borrow" || this.selfManaged
457
- ? this.signerDebtTa
458
- : this.positionDebtTa
459
- );
460
- vaultDebtTa = publicKey(this.marginfiDebtAccounts.liquidityVault);
461
- debtVaultAuthority = publicKey(this.marginfiDebtAccounts.vaultAuthority);
462
- }
463
-
464
- let supplyPriceOracle: UmiPublicKey | undefined = undefined;
465
- let debtPriceOracle: UmiPublicKey | undefined = undefined;
466
- if (args.__kind === "Withdraw" || args.__kind === "Borrow") {
467
- supplyPriceOracle = publicKey(this.supplyPriceOracle);
468
- debtPriceOracle = publicKey(this.debtPriceOracle);
469
- }
470
-
471
- return marginfiProtocolInteraction(this.umi, {
472
- signer: this.signer,
473
- marginfiProgram: publicKey(MARGINFI_PROGRAM_ID),
474
- solautoPosition: publicKey(this.solautoPosition),
475
- marginfiGroup: publicKey(this.marginfiGroup),
476
- marginfiAccount: publicKey(this.marginfiAccountPk),
477
- supplyBank: publicKey(this.marginfiSupplyAccounts.bank),
478
- supplyPriceOracle,
479
- positionSupplyTa,
480
- vaultSupplyTa,
481
- supplyVaultAuthority,
482
- debtBank: publicKey(this.marginfiDebtAccounts.bank),
483
- debtPriceOracle,
484
- positionDebtTa,
485
- vaultDebtTa,
486
- debtVaultAuthority,
487
- solautoAction: args,
488
- });
489
- }
490
-
491
- rebalance(
492
- rebalanceStep: "A" | "B",
493
- jupQuote: QuoteResponse,
494
- rebalanceType: SolautoRebalanceTypeArgs,
495
- rebalanceValues: RebalanceValues,
496
- flashLoan?: FlashLoanDetails,
497
- targetLiqUtilizationRateBps?: number
498
- ): TransactionBuilder {
499
- const inputIsSupply = new PublicKey(jupQuote.inputMint).equals(
500
- this.supplyMint
501
- );
502
- const outputIsSupply = new PublicKey(jupQuote.outputMint).equals(
503
- this.supplyMint
504
- );
505
- const needSupplyAccounts =
506
- (inputIsSupply && rebalanceStep === "A") ||
507
- (outputIsSupply && rebalanceStep === "B") ||
508
- (inputIsSupply && flashLoan !== undefined && rebalanceStep == "B");
509
- const needDebtAccounts =
510
- (!inputIsSupply && rebalanceStep === "A") ||
511
- (!outputIsSupply && rebalanceStep === "B") ||
512
- (!inputIsSupply && flashLoan !== undefined && rebalanceStep == "B");
513
-
514
- return marginfiRebalance(this.umi, {
515
- signer: this.signer,
516
- marginfiProgram: publicKey(MARGINFI_PROGRAM_ID),
517
- ixsSysvar: publicKey(SYSVAR_INSTRUCTIONS_PUBKEY),
518
- solautoFeesTa:
519
- rebalanceStep === "B"
520
- ? publicKey(
521
- rebalanceValues.rebalanceDirection === RebalanceDirection.Boost
522
- ? this.solautoFeesSupplyTa
523
- : this.solautoFeesDebtTa
524
- )
525
- : undefined,
526
- authorityReferralState: publicKey(this.referralState),
527
- referredByTa: this.referredByState
528
- ? publicKey(
529
- rebalanceValues.rebalanceDirection === RebalanceDirection.Boost
530
- ? this.referredBySupplyTa()!
531
- : this.referredByDebtTa()!
532
- )
533
- : undefined,
534
- positionAuthority:
535
- rebalanceValues.rebalanceAction === "dca"
536
- ? publicKey(this.authority)
537
- : undefined,
538
- solautoPosition: publicKey(this.solautoPosition),
539
- marginfiGroup: publicKey(this.marginfiGroup),
540
- marginfiAccount: publicKey(this.marginfiAccountPk),
541
- intermediaryTa: publicKey(
542
- getTokenAccount(
543
- toWeb3JsPublicKey(this.signer.publicKey),
544
- new PublicKey(jupQuote.inputMint)
545
- )
546
- ),
547
- supplyBank: publicKey(this.marginfiSupplyAccounts.bank),
548
- supplyPriceOracle: publicKey(this.supplyPriceOracle),
549
- positionSupplyTa: publicKey(this.positionSupplyTa),
550
- authoritySupplyTa: this.selfManaged
551
- ? publicKey(getTokenAccount(this.authority, this.supplyMint))
552
- : undefined,
553
- vaultSupplyTa: needSupplyAccounts
554
- ? publicKey(this.marginfiSupplyAccounts.liquidityVault)
555
- : undefined,
556
- supplyVaultAuthority: needSupplyAccounts
557
- ? publicKey(this.marginfiSupplyAccounts.vaultAuthority)
558
- : undefined,
559
- debtBank: publicKey(this.marginfiDebtAccounts.bank),
560
- debtPriceOracle: publicKey(this.debtPriceOracle),
561
- positionDebtTa: publicKey(this.positionDebtTa),
562
- authorityDebtTa: this.selfManaged
563
- ? publicKey(getTokenAccount(this.authority, this.debtMint))
564
- : undefined,
565
- vaultDebtTa: needDebtAccounts
566
- ? publicKey(this.marginfiDebtAccounts.liquidityVault)
567
- : undefined,
568
- debtVaultAuthority: needDebtAccounts
569
- ? publicKey(this.marginfiDebtAccounts.vaultAuthority)
570
- : undefined,
571
- rebalanceType,
572
- targetLiqUtilizationRateBps: targetLiqUtilizationRateBps ?? null,
573
- targetInAmountBaseUnit: parseInt(jupQuote.inAmount),
574
- });
575
- }
576
-
577
- flashBorrow(
578
- rebalanceType: SolautoRebalanceType,
579
- flashLoanDetails: FlashLoanDetails,
580
- destinationTokenAccount: PublicKey
581
- ): TransactionBuilder {
582
- if (flashLoanDetails.signerFlashLoan) {
583
- if (rebalanceType === SolautoRebalanceType.FLRebalanceThenSwap) {
584
- return transactionBuilder().add(
585
- splTokenTransferUmiIx(
586
- this.signer,
587
- getTokenAccount(toWeb3JsPublicKey(this.signer.publicKey), this.debtMint),
588
- destinationTokenAccount,
589
- toWeb3JsPublicKey(this.signer.publicKey),
590
- flashLoanDetails.baseUnitAmount
591
- )
592
- );
593
- } else {
594
- return transactionBuilder();
595
- }
596
- }
597
-
598
- const bank = flashLoanDetails.mint.equals(this.supplyMint)
599
- ? this.marginfiSupplyAccounts
600
- : this.marginfiDebtAccounts;
601
- return transactionBuilder()
602
- .add(
603
- lendingAccountStartFlashloan(this.umi, {
604
- endIndex: 0, // We set this after building the transaction
605
- ixsSysvar: publicKey(SYSVAR_INSTRUCTIONS_PUBKEY),
606
- marginfiAccount: publicKey(this.intermediaryMarginfiAccountPk),
607
- signer: this.signer,
608
- })
609
- )
610
- .add(
611
- lendingAccountBorrow(this.umi, {
612
- amount: flashLoanDetails.baseUnitAmount,
613
- bank: publicKey(bank.bank),
614
- bankLiquidityVault: publicKey(bank.liquidityVault),
615
- bankLiquidityVaultAuthority: publicKey(bank.vaultAuthority),
616
- destinationTokenAccount: publicKey(destinationTokenAccount),
617
- marginfiAccount: publicKey(this.intermediaryMarginfiAccountPk),
618
- marginfiGroup: publicKey(this.marginfiGroup),
619
- signer: this.signer,
620
- })
621
- );
622
- }
623
-
624
- flashRepay(flashLoanDetails: FlashLoanDetails): TransactionBuilder {
625
- if (flashLoanDetails.signerFlashLoan) {
626
- return transactionBuilder();
627
- }
628
-
629
- const accounts = flashLoanDetails.useDebtLiquidity
630
- ? { data: this.marginfiDebtAccounts, oracle: this.debtPriceOracle }
631
- : { data: this.marginfiSupplyAccounts, oracle: this.supplyPriceOracle };
632
-
633
- const remainingAccounts: AccountMeta[] = [];
634
- let includedFlashLoanToken = false;
635
-
636
- if (this.intermediaryMarginfiAccount) {
637
- this.intermediaryMarginfiAccount.lendingAccount.balances.forEach(
638
- async (x) => {
639
- if (x.active) {
640
- if (x.bankPk === accounts.data.bank) {
641
- includedFlashLoanToken = true;
642
- }
643
-
644
- // TODO: Don't dynamically pull from bank until Marginfi sorts out their price oracle issues.
645
- // const bankData = await safeFetchBank(this.umi, publicKey(accounts.data.bank));
646
- // const priceOracle = bankData!.config.oracleKeys[0];
647
- const priceOracle = publicKey(
648
- findMarginfiAccounts(toWeb3JsPublicKey(x.bankPk)).priceOracle
649
- );
650
-
651
- remainingAccounts.push(
652
- ...[
653
- {
654
- pubkey: x.bankPk,
655
- isSigner: false,
656
- isWritable: false,
657
- },
658
- {
659
- pubkey: priceOracle,
660
- isSigner: false,
661
- isWritable: false,
662
- },
663
- ]
664
- );
665
- }
666
- }
667
- );
668
- }
669
- if (!this.intermediaryMarginfiAccount || !includedFlashLoanToken) {
670
- remainingAccounts.push(
671
- ...[
672
- {
673
- pubkey: fromWeb3JsPublicKey(new PublicKey(accounts.data.bank)),
674
- isSigner: false,
675
- isWritable: false,
676
- },
677
- {
678
- pubkey: fromWeb3JsPublicKey(new PublicKey(accounts.oracle)),
679
- isSigner: false,
680
- isWritable: false,
681
- },
682
- ]
683
- );
684
- }
685
-
686
- return transactionBuilder()
687
- .add(
688
- lendingAccountRepay(this.umi, {
689
- amount: flashLoanDetails.baseUnitAmount,
690
- repayAll: null,
691
- bank: publicKey(accounts.data.bank),
692
- bankLiquidityVault: publicKey(accounts.data.liquidityVault),
693
- marginfiAccount: publicKey(this.intermediaryMarginfiAccountPk),
694
- marginfiGroup: publicKey(this.marginfiGroup),
695
- signer: this.signer,
696
- signerTokenAccount: publicKey(
697
- getTokenAccount(
698
- toWeb3JsPublicKey(this.signer.publicKey),
699
- flashLoanDetails.mint
700
- )
701
- ),
702
- })
703
- )
704
- .add(
705
- lendingAccountEndFlashloan(this.umi, {
706
- marginfiAccount: publicKey(this.intermediaryMarginfiAccountPk),
707
- signer: this.signer,
708
- }).addRemainingAccounts(remainingAccounts)
709
- );
710
- }
711
-
712
- async getFreshPositionState(): Promise<PositionState | undefined> {
713
- const state = await super.getFreshPositionState();
714
- if (state) {
715
- return state;
716
- }
717
-
718
- const useDesignatedMint =
719
- !this.selfManaged &&
720
- (this.solautoPositionData === null ||
721
- !toWeb3JsPublicKey(this.signer.publicKey).equals(this.authority));
722
-
723
- const resp = await getMarginfiAccountPositionState(
724
- this.umi,
725
- { pk: this.marginfiAccountPk },
726
- this.marginfiGroup,
727
- useDesignatedMint ? { mint: this.supplyMint } : undefined,
728
- useDesignatedMint ? { mint: this.debtMint } : undefined,
729
- this.contextUpdates
730
- );
731
-
732
- if (resp) {
733
- this.supplyBank = resp?.supplyBank;
734
- this.debtBank = resp?.debtBank;
735
- const freshState = resp.state;
736
-
737
- this.log("Fresh state", freshState);
738
- const supplyPrice = safeGetPrice(freshState?.supply.mint)!;
739
- const debtPrice = safeGetPrice(freshState?.debt.mint)!;
740
- this.log("Supply price: ", supplyPrice);
741
- this.log("Debt price: ", debtPrice);
742
- this.log("Liq threshold bps:", freshState.liqThresholdBps);
743
- this.log("Liq utilization rate bps:", freshState.liqUtilizationRateBps);
744
- this.log(
745
- "Supply USD:",
746
- fromBaseUnit(
747
- freshState.supply.amountUsed.baseUnit,
748
- freshState.supply.decimals
749
- ) * supplyPrice
750
- );
751
- this.log(
752
- "Debt USD:",
753
- fromBaseUnit(
754
- freshState.debt.amountUsed.baseUnit,
755
- freshState.debt.decimals
756
- ) * debtPrice
757
- );
758
- }
759
-
760
- return resp?.state;
761
- }
762
-
763
- supplyLiquidityAvailable(): bigint {
764
- return getBankLiquidityAvailableBaseUnit(this.supplyBank, false);
765
- }
766
-
767
- supplyLiquidityDepositable(): bigint {
768
- return getBankLiquidityAvailableBaseUnit(this.supplyBank, true);
769
- }
770
-
771
- debtLiquidityAvailable(): bigint {
772
- return getBankLiquidityAvailableBaseUnit(this.debtBank, false);
773
- }
774
- }