@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
@@ -8,6 +8,8 @@ exports.calcTotalSupply = calcTotalSupply;
8
8
  exports.calcTotalDebt = calcTotalDebt;
9
9
  exports.debtLiquidityUsdAvailable = debtLiquidityUsdAvailable;
10
10
  exports.supplyLiquidityUsdDepositable = supplyLiquidityUsdDepositable;
11
+ exports.fromRoundedUsdValue = fromRoundedUsdValue;
12
+ exports.toRoundedUsdValue = toRoundedUsdValue;
11
13
  exports.getLiqUtilzationRateBps = getLiqUtilzationRateBps;
12
14
  exports.toBaseUnit = toBaseUnit;
13
15
  exports.fromBaseUnit = fromBaseUnit;
@@ -16,21 +18,19 @@ exports.toBps = toBps;
16
18
  exports.bytesToI80F48 = bytesToI80F48;
17
19
  exports.uint8ArrayToBigInt = uint8ArrayToBigInt;
18
20
  exports.getDebtAdjustmentUsd = getDebtAdjustmentUsd;
19
- exports.getSolautoFeesBps = getSolautoFeesBps;
20
21
  exports.getMaxLiqUtilizationRateBps = getMaxLiqUtilizationRateBps;
21
22
  exports.maxRepayFromBps = maxRepayFromBps;
22
23
  exports.maxRepayToBps = maxRepayToBps;
23
24
  exports.maxBoostToBps = maxBoostToBps;
24
25
  const constants_1 = require("../constants");
25
- const generated_1 = require("../generated");
26
26
  function calcNetWorthUsd(state) {
27
- return fromBaseUnit(state?.netWorth.baseAmountUsdValue ?? BigInt(0), constants_1.USD_DECIMALS);
27
+ return fromRoundedUsdValue(state?.netWorth.baseAmountUsdValue ?? BigInt(0));
28
28
  }
29
29
  function calcSupplyUsd(state) {
30
- return fromBaseUnit(state?.supply.amountUsed.baseAmountUsdValue ?? BigInt(0), constants_1.USD_DECIMALS);
30
+ return fromRoundedUsdValue(state?.supply.amountUsed.baseAmountUsdValue ?? BigInt(0));
31
31
  }
32
32
  function calcDebtUsd(state) {
33
- return fromBaseUnit(state?.debt.amountUsed.baseAmountUsdValue ?? BigInt(0), constants_1.USD_DECIMALS);
33
+ return fromRoundedUsdValue(state?.debt.amountUsed.baseAmountUsdValue ?? BigInt(0));
34
34
  }
