@kamino-finance/klend-sdk 2.10.6

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 (369) hide show
  1. package/README.md +85 -0
  2. package/dist/classes/action.d.ts +154 -0
  3. package/dist/classes/action.js +1505 -0
  4. package/dist/classes/action.js.map +1 -0
  5. package/dist/classes/curve.d.ts +15 -0
  6. package/dist/classes/curve.js +32 -0
  7. package/dist/classes/curve.js.map +1 -0
  8. package/dist/classes/fraction.d.ts +23 -0
  9. package/dist/classes/fraction.js +60 -0
  10. package/dist/classes/fraction.js.map +1 -0
  11. package/dist/classes/index.d.ts +8 -0
  12. package/dist/classes/index.js +25 -0
  13. package/dist/classes/index.js.map +1 -0
  14. package/dist/classes/jupiterPerps.d.ts +2 -0
  15. package/dist/classes/jupiterPerps.js +25 -0
  16. package/dist/classes/jupiterPerps.js.map +1 -0
  17. package/dist/classes/market.d.ts +140 -0
  18. package/dist/classes/market.js +901 -0
  19. package/dist/classes/market.js.map +1 -0
  20. package/dist/classes/obligation.d.ts +170 -0
  21. package/dist/classes/obligation.js +610 -0
  22. package/dist/classes/obligation.js.map +1 -0
  23. package/dist/classes/reserve.d.ts +161 -0
  24. package/dist/classes/reserve.js +474 -0
  25. package/dist/classes/reserve.js.map +1 -0
  26. package/dist/classes/shared.d.ts +41 -0
  27. package/dist/classes/shared.js +10 -0
  28. package/dist/classes/shared.js.map +1 -0
  29. package/dist/classes/utils.d.ts +40 -0
  30. package/dist/classes/utils.js +129 -0
  31. package/dist/classes/utils.js.map +1 -0
  32. package/dist/idl.json +4102 -0
  33. package/dist/idl_codegen/accounts/LendingMarket.d.ts +153 -0
  34. package/dist/idl_codegen/accounts/LendingMarket.js +204 -0
  35. package/dist/idl_codegen/accounts/LendingMarket.js.map +1 -0
  36. package/dist/idl_codegen/accounts/Obligation.d.ts +139 -0
  37. package/dist/idl_codegen/accounts/Obligation.js +193 -0
  38. package/dist/idl_codegen/accounts/Obligation.js.map +1 -0
  39. package/dist/idl_codegen/accounts/ReferrerState.d.ts +22 -0
  40. package/dist/idl_codegen/accounts/ReferrerState.js +101 -0
  41. package/dist/idl_codegen/accounts/ReferrerState.js.map +1 -0
  42. package/dist/idl_codegen/accounts/ReferrerTokenState.d.ts +51 -0
  43. package/dist/idl_codegen/accounts/ReferrerTokenState.js +126 -0
  44. package/dist/idl_codegen/accounts/ReferrerTokenState.js.map +1 -0
  45. package/dist/idl_codegen/accounts/Reserve.d.ts +72 -0
  46. package/dist/idl_codegen/accounts/Reserve.js +156 -0
  47. package/dist/idl_codegen/accounts/Reserve.js.map +1 -0
  48. package/dist/idl_codegen/accounts/ShortUrl.d.ts +22 -0
  49. package/dist/idl_codegen/accounts/ShortUrl.js +101 -0
  50. package/dist/idl_codegen/accounts/ShortUrl.js.map +1 -0
  51. package/dist/idl_codegen/accounts/UserMetadata.d.ts +48 -0
  52. package/dist/idl_codegen/accounts/UserMetadata.js +126 -0
  53. package/dist/idl_codegen/accounts/UserMetadata.js.map +1 -0
  54. package/dist/idl_codegen/accounts/UserState.d.ts +143 -0
  55. package/dist/idl_codegen/accounts/UserState.js +180 -0
  56. package/dist/idl_codegen/accounts/UserState.js.map +1 -0
  57. package/dist/idl_codegen/accounts/index.d.ts +16 -0
  58. package/dist/idl_codegen/accounts/index.js +20 -0
  59. package/dist/idl_codegen/accounts/index.js.map +1 -0
  60. package/dist/idl_codegen/errors/anchor.d.ts +434 -0
  61. package/dist/idl_codegen/errors/anchor.js +713 -0
  62. package/dist/idl_codegen/errors/anchor.js.map +1 -0
  63. package/dist/idl_codegen/errors/custom.d.ts +730 -0
  64. package/dist/idl_codegen/errors/custom.js +1194 -0
  65. package/dist/idl_codegen/errors/custom.js.map +1 -0
  66. package/dist/idl_codegen/errors/index.d.ts +5 -0
  67. package/dist/idl_codegen/errors/index.js +71 -0
  68. package/dist/idl_codegen/errors/index.js.map +1 -0
  69. package/dist/idl_codegen/instructions/borrowObligationLiquidity.d.ts +20 -0
  70. package/dist/idl_codegen/instructions/borrowObligationLiquidity.js +75 -0
  71. package/dist/idl_codegen/instructions/borrowObligationLiquidity.js.map +1 -0
  72. package/dist/idl_codegen/instructions/deleteReferrerStateAndShortUrl.d.ts +9 -0
  73. package/dist/idl_codegen/instructions/deleteReferrerStateAndShortUrl.js +20 -0
  74. package/dist/idl_codegen/instructions/deleteReferrerStateAndShortUrl.js.map +1 -0
  75. package/dist/idl_codegen/instructions/depositObligationCollateral.d.ts +17 -0
  76. package/dist/idl_codegen/instructions/depositObligationCollateral.js +64 -0
  77. package/dist/idl_codegen/instructions/depositObligationCollateral.js.map +1 -0
  78. package/dist/idl_codegen/instructions/depositReserveLiquidity.d.ts +19 -0
  79. package/dist/idl_codegen/instructions/depositReserveLiquidity.js +74 -0
  80. package/dist/idl_codegen/instructions/depositReserveLiquidity.js.map +1 -0
  81. package/dist/idl_codegen/instructions/depositReserveLiquidityAndObligationCollateral.d.ts +21 -0
  82. package/dist/idl_codegen/instructions/depositReserveLiquidityAndObligationCollateral.js +80 -0
  83. package/dist/idl_codegen/instructions/depositReserveLiquidityAndObligationCollateral.js.map +1 -0
  84. package/dist/idl_codegen/instructions/flashBorrowReserveLiquidity.d.ts +20 -0
  85. package/dist/idl_codegen/instructions/flashBorrowReserveLiquidity.js +75 -0
  86. package/dist/idl_codegen/instructions/flashBorrowReserveLiquidity.js.map +1 -0
  87. package/dist/idl_codegen/instructions/flashRepayReserveLiquidity.d.ts +21 -0
  88. package/dist/idl_codegen/instructions/flashRepayReserveLiquidity.js +75 -0
  89. package/dist/idl_codegen/instructions/flashRepayReserveLiquidity.js.map +1 -0
  90. package/dist/idl_codegen/instructions/idlMissingTypes.d.ts +18 -0
  91. package/dist/idl_codegen/instructions/idlMissingTypes.js +62 -0
  92. package/dist/idl_codegen/instructions/idlMissingTypes.js.map +1 -0
  93. package/dist/idl_codegen/instructions/index.d.ts +66 -0
  94. package/dist/idl_codegen/instructions/index.js +70 -0
  95. package/dist/idl_codegen/instructions/index.js.map +1 -0
  96. package/dist/idl_codegen/instructions/initFarmsForReserve.d.ts +19 -0
  97. package/dist/idl_codegen/instructions/initFarmsForReserve.js +63 -0
  98. package/dist/idl_codegen/instructions/initFarmsForReserve.js.map +1 -0
  99. package/dist/idl_codegen/instructions/initLendingMarket.d.ts +13 -0
  100. package/dist/idl_codegen/instructions/initLendingMarket.js +55 -0
  101. package/dist/idl_codegen/instructions/initLendingMarket.js.map +1 -0
  102. package/dist/idl_codegen/instructions/initObligation.d.ts +19 -0
  103. package/dist/idl_codegen/instructions/initObligation.js +55 -0
  104. package/dist/idl_codegen/instructions/initObligation.js.map +1 -0
  105. package/dist/idl_codegen/instructions/initObligationFarmsForReserve.d.ts +20 -0
  106. package/dist/idl_codegen/instructions/initObligationFarmsForReserve.js +60 -0
  107. package/dist/idl_codegen/instructions/initObligationFarmsForReserve.js.map +1 -0
  108. package/dist/idl_codegen/instructions/initReferrerStateAndShortUrl.d.ts +14 -0
  109. package/dist/idl_codegen/instructions/initReferrerStateAndShortUrl.js +54 -0
  110. package/dist/idl_codegen/instructions/initReferrerStateAndShortUrl.js.map +1 -0
  111. package/dist/idl_codegen/instructions/initReferrerTokenState.d.ts +14 -0
  112. package/dist/idl_codegen/instructions/initReferrerTokenState.js +50 -0
  113. package/dist/idl_codegen/instructions/initReferrerTokenState.js.map +1 -0
  114. package/dist/idl_codegen/instructions/initReserve.d.ts +16 -0
  115. package/dist/idl_codegen/instructions/initReserve.js +47 -0
  116. package/dist/idl_codegen/instructions/initReserve.js.map +1 -0
  117. package/dist/idl_codegen/instructions/initUserMetadata.d.ts +14 -0
  118. package/dist/idl_codegen/instructions/initUserMetadata.js +54 -0
  119. package/dist/idl_codegen/instructions/initUserMetadata.js.map +1 -0
  120. package/dist/idl_codegen/instructions/liquidateObligationAndRedeemReserveCollateral.d.ts +27 -0
  121. package/dist/idl_codegen/instructions/liquidateObligationAndRedeemReserveCollateral.js +102 -0
  122. package/dist/idl_codegen/instructions/liquidateObligationAndRedeemReserveCollateral.js.map +1 -0
  123. package/dist/idl_codegen/instructions/redeemFees.d.ts +10 -0
  124. package/dist/idl_codegen/instructions/redeemFees.js +33 -0
  125. package/dist/idl_codegen/instructions/redeemFees.js.map +1 -0
  126. package/dist/idl_codegen/instructions/redeemReserveCollateral.d.ts +19 -0
  127. package/dist/idl_codegen/instructions/redeemReserveCollateral.js +78 -0
  128. package/dist/idl_codegen/instructions/redeemReserveCollateral.js.map +1 -0
  129. package/dist/idl_codegen/instructions/refreshObligation.d.ts +6 -0
  130. package/dist/idl_codegen/instructions/refreshObligation.js +17 -0
  131. package/dist/idl_codegen/instructions/refreshObligation.js.map +1 -0
  132. package/dist/idl_codegen/instructions/refreshObligationFarmsForReserve.d.ts +19 -0
  133. package/dist/idl_codegen/instructions/refreshObligationFarmsForReserve.js +63 -0
  134. package/dist/idl_codegen/instructions/refreshObligationFarmsForReserve.js.map +1 -0
  135. package/dist/idl_codegen/instructions/refreshReserve.d.ts +10 -0
  136. package/dist/idl_codegen/instructions/refreshReserve.js +29 -0
  137. package/dist/idl_codegen/instructions/refreshReserve.js.map +1 -0
  138. package/dist/idl_codegen/instructions/repayObligationLiquidity.d.ts +17 -0
  139. package/dist/idl_codegen/instructions/repayObligationLiquidity.js +60 -0
  140. package/dist/idl_codegen/instructions/repayObligationLiquidity.js.map +1 -0
  141. package/dist/idl_codegen/instructions/requestElevationGroup.d.ts +11 -0
  142. package/dist/idl_codegen/instructions/requestElevationGroup.js +47 -0
  143. package/dist/idl_codegen/instructions/requestElevationGroup.js.map +1 -0
  144. package/dist/idl_codegen/instructions/socializeLoss.d.ts +14 -0
  145. package/dist/idl_codegen/instructions/socializeLoss.js +53 -0
  146. package/dist/idl_codegen/instructions/socializeLoss.js.map +1 -0
  147. package/dist/idl_codegen/instructions/updateEntireReserveConfig.d.ts +13 -0
  148. package/dist/idl_codegen/instructions/updateEntireReserveConfig.js +51 -0
  149. package/dist/idl_codegen/instructions/updateEntireReserveConfig.js.map +1 -0
  150. package/dist/idl_codegen/instructions/updateLendingMarket.d.ts +12 -0
  151. package/dist/idl_codegen/instructions/updateLendingMarket.js +50 -0
  152. package/dist/idl_codegen/instructions/updateLendingMarket.js.map +1 -0
  153. package/dist/idl_codegen/instructions/updateLendingMarketOwner.d.ts +6 -0
  154. package/dist/idl_codegen/instructions/updateLendingMarketOwner.js +21 -0
  155. package/dist/idl_codegen/instructions/updateLendingMarketOwner.js.map +1 -0
  156. package/dist/idl_codegen/instructions/updateReserveConfig.d.ts +13 -0
  157. package/dist/idl_codegen/instructions/updateReserveConfig.js +51 -0
  158. package/dist/idl_codegen/instructions/updateReserveConfig.js.map +1 -0
  159. package/dist/idl_codegen/instructions/updateSingleReserveConfig.d.ts +13 -0
  160. package/dist/idl_codegen/instructions/updateSingleReserveConfig.js +51 -0
  161. package/dist/idl_codegen/instructions/updateSingleReserveConfig.js.map +1 -0
  162. package/dist/idl_codegen/instructions/withdrawObligationCollateral.d.ts +18 -0
  163. package/dist/idl_codegen/instructions/withdrawObligationCollateral.js +69 -0
  164. package/dist/idl_codegen/instructions/withdrawObligationCollateral.js.map +1 -0
  165. package/dist/idl_codegen/instructions/withdrawObligationCollateralAndRedeemReserveCollateral.d.ts +21 -0
  166. package/dist/idl_codegen/instructions/withdrawObligationCollateralAndRedeemReserveCollateral.js +84 -0
  167. package/dist/idl_codegen/instructions/withdrawObligationCollateralAndRedeemReserveCollateral.js.map +1 -0
  168. package/dist/idl_codegen/instructions/withdrawProtocolFee.d.ts +16 -0
  169. package/dist/idl_codegen/instructions/withdrawProtocolFee.js +59 -0
  170. package/dist/idl_codegen/instructions/withdrawProtocolFee.js.map +1 -0
  171. package/dist/idl_codegen/instructions/withdrawReferrerFees.d.ts +12 -0
  172. package/dist/idl_codegen/instructions/withdrawReferrerFees.js +35 -0
  173. package/dist/idl_codegen/instructions/withdrawReferrerFees.js.map +1 -0
  174. package/dist/idl_codegen/programId.d.ts +4 -0
  175. package/dist/idl_codegen/programId.js +13 -0
  176. package/dist/idl_codegen/programId.js.map +1 -0
  177. package/dist/idl_codegen/types/AssetTier.d.ts +44 -0
  178. package/dist/idl_codegen/types/AssetTier.js +128 -0
  179. package/dist/idl_codegen/types/AssetTier.js.map +1 -0
  180. package/dist/idl_codegen/types/BigFractionBytes.d.ts +27 -0
  181. package/dist/idl_codegen/types/BigFractionBytes.js +73 -0
  182. package/dist/idl_codegen/types/BigFractionBytes.js.map +1 -0
  183. package/dist/idl_codegen/types/BorrowRateCurve.d.ts +27 -0
  184. package/dist/idl_codegen/types/BorrowRateCurve.js +62 -0
  185. package/dist/idl_codegen/types/BorrowRateCurve.js.map +1 -0
  186. package/dist/idl_codegen/types/CurvePoint.d.ts +26 -0
  187. package/dist/idl_codegen/types/CurvePoint.js +66 -0
  188. package/dist/idl_codegen/types/CurvePoint.js.map +1 -0
  189. package/dist/idl_codegen/types/ElevationGroup.d.ts +52 -0
  190. package/dist/idl_codegen/types/ElevationGroup.js +103 -0
  191. package/dist/idl_codegen/types/ElevationGroup.js.map +1 -0
  192. package/dist/idl_codegen/types/FeeCalculation.d.ts +31 -0
  193. package/dist/idl_codegen/types/FeeCalculation.js +102 -0
  194. package/dist/idl_codegen/types/FeeCalculation.js.map +1 -0
  195. package/dist/idl_codegen/types/InitObligationArgs.d.ts +26 -0
  196. package/dist/idl_codegen/types/InitObligationArgs.js +66 -0
  197. package/dist/idl_codegen/types/InitObligationArgs.js.map +1 -0
  198. package/dist/idl_codegen/types/LastUpdate.d.ts +47 -0
  199. package/dist/idl_codegen/types/LastUpdate.js +86 -0
  200. package/dist/idl_codegen/types/LastUpdate.js.map +1 -0
  201. package/dist/idl_codegen/types/ObligationCollateral.d.ts +48 -0
  202. package/dist/idl_codegen/types/ObligationCollateral.js +87 -0
  203. package/dist/idl_codegen/types/ObligationCollateral.js.map +1 -0
  204. package/dist/idl_codegen/types/ObligationLiquidity.d.ts +75 -0
  205. package/dist/idl_codegen/types/ObligationLiquidity.js +107 -0
  206. package/dist/idl_codegen/types/ObligationLiquidity.js.map +1 -0
  207. package/dist/idl_codegen/types/PriceHeuristic.d.ts +41 -0
  208. package/dist/idl_codegen/types/PriceHeuristic.js +75 -0
  209. package/dist/idl_codegen/types/PriceHeuristic.js.map +1 -0
  210. package/dist/idl_codegen/types/PythConfiguration.d.ts +25 -0
  211. package/dist/idl_codegen/types/PythConfiguration.js +62 -0
  212. package/dist/idl_codegen/types/PythConfiguration.js.map +1 -0
  213. package/dist/idl_codegen/types/ReserveCollateral.d.ts +53 -0
  214. package/dist/idl_codegen/types/ReserveCollateral.js +93 -0
  215. package/dist/idl_codegen/types/ReserveCollateral.js.map +1 -0
  216. package/dist/idl_codegen/types/ReserveConfig.d.ts +304 -0
  217. package/dist/idl_codegen/types/ReserveConfig.js +209 -0
  218. package/dist/idl_codegen/types/ReserveConfig.js.map +1 -0
  219. package/dist/idl_codegen/types/ReserveFarmKind.d.ts +31 -0
  220. package/dist/idl_codegen/types/ReserveFarmKind.js +102 -0
  221. package/dist/idl_codegen/types/ReserveFarmKind.js.map +1 -0
  222. package/dist/idl_codegen/types/ReserveFees.d.ts +78 -0
  223. package/dist/idl_codegen/types/ReserveFees.js +86 -0
  224. package/dist/idl_codegen/types/ReserveFees.js.map +1 -0
  225. package/dist/idl_codegen/types/ReserveLiquidity.d.ts +173 -0
  226. package/dist/idl_codegen/types/ReserveLiquidity.js +166 -0
  227. package/dist/idl_codegen/types/ReserveLiquidity.js.map +1 -0
  228. package/dist/idl_codegen/types/ReserveStatus.d.ts +44 -0
  229. package/dist/idl_codegen/types/ReserveStatus.js +128 -0
  230. package/dist/idl_codegen/types/ReserveStatus.js.map +1 -0
  231. package/dist/idl_codegen/types/ScopeConfiguration.d.ts +41 -0
  232. package/dist/idl_codegen/types/ScopeConfiguration.js +76 -0
  233. package/dist/idl_codegen/types/ScopeConfiguration.js.map +1 -0
  234. package/dist/idl_codegen/types/SwitchboardConfiguration.d.ts +30 -0
  235. package/dist/idl_codegen/types/SwitchboardConfiguration.js +67 -0
  236. package/dist/idl_codegen/types/SwitchboardConfiguration.js.map +1 -0
  237. package/dist/idl_codegen/types/TokenInfo.d.ts +109 -0
  238. package/dist/idl_codegen/types/TokenInfo.js +116 -0
  239. package/dist/idl_codegen/types/TokenInfo.js.map +1 -0
  240. package/dist/idl_codegen/types/UpdateConfigMode.d.ts +538 -0
  241. package/dist/idl_codegen/types/UpdateConfigMode.js +1116 -0
  242. package/dist/idl_codegen/types/UpdateConfigMode.js.map +1 -0
  243. package/dist/idl_codegen/types/UpdateLendingMarketConfigValue.d.ts +155 -0
  244. package/dist/idl_codegen/types/UpdateLendingMarketConfigValue.js +273 -0
  245. package/dist/idl_codegen/types/UpdateLendingMarketConfigValue.js.map +1 -0
  246. package/dist/idl_codegen/types/UpdateLendingMarketMode.d.ts +200 -0
  247. package/dist/idl_codegen/types/UpdateLendingMarketMode.js +440 -0
  248. package/dist/idl_codegen/types/UpdateLendingMarketMode.js.map +1 -0
  249. package/dist/idl_codegen/types/WithdrawalCaps.d.ts +38 -0
  250. package/dist/idl_codegen/types/WithdrawalCaps.js +86 -0
  251. package/dist/idl_codegen/types/WithdrawalCaps.js.map +1 -0
  252. package/dist/idl_codegen/types/index.d.ts +65 -0
  253. package/dist/idl_codegen/types/index.js +77 -0
  254. package/dist/idl_codegen/types/index.js.map +1 -0
  255. package/dist/idl_codegen/zero_padding/ObligationZP.d.ts +53 -0
  256. package/dist/idl_codegen/zero_padding/ObligationZP.js +140 -0
  257. package/dist/idl_codegen/zero_padding/ObligationZP.js.map +1 -0
  258. package/dist/idl_codegen/zero_padding/index.d.ts +1 -0
  259. package/dist/idl_codegen/zero_padding/index.js +6 -0
  260. package/dist/idl_codegen/zero_padding/index.js.map +1 -0
  261. package/dist/idl_codegen_jupiter_perps/accounts/Pool.d.ts +48 -0
  262. package/dist/idl_codegen_jupiter_perps/accounts/Pool.js +144 -0
  263. package/dist/idl_codegen_jupiter_perps/accounts/Pool.js.map +1 -0
  264. package/dist/idl_codegen_jupiter_perps/accounts/index.d.ts +2 -0
  265. package/dist/idl_codegen_jupiter_perps/accounts/index.js +6 -0
  266. package/dist/idl_codegen_jupiter_perps/accounts/index.js.map +1 -0
  267. package/dist/idl_codegen_jupiter_perps/programId.d.ts +3 -0
  268. package/dist/idl_codegen_jupiter_perps/programId.js +9 -0
  269. package/dist/idl_codegen_jupiter_perps/programId.js.map +1 -0
  270. package/dist/idl_codegen_jupiter_perps/types/Fees.d.ts +62 -0
  271. package/dist/idl_codegen_jupiter_perps/types/Fees.js +115 -0
  272. package/dist/idl_codegen_jupiter_perps/types/Fees.js.map +1 -0
  273. package/dist/idl_codegen_jupiter_perps/types/Limit.d.ts +32 -0
  274. package/dist/idl_codegen_jupiter_perps/types/Limit.js +75 -0
  275. package/dist/idl_codegen_jupiter_perps/types/Limit.js.map +1 -0
  276. package/dist/idl_codegen_jupiter_perps/types/PoolApr.d.ts +32 -0
  277. package/dist/idl_codegen_jupiter_perps/types/PoolApr.js +75 -0
  278. package/dist/idl_codegen_jupiter_perps/types/PoolApr.js.map +1 -0
  279. package/dist/idl_codegen_jupiter_perps/types/index.d.ts +6 -0
  280. package/dist/idl_codegen_jupiter_perps/types/index.js +10 -0
  281. package/dist/idl_codegen_jupiter_perps/types/index.js.map +1 -0
  282. package/dist/index.d.ts +1 -0
  283. package/dist/index.js +18 -0
  284. package/dist/index.js.map +1 -0
  285. package/dist/lending_operations/index.d.ts +2 -0
  286. package/dist/lending_operations/index.js +19 -0
  287. package/dist/lending_operations/index.js.map +1 -0
  288. package/dist/lending_operations/repay_with_collateral_calcs.d.ts +5 -0
  289. package/dist/lending_operations/repay_with_collateral_calcs.js +26 -0
  290. package/dist/lending_operations/repay_with_collateral_calcs.js.map +1 -0
  291. package/dist/lending_operations/repay_with_collateral_operations.d.ts +47 -0
  292. package/dist/lending_operations/repay_with_collateral_operations.js +163 -0
  293. package/dist/lending_operations/repay_with_collateral_operations.js.map +1 -0
  294. package/dist/leverage/calcs.d.ts +132 -0
  295. package/dist/leverage/calcs.js +291 -0
  296. package/dist/leverage/calcs.js.map +1 -0
  297. package/dist/leverage/index.d.ts +4 -0
  298. package/dist/leverage/index.js +21 -0
  299. package/dist/leverage/index.js.map +1 -0
  300. package/dist/leverage/instructions.d.ts +43 -0
  301. package/dist/leverage/instructions.js +103 -0
  302. package/dist/leverage/instructions.js.map +1 -0
  303. package/dist/leverage/operations.d.ts +231 -0
  304. package/dist/leverage/operations.js +1058 -0
  305. package/dist/leverage/operations.js.map +1 -0
  306. package/dist/leverage/utils.d.ts +22 -0
  307. package/dist/leverage/utils.js +144 -0
  308. package/dist/leverage/utils.js.map +1 -0
  309. package/dist/lib.d.ts +9 -0
  310. package/dist/lib.js +26 -0
  311. package/dist/lib.js.map +1 -0
  312. package/dist/referrals/index.d.ts +2 -0
  313. package/dist/referrals/index.js +19 -0
  314. package/dist/referrals/index.js.map +1 -0
  315. package/dist/referrals/instructions.d.ts +16 -0
  316. package/dist/referrals/instructions.js +76 -0
  317. package/dist/referrals/instructions.js.map +1 -0
  318. package/dist/referrals/operations.d.ts +97 -0
  319. package/dist/referrals/operations.js +258 -0
  320. package/dist/referrals/operations.js.map +1 -0
  321. package/dist/utils/ObligationType.d.ts +49 -0
  322. package/dist/utils/ObligationType.js +129 -0
  323. package/dist/utils/ObligationType.js.map +1 -0
  324. package/dist/utils/api.d.ts +6 -0
  325. package/dist/utils/api.js +61 -0
  326. package/dist/utils/api.js.map +1 -0
  327. package/dist/utils/ata.d.ts +25 -0
  328. package/dist/utils/ata.js +155 -0
  329. package/dist/utils/ata.js.map +1 -0
  330. package/dist/utils/constants.d.ts +48 -0
  331. package/dist/utils/constants.js +75 -0
  332. package/dist/utils/constants.js.map +1 -0
  333. package/dist/utils/idl.d.ts +2 -0
  334. package/dist/utils/idl.js +9 -0
  335. package/dist/utils/idl.js.map +1 -0
  336. package/dist/utils/index.d.ts +14 -0
  337. package/dist/utils/index.js +31 -0
  338. package/dist/utils/index.js.map +1 -0
  339. package/dist/utils/instruction.d.ts +22 -0
  340. package/dist/utils/instruction.js +202 -0
  341. package/dist/utils/instruction.js.map +1 -0
  342. package/dist/utils/kamino.d.ts +3 -0
  343. package/dist/utils/kamino.js +45 -0
  344. package/dist/utils/kamino.js.map +1 -0
  345. package/dist/utils/layout.d.ts +13 -0
  346. package/dist/utils/layout.js +123 -0
  347. package/dist/utils/layout.js.map +1 -0
  348. package/dist/utils/lookupTable.d.ts +5 -0
  349. package/dist/utils/lookupTable.js +57 -0
  350. package/dist/utils/lookupTable.js.map +1 -0
  351. package/dist/utils/oracle.d.ts +51 -0
  352. package/dist/utils/oracle.js +295 -0
  353. package/dist/utils/oracle.js.map +1 -0
  354. package/dist/utils/pubkey.d.ts +74 -0
  355. package/dist/utils/pubkey.js +229 -0
  356. package/dist/utils/pubkey.js.map +1 -0
  357. package/dist/utils/seeds.d.ts +122 -0
  358. package/dist/utils/seeds.js +153 -0
  359. package/dist/utils/seeds.js.map +1 -0
  360. package/dist/utils/slots.d.ts +18 -0
  361. package/dist/utils/slots.js +32 -0
  362. package/dist/utils/slots.js.map +1 -0
  363. package/dist/utils/syncNative.d.ts +10 -0
  364. package/dist/utils/syncNative.js +46 -0
  365. package/dist/utils/syncNative.js.map +1 -0
  366. package/dist/utils/userMetadata.d.ts +15 -0
  367. package/dist/utils/userMetadata.js +259 -0
  368. package/dist/utils/userMetadata.js.map +1 -0
  369. package/package.json +94 -0
