@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
@@ -2,30 +2,25 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.rebalanceChoresBefore = rebalanceChoresBefore;
4
4
  exports.getTransactionChores = getTransactionChores;
5
- exports.requiresRefreshBeforeRebalance = requiresRefreshBeforeRebalance;
6
- exports.buildSolautoRebalanceTransaction = buildSolautoRebalanceTransaction;
7
5
  exports.convertReferralFeesToDestination = convertReferralFeesToDestination;
8
6
  exports.getErrorInfo = getErrorInfo;
9
7
  const umi_1 = require("@metaplex-foundation/umi");
10
8
  const umi_web3js_adapters_1 = require("@metaplex-foundation/umi-web3js-adapters");
11
9
  const web3_js_1 = require("@solana/web3.js");
12
10
  const spl_token_1 = require("@solana/spl-token");
13
- const generated_1 = require("../generated");
14
- const solanaUtils_1 = require("../utils/solanaUtils");
15
- const jupiterUtils_1 = require("../utils/jupiterUtils");
16
- const rebalanceUtils_1 = require("../utils/solauto/rebalanceUtils");
17
- const generalUtils_1 = require("../utils/generalUtils");
18
- const numberUtils_1 = require("../utils/numberUtils");
19
- const generalUtils_2 = require("../utils/solauto/generalUtils");
20
- const accountUtils_1 = require("../utils/accountUtils");
21
- const marginfi_sdk_1 = require("../marginfi-sdk");
22
- const jupiter_sdk_1 = require("../jupiter-sdk");
23
- const constants_1 = require("../constants");
24
- const utils_1 = require("../utils");
25
- const transactions_1 = require("../types/transactions");
11
+ const generated_1 = require("../../generated");
12
+ const solanaUtils_1 = require("../../utils/solanaUtils");
13
+ const generalUtils_1 = require("../../utils/generalUtils");
14
+ const numberUtils_1 = require("../../utils/numberUtils");
15
+ const accountUtils_1 = require("../../utils/accountUtils");
16
+ const marginfi_sdk_1 = require("../../marginfi-sdk");
17
+ const __1 = require("..");
18
+ const jupiter_sdk_1 = require("../../jupiter-sdk");
19
+ const utils_1 = require("../../utils");
20
+ const transactions_1 = require("../../types/transactions");
26
21
  function getWSolUsage(client, solautoActions, initiatingDcaIn, cancellingDcaIn) {
27
- const supplyIsWsol = client.supplyMint.equals(spl_token_1.NATIVE_MINT);
28
- const debtIsWsol = client.debtMint.equals(spl_token_1.NATIVE_MINT);
22
+ const supplyIsWsol = client.solautoPosition.supplyMint().equals(spl_token_1.NATIVE_MINT);
23
+ const debtIsWsol = client.solautoPosition.debtMint().equals(spl_token_1.NATIVE_MINT);
29
24
  if (!supplyIsWsol && !debtIsWsol) {
30
25
  return undefined;
31
26
  }
@@ -61,14 +56,14 @@ async function transactionChoresBefore(client, accountsGettingCreated, solautoAc
61
56
  chores = chores.add(client.updateReferralStatesIx(undefined, client.authorityLutAddress));
62
57
  }
63
58
  if (client.selfManaged) {
64
- if (client.solautoPositionData === null) {
65
- chores = chores.add(client.openPosition());
66
- }
67
- else if (client.lendingPlatform === generated_1.LendingPlatform.Marginfi &&
59
+ if ((0, utils_1.isMarginfiClient)(client) &&
68
60
  !(await (0, generalUtils_1.getSolanaAccountCreated)(client.umi, client.marginfiAccountPk))) {
69
61
  chores = chores.add(client.marginfiAccountInitialize(client.marginfiAccount));
70
62
  }
71
63
  // TODO: PF
64
+ if (!client.solautoPosition.exists()) {
65
+ chores = chores.add(client.openPositionIx());
66
+ }
72
67
  }
73
68
  const wSolUsage = getWSolUsage(client, solautoActions, initiatingDcaIn, undefined);
74
69
  if (wSolUsage !== undefined) {
@@ -112,8 +107,8 @@ async function transactionChoresBefore(client, accountsGettingCreated, solautoAc
112
107
  }
113
108
  if (!(0, generalUtils_1.getSolanaAccountCreated)(client.umi, tokenAccount)) {
114
109
  chores = chores.add((0, solanaUtils_1.createAssociatedTokenAccountUmiIx)(client.signer, (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(client.signer.publicKey), (0, generated_1.isSolautoAction)("Withdraw", solautoAction)
115
- ? client.supplyMint
116
- : client.debtMint));
110
+ ? client.solautoPosition.supplyMint()
111
+ : client.solautoPosition.debtMint()));
117
112
  accountsGettingCreated.push(tokenAccount.toString());
118
113
  }
119
114
  }
@@ -129,8 +124,6 @@ async function rebalanceChoresBefore(client, tx, accountsGettingCreated) {
129
124
  .some((t) => t.keys.some((k) => (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(k.pubkey).equals(key)));
130
125
  const checkReferralSupplyTa = client.referredBySupplyTa() && usesAccount(client.referredBySupplyTa());
131
126
  const checkReferralDebtTa = client.referredByDebtTa() && usesAccount(client.referredByDebtTa());
132
- const checkIntermediaryMfiAccount = client.lendingPlatform === generated_1.LendingPlatform.Marginfi &&
133
- usesAccount(client.intermediaryMarginfiAccountPk);
134
127
  const checkSignerSupplyTa = usesAccount(client.signerSupplyTa);
135
128
  const checkSignerDebtTa = usesAccount(client.signerDebtTa);
136
129
  const accountsNeeded = [
@@ -138,41 +131,31 @@ async function rebalanceChoresBefore(client, tx, accountsGettingCreated) {
138
131
  checkReferralSupplyTa ? client.referredBySupplyTa() : web3_js_1.PublicKey.default,
139
132
  ],
140
133
  ...[checkReferralDebtTa ? client.referredByDebtTa() : web3_js_1.PublicKey.default],
141
- ...[
142
- checkIntermediaryMfiAccount
143
- ? client.intermediaryMarginfiAccountPk
144
- : web3_js_1.PublicKey.default,
145
- ],
146
134
  ...[checkSignerSupplyTa ? client.signerSupplyTa : web3_js_1.PublicKey.default],
147
135
  ...[checkSignerDebtTa ? client.signerDebtTa : web3_js_1.PublicKey.default],
148
136
  ];
149
- const [referredBySupplyTa, referredByDebtTa, intermediaryMarginfiAccount, signerSupplyTa, signerDebtTa,] = await client.umi.rpc.getAccounts(accountsNeeded.map((x) => (0, umi_1.publicKey)(x ?? web3_js_1.PublicKey.default)));
137
+ const [referredBySupplyTa, referredByDebtTa, signerSupplyTa, signerDebtTa] = await client.umi.rpc.getAccounts(accountsNeeded.map((x) => (0, umi_1.publicKey)(x ?? web3_js_1.PublicKey.default)));
150
138
  let chores = (0, umi_1.transactionBuilder)();
151
139
  if (checkReferralSupplyTa && !(0, generalUtils_1.rpcAccountCreated)(referredBySupplyTa)) {
152
140
  client.log("Creating referred-by supply TA");
153
- chores = chores.add((0, solanaUtils_1.createAssociatedTokenAccountUmiIx)(client.signer, client.referredByState, client.supplyMint));
141
+ chores = chores.add((0, solanaUtils_1.createAssociatedTokenAccountUmiIx)(client.signer, client.referredByState, client.solautoPosition.supplyMint()));
154
142
  }
155
143
  if (checkReferralDebtTa && !(0, generalUtils_1.rpcAccountCreated)(referredByDebtTa)) {
156
144
  client.log("Creating referred-by debt TA");
157
- chores = chores.add((0, solanaUtils_1.createAssociatedTokenAccountUmiIx)(client.signer, client.referredByState, client.debtMint));
158
- }
159
- if (checkIntermediaryMfiAccount &&
160
- !(0, generalUtils_1.rpcAccountCreated)(intermediaryMarginfiAccount)) {
161
- client.log("Creating intermediary marginfi account");
162
- chores = chores.add(client.marginfiAccountInitialize(client.intermediaryMarginfiAccountSigner));
145
+ chores = chores.add((0, solanaUtils_1.createAssociatedTokenAccountUmiIx)(client.signer, client.referredByState, client.solautoPosition.debtMint()));
163
146
  }
164
147
  if (checkSignerSupplyTa &&
165
148
  !(0, generalUtils_1.rpcAccountCreated)(signerSupplyTa) &&
166
149
  !accountsGettingCreated.includes(signerSupplyTa.publicKey.toString())) {
167
150
  client.log("Creating signer supply token account");
168
- chores = chores.add((0, solanaUtils_1.createAssociatedTokenAccountUmiIx)(client.signer, (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(client.signer.publicKey), client.supplyMint));
151
+ chores = chores.add((0, solanaUtils_1.createAssociatedTokenAccountUmiIx)(client.signer, (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(client.signer.publicKey), client.solautoPosition.supplyMint()));
169
152
  accountsGettingCreated.push(signerSupplyTa.publicKey.toString());
170
153
  }
171
154
  if (checkSignerDebtTa &&
172
155
  !(0, generalUtils_1.rpcAccountCreated)(signerDebtTa) &&
173
156
  !accountsGettingCreated.includes(signerDebtTa.publicKey.toString())) {
174
157
  client.log("Creating signer debt token account");
175
- chores = chores.add((0, solanaUtils_1.createAssociatedTokenAccountUmiIx)(client.signer, (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(client.signer.publicKey), client.debtMint));
158
+ chores = chores.add((0, solanaUtils_1.createAssociatedTokenAccountUmiIx)(client.signer, (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(client.signer.publicKey), client.solautoPosition.debtMint()));
176
159
  accountsGettingCreated.push(signerDebtTa.publicKey.toString());
177
160
  }
178
161
  return chores;
@@ -192,9 +175,11 @@ function getRebalanceInstructions(umi, tx) {
192
175
  try {
193
176
  const serializer = (0, generated_1.getMarginfiRebalanceInstructionDataSerializer)();
194
177
  const discriminator = serializer.serialize({
195
- targetInAmountBaseUnit: 0,
196
- rebalanceType: generated_1.SolautoRebalanceType.None,
178
+ swapInAmountBaseUnit: 0,
179
+ rebalanceType: generated_1.SolautoRebalanceType.Regular,
180
+ swapType: generated_1.SwapType.ExactIn,
197
181
  targetLiqUtilizationRateBps: 0,
182
+ flashLoanFeeBps: null,
198
183
  })[0];
199
184
  const [data, _] = serializer.deserialize(x.data);
200
185
  if (data.discriminator === discriminator) {
@@ -329,106 +314,13 @@ async function getTransactionChores(client, tx) {
329
314
  choresAfter = choresAfter.add(transactionChoresAfter(client, solautoActions, client.contextUpdates.cancellingDca));
330
315
  return [choresBefore, choresAfter];
331
316
  }
332
- async function requiresRefreshBeforeRebalance(client) {
333
- const neverRefreshedBefore = client.solautoPositionData &&
334
- client.solautoPositionData.state.supply.amountCanBeUsed.baseUnit ===
335
- BigInt(0) &&
336
- client.solautoPositionData.state.debt.amountCanBeUsed.baseUnit ===
337
- BigInt(0);
338
- const aboveMaxLtv = client.solautoPositionState.liqUtilizationRateBps >
339
- (0, numberUtils_1.getMaxLiqUtilizationRateBps)(client.solautoPositionState.maxLtvBps, client.solautoPositionState.liqThresholdBps, 0.01);
340
- if (aboveMaxLtv || neverRefreshedBefore) {
341
- return true;
342
- }
343
- else if (client.solautoPositionData && !client.selfManaged) {
344
- if (client.contextUpdates.supplyAdjustment > BigInt(0) ||
345
- client.contextUpdates.debtAdjustment > BigInt(0)) {
346
- return false;
347
- }
348
- const oldStateWithLatestPrices = await (0, generalUtils_2.positionStateWithLatestPrices)(client.solautoPositionData.state, constants_1.PRICES[client.supplyMint.toString()].price, constants_1.PRICES[client.debtMint.toString()].price);
349
- const utilizationRateDiff = Math.abs((client.solautoPositionState?.liqUtilizationRateBps ?? 0) -
350
- oldStateWithLatestPrices.liqUtilizationRateBps);
351
- client.log("Liq utilization rate diff:", utilizationRateDiff);
352
- if (client.contextUpdates.supplyAdjustment === BigInt(0) &&
353
- client.contextUpdates.debtAdjustment === BigInt(0) &&
354
- utilizationRateDiff >= 10) {
355
- client.log("Choosing to refresh before rebalance. Utilization rate diff:", utilizationRateDiff);
356
- return true;
357
- }
358
- }
359
- // Rebalance ix will already refresh internally if position is self managed, has automation to update, or position state last updated >= 1 day ago
360
- client.log("Not refreshing before rebalance");
361
- return false;
362
- }
363
- async function buildSolautoRebalanceTransaction(client, targetLiqUtilizationRateBps, attemptNum) {
364
- client.solautoPositionState = await client.getFreshPositionState();
365
- const supplyPrice = (0, utils_1.safeGetPrice)(client.supplyMint) ?? 0;
366
- const debtPrice = (0, utils_1.safeGetPrice)(client.debtMint) ?? 0;
367
- if ((client.solautoPositionState?.supply.amountUsed.baseUnit === BigInt(0) &&
368
- client.contextUpdates.supplyAdjustment === BigInt(0)) ||
369
- (targetLiqUtilizationRateBps === undefined &&
370
- !(0, generalUtils_2.eligibleForRebalance)(client.solautoPositionState, client.solautoPositionSettings(), client.solautoPositionActiveDca(), (0, generalUtils_1.currentUnixSeconds)(), supplyPrice, debtPrice))) {
371
- client.log("Not eligible for a rebalance");
372
- return undefined;
373
- }
374
- const values = (0, rebalanceUtils_1.getRebalanceValues)(client.solautoPositionState, client.solautoPositionSettings(), client.solautoPositionActiveDca(), (0, generalUtils_1.currentUnixSeconds)(), supplyPrice, debtPrice, targetLiqUtilizationRateBps);
375
- client.log("Rebalance values: ", values);
376
- const flRequirements = await (0, rebalanceUtils_1.getFlashLoanRequirements)(client, values, attemptNum);
377
- const swapDetails = await (0, rebalanceUtils_1.getJupSwapRebalanceDetails)(client, values, flRequirements, targetLiqUtilizationRateBps, attemptNum);
378
- const { jupQuote, lookupTableAddresses, setupInstructions, swapIx } = await (0, jupiterUtils_1.getJupSwapTransaction)(client.signer, swapDetails, attemptNum);
379
- const flashLoan = flRequirements
380
- ? (0, rebalanceUtils_1.getFlashLoanDetails)(client, flRequirements, values, jupQuote)
381
- : undefined;
382
- let tx = (0, umi_1.transactionBuilder)();
383
- if (await requiresRefreshBeforeRebalance(client)) {
384
- tx = tx.add(client.refresh());
385
- }
386
- if (flashLoan) {
387
- client.log("Flash loan details: ", flashLoan);
388
- const addFirstRebalance = values.amountUsdToDcaIn > 0;
389
- const rebalanceThenSwap = values.rebalanceDirection === generated_1.RebalanceDirection.Repay &&
390
- flashLoan.useDebtLiquidity;
391
- const rebalanceType = addFirstRebalance
392
- ? generated_1.SolautoRebalanceType.DoubleRebalanceWithFL
393
- : rebalanceThenSwap
394
- ? generated_1.SolautoRebalanceType.FLRebalanceThenSwap
395
- : generated_1.SolautoRebalanceType.FLSwapThenRebalance;
396
- client.log("Rebalance type:", rebalanceType);
397
- const firstRebalance = client.rebalance("A", jupQuote, rebalanceType, values, flashLoan, targetLiqUtilizationRateBps);
398
- const lastRebalance = client.rebalance("B", jupQuote, rebalanceType, values, flashLoan, targetLiqUtilizationRateBps);
399
- const flashBorrowDest = (0, accountUtils_1.getTokenAccount)(rebalanceThenSwap
400
- ? client.solautoPosition
401
- : (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(client.signer.publicKey), rebalanceThenSwap ? swapDetails.outputMint : swapDetails.inputMint);
402
- tx = tx.add([
403
- setupInstructions,
404
- client.flashBorrow(rebalanceType, flashLoan, flashBorrowDest),
405
- ...(addFirstRebalance ? [firstRebalance] : []),
406
- ...(rebalanceThenSwap
407
- ? [lastRebalance, swapIx]
408
- : [swapIx, lastRebalance]),
409
- client.flashRepay(flashLoan),
410
- ]);
411
- }
412
- else {
413
- const rebalanceType = generated_1.SolautoRebalanceType.Regular;
414
- tx = tx.add([
415
- setupInstructions,
416
- client.rebalance("A", jupQuote, rebalanceType, values, undefined, targetLiqUtilizationRateBps),
417
- swapIx,
418
- client.rebalance("B", jupQuote, rebalanceType, values, undefined, targetLiqUtilizationRateBps),
419
- ]);
420
- }
421
- return {
422
- tx,
423
- lookupTableAddresses,
424
- };
425
- }
426
317
  async function convertReferralFeesToDestination(referralManager, tokenAccount, destinationMint) {
427
318
  const tokenAccountData = await (0, accountUtils_1.getTokenAccountData)(referralManager.umi, tokenAccount);
428
319
  if (!tokenAccountData || tokenAccountData.amount === BigInt(0)) {
429
320
  return undefined;
430
321
  }
431
- const { lookupTableAddresses, setupInstructions, swapIx } = await (0, jupiterUtils_1.getJupSwapTransaction)(referralManager.umi.identity, {
322
+ const jupSwapManager = new __1.JupSwapManager(referralManager.umi.identity);
323
+ const { lookupTableAddresses, setupInstructions, swapIx, cleanupIx } = await jupSwapManager.getJupSwapTxData({
432
324
  amount: tokenAccountData.amount,
433
325
  destinationWallet: referralManager.referralState,
434
326
  inputMint: tokenAccountData.mint,
@@ -1,8 +1,8 @@
1
1
  import { TransactionBuilder } from "@metaplex-foundation/umi";
2
- import { SolautoClient } from "../clients/solautoClient";
3
- import { ErrorsToThrow } from "../utils/generalUtils";
4
- import { PriorityFeeSetting, TransactionItemInputs, TransactionRunType } from "../types";
5
- import { ReferralStateManager } from "../clients";
2
+ import { SolautoClient } from "../solauto/solautoClient";
3
+ import { ErrorsToThrow } from "../../utils/generalUtils";
4
+ import { PriorityFeeSetting, TransactionItemInputs, TransactionRunType } from "../../types";
5
+ import { ReferralStateManager } from "..";
6
6
  export declare class TransactionTooLargeError extends Error {
7
7
  constructor(message: string);
8
8
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transactionsManager.d.ts","sourceRoot":"","sources":["../../../src/services/transactions/transactionsManager.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,kBAAkB,EAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAMzD,OAAO,EAEL,aAAa,EAEd,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,kBAAkB,EAElB,qBAAqB,EACrB,kBAAkB,EACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,oBAAoB,EAAa,MAAM,IAAI,CAAC;AAarD,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,EAAE,MAAM;CAK5B;AAqCD,qBAAa,eAAe;IAOjB,OAAO,EAAE,CACd,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IACxC,IAAI,CAAC,EAAE,MAAM;IATtB,oBAAoB,EAAG,MAAM,EAAE,CAAC;IAChC,EAAE,CAAC,EAAE,kBAAkB,CAAC;IACxB,WAAW,EAAE,OAAO,CAAS;IAC7B,SAAS,EAAE,MAAM,CAAK;gBAGb,OAAO,EAAE,CACd,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,EACxC,IAAI,CAAC,EAAE,MAAM,YAAA;IAGhB,UAAU;IAKV,OAAO,CAAC,UAAU,EAAE,MAAM;IAOhC,cAAc,IAAI,MAAM,EAAE;CAY3B;AAwGD,oBAAY,iBAAiB;IAC3B,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,UAAU,eAAe;IACzB,MAAM,WAAW;CAClB;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,EAAE,CAAC;AAEJ,UAAU,WAAW;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,mBAAmB;IAU5B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,cAAc,CAAC;IACvB,OAAO,CAAC,MAAM,CAAC;IACf,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,aAAa,CAAC;IAdxB,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,UAAU,CAAS;IAE3B,kBAAkB,SAAmB;gBAG3B,SAAS,EAAE,aAAa,GAAG,oBAAoB,EAC/C,cAAc,CAAC,GAAE,CAAC,QAAQ,EAAE,0BAA0B,KAAK,IAAI,aAAA,EAC/D,MAAM,CAAC,EAAE,kBAAkB,YAAA,EAC3B,kBAAkB,GAAE,kBAA2C,EAC/D,UAAU,GAAE,OAAe,EAC3B,aAAa,CAAC,EAAE,aAAa,YAAA,EACrC,WAAW,CAAC,EAAE,WAAW;YAab,uBAAuB;IA0CrC,OAAO,CAAC,YAAY;YA6CN,aAAa;IAoB3B,OAAO,CAAC,4BAA4B;IAgBpC,OAAO,CAAC,mBAAmB;YAoBb,SAAS;IAsBV,UAAU,CACrB,YAAY,EAAE,eAAe,EAAE,GAC9B,OAAO,CAAC,0BAA0B,CAAC;IA0GzB,IAAI,CACf,KAAK,EAAE,eAAe,EAAE,GACvB,OAAO,CAAC,0BAA0B,CAAC;YA8BxB,6BAA6B;YA4I7B,qBAAqB;YAgDrB,eAAe;YA0Df,eAAe;CA4D9B"}
@@ -6,15 +6,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.TransactionsManager = exports.TransactionStatus = exports.TransactionItem = exports.TransactionTooLargeError = void 0;
7
7
  const bs58_1 = __importDefault(require("bs58"));
8
8
  const umi_1 = require("@metaplex-foundation/umi");
9
- const solanaUtils_1 = require("../utils/solanaUtils");
10
- const generalUtils_1 = require("../utils/generalUtils");
9
+ const solanaUtils_1 = require("../../utils/solanaUtils");
10
+ const generalUtils_1 = require("../../utils/generalUtils");
11
11
  const transactionUtils_1 = require("./transactionUtils");
12
- const types_1 = require("../types");
12
+ const types_1 = require("../../types");
13
13
  const web3_js_1 = require("@solana/web3.js");
14
- const switchboardConstants_1 = require("../constants/switchboardConstants");
15
- const utils_1 = require("../utils");
16
- const jitoUtils_1 = require("../utils/jitoUtils");
17
- const constants_1 = require("../constants");
14
+ const switchboardConstants_1 = require("../../constants/switchboardConstants");
15
+ const utils_1 = require("../../utils");
16
+ const jitoUtils_1 = require("../../utils/jitoUtils");
17
+ const constants_1 = require("../../constants");
18
18
  const CHORES_TX_NAME = "account chores";
19
19
  const MAX_SUPPORTED_ACCOUNT_LOCKS = 64;
20
20
  class TransactionTooLargeError extends Error {
@@ -265,8 +265,10 @@ class TransactionsManager {
265
265
  });
266
266
  }
267
267
  async updateLut(tx, newLut) {
268
+ const lutInputs = await (0, solanaUtils_1.getAddressLookupInputs)(this.txHandler.umi, this.txHandler.defaultLookupTables());
268
269
  const updateLutTxName = `${newLut ? "create" : "update"} lookup table`;
269
- await (0, generalUtils_1.retryWithExponentialBackoff)(async (attemptNum, prevError) => await this.sendTransaction(tx, updateLutTxName, attemptNum, this.getUpdatedPriorityFeeSetting(prevError, attemptNum), "skip-simulation"), this.signableRetries, 150, this.errorsToThrow);
270
+ await (0, generalUtils_1.retryWithExponentialBackoff)(async (attemptNum, prevError) => await this.sendTransaction(tx.setAddressLookupTables(lutInputs), updateLutTxName, attemptNum, this.getUpdatedPriorityFeeSetting(prevError, attemptNum), "skip-simulation"), this.signableRetries, 150, this.errorsToThrow);
271
+ await this.txHandler.refetchReferralState();
270
272
  }
271
273
  async clientSend(transactions) {
272
274
  const items = [...transactions];
@@ -0,0 +1,4 @@
1
+ export * from "./solautoPositionEx";
2
+ export * from "./marginfiSolautoPositionEx";
3
+ export * from "./utils";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,SAAS,CAAC"}
@@ -0,0 +1,19 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./solautoPositionEx"), exports);
18
+ __exportStar(require("./marginfiSolautoPositionEx"), exports);
19
+ __exportStar(require("./utils"), exports);
@@ -0,0 +1,14 @@
1
+ import { PublicKey } from "@solana/web3.js";
2
+ import { SolautoPositionEx } from "./solautoPositionEx";
3
+ export declare class MarginfiSolautoPositionEx extends SolautoPositionEx {
4
+ private marginfiAccountData;
5
+ private supplyBank;
6
+ private debtBank;
7
+ lendingPool(): Promise<PublicKey>;
8
+ maxLtvAndLiqThresholdBps(): Promise<[number, number]>;
9
+ supplyLiquidityAvailable(): bigint;
10
+ supplyLiquidityDepositable(): bigint;
11
+ debtLiquidityAvailable(): bigint;
12
+ refreshPositionState(): Promise<void>;
13
+ }
14
+ //# sourceMappingURL=marginfiSolautoPositionEx.d.ts.map
@@ -0,0 +1 @@
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,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAkBxD,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;IAIlC,0BAA0B,IAAI,MAAM;IAIpC,sBAAsB,IAAI,MAAM;IAI1B,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;CAyB5C"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MarginfiSolautoPositionEx = void 0;
4
+ const web3_js_1 = require("@solana/web3.js");
5
+ const solautoPositionEx_1 = require("./solautoPositionEx");
6
+ const marginfi_sdk_1 = require("../marginfi-sdk");
7
+ const umi_1 = require("@metaplex-foundation/umi");
8
+ const umi_web3js_adapters_1 = require("@metaplex-foundation/umi-web3js-adapters");
9
+ const utils_1 = require("../utils");
10
+ const constants_1 = require("../constants");
11
+ class MarginfiSolautoPositionEx extends solautoPositionEx_1.SolautoPositionEx {
12
+ constructor() {
13
+ super(...arguments);
14
+ this.marginfiAccountData = null;
15
+ this.supplyBank = null;
16
+ this.debtBank = null;
17
+ }
18
+ async lendingPool() {
19
+ if (this.lp) {
20
+ return this.lp;
21
+ }
22
+ if (!this.marginfiAccountData &&
23
+ this.lpUserAccount &&
24
+ !this.lpUserAccount.equals(web3_js_1.PublicKey.default)) {
25
+ this.marginfiAccountData = await (0, marginfi_sdk_1.fetchMarginfiAccount)(this.umi, (0, umi_1.publicKey)(this.lpUserAccount), { commitment: "confirmed" });
26
+ this.lp = (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.marginfiAccountData.group);
27
+ }
28
+ if (!this.lp) {
29
+ this.lp = new web3_js_1.PublicKey(constants_1.DEFAULT_MARGINFI_GROUP);
30
+ }
31
+ return this.lp;
32
+ }
33
+ async maxLtvAndLiqThresholdBps() {
34
+ if (!this.supplyBank || !this.debtBank) {
35
+ const group = (await this.lendingPool()).toString();
36
+ const supplyBank = constants_1.MARGINFI_ACCOUNTS[group][this.supplyMint().toString()].bank;
37
+ const debtBank = constants_1.MARGINFI_ACCOUNTS[group][this.debtMint().toString()].bank;
38
+ [this.supplyBank, this.debtBank] = await (0, marginfi_sdk_1.safeFetchAllBank)(this.umi, [
39
+ (0, umi_1.publicKey)(supplyBank),
40
+ (0, umi_1.publicKey)(debtBank),
41
+ ]);
42
+ }
43
+ const [supplyPrice] = await (0, utils_1.fetchTokenPrices)([this.supplyMint()]);
44
+ const [maxLtv, liqThreshold] = (0, utils_1.calcMarginfiMaxLtvAndLiqThreshold)(this.supplyBank, this.debtBank, supplyPrice);
45
+ return [(0, utils_1.toBps)(maxLtv), (0, utils_1.toBps)(liqThreshold)];
46
+ }
47
+ supplyLiquidityAvailable() {
48
+ return (0, utils_1.getBankLiquidityAvailableBaseUnit)(this.supplyBank, false);
49
+ }
50
+ supplyLiquidityDepositable() {
51
+ return (0, utils_1.getBankLiquidityAvailableBaseUnit)(this.supplyBank, true);
52
+ }
53
+ debtLiquidityAvailable() {
54
+ return (0, utils_1.getBankLiquidityAvailableBaseUnit)(this.debtBank, false);
55
+ }
56
+ async refreshPositionState() {
57
+ if (!this.canRefreshPositionState()) {
58
+ return;
59
+ }
60
+ const useDesignatedMint = !this._data.position || !this._data.selfManaged;
61
+ const resp = await (0, utils_1.getMarginfiAccountPositionState)(this.umi, { pk: this.lpUserAccount }, await this.lendingPool(), useDesignatedMint
62
+ ? { mint: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.state().supply.mint) }
63
+ : undefined, useDesignatedMint
64
+ ? { mint: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.state().debt.mint) }
65
+ : undefined, this.contextUpdates);
66
+ if (resp) {
67
+ this.supplyBank = resp.supplyBank;
68
+ this.debtBank = resp.debtBank;
69
+ this._data.state = resp.state;
70
+ }
71
+ }
72
+ }
73
+ exports.MarginfiSolautoPositionEx = MarginfiSolautoPositionEx;
@@ -0,0 +1,67 @@
1
+ import { PublicKey } from "@solana/web3.js";
2
+ import { DCASettings, LendingPlatform, PositionState, SolautoPosition, SolautoSettingsParameters } from "../generated";
3
+ import { Umi } from "@metaplex-foundation/umi";
4
+ import { ContextUpdates } from "../utils";
5
+ import { RebalanceAction } from "../types";
6
+ export interface PositionCustomArgs {
7
+ lendingPlatform: LendingPlatform;
8
+ supplyMint?: PublicKey;
9
+ debtMint?: PublicKey;
10
+ lendingPool?: PublicKey;
11
+ lpUserAccount?: PublicKey;
12
+ }
13
+ interface SolautoPositionExData extends Partial<SolautoPosition> {
14
+ state: PositionState;
15
+ }
16
+ interface PositionExArgs {
17
+ umi: Umi;
18
+ publicKey: PublicKey;
19
+ data: SolautoPositionExData;
20
+ customArgs?: PositionCustomArgs;
21
+ contextUpdates?: ContextUpdates;
22
+ }
23
+ export declare abstract class SolautoPositionEx {
24
+ umi: Umi;
25
+ publicKey: PublicKey;
26
+ protected _data: SolautoPositionExData;
27
+ protected lp?: PublicKey;
28
+ lpUserAccount?: PublicKey;
29
+ protected contextUpdates?: ContextUpdates;
30
+ private readonly firstState;
31
+ constructor(args: PositionExArgs);
32
+ abstract lendingPool(): Promise<PublicKey>;
33
+ exists(): boolean;
34
+ strategyName(): string;
35
+ data(): SolautoPositionExData;
36
+ state(): PositionState;
37
+ settings(): SolautoSettingsParameters | undefined;
38
+ dca(): DCASettings | undefined;
39
+ supplyMint(): PublicKey;
40
+ debtMint(): PublicKey;
41
+ boostToBps(): number;
42
+ boostFromBps(): number;
43
+ repayToBps(): number;
44
+ repayFromBps(): number;
45
+ netWorth(): number;
46
+ netWorthUsd(): number;
47
+ totalSupply(): number;
48
+ supplyUsd(): number;
49
+ totalDebt(): number;
50
+ debtUsd(): number;
51
+ supplyLiquidityUsdDepositable(): number;
52
+ debtLiquidityUsdAvailable(): number;
53
+ abstract maxLtvAndLiqThresholdBps(): Promise<[number, number]>;
54
+ abstract supplyLiquidityDepositable(): bigint;
55
+ abstract supplyLiquidityAvailable(): bigint;
56
+ abstract debtLiquidityAvailable(): bigint;
57
+ sufficientLiquidityToBoost(): boolean;
58
+ eligibleForRebalance(bpsDistanceThreshold?: number): RebalanceAction | undefined;
59
+ eligibleForRefresh(): boolean;
60
+ protected canRefreshPositionState(): boolean;
61
+ abstract refreshPositionState(): Promise<void>;
62
+ utilizationRateBpsDrift(): Promise<number>;
63
+ updateWithLatestPrices(supplyPrice?: number, debtPrice?: number): Promise<void>;
64
+ refetchPositionData(): Promise<void>;
65
+ }
66
+ export {};
67
+ //# sourceMappingURL=solautoPositionEx.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solautoPositionEx.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/solautoPositionEx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,WAAW,EAEX,eAAe,EACf,aAAa,EACb,eAAe,EACf,yBAAyB,EAC1B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAC/C,OAAO,EAQL,cAAc,EASf,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAQ3C,MAAM,WAAW,kBAAkB;IACjC,eAAe,EAAE,eAAe,CAAC;IACjC,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,aAAa,CAAC,EAAE,SAAS,CAAC;CAC3B;AAED,UAAU,qBAAsB,SAAQ,OAAO,CAAC,eAAe,CAAC;IAC9D,KAAK,EAAE,aAAa,CAAC;CACtB;AAED,UAAU,cAAc;IACtB,GAAG,EAAE,GAAG,CAAC;IACT,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,EAAE,qBAAqB,CAAC;IAC5B,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,8BAAsB,iBAAiB;IAC9B,GAAG,EAAG,GAAG,CAAC;IACV,SAAS,EAAG,SAAS,CAAC;IAC7B,SAAS,CAAC,KAAK,EAAG,qBAAqB,CAAC;IACxC,SAAS,CAAC,EAAE,CAAC,EAAE,SAAS,CAAa;IAC9B,aAAa,CAAC,EAAE,SAAS,CAAa;IAC7C,SAAS,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IAE1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB;gBAEhC,IAAI,EAAE,cAAc;IAgBhC,QAAQ,CAAC,WAAW,IAAI,OAAO,CAAC,SAAS,CAAC;IAE1C,MAAM;IAIN,YAAY;IAOZ,IAAI,IAAI,qBAAqB;IAI7B,KAAK,IAAI,aAAa;IAItB,QAAQ,IAAI,yBAAyB,GAAG,SAAS;IAIjD,GAAG,IAAI,WAAW,GAAG,SAAS;IAI9B,UAAU,IAAI,SAAS;IAIvB,QAAQ,IAAI,SAAS;IAIrB,UAAU;IAOV,YAAY;IAIZ,UAAU;IAOV,YAAY;IAMZ,QAAQ;IAIR,WAAW;IAIX,WAAW;IAIX,SAAS;IAIT,SAAS;IAIT,OAAO;IAIP,6BAA6B;IAI7B,yBAAyB;IAIzB,QAAQ,CAAC,wBAAwB,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9D,QAAQ,CAAC,0BAA0B,IAAI,MAAM;IAC7C,QAAQ,CAAC,wBAAwB,IAAI,MAAM;IAC3C,QAAQ,CAAC,sBAAsB,IAAI,MAAM;IAEzC,0BAA0B;IA0B1B,oBAAoB,CAAC,oBAAoB,SAAI,GAAG,eAAe,GAAG,SAAS;IAqB3E,kBAAkB,IAAI,OAAO;IAS7B,SAAS,CAAC,uBAAuB;IAWjC,QAAQ,CAAC,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAExC,uBAAuB;IAiBvB,sBAAsB,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;IAQ/D,mBAAmB;CAM1B"}
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SolautoPositionEx = void 0;
4
+ const generated_1 = require("../generated");
5
+ const utils_1 = require("../utils");
6
+ const rebalance_1 = require("../services/rebalance");
7
+ const constants_1 = require("../constants");
8
+ const umi_web3js_adapters_1 = require("@metaplex-foundation/umi-web3js-adapters");
9
+ class SolautoPositionEx {
10
+ constructor(args) {
11
+ this.lp = undefined;
12
+ this.lpUserAccount = undefined;
13
+ this.umi = args.umi;
14
+ this.publicKey = args.publicKey;
15
+ this.contextUpdates = args.contextUpdates;
16
+ this.lp = args.customArgs?.lendingPool;
17
+ this.lpUserAccount =
18
+ args.customArgs?.lpUserAccount ??
19
+ (args.data.position
20
+ ? (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(args.data.position.protocolUserAccount)
21
+ : undefined);
22
+ this._data = args.data;
23
+ this.firstState = { ...args.data.state };
24
+ }
25
+ exists() {
26
+ return this._data.position !== undefined;
27
+ }
28
+ strategyName() {
29
+ return (0, utils_1.solautoStrategyName)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.state().supply.mint), (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.state().debt.mint));
30
+ }
31
+ data() {
32
+ return this._data;
33
+ }
34
+ state() {
35
+ return this.data().state;
36
+ }
37
+ settings() {
38
+ return this.contextUpdates?.settings ?? this.data().position?.settings;
39
+ }
40
+ dca() {
41
+ return this.contextUpdates?.dca ?? this.data().position?.dca;
42
+ }
43
+ supplyMint() {
44
+ return (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.state().supply.mint);
45
+ }
46
+ debtMint() {
47
+ return (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.state().debt.mint);
48
+ }
49
+ boostToBps() {
50
+ return Math.min(this.settings()?.boostToBps ?? 0, (0, utils_1.maxBoostToBps)(this.state().maxLtvBps, this.state().liqThresholdBps));
51
+ }
52
+ boostFromBps() {
53
+ return this.boostToBps() - (this.settings()?.boostGap ?? 0);
54
+ }
55
+ repayToBps() {
56
+ return Math.min(this.settings()?.repayToBps ?? 0, (0, utils_1.maxRepayToBps)(this.state().maxLtvBps, this.state().liqThresholdBps));
57
+ }
58
+ repayFromBps() {
59
+ return ((this.settings()?.repayToBps ?? 0) + (this.settings()?.repayGap ?? 0));
60
+ }
61
+ netWorth() {
62
+ return (0, utils_1.calcNetWorth)(this.state());
63
+ }
64
+ netWorthUsd() {
65
+ return (0, utils_1.calcNetWorthUsd)(this.state());
66
+ }
67
+ totalSupply() {
68
+ return (0, utils_1.calcTotalSupply)(this.state());
69
+ }
70
+ supplyUsd() {
71
+ return (0, utils_1.calcSupplyUsd)(this.state());
72
+ }
73
+ totalDebt() {
74
+ return (0, utils_1.calcTotalDebt)(this.state());
75
+ }
76
+ debtUsd() {
77
+ return (0, utils_1.calcDebtUsd)(this.state());
78
+ }
79
+ supplyLiquidityUsdDepositable() {
80
+ return (0, utils_1.supplyLiquidityUsdDepositable)(this.state());
81
+ }
82
+ debtLiquidityUsdAvailable() {
83
+ return (0, utils_1.debtLiquidityUsdAvailable)(this.state());
84
+ }
85
+ sufficientLiquidityToBoost() {
86
+ const limitsUpToDate = this.debtLiquidityUsdAvailable() !== 0 ||
87
+ this.supplyLiquidityUsdDepositable() !== 0;
88
+ if (limitsUpToDate) {
89
+ const { debtAdjustmentUsd } = (0, rebalance_1.getDebtAdjustment)(this.state().liqThresholdBps, { supplyUsd: this.supplyUsd(), debtUsd: this.debtUsd() }, { solauto: 50, lpBorrow: 50, flashLoan: 50 }, // TODO: add better fix here instead of magic numbers
90
+ this.boostToBps());
91
+ const sufficientLiquidity = this.debtLiquidityUsdAvailable() * 0.95 > debtAdjustmentUsd &&
92
+ this.supplyLiquidityUsdDepositable() * 0.95 > debtAdjustmentUsd;
93
+ if (!sufficientLiquidity) {
94
+ (0, utils_1.consoleLog)("Insufficient liquidity to further boost");
95
+ }
96
+ return sufficientLiquidity;
97
+ }
98
+ return true;
99
+ }
100
+ eligibleForRebalance(bpsDistanceThreshold = 0) {
101
+ if (!this.settings() || !(0, utils_1.calcSupplyUsd)(this.state())) {
102
+ return undefined;
103
+ }
104
+ if (this.state().liqUtilizationRateBps - this.boostFromBps() <=
105
+ bpsDistanceThreshold) {
106
+ const sufficientLiquidity = this.sufficientLiquidityToBoost();
107
+ return sufficientLiquidity ? "boost" : undefined;
108
+ }
109
+ else if (this.repayFromBps() - this.state().liqUtilizationRateBps <=
110
+ bpsDistanceThreshold) {
111
+ return "repay";
112
+ }
113
+ return undefined;
114
+ }
115
+ eligibleForRefresh() {
116
+ if (this._data.selfManaged)
117
+ return false;
118
+ return ((0, utils_1.currentUnixSeconds)() - Number(this.state().lastRefreshed) >
119
+ 60 * 60 * 24 * 7);
120
+ }
121
+ canRefreshPositionState() {
122
+ if (Number(this.state().lastRefreshed) >
123
+ (0, utils_1.currentUnixSeconds)() - constants_1.MIN_POSITION_STATE_FRESHNESS_SECS &&
124
+ !this.contextUpdates?.positionUpdates()) {
125
+ return false;
126
+ }
127
+ return true;
128
+ }
129
+ async utilizationRateBpsDrift() {
130
+ const supplyPrice = (0, utils_1.safeGetPrice)(this.state().supply.mint) ?? 0;
131
+ const debtPrice = (0, utils_1.safeGetPrice)(this.state().debt.mint) ?? 0;
132
+ const oldState = await (0, utils_1.positionStateWithLatestPrices)(this.firstState, supplyPrice, debtPrice);
133
+ const newState = await (0, utils_1.positionStateWithLatestPrices)(this.state(), supplyPrice, debtPrice);
134
+ return newState.liqUtilizationRateBps - oldState.liqUtilizationRateBps;
135
+ }
136
+ async updateWithLatestPrices(supplyPrice, debtPrice) {
137
+ this._data.state = await (0, utils_1.positionStateWithLatestPrices)(this.state(), supplyPrice, debtPrice);
138
+ }
139
+ async refetchPositionData() {
140
+ this._data = await (0, generated_1.fetchSolautoPosition)(this.umi, (0, umi_web3js_adapters_1.fromWeb3JsPublicKey)(this.publicKey));
141
+ }
142
+ }
143
+ exports.SolautoPositionEx = SolautoPositionEx;