@haven-fi/solauto-sdk 1.0.581 → 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 (268) 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/constants/switchboardConstants.d.ts.map +1 -1
  5. package/dist/constants/switchboardConstants.js +5 -5
  6. package/dist/generated/accounts/solautoPosition.js +2 -2
  7. package/dist/generated/errors/solauto.d.ts +14 -2
  8. package/dist/generated/errors/solauto.d.ts.map +1 -1
  9. package/dist/generated/errors/solauto.js +27 -5
  10. package/dist/generated/instructions/claimReferralFees.d.ts +1 -1
  11. package/dist/generated/instructions/claimReferralFees.d.ts.map +1 -1
  12. package/dist/generated/instructions/closePosition.d.ts +1 -1
  13. package/dist/generated/instructions/closePosition.d.ts.map +1 -1
  14. package/dist/generated/instructions/closePosition.js +2 -2
  15. package/dist/generated/instructions/marginfiOpenPosition.d.ts +1 -3
  16. package/dist/generated/instructions/marginfiOpenPosition.d.ts.map +1 -1
  17. package/dist/generated/instructions/marginfiOpenPosition.js +0 -1
  18. package/dist/generated/instructions/marginfiRebalance.d.ts +7 -3
  19. package/dist/generated/instructions/marginfiRebalance.d.ts.map +1 -1
  20. package/dist/generated/instructions/marginfiRebalance.js +3 -1
  21. package/dist/generated/types/index.d.ts +7 -1
  22. package/dist/generated/types/index.d.ts.map +1 -1
  23. package/dist/generated/types/index.js +7 -1
  24. package/dist/generated/types/positionData.d.ts +2 -2
  25. package/dist/generated/types/positionData.d.ts.map +1 -1
  26. package/dist/generated/types/positionData.js +1 -1
  27. package/dist/generated/types/positionState.d.ts +7 -7
  28. package/dist/generated/types/positionState.d.ts.map +1 -1
  29. package/dist/generated/types/positionState.js +3 -3
  30. package/dist/generated/types/{positionTokenUsage.d.ts → positionTokenState.d.ts} +6 -8
  31. package/dist/generated/types/positionTokenState.d.ts.map +1 -0
  32. package/dist/generated/types/{positionTokenUsage.js → positionTokenState.js} +6 -7
  33. package/dist/generated/types/rebalanceData.d.ts +7 -13
  34. package/dist/generated/types/rebalanceData.d.ts.map +1 -1
  35. package/dist/generated/types/rebalanceData.js +3 -6
  36. package/dist/generated/types/rebalanceDirection.d.ts +3 -2
  37. package/dist/generated/types/rebalanceDirection.d.ts.map +1 -1
  38. package/dist/generated/types/rebalanceDirection.js +3 -2
  39. package/dist/generated/types/rebalanceInstructionData.d.ts +27 -0
  40. package/dist/generated/types/rebalanceInstructionData.d.ts.map +1 -0
  41. package/dist/generated/types/rebalanceInstructionData.js +22 -0
  42. package/dist/generated/types/rebalanceStateValues.d.ts +27 -0
  43. package/dist/generated/types/rebalanceStateValues.d.ts.map +1 -0
  44. package/dist/generated/types/rebalanceStateValues.js +22 -0
  45. package/dist/generated/types/rebalanceStep.d.ts +15 -0
  46. package/dist/generated/types/rebalanceStep.d.ts.map +1 -0
  47. package/dist/generated/types/rebalanceStep.js +22 -0
  48. package/dist/generated/types/solautoRebalanceType.d.ts +4 -5
  49. package/dist/generated/types/solautoRebalanceType.d.ts.map +1 -1
  50. package/dist/generated/types/solautoRebalanceType.js +4 -5
  51. package/dist/generated/types/solautoSettingsParameters.d.ts +2 -15
  52. package/dist/generated/types/solautoSettingsParameters.d.ts.map +1 -1
  53. package/dist/generated/types/solautoSettingsParameters.js +1 -5
  54. package/dist/generated/types/solautoSettingsParametersInp.d.ts +1 -12
  55. package/dist/generated/types/solautoSettingsParametersInp.d.ts.map +1 -1
  56. package/dist/generated/types/solautoSettingsParametersInp.js +0 -3
  57. package/dist/generated/types/swapType.d.ts +15 -0
  58. package/dist/generated/types/swapType.d.ts.map +1 -0
  59. package/dist/generated/types/swapType.js +22 -0
  60. package/dist/generated/types/tokenBalanceChange.d.ts +21 -0
  61. package/dist/generated/types/tokenBalanceChange.d.ts.map +1 -0
  62. package/dist/generated/types/tokenBalanceChange.js +19 -0
  63. package/dist/generated/types/tokenBalanceChangeType.d.ts +18 -0
  64. package/dist/generated/types/tokenBalanceChangeType.d.ts.map +1 -0
  65. package/dist/generated/types/tokenBalanceChangeType.js +25 -0
  66. package/dist/generated/types/updatePositionData.d.ts +2 -2
  67. package/dist/generated/types/updatePositionData.d.ts.map +1 -1
  68. package/dist/generated/types/updatePositionData.js +1 -1
  69. package/dist/index.d.ts +8 -6
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/index.js +5 -5
  72. package/dist/marginfi-sdk/types/interestRateConfig.d.ts +3 -1
  73. package/dist/marginfi-sdk/types/interestRateConfig.d.ts.map +1 -1
  74. package/dist/marginfi-sdk/types/interestRateConfig.js +2 -1
  75. package/dist/services/flashLoans/flProviderAggregator.d.ts +19 -0
  76. package/dist/services/flashLoans/flProviderAggregator.d.ts.map +1 -0
  77. package/dist/services/flashLoans/flProviderAggregator.js +46 -0
  78. package/dist/services/flashLoans/flProviderBase.d.ts +23 -0
  79. package/dist/services/flashLoans/flProviderBase.d.ts.map +1 -0
  80. package/dist/services/flashLoans/flProviderBase.js +37 -0
  81. package/dist/services/flashLoans/index.d.ts +4 -0
  82. package/dist/services/flashLoans/index.d.ts.map +1 -0
  83. package/dist/services/flashLoans/index.js +19 -0
  84. package/dist/services/flashLoans/marginfiFlProvider.d.ts +25 -0
  85. package/dist/services/flashLoans/marginfiFlProvider.d.ts.map +1 -0
  86. package/dist/services/flashLoans/marginfiFlProvider.js +246 -0
  87. package/dist/services/index.d.ts +6 -0
  88. package/dist/services/index.d.ts.map +1 -0
  89. package/dist/services/index.js +21 -0
  90. package/dist/services/rebalance/index.d.ts +3 -0
  91. package/dist/services/rebalance/index.d.ts.map +1 -0
  92. package/dist/services/rebalance/index.js +18 -0
  93. package/dist/services/rebalance/rebalanceSwapManager.d.ts +30 -0
  94. package/dist/services/rebalance/rebalanceSwapManager.d.ts.map +1 -0
  95. package/dist/services/rebalance/rebalanceSwapManager.js +144 -0
  96. package/dist/services/rebalance/rebalanceTxBuilder.d.ts +22 -0
  97. package/dist/services/rebalance/rebalanceTxBuilder.d.ts.map +1 -0
  98. package/dist/services/rebalance/rebalanceTxBuilder.js +200 -0
  99. package/dist/services/rebalance/rebalanceValues.d.ts +31 -0
  100. package/dist/services/rebalance/rebalanceValues.d.ts.map +1 -0
  101. package/dist/services/rebalance/rebalanceValues.js +118 -0
  102. package/dist/services/rebalance/solautoFees.d.ts +13 -0
  103. package/dist/services/rebalance/solautoFees.d.ts.map +1 -0
  104. package/dist/services/rebalance/solautoFees.js +54 -0
  105. package/dist/services/solauto/index.d.ts +5 -0
  106. package/dist/services/solauto/index.d.ts.map +1 -0
  107. package/dist/{clients → services/solauto}/referralStateManager.d.ts +4 -5
  108. package/dist/services/solauto/referralStateManager.d.ts.map +1 -0
  109. package/dist/{clients → services/solauto}/referralStateManager.js +10 -12
  110. package/dist/services/solauto/solautoClient.d.ts +59 -0
  111. package/dist/services/solauto/solautoClient.d.ts.map +1 -0
  112. package/dist/{clients → services/solauto}/solautoClient.js +78 -109
  113. package/dist/services/solauto/solautoMarginfiClient.d.ts +34 -0
  114. package/dist/services/solauto/solautoMarginfiClient.d.ts.map +1 -0
  115. package/dist/services/solauto/solautoMarginfiClient.js +322 -0
  116. package/dist/{clients → services/solauto}/txHandler.d.ts +11 -2
  117. package/dist/services/solauto/txHandler.d.ts.map +1 -0
  118. package/dist/services/solauto/txHandler.js +38 -0
  119. package/dist/services/swap/index.d.ts +2 -0
  120. package/dist/services/swap/index.d.ts.map +1 -0
  121. package/dist/{utils/solauto → services/swap}/index.js +1 -2
  122. package/dist/services/swap/jupSwapManager.d.ts +37 -0
  123. package/dist/services/swap/jupSwapManager.d.ts.map +1 -0
  124. package/dist/services/swap/jupSwapManager.js +108 -0
  125. package/dist/services/transactions/index.d.ts.map +1 -0
  126. package/dist/{transactions → services/transactions}/transactionUtils.d.ts +3 -5
  127. package/dist/services/transactions/transactionUtils.d.ts.map +1 -0
  128. package/dist/{transactions → services/transactions}/transactionUtils.js +29 -137
  129. package/dist/{transactions → services/transactions}/transactionsManager.d.ts +4 -4
  130. package/dist/services/transactions/transactionsManager.d.ts.map +1 -0
  131. package/dist/{transactions → services/transactions}/transactionsManager.js +10 -8
  132. package/dist/solautoPosition/index.d.ts +4 -0
  133. package/dist/solautoPosition/index.d.ts.map +1 -0
  134. package/dist/solautoPosition/index.js +19 -0
  135. package/dist/solautoPosition/marginfiSolautoPositionEx.d.ts +14 -0
  136. package/dist/solautoPosition/marginfiSolautoPositionEx.d.ts.map +1 -0
  137. package/dist/solautoPosition/marginfiSolautoPositionEx.js +73 -0
  138. package/dist/solautoPosition/solautoPositionEx.d.ts +67 -0
  139. package/dist/solautoPosition/solautoPositionEx.d.ts.map +1 -0
  140. package/dist/solautoPosition/solautoPositionEx.js +143 -0
  141. package/dist/solautoPosition/utils.d.ts +17 -0
  142. package/dist/solautoPosition/utils.d.ts.map +1 -0
  143. package/dist/solautoPosition/utils.js +115 -0
  144. package/dist/types/solauto.d.ts +19 -1
  145. package/dist/types/solauto.d.ts.map +1 -1
  146. package/dist/utils/generalUtils.d.ts +1 -0
  147. package/dist/utils/generalUtils.d.ts.map +1 -1
  148. package/dist/utils/generalUtils.js +9 -1
  149. package/dist/utils/index.d.ts +1 -1
  150. package/dist/utils/index.d.ts.map +1 -1
  151. package/dist/utils/index.js +1 -1
  152. package/dist/utils/jitoUtils.d.ts.map +1 -1
  153. package/dist/utils/jupiterUtils.d.ts +3 -28
  154. package/dist/utils/jupiterUtils.d.ts.map +1 -1
  155. package/dist/utils/jupiterUtils.js +2 -73
  156. package/dist/utils/marginfiUtils.d.ts +4 -3
  157. package/dist/utils/marginfiUtils.d.ts.map +1 -1
  158. package/dist/utils/marginfiUtils.js +47 -18
  159. package/dist/utils/numberUtils.d.ts +3 -6
  160. package/dist/utils/numberUtils.d.ts.map +1 -1
  161. package/dist/utils/numberUtils.js +13 -48
  162. package/dist/utils/priceUtils.js +1 -1
  163. package/dist/utils/solanaUtils.js +2 -2
  164. package/dist/utils/{solauto/generalUtils.d.ts → solautoUtils.d.ts} +9 -16
  165. package/dist/utils/solautoUtils.d.ts.map +1 -0
  166. package/dist/utils/{solauto/generalUtils.js → solautoUtils.js} +48 -173
  167. package/dist/utils/switchboardUtils.d.ts +1 -1
  168. package/dist/utils/switchboardUtils.d.ts.map +1 -1
  169. package/dist/utils/switchboardUtils.js +10 -9
  170. package/local/createTokenAccounts.ts +1 -5
  171. package/local/logPositions.ts +22 -68
  172. package/local/shared.ts +29 -24
  173. package/local/txSandbox.ts +27 -0
  174. package/local/updateMarginfiLUT.ts +80 -4
  175. package/package.json +4 -7
  176. package/src/constants/solautoConstants.ts +4 -9
  177. package/src/constants/switchboardConstants.ts +10 -5
  178. package/src/generated/accounts/solautoPosition.ts +2 -2
  179. package/src/generated/errors/solauto.ts +45 -4
  180. package/src/generated/instructions/claimReferralFees.ts +1 -1
  181. package/src/generated/instructions/closePosition.ts +3 -3
  182. package/src/generated/instructions/marginfiOpenPosition.ts +0 -7
  183. package/src/generated/instructions/marginfiRebalance.ts +12 -3
  184. package/src/generated/types/index.ts +7 -1
  185. package/src/generated/types/positionData.ts +3 -3
  186. package/src/generated/types/positionState.ts +12 -12
  187. package/src/generated/types/{positionTokenUsage.ts → positionTokenState.ts} +13 -16
  188. package/src/generated/types/rebalanceData.ts +16 -27
  189. package/src/generated/types/rebalanceDirection.ts +1 -0
  190. package/src/generated/types/rebalanceInstructionData.ts +62 -0
  191. package/src/generated/types/rebalanceStateValues.ts +59 -0
  192. package/src/generated/types/rebalanceStep.ts +25 -0
  193. package/src/generated/types/solautoRebalanceType.ts +0 -1
  194. package/src/generated/types/solautoSettingsParameters.ts +4 -25
  195. package/src/generated/types/solautoSettingsParametersInp.ts +2 -24
  196. package/src/generated/types/swapType.ts +22 -0
  197. package/src/generated/types/tokenBalanceChange.ts +46 -0
  198. package/src/generated/types/tokenBalanceChangeType.ts +28 -0
  199. package/src/generated/types/updatePositionData.ts +3 -3
  200. package/src/index.ts +8 -8
  201. package/src/marginfi-sdk/types/interestRateConfig.ts +6 -2
  202. package/src/services/flashLoans/flProviderAggregator.ts +74 -0
  203. package/src/services/flashLoans/flProviderBase.ts +88 -0
  204. package/src/services/flashLoans/index.ts +3 -0
  205. package/src/services/flashLoans/marginfiFlProvider.ts +392 -0
  206. package/src/services/index.ts +5 -0
  207. package/src/services/rebalance/index.ts +2 -0
  208. package/src/services/rebalance/rebalanceSwapManager.ts +218 -0
  209. package/src/services/rebalance/rebalanceTxBuilder.ts +330 -0
  210. package/src/services/rebalance/rebalanceValues.ts +232 -0
  211. package/src/services/rebalance/solautoFees.ts +61 -0
  212. package/src/services/solauto/index.ts +4 -0
  213. package/src/{clients → services/solauto}/referralStateManager.ts +17 -31
  214. package/src/{clients → services/solauto}/solautoClient.ts +142 -205
  215. package/src/services/solauto/solautoMarginfiClient.ts +472 -0
  216. package/src/services/solauto/txHandler.ts +69 -0
  217. package/src/services/swap/index.ts +1 -0
  218. package/src/services/swap/jupSwapManager.ts +189 -0
  219. package/src/{transactions → services/transactions}/transactionUtils.ts +40 -280
  220. package/src/{transactions → services/transactions}/transactionsManager.ts +15 -10
  221. package/src/solautoPosition/index.ts +3 -0
  222. package/src/solautoPosition/marginfiSolautoPositionEx.ts +111 -0
  223. package/src/solautoPosition/solautoPositionEx.ts +281 -0
  224. package/src/solautoPosition/utils.ts +188 -0
  225. package/src/types/solauto.ts +30 -2
  226. package/src/utils/generalUtils.ts +9 -1
  227. package/src/utils/index.ts +2 -2
  228. package/src/utils/jitoUtils.ts +0 -4
  229. package/src/utils/jupiterUtils.ts +3 -164
  230. package/src/utils/marginfiUtils.ts +77 -43
  231. package/src/utils/numberUtils.ts +18 -77
  232. package/src/utils/solanaUtils.ts +1 -1
  233. package/src/utils/{solauto/generalUtils.ts → solautoUtils.ts} +66 -288
  234. package/src/utils/switchboardUtils.ts +15 -17
  235. package/tests/transactions/shared.ts +135 -0
  236. package/tests/transactions/solautoMarginfi.ts +8 -198
  237. package/tests/unit/accounts.ts +3 -10
  238. package/tests/unit/lookupTables.ts +23 -2
  239. package/tests/unit/rebalanceCalculations.ts +65 -343
  240. package/dist/clients/index.d.ts +0 -5
  241. package/dist/clients/index.d.ts.map +0 -1
  242. package/dist/clients/referralStateManager.d.ts.map +0 -1
  243. package/dist/clients/solautoClient.d.ts +0 -71
  244. package/dist/clients/solautoClient.d.ts.map +0 -1
  245. package/dist/clients/solautoMarginfiClient.d.ts +0 -51
  246. package/dist/clients/solautoMarginfiClient.d.ts.map +0 -1
  247. package/dist/clients/solautoMarginfiClient.js +0 -497
  248. package/dist/clients/txHandler.d.ts.map +0 -1
  249. package/dist/clients/txHandler.js +0 -23
  250. package/dist/generated/types/positionTokenUsage.d.ts.map +0 -1
  251. package/dist/transactions/index.d.ts.map +0 -1
  252. package/dist/transactions/transactionUtils.d.ts.map +0 -1
  253. package/dist/transactions/transactionsManager.d.ts.map +0 -1
  254. package/dist/utils/solauto/generalUtils.d.ts.map +0 -1
  255. package/dist/utils/solauto/index.d.ts +0 -3
  256. package/dist/utils/solauto/index.d.ts.map +0 -1
  257. package/dist/utils/solauto/rebalanceUtils.d.ts +0 -30
  258. package/dist/utils/solauto/rebalanceUtils.d.ts.map +0 -1
  259. package/dist/utils/solauto/rebalanceUtils.js +0 -287
  260. package/src/clients/index.ts +0 -4
  261. package/src/clients/solautoMarginfiClient.ts +0 -774
  262. package/src/clients/txHandler.ts +0 -38
  263. package/src/utils/solauto/index.ts +0 -2
  264. package/src/utils/solauto/rebalanceUtils.ts +0 -562
  265. package/dist/{clients → services/solauto}/index.js +2 -2
  266. /package/dist/{transactions → services/transactions}/index.d.ts +0 -0
  267. /package/dist/{transactions → services/transactions}/index.js +0 -0
  268. /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
- }