@@ -0,0 +1,291 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.simulateMintKToken = exports.estimateDepositMode = exports.calcAdjustAmounts = exports.estimateAdjustMode = exports.fuzzyEq = exports.calcWithdrawAmounts = exports.estimateWithdrawMode = exports.calcBorrowAmount = exports.calculateMultiplyEffects = exports.FormTabs = exports.toJson = void 0;
16
+ const decimal_js_1 = __importDefault(require("decimal.js"));
17
+ const toJson = (object) => {
18
+ return JSON.stringify(object, null, 2);
19
+ };
20
+ exports.toJson = toJson;
21
+ const closingPositionDiffTolerance = 0.0001;
22
+ var FormTabs;
23
+ (function (FormTabs) {
24
+ FormTabs["deposit"] = "Deposit";
25
+ FormTabs["withdraw"] = "Withdraw";
26
+ FormTabs["adjust"] = "Adjust";
27
+ FormTabs["close"] = "Close";
28
+ })(FormTabs = exports.FormTabs || (exports.FormTabs = {}));
29
+ function calculateMultiplyEffects(getPriceByTokenMintDecimal, { depositAmount, withdrawAmount, deposited, borrowed, debtTokenMint, selectedTokenMint, collTokenMint, targetLeverage, activeTab, flashBorrowReserveFlashLoanFeePercentage, debtBorrowFactorPct, priceCollToDebt, priceDebtToColl, }) {
30
+ return __awaiter(this, void 0, void 0, function* () {
31
+ // calculate estimations for deposit operation
32
+ const { adjustDepositPosition: depositModeEstimatedDepositAmount, adjustBorrowPosition: depositModeEstimatedBorrowAmount, } = (0, exports.estimateDepositMode)({
33
+ priceCollToDebt,
34
+ priceDebtToColl,
35
+ amount: depositAmount,
36
+ targetLeverage,
37
+ selectedTokenMint,
38
+ collTokenMint: collTokenMint,
39
+ flashLoanFee: flashBorrowReserveFlashLoanFeePercentage,
40
+ });
41
+ // calculate estimations for withdraw operation
42
+ const { adjustDepositPosition: withdrawModeEstimatedDepositTokenWithdrawn, adjustBorrowPosition: withdrawModeEstimatedBorrowTokenWithdrawn, } = (0, exports.estimateWithdrawMode)({
43
+ priceCollToDebt: priceCollToDebt,
44
+ collTokenMint,
45
+ selectedTokenMint,
46
+ amount: withdrawAmount,
47
+ deposited: new decimal_js_1.default(deposited),
48
+ borrowed: new decimal_js_1.default(borrowed),
49
+ });
50
+ // calculate estimations for adjust operation
51
+ const { adjustDepositPosition: adjustModeEstimatedDepositAmount, adjustBorrowPosition: adjustModeEstimateBorrowAmount, } = (0, exports.estimateAdjustMode)(priceCollToDebt, {
52
+ targetLeverage,
53
+ debtTokenMint,
54
+ collTokenMint,
55
+ totalDeposited: new decimal_js_1.default(deposited),
56
+ totalBorrowed: new decimal_js_1.default(borrowed),
57
+ flashLoanFee: flashBorrowReserveFlashLoanFeePercentage, // TODO: is this the right flash borrow?
58
+ });
59
+ console.log('Estimations', (0, exports.toJson)({
60
+ activeTab,
61
+ depositModeEstimatedDepositAmount,
62
+ depositModeEstimatedBorrowAmount,
63
+ withdrawModeEstimatedDepositTokenWithdrawn,
64
+ withdrawModeEstimatedBorrowTokenWithdrawn,
65
+ adjustModeEstimatedDepositAmount,
66
+ adjustModeEstimateBorrowAmount,
67
+ }));
68
+ let [isClosingPosition, totalDeposited, totalBorrowed] = [false, new decimal_js_1.default(0), new decimal_js_1.default(0)];
69
+ switch (activeTab) {
70
+ case FormTabs.deposit: {
71
+ // Deposit and Adjust never clos the position
72
+ isClosingPosition = false;
73
+ totalDeposited = deposited.add(depositModeEstimatedDepositAmount);
74
+ totalBorrowed = borrowed.add(depositModeEstimatedBorrowAmount);
75
+ break;
76
+ }
77
+ case FormTabs.close:
78
+ case FormTabs.withdraw: {
79
+ isClosingPosition =
80
+ (withdrawModeEstimatedDepositTokenWithdrawn.gte(new decimal_js_1.default(deposited)) ||
81
+ withdrawModeEstimatedBorrowTokenWithdrawn.gte(new decimal_js_1.default(borrowed)) ||
82
+ (0, exports.fuzzyEq)(withdrawModeEstimatedDepositTokenWithdrawn, new decimal_js_1.default(deposited), closingPositionDiffTolerance) ||
83
+ (0, exports.fuzzyEq)(withdrawModeEstimatedBorrowTokenWithdrawn, new decimal_js_1.default(borrowed), closingPositionDiffTolerance)) &&
84
+ !(0, exports.fuzzyEq)(withdrawModeEstimatedDepositTokenWithdrawn, new decimal_js_1.default(0), closingPositionDiffTolerance);
85
+ totalDeposited = isClosingPosition ? new decimal_js_1.default(0) : deposited.sub(withdrawModeEstimatedDepositTokenWithdrawn);
86
+ totalBorrowed = isClosingPosition ? new decimal_js_1.default(0) : borrowed.sub(withdrawModeEstimatedBorrowTokenWithdrawn);
87
+ break;
88
+ }
89
+ case FormTabs.adjust: {
90
+ // Deposit and Adjust never clos the position
91
+ isClosingPosition = false;
92
+ totalDeposited = deposited.add(adjustModeEstimatedDepositAmount);
93
+ totalBorrowed = borrowed.add(adjustModeEstimateBorrowAmount);
94
+ break;
95
+ }
96
+ }
97
+ const borrowTokenPrice = getPriceByTokenMintDecimal(debtTokenMint);
98
+ const depositTokenPrice = getPriceByTokenMintDecimal(collTokenMint);
99
+ const totalDepositedUsd = depositTokenPrice.mul(totalDeposited);
100
+ const totalBorrowedUsd = borrowTokenPrice.mul(totalBorrowed);
101
+ const netValueUsd = totalDepositedUsd.minus(totalBorrowedUsd);
102
+ // TODO marius this is bad, do not convert to sol as we don't only do leveraged loops only
103
+ const netValueSol = netValueUsd.div(borrowTokenPrice);
104
+ const ltv = totalBorrowedUsd.mul(debtBorrowFactorPct.div(100)).div(totalDepositedUsd);
105
+ return {
106
+ earned: new decimal_js_1.default(0),
107
+ totalDeposited,
108
+ totalBorrowed,
109
+ netValue: netValueSol,
110
+ netValueUsd: netValueUsd,
111
+ ltv,
112
+ };
113
+ });
114
+ }
115
+ exports.calculateMultiplyEffects = calculateMultiplyEffects;
116
+ /**
117
+ * returns how much borrowToken will be borrowed to reach leverage given initial collateral amount
118
+ * @param depositTokenAmount
119
+ * @param leverage
120
+ * @param priceAToB
121
+ * @param flashBorrowFee
122
+ */
123
+ const calcBorrowAmount = ({ depositTokenAmount, targetLeverage, priceCollToDebt, flashBorrowFee, }) => {
124
+ const initialCollAmountInCollToken = depositTokenAmount;
125
+ const finalCollAmountInCollToken = initialCollAmountInCollToken.mul(targetLeverage);
126
+ const finalDebtAmountInCollToken = finalCollAmountInCollToken.sub(initialCollAmountInCollToken);
127
+ const finalDebtAmountInDebtToken = finalDebtAmountInCollToken.mul(priceCollToDebt);
128
+ const flashFeeFactor = new decimal_js_1.default(1).add(flashBorrowFee);
129
+ const debtTokenToBorrow = finalDebtAmountInDebtToken.mul(flashFeeFactor);
130
+ return debtTokenToBorrow;
131
+ };
132
+ exports.calcBorrowAmount = calcBorrowAmount;
133
+ const estimateWithdrawMode = (props) => {
134
+ const { amount, collTokenMint, selectedTokenMint, deposited, borrowed, priceCollToDebt } = props;
135
+ return calcWithdrawAmounts({
136
+ selectedTokenMint,
137
+ collTokenMint,
138
+ withdrawAmount: new decimal_js_1.default(amount),
139
+ priceCollToDebt,
140
+ currentBorrowPosition: borrowed,
141
+ currentDepositPosition: deposited,
142
+ });
143
+ };
144
+ exports.estimateWithdrawMode = estimateWithdrawMode;
145
+ function calcWithdrawAmounts(params) {
146
+ const { currentBorrowPosition, currentDepositPosition, priceCollToDebt, withdrawAmount, selectedTokenMint, collTokenMint, } = params;
147
+ // MSOL/SOL
148
+ const currentDepositInCollateralToken = currentDepositPosition;
149
+ const currentDebtInCollateralToken = currentBorrowPosition.div(priceCollToDebt);
150
+ const currentNetPositionInCollateralToken = currentDepositInCollateralToken.minus(currentDebtInCollateralToken);
151
+ const targetLeverage = currentDepositInCollateralToken.div(currentNetPositionInCollateralToken);
152
+ const initialDepositInCollateralToken = currentDepositPosition.minus(currentBorrowPosition.div(priceCollToDebt));
153
+ const amountToWithdrawDepositToken = selectedTokenMint.equals(collTokenMint)
154
+ ? withdrawAmount
155
+ : withdrawAmount.div(priceCollToDebt);
156
+ const targetDeposit = initialDepositInCollateralToken.minus(amountToWithdrawDepositToken).mul(targetLeverage);
157
+ const targetBorrow = (0, exports.calcBorrowAmount)({
158
+ depositTokenAmount: initialDepositInCollateralToken.minus(amountToWithdrawDepositToken),
159
+ priceCollToDebt: new decimal_js_1.default(priceCollToDebt),
160
+ targetLeverage: new decimal_js_1.default(targetLeverage),
161
+ flashBorrowFee: new decimal_js_1.default(0),
162
+ });
163
+ const adjustDepositPosition = currentDepositPosition.minus(targetDeposit);
164
+ const adjustBorrowPosition = currentBorrowPosition.minus(targetBorrow);
165
+ // TODO: add flashLoan fee here in final values
166
+ return {
167
+ adjustDepositPosition,
168
+ adjustBorrowPosition,
169
+ };
170
+ }
171
+ exports.calcWithdrawAmounts = calcWithdrawAmounts;
172
+ const fuzzyEq = (a, b, epsilon = 0.0001) => {
173
+ return new decimal_js_1.default(a).sub(b).abs().lte(epsilon);
174
+ };
175
+ exports.fuzzyEq = fuzzyEq;
176
+ /**
177
+ * Calculate how much token will be deposited or withdrawn in case of position adjustment
178
+ * @param leverage
179
+ * @param totalDeposited
180
+ * @param totalBorrowed
181
+ */
182
+ const estimateAdjustMode = (priceCollToDebt, { targetLeverage, totalDeposited, totalBorrowed, flashLoanFee }) => {
183
+ return calcAdjustAmounts({
184
+ currentBorrowPosition: totalBorrowed,
185
+ currentDepositPosition: totalDeposited,
186
+ priceCollToDebt,
187
+ targetLeverage,
188
+ flashLoanFee,
189
+ });
190
+ };
191
+ exports.estimateAdjustMode = estimateAdjustMode;
192
+ /**
193
+ * Calculates the amounts of tokenA to deposit/withdraw and tokenB to borrow/repay proportionally to adjust the leverage of a position.
194
+ *
195
+ * @param {AdjustLeverageParams} params - Parameters for the calculation
196
+ * @param {number} params.targetLeverage - The target leverage for the position
197
+ * @param {Decimal} params.currentPositionTokenA - The current amount of tokenA in the position
198
+ * @param {Decimal} params.currentPositionTokenB - The current amount of borrowed tokenB in the position
199
+ * @param {number} params.priceAtoB - The conversion rate from tokenA to tokenB (tokenA price = tokenB price * priceAtoB)
200
+ * @returns {AdjustLeverageResult} An object containing the amounts of tokenA to deposit/withdraw and tokenB to borrow/repay
201
+ */
202
+ function calcAdjustAmounts({ targetLeverage, currentBorrowPosition, currentDepositPosition, priceCollToDebt, flashLoanFee, }) {
203
+ const initialDeposit = currentDepositPosition.minus(currentBorrowPosition.div(priceCollToDebt));
204
+ const targetDeposit = initialDeposit.mul(targetLeverage);
205
+ const targetBorrow = (0, exports.calcBorrowAmount)({
206
+ depositTokenAmount: initialDeposit,
207
+ priceCollToDebt: new decimal_js_1.default(priceCollToDebt),
208
+ targetLeverage: new decimal_js_1.default(targetLeverage),
209
+ flashBorrowFee: flashLoanFee,
210
+ });
211
+ const adjustDepositPosition = targetDeposit.minus(currentDepositPosition);
212
+ const adjustBorrowPosition = targetBorrow.minus(currentBorrowPosition);
213
+ return {
214
+ adjustDepositPosition,
215
+ adjustBorrowPosition,
216
+ };
217
+ }
218
+ exports.calcAdjustAmounts = calcAdjustAmounts;
219
+ // Given a deposit amount of Deposit|Borrow token
220
+ // and a target leverage, calculate final { collateral, debt } value
221
+ const estimateDepositMode = ({ priceCollToDebt, priceDebtToColl, amount, targetLeverage, selectedTokenMint, collTokenMint, flashLoanFee, slippagePct = new decimal_js_1.default(0), }) => {
222
+ const isDepositingCollToken = selectedTokenMint.equals(collTokenMint);
223
+ const finalCollTokenAmount = isDepositingCollToken
224
+ ? new decimal_js_1.default(amount).mul(targetLeverage).toNumber()
225
+ : new decimal_js_1.default(amount).mul(priceDebtToColl).mul(targetLeverage).toNumber();
226
+ const depositCollTokenAmount = isDepositingCollToken ? amount : amount.mul(priceDebtToColl);
227
+ const borrowAmount = (0, exports.calcBorrowAmount)({
228
+ depositTokenAmount: depositCollTokenAmount,
229
+ targetLeverage: new decimal_js_1.default(targetLeverage),
230
+ priceCollToDebt: new decimal_js_1.default(priceCollToDebt),
231
+ flashBorrowFee: new decimal_js_1.default(flashLoanFee),
232
+ });
233
+ const slippageFactor = new decimal_js_1.default(1).add(slippagePct.div(new decimal_js_1.default(100)));
234
+ const borrowAmountWithSlippage = borrowAmount.mul(slippageFactor);
235
+ return {
236
+ adjustDepositPosition: finalCollTokenAmount,
237
+ adjustBorrowPosition: borrowAmountWithSlippage.toNumber(),
238
+ };
239
+ };
240
+ exports.estimateDepositMode = estimateDepositMode;
241
+ /**
242
+ * Given an amount of ktokens, returns the estimated amount of token A and token B that need to be deposited
243
+ * The amount of A and B may result in less ktokens being minted, the actual amount of ktokens minted is returned as well
244
+ * @param kamino
245
+ * @param strategy
246
+ * @param mintAmount - desired amount of ktokens to mint
247
+ * @param strategyHoldings - optional strategy holdings, if not provided will be fetched from the blockchain
248
+ * @returns [tokenA, tokenB, actualMintAmount]
249
+ */
250
+ function simulateMintKToken(kamino, strategy, mintAmount, strategyHoldings) {
251
+ return __awaiter(this, void 0, void 0, function* () {
252
+ let holdings = strategyHoldings;
253
+ if (!holdings) {
254
+ holdings = yield kamino.getStrategyTokensHoldings(strategy, 'DEPOSIT');
255
+ }
256
+ const sharesIssuedDecimal = new decimal_js_1.default(strategy.strategy.sharesIssued.toString()).div(Math.pow(10, strategy.strategy.sharesMintDecimals.toNumber()));
257
+ // Add 1 because the sdk doesn't round up where the SC will
258
+ const strategyA = holdings.a.div(Math.pow(10, strategy.strategy.tokenAMintDecimals.toNumber()));
259
+ const strategyB = holdings.b.div(Math.pow(10, strategy.strategy.tokenBMintDecimals.toNumber()));
260
+ const aPerShare = strategyA.div(sharesIssuedDecimal);
261
+ const bPerShare = strategyB.div(sharesIssuedDecimal);
262
+ const requiredA = aPerShare.mul(mintAmount);
263
+ const requiredB = bPerShare.mul(mintAmount);
264
+ const pxAInB = strategyB.div(strategyA);
265
+ console.info(`Estimating kToken mint of ${mintAmount} ktokens on strategy ${strategy.address.toString()} requires: estimated A: ${requiredA}, estimated B: ${requiredB}. Current pool state:\n${(0, exports.toJson)(Object.assign(Object.assign({}, holdings), { sharesIssued: sharesIssuedDecimal, poolPxAInB: pxAInB }))}`);
266
+ // If we deposited with this exact ratio - how many ktokens do we actually get from the program?
267
+ const RustDecimal = decimal_js_1.default.clone({ precision: 18, rounding: decimal_js_1.default.ROUND_FLOOR });
268
+ const usA = new RustDecimal(holdings.a);
269
+ const usB = new RustDecimal(holdings.b);
270
+ const uA = new RustDecimal(requiredA.mul(Math.pow(10, strategy.strategy.tokenAMintDecimals.toNumber())).ceil());
271
+ const uB = new RustDecimal(requiredB.mul(Math.pow(10, strategy.strategy.tokenBMintDecimals.toNumber())).ceil());
272
+ const ratio = usA.div(usB);
273
+ const depositableB = uA.div(ratio).floor();
274
+ let actualA, actualB;
275
+ if (depositableB.lte(uB)) {
276
+ actualA = depositableB.mul(ratio).floor();
277
+ actualB = uB;
278
+ }
279
+ else {
280
+ actualA = uB.mul(ratio).floor();
281
+ actualB = actualA.div(ratio).floor();
282
+ }
283
+ const actualMintFromA = actualA.mul(strategy.strategy.sharesIssued.toString()).div(holdings.a).floor();
284
+ const actualMintFromB = actualB.mul(strategy.strategy.sharesIssued.toString()).div(holdings.b).floor();
285
+ const actualMint = decimal_js_1.default.min(actualMintFromA, actualMintFromB).div(Math.pow(10, strategy.strategy.sharesMintDecimals.toNumber()));
286
+ console.log(`Actual deposit amounts: A: ${actualA}, B: ${actualB}, kTokens to mint: ${actualMint}`);
287
+ return [requiredA, requiredB, actualMint];
288
+ });
289
+ }
290
+ exports.simulateMintKToken = simulateMintKToken;
291
+ //# sourceMappingURL=calcs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calcs.js","sourceRoot":"","sources":["../../src/leverage/calcs.ts"],"names":[],"mappings":"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","sourcesContent":["import { PublicKey } from '@solana/web3.js';\nimport Decimal from 'decimal.js';\nimport { Kamino, StrategyWithAddress, TokenAmounts } from '@hubbleprotocol/kamino-sdk';\n\nexport const toJson = (object: any): string => {\n return JSON.stringify(object, null, 2);\n};\n\nconst closingPositionDiffTolerance = 0.0001;\n\nexport enum FormTabs {\n deposit = 'Deposit',\n withdraw = 'Withdraw',\n adjust = 'Adjust',\n close = 'Close',\n}\n\nexport interface LeverageFormsCalcsArgs {\n depositAmount: Decimal;\n withdrawAmount: Decimal;\n deposited: Decimal;\n borrowed: Decimal;\n debtTokenMint: PublicKey;\n selectedTokenMint: PublicKey;\n collTokenMint: PublicKey;\n targetLeverage: Decimal;\n activeTab: FormTabs;\n flashBorrowReserveFlashLoanFeePercentage: Decimal;\n debtBorrowFactorPct: Decimal;\n priceCollToDebt: Decimal;\n priceDebtToColl: Decimal;\n}\n\nexport interface FormsCalcsResult {\n earned: Decimal;\n totalDeposited: Decimal;\n totalBorrowed: Decimal;\n netValue: Decimal;\n netValueUsd: Decimal;\n ltv: Decimal;\n}\n\nexport async function calculateMultiplyEffects(\n getPriceByTokenMintDecimal: (mint: PublicKey | string) => Decimal,\n {\n depositAmount,\n withdrawAmount,\n deposited,\n borrowed,\n debtTokenMint,\n selectedTokenMint,\n collTokenMint,\n targetLeverage,\n activeTab,\n flashBorrowReserveFlashLoanFeePercentage,\n debtBorrowFactorPct,\n priceCollToDebt,\n priceDebtToColl,\n }: LeverageFormsCalcsArgs\n): Promise<FormsCalcsResult> {\n // calculate estimations for deposit operation\n const {\n adjustDepositPosition: depositModeEstimatedDepositAmount,\n adjustBorrowPosition: depositModeEstimatedBorrowAmount,\n } = estimateDepositMode({\n priceCollToDebt,\n priceDebtToColl,\n amount: depositAmount,\n targetLeverage,\n selectedTokenMint,\n collTokenMint: collTokenMint,\n flashLoanFee: flashBorrowReserveFlashLoanFeePercentage,\n });\n\n // calculate estimations for withdraw operation\n const {\n adjustDepositPosition: withdrawModeEstimatedDepositTokenWithdrawn,\n adjustBorrowPosition: withdrawModeEstimatedBorrowTokenWithdrawn,\n } = estimateWithdrawMode({\n priceCollToDebt: priceCollToDebt,\n collTokenMint,\n selectedTokenMint,\n amount: withdrawAmount,\n deposited: new Decimal(deposited),\n borrowed: new Decimal(borrowed),\n });\n\n // calculate estimations for adjust operation\n const {\n adjustDepositPosition: adjustModeEstimatedDepositAmount,\n adjustBorrowPosition: adjustModeEstimateBorrowAmount,\n } = estimateAdjustMode(priceCollToDebt, {\n targetLeverage,\n debtTokenMint,\n collTokenMint,\n totalDeposited: new Decimal(deposited),\n totalBorrowed: new Decimal(borrowed),\n flashLoanFee: flashBorrowReserveFlashLoanFeePercentage, // TODO: is this the right flash borrow?\n });\n\n console.log(\n 'Estimations',\n toJson({\n activeTab,\n depositModeEstimatedDepositAmount,\n depositModeEstimatedBorrowAmount,\n withdrawModeEstimatedDepositTokenWithdrawn,\n withdrawModeEstimatedBorrowTokenWithdrawn,\n adjustModeEstimatedDepositAmount,\n adjustModeEstimateBorrowAmount,\n })\n );\n\n let [isClosingPosition, totalDeposited, totalBorrowed] = [false, new Decimal(0), new Decimal(0)];\n\n switch (activeTab) {\n case FormTabs.deposit: {\n // Deposit and Adjust never clos the position\n isClosingPosition = false;\n totalDeposited = deposited.add(depositModeEstimatedDepositAmount);\n totalBorrowed = borrowed.add(depositModeEstimatedBorrowAmount);\n break;\n }\n case FormTabs.close:\n case FormTabs.withdraw: {\n isClosingPosition =\n (withdrawModeEstimatedDepositTokenWithdrawn.gte(new Decimal(deposited)) ||\n withdrawModeEstimatedBorrowTokenWithdrawn.gte(new Decimal(borrowed)) ||\n fuzzyEq(withdrawModeEstimatedDepositTokenWithdrawn, new Decimal(deposited), closingPositionDiffTolerance) ||\n fuzzyEq(withdrawModeEstimatedBorrowTokenWithdrawn, new Decimal(borrowed), closingPositionDiffTolerance)) &&\n !fuzzyEq(withdrawModeEstimatedDepositTokenWithdrawn, new Decimal(0), closingPositionDiffTolerance);\n\n totalDeposited = isClosingPosition ? new Decimal(0) : deposited.sub(withdrawModeEstimatedDepositTokenWithdrawn);\n totalBorrowed = isClosingPosition ? new Decimal(0) : borrowed.sub(withdrawModeEstimatedBorrowTokenWithdrawn);\n break;\n }\n case FormTabs.adjust: {\n // Deposit and Adjust never clos the position\n isClosingPosition = false;\n totalDeposited = deposited.add(adjustModeEstimatedDepositAmount);\n totalBorrowed = borrowed.add(adjustModeEstimateBorrowAmount);\n break;\n }\n }\n\n const borrowTokenPrice = getPriceByTokenMintDecimal(debtTokenMint);\n const depositTokenPrice = getPriceByTokenMintDecimal(collTokenMint);\n\n const totalDepositedUsd = depositTokenPrice.mul(totalDeposited);\n const totalBorrowedUsd = borrowTokenPrice.mul(totalBorrowed);\n const netValueUsd = totalDepositedUsd.minus(totalBorrowedUsd);\n // TODO marius this is bad, do not convert to sol as we don't only do leveraged loops only\n const netValueSol = netValueUsd.div(borrowTokenPrice);\n const ltv = totalBorrowedUsd.mul(debtBorrowFactorPct.div(100)).div(totalDepositedUsd);\n\n return {\n earned: new Decimal(0),\n totalDeposited,\n totalBorrowed,\n netValue: netValueSol,\n netValueUsd: netValueUsd,\n ltv,\n };\n}\n\n/**\n * returns how much borrowToken will be borrowed to reach leverage given initial collateral amount\n * @param depositTokenAmount\n * @param leverage\n * @param priceAToB\n * @param flashBorrowFee\n */\nexport const calcBorrowAmount = ({\n depositTokenAmount,\n targetLeverage,\n priceCollToDebt,\n flashBorrowFee,\n}: {\n depositTokenAmount: Decimal;\n targetLeverage: Decimal;\n priceCollToDebt: Decimal;\n flashBorrowFee: Decimal;\n}) => {\n const initialCollAmountInCollToken = depositTokenAmount;\n\n const finalCollAmountInCollToken = initialCollAmountInCollToken.mul(targetLeverage);\n const finalDebtAmountInCollToken = finalCollAmountInCollToken.sub(initialCollAmountInCollToken);\n const finalDebtAmountInDebtToken = finalDebtAmountInCollToken.mul(priceCollToDebt);\n\n const flashFeeFactor = new Decimal(1).add(flashBorrowFee);\n const debtTokenToBorrow = finalDebtAmountInDebtToken.mul(flashFeeFactor);\n\n return debtTokenToBorrow;\n};\n\ninterface UseEstimateWithdrawAmountsProps {\n priceCollToDebt: Decimal;\n amount: Decimal.Value;\n deposited: Decimal;\n borrowed: Decimal;\n collTokenMint: PublicKey;\n selectedTokenMint: PublicKey;\n}\n\nexport const estimateWithdrawMode = (props: UseEstimateWithdrawAmountsProps) => {\n const { amount, collTokenMint, selectedTokenMint, deposited, borrowed, priceCollToDebt } = props;\n\n return calcWithdrawAmounts({\n selectedTokenMint,\n collTokenMint,\n withdrawAmount: new Decimal(amount),\n priceCollToDebt,\n currentBorrowPosition: borrowed,\n currentDepositPosition: deposited,\n });\n};\n\nexport interface WithdrawParams {\n currentBorrowPosition: Decimal;\n currentDepositPosition: Decimal;\n priceCollToDebt: Decimal;\n withdrawAmount: Decimal;\n selectedTokenMint: PublicKey;\n collTokenMint: PublicKey;\n}\n\ninterface WithdrawResult {\n adjustDepositPosition: Decimal;\n adjustBorrowPosition: Decimal;\n}\n\nexport function calcWithdrawAmounts(params: WithdrawParams): WithdrawResult {\n const {\n currentBorrowPosition,\n currentDepositPosition,\n priceCollToDebt,\n withdrawAmount,\n selectedTokenMint,\n collTokenMint,\n } = params;\n\n // MSOL/SOL\n const currentDepositInCollateralToken = currentDepositPosition;\n const currentDebtInCollateralToken = currentBorrowPosition.div(priceCollToDebt);\n const currentNetPositionInCollateralToken = currentDepositInCollateralToken.minus(currentDebtInCollateralToken);\n const targetLeverage = currentDepositInCollateralToken.div(currentNetPositionInCollateralToken);\n\n const initialDepositInCollateralToken = currentDepositPosition.minus(currentBorrowPosition.div(priceCollToDebt));\n\n const amountToWithdrawDepositToken = selectedTokenMint.equals(collTokenMint)\n ? withdrawAmount\n : withdrawAmount.div(priceCollToDebt);\n\n const targetDeposit = initialDepositInCollateralToken.minus(amountToWithdrawDepositToken).mul(targetLeverage);\n\n const targetBorrow = calcBorrowAmount({\n depositTokenAmount: initialDepositInCollateralToken.minus(amountToWithdrawDepositToken),\n priceCollToDebt: new Decimal(priceCollToDebt),\n targetLeverage: new Decimal(targetLeverage),\n flashBorrowFee: new Decimal(0),\n });\n\n const adjustDepositPosition = currentDepositPosition.minus(targetDeposit);\n const adjustBorrowPosition = currentBorrowPosition.minus(targetBorrow);\n\n // TODO: add flashLoan fee here in final values\n return {\n adjustDepositPosition,\n adjustBorrowPosition,\n };\n}\n\nexport const fuzzyEq = (a: Decimal.Value, b: Decimal.Value, epsilon = 0.0001) => {\n return new Decimal(a).sub(b).abs().lte(epsilon);\n};\n\ninterface UseEstimateAdjustAmountsProps {\n targetLeverage: Decimal;\n debtTokenMint: PublicKey;\n collTokenMint: PublicKey;\n totalDeposited: Decimal;\n totalBorrowed: Decimal;\n flashLoanFee: Decimal;\n}\n\n/**\n * Calculate how much token will be deposited or withdrawn in case of position adjustment\n * @param leverage\n * @param totalDeposited\n * @param totalBorrowed\n */\nexport const estimateAdjustMode = (\n priceCollToDebt: Decimal,\n { targetLeverage, totalDeposited, totalBorrowed, flashLoanFee }: UseEstimateAdjustAmountsProps\n) => {\n return calcAdjustAmounts({\n currentBorrowPosition: totalBorrowed,\n currentDepositPosition: totalDeposited,\n priceCollToDebt,\n targetLeverage,\n flashLoanFee,\n });\n};\n\nexport interface AdjustLeverageParams {\n targetLeverage: Decimal;\n currentBorrowPosition: Decimal;\n currentDepositPosition: Decimal;\n priceCollToDebt: Decimal;\n flashLoanFee: Decimal;\n}\n\ninterface AdjustLeverageResult {\n adjustDepositPosition: Decimal;\n adjustBorrowPosition: Decimal;\n}\n\n/**\n * Calculates the amounts of tokenA to deposit/withdraw and tokenB to borrow/repay proportionally to adjust the leverage of a position.\n *\n * @param {AdjustLeverageParams} params - Parameters for the calculation\n * @param {number} params.targetLeverage - The target leverage for the position\n * @param {Decimal} params.currentPositionTokenA - The current amount of tokenA in the position\n * @param {Decimal} params.currentPositionTokenB - The current amount of borrowed tokenB in the position\n * @param {number} params.priceAtoB - The conversion rate from tokenA to tokenB (tokenA price = tokenB price * priceAtoB)\n * @returns {AdjustLeverageResult} An object containing the amounts of tokenA to deposit/withdraw and tokenB to borrow/repay\n */\nexport function calcAdjustAmounts({\n targetLeverage,\n currentBorrowPosition,\n currentDepositPosition,\n priceCollToDebt,\n flashLoanFee,\n}: AdjustLeverageParams): AdjustLeverageResult {\n const initialDeposit = currentDepositPosition.minus(currentBorrowPosition.div(priceCollToDebt));\n const targetDeposit = initialDeposit.mul(targetLeverage);\n\n const targetBorrow = calcBorrowAmount({\n depositTokenAmount: initialDeposit,\n priceCollToDebt: new Decimal(priceCollToDebt),\n targetLeverage: new Decimal(targetLeverage),\n flashBorrowFee: flashLoanFee,\n });\n\n const adjustDepositPosition = targetDeposit.minus(currentDepositPosition);\n const adjustBorrowPosition = targetBorrow.minus(currentBorrowPosition);\n\n return {\n adjustDepositPosition,\n adjustBorrowPosition,\n };\n}\n\ninterface UseTransactionInfoStats {\n priceCollToDebt: Decimal;\n priceDebtToColl: Decimal;\n amount: Decimal;\n targetLeverage: Decimal;\n selectedTokenMint: PublicKey;\n collTokenMint: PublicKey;\n flashLoanFee: Decimal;\n slippagePct?: Decimal;\n}\n\n// Given a deposit amount of Deposit|Borrow token\n// and a target leverage, calculate final { collateral, debt } value\nexport const estimateDepositMode = ({\n priceCollToDebt,\n priceDebtToColl,\n amount,\n targetLeverage,\n selectedTokenMint,\n collTokenMint,\n flashLoanFee,\n slippagePct = new Decimal(0),\n}: UseTransactionInfoStats) => {\n const isDepositingCollToken = selectedTokenMint.equals(collTokenMint);\n\n const finalCollTokenAmount = isDepositingCollToken\n ? new Decimal(amount).mul(targetLeverage).toNumber()\n : new Decimal(amount).mul(priceDebtToColl).mul(targetLeverage).toNumber();\n\n const depositCollTokenAmount = isDepositingCollToken ? amount : amount.mul(priceDebtToColl);\n const borrowAmount = calcBorrowAmount({\n depositTokenAmount: depositCollTokenAmount,\n targetLeverage: new Decimal(targetLeverage),\n priceCollToDebt: new Decimal(priceCollToDebt),\n flashBorrowFee: new Decimal(flashLoanFee),\n });\n\n const slippageFactor = new Decimal(1).add(slippagePct.div(new Decimal(100)));\n const borrowAmountWithSlippage = borrowAmount.mul(slippageFactor);\n\n return {\n adjustDepositPosition: finalCollTokenAmount,\n adjustBorrowPosition: borrowAmountWithSlippage.toNumber(),\n };\n};\n\n/**\n * Given an amount of ktokens, returns the estimated amount of token A and token B that need to be deposited\n * The amount of A and B may result in less ktokens being minted, the actual amount of ktokens minted is returned as well\n * @param kamino\n * @param strategy\n * @param mintAmount - desired amount of ktokens to mint\n * @param strategyHoldings - optional strategy holdings, if not provided will be fetched from the blockchain\n * @returns [tokenA, tokenB, actualMintAmount]\n */\nexport async function simulateMintKToken(\n kamino: Kamino,\n strategy: StrategyWithAddress,\n mintAmount: Decimal,\n strategyHoldings?: TokenAmounts\n): Promise<[Decimal, Decimal, Decimal]> {\n let holdings = strategyHoldings;\n if (!holdings) {\n holdings = await kamino.getStrategyTokensHoldings(strategy, 'DEPOSIT');\n }\n const sharesIssuedDecimal = new Decimal(strategy.strategy.sharesIssued.toString()).div(\n 10 ** strategy.strategy.sharesMintDecimals.toNumber()\n );\n\n // Add 1 because the sdk doesn't round up where the SC will\n const strategyA = holdings.a.div(10 ** strategy.strategy.tokenAMintDecimals.toNumber());\n const strategyB = holdings.b.div(10 ** strategy.strategy.tokenBMintDecimals.toNumber());\n const aPerShare = strategyA.div(sharesIssuedDecimal);\n const bPerShare = strategyB.div(sharesIssuedDecimal);\n\n const requiredA = aPerShare.mul(mintAmount);\n const requiredB = bPerShare.mul(mintAmount);\n const pxAInB = strategyB.div(strategyA);\n\n console.info(\n `Estimating kToken mint of ${mintAmount} ktokens on strategy ${strategy.address.toString()} requires: estimated A: ${requiredA}, estimated B: ${requiredB}. Current pool state:\\n${toJson(\n { ...holdings, sharesIssued: sharesIssuedDecimal, poolPxAInB: pxAInB }\n )}`\n );\n\n // If we deposited with this exact ratio - how many ktokens do we actually get from the program?\n const RustDecimal = Decimal.clone({ precision: 18, rounding: Decimal.ROUND_FLOOR });\n\n const usA = new RustDecimal(holdings.a);\n const usB = new RustDecimal(holdings.b);\n const uA = new RustDecimal(requiredA.mul(10 ** strategy.strategy.tokenAMintDecimals.toNumber()).ceil());\n const uB = new RustDecimal(requiredB.mul(10 ** strategy.strategy.tokenBMintDecimals.toNumber()).ceil());\n\n const ratio = usA.div(usB);\n const depositableB = uA.div(ratio).floor();\n let actualA, actualB;\n if (depositableB.lte(uB)) {\n actualA = depositableB.mul(ratio).floor();\n actualB = uB;\n } else {\n actualA = uB.mul(ratio).floor();\n actualB = actualA.div(ratio).floor();\n }\n const actualMintFromA = actualA.mul(strategy.strategy.sharesIssued.toString()).div(holdings.a).floor();\n const actualMintFromB = actualB.mul(strategy.strategy.sharesIssued.toString()).div(holdings.b).floor();\n const actualMint = Decimal.min(actualMintFromA, actualMintFromB).div(\n 10 ** strategy.strategy.sharesMintDecimals.toNumber()\n );\n console.log(`Actual deposit amounts: A: ${actualA}, B: ${actualB}, kTokens to mint: ${actualMint}`);\n\n return [requiredA, requiredB, actualMint];\n}\n"]}
@@ -0,0 +1,4 @@
1
+ export * from './calcs';
2
+ export * from './instructions';
3
+ export * from './operations';
4
+ export * from './utils';
@@ -0,0 +1,21 @@
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("./calcs"), exports);
18
+ __exportStar(require("./instructions"), exports);
19
+ __exportStar(require("./operations"), exports);
20
+ __exportStar(require("./utils"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/leverage/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,iDAA+B;AAC/B,+CAA6B;AAC7B,0CAAwB","sourcesContent":["export * from './calcs';\nexport * from './instructions';\nexport * from './operations';\nexport * from './utils';\n"]}
@@ -0,0 +1,43 @@
1
+ import { PublicKey } from '@solana/web3.js';
2
+ import { KaminoReserve } from '../classes';
3
+ import Decimal from 'decimal.js';
4
+ import * as anchor from '@coral-xyz/anchor';
5
+ export declare const SOL_MINTS: Array<PublicKey>;
6
+ export declare const getFlashLoanInstructions: (args: {
7
+ borrowIxnIndex: number;
8
+ walletPublicKey: PublicKey;
9
+ lendingMarketAuthority: PublicKey;
10
+ lendingMarketAddress: PublicKey;
11
+ reserve: KaminoReserve;
12
+ amountLamports: Decimal;
13
+ destinationAta: PublicKey;
14
+ referrerAccount: PublicKey;
15
+ referrerTokenState: PublicKey;
16
+ programId: PublicKey;
17
+ }) => {
18
+ flashBorrowIxn: anchor.web3.TransactionInstruction;
19
+ flashRepayIxn: anchor.web3.TransactionInstruction;
20
+ };
21
+ export declare const getBorrowFlashLoanInstruction: ({ walletPublicKey, lendingMarketAuthority, lendingMarketAddress, reserve, amountLamports, destinationAta, referrerAccount, referrerTokenState, programId, }: {
22
+ walletPublicKey: PublicKey;
23
+ lendingMarketAuthority: PublicKey;
24
+ lendingMarketAddress: PublicKey;
25
+ reserve: KaminoReserve;
26
+ amountLamports: Decimal;
27
+ destinationAta: PublicKey;
28
+ referrerAccount: PublicKey;
29
+ referrerTokenState: PublicKey;
30
+ programId: PublicKey;
31
+ }) => anchor.web3.TransactionInstruction;
32
+ export declare const getRepayFlashLoanInstruction: ({ borrowIxnIndex, walletPublicKey, lendingMarketAuthority, lendingMarketAddress, reserve, amountLamports, userSourceLiquidity, referrerAccount, referrerTokenState, programId, }: {
33
+ borrowIxnIndex: number;
34
+ walletPublicKey: PublicKey;
35
+ lendingMarketAuthority: PublicKey;
36
+ lendingMarketAddress: PublicKey;
37
+ reserve: KaminoReserve;
38
+ amountLamports: Decimal;
39
+ userSourceLiquidity: PublicKey;
40
+ referrerAccount: PublicKey;
41
+ referrerTokenState: PublicKey;
42
+ programId: PublicKey;
43
+ }) => anchor.web3.TransactionInstruction;
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.getRepayFlashLoanInstruction = exports.getBorrowFlashLoanInstruction = exports.getFlashLoanInstructions = exports.SOL_MINTS = void 0;
27
+ const spl_token_1 = require("@solana/spl-token");
28
+ const web3_js_1 = require("@solana/web3.js");
29
+ const lib_1 = require("../lib");
30
+ const anchor = __importStar(require("@coral-xyz/anchor"));
31
+ exports.SOL_MINTS = [
32
+ new web3_js_1.PublicKey('So11111111111111111111111111111111111111111'),
33
+ new web3_js_1.PublicKey('So11111111111111111111111111111111111111112'),
34
+ ];
35
+ const getFlashLoanInstructions = (args) => {
36
+ const flashBorrowIxn = (0, exports.getBorrowFlashLoanInstruction)({
37
+ walletPublicKey: args.walletPublicKey,
38
+ lendingMarketAuthority: args.lendingMarketAuthority,
39
+ lendingMarketAddress: args.lendingMarketAddress,
40
+ reserve: args.reserve,
41
+ amountLamports: args.amountLamports,
42
+ destinationAta: args.destinationAta,
43
+ referrerAccount: args.referrerAccount,
44
+ referrerTokenState: args.referrerTokenState,
45
+ programId: args.programId,
46
+ });
47
+ const flashRepayIxn = (0, exports.getRepayFlashLoanInstruction)({
48
+ borrowIxnIndex: args.borrowIxnIndex,
49
+ walletPublicKey: args.walletPublicKey,
50
+ lendingMarketAuthority: args.lendingMarketAuthority,
51
+ lendingMarketAddress: args.lendingMarketAddress,
52
+ reserve: args.reserve,
53
+ amountLamports: args.amountLamports,
54
+ userSourceLiquidity: args.destinationAta,
55
+ referrerAccount: args.referrerAccount,
56
+ referrerTokenState: args.referrerTokenState,
57
+ programId: args.programId,
58
+ });
59
+ return { flashBorrowIxn, flashRepayIxn };
60
+ };
61
+ exports.getFlashLoanInstructions = getFlashLoanInstructions;
62
+ const getBorrowFlashLoanInstruction = ({ walletPublicKey, lendingMarketAuthority, lendingMarketAddress, reserve, amountLamports, destinationAta, referrerAccount, referrerTokenState, programId, }) => {
63
+ const args = {
64
+ liquidityAmount: new anchor.BN(amountLamports.floor().toString()),
65
+ };
66
+ const accounts = {
67
+ userTransferAuthority: walletPublicKey,
68
+ lendingMarketAuthority: lendingMarketAuthority,
69
+ lendingMarket: lendingMarketAddress,
70
+ reserve: reserve.address,
71
+ reserveSourceLiquidity: reserve.state.liquidity.supplyVault,
72
+ userDestinationLiquidity: destinationAta,
73
+ referrerAccount: referrerAccount,
74
+ referrerTokenState: referrerTokenState,
75
+ reserveLiquidityFeeReceiver: reserve.state.liquidity.feeVault,
76
+ sysvarInfo: web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY,
77
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
78
+ };
79
+ return (0, lib_1.flashBorrowReserveLiquidity)(args, accounts, programId);
80
+ };
81
+ exports.getBorrowFlashLoanInstruction = getBorrowFlashLoanInstruction;
82
+ const getRepayFlashLoanInstruction = ({ borrowIxnIndex, walletPublicKey, lendingMarketAuthority, lendingMarketAddress, reserve, amountLamports, userSourceLiquidity, referrerAccount, referrerTokenState, programId, }) => {
83
+ const args = {
84
+ borrowInstructionIndex: borrowIxnIndex,
85
+ liquidityAmount: new anchor.BN(amountLamports.floor().toString()),
86
+ };
87
+ const accounts = {
88
+ userTransferAuthority: walletPublicKey,
89
+ lendingMarketAuthority: lendingMarketAuthority,
90
+ lendingMarket: lendingMarketAddress,
91
+ reserve: reserve.address,
92
+ reserveDestinationLiquidity: reserve.state.liquidity.supplyVault,
93
+ userSourceLiquidity: userSourceLiquidity,
94
+ referrerAccount: referrerAccount,
95
+ referrerTokenState: referrerTokenState,
96
+ reserveLiquidityFeeReceiver: reserve.state.liquidity.feeVault,
97
+ sysvarInfo: web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY,
98
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
99
+ };
100
+ return (0, lib_1.flashRepayReserveLiquidity)(args, accounts, programId);
101
+ };
102
+ exports.getRepayFlashLoanInstruction = getRepayFlashLoanInstruction;
103
+ //# sourceMappingURL=instructions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instructions.js","sourceRoot":"","sources":["../../src/leverage/instructions.ts"],"names":[],"mappings":"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","sourcesContent":["import { TOKEN_PROGRAM_ID } from '@solana/spl-token';\nimport { PublicKey, SYSVAR_INSTRUCTIONS_PUBKEY } from '@solana/web3.js';\nimport { KaminoReserve } from '../classes';\nimport {\n FlashBorrowReserveLiquidityArgs,\n FlashBorrowReserveLiquidityAccounts,\n flashBorrowReserveLiquidity,\n FlashRepayReserveLiquidityArgs,\n FlashRepayReserveLiquidityAccounts,\n flashRepayReserveLiquidity,\n} from '../lib';\nimport Decimal from 'decimal.js';\nimport * as anchor from '@coral-xyz/anchor';\n\nexport const SOL_MINTS: Array<PublicKey> = [\n new PublicKey('So11111111111111111111111111111111111111111'),\n new PublicKey('So11111111111111111111111111111111111111112'),\n];\n\nexport const getFlashLoanInstructions = (args: {\n borrowIxnIndex: number;\n walletPublicKey: PublicKey;\n lendingMarketAuthority: PublicKey;\n lendingMarketAddress: PublicKey;\n reserve: KaminoReserve;\n amountLamports: Decimal;\n destinationAta: PublicKey;\n referrerAccount: PublicKey;\n referrerTokenState: PublicKey;\n programId: PublicKey;\n}) => {\n const flashBorrowIxn = getBorrowFlashLoanInstruction({\n walletPublicKey: args.walletPublicKey,\n lendingMarketAuthority: args.lendingMarketAuthority,\n lendingMarketAddress: args.lendingMarketAddress,\n reserve: args.reserve,\n amountLamports: args.amountLamports,\n destinationAta: args.destinationAta,\n referrerAccount: args.referrerAccount,\n referrerTokenState: args.referrerTokenState,\n programId: args.programId,\n });\n const flashRepayIxn = getRepayFlashLoanInstruction({\n borrowIxnIndex: args.borrowIxnIndex,\n walletPublicKey: args.walletPublicKey,\n lendingMarketAuthority: args.lendingMarketAuthority,\n lendingMarketAddress: args.lendingMarketAddress,\n reserve: args.reserve,\n amountLamports: args.amountLamports,\n userSourceLiquidity: args.destinationAta,\n referrerAccount: args.referrerAccount,\n referrerTokenState: args.referrerTokenState,\n programId: args.programId,\n });\n\n return { flashBorrowIxn, flashRepayIxn };\n};\n\nexport const getBorrowFlashLoanInstruction = ({\n walletPublicKey,\n lendingMarketAuthority,\n lendingMarketAddress,\n reserve,\n amountLamports,\n destinationAta,\n referrerAccount,\n referrerTokenState,\n programId,\n}: {\n walletPublicKey: PublicKey;\n lendingMarketAuthority: PublicKey;\n lendingMarketAddress: PublicKey;\n reserve: KaminoReserve;\n amountLamports: Decimal;\n destinationAta: PublicKey;\n referrerAccount: PublicKey;\n referrerTokenState: PublicKey;\n programId: PublicKey;\n}) => {\n const args: FlashBorrowReserveLiquidityArgs = {\n liquidityAmount: new anchor.BN(amountLamports.floor().toString()),\n };\n const accounts: FlashBorrowReserveLiquidityAccounts = {\n userTransferAuthority: walletPublicKey,\n lendingMarketAuthority: lendingMarketAuthority,\n lendingMarket: lendingMarketAddress,\n reserve: reserve.address,\n reserveSourceLiquidity: reserve.state.liquidity.supplyVault,\n userDestinationLiquidity: destinationAta,\n referrerAccount: referrerAccount,\n referrerTokenState: referrerTokenState,\n reserveLiquidityFeeReceiver: reserve.state.liquidity.feeVault,\n sysvarInfo: SYSVAR_INSTRUCTIONS_PUBKEY,\n tokenProgram: TOKEN_PROGRAM_ID,\n };\n\n return flashBorrowReserveLiquidity(args, accounts, programId);\n};\n\nexport const getRepayFlashLoanInstruction = ({\n borrowIxnIndex,\n walletPublicKey,\n lendingMarketAuthority,\n lendingMarketAddress,\n reserve,\n amountLamports,\n userSourceLiquidity,\n referrerAccount,\n referrerTokenState,\n programId,\n}: {\n borrowIxnIndex: number;\n walletPublicKey: PublicKey;\n lendingMarketAuthority: PublicKey;\n lendingMarketAddress: PublicKey;\n reserve: KaminoReserve;\n amountLamports: Decimal;\n userSourceLiquidity: PublicKey;\n referrerAccount: PublicKey;\n referrerTokenState: PublicKey;\n programId: PublicKey;\n}) => {\n const args: FlashRepayReserveLiquidityArgs = {\n borrowInstructionIndex: borrowIxnIndex,\n liquidityAmount: new anchor.BN(amountLamports.floor().toString()),\n };\n\n const accounts: FlashRepayReserveLiquidityAccounts = {\n userTransferAuthority: walletPublicKey,\n lendingMarketAuthority: lendingMarketAuthority,\n lendingMarket: lendingMarketAddress,\n reserve: reserve.address,\n reserveDestinationLiquidity: reserve.state.liquidity.supplyVault,\n userSourceLiquidity: userSourceLiquidity,\n referrerAccount: referrerAccount,\n referrerTokenState: referrerTokenState,\n reserveLiquidityFeeReceiver: reserve.state.liquidity.feeVault,\n sysvarInfo: SYSVAR_INSTRUCTIONS_PUBKEY,\n tokenProgram: TOKEN_PROGRAM_ID,\n };\n\n return flashRepayReserveLiquidity(args, accounts, programId);\n};\n"]}