@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 @@
1
+ {"version":3,"file":"action.js","sourceRoot":"","sources":["../../src/classes/action.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Connection,\n PublicKey,\n RpcResponseAndContext,\n SimulatedTransactionResponse,\n SystemProgram,\n SYSVAR_INSTRUCTIONS_PUBKEY,\n SYSVAR_RENT_PUBKEY,\n Transaction,\n TransactionInstruction,\n TransactionSignature,\n} from '@solana/web3.js';\nimport { ASSOCIATED_TOKEN_PROGRAM_ID, NATIVE_MINT, Token, TOKEN_PROGRAM_ID } from '@solana/spl-token';\nimport BN from 'bn.js';\nimport Decimal from 'decimal.js';\nimport {\n borrowObligationLiquidity,\n depositObligationCollateral,\n depositReserveLiquidity,\n depositReserveLiquidityAndObligationCollateral,\n initObligation,\n initObligationFarmsForReserve,\n InitObligationFarmsForReserveAccounts,\n InitObligationFarmsForReserveArgs,\n initReferrerTokenState,\n initUserMetadata,\n liquidateObligationAndRedeemReserveCollateral,\n redeemReserveCollateral,\n refreshObligation,\n refreshObligationFarmsForReserve,\n RefreshObligationFarmsForReserveAccounts,\n RefreshObligationFarmsForReserveArgs,\n refreshReserve,\n repayObligationLiquidity,\n requestElevationGroup,\n RequestElevationGroupAccounts,\n RequestElevationGroupArgs,\n withdrawObligationCollateralAndRedeemReserveCollateral,\n withdrawReferrerFees,\n} from '../idl_codegen/instructions';\nimport {\n buildComputeBudgetIx,\n createAssociatedTokenAccountIdempotentInstruction,\n ObligationType,\n syncNative,\n U64_MAX,\n referrerTokenStatePda,\n userMetadataPda,\n getAtasWithCreateIxnsIfMissing,\n checkIfAccountExists,\n createLookupTableIx,\n isNotNullPubkey,\n PublicKeySet,\n WRAPPED_SOL_MINT,\n} from '../utils';\nimport { KaminoMarket } from './market';\nimport { KaminoObligation } from './obligation';\nimport { KaminoReserve } from './reserve';\nimport { ReserveFarmKind } from '../idl_codegen/types';\nimport { farmsId } from '@hubbleprotocol/farms-sdk';\nimport { Reserve } from '../idl_codegen/accounts';\nimport { VanillaObligation } from '../utils/ObligationType';\nimport { PROGRAM_ID } from '../lib';\n\nexport const POSITION_LIMIT = 10;\nexport const BORROWS_LIMIT = 5;\nexport const DEPOSITS_LIMIT = 8;\n\nconst SOL_PADDING_FOR_INTEREST = new BN('1000000');\n\nexport type ActionType =\n | 'deposit'\n | 'borrow'\n | 'withdraw'\n | 'repay'\n | 'mint'\n | 'redeem'\n | 'depositCollateral'\n | 'liquidate'\n | 'depositAndBorrow'\n | 'repayAndWithdraw'\n | 'refreshObligation'\n | 'withdrawReferrerFees';\n\nexport class KaminoAction {\n kaminoMarket: KaminoMarket;\n\n reserve: KaminoReserve;\n\n outflowReserve: KaminoReserve | undefined;\n\n owner: PublicKey;\n payer: PublicKey;\n\n obligation: KaminoObligation | null = null;\n\n referrer: PublicKey;\n\n userTokenAccountAddress: PublicKey;\n\n userCollateralAccountAddress: PublicKey;\n\n additionalTokenAccountAddress?: PublicKey;\n\n /**\n * Null unless the obligation is not passed\n */\n obligationType: ObligationType | null = null;\n\n mint: PublicKey;\n\n secondaryMint?: PublicKey;\n\n positions?: number;\n\n amount: BN;\n outflowAmount?: BN;\n\n hostAta?: PublicKey;\n\n setupIxs: Array<TransactionInstruction>;\n setupIxsLabels: Array<string>;\n\n inBetweenIxs: Array<TransactionInstruction>;\n inBetweenIxsLabels: Array<string>;\n\n lendingIxs: Array<TransactionInstruction>;\n lendingIxsLabels: Array<string>;\n\n cleanupIxs: Array<TransactionInstruction>;\n cleanupIxsLabels: Array<string>;\n\n preTxnIxs: Array<TransactionInstruction>;\n preTxnIxsLabels: Array<string>;\n\n postTxnIxs: Array<TransactionInstruction>;\n postTxnIxsLabels: Array<string>;\n\n refreshFarmsCleanupTxnIxs: Array<TransactionInstruction>;\n refreshFarmsCleanupTxnIxsLabels: Array<string>;\n\n depositReserves: Array<PublicKey>;\n borrowReserves: Array<PublicKey>;\n\n preLoadedDepositReservesSameTx: Array<PublicKey>;\n preLoadedBorrowReservesSameTx: Array<PublicKey>;\n\n currentSlot: number;\n\n private constructor(\n kaminoMarket: KaminoMarket,\n owner: PublicKey,\n obligation: KaminoObligation | ObligationType | null,\n userTokenAccountAddress: PublicKey,\n userCollateralAccountAddress: PublicKey,\n mint: PublicKey,\n positions: number,\n amount: string | BN,\n depositReserves: Array<PublicKey>,\n borrowReserves: Array<PublicKey>,\n reserveState: KaminoReserve,\n currentSlot: number,\n hostAta?: PublicKey,\n secondaryMint?: PublicKey,\n additionalTokenAccountAddress?: PublicKey,\n outflowReserveState?: KaminoReserve,\n outflowAmount?: string | BN,\n referrer?: PublicKey,\n payer?: PublicKey\n ) {\n if (obligation instanceof KaminoObligation) {\n this.obligation = obligation;\n } else if (obligation !== null) {\n this.obligationType = obligation;\n }\n\n this.kaminoMarket = kaminoMarket;\n this.owner = owner;\n this.payer = payer ?? owner;\n this.amount = new BN(amount);\n this.mint = mint;\n this.positions = positions;\n this.hostAta = hostAta;\n this.userTokenAccountAddress = userTokenAccountAddress;\n this.userCollateralAccountAddress = userCollateralAccountAddress;\n this.setupIxs = [];\n this.setupIxsLabels = [];\n this.inBetweenIxs = [];\n this.inBetweenIxsLabels = [];\n this.lendingIxs = [];\n this.lendingIxsLabels = [];\n this.cleanupIxs = [];\n this.cleanupIxsLabels = [];\n this.preTxnIxs = [];\n this.preTxnIxsLabels = [];\n this.postTxnIxs = [];\n this.postTxnIxsLabels = [];\n this.refreshFarmsCleanupTxnIxs = [];\n this.refreshFarmsCleanupTxnIxsLabels = [];\n this.depositReserves = depositReserves;\n this.borrowReserves = borrowReserves;\n this.additionalTokenAccountAddress = additionalTokenAccountAddress;\n this.secondaryMint = secondaryMint;\n this.reserve = reserveState;\n this.outflowReserve = outflowReserveState;\n this.outflowAmount = outflowAmount ? new BN(outflowAmount) : undefined;\n this.preLoadedDepositReservesSameTx = [];\n this.preLoadedBorrowReservesSameTx = [];\n this.referrer = referrer ? referrer : PublicKey.default;\n this.currentSlot = currentSlot;\n }\n\n static async initialize(\n action: ActionType,\n amount: string | BN,\n mint: PublicKey,\n owner: PublicKey,\n kaminoMarket: KaminoMarket,\n obligation: KaminoObligation | ObligationType,\n referrer: PublicKey = PublicKey.default,\n currentSlot: number = 0,\n hostAta?: PublicKey,\n payer?: PublicKey\n ) {\n const reserve = kaminoMarket.getReserveByMint(mint);\n if (reserve === undefined) {\n throw new Error(`Reserve ${mint} not found in market ${kaminoMarket.getAddress().toBase58()}`);\n }\n\n const { userTokenAccountAddress, userCollateralAccountAddress } = await KaminoAction.getUserAccountAddresses(\n payer ?? owner,\n reserve.state\n );\n\n const { kaminoObligation, depositReserves, borrowReserves, distinctReserveCount } =\n await KaminoAction.loadObligation(action, kaminoMarket, owner, reserve.address, obligation);\n\n const [_, userMetadata] = await kaminoMarket.getUserMetadata(owner);\n if (userMetadata) {\n referrer = userMetadata.referrer;\n }\n\n const referrerKey = kaminoObligation ? kaminoObligation.state.referrer : referrer;\n\n return new KaminoAction(\n kaminoMarket,\n owner,\n kaminoObligation || obligation,\n userTokenAccountAddress,\n userCollateralAccountAddress,\n mint,\n distinctReserveCount,\n amount,\n depositReserves,\n borrowReserves,\n reserve,\n currentSlot,\n hostAta,\n undefined,\n undefined,\n undefined,\n undefined,\n referrerKey,\n payer\n );\n }\n\n private static async getUserAccountAddresses(owner: PublicKey, reserve: Reserve) {\n const userTokenAccountAddress = await Token.getAssociatedTokenAddress(\n ASSOCIATED_TOKEN_PROGRAM_ID,\n TOKEN_PROGRAM_ID,\n reserve.liquidity.mintPubkey,\n owner,\n true\n );\n const userCollateralAccountAddress = await Token.getAssociatedTokenAddress(\n ASSOCIATED_TOKEN_PROGRAM_ID,\n TOKEN_PROGRAM_ID,\n reserve.collateral.mintPubkey,\n owner,\n true\n );\n\n return { userTokenAccountAddress, userCollateralAccountAddress };\n }\n\n private static async loadObligation(\n action: ActionType,\n kaminoMarket: KaminoMarket,\n owner: PublicKey,\n reserve: PublicKey,\n obligation: KaminoObligation | ObligationType,\n outflowReserve?: PublicKey\n ) {\n let kaminoObligation: KaminoObligation | null;\n const depositReserves: Array<PublicKey> = [];\n const borrowReserves: Array<PublicKey> = [];\n if (obligation instanceof KaminoObligation) {\n kaminoObligation = obligation;\n } else {\n const obligationAddress = obligation.toPda(kaminoMarket.getAddress(), owner);\n kaminoObligation = await KaminoObligation.load(kaminoMarket, obligationAddress);\n }\n if (kaminoObligation !== null) {\n depositReserves.push(...[...kaminoObligation.deposits.keys()]);\n borrowReserves.push(...[...kaminoObligation.borrows.keys()]);\n }\n\n if (!outflowReserve && action === 'depositAndBorrow') {\n throw new Error(`Outflow reserve has not been set for depositAndBorrow`);\n }\n\n // Union of addresses\n const distinctReserveCount =\n [\n ...new Set([\n ...borrowReserves.map((e) => e.toBase58()),\n ...(action === 'borrow' ? [reserve.toBase58()] : []),\n ...(action === 'depositAndBorrow' ? [reserve.toBase58()] : []),\n ]),\n ].length +\n [\n ...new Set([\n ...depositReserves.map((e) => e.toBase58()),\n ...(action === 'deposit' ? [reserve.toBase58()] : []),\n ...(action === 'depositAndBorrow' ? [outflowReserve!.toBase58()] : []),\n ]),\n ].length;\n\n if (distinctReserveCount > POSITION_LIMIT) {\n throw Error(`Obligation already has max number of positions: ${POSITION_LIMIT}`);\n }\n\n return {\n kaminoObligation,\n depositReserves,\n borrowReserves,\n distinctReserveCount,\n };\n }\n\n static async buildRefreshObligationTxns(\n kaminoMarket: KaminoMarket,\n payer: PublicKey,\n obligation: KaminoObligation,\n extraComputeBudget: number = 1_000_000, // if > 0 then adds the ixn\n currentSlot: number = 0\n ) {\n // placeholder for action initialization\n const firstReserve = obligation.state.deposits[0].depositReserve;\n const firstKaminoReserve = kaminoMarket.getReserveByAddress(firstReserve);\n if (!firstKaminoReserve) {\n throw new Error(`Reserve ${firstReserve.toBase58()} not found`);\n }\n const axn = await KaminoAction.initialize(\n 'refreshObligation',\n '0',\n firstKaminoReserve?.getLiquidityMint(),\n obligation.state.owner,\n kaminoMarket,\n obligation,\n kaminoMarket.programId,\n currentSlot\n );\n\n if (extraComputeBudget > 0) {\n axn.addComputeBudgetIxn(extraComputeBudget);\n }\n\n axn.addRefreshObligation(payer);\n\n return axn;\n }\n\n static async buildDepositTxns(\n kaminoMarket: KaminoMarket,\n amount: string | BN,\n mint: PublicKey,\n owner: PublicKey,\n obligation: KaminoObligation | ObligationType,\n extraComputeBudget: number = 1_000_000, // if > 0 then adds the ixn\n includeAtaIxns: boolean = true, // if true it includes create and close wsol and token atas,\n requestElevationGroup: boolean = false,\n includeUserMetadata: boolean = true, // if true it includes user metadata\n referrer: PublicKey = PublicKey.default,\n currentSlot: number = 0\n ) {\n const axn = await KaminoAction.initialize(\n 'deposit',\n amount,\n mint,\n owner,\n kaminoMarket,\n obligation,\n referrer,\n currentSlot\n );\n const addInitObligationForFarm = true;\n\n if (extraComputeBudget > 0) {\n axn.addComputeBudgetIxn(extraComputeBudget);\n }\n await axn.addSupportIxs(\n 'deposit',\n includeAtaIxns,\n requestElevationGroup,\n includeUserMetadata,\n addInitObligationForFarm\n );\n axn.addDepositIx();\n axn.addRefreshFarmsCleanupTxnIxsToCleanupIxs();\n\n return axn;\n }\n\n static async buildBorrowTxns(\n kaminoMarket: KaminoMarket,\n amount: string | BN,\n mint: PublicKey,\n owner: PublicKey,\n obligation: KaminoObligation | ObligationType,\n extraComputeBudget: number = 1_000_000, // if > 0 then adds the ixn\n includeAtaIxns: boolean = true, // if true it includes create and close wsol and token atas,\n requestElevationGroup: boolean = false,\n includeUserMetadata: boolean = true, // if true it includes user metadata\n referrer: PublicKey = PublicKey.default,\n currentSlot: number = 0,\n hostAta?: PublicKey\n ) {\n const axn = await KaminoAction.initialize(\n 'borrow',\n amount,\n mint,\n owner,\n kaminoMarket,\n obligation,\n referrer,\n currentSlot,\n hostAta\n );\n const addInitObligationForFarm = true;\n if (extraComputeBudget > 0) {\n axn.addComputeBudgetIxn(extraComputeBudget);\n }\n await axn.addSupportIxs(\n 'borrow',\n includeAtaIxns,\n requestElevationGroup,\n includeUserMetadata,\n addInitObligationForFarm\n );\n axn.addBorrowIx();\n axn.addRefreshFarmsCleanupTxnIxsToCleanupIxs();\n\n return axn;\n }\n\n static async buildDepositReserveLiquidityTxns(\n kaminoMarket: KaminoMarket,\n amount: string | BN,\n mint: PublicKey,\n owner: PublicKey,\n obligation: KaminoObligation | ObligationType,\n extraComputeBudget: number = 1_000_000, // if > 0 then adds the ixn\n includeAtaIxns: boolean = true, // if true it includes create and close wsol and token atas\n requestElevationGroup: boolean = false,\n includeUserMetadata: boolean = true, // if true it includes user metadata\n referrer: PublicKey = PublicKey.default,\n currentSlot: number = 0\n ) {\n const axn = await KaminoAction.initialize(\n 'mint',\n amount,\n mint,\n owner,\n kaminoMarket,\n obligation,\n referrer,\n currentSlot\n );\n const addInitObligationForFarm = true;\n\n if (extraComputeBudget > 0) {\n axn.addComputeBudgetIxn(extraComputeBudget);\n }\n await axn.addSupportIxs(\n 'mint',\n includeAtaIxns,\n requestElevationGroup,\n includeUserMetadata,\n addInitObligationForFarm\n );\n axn.addDepositReserveLiquidityIx();\n axn.addRefreshFarmsCleanupTxnIxsToCleanupIxs();\n return axn;\n }\n\n static async buildRedeemReserveCollateralTxns(\n kaminoMarket: KaminoMarket,\n amount: string | BN,\n mint: PublicKey,\n owner: PublicKey,\n obligation: KaminoObligation | ObligationType,\n extraComputeBudget: number = 1_000_000, // if > 0 then adds the ixn\n includeAtaIxns: boolean = true, // if true it includes create and close wsol and token atas\n requestElevationGroup: boolean = false,\n includeUserMetadata: boolean = true, // if true it includes user metadata,\n referrer: PublicKey = PublicKey.default,\n currentSlot: number = 0\n ) {\n const axn = await KaminoAction.initialize(\n 'redeem',\n amount,\n mint,\n owner,\n kaminoMarket,\n obligation,\n referrer,\n currentSlot\n );\n const addInitObligationForFarm = true;\n\n if (extraComputeBudget > 0) {\n axn.addComputeBudgetIxn(extraComputeBudget);\n }\n await axn.addSupportIxs(\n 'redeem',\n includeAtaIxns,\n requestElevationGroup,\n includeUserMetadata,\n addInitObligationForFarm\n );\n axn.addRedeemReserveCollateralIx();\n axn.addRefreshFarmsCleanupTxnIxsToCleanupIxs();\n return axn;\n }\n\n static async buildDepositObligationCollateralTxns(\n kaminoMarket: KaminoMarket,\n amount: string | BN,\n mint: PublicKey,\n owner: PublicKey,\n obligation: KaminoObligation | ObligationType,\n extraComputeBudget: number = 1_000_000, // if > 0 then adds the ixn\n includeAtaIxns: boolean = true, // if true it includes create and close wsol and token atas\n requestElevationGroup: boolean = false,\n includeUserMetadata: boolean = true, // if true it includes user metadata\n referrer: PublicKey = PublicKey.default,\n currentSlot: number = 0\n ) {\n const axn = await KaminoAction.initialize(\n 'depositCollateral',\n amount,\n mint,\n owner,\n kaminoMarket,\n obligation,\n referrer,\n currentSlot\n );\n const addInitObligationForFarm = true;\n\n if (extraComputeBudget > 0) {\n axn.addComputeBudgetIxn(extraComputeBudget);\n }\n await axn.addSupportIxs(\n 'depositCollateral',\n includeAtaIxns,\n requestElevationGroup,\n includeUserMetadata,\n addInitObligationForFarm\n );\n axn.addDepositObligationCollateralIx();\n axn.addRefreshFarmsCleanupTxnIxsToCleanupIxs();\n return axn;\n }\n\n static async buildDepositAndBorrowTxns(\n kaminoMarket: KaminoMarket,\n depositAmount: string | BN,\n depositMint: PublicKey,\n borrowAmount: string | BN,\n borrowMint: PublicKey,\n payer: PublicKey,\n obligation: KaminoObligation | ObligationType,\n extraComputeBudget: number = 1_000_000, // if > 0 then adds the ixn\n includeAtaIxns: boolean = true, // if true it includes create and close wsol and token atas,\n requestElevationGroup: boolean = false,\n includeUserMetadata: boolean = true, // if true it includes user metadata,\n referrer: PublicKey = PublicKey.default,\n currentSlot: number = 0\n ) {\n const axn = await KaminoAction.initializeMultiTokenAction(\n kaminoMarket,\n 'depositAndBorrow',\n depositAmount,\n depositMint,\n borrowMint,\n payer,\n payer,\n obligation,\n borrowAmount,\n referrer,\n currentSlot\n );\n const addInitObligationForFarmForDeposit = true;\n const addInitObligationForFarmForBorrow = false;\n const twoTokenAction = true;\n\n if (extraComputeBudget > 0) {\n axn.addComputeBudgetIxn(extraComputeBudget);\n }\n\n await axn.addSupportIxs(\n 'deposit',\n includeAtaIxns,\n requestElevationGroup,\n includeUserMetadata,\n addInitObligationForFarmForDeposit,\n twoTokenAction\n );\n await axn.addDepositAndBorrowIx();\n await axn.addInBetweenIxs(\n 'depositAndBorrow',\n includeAtaIxns,\n requestElevationGroup,\n addInitObligationForFarmForBorrow\n );\n axn.addRefreshFarmsCleanupTxnIxsToCleanupIxs();\n return axn;\n }\n\n static async buildRepayAndWithdrawTxns(\n kaminoMarket: KaminoMarket,\n repayAmount: string | BN,\n repayMint: PublicKey,\n withdrawAmount: string | BN,\n withdrawMint: PublicKey,\n payer: PublicKey,\n currentSlot: number,\n obligation: KaminoObligation | ObligationType,\n extraComputeBudget: number = 1_000_000, // if > 0 then adds the ixn\n includeAtaIxns: boolean = true, // if true it includes create and close wsol and token atas,\n requestElevationGroup: boolean = false,\n includeUserMetadata: boolean = true, // if true it includes user metadata,\n isClosingPosition: boolean = false,\n referrer: PublicKey = PublicKey.default\n ) {\n const axn = await KaminoAction.initializeMultiTokenAction(\n kaminoMarket,\n 'repayAndWithdraw',\n repayAmount,\n repayMint,\n withdrawMint,\n payer,\n payer,\n obligation,\n withdrawAmount,\n referrer,\n currentSlot\n );\n const addInitObligationForFarmForRepay = true;\n const addInitObligationForFarmForWithdraw = false;\n const twoTokenAction = true;\n if (extraComputeBudget > 0) {\n axn.addComputeBudgetIxn(extraComputeBudget);\n }\n await axn.addSupportIxs(\n 'repay',\n includeAtaIxns,\n requestElevationGroup,\n includeUserMetadata,\n addInitObligationForFarmForRepay,\n twoTokenAction\n );\n await axn.addRepayAndWithdrawIxs();\n await axn.addInBetweenIxs(\n 'repayAndWithdraw',\n includeAtaIxns,\n requestElevationGroup,\n addInitObligationForFarmForWithdraw,\n isClosingPosition\n );\n axn.addRefreshFarmsCleanupTxnIxsToCleanupIxs();\n return axn;\n }\n\n static async buildWithdrawTxns(\n kaminoMarket: KaminoMarket,\n amount: string | BN,\n mint: PublicKey,\n owner: PublicKey,\n obligation: KaminoObligation | ObligationType,\n extraComputeBudget: number = 1_000_000, // if > 0 then adds the ixn\n includeAtaIxns: boolean = true, // if true it includes create and close wsol and token atas,\n requestElevationGroup: boolean = false,\n includeUserMetadata: boolean = true, // if true it includes user metadata\n referrer: PublicKey = PublicKey.default,\n currentSlot: number = 0\n ) {\n const axn = await KaminoAction.initialize(\n 'withdraw',\n amount,\n mint,\n owner,\n kaminoMarket,\n obligation,\n referrer,\n currentSlot\n );\n const addInitObligationForFarm = true;\n\n if (extraComputeBudget > 0) {\n axn.addComputeBudgetIxn(extraComputeBudget);\n }\n await axn.addSupportIxs(\n 'withdraw',\n includeAtaIxns,\n requestElevationGroup,\n includeUserMetadata,\n addInitObligationForFarm\n );\n await axn.addWithdrawIx();\n axn.addRefreshFarmsCleanupTxnIxsToCleanupIxs();\n\n return axn;\n }\n\n /**\n *\n * @param kaminoMarket\n * @param amount\n * @param mint\n * @param owner\n * @param obligation - obligation to repay or the PDA seeds\n * @param currentSlot\n * @param payer - if not set then owner is used\n * @param extraComputeBudget - if > 0 then adds the ixn\n * @param includeAtaIxns - if true it includes create and close wsol and token atas\n * @param requestElevationGroup\n * @param includeUserMetadata - if true it includes user metadata\n * @param referrer\n */\n static async buildRepayTxns(\n kaminoMarket: KaminoMarket,\n amount: string | BN,\n mint: PublicKey,\n owner: PublicKey,\n obligation: KaminoObligation | ObligationType,\n currentSlot: number,\n payer: PublicKey | undefined = undefined,\n extraComputeBudget: number = 1_000_000,\n includeAtaIxns: boolean = true,\n requestElevationGroup: boolean = false,\n includeUserMetadata: boolean = true,\n referrer: PublicKey = PublicKey.default\n ) {\n const axn = await KaminoAction.initialize(\n 'repay',\n amount,\n mint,\n owner,\n kaminoMarket,\n obligation,\n referrer,\n currentSlot,\n undefined,\n payer\n );\n const addInitObligationForFarm = true;\n\n if (extraComputeBudget > 0) {\n axn.addComputeBudgetIxn(extraComputeBudget);\n }\n await axn.addSupportIxs(\n 'repay',\n includeAtaIxns,\n requestElevationGroup,\n includeUserMetadata,\n addInitObligationForFarm\n );\n await axn.addRepayIx();\n axn.addRefreshFarmsCleanupTxnIxsToCleanupIxs();\n\n return axn;\n }\n\n static async buildLiquidateTxns(\n kaminoMarket: KaminoMarket,\n amount: string | BN,\n minCollateralReceiveAmount: string | BN,\n repayTokenMint: PublicKey,\n withdrawTokenMint: PublicKey,\n liquidator: PublicKey,\n obligationOwner: PublicKey,\n obligation: KaminoObligation | ObligationType,\n extraComputeBudget: number = 1_000_000, // if > 0 then adds the ixn\n includeAtaIxns: boolean = true, // if true it includes create and close wsol and token atas, and creates all other token atas if they don't exist\n requestElevationGroup: boolean = false,\n includeUserMetadata: boolean = true, // if true it includes user metadata\n referrer: PublicKey = PublicKey.default,\n maxAllowedLtvOverridePercent: number = 0,\n currentSlot: number = 0\n ) {\n const axn = await KaminoAction.initializeMultiTokenAction(\n kaminoMarket,\n 'liquidate',\n amount,\n repayTokenMint,\n withdrawTokenMint,\n liquidator,\n obligationOwner,\n obligation,\n minCollateralReceiveAmount,\n referrer,\n currentSlot\n );\n const addInitObligationForFarm = true;\n\n if (extraComputeBudget > 0) {\n axn.addComputeBudgetIxn(extraComputeBudget);\n }\n await axn.addSupportIxs(\n 'liquidate',\n includeAtaIxns,\n requestElevationGroup,\n includeUserMetadata,\n addInitObligationForFarm\n );\n await axn.addLiquidateIx(maxAllowedLtvOverridePercent);\n axn.addRefreshFarmsCleanupTxnIxsToCleanupIxs();\n\n return axn;\n }\n\n static async buildWithdrawReferrerFeeTxns(\n owner: PublicKey,\n tokenMint: PublicKey,\n kaminoMarket: KaminoMarket,\n currentSlot: number = 0\n ) {\n const { axn, createAtasIxns } = await KaminoAction.initializeWithdrawReferrerFees(\n tokenMint,\n owner,\n kaminoMarket,\n currentSlot\n );\n\n axn.preTxnIxs.push(...createAtasIxns);\n axn.preTxnIxsLabels.push(`createAtasIxs[${axn.userTokenAccountAddress.toString()}]`);\n\n axn.addRefreshReserveIxs([axn.reserve.address]);\n axn.addWithdrawReferrerFeesIxs();\n\n return axn;\n }\n\n async getTransactions() {\n const txns: {\n preLendingTxn: Transaction | null;\n lendingTxn: Transaction | null;\n postLendingTxn: Transaction | null;\n } = {\n preLendingTxn: null,\n lendingTxn: null,\n postLendingTxn: null,\n };\n\n if (this.preTxnIxs.length) {\n txns.preLendingTxn = new Transaction({\n feePayer: this.owner,\n recentBlockhash: (await this.kaminoMarket.getConnection().getLatestBlockhash()).blockhash,\n }).add(...this.preTxnIxs);\n }\n\n if (this.lendingIxs.length === 2) {\n txns.lendingTxn = new Transaction({\n feePayer: this.owner,\n recentBlockhash: (await this.kaminoMarket.getConnection().getLatestBlockhash()).blockhash,\n }).add(\n ...this.setupIxs,\n ...[this.lendingIxs[0]],\n ...this.inBetweenIxs,\n ...[this.lendingIxs[1]],\n ...this.cleanupIxs\n );\n } else {\n txns.lendingTxn = new Transaction({\n feePayer: this.owner,\n recentBlockhash: (await this.kaminoMarket.getConnection().getLatestBlockhash()).blockhash,\n }).add(...this.setupIxs, ...this.lendingIxs, ...this.cleanupIxs);\n }\n\n if (this.postTxnIxs.length) {\n txns.postLendingTxn = new Transaction({\n feePayer: this.owner,\n recentBlockhash: (await this.kaminoMarket.getConnection().getLatestBlockhash()).blockhash,\n }).add(...this.postTxnIxs);\n }\n\n return txns;\n }\n\n async sendTransactions(sendTransaction: (txn: Transaction, connection: Connection) => Promise<TransactionSignature>) {\n const txns = await this.getTransactions();\n\n await this.sendSingleTransaction(txns.preLendingTxn, sendTransaction);\n\n const signature = await this.sendSingleTransaction(txns.lendingTxn, sendTransaction);\n\n await this.sendSingleTransaction(txns.postLendingTxn, sendTransaction);\n\n return signature;\n }\n\n private async sendSingleTransaction(\n txn: Transaction | null,\n sendTransaction: (txn: Transaction, connection: Connection) => Promise<TransactionSignature>\n ) {\n if (!txn) return '';\n\n const signature = await sendTransaction(txn, this.kaminoMarket.getConnection());\n await this.kaminoMarket.getConnection().confirmTransaction(signature);\n\n return signature;\n }\n\n async simulateTransactions(\n sendTransaction: (\n txn: Transaction,\n connection: Connection\n ) => Promise<RpcResponseAndContext<SimulatedTransactionResponse>>\n ) {\n const txns = await this.getTransactions();\n\n await this.simulateSingleTransaction(txns.preLendingTxn, sendTransaction);\n\n const signature = await this.simulateSingleTransaction(txns.lendingTxn, sendTransaction);\n\n await this.simulateSingleTransaction(txns.postLendingTxn, sendTransaction);\n\n return signature;\n }\n\n private async simulateSingleTransaction(\n txn: Transaction | null,\n sendTransaction: (\n txn: Transaction,\n connection: Connection\n ) => Promise<RpcResponseAndContext<SimulatedTransactionResponse>>\n ) {\n if (!txn) return '';\n return await sendTransaction(txn, this.kaminoMarket.getConnection());\n }\n\n addDepositIx() {\n this.lendingIxsLabels.push(`depositReserveLiquidityAndObligationCollateral`);\n this.lendingIxs.push(\n depositReserveLiquidityAndObligationCollateral(\n {\n liquidityAmount: this.amount,\n },\n {\n owner: this.owner,\n obligation: this.getObligationPda(),\n lendingMarket: this.kaminoMarket.getAddress(),\n lendingMarketAuthority: this.kaminoMarket.getLendingMarketAuthority(),\n reserve: this.reserve.address,\n reserveLiquiditySupply: this.reserve.state.liquidity.supplyVault,\n reserveCollateralMint: this.reserve.getCTokenMint(),\n reserveDestinationDepositCollateral: this.reserve.state.collateral.supplyVault, // destinationCollateral\n userSourceLiquidity: this.userTokenAccountAddress,\n placeholderUserDestinationCollateral: this.kaminoMarket.programId,\n tokenProgram: TOKEN_PROGRAM_ID,\n instructionSysvarAccount: SYSVAR_INSTRUCTIONS_PUBKEY,\n },\n this.kaminoMarket.programId\n )\n );\n }\n\n addDepositReserveLiquidityIx() {\n this.lendingIxsLabels.push(`depositReserveLiquidity`);\n this.lendingIxs.push(\n depositReserveLiquidity(\n {\n liquidityAmount: this.amount,\n },\n {\n owner: this.owner,\n lendingMarket: this.kaminoMarket.getAddress(),\n lendingMarketAuthority: this.kaminoMarket.getLendingMarketAuthority(),\n reserve: this.reserve.address,\n reserveLiquiditySupply: this.reserve.state.liquidity.supplyVault,\n reserveCollateralMint: this.reserve.getCTokenMint(),\n userSourceLiquidity: this.userTokenAccountAddress,\n userDestinationCollateral: this.userCollateralAccountAddress,\n tokenProgram: TOKEN_PROGRAM_ID,\n instructionSysvarAccount: SYSVAR_INSTRUCTIONS_PUBKEY,\n },\n this.kaminoMarket.programId\n )\n );\n }\n\n addRedeemReserveCollateralIx() {\n this.lendingIxsLabels.push(`redeemReserveCollateral`);\n this.lendingIxs.push(\n redeemReserveCollateral(\n {\n collateralAmount: this.amount,\n },\n {\n owner: this.owner,\n lendingMarket: this.kaminoMarket.getAddress(),\n lendingMarketAuthority: this.kaminoMarket.getLendingMarketAuthority(),\n reserve: this.reserve.address,\n reserveLiquiditySupply: this.reserve.state.liquidity.supplyVault,\n reserveCollateralMint: this.reserve.getCTokenMint(),\n userSourceCollateral: this.userCollateralAccountAddress,\n userDestinationLiquidity: this.userTokenAccountAddress,\n tokenProgram: TOKEN_PROGRAM_ID,\n instructionSysvarAccount: SYSVAR_INSTRUCTIONS_PUBKEY,\n },\n this.kaminoMarket.programId\n )\n );\n }\n\n addDepositObligationCollateralIx() {\n this.lendingIxsLabels.push(`depositObligationCollateral`);\n this.lendingIxs.push(\n depositObligationCollateral(\n {\n collateralAmount: this.amount,\n },\n {\n owner: this.owner,\n obligation: this.getObligationPda(),\n lendingMarket: this.kaminoMarket.getAddress(),\n depositReserve: this.reserve.address,\n reserveDestinationCollateral: this.reserve.state.collateral.supplyVault,\n userSourceCollateral: this.userCollateralAccountAddress,\n tokenProgram: TOKEN_PROGRAM_ID,\n instructionSysvarAccount: SYSVAR_INSTRUCTIONS_PUBKEY,\n },\n this.kaminoMarket.programId\n )\n );\n }\n\n addBorrowIx() {\n this.lendingIxsLabels.push(`borrowObligationLiquidity`);\n this.lendingIxs.push(\n borrowObligationLiquidity(\n {\n liquidityAmount: this.amount,\n },\n {\n owner: this.owner,\n obligation: this.getObligationPda(),\n lendingMarket: this.kaminoMarket.getAddress(),\n lendingMarketAuthority: this.kaminoMarket.getLendingMarketAuthority(),\n borrowReserve: this.reserve.address,\n reserveSourceLiquidity: this.reserve.state.liquidity.supplyVault,\n userDestinationLiquidity: this.userTokenAccountAddress,\n borrowReserveLiquidityFeeReceiver: this.reserve.state.liquidity.feeVault,\n referrerTokenState: referrerTokenStatePda(\n this.referrer,\n this.reserve.address,\n this.kaminoMarket.programId\n )[0],\n tokenProgram: TOKEN_PROGRAM_ID,\n instructionSysvarAccount: SYSVAR_INSTRUCTIONS_PUBKEY,\n },\n this.kaminoMarket.programId\n )\n );\n }\n\n async addDepositAndBorrowIx() {\n this.lendingIxsLabels.push(`depositReserveLiquidityAndObligationCollateral`);\n this.lendingIxsLabels.push(`borrowObligationLiquidity`);\n this.lendingIxs.push(\n depositReserveLiquidityAndObligationCollateral(\n {\n liquidityAmount: this.amount,\n },\n {\n owner: this.owner,\n obligation: this.getObligationPda(),\n lendingMarket: this.kaminoMarket.getAddress(),\n lendingMarketAuthority: this.kaminoMarket.getLendingMarketAuthority(),\n reserve: this.reserve.address,\n reserveLiquiditySupply: this.reserve.state.liquidity.supplyVault,\n reserveCollateralMint: this.reserve.getCTokenMint(),\n reserveDestinationDepositCollateral: this.reserve.state.collateral.supplyVault, // destinationCollateral\n userSourceLiquidity: this.userTokenAccountAddress,\n placeholderUserDestinationCollateral: this.kaminoMarket.programId,\n tokenProgram: TOKEN_PROGRAM_ID,\n instructionSysvarAccount: SYSVAR_INSTRUCTIONS_PUBKEY,\n },\n this.kaminoMarket.programId\n )\n );\n\n if (!this.outflowReserve) {\n throw new Error(`outflowReserve not set`);\n }\n\n if (!this.additionalTokenAccountAddress) {\n throw new Error(`additionalTokenAccountAddress not set`);\n }\n\n if (!this.outflowAmount) {\n throw new Error(`outflowAmount not set`);\n }\n\n this.lendingIxs.push(\n borrowObligationLiquidity(\n {\n liquidityAmount: this.outflowAmount,\n },\n {\n owner: this.owner,\n obligation: this.getObligationPda(),\n lendingMarket: this.kaminoMarket.getAddress(),\n lendingMarketAuthority: this.kaminoMarket.getLendingMarketAuthority(),\n borrowReserve: this.outflowReserve.address,\n reserveSourceLiquidity: this.outflowReserve.state.liquidity.supplyVault,\n userDestinationLiquidity: this.additionalTokenAccountAddress,\n borrowReserveLiquidityFeeReceiver: this.outflowReserve.state.liquidity.feeVault,\n referrerTokenState: referrerTokenStatePda(\n this.referrer,\n this.outflowReserve.address,\n this.kaminoMarket.programId\n )[0],\n tokenProgram: TOKEN_PROGRAM_ID,\n instructionSysvarAccount: SYSVAR_INSTRUCTIONS_PUBKEY,\n },\n this.kaminoMarket.programId\n )\n );\n }\n\n async addRepayAndWithdrawIxs() {\n this.lendingIxsLabels.push(\n `repayObligationLiquidity(reserve=${this.reserve!.address})(obligation=${this.getObligationPda()})`\n );\n this.lendingIxsLabels.push(`withdrawObligationCollateralAndRedeemReserveCollateral`);\n this.lendingIxs.push(\n repayObligationLiquidity(\n {\n liquidityAmount: this.amount,\n },\n {\n owner: this.owner,\n obligation: this.getObligationPda(),\n lendingMarket: this.kaminoMarket.getAddress(),\n repayReserve: this.reserve!.address,\n userSourceLiquidity: this.userTokenAccountAddress,\n reserveDestinationLiquidity: this.reserve.state.liquidity.supplyVault,\n tokenProgram: TOKEN_PROGRAM_ID,\n instructionSysvarAccount: SYSVAR_INSTRUCTIONS_PUBKEY,\n },\n this.kaminoMarket.programId\n )\n );\n\n if (!this.outflowReserve) {\n throw new Error(`outflowReserve not set`);\n }\n\n if (!this.additionalTokenAccountAddress) {\n throw new Error(`additionalTokenAccountAddress not set`);\n }\n\n if (!this.outflowAmount) {\n throw new Error(`outflowAmount not set`);\n }\n\n const collateralExchangeRate = this.outflowReserve.getEstimatedCollateralExchangeRate(\n this.currentSlot,\n this.kaminoMarket.state.referralFeeBps\n );\n\n this.lendingIxs.push(\n withdrawObligationCollateralAndRedeemReserveCollateral(\n {\n collateralAmount: this.outflowAmount.eq(new BN(U64_MAX))\n ? this.outflowAmount\n : new BN(new Decimal(this.outflowAmount.toString()).mul(collateralExchangeRate).ceil().toString()),\n },\n {\n owner: this.owner,\n obligation: this.getObligationPda(),\n lendingMarket: this.kaminoMarket.getAddress(),\n lendingMarketAuthority: this.kaminoMarket.getLendingMarketAuthority(),\n withdrawReserve: this.outflowReserve.address,\n reserveCollateralMint: this.outflowReserve.getCTokenMint(),\n reserveLiquiditySupply: this.outflowReserve.state.liquidity.supplyVault,\n reserveSourceCollateral: this.outflowReserve.state.collateral.supplyVault,\n userDestinationLiquidity: this.additionalTokenAccountAddress,\n placeholderUserDestinationCollateral: this.kaminoMarket.programId,\n tokenProgram: TOKEN_PROGRAM_ID,\n instructionSysvarAccount: SYSVAR_INSTRUCTIONS_PUBKEY,\n },\n this.kaminoMarket.programId\n )\n );\n }\n\n async addWithdrawIx() {\n const collateralExchangeRate = this.reserve.getEstimatedCollateralExchangeRate(\n this.currentSlot,\n this.kaminoMarket.state.referralFeeBps\n );\n\n const collateralAmount = this.amount.eq(new BN(U64_MAX))\n ? this.amount\n : new BN(new Decimal(this.amount.toString()).mul(collateralExchangeRate).ceil().toString());\n\n this.lendingIxsLabels.push(`withdrawObligationCollateralAndRedeemReserveCollateral`);\n this.lendingIxs.push(\n withdrawObligationCollateralAndRedeemReserveCollateral(\n {\n collateralAmount,\n },\n {\n owner: this.owner,\n obligation: this.getObligationPda(),\n lendingMarket: this.kaminoMarket.getAddress(),\n lendingMarketAuthority: this.kaminoMarket.getLendingMarketAuthority(),\n withdrawReserve: this.reserve.address,\n reserveCollateralMint: this.reserve.getCTokenMint(),\n reserveLiquiditySupply: this.reserve.state.liquidity.supplyVault,\n reserveSourceCollateral: this.reserve.state.collateral.supplyVault,\n userDestinationLiquidity: this.userTokenAccountAddress,\n placeholderUserDestinationCollateral: this.kaminoMarket.programId,\n tokenProgram: TOKEN_PROGRAM_ID,\n instructionSysvarAccount: SYSVAR_INSTRUCTIONS_PUBKEY,\n },\n this.kaminoMarket.programId\n )\n );\n }\n\n async addRepayIx() {\n this.lendingIxsLabels.push(\n `repayObligationLiquidity(reserve=${this.reserve.address})(obligation=${this.getObligationPda()})`\n );\n this.lendingIxs.push(\n repayObligationLiquidity(\n {\n liquidityAmount: this.amount,\n },\n {\n owner: this.payer,\n obligation: this.getObligationPda(),\n lendingMarket: this.kaminoMarket.getAddress(),\n repayReserve: this.reserve.address,\n userSourceLiquidity: this.userTokenAccountAddress,\n reserveDestinationLiquidity: this.reserve.state.liquidity.supplyVault,\n tokenProgram: TOKEN_PROGRAM_ID,\n instructionSysvarAccount: SYSVAR_INSTRUCTIONS_PUBKEY,\n },\n this.kaminoMarket.programId\n )\n );\n }\n\n async addLiquidateIx(maxAllowedLtvOverridePercent: number = 0) {\n this.lendingIxsLabels.push(`liquidateObligationAndRedeemReserveCollateral`);\n if (!this.outflowReserve) {\n throw Error(`Withdraw reserve during liquidation is not defined`);\n }\n if (!this.additionalTokenAccountAddress) {\n throw Error(`Liquidating token account address is not defined`);\n }\n\n this.lendingIxs.push(\n liquidateObligationAndRedeemReserveCollateral(\n {\n liquidityAmount: this.amount,\n // TODO: Configure this when updating liquidator with new interface\n minAcceptableReceivedCollateralAmount: this.outflowAmount || new BN(0),\n // TODO: remove this before going live\n maxAllowedLtvOverridePercent: new BN(maxAllowedLtvOverridePercent),\n },\n {\n liquidator: this.owner,\n obligation: this.getObligationPda(),\n lendingMarket: this.kaminoMarket.getAddress(),\n lendingMarketAuthority: this.kaminoMarket.getLendingMarketAuthority(),\n repayReserve: this.reserve.address,\n repayReserveLiquiditySupply: this.reserve.state.liquidity.supplyVault,\n withdrawReserve: this.outflowReserve.address,\n withdrawReserveCollateralMint: this.outflowReserve.getCTokenMint(),\n withdrawReserveCollateralSupply: this.outflowReserve.state.collateral.supplyVault,\n withdrawReserveLiquiditySupply: this.outflowReserve.state.liquidity.supplyVault,\n userSourceLiquidity: this.additionalTokenAccountAddress,\n userDestinationCollateral: this.userCollateralAccountAddress,\n userDestinationLiquidity: this.userTokenAccountAddress,\n withdrawReserveLiquidityFeeReceiver: this.outflowReserve.state.liquidity.feeVault,\n tokenProgram: TOKEN_PROGRAM_ID,\n instructionSysvarAccount: SYSVAR_INSTRUCTIONS_PUBKEY,\n },\n this.kaminoMarket.programId\n )\n );\n }\n\n async addInBetweenIxs(\n action: ActionType,\n includeAtaIxns: boolean,\n requestElevationGroup: boolean,\n addInitObligationForFarm: boolean,\n isClosingPosition: boolean = false\n ) {\n await this.addSupportIxsWithoutInitObligation(\n action,\n includeAtaIxns,\n false,\n requestElevationGroup,\n addInitObligationForFarm,\n isClosingPosition\n );\n }\n\n addRefreshObligation(crank: PublicKey) {\n const uniqueReserveAddresses = new PublicKeySet(this.depositReserves.concat(this.borrowReserves)).toArray();\n\n const addAllToSetupIxns = true;\n // Union of addresses\n const allReservesExcludingCurrent = [...uniqueReserveAddresses];\n\n this.addRefreshReserveIxs(allReservesExcludingCurrent, addAllToSetupIxns);\n this.addRefreshFarmsForReserve(\n this.depositReserves.map((r) => this.kaminoMarket.getReserveByAddress(r)!),\n addAllToSetupIxns,\n ReserveFarmKind.Collateral,\n crank\n );\n this.addRefreshFarmsForReserve(\n this.borrowReserves.map((r) => this.kaminoMarket.getReserveByAddress(r)!),\n addAllToSetupIxns,\n ReserveFarmKind.Debt,\n crank\n );\n this.addRefreshObligationIx(addAllToSetupIxns, false);\n }\n\n async addSupportIxsWithoutInitObligation(\n action: ActionType,\n includeAtaIxns: boolean,\n addToSetupIxs: boolean = true,\n requestElevationGroup: boolean = false,\n addInitObligationForFarm: boolean = false,\n isClosingPosition: boolean = false,\n twoTokenAction: boolean = false\n ) {\n // TODO: why are we not doing this first?\n if (includeAtaIxns) {\n await this.addAtaIxs(action);\n }\n\n if (\n [\n 'depositCollateral',\n 'deposit',\n 'withdraw',\n 'borrow',\n 'liquidate',\n 'repay',\n 'depositAndBorrow',\n 'repayAndWithdraw',\n 'refreshObligation',\n ].includes(action)\n ) {\n // The support ixns in order are:\n // 0. Init obligation ixn\n // 0. Token Ata ixns\n // 0. Init obligation for farm\n // 1. Ixns to refresh the reserves of the obligation not related to the current action\n // 2. Ixn to refresh the reserve of the current action\n // 3. Ixn to refresh the obligation\n // 4. Ixn to refresh the `debt` farm of the obligation\n // 5. Ixn to refresh the `collateral` farm of the obligation\n // 6. The instruction itself\n // 7. Ixn to refresh the `debt` farm of the obligation\n // 8. Ixn to refresh the `collateral` farm of the obligation\n\n let currentReserves: KaminoReserve[] = [];\n\n if (action === 'liquidate' || action === 'depositAndBorrow' || action === 'repayAndWithdraw') {\n if (!this.outflowReserve) {\n throw new Error('outflowReserve is undefined');\n }\n\n if (action === 'depositAndBorrow' || action === 'repayAndWithdraw') {\n currentReserves = [this.reserve, this.outflowReserve];\n if (this.obligation) {\n if (action === 'depositAndBorrow') {\n const deposit = this.obligation.state.deposits.find((deposit) =>\n deposit.depositReserve.equals(this.reserve.address)\n );\n\n if (!deposit) {\n this.preLoadedDepositReservesSameTx.push(this.reserve.address);\n }\n } else {\n const borrow = this.obligation.state.borrows.find((borrow) =>\n borrow.borrowReserve.equals(this.reserve.address)\n );\n\n if (!borrow) {\n throw Error(`Unable to find obligation borrow to repay for ${this.obligation.state.owner.toBase58()}`);\n }\n\n const cumulativeBorrowRateObligation = KaminoObligation.getCumulativeBorrowRate(borrow);\n\n const cumulativeBorrowRateReserve = this.reserve.getEstimatedCumulativeBorrowRate(this.currentSlot);\n const fullRepay = KaminoObligation.getBorrowAmount(borrow)\n .mul(cumulativeBorrowRateReserve)\n .div(cumulativeBorrowRateObligation);\n\n const amountDecimal = new Decimal(this.amount.toString());\n\n if (fullRepay.lte(amountDecimal)) {\n this.preLoadedBorrowReservesSameTx.push(this.reserve.address);\n }\n }\n } else {\n // Obligation doesn't exist yet, so we have to preload the deposit reserve\n this.preLoadedDepositReservesSameTx.push(this.reserve.address);\n }\n } else if (action === 'liquidate' && !this.outflowReserve.address.equals(this.reserve.address)) {\n currentReserves = [this.outflowReserve, this.reserve];\n } else {\n currentReserves = [this.reserve];\n }\n } else {\n currentReserves = [this.reserve];\n }\n\n const uniqueReserveAddresses = new PublicKeySet(this.depositReserves.concat(this.borrowReserves));\n const currentReserveAddresses = new PublicKeySet(currentReserves.map((reserve) => reserve.address));\n\n // Union of addresses\n const allReservesExcludingCurrent = [...uniqueReserveAddresses.toArray()].filter(\n (address) => !currentReserveAddresses.contains(address)\n );\n\n this.addRefreshReserveIxs(allReservesExcludingCurrent, addToSetupIxs);\n if (addInitObligationForFarm) {\n if (action === 'liquidate') {\n await this.addInitObligationForFarm(this.reserve, ReserveFarmKind.Debt, addToSetupIxs);\n await this.addInitObligationForFarm(this.outflowReserve!, ReserveFarmKind.Collateral, addToSetupIxs);\n } else if (\n action === 'depositAndBorrow' ||\n action === 'depositCollateral' ||\n action === 'withdraw' ||\n action === 'deposit'\n ) {\n await this.addInitObligationForFarm(this.reserve, ReserveFarmKind.Collateral, addToSetupIxs);\n if (this.outflowReserve) {\n await this.addInitObligationForFarm(this.outflowReserve, ReserveFarmKind.Debt, addToSetupIxs);\n }\n } else if (action === 'repayAndWithdraw' || action === 'borrow' || action === 'repay') {\n // todo - probably don't need to add both debt and collateral for everything here\n await this.addInitObligationForFarm(this.reserve, ReserveFarmKind.Debt, addToSetupIxs);\n if (this.outflowReserve) {\n await this.addInitObligationForFarm(this.outflowReserve, ReserveFarmKind.Collateral, addToSetupIxs);\n }\n } else {\n await this.addInitObligationForFarm(this.reserve, ReserveFarmKind.Collateral, addToSetupIxs);\n await this.addInitObligationForFarm(this.reserve, ReserveFarmKind.Debt, addToSetupIxs);\n if (this.outflowReserve) {\n await this.addInitObligationForFarm(this.outflowReserve, ReserveFarmKind.Collateral, addToSetupIxs);\n await this.addInitObligationForFarm(this.outflowReserve, ReserveFarmKind.Debt, addToSetupIxs);\n }\n }\n }\n this.addRefreshReserveIxs(currentReserveAddresses.toArray(), addToSetupIxs);\n\n if (action === 'repayAndWithdraw' && !addToSetupIxs && isClosingPosition) {\n // addToSetupIxs === addInBetween (same thing)\n // If this is a repay and withdraw, and it's not the first action, and it's closing a position\n // we don't need to include the repay reserve in the refresh obligation\n // I am ashamed of this code, we need to rewrite this entire thing\n this.addRefreshObligationIx(addToSetupIxs, true);\n } else {\n this.addRefreshObligationIx(addToSetupIxs, false);\n }\n\n if (addToSetupIxs) {\n // If this is an setup ixn (therefore not an in-between), it means it's either a one off action\n // or the first of a two-token-action\n if (action === 'liquidate') {\n this.addRefreshFarmsForReserve([this.outflowReserve!], addToSetupIxs, ReserveFarmKind.Collateral);\n this.addRefreshFarmsForReserve([this.reserve], addToSetupIxs, ReserveFarmKind.Debt);\n } else if (\n action === 'depositAndBorrow' ||\n action === 'depositCollateral' ||\n action === 'withdraw' ||\n action === 'deposit'\n ) {\n this.addRefreshFarmsForReserve(\n currentReserves,\n addToSetupIxs,\n ReserveFarmKind.Collateral,\n undefined,\n twoTokenAction\n );\n } else if (action === 'repayAndWithdraw' || action === 'borrow' || action === 'repay') {\n this.addRefreshFarmsForReserve(\n currentReserves,\n addToSetupIxs,\n ReserveFarmKind.Debt,\n undefined,\n twoTokenAction\n );\n } else {\n throw new Error(`Could not decide on refresh farm for action ${action}`);\n }\n } else {\n // If this is an inbetween, it means it's part of a two-token-action\n // so we skip the refresh farm obligation of the first reserve as that operation already happened\n // add added to 'setup' ixns\n if (action === 'depositAndBorrow') {\n this.addRefreshFarmsForReserve([this.outflowReserve!], addToSetupIxs, ReserveFarmKind.Debt);\n } else if (action === 'repayAndWithdraw') {\n this.addRefreshFarmsForReserve([this.outflowReserve!], addToSetupIxs, ReserveFarmKind.Collateral);\n } else {\n throw new Error(`Could not decide on refresh farm for action ${action}`);\n }\n }\n\n if (action === 'depositAndBorrow' && requestElevationGroup) {\n const groupsColl = this.reserve.state.config.elevationGroups;\n const groupsDebt = this.outflowReserve!.state.config.elevationGroups;\n const groups = this.kaminoMarket.state.elevationGroups;\n const commonElevationGroups = [...groupsColl].filter((item) => groupsDebt.includes(item) && item !== 0);\n\n console.log(\n 'Groups of coll reserve',\n groupsColl,\n 'Groups of debt reserve',\n groupsDebt,\n 'Common groups',\n commonElevationGroups\n );\n\n if (commonElevationGroups.length === 0) {\n console.log('No common elevation groups found, staying with default');\n } else {\n const eModeGroupWithMaxLtv = commonElevationGroups.reduce((prev, curr) => {\n const prevGroup = groups.find((group) => group.id === prev);\n const currGroup = groups.find((group) => group.id === curr);\n return prevGroup!.ltvPct > currGroup!.ltvPct ? prev : curr;\n });\n\n const eModeGroup = groups.find((group) => group.id === eModeGroupWithMaxLtv)!.id;\n console.log('Setting eModeGroup to', eModeGroup);\n\n if (eModeGroup !== 0 && eModeGroup !== this.obligation?.state.elevationGroup) {\n this.addRequestElevationIx(eModeGroup, false);\n this.addRefreshReserveIxs(allReservesExcludingCurrent, addToSetupIxs);\n this.addRefreshReserveIxs(currentReserveAddresses.toArray(), addToSetupIxs);\n this.addRefreshObligationIx(addToSetupIxs);\n }\n }\n }\n }\n }\n\n async addSupportIxs(\n action: ActionType,\n includeAtaIxns: boolean,\n requestElevationGroup: boolean,\n includeUserMetadata: boolean,\n addInitObligationForFarm: boolean,\n twoTokenAction: boolean = false\n ) {\n if (!['mint', 'redeem'].includes(action)) {\n const [, ownerUserMetadata] = await this.kaminoMarket.getUserMetadata(this.owner);\n if (!ownerUserMetadata && includeUserMetadata) {\n await this.addInitUserMetadataIxs();\n }\n\n await this.addInitReferrerTokenStateIxs();\n await this.addInitObligationIxs();\n }\n\n await this.addSupportIxsWithoutInitObligation(\n action,\n includeAtaIxns,\n true,\n requestElevationGroup,\n addInitObligationForFarm,\n false,\n twoTokenAction\n );\n }\n\n private static optionalAccount(pubkey: PublicKey, programId: PublicKey = PROGRAM_ID): PublicKey {\n if (isNotNullPubkey(pubkey)) {\n return pubkey;\n } else {\n return programId;\n }\n }\n\n private addRefreshReserveIxs(reserves: PublicKey[], addToSetupIxs: boolean = true) {\n reserves.forEach((reserveAddress) => {\n const foundReserve = this.kaminoMarket.getReserveByAddress(reserveAddress);\n if (!foundReserve) {\n throw new Error(`Could not find reserve ${reserveAddress} in reserves`);\n }\n\n const { state } = foundReserve;\n\n const refreshReserveIx = refreshReserve(\n {\n lendingMarket: this.kaminoMarket.getAddress(),\n reserve: reserveAddress,\n pythOracle: KaminoAction.optionalAccount(\n state.config.tokenInfo.pythConfiguration.price,\n this.kaminoMarket.programId\n ),\n switchboardPriceOracle: KaminoAction.optionalAccount(\n state.config.tokenInfo.switchboardConfiguration.priceAggregator,\n this.kaminoMarket.programId\n ),\n switchboardTwapOracle: KaminoAction.optionalAccount(\n state.config.tokenInfo.switchboardConfiguration.twapAggregator,\n this.kaminoMarket.programId\n ),\n scopePrices: KaminoAction.optionalAccount(\n state.config.tokenInfo.scopeConfiguration.priceFeed,\n this.kaminoMarket.programId\n ),\n },\n this.kaminoMarket.programId\n );\n\n if (addToSetupIxs) {\n this.setupIxs.push(refreshReserveIx);\n this.setupIxsLabels.push(`RefreshReserve[${reserveAddress}]`);\n } else {\n this.inBetweenIxs.push(refreshReserveIx);\n this.inBetweenIxsLabels.push(`RefreshReserve[${reserveAddress}]`);\n }\n });\n }\n\n public static getRefreshAllReserves(kaminoMarket: KaminoMarket, reserves: PublicKey[]): TransactionInstruction[] {\n return reserves.map((reserveAddress): TransactionInstruction => {\n const foundReserve = kaminoMarket.getReserveByAddress(reserveAddress);\n if (!foundReserve) {\n throw new Error(`Could not find reserve ${reserveAddress} in reserves`);\n }\n\n const { state } = foundReserve;\n return refreshReserve(\n {\n reserve: reserveAddress,\n lendingMarket: state.lendingMarket,\n pythOracle: this.optionalAccount(state.config.tokenInfo.pythConfiguration.price, kaminoMarket.programId),\n switchboardPriceOracle: this.optionalAccount(\n state.config.tokenInfo.switchboardConfiguration.priceAggregator,\n kaminoMarket.programId\n ),\n switchboardTwapOracle: this.optionalAccount(\n state.config.tokenInfo.switchboardConfiguration.twapAggregator,\n kaminoMarket.programId\n ),\n scopePrices: this.optionalAccount(\n state.config.tokenInfo.scopeConfiguration.priceFeed,\n kaminoMarket.programId\n ),\n },\n kaminoMarket.programId\n );\n });\n }\n\n private addRefreshObligationIx(addToSetupIxs: boolean = true, skipBorrowObligations: boolean = false) {\n const marketAddress = this.kaminoMarket.getAddress();\n const obligationPda = this.getObligationPda();\n const refreshObligationIx = refreshObligation(\n {\n lendingMarket: marketAddress,\n obligation: obligationPda,\n },\n this.kaminoMarket.programId\n );\n\n const depositReservesList = this.depositReserves;\n\n // check if there's any member in the preloadedDepositReserves that is not in the depositReserves\n // if so, add it to the depositReserves\n for (let i = 0; i < this.preLoadedDepositReservesSameTx.length; i++) {\n const preloadedDepositReserve = this.preLoadedDepositReservesSameTx[i];\n\n // Check if the depositReserves array contains the current preloadedDepositReserve\n const found = this.depositReserves.some((depositReserve) => {\n return depositReserve.equals(preloadedDepositReserve);\n });\n\n // If not found, push the current preloadedDepositReserve to the depositReserves array\n if (!found) {\n depositReservesList.push(this.preLoadedDepositReservesSameTx[i]);\n }\n }\n\n const depositReserveAccountMetas = depositReservesList.map((reserve) => {\n return { pubkey: reserve, isSigner: false, isWritable: true };\n });\n\n const preloadedBorrowReservesString = this.preLoadedBorrowReservesSameTx.map((reserve) => reserve.toString());\n const borrowReservesList = this.borrowReserves.filter(\n (reserve) => !preloadedBorrowReservesString.includes(reserve.toString())\n );\n\n const borrowReserveAccountMetas = borrowReservesList.map((reserve) => {\n return { pubkey: reserve, isSigner: false, isWritable: true };\n });\n\n const borrowReservesReferrerTokenStates = borrowReservesList\n .map((reserve) => {\n if (this.referrer.equals(PublicKey.default)) {\n return { pubkey: this.kaminoMarket.programId, isSigner: false, isWritable: true };\n }\n const referrerTokenStateAddress = referrerTokenStatePda(this.referrer, reserve, this.kaminoMarket.programId)[0];\n return { pubkey: referrerTokenStateAddress, isSigner: false, isWritable: true };\n })\n .filter((x) => !x.pubkey.equals(this.kaminoMarket.programId));\n\n refreshObligationIx.keys = refreshObligationIx.keys.concat([\n ...depositReserveAccountMetas,\n ...(skipBorrowObligations ? [] : [...borrowReserveAccountMetas, ...borrowReservesReferrerTokenStates]),\n ]);\n\n if (addToSetupIxs) {\n this.setupIxs.push(refreshObligationIx);\n this.setupIxsLabels.push(`RefreshObligation[${obligationPda.toString()}]`);\n } else {\n this.inBetweenIxs.push(refreshObligationIx);\n this.inBetweenIxsLabels.push(`RefreshObligation[${obligationPda.toString()}]`);\n }\n }\n\n private addRequestElevationIx(elevationGroup: number, addToSetupIxs: boolean) {\n const obligationPda = this.getObligationPda();\n const args: RequestElevationGroupArgs = {\n elevationGroup,\n };\n const accounts: RequestElevationGroupAccounts = {\n owner: this.owner,\n obligation: obligationPda,\n lendingMarket: this.kaminoMarket.getAddress(),\n };\n\n const requestElevationGroupIx = requestElevationGroup(args, accounts, this.kaminoMarket.programId);\n\n const depositReservesList = this.depositReserves;\n\n // check if there's any member in the preloadedDepositReserves that is not in the depositReserves\n // if so, add it to the depositReserves\n for (let i = 0; i < this.preLoadedDepositReservesSameTx.length; i++) {\n const preloadedDepositReserveString = this.preLoadedDepositReservesSameTx[i].toString();\n\n // Check if the depositReserves array contains the current preloadedDepositReserve\n const found = this.depositReserves.some((depositReserve) => {\n return depositReserve.toString() === preloadedDepositReserveString;\n });\n\n // If not found, push the current preloadedDepositReserve to the depositReserves array\n if (!found) {\n depositReservesList.push(this.preLoadedDepositReservesSameTx[i]);\n }\n }\n\n const depositReserveAccountMetas = depositReservesList.map((reserve) => {\n return { pubkey: reserve, isSigner: false, isWritable: true };\n });\n\n const preloadedBorrowReservesString = this.preLoadedBorrowReservesSameTx.map((reserve) => reserve.toString());\n const borrowReservesList = this.borrowReserves.filter(\n (reserve) => !preloadedBorrowReservesString.includes(reserve.toString())\n );\n\n const borrowReserveAccountMetas = borrowReservesList.map((reserve) => {\n return { pubkey: reserve, isSigner: false, isWritable: true };\n });\n\n const borrowReservesReferrerTokenStates = borrowReservesList\n .map((reserve) => {\n if (this.referrer.equals(PublicKey.default)) {\n return { pubkey: this.kaminoMarket.programId, isSigner: false, isWritable: true };\n }\n const reserveState = this.kaminoMarket.getReserveByAddress(reserve)!;\n const referrerTokenStateAddress = referrerTokenStatePda(\n this.referrer,\n reserveState.address,\n this.kaminoMarket.programId\n )[0];\n return { pubkey: referrerTokenStateAddress, isSigner: false, isWritable: true };\n })\n .filter((x) => !x.pubkey.equals(this.kaminoMarket.programId));\n\n requestElevationGroupIx.keys = requestElevationGroupIx.keys.concat([\n ...depositReserveAccountMetas,\n ...borrowReserveAccountMetas,\n ...borrowReservesReferrerTokenStates,\n ]);\n\n if (addToSetupIxs) {\n this.setupIxs.push(requestElevationGroupIx);\n this.setupIxsLabels.push(`RequestElevation[${obligationPda}], elevation_group:${elevationGroup}`);\n } else {\n this.inBetweenIxs.push(requestElevationGroupIx);\n this.inBetweenIxsLabels.push(`RequestElevation[${obligationPda}], elevation_group:${elevationGroup}`);\n }\n }\n\n private addRefreshFarmsForReserve(\n reserves: KaminoReserve[],\n addToSetupIxs: boolean = true,\n mode: typeof ReserveFarmKind.Collateral | typeof ReserveFarmKind.Debt,\n crank: PublicKey = this.payer,\n twoTokenAction: boolean = false\n ) {\n const BASE_SEED_USER_STATE = Buffer.from('user');\n const getPda = (farm: PublicKey) =>\n PublicKey.findProgramAddressSync(\n [BASE_SEED_USER_STATE, farm.toBytes(), this.getObligationPda().toBytes()],\n farmsId\n )[0];\n\n const farms: [\n typeof ReserveFarmKind.Collateral | typeof ReserveFarmKind.Debt,\n PublicKey,\n PublicKey,\n KaminoReserve\n ][] = [];\n\n for (const kaminoReserve of reserves) {\n if (mode === ReserveFarmKind.Collateral && !kaminoReserve.state.farmCollateral.equals(PublicKey.default)) {\n farms.push([\n ReserveFarmKind.Collateral,\n kaminoReserve.state.farmCollateral,\n getPda(kaminoReserve.state.farmCollateral),\n kaminoReserve,\n ]);\n }\n if (mode === ReserveFarmKind.Debt && !kaminoReserve.state.farmDebt.equals(PublicKey.default)) {\n farms.push([\n ReserveFarmKind.Debt,\n kaminoReserve.state.farmDebt,\n getPda(kaminoReserve.state.farmDebt),\n kaminoReserve,\n ]);\n }\n }\n\n farms.forEach(\n (arg: [typeof ReserveFarmKind.Collateral | typeof ReserveFarmKind.Debt, PublicKey, PublicKey, KaminoReserve]) => {\n const args: RefreshObligationFarmsForReserveArgs = { mode: arg[0].discriminator };\n const accounts: RefreshObligationFarmsForReserveAccounts = {\n crank,\n obligation: this.getObligationPda(),\n lendingMarketAuthority: this.kaminoMarket.getLendingMarketAuthority(),\n reserve: arg[3].address,\n reserveFarmState: arg[1],\n obligationFarmUserState: arg[2],\n lendingMarket: this.kaminoMarket.getAddress(),\n farmsProgram: farmsId,\n rent: SYSVAR_RENT_PUBKEY,\n tokenProgram: TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n };\n const refreshFarmForObligationix = refreshObligationFarmsForReserve(\n args,\n accounts,\n this.kaminoMarket.programId\n );\n\n if (addToSetupIxs) {\n this.setupIxs.push(refreshFarmForObligationix);\n this.setupIxsLabels.push(\n `RefreshFarmForObligation[${\n arg[0].kind\n }, res=${arg[3].address.toString()}, obl=${this.getObligationPda().toString()}]`\n );\n if (twoTokenAction) {\n // If two token action, this refresh needs to be the first inbetween ix\n this.inBetweenIxs.push(refreshFarmForObligationix);\n this.inBetweenIxsLabels.push(\n `RefreshFarmForObligation[${\n arg[0].kind\n }, res=${arg[3].address.toString()}, obl=${this.getObligationPda().toString()}]`\n );\n } else {\n this.refreshFarmsCleanupTxnIxs.push(refreshFarmForObligationix);\n this.refreshFarmsCleanupTxnIxsLabels.push(\n `RefreshFarmForObligation[${\n arg[0].kind\n }, res=${arg[3].address.toString()}, obl=${this.getObligationPda().toString()}]`\n );\n }\n } else {\n this.inBetweenIxs.push(refreshFarmForObligationix);\n this.inBetweenIxsLabels.push(\n `RefreshFarmForObligation[${\n arg[0].kind\n }, res=${arg[3].address.toString()}, obl=${this.getObligationPda().toString()}]`\n );\n\n this.refreshFarmsCleanupTxnIxs.push(refreshFarmForObligationix);\n this.refreshFarmsCleanupTxnIxsLabels.push(\n `RefreshFarmForObligation[${\n arg[0].kind\n }, res=${arg[3].address.toString()}, obl=${this.getObligationPda().toString()}]`\n );\n }\n }\n );\n }\n\n private addRefreshFarmsCleanupTxnIxsToCleanupIxs() {\n this.cleanupIxs.splice(this.cleanupIxs.length - 1, 0, ...this.refreshFarmsCleanupTxnIxs);\n this.cleanupIxsLabels.splice(this.cleanupIxsLabels.length - 1, 0, ...this.refreshFarmsCleanupTxnIxsLabels);\n }\n\n private async addInitObligationForFarm(\n reserve: KaminoReserve,\n mode: typeof ReserveFarmKind.Collateral | typeof ReserveFarmKind.Debt,\n addToSetupIxs: boolean = true\n ): Promise<void> {\n const BASE_SEED_USER_STATE = Buffer.from('user');\n const getPda = (farm: PublicKey) =>\n PublicKey.findProgramAddressSync(\n [BASE_SEED_USER_STATE, farm.toBytes(), this.getObligationPda().toBytes()],\n farmsId\n )[0];\n\n const farms: [number, PublicKey, PublicKey][] = [];\n\n if (mode === ReserveFarmKind.Collateral && isNotNullPubkey(reserve.state.farmCollateral)) {\n const pda = getPda(reserve.state.farmCollateral);\n const account = await this.kaminoMarket.getConnection().getAccountInfo(pda);\n if (!account) {\n farms.push([ReserveFarmKind.Collateral.discriminator, reserve.state.farmCollateral, pda]);\n }\n }\n\n if (mode === ReserveFarmKind.Debt && isNotNullPubkey(reserve.state.farmDebt)) {\n const pda = getPda(reserve.state.farmDebt);\n const account = await this.kaminoMarket.getConnection().getAccountInfo(pda);\n if (!account) {\n farms.push([ReserveFarmKind.Debt.discriminator, reserve.state.farmDebt, getPda(reserve.state.farmDebt)]);\n }\n }\n\n farms.forEach((arg: [number, PublicKey, PublicKey]) => {\n const args: InitObligationFarmsForReserveArgs = { mode: arg[0] };\n const accounts: InitObligationFarmsForReserveAccounts = {\n owner: this.obligation ? this.obligation.state.owner : this.owner,\n payer: this.owner,\n obligation: this.getObligationPda(),\n lendingMarketAuthority: this.kaminoMarket.getLendingMarketAuthority(),\n reserve: reserve.address,\n reserveFarmState: arg[1],\n obligationFarm: arg[2],\n lendingMarket: this.kaminoMarket.getAddress(),\n farmsProgram: farmsId,\n rent: SYSVAR_RENT_PUBKEY,\n tokenProgram: TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n };\n const initObligationForFarm = initObligationFarmsForReserve(args, accounts, this.kaminoMarket.programId);\n if (addToSetupIxs) {\n this.setupIxs.push(initObligationForFarm);\n this.setupIxsLabels.push(\n `InitObligationForFarm[${reserve.address.toString()}, ${this.getObligationPda().toString()}]`\n );\n } else {\n this.inBetweenIxs.push(initObligationForFarm);\n this.inBetweenIxsLabels.push(\n `InitObligationForFarm[${reserve.address.toString()}, ${this.getObligationPda().toString()}]`\n );\n }\n });\n }\n\n private async addInitObligationIxs() {\n if (!this.obligation) {\n const obligationPda = this.getObligationPda();\n const [userMetadataAddress, _bump] = userMetadataPda(this.owner, this.kaminoMarket.programId);\n const initObligationIx = initObligation(\n {\n args: {\n tag: this.obligationType!.toArgs().tag,\n id: this.obligationType!.toArgs().id,\n },\n },\n {\n obligationOwner: this.owner,\n feePayer: this.payer,\n obligation: obligationPda,\n lendingMarket: this.kaminoMarket.getAddress(),\n seed1Account: this.obligationType!.toArgs().seed1,\n seed2Account: this.obligationType!.toArgs().seed2,\n ownerUserMetadata: userMetadataAddress,\n rent: SYSVAR_RENT_PUBKEY,\n tokenProgram: TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n },\n this.kaminoMarket.programId\n );\n this.setupIxs.push(initObligationIx);\n this.setupIxsLabels.push(`InitObligation[${obligationPda.toString()}]`);\n }\n }\n\n private async addInitUserMetadataIxs() {\n const [createLutIx, lookupTableAddress] = await createLookupTableIx(this.kaminoMarket.getConnection(), this.owner);\n this.setupIxs.push(createLutIx);\n this.setupIxsLabels.push(`createUserLutIx[${lookupTableAddress.toString()}]`);\n const [userMetadataAddress, _bump] = userMetadataPda(this.owner, this.kaminoMarket.programId);\n const referrerUserMetadataAddress = this.referrer.equals(PublicKey.default)\n ? this.kaminoMarket.programId\n : userMetadataPda(this.referrer, this.kaminoMarket.programId)[0];\n const initUserMetadataIx = initUserMetadata(\n {\n userLookupTable: lookupTableAddress,\n },\n {\n owner: this.owner,\n feePayer: this.payer,\n userMetadata: userMetadataAddress,\n referrerUserMetadata: referrerUserMetadataAddress,\n rent: SYSVAR_RENT_PUBKEY,\n systemProgram: SystemProgram.programId,\n },\n this.kaminoMarket.programId\n );\n this.setupIxs.push(initUserMetadataIx);\n this.setupIxsLabels.push(`initUserMetadata[${userMetadataAddress.toString()}]`);\n }\n\n private async addInitReferrerTokenStateIxs(reservesArr: KaminoReserve[] = []) {\n if (this.referrer.equals(PublicKey.default)) {\n return;\n }\n\n const reserves = reservesArr.length !== 0 ? reservesArr : [...new Set([this.reserve, this.outflowReserve])];\n const tokenStatesToCreate: [PublicKey, PublicKey][] = [];\n for (const reserve of reserves) {\n if (!reserve) {\n continue;\n }\n\n const referrerTokenStateAddress = referrerTokenStatePda(\n this.referrer,\n reserve.address,\n this.kaminoMarket.programId\n )[0];\n\n if (!(await checkIfAccountExists(this.kaminoMarket.getConnection(), referrerTokenStateAddress))) {\n tokenStatesToCreate.push([referrerTokenStateAddress, reserve?.address]);\n }\n }\n\n tokenStatesToCreate.forEach(([referrerTokenStateAddress, reserveAddress]) => {\n const initreferrerTokenStateIx = initReferrerTokenState(\n {\n referrer: this.referrer,\n },\n {\n lendingMarket: this.kaminoMarket.getAddress(),\n payer: this.owner,\n reserve: reserveAddress,\n referrerTokenState: referrerTokenStateAddress,\n rent: SYSVAR_RENT_PUBKEY,\n systemProgram: SystemProgram.programId,\n },\n this.kaminoMarket.programId\n );\n\n this.setupIxs.unshift(initreferrerTokenStateIx);\n this.setupIxsLabels.unshift(\n `InitReferrerTokenState[${referrerTokenStateAddress.toString()} res=${reserveAddress}]`\n );\n });\n }\n\n private addWithdrawReferrerFeesIxs() {\n const referrerTokenStateAddress = referrerTokenStatePda(\n this.owner,\n this.reserve.address,\n this.kaminoMarket.programId\n )[0];\n\n const withdrawReferrerFeesIx = withdrawReferrerFees(\n {\n referrer: this.owner,\n lendingMarket: this.kaminoMarket.getAddress(),\n reserve: this.reserve.address,\n referrerTokenState: referrerTokenStateAddress,\n reserveSupplyLiquidity: this.reserve.state.liquidity.supplyVault,\n referrerTokenAccount: this.userTokenAccountAddress,\n lendingMarketAuthority: this.kaminoMarket.getLendingMarketAuthority(),\n tokenProgram: TOKEN_PROGRAM_ID,\n },\n this.kaminoMarket.programId\n );\n\n this.lendingIxs.push(withdrawReferrerFeesIx);\n this.lendingIxsLabels.push(`WithdrawReferrerFeesIx[${this.owner.toString()}]`);\n }\n\n private addComputeBudgetIxn(units: number) {\n this.setupIxs.push(buildComputeBudgetIx(units));\n this.setupIxsLabels.push(`AddComputeBudget[${units}]`);\n }\n\n private async addAtaIxs(action: ActionType) {\n if (this.mint.equals(WRAPPED_SOL_MINT) || this.secondaryMint?.equals(WRAPPED_SOL_MINT)) {\n await this.updateWSOLAccount(action);\n }\n\n if ((action === 'withdraw' || action === 'borrow' || action === 'redeem') && !this.mint.equals(WRAPPED_SOL_MINT)) {\n const userTokenAccountInfo = await this.kaminoMarket.getConnection().getAccountInfo(this.userTokenAccountAddress);\n\n if (!userTokenAccountInfo) {\n const [, createUserTokenAccountIx] = await createAssociatedTokenAccountIdempotentInstruction(\n this.owner,\n this.reserve.getLiquidityMint(),\n this.owner,\n this.userTokenAccountAddress\n );\n\n if (this.positions === POSITION_LIMIT && this.hostAta) {\n this.preTxnIxs.push(createUserTokenAccountIx);\n this.preTxnIxsLabels.push(`CreateLiquidityUserAta[${this.owner}]`);\n } else {\n this.setupIxs.unshift(createUserTokenAccountIx);\n this.setupIxsLabels.unshift(`CreateLiquidityUserAta[${this.owner}]`);\n }\n }\n }\n\n if (action === 'liquidate') {\n const userTokenAccountInfo = await this.kaminoMarket.getConnection().getAccountInfo(this.userTokenAccountAddress);\n\n if (!this.outflowReserve) {\n throw new Error(`Outflow reserve state not found ${this.mint}`);\n }\n\n if (!userTokenAccountInfo) {\n const [, createUserTokenAccountIx] = await createAssociatedTokenAccountIdempotentInstruction(\n this.owner,\n this.outflowReserve.getLiquidityMint(),\n this.owner,\n this.userTokenAccountAddress\n );\n if (this.positions === POSITION_LIMIT && this.mint.equals(WRAPPED_SOL_MINT)) {\n this.preTxnIxs.push(createUserTokenAccountIx);\n this.preTxnIxsLabels.push(`CreateUserAta[${this.userTokenAccountAddress.toBase58()}]`);\n } else {\n this.setupIxs.unshift(createUserTokenAccountIx);\n this.setupIxsLabels.unshift(`CreateUserAta[${this.userTokenAccountAddress.toBase58()}]`);\n }\n }\n\n const userCollateralAccountInfo = await this.kaminoMarket\n .getConnection()\n .getAccountInfo(this.userCollateralAccountAddress);\n if (!userCollateralAccountInfo) {\n const [, createUserCollateralAccountIx] = await createAssociatedTokenAccountIdempotentInstruction(\n this.owner,\n this.outflowReserve.getCTokenMint(),\n this.owner,\n this.userCollateralAccountAddress\n );\n\n if (this.positions === POSITION_LIMIT && this.mint.equals(WRAPPED_SOL_MINT)) {\n this.preTxnIxs.push(createUserCollateralAccountIx);\n this.preTxnIxsLabels.push(`CreateCollateralUserAta[${this.userCollateralAccountAddress.toString()}]`);\n } else {\n this.setupIxs.unshift(createUserCollateralAccountIx);\n this.setupIxsLabels.unshift(`CreateCollateralUserAta[${this.userCollateralAccountAddress.toString()}]`);\n }\n }\n\n if (!this.additionalTokenAccountAddress) {\n throw new Error(`Additional token account address not found ${this.mint}`);\n }\n }\n\n if (\n action === 'depositAndBorrow' ||\n (action === 'repayAndWithdraw' && !this.secondaryMint?.equals(WRAPPED_SOL_MINT))\n ) {\n if (!this.additionalTokenAccountAddress) {\n throw new Error(`Additional token account address not found ${this.secondaryMint}`);\n }\n\n if (!this.outflowReserve) {\n throw new Error(`Outflow reserve state not found ${this.mint}`);\n }\n\n const additionalUserTokenAccountInfo = await this.kaminoMarket\n .getConnection()\n .getAccountInfo(this.additionalTokenAccountAddress);\n\n if (!additionalUserTokenAccountInfo) {\n const [, createUserTokenAccountIx] = await createAssociatedTokenAccountIdempotentInstruction(\n this.owner,\n this.outflowReserve.getLiquidityMint(),\n this.owner,\n this.additionalTokenAccountAddress\n );\n\n this.setupIxs.unshift(createUserTokenAccountIx);\n this.setupIxsLabels.unshift(`CreateAdditionalUserTokenAta[${this.owner}]`);\n }\n }\n\n if (action === 'withdraw' || action === 'mint' || action === 'deposit' || action === 'repayAndWithdraw') {\n const userTokenAccountInfo = await this.kaminoMarket.getConnection().getAccountInfo(this.userTokenAccountAddress);\n\n // TODO: Might need to remove this\n if (!userTokenAccountInfo) {\n const [, createUserTokenAccountIx] = await createAssociatedTokenAccountIdempotentInstruction(\n this.owner,\n this.reserve.getLiquidityMint(),\n this.owner,\n this.userTokenAccountAddress\n );\n this.preTxnIxs.push(createUserTokenAccountIx);\n this.preTxnIxsLabels.push(`CreateUserAta[${this.userTokenAccountAddress.toBase58()}]`);\n }\n }\n if (action === 'mint') {\n const userCollateralAccountInfo = await this.kaminoMarket\n .getConnection()\n .getAccountInfo(this.userCollateralAccountAddress);\n\n if (!userCollateralAccountInfo) {\n const collateralMintPubkey = this.reserve.getCTokenMint();\n const [, createUserCollateralAccountIx] = await createAssociatedTokenAccountIdempotentInstruction(\n this.owner,\n collateralMintPubkey,\n this.owner,\n this.userCollateralAccountAddress\n );\n\n if (this.positions === POSITION_LIMIT && this.mint.equals(WRAPPED_SOL_MINT)) {\n this.preTxnIxs.push(createUserCollateralAccountIx);\n this.preTxnIxsLabels.push(`CreateCollateralUserAta[${this.userCollateralAccountAddress.toString()}]`);\n } else {\n this.setupIxs.unshift(createUserCollateralAccountIx);\n this.setupIxsLabels.unshift(`CreateCollateralUserAta[${this.userCollateralAccountAddress.toString()}]`);\n }\n }\n }\n }\n\n private async updateWSOLAccount(action: ActionType) {\n const preIxs: Array<TransactionInstruction> = [];\n const postIxs: Array<TransactionInstruction> = [];\n const preIxsLabels: Array<string> = [];\n const postIxsLabels: Array<string> = [];\n\n if (action === 'depositAndBorrow' || action === 'repayAndWithdraw') {\n return;\n }\n\n let safeRepay = new BN(this.amount);\n\n if (this.obligation && action === 'repay' && this.amount.eq(new BN(U64_MAX))) {\n const borrow = this.obligation.state.borrows.find(\n (borrow) => borrow.borrowReserve.toString() === this.reserve.address.toString()\n );\n\n if (!borrow) {\n throw Error(`Unable to find obligation borrow to repay for ${this.obligation.state.owner.toBase58()}`);\n }\n\n const cumulativeBorrowRateObligation = KaminoObligation.getCumulativeBorrowRate(borrow);\n const cumulativeBorrowRateReserve = this.reserve.getEstimatedCumulativeBorrowRate(this.currentSlot);\n // TODO: shouldn't this calc be added to all other stuff as well?\n safeRepay = new BN(\n Math.floor(\n KaminoObligation.getBorrowAmount(borrow)\n .mul(cumulativeBorrowRateReserve)\n .div(cumulativeBorrowRateObligation)\n .add(new Decimal(SOL_PADDING_FOR_INTEREST.toString()))\n .toNumber()\n ).toString()\n );\n }\n\n let userTokenAccountAddress = this.userTokenAccountAddress;\n if (this.secondaryMint?.equals(WRAPPED_SOL_MINT)) {\n if (!this.additionalTokenAccountAddress) {\n throw new Error(`Additional token account address not found ${this.secondaryMint}`);\n }\n userTokenAccountAddress = this.additionalTokenAccountAddress;\n }\n\n const userWSOLAccountInfo = await this.kaminoMarket.getConnection().getAccountInfo(userTokenAccountAddress);\n\n const rentExempt = await Token.getMinBalanceRentForExemptAccount(this.kaminoMarket.getConnection());\n\n // Add rent exemption lamports for WSOL accounts that need to be pre-funded for inflow/send transactions\n const sendAction =\n action === 'deposit' ||\n action === 'repay' ||\n action === 'mint' ||\n (action === 'liquidate' && this.secondaryMint?.equals(WRAPPED_SOL_MINT)); // only sync WSOL amount if liquidator repays SOL which is secondaryMint\n\n const transferLamportsIx = SystemProgram.transfer({\n fromPubkey: this.owner,\n toPubkey: userTokenAccountAddress,\n lamports: (userWSOLAccountInfo ? 0 : rentExempt) + (sendAction ? parseInt(safeRepay.toString(), 10) : 0),\n });\n preIxs.push(transferLamportsIx);\n preIxsLabels.push(`TransferLamportsToUserAtaSOL[${userTokenAccountAddress}]`);\n\n const closeWSOLAccountIx = Token.createCloseAccountInstruction(\n TOKEN_PROGRAM_ID,\n userTokenAccountAddress,\n this.owner,\n this.owner,\n []\n );\n\n const syncIx = syncNative(userTokenAccountAddress);\n if (userWSOLAccountInfo) {\n if (sendAction) {\n preIxs.push(syncIx);\n preIxsLabels.push(`SyncUserAtaSOL[${userTokenAccountAddress}]`);\n } else {\n postIxs.push(closeWSOLAccountIx);\n postIxsLabels.push(`CloseUserAtaSOL[${userTokenAccountAddress}]`);\n }\n } else {\n const [, createUserWSOLAccountIx] = await createAssociatedTokenAccountIdempotentInstruction(\n this.owner,\n NATIVE_MINT,\n this.owner,\n userTokenAccountAddress\n );\n preIxs.push(createUserWSOLAccountIx);\n preIxsLabels.push(`CreateUserAtaSOL[${userTokenAccountAddress}]`);\n preIxs.push(syncIx);\n preIxsLabels.push(`SyncUserAtaSOL[${userTokenAccountAddress}]`);\n postIxs.push(closeWSOLAccountIx);\n postIxsLabels.push(`CloseUserAtaSOL[${userTokenAccountAddress}]`);\n }\n\n // TODO: Consider for liquidations and other types of actions if we have to split up some ixs in 2-3 txs\n // if (this.positions && this.positions >= POSITION_LIMIT) {\n // this.preTxnIxs.push(...preIxs);\n // this.preTxnIxsLabels.push(...preIxsLabels);\n // this.postTxnIxs.push(...postIxs);\n // this.postTxnIxsLabels.push(...postIxsLabels);\n // } else {\n // }\n this.setupIxs.unshift(...preIxs);\n this.setupIxsLabels.unshift(...preIxsLabels);\n this.cleanupIxs.push(...postIxs);\n this.cleanupIxsLabels.push(...postIxsLabels);\n }\n\n static async initializeMultiTokenAction(\n kaminoMarket: KaminoMarket,\n action: ActionType,\n inflowAmount: string | BN,\n inflowTokenMint: PublicKey,\n outflowTokenMint: PublicKey,\n payer: PublicKey,\n obligationOwner: PublicKey,\n obligation: KaminoObligation | ObligationType,\n outflowAmount?: string | BN,\n referrer: PublicKey = PublicKey.default,\n currentSlot: number = 0\n ) {\n const inflowReserve = kaminoMarket.getReserveByMint(inflowTokenMint);\n const outflowReserve = kaminoMarket.getReserveByMint(outflowTokenMint);\n\n if (!outflowReserve || !inflowReserve) {\n throw new Error('reserve states are not fetched');\n }\n\n const {\n userTokenAccountAddress: userOutflowTokenAccountAddress,\n userCollateralAccountAddress: userOutflowCollateralAccountAddress,\n } = await KaminoAction.getUserAccountAddresses(payer, outflowReserve.state);\n\n const {\n userTokenAccountAddress: userInflowTokenAccountAddress,\n userCollateralAccountAddress: userInflowCollateralAccountAddress,\n } = await KaminoAction.getUserAccountAddresses(payer, inflowReserve.state);\n\n const { kaminoObligation, depositReserves, borrowReserves, distinctReserveCount } =\n await KaminoAction.loadObligation(\n action,\n kaminoMarket,\n obligationOwner,\n inflowReserve.address,\n obligation,\n outflowReserve.address\n );\n\n const [_, userMetadata] = await kaminoMarket.getUserMetadata(payer);\n if (userMetadata) {\n referrer = userMetadata.referrer;\n }\n\n const referrerKey = kaminoObligation ? kaminoObligation.state.referrer : referrer;\n\n let userTokenAccountAddress: PublicKey;\n let userCollateralAccountAddress: PublicKey;\n let additionalUserTokenAccountAddress: PublicKey;\n let secondaryMint: PublicKey;\n let primaryMint: PublicKey;\n\n if (action === 'liquidate') {\n userTokenAccountAddress = userOutflowTokenAccountAddress;\n userCollateralAccountAddress = userOutflowCollateralAccountAddress;\n additionalUserTokenAccountAddress = userInflowTokenAccountAddress;\n primaryMint = outflowTokenMint;\n secondaryMint = inflowTokenMint;\n } else if (action === 'depositAndBorrow') {\n userTokenAccountAddress = userInflowTokenAccountAddress;\n userCollateralAccountAddress = userInflowCollateralAccountAddress;\n additionalUserTokenAccountAddress = userOutflowTokenAccountAddress;\n primaryMint = inflowTokenMint;\n secondaryMint = outflowTokenMint;\n } else if (action === 'repayAndWithdraw') {\n primaryMint = inflowTokenMint;\n secondaryMint = outflowTokenMint;\n userTokenAccountAddress = userInflowTokenAccountAddress;\n userCollateralAccountAddress = userOutflowCollateralAccountAddress;\n additionalUserTokenAccountAddress = userOutflowTokenAccountAddress;\n } else {\n throw new Error('Invalid action');\n }\n\n return new KaminoAction(\n kaminoMarket,\n payer,\n kaminoObligation || obligation,\n userTokenAccountAddress,\n userCollateralAccountAddress,\n primaryMint,\n distinctReserveCount,\n inflowAmount,\n depositReserves,\n borrowReserves,\n inflowReserve,\n currentSlot,\n undefined,\n secondaryMint,\n additionalUserTokenAccountAddress,\n outflowReserve,\n outflowAmount,\n referrerKey\n );\n }\n\n static async initializeWithdrawReferrerFees(\n mint: PublicKey,\n owner: PublicKey,\n kaminoMarket: KaminoMarket,\n currentSlot: number = 0,\n hostAta?: PublicKey\n ) {\n const reserve = kaminoMarket.getReserveByMint(mint);\n if (reserve === undefined) {\n throw new Error(`Reserve ${mint} not found in market ${kaminoMarket.getAddress().toBase58()}`);\n }\n\n const { atas, createAtasIxns } = await getAtasWithCreateIxnsIfMissing(kaminoMarket.getConnection(), owner, [\n reserve.getLiquidityMint(),\n ]);\n\n const userTokenAccountAddress = atas[0];\n\n return {\n axn: new KaminoAction(\n kaminoMarket,\n owner,\n new VanillaObligation(kaminoMarket.programId),\n userTokenAccountAddress,\n PublicKey.default,\n mint,\n 0,\n new BN(0),\n [],\n [],\n reserve,\n currentSlot,\n hostAta,\n undefined,\n undefined,\n undefined,\n undefined,\n undefined\n ),\n createAtasIxns,\n };\n }\n\n getObligationPda(): PublicKey {\n return this.obligation\n ? this.obligation.obligationAddress\n : this.obligationType!.toPda(this.kaminoMarket.getAddress(), this.owner);\n }\n}\n"]}
@@ -0,0 +1,15 @@
1
+ import { BorrowRateCurve, CurvePointFields } from '../idl_codegen/types';
2
+ export declare const CURVE_POINTS_LENGTH = 11;
3
+ /**
4
+ * Create a new curve with a flat borrow rate
5
+ * Useful for testing
6
+ * @param borrowRateBps - the flat borrow rate in bps
7
+ * @return BorrowRateCurve - the serializable flat curve configuration
8
+ */
9
+ export declare function newFlat(borrowRateBps: number): BorrowRateCurve;
10
+ /**
11
+ * Pad the remainder with the final point
12
+ * @param points - un-padded points
13
+ * @returns points - the padded points
14
+ */
15
+ export declare function padPoints(points: CurvePointFields[]): CurvePointFields[];
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.padPoints = exports.newFlat = exports.CURVE_POINTS_LENGTH = void 0;
4
+ const types_1 = require("../idl_codegen/types");
5
+ exports.CURVE_POINTS_LENGTH = 11;
6
+ /**
7
+ * Create a new curve with a flat borrow rate
8
+ * Useful for testing
9
+ * @param borrowRateBps - the flat borrow rate in bps
10
+ * @return BorrowRateCurve - the serializable flat curve configuration
11
+ */
12
+ function newFlat(borrowRateBps) {
13
+ const points = padPoints([
14
+ { borrowRateBps, utilizationRateBps: 0 },
15
+ { borrowRateBps, utilizationRateBps: 10000 },
16
+ ]);
17
+ return new types_1.BorrowRateCurve({
18
+ points,
19
+ });
20
+ }
21
+ exports.newFlat = newFlat;
22
+ /**
23
+ * Pad the remainder with the final point
24
+ * @param points - un-padded points
25
+ * @returns points - the padded points
26
+ */
27
+ function padPoints(points) {
28
+ points.push(...Array(exports.CURVE_POINTS_LENGTH - points.length).fill(points[points.length - 1]));
29
+ return points;
30
+ }
31
+ exports.padPoints = padPoints;
32
+ //# sourceMappingURL=curve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"curve.js","sourceRoot":"","sources":["../../src/classes/curve.ts"],"names":[],"mappings":";;;AAAA,gDAAyE;AAE5D,QAAA,mBAAmB,GAAG,EAAE,CAAC;AAEtC;;;;;GAKG;AACH,SAAgB,OAAO,CAAC,aAAqB;IAC3C,MAAM,MAAM,GAAuB,SAAS,CAAC;QAC3C,EAAE,aAAa,EAAE,kBAAkB,EAAE,CAAC,EAAE;QACxC,EAAE,aAAa,EAAE,kBAAkB,EAAE,KAAM,EAAE;KAC9C,CAAC,CAAC;IACH,OAAO,IAAI,uBAAe,CAAC;QACzB,MAAM;KACP,CAAC,CAAC;AACL,CAAC;AARD,0BAQC;AAED;;;;GAIG;AACH,SAAgB,SAAS,CAAC,MAA0B;IAClD,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,2BAAmB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3F,OAAO,MAAM,CAAC;AAChB,CAAC;AAHD,8BAGC","sourcesContent":["import { BorrowRateCurve, CurvePointFields } from '../idl_codegen/types';\n\nexport const CURVE_POINTS_LENGTH = 11;\n\n/**\n * Create a new curve with a flat borrow rate\n * Useful for testing\n * @param borrowRateBps - the flat borrow rate in bps\n * @return BorrowRateCurve - the serializable flat curve configuration\n */\nexport function newFlat(borrowRateBps: number): BorrowRateCurve {\n const points: CurvePointFields[] = padPoints([\n { borrowRateBps, utilizationRateBps: 0 },\n { borrowRateBps, utilizationRateBps: 10_000 },\n ]);\n return new BorrowRateCurve({\n points,\n });\n}\n\n/**\n * Pad the remainder with the final point\n * @param points - un-padded points\n * @returns points - the padded points\n */\nexport function padPoints(points: CurvePointFields[]): CurvePointFields[] {\n points.push(...Array(CURVE_POINTS_LENGTH - points.length).fill(points[points.length - 1]));\n return points;\n}\n"]}
@@ -0,0 +1,23 @@
1
+ import BN from 'bn.js';
2
+ import Decimal from 'decimal.js';
3
+ export declare class Fraction {
4
+ static MAX_SIZE_F: number;
5
+ static MAX_SIZE_BF: number;
6
+ static FRACTIONS: number;
7
+ static MULTIPLIER_NUMBER: number;
8
+ static MAX_BN: BN;
9
+ static MIN_BN: BN;
10
+ valueSf: BN;
11
+ constructor(valueSf: BN);
12
+ toDecimal(): Decimal;
13
+ static fromDecimal(n: Decimal): Fraction;
14
+ static fromBps(n: Decimal): Fraction;
15
+ static fromPercent(n: number): Fraction;
16
+ getValue(): BN;
17
+ gt(x: Fraction): boolean;
18
+ lt(x: Fraction): boolean;
19
+ gte(x: Fraction): boolean;
20
+ lte(x: Fraction): boolean;
21
+ eq(x: Fraction): boolean;
22
+ }
23
+ export declare const ZERO_FRACTION: Fraction;
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ZERO_FRACTION = exports.Fraction = void 0;
7
+ const bn_js_1 = __importDefault(require("bn.js"));
8
+ const decimal_js_1 = __importDefault(require("decimal.js"));
9
+ class Fraction {
10
+ constructor(valueSf) {
11
+ if (valueSf.lt(Fraction.MIN_BN) || valueSf.gt(Fraction.MAX_BN)) {
12
+ throw new Error('Number out of range');
13
+ }
14
+ this.valueSf = valueSf;
15
+ }
16
+ toDecimal() {
17
+ return new decimal_js_1.default(this.valueSf.toString()).div(Fraction.MULTIPLIER_NUMBER);
18
+ }
19
+ static fromDecimal(n) {
20
+ const MULTIPLIER_DECIMAL = new decimal_js_1.default(Fraction.MULTIPLIER_NUMBER.toString());
21
+ const scaledDecimal = n.mul(MULTIPLIER_DECIMAL).round();
22
+ const scaledValue = new bn_js_1.default(scaledDecimal.toString());
23
+ return new Fraction(scaledValue);
24
+ }
25
+ static fromBps(n) {
26
+ const decimal = n.div(10000);
27
+ return Fraction.fromDecimal(decimal);
28
+ }
29
+ static fromPercent(n) {
30
+ const decimal = new decimal_js_1.default(n).div(100);
31
+ return Fraction.fromDecimal(decimal);
32
+ }
33
+ getValue() {
34
+ return this.valueSf;
35
+ }
36
+ gt(x) {
37
+ return this.valueSf.gt(x.getValue());
38
+ }
39
+ lt(x) {
40
+ return this.valueSf.lt(x.getValue());
41
+ }
42
+ gte(x) {
43
+ return this.valueSf.gte(x.getValue());
44
+ }
45
+ lte(x) {
46
+ return this.valueSf.lte(x.getValue());
47
+ }
48
+ eq(x) {
49
+ return this.valueSf.eq(x.getValue());
50
+ }
51
+ }
52
+ exports.Fraction = Fraction;
53
+ Fraction.MAX_SIZE_F = 128;
54
+ Fraction.MAX_SIZE_BF = 256;
55
+ Fraction.FRACTIONS = 60;
56
+ Fraction.MULTIPLIER_NUMBER = Math.pow(2, Fraction.FRACTIONS);
57
+ Fraction.MAX_BN = new bn_js_1.default(2).pow(new bn_js_1.default(Fraction.MAX_SIZE_BF)).sub(new bn_js_1.default(1));
58
+ Fraction.MIN_BN = new bn_js_1.default(0);
59
+ exports.ZERO_FRACTION = new Fraction(new bn_js_1.default(0));
60
+ //# sourceMappingURL=fraction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fraction.js","sourceRoot":"","sources":["../../src/classes/fraction.ts"],"names":[],"mappings":";;;;;;AAAA,kDAAuB;AACvB,4DAAiC;AAEjC,MAAa,QAAQ;IAWnB,YAAY,OAAW;QACrB,IAAI,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YAC9D,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;SACxC;QAED,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IACD,SAAS;QACP,OAAO,IAAI,oBAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC9E,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,CAAU;QAC3B,MAAM,kBAAkB,GAAG,IAAI,oBAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC9E,MAAM,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE,CAAC;QACxD,MAAM,WAAW,GAAG,IAAI,eAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC;QAErD,OAAO,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,CAAU;QACvB,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7B,OAAO,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,CAAS;QAC1B,MAAM,OAAO,GAAG,IAAI,oBAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxC,OAAO,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,EAAE,CAAC,CAAW;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IACvC,CAAC;IACD,EAAE,CAAC,CAAW;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IACvC,CAAC;IACD,GAAG,CAAC,CAAW;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IACxC,CAAC;IACD,GAAG,CAAC,CAAW;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IACxC,CAAC;IACD,EAAE,CAAC,CAAW;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IACvC,CAAC;;AA1DH,4BA2DC;AA1DQ,mBAAU,GAAG,GAAG,CAAC;AACjB,oBAAW,GAAG,GAAG,CAAC;AAClB,kBAAS,GAAG,EAAE,CAAC;AACf,0BAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;AAEpD,eAAM,GAAG,IAAI,eAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,eAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,eAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACpE,eAAM,GAAG,IAAI,eAAE,CAAC,CAAC,CAAC,CAAC;AAsDf,QAAA,aAAa,GAAG,IAAI,QAAQ,CAAC,IAAI,eAAE,CAAC,CAAC,CAAC,CAAC,CAAC","sourcesContent":["import BN from 'bn.js';\nimport Decimal from 'decimal.js';\n\nexport class Fraction {\n static MAX_SIZE_F = 128;\n static MAX_SIZE_BF = 256;\n static FRACTIONS = 60;\n static MULTIPLIER_NUMBER = Math.pow(2, Fraction.FRACTIONS);\n\n static MAX_BN = new BN(2).pow(new BN(Fraction.MAX_SIZE_BF)).sub(new BN(1));\n static MIN_BN = new BN(0);\n\n valueSf: BN;\n\n constructor(valueSf: BN) {\n if (valueSf.lt(Fraction.MIN_BN) || valueSf.gt(Fraction.MAX_BN)) {\n throw new Error('Number out of range');\n }\n\n this.valueSf = valueSf;\n }\n toDecimal(): Decimal {\n return new Decimal(this.valueSf.toString()).div(Fraction.MULTIPLIER_NUMBER);\n }\n\n static fromDecimal(n: Decimal): Fraction {\n const MULTIPLIER_DECIMAL = new Decimal(Fraction.MULTIPLIER_NUMBER.toString());\n const scaledDecimal = n.mul(MULTIPLIER_DECIMAL).round();\n const scaledValue = new BN(scaledDecimal.toString());\n\n return new Fraction(scaledValue);\n }\n\n static fromBps(n: Decimal): Fraction {\n const decimal = n.div(10000);\n return Fraction.fromDecimal(decimal);\n }\n\n static fromPercent(n: number): Fraction {\n const decimal = new Decimal(n).div(100);\n return Fraction.fromDecimal(decimal);\n }\n\n getValue(): BN {\n return this.valueSf;\n }\n\n gt(x: Fraction): boolean {\n return this.valueSf.gt(x.getValue());\n }\n lt(x: Fraction): boolean {\n return this.valueSf.lt(x.getValue());\n }\n gte(x: Fraction): boolean {\n return this.valueSf.gte(x.getValue());\n }\n lte(x: Fraction): boolean {\n return this.valueSf.lte(x.getValue());\n }\n eq(x: Fraction): boolean {\n return this.valueSf.eq(x.getValue());\n }\n}\n\nexport const ZERO_FRACTION = new Fraction(new BN(0));\n"]}
@@ -0,0 +1,8 @@
1
+ export * from './action';
2
+ export * from './curve';
3
+ export * from './market';
4
+ export * from './obligation';
5
+ export * from './reserve';
6
+ export * from './shared';
7
+ export * from './utils';
8
+ export * from './jupiterPerps';
@@ -0,0 +1,25 @@
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("./action"), exports);
18
+ __exportStar(require("./curve"), exports);
19
+ __exportStar(require("./market"), exports);
20
+ __exportStar(require("./obligation"), exports);
21
+ __exportStar(require("./reserve"), exports);
22
+ __exportStar(require("./shared"), exports);
23
+ __exportStar(require("./utils"), exports);
24
+ __exportStar(require("./jupiterPerps"), exports);
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/classes/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,0CAAwB;AACxB,2CAAyB;AACzB,+CAA6B;AAC7B,4CAA0B;AAC1B,2CAAyB;AACzB,0CAAwB;AACxB,iDAA+B","sourcesContent":["export * from './action';\nexport * from './curve';\nexport * from './market';\nexport * from './obligation';\nexport * from './reserve';\nexport * from './shared';\nexport * from './utils';\nexport * from './jupiterPerps';\n"]}
@@ -0,0 +1,2 @@
1
+ import { Connection, PublicKey } from '@solana/web3.js';
2
+ export declare function getJLPApr(connection: Connection, poolAddress: PublicKey): Promise<number>;
@@ -0,0 +1,25 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.getJLPApr = void 0;
13
+ const Pool_1 = require("../idl_codegen_jupiter_perps/accounts/Pool");
14
+ function getJLPApr(connection, poolAddress) {
15
+ return __awaiter(this, void 0, void 0, function* () {
16
+ const jlpPool = yield Pool_1.Pool.fetch(connection, poolAddress);
17
+ if (!jlpPool) {
18
+ throw new Error('JLP pool not found');
19
+ }
20
+ const poolApr = jlpPool.poolApr;
21
+ return poolApr.feeAprBps.toNumber() / 100;
22
+ });
23
+ }
24
+ exports.getJLPApr = getJLPApr;
25
+ //# sourceMappingURL=jupiterPerps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jupiterPerps.js","sourceRoot":"","sources":["../../src/classes/jupiterPerps.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,qEAAkE;AAElE,SAAsB,SAAS,CAAC,UAAsB,EAAE,WAAsB;;QAC5E,MAAM,OAAO,GAAG,MAAM,WAAI,CAAC,KAAK,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAE1D,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;SACvC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAEhC,OAAO,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,GAAG,CAAC;IAC5C,CAAC;CAAA;AAVD,8BAUC","sourcesContent":["import { Connection, PublicKey } from '@solana/web3.js';\nimport { Pool } from '../idl_codegen_jupiter_perps/accounts/Pool';\n\nexport async function getJLPApr(connection: Connection, poolAddress: PublicKey): Promise<number> {\n const jlpPool = await Pool.fetch(connection, poolAddress);\n\n if (!jlpPool) {\n throw new Error('JLP pool not found');\n }\n\n const poolApr = jlpPool.poolApr;\n\n return poolApr.feeAprBps.toNumber() / 100;\n}\n"]}