35
35
  function calcNetWorth(state) {
36
36
  return fromBaseUnit(state?.netWorth.baseUnit ?? BigInt(0), state?.supply.decimals ?? 1);
@@ -42,10 +42,16 @@ function calcTotalDebt(state) {
42
42
  return fromBaseUnit(state?.debt.amountUsed.baseUnit ?? BigInt(0), state?.debt.decimals ?? 1);
43
43
  }
44
44
  function debtLiquidityUsdAvailable(state) {
45
- return fromBaseUnit(state?.debt.amountCanBeUsed.baseAmountUsdValue ?? BigInt(0), constants_1.USD_DECIMALS);
45
+ return fromRoundedUsdValue(state?.debt.amountCanBeUsed.baseAmountUsdValue ?? BigInt(0));
46
46
  }
47
47
  function supplyLiquidityUsdDepositable(state) {
48
- return fromBaseUnit(state?.supply.amountCanBeUsed.baseAmountUsdValue ?? BigInt(0), constants_1.USD_DECIMALS);
48
+ return fromRoundedUsdValue(state?.supply.amountCanBeUsed.baseAmountUsdValue ?? BigInt(0));
49
+ }
50
+ function fromRoundedUsdValue(number) {
51
+ return fromBaseUnit(number, constants_1.USD_DECIMALS);
52
+ }
53
+ function toRoundedUsdValue(number) {
54
+ return toBaseUnit(number, constants_1.USD_DECIMALS);
49
55
  }
50
56
  function getLiqUtilzationRateBps(supplyUsd, debtUsd, liqThresholdBps) {
51
57
  if (supplyUsd === 0 || debtUsd === 0) {
@@ -105,47 +111,6 @@ function getDebtAdjustmentUsd(liqThresholdBps, supplyUsd, debtUsd, targetLiqUtil
105
111
  (1 - targetLiqUtilizationRate * (1 - adjustmentFee) * liqThreshold);
106
112
  return debtAdjustmentUsd;
107
113
  }
108
- function getSolautoFeesBps(isReferred, targetLiqUtilizationRateBps, positionNetWorthUsd, rebalanceDirection) {
109
- const minSize = 10000; // Minimum position size
110
- const maxSize = 250000; // Maximum position size
111
- const maxFeeBps = 50; // Fee in basis points for minSize (0.5%)
112
- const minFeeBps = 25; // Fee in basis points for maxSize (0.25%)
113
- const k = 1.5;
114
- if (targetLiqUtilizationRateBps !== undefined &&
115
- targetLiqUtilizationRateBps === 0) {
116
- return {
117
- solauto: 0,
118
- referrer: 0,
119
- total: 0,
120
- };
121
- }
122
- let feeBps = 0;
123
- if (targetLiqUtilizationRateBps !== undefined ||
124
- rebalanceDirection === generated_1.RebalanceDirection.Repay) {
125
- feeBps = 25;
126
- }
127
- else if (positionNetWorthUsd <= minSize) {
128
- feeBps = maxFeeBps;
129
- }
130
- else if (positionNetWorthUsd >= maxSize) {
131
- feeBps = minFeeBps;
132
- }
133
- else {
134
- const t = (Math.log(positionNetWorthUsd) - Math.log(minSize)) /
135
- (Math.log(maxSize) - Math.log(minSize));
136
- feeBps = Math.round(minFeeBps + (maxFeeBps - minFeeBps) * (1 - Math.pow(t, k)));
137
- }
138
- let referrer = 0;
139
- if (isReferred) {
140
- feeBps *= 0.9;
141
- referrer = Math.floor(feeBps * 0.15);
142
- }
143
- return {
144
- solauto: feeBps - referrer,
145
- referrer,
146
- total: feeBps,
147
- };
148
- }
149
114
  function getMaxLiqUtilizationRateBps(maxLtvBps, liqThresholdBps, offsetFromMaxLtv) {
150
115
  return (toBps((fromBps(maxLtvBps) - offsetFromMaxLtv) / fromBps(liqThresholdBps)) -
151
116
  1); // -1 to account for any rounding issues
@@ -29,8 +29,8 @@ const accountUtils_1 = require("./accountUtils");
29
29
  const generalUtils_1 = require("./generalUtils");
30
30
  const marginfi_sdk_1 = require("../marginfi-sdk");
31
31
  const types_1 = require("../types");
32
- const solauto_1 = require("./solauto");
33
32
  const constants_1 = require("../constants");
33
+ const solautoUtils_1 = require("./solautoUtils");
34
34
  function buildHeliusApiUrl(heliusApiKey) {
35
35
  return `https://mainnet.helius-rpc.com/?api-key=${heliusApiKey}`;
36
36
  }
@@ -44,7 +44,7 @@ function getSolanaRpcConnection(rpcUrl, programId = constants_1.SOLAUTO_PROD_PRO
44
44
  });
45
45
  const umi = (0, umi_bundle_defaults_1.createUmi)(connection).use({
46
46
  install(umi) {
47
- umi.programs.add((0, solauto_1.createDynamicSolautoProgram)(programId), false);
47
+ umi.programs.add((0, solautoUtils_1.createDynamicSolautoProgram)(programId), false);
48
48
  },
49
49
  });
50
50
  return [connection, umi];
@@ -1,29 +1,18 @@
1
1
  import { PublicKey } from "@solana/web3.js";
2
2
  import { Program, Umi } from "@metaplex-foundation/umi";
3
- import { AutomationSettings, DCASettings, DCASettingsInpArgs, PositionState, PositionType, SolautoSettingsParameters, SolautoSettingsParametersInpArgs, TokenType } from "../../generated";
4
- import { RebalanceAction, SolautoPositionDetails } from "../../types/solauto";
3
+ import { AutomationSettings, DCASettings, DCASettingsInpArgs, LendingPlatform, PositionState, PositionType, SolautoRebalanceType, SolautoSettingsParameters, SolautoSettingsParametersInpArgs, TokenType } from "../generated";
4
+ import { SolautoPositionDetails } from "../types/solauto";
5
5
  import { QuoteResponse } from "@jup-ag/api";
6
+ import { SolautoClient, SolautoMarginfiClient, TxHandlerProps } from "../services";
6
7
  export declare function createDynamicSolautoProgram(programId: PublicKey): Program;
7
8
  export declare function nextAutomationPeriodTimestamp(automation: AutomationSettings): number;
8
9
  export declare function eligibleForNextAutomationPeriod(automation: AutomationSettings, currentUnixTime: number): boolean;
9
10
  export declare function getUpdatedValueFromAutomation(currValue: number, targetValue: number, automation: AutomationSettings, currentUnixTimestamp: number): number;
10
- export declare function getAdjustedSettingsFromAutomation(settings: SolautoSettingsParameters, currentUnixTime: number): SolautoSettingsParameters;
11
- export declare function sufficientLiquidityToBoost(positionState: PositionState, positionSettings: SolautoSettingsParameters | undefined, positionDca: DCASettings | undefined, supplyMintPrice: number, debtMintPrice: number): boolean;
12
- export declare function eligibleForRebalance(positionState: PositionState, positionSettings: SolautoSettingsParameters | undefined, positionDca: DCASettings | undefined, currentUnixTime: number, supplyMintPrice: number, debtMintPrice: number, bpsDistanceThreshold?: number): RebalanceAction | undefined;
13
- export declare function eligibleForRefresh(positionState: PositionState, positionSettings: SolautoSettingsParameters, currentUnixTime: number): boolean;
14
11
  export declare function getSolautoManagedPositions(umi: Umi, authority?: PublicKey, positionTypeFilter?: PositionType): Promise<SolautoPositionDetails[]>;
15
12
  export declare function getAllReferralStates(umi: Umi): Promise<PublicKey[]>;
16
13
  export declare function getReferralsByUser(umi: Umi, user: PublicKey): Promise<PublicKey[]>;
17
14
  export declare function getAllPositionsByAuthority(umi: Umi, user: PublicKey, positionTypeFilter?: PositionType): Promise<SolautoPositionDetails[]>;
18
15
  export declare function positionStateWithLatestPrices(state: PositionState, supplyPrice?: number, debtPrice?: number): Promise<PositionState>;
19
- interface AssetProps {
20
- mint: PublicKey;
21
- price?: number;
22
- amountUsed?: number;
23
- amountCanBeUsed?: number;
24
- }
25
- export declare function createFakePositionState(supply: AssetProps, debt: AssetProps, maxLtvBps: number, liqThresholdBps: number): PositionState;
26
- export declare function createSolautoSettings(settings: SolautoSettingsParametersInpArgs): SolautoSettingsParameters;
27
16
  type ContextAdjustment = {
28
17
  type: "supply";
29
18
  value: bigint;
@@ -53,7 +42,7 @@ export declare class ContextUpdates {
53
42
  supplyAdjustment: bigint;
54
43
  debtAdjustment: bigint;
55
44
  settings: SolautoSettingsParameters | undefined;
56
- activeDca: DCASettings | undefined;
45
+ dca: DCASettings | undefined;
57
46
  dcaInBalance?: {
58
47
  amount: bigint;
59
48
  tokenType: TokenType;
@@ -64,5 +53,9 @@ export declare class ContextUpdates {
64
53
  reset(): void;
65
54
  positionUpdates(): boolean;
66
55
  }
56
+ export declare function getClient(lendingPlatform: LendingPlatform, txHandlerProps: TxHandlerProps): SolautoMarginfiClient | undefined;
57
+ export declare function isMarginfiClient(client: SolautoClient): client is SolautoMarginfiClient;
58
+ export declare function hasFirstRebalance(rebalanceType: SolautoRebalanceType): boolean;
59
+ export declare function hasLastRebalance(rebalanceType: SolautoRebalanceType): boolean;
67
60
  export {};
68
- //# sourceMappingURL=generalUtils.d.ts.map
61
+ //# sourceMappingURL=solautoUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solautoUtils.d.ts","sourceRoot":"","sources":["../../src/utils/solautoUtils.ts"],"names":[],"mappings":"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"}
@@ -5,28 +5,26 @@ exports.createDynamicSolautoProgram = createDynamicSolautoProgram;
5
5
  exports.nextAutomationPeriodTimestamp = nextAutomationPeriodTimestamp;
6
6
  exports.eligibleForNextAutomationPeriod = eligibleForNextAutomationPeriod;
7
7
  exports.getUpdatedValueFromAutomation = getUpdatedValueFromAutomation;
8
- exports.getAdjustedSettingsFromAutomation = getAdjustedSettingsFromAutomation;
9
- exports.sufficientLiquidityToBoost = sufficientLiquidityToBoost;
10
- exports.eligibleForRebalance = eligibleForRebalance;
11
- exports.eligibleForRefresh = eligibleForRefresh;
12
8
  exports.getSolautoManagedPositions = getSolautoManagedPositions;
13
9
  exports.getAllReferralStates = getAllReferralStates;
14
10
  exports.getReferralsByUser = getReferralsByUser;
15
11
  exports.getAllPositionsByAuthority = getAllPositionsByAuthority;
16
12
  exports.positionStateWithLatestPrices = positionStateWithLatestPrices;
17
- exports.createFakePositionState = createFakePositionState;
18
- exports.createSolautoSettings = createSolautoSettings;
13
+ exports.getClient = getClient;
14
+ exports.isMarginfiClient = isMarginfiClient;
15
+ exports.hasFirstRebalance = hasFirstRebalance;
16
+ exports.hasLastRebalance = hasLastRebalance;
19
17
  const web3_js_1 = require("@solana/web3.js");
20
18
  const umi_1 = require("@metaplex-foundation/umi");
21
- const generated_1 = require("../../generated");
22
- const generalUtils_1 = require("../generalUtils");
23
- const numberUtils_1 = require("../numberUtils");
24
- const accountUtils_1 = require("../accountUtils");
19
+ const generated_1 = require("../generated");
20
+ const accountUtils_1 = require("./accountUtils");
25
21
  const umi_web3js_adapters_1 = require("@metaplex-foundation/umi-web3js-adapters");
26
- const constants_1 = require("../../constants");
27
- const marginfiUtils_1 = require("../marginfiUtils");
28
- const priceUtils_1 = require("../priceUtils");
29
- const rebalanceUtils_1 = require("./rebalanceUtils");
22
+ const constants_1 = require("../constants");
23
+ const marginfiUtils_1 = require("./marginfiUtils");
24
+ const solautoPosition_1 = require("../solautoPosition");
25
+ const services_1 = require("../services");
26
+ const numberUtils_1 = require("./numberUtils");
27
+ const priceUtils_1 = require("./priceUtils");
30
28
  function createDynamicSolautoProgram(programId) {
31
29
  return {
32
30
  name: "solauto",
@@ -64,69 +62,6 @@ function getUpdatedValueFromAutomation(currValue, targetValue, automation, curre
64
62
  const newValue = currValue - currRateDiff * progressPct;
65
63
  return newValue;
66
64
  }
67
- function getAdjustedSettingsFromAutomation(settings, currentUnixTime) {
68
- const boostToBps = settings.automation.targetPeriods > 0 &&
69
- eligibleForNextAutomationPeriod(settings.automation, currentUnixTime)
70
- ? getUpdatedValueFromAutomation(settings.boostToBps, settings.targetBoostToBps, settings.automation, currentUnixTime)
71
- : settings.boostToBps;
72
- return {
73
- ...settings,
74
- boostToBps,
75
- };
76
- }
77
- function sufficientLiquidityToBoost(positionState, positionSettings, positionDca, supplyMintPrice, debtMintPrice) {
78
- const limitsUpToDate = positionState.supply.amountCanBeUsed.baseUnit > BigInt(0) ||
79
- positionState.debt.amountCanBeUsed.baseUnit > BigInt(0);
80
- if (limitsUpToDate) {
81
- const values = (0, rebalanceUtils_1.getRebalanceValues)(positionState, positionSettings, positionDca, (0, generalUtils_1.currentUnixSeconds)(), supplyMintPrice, debtMintPrice);
82
- const debtAvailable = (0, numberUtils_1.debtLiquidityUsdAvailable)(positionState);
83
- const supplyDepositable = (0, numberUtils_1.supplyLiquidityUsdDepositable)(positionState);
84
- const sufficientLiquidity = debtAvailable * 0.95 > values.debtAdjustmentUsd &&
85
- supplyDepositable * 0.95 > values.debtAdjustmentUsd;
86
- if (!sufficientLiquidity) {
87
- (0, generalUtils_1.consoleLog)("Insufficient liquidity to further boost");
88
- }
89
- return sufficientLiquidity;
90
- }
91
- return true;
92
- }
93
- function eligibleForRebalance(positionState, positionSettings, positionDca, currentUnixTime, supplyMintPrice, debtMintPrice, bpsDistanceThreshold = 0) {
94
- if (!positionSettings) {
95
- return undefined;
96
- }
97
- if (positionDca &&
98
- positionDca.automation.targetPeriods > 0 &&
99
- eligibleForNextAutomationPeriod(positionDca.automation, currentUnixTime)) {
100
- return "dca";
101
- }
102
- if (positionState.supply.amountUsed.baseUnit === BigInt(0)) {
103
- return undefined;
104
- }
105
- const boostToBps = eligibleForRefresh(positionState, positionSettings, currentUnixTime) &&
106
- positionSettings.automation.targetPeriods > 0
107
- ? getUpdatedValueFromAutomation(positionSettings.boostToBps, positionSettings.targetBoostToBps, positionSettings.automation, currentUnixTime)
108
- : positionSettings.boostToBps;
109
- const repayFrom = positionSettings.repayToBps + positionSettings.repayGap;
110
- const boostFrom = boostToBps - positionSettings.boostGap;
111
- if (positionState.liqUtilizationRateBps - boostFrom <= bpsDistanceThreshold) {
112
- const sufficientLiquidity = sufficientLiquidityToBoost(positionState, positionSettings, positionDca, supplyMintPrice, debtMintPrice);
113
- return sufficientLiquidity ? "boost" : undefined;
114
- }
115
- else if (repayFrom - positionState.liqUtilizationRateBps <=
116
- bpsDistanceThreshold) {
117
- return "repay";
118
- }
119
- return undefined;
120
- }
121
- function eligibleForRefresh(positionState, positionSettings, currentUnixTime) {
122
- if (positionSettings.automation.targetPeriods > 0) {
123
- return eligibleForNextAutomationPeriod(positionSettings.automation, currentUnixTime);
124
- }
125
- else {
126
- return ((0, generalUtils_1.currentUnixSeconds)() - Number(positionState.lastUpdated) >
127
- 60 * 60 * 24 * 7);
128
- }
129
- }
130
65
  async function getSolautoManagedPositions(umi, authority, positionTypeFilter) {
131
66
  // bump: [u8; 1]
132
67
  // position_id: [u8; 1]
@@ -288,117 +223,31 @@ async function positionStateWithLatestPrices(state, supplyPrice, debtPrice) {
288
223
  ...state,
289
224
  liqUtilizationRateBps: (0, numberUtils_1.getLiqUtilzationRateBps)(supplyUsd, debtUsd, state.liqThresholdBps),
290
225
  netWorth: {
291
- baseUnit: (0, numberUtils_1.toBaseUnit)(supplyPrice > 0 ? (supplyUsd - debtUsd) / supplyPrice : 0, state.supply.decimals),
292
- baseAmountUsdValue: (0, numberUtils_1.toBaseUnit)(supplyUsd - debtUsd, constants_1.USD_DECIMALS),
226
+ baseUnit: (0, numberUtils_1.toBaseUnit)(supplyUsd > 0 ? (supplyUsd - debtUsd) / supplyPrice : 0, state.supply.decimals),
227
+ baseAmountUsdValue: (0, numberUtils_1.toRoundedUsdValue)(supplyUsd - debtUsd),
293
228
  },
294
229
  supply: {
295
230
  ...state.supply,
296
231
  amountCanBeUsed: {
297
232
  ...state.supply.amountCanBeUsed,
298
- baseAmountUsdValue: (0, numberUtils_1.toBaseUnit)((0, numberUtils_1.fromBaseUnit)(state.supply.amountCanBeUsed.baseUnit, state.supply.decimals) * supplyPrice, constants_1.USD_DECIMALS),
233
+ baseAmountUsdValue: (0, numberUtils_1.toRoundedUsdValue)((0, numberUtils_1.fromBaseUnit)(state.supply.amountCanBeUsed.baseUnit, state.supply.decimals) * supplyPrice),
299
234
  },
300
235
  amountUsed: {
301
236
  ...state.supply.amountUsed,
302
- baseAmountUsdValue: (0, numberUtils_1.toBaseUnit)(supplyUsd, constants_1.USD_DECIMALS),
237
+ baseAmountUsdValue: (0, numberUtils_1.toRoundedUsdValue)(supplyUsd),
303
238
  },
304
239
  },
305
240
  debt: {
306
241
  ...state.debt,
307
242
  amountCanBeUsed: {
308
243
  ...state.debt.amountCanBeUsed,
309
- baseAmountUsdValue: (0, numberUtils_1.toBaseUnit)((0, numberUtils_1.fromBaseUnit)(state.debt.amountCanBeUsed.baseUnit, state.debt.decimals) * debtPrice, constants_1.USD_DECIMALS),
244
+ baseAmountUsdValue: (0, numberUtils_1.toRoundedUsdValue)((0, numberUtils_1.fromBaseUnit)(state.debt.amountCanBeUsed.baseUnit, state.debt.decimals) * debtPrice),
310
245
  },
311
246
  amountUsed: {
312
247
  ...state.debt.amountUsed,
313
- baseAmountUsdValue: (0, numberUtils_1.toBaseUnit)(debtUsd, constants_1.USD_DECIMALS),
314
- },
315
- },
316
- };
317
- }
318
- function createFakePositionState(supply, debt, maxLtvBps, liqThresholdBps) {
319
- const supplyDecimals = constants_1.TOKEN_INFO[supply.mint.toString()].decimals;
320
- const debtDecimals = constants_1.TOKEN_INFO[debt.mint.toString()].decimals;
321
- const supplyUsd = (supply.amountUsed ?? 0) * (supply.price ?? 0);
322
- const debtUsd = (debt.amountUsed ?? 0) * (debt.price ?? 0);
323
- return {
324
- liqUtilizationRateBps: (0, numberUtils_1.getLiqUtilzationRateBps)(supplyUsd, debtUsd, liqThresholdBps),
325
- supply: {
326
- amountUsed: {
327
- baseUnit: (0, numberUtils_1.toBaseUnit)(supply.amountUsed ?? 0, supplyDecimals),
328
- baseAmountUsdValue: (0, numberUtils_1.toBaseUnit)(supplyUsd, constants_1.USD_DECIMALS),
248
+ baseAmountUsdValue: (0, numberUtils_1.toRoundedUsdValue)(debtUsd),
329
249
  },
330
- amountCanBeUsed: {
331
- baseUnit: (0, numberUtils_1.toBaseUnit)(supply.amountCanBeUsed ?? 0, supplyDecimals),
332
- baseAmountUsdValue: (0, numberUtils_1.toBaseUnit)((supply.amountCanBeUsed ?? 0) * (supply.price ?? 0), constants_1.USD_DECIMALS),
333
- },
334
- baseAmountMarketPriceUsd: (0, numberUtils_1.toBaseUnit)(supply.price ?? 0, constants_1.USD_DECIMALS),
335
- borrowFeeBps: 0,
336
- decimals: supplyDecimals,
337
- flashLoanFeeBps: 0,
338
- mint: (0, umi_1.publicKey)(supply.mint),
339
- padding1: [],
340
- padding2: [],
341
- padding: new Uint8Array([]),
342
- },
343
- debt: {
344
- amountUsed: {
345
- baseUnit: (0, numberUtils_1.toBaseUnit)(debt.amountUsed ?? 0, debtDecimals),
346
- baseAmountUsdValue: (0, numberUtils_1.toBaseUnit)(debtUsd, constants_1.USD_DECIMALS),
347
- },
348
- amountCanBeUsed: {
349
- baseUnit: (0, numberUtils_1.toBaseUnit)(debt.amountCanBeUsed ?? 0, debtDecimals),
350
- baseAmountUsdValue: (0, numberUtils_1.toBaseUnit)((debt.amountCanBeUsed ?? 0) * (debt.price ?? 0), constants_1.USD_DECIMALS),
351
- },
352
- baseAmountMarketPriceUsd: (0, numberUtils_1.toBaseUnit)(debt.price ?? 0, constants_1.USD_DECIMALS),
353
- borrowFeeBps: 0,
354
- decimals: debtDecimals,
355
- flashLoanFeeBps: 0,
356
- mint: (0, umi_1.publicKey)(debt.mint),
357
- padding1: [],
358
- padding2: [],
359
- padding: new Uint8Array([]),
360
- },
361
- netWorth: {
362
- baseUnit: supply.price
363
- ? (0, numberUtils_1.toBaseUnit)((supplyUsd - debtUsd) / supply.price, supplyDecimals)
364
- : BigInt(0),
365
- baseAmountUsdValue: (0, numberUtils_1.toBaseUnit)(supplyUsd - debtUsd, constants_1.USD_DECIMALS),
366
250
  },
367
- maxLtvBps,
368
- liqThresholdBps,
369
- lastUpdated: BigInt((0, generalUtils_1.currentUnixSeconds)()),
370
- padding1: [],
371
- padding2: [],
372
- padding: [],
373
- };
374
- }
375
- function createSolautoSettings(settings) {
376
- return {
377
- automation: (0, umi_1.isOption)(settings.automation) && (0, umi_1.isSome)(settings.automation)
378
- ? {
379
- ...settings.automation.value,
380
- intervalSeconds: BigInt(settings.automation.value.intervalSeconds),
381
- unixStartDate: BigInt(settings.automation.value.unixStartDate),
382
- padding: new Uint8Array([]),
383
- padding1: [],
384
- }
385
- : {
386
- targetPeriods: 0,
387
- periodsPassed: 0,
388
- intervalSeconds: BigInt(0),
389
- unixStartDate: BigInt(0),
390
- padding: new Uint8Array([]),
391
- padding1: [],
392
- },
393
- targetBoostToBps: (0, umi_1.isOption)(settings.targetBoostToBps) && (0, umi_1.isSome)(settings.targetBoostToBps)
394
- ? settings.targetBoostToBps.value
395
- : 0,
396
- boostGap: settings.boostGap,
397
- boostToBps: settings.boostToBps,
398
- repayGap: settings.repayGap,
399
- repayToBps: settings.repayToBps,
400
- padding: new Uint8Array([]),
401
- padding1: [],
402
251
  };
403
252
  }
404
253
  class ContextUpdates {
@@ -406,7 +255,7 @@ class ContextUpdates {
406
255
  this.supplyAdjustment = BigInt(0);
407
256
  this.debtAdjustment = BigInt(0);
408
257
  this.settings = undefined;
409
- this.activeDca = undefined;
258
+ this.dca = undefined;
410
259
  this.dcaInBalance = undefined;
411
260
  this.cancellingDca = undefined;
412
261
  this.jupSwap = undefined;
@@ -420,11 +269,11 @@ class ContextUpdates {
420
269
  }
421
270
  else if (update.type === "settings") {
422
271
  const settings = update.value;
423
- this.settings = createSolautoSettings(settings);
272
+ this.settings = (0, solautoPosition_1.createSolautoSettings)(settings);
424
273
  }
425
274
  else if (update.type === "dca") {
426
275
  const dca = update.value;
427
- this.activeDca = {
276
+ this.dca = {
428
277
  automation: {
429
278
  ...dca.automation,
430
279
  intervalSeconds: BigInt(dca.automation.intervalSeconds),
@@ -451,7 +300,7 @@ class ContextUpdates {
451
300
  this.supplyAdjustment = BigInt(0);
452
301
  this.debtAdjustment = BigInt(0);
453
302
  this.settings = undefined;
454
- this.activeDca = undefined;
303
+ this.dca = undefined;
455
304
  this.dcaInBalance = undefined;
456
305
  this.cancellingDca = undefined;
457
306
  }
@@ -464,3 +313,29 @@ class ContextUpdates {
464
313
  }
465
314
  }
466
315
  exports.ContextUpdates = ContextUpdates;
316
+ function getClient(lendingPlatform, txHandlerProps) {
317
+ if (lendingPlatform === generated_1.LendingPlatform.Marginfi) {
318
+ return new services_1.SolautoMarginfiClient(txHandlerProps);
319
+ }
320
+ else {
321
+ // TODO: PF
322
+ }
323
+ }
324
+ function isMarginfiClient(client) {
325
+ return client.lendingPlatform == generated_1.LendingPlatform.Marginfi;
326
+ }
327
+ // TODO: PF
328
+ function hasFirstRebalance(rebalanceType) {
329
+ return [
330
+ generated_1.SolautoRebalanceType.Regular,
331
+ generated_1.SolautoRebalanceType.DoubleRebalanceWithFL,
332
+ generated_1.SolautoRebalanceType.FLRebalanceThenSwap,
333
+ ].includes(rebalanceType);
334
+ }
335
+ function hasLastRebalance(rebalanceType) {
336
+ return [
337
+ generated_1.SolautoRebalanceType.Regular,
338
+ generated_1.SolautoRebalanceType.DoubleRebalanceWithFL,
339
+ generated_1.SolautoRebalanceType.FLSwapThenRebalance,
340
+ ].includes(rebalanceType);
341
+ }
@@ -1,9 +1,5 @@
1
1
  import { PublicKey } from "@solana/web3.js";
2
- import {
3
- ALL_SUPPORTED_TOKENS,
4
- SOLAUTO_FEES_WALLET,
5
- SOLAUTO_MANAGER,
6
- } from "../src/constants";
2
+ import { ALL_SUPPORTED_TOKENS, SOLAUTO_FEES_WALLET } from "../src/constants";
7
3
  import {
8
4
  buildHeliusApiUrl,
9
5
  createAssociatedTokenAccountUmiIx,
@@ -1,26 +1,15 @@
1
- import { publicKey } from "@metaplex-foundation/umi";
2
1
  import {
3
2
  buildIronforgeApiUrl,
4
- calcNetWorthUsd,
5
- calcSupplyUsd,
6
- currentUnixSeconds,
7
- eligibleForRebalance,
8
3
  fetchTokenPrices,
4
+ getPositionExBulk,
9
5
  getSolanaRpcConnection,
10
6
  getSolautoManagedPositions,
11
- PositionState,
12
- positionStateWithLatestPrices,
13
- retryWithExponentialBackoff,
14
- safeFetchAllSolautoPosition,
15
7
  safeGetPrice,
16
8
  SOLAUTO_PROD_PROGRAM,
17
- solautoStrategyName,
18
9
  } from "../src";
19
10
  import { PublicKey } from "@solana/web3.js";
20
- import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters";
21
11
  import path from "path";
22
12
  import { config } from "dotenv";
23
- import { getBatches } from "./shared";
24
13
 
25
14
  config({ path: path.join(__dirname, ".env") });
26
15
 
@@ -102,23 +91,12 @@ async function main(filterWhitelist: boolean) {
102
91
  );
103
92
  }
104
93
 
105
- const batches = getBatches(positions, 30);
106
-
107
- const solautoPositionsData = (
108
- await Promise.all(
109
- batches.map(async (pubkeys) => {
110
- return retryWithExponentialBackoff(
111
- async () =>
112
- await safeFetchAllSolautoPosition(
113
- umi,
114
- pubkeys.map((x) => publicKey(x.publicKey!))
115
- )
116
- );
117
- })
94
+ const positionsEx = (
95
+ await getPositionExBulk(
96
+ umi,
97
+ positions.map((x) => new PublicKey(x.publicKey!))
118
98
  )
119
- )
120
- .flat()
121
- .sort((a, b) => calcNetWorthUsd(a.state) - calcNetWorthUsd(b.state));
99
+ ).sort((a, b) => a.netWorthUsd() - b.netWorthUsd());
122
100
 
123
101
  const tokensUsed = Array.from(
124
102
  new Set(
@@ -128,49 +106,25 @@ async function main(filterWhitelist: boolean) {
128
106
  ])
129
107
  )
130
108
  );
131
-
132
- const tokenBatches = getBatches(tokensUsed, 15);
133
- await Promise.all(
134
- tokenBatches.map(async (batch) => {
135
- await fetchTokenPrices(batch.map((x) => new PublicKey(x)));
136
- })
137
- );
109
+ await fetchTokenPrices(tokensUsed.map((x) => new PublicKey(x)));
138
110
 
139
111
  console.log("\n\n");
140
112
 
141
- const latestStates: PositionState[] = [];
142
113
  let unhealthyPositions = 0;
143
114
  let awaitingBoostPositions = 0;
144
115
 
145
- for (const pos of solautoPositionsData) {
146
- const strategy = solautoStrategyName(
147
- toWeb3JsPublicKey(pos.state.supply.mint),
148
- toWeb3JsPublicKey(pos.state.debt.mint)
116
+ for (const pos of positionsEx) {
117
+ await pos.updateWithLatestPrices(
118
+ safeGetPrice(pos.state().supply.mint),
119
+ safeGetPrice(pos.state().debt.mint)
149
120
  );
150
121
 
151
- const latestState = await positionStateWithLatestPrices(
152
- pos.state,
153
- safeGetPrice(pos.state.supply.mint),
154
- safeGetPrice(pos.state.debt.mint)
155
- );
156
- latestStates.push(latestState);
157
-
158
- const actionToTake = eligibleForRebalance(
159
- latestState,
160
- pos.position.settingParams,
161
- pos.position.dca,
162
- currentUnixSeconds(),
163
- safeGetPrice(latestState.supply.mint)!,
164
- safeGetPrice(latestState.debt.mint)!,
165
- 0
166
- );
122
+ const actionToTake = pos.eligibleForRebalance(0);
167
123
 
168
- const repayFrom =
169
- pos.position.settingParams.repayToBps +
170
- pos.position.settingParams.repayGap;
124
+ const repayFrom = pos.settings()!.repayToBps + pos.settings()!.repayGap;
171
125
  const unhealthy = actionToTake === "repay";
172
126
  const healthText = unhealthy
173
- ? `(Unhealthy: ${latestState.liqUtilizationRateBps - repayFrom}bps)`
127
+ ? `(Unhealthy: ${pos.state().liqUtilizationRateBps - repayFrom}bps)`
174
128
  : "";
175
129
  if (unhealthy) {
176
130
  unhealthyPositions += 1;
@@ -184,30 +138,30 @@ async function main(filterWhitelist: boolean) {
184
138
 
185
139
  console.log(
186
140
  pos.publicKey.toString(),
187
- `(${pos.authority.toString()} ${pos.positionId})`
141
+ `(${pos.data().authority!.toString()} ${pos.data().positionId})`
188
142
  );
189
143
  console.log(
190
- `${strategy}: $${formatNumber(calcNetWorthUsd(latestState), 2, 10000, 2)} ${healthText} ${boostText}`
144
+ `${pos.strategyName()}: $${formatNumber(pos.netWorthUsd(), 2, 10000, 2)} ${healthText} ${boostText}`
191
145
  );
192
146
  }
193
147
 
194
148
  console.log(
195
149
  "\nTotal positions:",
196
- solautoPositionsData.length,
150
+ positionsEx.length,
197
151
  unhealthyPositions ? ` (unhealthy: ${unhealthyPositions})` : "",
198
152
  awaitingBoostPositions ? ` (awaiting boost: ${awaitingBoostPositions})` : ""
199
153
  );
200
154
  console.log(
201
155
  "Total users:",
202
- Array.from(new Set(solautoPositionsData.map((x) => x.authority.toString())))
156
+ Array.from(new Set(positionsEx.map((x) => x.data().authority!.toString())))
203
157
  .length
204
158
  );
205
159
 
206
- const tvl = latestStates
207
- .map((x) => calcSupplyUsd(x))
160
+ const tvl = positionsEx
161
+ .map((x) => x.supplyUsd())
208
162
  .reduce((acc, curr) => acc + curr, 0);
209
- const netWorth = latestStates
210
- .map((x) => calcNetWorthUsd(x))
163
+ const netWorth = positionsEx
164
+ .map((x) => x.netWorthUsd())
211
165
  .reduce((acc, curr) => acc + curr, 0);
212
166
 
213
167
  console.log(`TVL: $${formatNumber(tvl, 2, 10000, 2)}`);