@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,259 @@
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.getAllUserMetadatasWithFilter = exports.getUserLutAddressAndSetupIxns = void 0;
13
+ const web3_js_1 = require("@solana/web3.js");
14
+ const lib_1 = require("../lib");
15
+ const farms_sdk_1 = require("@hubbleprotocol/farms-sdk");
16
+ const getUserLutAddressAndSetupIxns = (kaminoMarket, user, referrer = web3_js_1.PublicKey.default, withExtendLut = true, multiplyMints = [], leverageMints = [], repayWithCollObligation = undefined, payer = web3_js_1.PublicKey.default) => __awaiter(void 0, void 0, void 0, function* () {
17
+ const [userMetadataAddress, userMetadataState] = yield kaminoMarket.getUserMetadata(user);
18
+ const initUserMetadataIxs = [];
19
+ let userLookupTableAddress;
20
+ const referrerUserMetadata = referrer.equals(web3_js_1.PublicKey.default)
21
+ ? kaminoMarket.programId
22
+ : (yield kaminoMarket.getUserMetadata(referrer))[0];
23
+ if (!userMetadataState) {
24
+ const [createLutIx, lookupTableAddress] = yield (0, lib_1.createLookupTableIx)(kaminoMarket.getConnection(), user);
25
+ userLookupTableAddress = lookupTableAddress;
26
+ initUserMetadataIxs.push(createLutIx);
27
+ initUserMetadataIxs.push((0, lib_1.initUserMetadata)({
28
+ userLookupTable: lookupTableAddress,
29
+ }, {
30
+ owner: user,
31
+ feePayer: payer.equals(web3_js_1.PublicKey.default) ? user : payer,
32
+ userMetadata: userMetadataAddress,
33
+ referrerUserMetadata: referrerUserMetadata,
34
+ rent: web3_js_1.SYSVAR_RENT_PUBKEY,
35
+ systemProgram: web3_js_1.SystemProgram.programId,
36
+ }, kaminoMarket.programId));
37
+ }
38
+ else {
39
+ userLookupTableAddress = userMetadataState.userLookupTable;
40
+ }
41
+ const setupUserMetadataIxs = [initUserMetadataIxs];
42
+ if (withExtendLut) {
43
+ const dedupUserLutAddresses = yield getDedupUserLookupTableAddresses(kaminoMarket, userLookupTableAddress, user, referrer, multiplyMints, leverageMints, userMetadataState !== null, repayWithCollObligation);
44
+ const extendLookupTableChunkIxs = (0, lib_1.extendLookupTableIxs)(user, userLookupTableAddress, dedupUserLutAddresses, payer);
45
+ for (const extendLutIx of extendLookupTableChunkIxs) {
46
+ setupUserMetadataIxs.push([extendLutIx]);
47
+ }
48
+ }
49
+ return [userLookupTableAddress, setupUserMetadataIxs];
50
+ });
51
+ exports.getUserLutAddressAndSetupIxns = getUserLutAddressAndSetupIxns;
52
+ const getDedupUserLookupTableAddresses = (kaminoMarket, table_pk, user, referrer, multiplyMints = [], leverageMints = [], tableExists, repayWithCollObligation = undefined) => __awaiter(void 0, void 0, void 0, function* () {
53
+ var _a;
54
+ const requiredAddresses = yield getUserLookupTableAddresses(kaminoMarket, user, referrer, multiplyMints, leverageMints, repayWithCollObligation);
55
+ if (tableExists) {
56
+ const userLookupTable = (_a = (yield kaminoMarket.getConnection().getAddressLookupTable(table_pk)).value) === null || _a === void 0 ? void 0 : _a.state;
57
+ const addressesAndLogsNotInLut = requiredAddresses.filter((addressAndLogs) => userLookupTable.addresses.filter((a) => a.equals(addressAndLogs.address)).length === 0);
58
+ console.log('Addresses to be added in LUT:');
59
+ const addressNotInLut = addressesAndLogsNotInLut.map((addressAndLogs) => {
60
+ console.log(addressAndLogs.log);
61
+ return addressAndLogs.address;
62
+ });
63
+ return new lib_1.PublicKeySet(addressNotInLut).toArray();
64
+ }
65
+ else {
66
+ const addressNotInLut = requiredAddresses.map((addressAndLogs) => {
67
+ console.log(addressAndLogs.log);
68
+ return addressAndLogs.address;
69
+ });
70
+ return new lib_1.PublicKeySet(addressNotInLut).toArray();
71
+ }
72
+ });
73
+ const getUserLookupTableAddresses = (kaminoMarket, user, referrer, multiplyMints = [], leverageMints = [], repayWithCollObligation = undefined) => __awaiter(void 0, void 0, void 0, function* () {
74
+ const addresses = [];
75
+ addresses.push({ address: user, log: 'user address' });
76
+ const [userMetadataAddress] = (0, lib_1.userMetadataPda)(user, kaminoMarket.programId);
77
+ addresses.push({ address: userMetadataAddress, log: 'userMetadata address' });
78
+ const allMints = [];
79
+ multiplyMints.forEach(({ coll: collMint, debt: debtMint }) => {
80
+ allMints.push(collMint);
81
+ allMints.push(debtMint);
82
+ });
83
+ leverageMints.forEach(({ coll: collMint, debt: debtMint }) => {
84
+ allMints.push(collMint);
85
+ allMints.push(debtMint);
86
+ });
87
+ if (repayWithCollObligation) {
88
+ repayWithCollObligation.borrows.forEach((borrow) => {
89
+ allMints.push(borrow.mintAddress);
90
+ });
91
+ repayWithCollObligation.deposits.forEach((deposit) => {
92
+ allMints.push(deposit.mintAddress);
93
+ });
94
+ }
95
+ const dedupMints = [...new lib_1.PublicKeySet(allMints).toArray()];
96
+ const reserves = [];
97
+ dedupMints.forEach((mint) => {
98
+ const kaminoReserve = kaminoMarket.getReserveByMint(mint);
99
+ if (kaminoReserve) {
100
+ reserves.push(kaminoReserve);
101
+ }
102
+ });
103
+ // reserve mint ATAs
104
+ const mintsAtas = yield Promise.all(dedupMints.map((mint) => __awaiter(void 0, void 0, void 0, function* () {
105
+ return { address: yield (0, lib_1.getAssociatedTokenAddress)(mint, user), log: 'ata for mint ' + mint.toString() };
106
+ })));
107
+ addresses.push(...mintsAtas);
108
+ // ctoken ATAs
109
+ const ctokenMintsAtas = yield Promise.all(reserves.map((reserve) => __awaiter(void 0, void 0, void 0, function* () {
110
+ const ctokenMint = reserve.getCTokenMint();
111
+ return {
112
+ address: yield (0, lib_1.getAssociatedTokenAddress)(ctokenMint, user),
113
+ log: 'ctoken ata for reserve ' + reserve.address.toString(),
114
+ };
115
+ })));
116
+ addresses.push(...ctokenMintsAtas);
117
+ // farm states
118
+ const farmCollateralStates = reserves.map((reserve) => reserve.state.farmCollateral);
119
+ const farmDebtStates = reserves.map((reserve) => reserve.state.farmDebt);
120
+ const farmStates = new lib_1.PublicKeySet(farmCollateralStates.concat(farmDebtStates).filter((address) => (0, lib_1.isNotNullPubkey)(address)));
121
+ const farmStatesAdressesAndLogs = farmStates.toArray().map((address) => {
122
+ return { address: address, log: 'farm state' };
123
+ });
124
+ addresses.push(...farmStatesAdressesAndLogs);
125
+ // referrer token states
126
+ const referrerTokenStates = reserves.map((reserve) => {
127
+ return {
128
+ address: (0, lib_1.referrerTokenStatePda)(referrer, reserve.address, kaminoMarket.programId)[0],
129
+ log: 'referrer token state for reserve ' + reserve.address,
130
+ };
131
+ });
132
+ if (!referrer.equals(web3_js_1.PublicKey.default)) {
133
+ addresses.push(...referrerTokenStates);
134
+ }
135
+ const [multiplyObligations, multiplyObligationsFarmUserStates] = getMultiplyObligationAndObligationFarmStateAddresses(kaminoMarket, user, multiplyMints);
136
+ addresses.push(...multiplyObligations);
137
+ addresses.push(...multiplyObligationsFarmUserStates);
138
+ const [leverageObligations, leverageObligationsFarmUserStates] = getLeverageObligationAndObligationFarmStateAddresses(kaminoMarket, user, leverageMints);
139
+ addresses.push(...leverageObligations);
140
+ addresses.push(...leverageObligationsFarmUserStates);
141
+ if (repayWithCollObligation) {
142
+ const repayWithCollFarmUserStates = getRepayWithCollObligationFarmStateAddresses(kaminoMarket, repayWithCollObligation);
143
+ addresses.push(...repayWithCollFarmUserStates);
144
+ }
145
+ return addresses;
146
+ });
147
+ function getMultiplyObligationAndObligationFarmStateAddresses(kaminoMarket, user, mints) {
148
+ const obligationPdas = [];
149
+ const farmUserStates = [];
150
+ for (const { coll: collMint, debt: debtMint } of mints) {
151
+ const collReserve = kaminoMarket.getReserveByMint(collMint);
152
+ const debtReserve = kaminoMarket.getReserveByMint(debtMint);
153
+ const collMintString = collMint.toString();
154
+ const debtMintString = debtMint.toString();
155
+ if (collReserve && debtReserve) {
156
+ const multiplyObligation = new lib_1.MultiplyObligation(collMint, lib_1.WRAPPED_SOL_MINT, kaminoMarket.programId);
157
+ obligationPdas.push({
158
+ address: multiplyObligation.toPda(kaminoMarket.getAddress(), user),
159
+ log: 'multiply obligation coll: ' + collMintString + ' debt: ' + debtMintString,
160
+ });
161
+ if (!collReserve.state.farmCollateral.equals(web3_js_1.PublicKey.default)) {
162
+ farmUserStates.push({
163
+ address: getPdaFarmsUserState(collReserve.state.farmCollateral, multiplyObligation.toPda(kaminoMarket.getAddress(), user)),
164
+ log: 'collReserve farmState for multiply obligation coll: ' + collMintString + ' debt: ' + debtMintString,
165
+ });
166
+ }
167
+ if (!debtReserve.state.farmDebt.equals(web3_js_1.PublicKey.default)) {
168
+ farmUserStates.push({
169
+ address: getPdaFarmsUserState(debtReserve.state.farmDebt, multiplyObligation.toPda(kaminoMarket.getAddress(), user)),
170
+ log: 'debtReserve farmState for multiply obligation coll: ' + collMintString + ' debt: ' + debtMintString,
171
+ });
172
+ }
173
+ }
174
+ }
175
+ return [obligationPdas, farmUserStates];
176
+ }
177
+ function getLeverageObligationAndObligationFarmStateAddresses(kaminoMarket, user, mints) {
178
+ const obligationPdas = [];
179
+ const farmUserStates = [];
180
+ for (const { coll: collMint, debt: debtMint } of mints) {
181
+ const collReserve = kaminoMarket.getReserveByMint(collMint);
182
+ const debtReserve = kaminoMarket.getReserveByMint(debtMint);
183
+ const collMintString = collMint.toString();
184
+ const debtMintString = debtMint.toString();
185
+ if (collReserve && debtReserve) {
186
+ const leverageObligation = new lib_1.LeverageObligation(collMint, debtMint, kaminoMarket.programId);
187
+ obligationPdas.push({
188
+ address: leverageObligation.toPda(kaminoMarket.getAddress(), user),
189
+ log: 'leverage obligation coll: ' + collMintString + ' debt: ' + debtMintString,
190
+ });
191
+ if (!collReserve.state.farmCollateral.equals(web3_js_1.PublicKey.default)) {
192
+ farmUserStates.push({
193
+ address: getPdaFarmsUserState(collReserve.state.farmCollateral, leverageObligation.toPda(kaminoMarket.getAddress(), user)),
194
+ log: 'collReserve farmState for leverage obligation coll: ' + collMintString + ' debt: ' + debtMintString,
195
+ });
196
+ }
197
+ if (!debtReserve.state.farmDebt.equals(web3_js_1.PublicKey.default)) {
198
+ farmUserStates.push({
199
+ address: getPdaFarmsUserState(debtReserve.state.farmDebt, leverageObligation.toPda(kaminoMarket.getAddress(), user)),
200
+ log: 'debtReserve farmState for leverage obligation coll: ' + collMintString + ' debt: ' + debtMintString,
201
+ });
202
+ }
203
+ }
204
+ }
205
+ return [obligationPdas, farmUserStates];
206
+ }
207
+ function getRepayWithCollObligationFarmStateAddresses(kaminoMarket, obligation) {
208
+ const farmUserStates = [];
209
+ const obligationString = obligation.obligationAddress.toString();
210
+ obligation.borrows.forEach((borrow) => {
211
+ const borrowReserve = kaminoMarket.getReserveByMint(borrow.mintAddress);
212
+ if (!borrowReserve.state.farmDebt.equals(web3_js_1.PublicKey.default)) {
213
+ farmUserStates.push({
214
+ address: getPdaFarmsUserState(borrowReserve.state.farmDebt, obligation.obligationAddress),
215
+ log: 'debtReserve farmState for vanilla obligation: ' + obligationString,
216
+ });
217
+ }
218
+ });
219
+ obligation.deposits.forEach((deposit) => {
220
+ const depositReserve = kaminoMarket.getReserveByMint(deposit.mintAddress);
221
+ if (!depositReserve.state.farmCollateral.equals(web3_js_1.PublicKey.default)) {
222
+ farmUserStates.push({
223
+ address: getPdaFarmsUserState(depositReserve.state.farmCollateral, obligation.obligationAddress),
224
+ log: 'collReserve farmState for vanilla obligation' + obligationString,
225
+ });
226
+ }
227
+ });
228
+ return farmUserStates;
229
+ }
230
+ const BASE_SEED_USER_STATE = Buffer.from('user');
231
+ const getPdaFarmsUserState = (farm, obligation) => web3_js_1.PublicKey.findProgramAddressSync([BASE_SEED_USER_STATE, farm.toBytes(), obligation.toBytes()], farms_sdk_1.farmsId)[0];
232
+ function getAllUserMetadatasWithFilter(connection, filter, programId) {
233
+ return __awaiter(this, void 0, void 0, function* () {
234
+ const filters = [
235
+ {
236
+ dataSize: lib_1.UserMetadata.layout.span + 8,
237
+ },
238
+ ...filter,
239
+ ];
240
+ const userMetadatas = yield connection.getProgramAccounts(programId, {
241
+ filters,
242
+ });
243
+ return userMetadatas.map((userMetadata) => {
244
+ if (userMetadata.account === null) {
245
+ throw new Error('Invalid account');
246
+ }
247
+ if (!userMetadata.account.owner.equals(programId)) {
248
+ throw new Error("account doesn't belong to this program");
249
+ }
250
+ const userMetadataAccount = lib_1.UserMetadata.decode(userMetadata.account.data);
251
+ if (!userMetadataAccount) {
252
+ throw Error('Could not parse user metadata.');
253
+ }
254
+ return { address: userMetadata.pubkey, state: userMetadataAccount };
255
+ });
256
+ });
257
+ }
258
+ exports.getAllUserMetadatasWithFilter = getAllUserMetadatasWithFilter;
259
+ //# sourceMappingURL=userMetadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"userMetadata.js","sourceRoot":"","sources":["../../src/utils/userMetadata.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n PublicKey,\n TransactionInstruction,\n SYSVAR_RENT_PUBKEY,\n SystemProgram,\n Connection,\n GetProgramAccountsFilter,\n} from '@solana/web3.js';\nimport { KaminoMarket, KaminoObligation } from '../classes';\nimport {\n LeverageObligation,\n MultiplyObligation,\n WRAPPED_SOL_MINT,\n createLookupTableIx,\n extendLookupTableIxs,\n getAssociatedTokenAddress,\n initUserMetadata,\n referrerTokenStatePda,\n userMetadataPda,\n isNotNullPubkey,\n UserMetadata,\n PublicKeySet,\n} from '../lib';\nimport { farmsId } from '@hubbleprotocol/farms-sdk';\nimport { KaminoReserve } from '../classes/reserve';\n\nexport type KaminoUserMetadata = {\n address: PublicKey;\n state: UserMetadata;\n};\n\nexport const getUserLutAddressAndSetupIxns = async (\n kaminoMarket: KaminoMarket,\n user: PublicKey,\n referrer: PublicKey = PublicKey.default,\n withExtendLut: boolean = true,\n multiplyMints: { coll: PublicKey; debt: PublicKey }[] = [],\n leverageMints: { coll: PublicKey; debt: PublicKey }[] = [],\n repayWithCollObligation: KaminoObligation | undefined = undefined,\n payer: PublicKey = PublicKey.default\n): Promise<[PublicKey, TransactionInstruction[][]]> => {\n const [userMetadataAddress, userMetadataState] = await kaminoMarket.getUserMetadata(user);\n const initUserMetadataIxs: TransactionInstruction[] = [];\n let userLookupTableAddress: PublicKey;\n\n const referrerUserMetadata = referrer.equals(PublicKey.default)\n ? kaminoMarket.programId\n : (await kaminoMarket.getUserMetadata(referrer))[0];\n\n if (!userMetadataState) {\n const [createLutIx, lookupTableAddress] = await createLookupTableIx(kaminoMarket.getConnection(), user);\n userLookupTableAddress = lookupTableAddress;\n initUserMetadataIxs.push(createLutIx);\n initUserMetadataIxs.push(\n initUserMetadata(\n {\n userLookupTable: lookupTableAddress,\n },\n {\n owner: user,\n feePayer: payer.equals(PublicKey.default) ? user : payer,\n userMetadata: userMetadataAddress,\n referrerUserMetadata: referrerUserMetadata,\n rent: SYSVAR_RENT_PUBKEY,\n systemProgram: SystemProgram.programId,\n },\n kaminoMarket.programId\n )\n );\n } else {\n userLookupTableAddress = userMetadataState.userLookupTable;\n }\n\n const setupUserMetadataIxs = [initUserMetadataIxs];\n\n if (withExtendLut) {\n const dedupUserLutAddresses = await getDedupUserLookupTableAddresses(\n kaminoMarket,\n userLookupTableAddress,\n user,\n referrer,\n multiplyMints,\n leverageMints,\n userMetadataState !== null,\n repayWithCollObligation\n );\n\n const extendLookupTableChunkIxs = extendLookupTableIxs(user, userLookupTableAddress, dedupUserLutAddresses, payer);\n\n for (const extendLutIx of extendLookupTableChunkIxs) {\n setupUserMetadataIxs.push([extendLutIx]);\n }\n }\n\n return [userLookupTableAddress, setupUserMetadataIxs];\n};\n\nconst getDedupUserLookupTableAddresses = async (\n kaminoMarket: KaminoMarket,\n table_pk: PublicKey,\n user: PublicKey,\n referrer: PublicKey,\n multiplyMints: { coll: PublicKey; debt: PublicKey }[] = [],\n leverageMints: { coll: PublicKey; debt: PublicKey }[] = [],\n tableExists: boolean,\n repayWithCollObligation: KaminoObligation | undefined = undefined\n): Promise<PublicKey[]> => {\n const requiredAddresses = await getUserLookupTableAddresses(\n kaminoMarket,\n user,\n referrer,\n multiplyMints,\n leverageMints,\n repayWithCollObligation\n );\n\n if (tableExists) {\n const userLookupTable = (await kaminoMarket.getConnection().getAddressLookupTable(table_pk)).value?.state!;\n const addressesAndLogsNotInLut = requiredAddresses.filter(\n (addressAndLogs) => userLookupTable.addresses.filter((a) => a.equals(addressAndLogs.address)).length === 0\n );\n console.log('Addresses to be added in LUT:');\n const addressNotInLut = addressesAndLogsNotInLut.map((addressAndLogs) => {\n console.log(addressAndLogs.log);\n return addressAndLogs.address;\n });\n return new PublicKeySet(addressNotInLut).toArray();\n } else {\n const addressNotInLut = requiredAddresses.map((addressAndLogs) => {\n console.log(addressAndLogs.log);\n return addressAndLogs.address;\n });\n return new PublicKeySet(addressNotInLut).toArray();\n }\n};\n\nconst getUserLookupTableAddresses = async (\n kaminoMarket: KaminoMarket,\n user: PublicKey,\n referrer: PublicKey,\n multiplyMints: { coll: PublicKey; debt: PublicKey }[] = [],\n leverageMints: { coll: PublicKey; debt: PublicKey }[] = [],\n repayWithCollObligation: KaminoObligation | undefined = undefined\n): Promise<{ address: PublicKey; log: string }[]> => {\n const addresses: { address: PublicKey; log: string }[] = [];\n addresses.push({ address: user, log: 'user address' });\n const [userMetadataAddress] = userMetadataPda(user, kaminoMarket.programId);\n addresses.push({ address: userMetadataAddress, log: 'userMetadata address' });\n\n const allMints: PublicKey[] = [];\n multiplyMints.forEach(({ coll: collMint, debt: debtMint }) => {\n allMints.push(collMint);\n allMints.push(debtMint);\n });\n leverageMints.forEach(({ coll: collMint, debt: debtMint }) => {\n allMints.push(collMint);\n allMints.push(debtMint);\n });\n\n if (repayWithCollObligation) {\n repayWithCollObligation.borrows.forEach((borrow) => {\n allMints.push(borrow.mintAddress);\n });\n\n repayWithCollObligation.deposits.forEach((deposit) => {\n allMints.push(deposit.mintAddress);\n });\n }\n\n const dedupMints = [...new PublicKeySet(allMints).toArray()];\n const reserves: KaminoReserve[] = [];\n dedupMints.forEach((mint) => {\n const kaminoReserve = kaminoMarket.getReserveByMint(mint);\n if (kaminoReserve) {\n reserves.push(kaminoReserve);\n }\n });\n\n // reserve mint ATAs\n const mintsAtas: { address: PublicKey; log: string }[] = await Promise.all(\n dedupMints.map(async (mint) => {\n return { address: await getAssociatedTokenAddress(mint, user), log: 'ata for mint ' + mint.toString() };\n })\n );\n addresses.push(...mintsAtas);\n // ctoken ATAs\n const ctokenMintsAtas: { address: PublicKey; log: string }[] = await Promise.all(\n reserves.map(async (reserve) => {\n const ctokenMint = reserve.getCTokenMint();\n return {\n address: await getAssociatedTokenAddress(ctokenMint, user),\n log: 'ctoken ata for reserve ' + reserve.address.toString(),\n };\n })\n );\n addresses.push(...ctokenMintsAtas);\n // farm states\n const farmCollateralStates: PublicKey[] = reserves.map((reserve) => reserve.state.farmCollateral);\n const farmDebtStates: PublicKey[] = reserves.map((reserve) => reserve.state.farmDebt);\n const farmStates = new PublicKeySet(\n farmCollateralStates.concat(farmDebtStates).filter((address) => isNotNullPubkey(address))\n );\n const farmStatesAdressesAndLogs = farmStates.toArray().map((address) => {\n return { address: address, log: 'farm state' };\n });\n addresses.push(...farmStatesAdressesAndLogs);\n // referrer token states\n const referrerTokenStates: { address: PublicKey; log: string }[] = reserves.map((reserve) => {\n return {\n address: referrerTokenStatePda(referrer, reserve.address, kaminoMarket.programId)[0],\n log: 'referrer token state for reserve ' + reserve.address,\n };\n });\n if (!referrer.equals(PublicKey.default)) {\n addresses.push(...referrerTokenStates);\n }\n\n const [multiplyObligations, multiplyObligationsFarmUserStates] = getMultiplyObligationAndObligationFarmStateAddresses(\n kaminoMarket,\n user,\n multiplyMints\n );\n\n addresses.push(...multiplyObligations);\n addresses.push(...multiplyObligationsFarmUserStates);\n\n const [leverageObligations, leverageObligationsFarmUserStates] = getLeverageObligationAndObligationFarmStateAddresses(\n kaminoMarket,\n user,\n leverageMints\n );\n\n addresses.push(...leverageObligations);\n addresses.push(...leverageObligationsFarmUserStates);\n\n if (repayWithCollObligation) {\n const repayWithCollFarmUserStates = getRepayWithCollObligationFarmStateAddresses(\n kaminoMarket,\n repayWithCollObligation\n );\n addresses.push(...repayWithCollFarmUserStates);\n }\n\n return addresses;\n};\n\nfunction getMultiplyObligationAndObligationFarmStateAddresses(\n kaminoMarket: KaminoMarket,\n user: PublicKey,\n mints: { coll: PublicKey; debt: PublicKey }[]\n): [{ address: PublicKey; log: string }[], { address: PublicKey; log: string }[]] {\n const obligationPdas: { address: PublicKey; log: string }[] = [];\n const farmUserStates: { address: PublicKey; log: string }[] = [];\n\n for (const { coll: collMint, debt: debtMint } of mints) {\n const collReserve = kaminoMarket.getReserveByMint(collMint);\n const debtReserve = kaminoMarket.getReserveByMint(debtMint);\n const collMintString = collMint.toString();\n const debtMintString = debtMint.toString();\n if (collReserve && debtReserve) {\n const multiplyObligation = new MultiplyObligation(collMint, WRAPPED_SOL_MINT, kaminoMarket.programId);\n obligationPdas.push({\n address: multiplyObligation.toPda(kaminoMarket.getAddress(), user),\n log: 'multiply obligation coll: ' + collMintString + ' debt: ' + debtMintString,\n });\n if (!collReserve.state.farmCollateral.equals(PublicKey.default)) {\n farmUserStates.push({\n address: getPdaFarmsUserState(\n collReserve.state.farmCollateral!,\n multiplyObligation.toPda(kaminoMarket.getAddress(), user)\n ),\n log: 'collReserve farmState for multiply obligation coll: ' + collMintString + ' debt: ' + debtMintString,\n });\n }\n if (!debtReserve.state.farmDebt.equals(PublicKey.default)) {\n farmUserStates.push({\n address: getPdaFarmsUserState(\n debtReserve.state.farmDebt!,\n multiplyObligation.toPda(kaminoMarket.getAddress(), user)\n ),\n log: 'debtReserve farmState for multiply obligation coll: ' + collMintString + ' debt: ' + debtMintString,\n });\n }\n }\n }\n\n return [obligationPdas, farmUserStates];\n}\n\nfunction getLeverageObligationAndObligationFarmStateAddresses(\n kaminoMarket: KaminoMarket,\n user: PublicKey,\n mints: { coll: PublicKey; debt: PublicKey }[]\n): [{ address: PublicKey; log: string }[], { address: PublicKey; log: string }[]] {\n const obligationPdas: { address: PublicKey; log: string }[] = [];\n const farmUserStates: { address: PublicKey; log: string }[] = [];\n\n for (const { coll: collMint, debt: debtMint } of mints) {\n const collReserve = kaminoMarket.getReserveByMint(collMint);\n const debtReserve = kaminoMarket.getReserveByMint(debtMint);\n const collMintString = collMint.toString();\n const debtMintString = debtMint.toString();\n if (collReserve && debtReserve) {\n const leverageObligation = new LeverageObligation(collMint, debtMint, kaminoMarket.programId);\n obligationPdas.push({\n address: leverageObligation.toPda(kaminoMarket.getAddress(), user),\n log: 'leverage obligation coll: ' + collMintString + ' debt: ' + debtMintString,\n });\n if (!collReserve.state.farmCollateral.equals(PublicKey.default)) {\n farmUserStates.push({\n address: getPdaFarmsUserState(\n collReserve.state.farmCollateral!,\n leverageObligation.toPda(kaminoMarket.getAddress(), user)\n ),\n log: 'collReserve farmState for leverage obligation coll: ' + collMintString + ' debt: ' + debtMintString,\n });\n }\n if (!debtReserve.state.farmDebt.equals(PublicKey.default)) {\n farmUserStates.push({\n address: getPdaFarmsUserState(\n debtReserve.state.farmDebt!,\n leverageObligation.toPda(kaminoMarket.getAddress(), user)\n ),\n log: 'debtReserve farmState for leverage obligation coll: ' + collMintString + ' debt: ' + debtMintString,\n });\n }\n }\n }\n\n return [obligationPdas, farmUserStates];\n}\n\nfunction getRepayWithCollObligationFarmStateAddresses(\n kaminoMarket: KaminoMarket,\n obligation: KaminoObligation\n): { address: PublicKey; log: string }[] {\n const farmUserStates: { address: PublicKey; log: string }[] = [];\n const obligationString = obligation.obligationAddress.toString();\n\n obligation.borrows.forEach((borrow) => {\n const borrowReserve = kaminoMarket.getReserveByMint(borrow.mintAddress)!;\n if (!borrowReserve.state.farmDebt.equals(PublicKey.default)) {\n farmUserStates.push({\n address: getPdaFarmsUserState(borrowReserve.state.farmDebt!, obligation.obligationAddress),\n log: 'debtReserve farmState for vanilla obligation: ' + obligationString,\n });\n }\n });\n\n obligation.deposits.forEach((deposit) => {\n const depositReserve = kaminoMarket.getReserveByMint(deposit.mintAddress)!;\n if (!depositReserve.state.farmCollateral.equals(PublicKey.default)) {\n farmUserStates.push({\n address: getPdaFarmsUserState(depositReserve.state.farmCollateral!, obligation.obligationAddress),\n log: 'collReserve farmState for vanilla obligation' + obligationString,\n });\n }\n });\n\n return farmUserStates;\n}\n\nconst BASE_SEED_USER_STATE = Buffer.from('user');\n\nconst getPdaFarmsUserState = (farm: PublicKey, obligation: PublicKey) =>\n PublicKey.findProgramAddressSync([BASE_SEED_USER_STATE, farm.toBytes(), obligation.toBytes()], farmsId)[0];\n\nexport async function getAllUserMetadatasWithFilter(\n connection: Connection,\n filter: GetProgramAccountsFilter[],\n programId: PublicKey\n): Promise<KaminoUserMetadata[]> {\n const filters = [\n {\n dataSize: UserMetadata.layout.span + 8,\n },\n ...filter,\n ];\n\n const userMetadatas = await connection.getProgramAccounts(programId, {\n filters,\n });\n\n return userMetadatas.map((userMetadata) => {\n if (userMetadata.account === null) {\n throw new Error('Invalid account');\n }\n if (!userMetadata.account.owner.equals(programId)) {\n throw new Error(\"account doesn't belong to this program\");\n }\n\n const userMetadataAccount = UserMetadata.decode(userMetadata.account.data);\n\n if (!userMetadataAccount) {\n throw Error('Could not parse user metadata.');\n }\n\n return { address: userMetadata.pubkey, state: userMetadataAccount };\n });\n}\n"]}
package/package.json ADDED
@@ -0,0 +1,94 @@
1
+ {
2
+ "name": "@kamino-finance/klend-sdk",
3
+ "version": "2.10.6",
4
+ "description": "Typescript SDK for interacting with the Kamino Lending (klend) protocol",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+github.com:Kamino-Finance/klend-sdk.git"
8
+ },
9
+ "author": "Kamino Finance",
10
+ "homepage": "https://kamino.finance",
11
+ "bugs": {
12
+ "url": "https://github.com/Kamino-Finance/klend-sdk/issues"
13
+ },
14
+ "keywords": [
15
+ "solana",
16
+ "anchor",
17
+ "klend",
18
+ "kamino"
19
+ ],
20
+ "main": "dist/index.js",
21
+ "module": "dist/index.js",
22
+ "types": "dist/index.d.ts",
23
+ "files": [
24
+ "dist"
25
+ ],
26
+ "license": "MIT",
27
+ "scripts": {
28
+ "docs": "typedoc",
29
+ "prepublish": "yarn build",
30
+ "build": "rm -rf dist/; tsc",
31
+ "test": "npx ts-mocha tests/**/*.test.ts --exit",
32
+ "watch": "tsc --watch",
33
+ "coverage": "jest --coverage",
34
+ "lint": "yarn prettier --check .; yarn eslint .",
35
+ "lint:fix": "yarn prettier --write .; yarn eslint . --fix",
36
+ "codegen": "yarn anchor-client-gen src/idl.json ./src/idl_codegen/ --program-id KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD",
37
+ "codegen-jupiter-perps": "yarn anchor-client-gen src/jupiter_perps_idl.json ./src/idl_codegen_jupiter_perps/ --program-id PERPHjGBqRHArX4DySjwM6UJHiR3sWAatqfdBS2qQJu",
38
+ "start-validator": "solana-test-validator $(./deps/test-validator-params.sh)",
39
+ "start-validator-and-test": "yarn start-server-and-test 'yarn start-validator' http://127.0.0.1:8899/health test",
40
+ "dump-programs": "./deps/dump-from-mainnet.sh"
41
+ },
42
+ "dependencies": {
43
+ "@coral-xyz/anchor": "^0.28.0",
44
+ "@coral-xyz/borsh": "^0.28.0",
45
+ "@hubbleprotocol/farms-sdk": "^0.3.7",
46
+ "@hubbleprotocol/kamino-sdk": "^3.0.16",
47
+ "@hubbleprotocol/scope-sdk": "^3.0.6",
48
+ "@pythnetwork/client": "^2.5.1",
49
+ "@solana/buffer-layout": "^4.0.0",
50
+ "@solana/spl-token": "^0.1.8",
51
+ "@solana/web3.js": "^1.87.6",
52
+ "@switchboard-xyz/sbv2-lite": "^0.1.0",
53
+ "bn.js": "^5.2.1",
54
+ "buffer": "^6.0.3",
55
+ "buffer-layout": "^1.2.2",
56
+ "commander": "^9.3.0",
57
+ "decimal.js": "^10.4.3",
58
+ "exponential-backoff": "^3.1.1"
59
+ },
60
+ "devDependencies": {
61
+ "@jup-ag/core": "=3.0.0-beta.18",
62
+ "@orca-so/sdk": "^1.2.25",
63
+ "@orca-so/whirlpool-sdk": "=0.4.2",
64
+ "@raydium-io/raydium-sdk": "=1.3.1-beta.5",
65
+ "@types/bn.js": "^5.1.1",
66
+ "@types/bs58": "^4.0.1",
67
+ "@types/chai": "^4.3.5",
68
+ "@types/jest": "^27.0.3",
69
+ "@types/mocha": "^10.0.1",
70
+ "@types/node-fetch": "^2.6.7",
71
+ "@typescript-eslint/eslint-plugin": "^5.5.0",
72
+ "@typescript-eslint/parser": "^5.5.0",
73
+ "anchor-client-gen": "^0.28.1",
74
+ "chai": "^4.3.7",
75
+ "chai-bignumber": "^3.1.0",
76
+ "eslint": "^8.4.0",
77
+ "eslint-config-airbnb-base": "^15.0.0",
78
+ "eslint-config-airbnb-typescript": "^16.1.0",
79
+ "eslint-config-prettier": "^8.3.0",
80
+ "eslint-plugin-import": "^2.25.3",
81
+ "eslint-plugin-react": "^7.27.1",
82
+ "jest": "^27.4.3",
83
+ "jest-fetch-mock": "^3.0.3",
84
+ "mocha": "^10.2.0",
85
+ "prettier": "^2.8.8",
86
+ "start-server-and-test": "^2.0.0",
87
+ "ts-jest": "^28.0.7",
88
+ "ts-mocha": "^10.0.0",
89
+ "ts-node": "^10.9.1",
90
+ "typedoc": "^0.22.10",
91
+ "typescript": "^4.9.5",
92
+ "typescript-eslint": "^0.0.1-alpha.0"
93
+ }
94
+ }