@townsq/mm-sdk 1.0.1

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 (390) hide show
  1. package/README.md +95 -0
  2. package/dist/chains/evm/common/constant/abi/arbitrum-node-interface-abi.d.ts +25 -0
  3. package/dist/chains/evm/common/constant/abi/arbitrum-node-interface-abi.js +18 -0
  4. package/dist/chains/evm/common/constant/abi/arbitrum-node-interface-abi.js.map +1 -0
  5. package/dist/chains/evm/common/constant/abi/bridge-router-abi.d.ts +1030 -0
  6. package/dist/chains/evm/common/constant/abi/bridge-router-abi.js +794 -0
  7. package/dist/chains/evm/common/constant/abi/bridge-router-abi.js.map +1 -0
  8. package/dist/chains/evm/common/constant/abi/ccip-data-adapter-abi.d.ts +796 -0
  9. package/dist/chains/evm/common/constant/abi/ccip-data-adapter-abi.js +622 -0
  10. package/dist/chains/evm/common/constant/abi/ccip-data-adapter-abi.js.map +1 -0
  11. package/dist/chains/evm/common/constant/abi/erc-20-abi.d.ts +235 -0
  12. package/dist/chains/evm/common/constant/abi/erc-20-abi.js +157 -0
  13. package/dist/chains/evm/common/constant/abi/erc-20-abi.js.map +1 -0
  14. package/dist/chains/evm/common/constant/abi/wormhole-data-adapter-abi.d.ts +821 -0
  15. package/dist/chains/evm/common/constant/abi/wormhole-data-adapter-abi.js +645 -0
  16. package/dist/chains/evm/common/constant/abi/wormhole-data-adapter-abi.js.map +1 -0
  17. package/dist/chains/evm/common/constant/abi/wormhole-relayer-abi.d.ts +783 -0
  18. package/dist/chains/evm/common/constant/abi/wormhole-relayer-abi.js +501 -0
  19. package/dist/chains/evm/common/constant/abi/wormhole-relayer-abi.js.map +1 -0
  20. package/dist/chains/evm/common/constant/chain.d.ts +128 -0
  21. package/dist/chains/evm/common/constant/chain.js +62 -0
  22. package/dist/chains/evm/common/constant/chain.js.map +1 -0
  23. package/dist/chains/evm/common/constant/contract.d.ts +9 -0
  24. package/dist/chains/evm/common/constant/contract.js +13 -0
  25. package/dist/chains/evm/common/constant/contract.js.map +1 -0
  26. package/dist/chains/evm/common/constant/tokens.d.ts +6 -0
  27. package/dist/chains/evm/common/constant/tokens.js +21 -0
  28. package/dist/chains/evm/common/constant/tokens.js.map +1 -0
  29. package/dist/chains/evm/common/types/chain.d.ts +9 -0
  30. package/dist/chains/evm/common/types/chain.js +2 -0
  31. package/dist/chains/evm/common/types/chain.js.map +1 -0
  32. package/dist/chains/evm/common/types/contract.d.ts +8 -0
  33. package/dist/chains/evm/common/types/contract.js +2 -0
  34. package/dist/chains/evm/common/types/contract.js.map +1 -0
  35. package/dist/chains/evm/common/types/gmp.d.ts +37 -0
  36. package/dist/chains/evm/common/types/gmp.js +2 -0
  37. package/dist/chains/evm/common/types/gmp.js.map +1 -0
  38. package/dist/chains/evm/common/types/module.d.ts +90 -0
  39. package/dist/chains/evm/common/types/module.js +2 -0
  40. package/dist/chains/evm/common/types/module.js.map +1 -0
  41. package/dist/chains/evm/common/types/token.d.ts +28 -0
  42. package/dist/chains/evm/common/types/token.js +2 -0
  43. package/dist/chains/evm/common/types/token.js.map +1 -0
  44. package/dist/chains/evm/common/utils/chain.d.ts +7 -0
  45. package/dist/chains/evm/common/utils/chain.js +24 -0
  46. package/dist/chains/evm/common/utils/chain.js.map +1 -0
  47. package/dist/chains/evm/common/utils/contract.d.ts +7387 -0
  48. package/dist/chains/evm/common/utils/contract.js +67 -0
  49. package/dist/chains/evm/common/utils/contract.js.map +1 -0
  50. package/dist/chains/evm/common/utils/gmp.d.ts +7 -0
  51. package/dist/chains/evm/common/utils/gmp.js +32 -0
  52. package/dist/chains/evm/common/utils/gmp.js.map +1 -0
  53. package/dist/chains/evm/common/utils/message.d.ts +21 -0
  54. package/dist/chains/evm/common/utils/message.js +426 -0
  55. package/dist/chains/evm/common/utils/message.js.map +1 -0
  56. package/dist/chains/evm/common/utils/provider.d.ts +5 -0
  57. package/dist/chains/evm/common/utils/provider.js +24 -0
  58. package/dist/chains/evm/common/utils/provider.js.map +1 -0
  59. package/dist/chains/evm/common/utils/tokens.d.ts +11 -0
  60. package/dist/chains/evm/common/utils/tokens.js +58 -0
  61. package/dist/chains/evm/common/utils/tokens.js.map +1 -0
  62. package/dist/chains/evm/hub/constants/abi/account-manager-abi.d.ts +945 -0
  63. package/dist/chains/evm/hub/constants/abi/account-manager-abi.js +709 -0
  64. package/dist/chains/evm/hub/constants/abi/account-manager-abi.js.map +1 -0
  65. package/dist/chains/evm/hub/constants/abi/bridge-router-hub-abi.d.ts +1062 -0
  66. package/dist/chains/evm/hub/constants/abi/bridge-router-hub-abi.js +816 -0
  67. package/dist/chains/evm/hub/constants/abi/bridge-router-hub-abi.js.map +1 -0
  68. package/dist/chains/evm/hub/constants/abi/hub-abi.d.ts +344 -0
  69. package/dist/chains/evm/hub/constants/abi/hub-abi.js +229 -0
  70. package/dist/chains/evm/hub/constants/abi/hub-abi.js.map +1 -0
  71. package/dist/chains/evm/hub/constants/abi/hub-pool-abi.d.ts +1999 -0
  72. package/dist/chains/evm/hub/constants/abi/hub-pool-abi.js +1558 -0
  73. package/dist/chains/evm/hub/constants/abi/hub-pool-abi.js.map +1 -0
  74. package/dist/chains/evm/hub/constants/abi/hub-rewards-v1-abi.d.ts +850 -0
  75. package/dist/chains/evm/hub/constants/abi/hub-rewards-v1-abi.js +649 -0
  76. package/dist/chains/evm/hub/constants/abi/hub-rewards-v1-abi.js.map +1 -0
  77. package/dist/chains/evm/hub/constants/abi/hub-rewards-v2-abi.d.ts +1213 -0
  78. package/dist/chains/evm/hub/constants/abi/hub-rewards-v2-abi.js +890 -0
  79. package/dist/chains/evm/hub/constants/abi/hub-rewards-v2-abi.js.map +1 -0
  80. package/dist/chains/evm/hub/constants/abi/loan-manager-abi.d.ts +1573 -0
  81. package/dist/chains/evm/hub/constants/abi/loan-manager-abi.js +1055 -0
  82. package/dist/chains/evm/hub/constants/abi/loan-manager-abi.js.map +1 -0
  83. package/dist/chains/evm/hub/constants/abi/node-manager-abi.d.ts +269 -0
  84. package/dist/chains/evm/hub/constants/abi/node-manager-abi.js +228 -0
  85. package/dist/chains/evm/hub/constants/abi/node-manager-abi.js.map +1 -0
  86. package/dist/chains/evm/hub/constants/abi/oracle-manager-abi.d.ts +495 -0
  87. package/dist/chains/evm/hub/constants/abi/oracle-manager-abi.js +391 -0
  88. package/dist/chains/evm/hub/constants/abi/oracle-manager-abi.js.map +1 -0
  89. package/dist/chains/evm/hub/constants/chain.d.ts +3 -0
  90. package/dist/chains/evm/hub/constants/chain.js +242 -0
  91. package/dist/chains/evm/hub/constants/chain.js.map +1 -0
  92. package/dist/chains/evm/hub/modules/index.d.ts +5 -0
  93. package/dist/chains/evm/hub/modules/index.js +6 -0
  94. package/dist/chains/evm/hub/modules/index.js.map +1 -0
  95. package/dist/chains/evm/hub/modules/ts-hub-account.d.ts +8 -0
  96. package/dist/chains/evm/hub/modules/ts-hub-account.js +75 -0
  97. package/dist/chains/evm/hub/modules/ts-hub-account.js.map +1 -0
  98. package/dist/chains/evm/hub/modules/ts-hub-gmp.d.ts +18 -0
  99. package/dist/chains/evm/hub/modules/ts-hub-gmp.js +98 -0
  100. package/dist/chains/evm/hub/modules/ts-hub-gmp.js.map +1 -0
  101. package/dist/chains/evm/hub/modules/ts-hub-loan.d.ts +27 -0
  102. package/dist/chains/evm/hub/modules/ts-hub-loan.js +484 -0
  103. package/dist/chains/evm/hub/modules/ts-hub-loan.js.map +1 -0
  104. package/dist/chains/evm/hub/modules/ts-hub-oracle.d.ts +8 -0
  105. package/dist/chains/evm/hub/modules/ts-hub-oracle.js +58 -0
  106. package/dist/chains/evm/hub/modules/ts-hub-oracle.js.map +1 -0
  107. package/dist/chains/evm/hub/modules/ts-hub-pool.d.ts +5 -0
  108. package/dist/chains/evm/hub/modules/ts-hub-pool.js +138 -0
  109. package/dist/chains/evm/hub/modules/ts-hub-pool.js.map +1 -0
  110. package/dist/chains/evm/hub/types/account.d.ts +23 -0
  111. package/dist/chains/evm/hub/types/account.js +2 -0
  112. package/dist/chains/evm/hub/types/account.js.map +1 -0
  113. package/dist/chains/evm/hub/types/chain.d.ts +20 -0
  114. package/dist/chains/evm/hub/types/chain.js +2 -0
  115. package/dist/chains/evm/hub/types/chain.js.map +1 -0
  116. package/dist/chains/evm/hub/types/loan.d.ts +148 -0
  117. package/dist/chains/evm/hub/types/loan.js +9 -0
  118. package/dist/chains/evm/hub/types/loan.js.map +1 -0
  119. package/dist/chains/evm/hub/types/oracle.d.ts +19 -0
  120. package/dist/chains/evm/hub/types/oracle.js +2 -0
  121. package/dist/chains/evm/hub/types/oracle.js.map +1 -0
  122. package/dist/chains/evm/hub/types/pool.d.ts +66 -0
  123. package/dist/chains/evm/hub/types/pool.js +2 -0
  124. package/dist/chains/evm/hub/types/pool.js.map +1 -0
  125. package/dist/chains/evm/hub/types/token.d.ts +9 -0
  126. package/dist/chains/evm/hub/types/token.js +2 -0
  127. package/dist/chains/evm/hub/types/token.js.map +1 -0
  128. package/dist/chains/evm/hub/utils/chain.d.ts +15 -0
  129. package/dist/chains/evm/hub/utils/chain.js +37 -0
  130. package/dist/chains/evm/hub/utils/chain.js.map +1 -0
  131. package/dist/chains/evm/hub/utils/contract.d.ts +26 -0
  132. package/dist/chains/evm/hub/utils/contract.js +76 -0
  133. package/dist/chains/evm/hub/utils/contract.js.map +1 -0
  134. package/dist/chains/evm/hub/utils/events.d.ts +23 -0
  135. package/dist/chains/evm/hub/utils/events.js +100 -0
  136. package/dist/chains/evm/hub/utils/events.js.map +1 -0
  137. package/dist/chains/evm/hub/utils/loan.d.ts +4 -0
  138. package/dist/chains/evm/hub/utils/loan.js +37 -0
  139. package/dist/chains/evm/hub/utils/loan.js.map +1 -0
  140. package/dist/chains/evm/spoke/constants/abi/bridge-router-spoke-abi.d.ts +1044 -0
  141. package/dist/chains/evm/spoke/constants/abi/bridge-router-spoke-abi.js +806 -0
  142. package/dist/chains/evm/spoke/constants/abi/bridge-router-spoke-abi.js.map +1 -0
  143. package/dist/chains/evm/spoke/constants/abi/spoke-common-abi.d.ts +1152 -0
  144. package/dist/chains/evm/spoke/constants/abi/spoke-common-abi.js +735 -0
  145. package/dist/chains/evm/spoke/constants/abi/spoke-common-abi.js.map +1 -0
  146. package/dist/chains/evm/spoke/constants/abi/spoke-rewards-v2-common-abi.d.ts +697 -0
  147. package/dist/chains/evm/spoke/constants/abi/spoke-rewards-v2-common-abi.js +501 -0
  148. package/dist/chains/evm/spoke/constants/abi/spoke-rewards-v2-common-abi.js.map +1 -0
  149. package/dist/chains/evm/spoke/constants/abi/spoke-token-abi.d.ts +986 -0
  150. package/dist/chains/evm/spoke/constants/abi/spoke-token-abi.js +705 -0
  151. package/dist/chains/evm/spoke/constants/abi/spoke-token-abi.js.map +1 -0
  152. package/dist/chains/evm/spoke/modules/index.d.ts +3 -0
  153. package/dist/chains/evm/spoke/modules/index.js +4 -0
  154. package/dist/chains/evm/spoke/modules/index.js.map +1 -0
  155. package/dist/chains/evm/spoke/modules/ts-evm-account.d.ts +18 -0
  156. package/dist/chains/evm/spoke/modules/ts-evm-account.js +141 -0
  157. package/dist/chains/evm/spoke/modules/ts-evm-account.js.map +1 -0
  158. package/dist/chains/evm/spoke/modules/ts-evm-gmp.d.ts +20 -0
  159. package/dist/chains/evm/spoke/modules/ts-evm-gmp.js +163 -0
  160. package/dist/chains/evm/spoke/modules/ts-evm-gmp.js.map +1 -0
  161. package/dist/chains/evm/spoke/modules/ts-evm-loan.d.ts +38 -0
  162. package/dist/chains/evm/spoke/modules/ts-evm-loan.js +461 -0
  163. package/dist/chains/evm/spoke/modules/ts-evm-loan.js.map +1 -0
  164. package/dist/chains/evm/spoke/types/pool.d.ts +7 -0
  165. package/dist/chains/evm/spoke/types/pool.js +2 -0
  166. package/dist/chains/evm/spoke/types/pool.js.map +1 -0
  167. package/dist/chains/evm/spoke/utils/contract.d.ts +18 -0
  168. package/dist/chains/evm/spoke/utils/contract.js +46 -0
  169. package/dist/chains/evm/spoke/utils/contract.js.map +1 -0
  170. package/dist/common/constants/adapter.d.ts +2 -0
  171. package/dist/common/constants/adapter.js +6 -0
  172. package/dist/common/constants/adapter.js.map +1 -0
  173. package/dist/common/constants/byte.d.ts +6 -0
  174. package/dist/common/constants/byte.js +7 -0
  175. package/dist/common/constants/byte.js.map +1 -0
  176. package/dist/common/constants/chain.d.ts +10 -0
  177. package/dist/common/constants/chain.js +224 -0
  178. package/dist/common/constants/chain.js.map +1 -0
  179. package/dist/common/constants/gmp.d.ts +3 -0
  180. package/dist/common/constants/gmp.js +10 -0
  181. package/dist/common/constants/gmp.js.map +1 -0
  182. package/dist/common/constants/lending.d.ts +2 -0
  183. package/dist/common/constants/lending.js +4 -0
  184. package/dist/common/constants/lending.js.map +1 -0
  185. package/dist/common/constants/message.d.ts +9 -0
  186. package/dist/common/constants/message.js +23 -0
  187. package/dist/common/constants/message.js.map +1 -0
  188. package/dist/common/constants/pool.d.ts +14 -0
  189. package/dist/common/constants/pool.js +24 -0
  190. package/dist/common/constants/pool.js.map +1 -0
  191. package/dist/common/types/adapter.d.ts +30 -0
  192. package/dist/common/types/adapter.js +7 -0
  193. package/dist/common/types/adapter.js.map +1 -0
  194. package/dist/common/types/address.d.ts +9 -0
  195. package/dist/common/types/address.js +2 -0
  196. package/dist/common/types/address.js.map +1 -0
  197. package/dist/common/types/brand.d.ts +6 -0
  198. package/dist/common/types/brand.js +2 -0
  199. package/dist/common/types/brand.js.map +1 -0
  200. package/dist/common/types/chain.d.ts +29 -0
  201. package/dist/common/types/chain.js +9 -0
  202. package/dist/common/types/chain.js.map +1 -0
  203. package/dist/common/types/core.d.ts +28 -0
  204. package/dist/common/types/core.js +2 -0
  205. package/dist/common/types/core.js.map +1 -0
  206. package/dist/common/types/gmp.d.ts +15 -0
  207. package/dist/common/types/gmp.js +6 -0
  208. package/dist/common/types/gmp.js.map +1 -0
  209. package/dist/common/types/lending.d.ts +20 -0
  210. package/dist/common/types/lending.js +13 -0
  211. package/dist/common/types/lending.js.map +1 -0
  212. package/dist/common/types/message.d.ts +280 -0
  213. package/dist/common/types/message.js +32 -0
  214. package/dist/common/types/message.js.map +1 -0
  215. package/dist/common/types/module.d.ts +20 -0
  216. package/dist/common/types/module.js +2 -0
  217. package/dist/common/types/module.js.map +1 -0
  218. package/dist/common/types/token.d.ts +49 -0
  219. package/dist/common/types/token.js +24 -0
  220. package/dist/common/types/token.js.map +1 -0
  221. package/dist/common/utils/adapter.d.ts +17 -0
  222. package/dist/common/utils/adapter.js +98 -0
  223. package/dist/common/utils/adapter.js.map +1 -0
  224. package/dist/common/utils/address.d.ts +6 -0
  225. package/dist/common/utils/address.js +32 -0
  226. package/dist/common/utils/address.js.map +1 -0
  227. package/dist/common/utils/bytes.d.ts +6 -0
  228. package/dist/common/utils/bytes.js +25 -0
  229. package/dist/common/utils/bytes.js.map +1 -0
  230. package/dist/common/utils/chain.d.ts +20 -0
  231. package/dist/common/utils/chain.js +79 -0
  232. package/dist/common/utils/chain.js.map +1 -0
  233. package/dist/common/utils/formulae.d.ts +19 -0
  234. package/dist/common/utils/formulae.js +118 -0
  235. package/dist/common/utils/formulae.js.map +1 -0
  236. package/dist/common/utils/gmp.d.ts +3 -0
  237. package/dist/common/utils/gmp.js +5 -0
  238. package/dist/common/utils/gmp.js.map +1 -0
  239. package/dist/common/utils/lending.d.ts +7 -0
  240. package/dist/common/utils/lending.js +16 -0
  241. package/dist/common/utils/lending.js.map +1 -0
  242. package/dist/common/utils/math-lib.d.ts +10 -0
  243. package/dist/common/utils/math-lib.js +41 -0
  244. package/dist/common/utils/math-lib.js.map +1 -0
  245. package/dist/common/utils/messages.d.ts +16 -0
  246. package/dist/common/utils/messages.js +124 -0
  247. package/dist/common/utils/messages.js.map +1 -0
  248. package/dist/common/utils/token.d.ts +3 -0
  249. package/dist/common/utils/token.js +8 -0
  250. package/dist/common/utils/token.js.map +1 -0
  251. package/dist/common/utils/transaction.d.ts +4 -0
  252. package/dist/common/utils/transaction.js +18 -0
  253. package/dist/common/utils/transaction.js.map +1 -0
  254. package/dist/index.d.ts +38 -0
  255. package/dist/index.js +50 -0
  256. package/dist/index.js.map +1 -0
  257. package/dist/lifeline/core/ts-core.d.ts +24 -0
  258. package/dist/lifeline/core/ts-core.js +101 -0
  259. package/dist/lifeline/core/ts-core.js.map +1 -0
  260. package/dist/lifeline/modules/index.d.ts +5 -0
  261. package/dist/lifeline/modules/index.js +6 -0
  262. package/dist/lifeline/modules/index.js.map +1 -0
  263. package/dist/lifeline/modules/ts-account.d.ts +23 -0
  264. package/dist/lifeline/modules/ts-account.js +205 -0
  265. package/dist/lifeline/modules/ts-account.js.map +1 -0
  266. package/dist/lifeline/modules/ts-gmp.d.ts +3 -0
  267. package/dist/lifeline/modules/ts-gmp.js +4 -0
  268. package/dist/lifeline/modules/ts-gmp.js.map +1 -0
  269. package/dist/lifeline/modules/ts-loan.d.ts +48 -0
  270. package/dist/lifeline/modules/ts-loan.js +580 -0
  271. package/dist/lifeline/modules/ts-loan.js.map +1 -0
  272. package/dist/lifeline/modules/ts-oracle.d.ts +8 -0
  273. package/dist/lifeline/modules/ts-oracle.js +27 -0
  274. package/dist/lifeline/modules/ts-oracle.js.map +1 -0
  275. package/dist/lifeline/modules/ts-pool.d.ts +5 -0
  276. package/dist/lifeline/modules/ts-pool.js +8 -0
  277. package/dist/lifeline/modules/ts-pool.js.map +1 -0
  278. package/dist/types/generics.d.ts +1 -0
  279. package/dist/types/generics.js +2 -0
  280. package/dist/types/generics.js.map +1 -0
  281. package/dist/utils/address.d.ts +1 -0
  282. package/dist/utils/address.js +2 -0
  283. package/dist/utils/address.js.map +1 -0
  284. package/dist/utils/array.d.ts +3 -0
  285. package/dist/utils/array.js +7 -0
  286. package/dist/utils/array.js.map +1 -0
  287. package/dist/utils/exhaustive-check.d.ts +1 -0
  288. package/dist/utils/exhaustive-check.js +4 -0
  289. package/dist/utils/exhaustive-check.js.map +1 -0
  290. package/dist/utils/random.d.ts +1 -0
  291. package/dist/utils/random.js +4 -0
  292. package/dist/utils/random.js.map +1 -0
  293. package/package.json +56 -0
  294. package/src/chains/evm/common/constant/abi/arbitrum-node-interface-abi.ts +17 -0
  295. package/src/chains/evm/common/constant/abi/bridge-router-abi.ts +793 -0
  296. package/src/chains/evm/common/constant/abi/ccip-data-adapter-abi.ts +621 -0
  297. package/src/chains/evm/common/constant/abi/erc-20-abi.ts +156 -0
  298. package/src/chains/evm/common/constant/abi/wormhole-data-adapter-abi.ts +644 -0
  299. package/src/chains/evm/common/constant/abi/wormhole-relayer-abi.ts +500 -0
  300. package/src/chains/evm/common/constant/chain.ts +88 -0
  301. package/src/chains/evm/common/constant/contract.ts +15 -0
  302. package/src/chains/evm/common/constant/tokens.ts +33 -0
  303. package/src/chains/evm/common/types/chain.ts +26 -0
  304. package/src/chains/evm/common/types/contract.ts +17 -0
  305. package/src/chains/evm/common/types/gmp.ts +43 -0
  306. package/src/chains/evm/common/types/module.ts +115 -0
  307. package/src/chains/evm/common/types/token.ts +35 -0
  308. package/src/chains/evm/common/utils/chain.ts +33 -0
  309. package/src/chains/evm/common/utils/contract.ts +120 -0
  310. package/src/chains/evm/common/utils/gmp.ts +54 -0
  311. package/src/chains/evm/common/utils/message.ts +648 -0
  312. package/src/chains/evm/common/utils/provider.ts +38 -0
  313. package/src/chains/evm/common/utils/tokens.ts +102 -0
  314. package/src/chains/evm/hub/constants/abi/account-manager-abi.ts +708 -0
  315. package/src/chains/evm/hub/constants/abi/bridge-router-hub-abi.ts +815 -0
  316. package/src/chains/evm/hub/constants/abi/hub-abi.ts +228 -0
  317. package/src/chains/evm/hub/constants/abi/hub-pool-abi.ts +1557 -0
  318. package/src/chains/evm/hub/constants/abi/hub-rewards-v1-abi.ts +648 -0
  319. package/src/chains/evm/hub/constants/abi/hub-rewards-v2-abi.ts +889 -0
  320. package/src/chains/evm/hub/constants/abi/loan-manager-abi.ts +1054 -0
  321. package/src/chains/evm/hub/constants/abi/node-manager-abi.ts +227 -0
  322. package/src/chains/evm/hub/constants/abi/oracle-manager-abi.ts +390 -0
  323. package/src/chains/evm/hub/constants/chain.ts +305 -0
  324. package/src/chains/evm/hub/modules/index.ts +5 -0
  325. package/src/chains/evm/hub/modules/ts-hub-account.ts +117 -0
  326. package/src/chains/evm/hub/modules/ts-hub-gmp.ts +231 -0
  327. package/src/chains/evm/hub/modules/ts-hub-loan.ts +915 -0
  328. package/src/chains/evm/hub/modules/ts-hub-oracle.ts +131 -0
  329. package/src/chains/evm/hub/modules/ts-hub-pool.ts +241 -0
  330. package/src/chains/evm/hub/types/account.ts +30 -0
  331. package/src/chains/evm/hub/types/chain.ts +22 -0
  332. package/src/chains/evm/hub/types/loan.ts +188 -0
  333. package/src/chains/evm/hub/types/oracle.ts +25 -0
  334. package/src/chains/evm/hub/types/pool.ts +75 -0
  335. package/src/chains/evm/hub/types/token.ts +10 -0
  336. package/src/chains/evm/hub/utils/chain.ts +78 -0
  337. package/src/chains/evm/hub/utils/contract.ts +178 -0
  338. package/src/chains/evm/hub/utils/events.ts +160 -0
  339. package/src/chains/evm/hub/utils/loan.ts +72 -0
  340. package/src/chains/evm/spoke/constants/abi/bridge-router-spoke-abi.ts +805 -0
  341. package/src/chains/evm/spoke/constants/abi/spoke-common-abi.ts +734 -0
  342. package/src/chains/evm/spoke/constants/abi/spoke-rewards-v2-common-abi.ts +500 -0
  343. package/src/chains/evm/spoke/constants/abi/spoke-token-abi.ts +704 -0
  344. package/src/chains/evm/spoke/modules/index.ts +3 -0
  345. package/src/chains/evm/spoke/modules/ts-evm-account.ts +341 -0
  346. package/src/chains/evm/spoke/modules/ts-evm-gmp.ts +353 -0
  347. package/src/chains/evm/spoke/modules/ts-evm-loan.ts +1032 -0
  348. package/src/chains/evm/spoke/types/pool.ts +7 -0
  349. package/src/chains/evm/spoke/utils/contract.ts +123 -0
  350. package/src/common/constants/adapter.ts +6 -0
  351. package/src/common/constants/byte.ts +7 -0
  352. package/src/common/constants/chain.ts +319 -0
  353. package/src/common/constants/gmp.ts +19 -0
  354. package/src/common/constants/lending.ts +9 -0
  355. package/src/common/constants/message.ts +25 -0
  356. package/src/common/constants/pool.ts +30 -0
  357. package/src/common/types/adapter.ts +44 -0
  358. package/src/common/types/address.ts +11 -0
  359. package/src/common/types/brand.ts +3 -0
  360. package/src/common/types/chain.ts +42 -0
  361. package/src/common/types/core.ts +31 -0
  362. package/src/common/types/gmp.ts +19 -0
  363. package/src/common/types/lending.ts +26 -0
  364. package/src/common/types/message.ts +401 -0
  365. package/src/common/types/module.ts +46 -0
  366. package/src/common/types/token.ts +72 -0
  367. package/src/common/utils/adapter.ts +197 -0
  368. package/src/common/utils/address.ts +50 -0
  369. package/src/common/utils/bytes.ts +36 -0
  370. package/src/common/utils/chain.ts +163 -0
  371. package/src/common/utils/formulae.ts +270 -0
  372. package/src/common/utils/gmp.ts +8 -0
  373. package/src/common/utils/lending.ts +31 -0
  374. package/src/common/utils/math-lib.ts +50 -0
  375. package/src/common/utils/messages.ts +283 -0
  376. package/src/common/utils/token.ts +13 -0
  377. package/src/common/utils/transaction.ts +27 -0
  378. package/src/index.ts +73 -0
  379. package/src/lifeline/core/ts-core.ts +136 -0
  380. package/src/lifeline/modules/index.ts +5 -0
  381. package/src/lifeline/modules/ts-account.ts +420 -0
  382. package/src/lifeline/modules/ts-gmp.ts +5 -0
  383. package/src/lifeline/modules/ts-loan.ts +1268 -0
  384. package/src/lifeline/modules/ts-oracle.ts +68 -0
  385. package/src/lifeline/modules/ts-pool.ts +19 -0
  386. package/src/types/generics.ts +1 -0
  387. package/src/utils/address.ts +0 -0
  388. package/src/utils/array.ts +11 -0
  389. package/src/utils/exhaustive-check.ts +3 -0
  390. package/src/utils/random.ts +3 -0
@@ -0,0 +1,1268 @@
1
+ import { SEND_TOKEN_ACTION_RETURN_GAS_LIMIT } from '../../chains/evm/common/constant/contract.js';
2
+ import { TsHubLoan } from '../../chains/evm/hub/modules/index.js';
3
+ import {
4
+ assertLoanTypeSupported,
5
+ getHubChain,
6
+ getHubTokenData,
7
+ getHubTokensData,
8
+ } from '../../chains/evm/hub/utils/chain.js';
9
+ import { TSEvmLoan } from '../../chains/evm/spoke/modules/index.js';
10
+ import { ChainType } from '../../common/types/chain.js';
11
+ import { MessageDirection } from '../../common/types/gmp.js';
12
+ import { Action } from '../../common/types/message.js';
13
+ import { TokenType } from '../../common/types/token.js';
14
+ import {
15
+ assertAdapterSupportsCrossChainToken,
16
+ assertAdapterSupportsDataMessage,
17
+ } from '../../common/utils/adapter.js';
18
+ import { convertFromGenericAddress } from '../../common/utils/address.js';
19
+ import {
20
+ assertHubChainSelected,
21
+ assertSpokeChainSupportTsToken,
22
+ assertSpokeChainSupported,
23
+ getTsChain,
24
+ getSignerGenericAddress,
25
+ getSpokeChain,
26
+ getSpokeTokenData,
27
+ } from '../../common/utils/chain.js';
28
+ import {
29
+ buildMessageToSend,
30
+ estimateAdapterReceiveGasLimit,
31
+ } from '../../common/utils/messages.js';
32
+ import { exhaustiveCheck } from '../../utils/exhaustive-check.js';
33
+ import { TSCore } from '../core/ts-core.js';
34
+
35
+ import type {
36
+ AssetsAdditionalInterest,
37
+ LoanChange,
38
+ LoanControllerUserLoan,
39
+ LoanTypeInfo,
40
+ UserLoanInfo,
41
+ UserPoints,
42
+ } from '../../chains/evm/hub/types/loan.js';
43
+ import type {
44
+ OraclePrice,
45
+ OraclePrices,
46
+ } from '../../chains/evm/hub/types/oracle.js';
47
+ import type { PoolInfo } from '../../chains/evm/hub/types/pool.js';
48
+ import type { TokenRateLimit } from '../../chains/evm/spoke/types/pool.js';
49
+ import type { TSChainId } from '../../common/types/chain.js';
50
+ import type {
51
+ AccountId,
52
+ LoanId,
53
+ LoanName,
54
+ LoanTypeId,
55
+ Nonce,
56
+ } from '../../common/types/lending.js';
57
+ import type {
58
+ BorrowMessageData,
59
+ CreateLoanAndDepositMessageData,
60
+ CreateLoanMessageData,
61
+ DeleteLoanMessageData,
62
+ DepositExtraArgs,
63
+ DepositMessageData,
64
+ LiquidateMessageData,
65
+ MessageAdapters,
66
+ MessageBuilderParams,
67
+ OptionalFeeParams,
68
+ OverrideTokenData,
69
+ RepayExtraArgs,
70
+ RepayMessageData,
71
+ RepayWithCollateralMessageData,
72
+ SendTokenExtraArgs,
73
+ SendTokenMessageData,
74
+ SwitchBorrowTypeMessageData,
75
+ WithdrawMessageData,
76
+ } from '../../common/types/message.js';
77
+ import type {
78
+ PrepareBorrowCall,
79
+ PrepareCreateLoanAndDepositCall,
80
+ PrepareCreateLoanCall,
81
+ PrepareDepositCall,
82
+ PrepareLiquidateCall,
83
+ PrepareRepayCall,
84
+ PrepareRepayWithCollateralCall,
85
+ PrepareSwitchBorrowTypeCall,
86
+ PrepareUpdateUserPointsInLoansCall,
87
+ PrepareWithdrawCall,
88
+ } from '../../common/types/module.js';
89
+ import type { TSTokenId } from '../../common/types/token.js';
90
+ import type { Dnum } from 'dnum';
91
+ import { GenericAddress } from '../../common/types/address.js';
92
+
93
+ export const prepare = {
94
+ async createLoan(
95
+ accountId: AccountId,
96
+ nonce: Nonce,
97
+ loanTypeId: LoanTypeId,
98
+ loanName: LoanName,
99
+ adapters: MessageAdapters
100
+ ) {
101
+ const tsChain = TSCore.getSelectedTsChain();
102
+
103
+ assertAdapterSupportsDataMessage(tsChain.tsChainId, adapters.adapterId);
104
+ const spokeChain = getSpokeChain(tsChain.tsChainId, tsChain.network);
105
+ const hubChain = getHubChain(tsChain.network);
106
+
107
+ const userAddress = getSignerGenericAddress({
108
+ signer: TSCore.getTSSigner().signer,
109
+ chainType: tsChain.chainType,
110
+ });
111
+
112
+ const data: CreateLoanMessageData = {
113
+ nonce,
114
+ loanTypeId,
115
+ loanName,
116
+ };
117
+ const messageBuilderParams: MessageBuilderParams = {
118
+ userAddress,
119
+ accountId,
120
+ adapters,
121
+ action: Action.CreateLoan,
122
+ sender: spokeChain.spokeOperationAddress,
123
+ destinationChainId: hubChain.tsChainId,
124
+ handler: hubChain.hubAddress,
125
+ data,
126
+ extraArgs: '0x',
127
+ };
128
+ const feeParams: OptionalFeeParams = {};
129
+
130
+ feeParams.gasLimit = await estimateAdapterReceiveGasLimit(
131
+ tsChain.tsChainId,
132
+ hubChain.tsChainId,
133
+ TSCore.getHubProvider(),
134
+ tsChain.network,
135
+ MessageDirection.SpokeToHub,
136
+ messageBuilderParams
137
+ );
138
+
139
+ const messageToSend = buildMessageToSend(
140
+ tsChain.chainType,
141
+ messageBuilderParams,
142
+ feeParams
143
+ );
144
+
145
+ switch (tsChain.chainType) {
146
+ case ChainType.EVM:
147
+ return await TSEvmLoan.prepare.createLoan(
148
+ TSCore.getProvider<ChainType.EVM>(tsChain.tsChainId),
149
+ convertFromGenericAddress(userAddress, tsChain.chainType),
150
+ messageToSend,
151
+ accountId,
152
+ nonce,
153
+ loanTypeId,
154
+ loanName,
155
+ spokeChain
156
+ );
157
+ default:
158
+ return exhaustiveCheck(tsChain.chainType);
159
+ }
160
+ },
161
+
162
+ async liquidate(
163
+ accountId: AccountId,
164
+ liquidatorLoanId: LoanId,
165
+ violatorLoanId: LoanId,
166
+ tsTokenIdToLiq: TSTokenId,
167
+ tsTokenIdToSeize: TSTokenId,
168
+ repayingAmount: bigint,
169
+ minSeizedAmount: bigint,
170
+ liquidatorAddress: GenericAddress
171
+ ) {
172
+ const tsChain = TSCore.getSelectedTsChain();
173
+ assertHubChainSelected(tsChain.tsChainId, tsChain.network);
174
+ const hubChain = getHubChain(tsChain.network);
175
+
176
+ const hubTokenToLiquidateData = getHubTokenData(
177
+ tsTokenIdToLiq,
178
+ tsChain.network
179
+ );
180
+ const hubTokenToSeizeData = getHubTokenData(
181
+ tsTokenIdToSeize,
182
+ tsChain.network
183
+ );
184
+
185
+ // const userAddress = getSignerGenericAddress({
186
+ // signer: TSCore.getTSSigner().signer,
187
+ // chainType: tsChain.chainType,
188
+ // });
189
+
190
+ const data: LiquidateMessageData = {
191
+ liquidatorLoanId,
192
+ violatorLoanId,
193
+ colPoolId: hubTokenToSeizeData.poolId,
194
+ borPoolId: hubTokenToLiquidateData.poolId,
195
+ repayingAmount,
196
+ minSeizedAmount,
197
+ };
198
+
199
+ return await TsHubLoan.prepare.liquidate(
200
+ TSCore.getProvider<ChainType.EVM>(tsChain.tsChainId),
201
+ convertFromGenericAddress(liquidatorAddress, tsChain.chainType),
202
+ data,
203
+ accountId,
204
+ hubChain
205
+ );
206
+ },
207
+
208
+ async repayWithCollateral(
209
+ accountId: AccountId,
210
+ loanId: LoanId,
211
+ tsTokenId: TSTokenId,
212
+ amount: bigint,
213
+ adapters: MessageAdapters
214
+ ) {
215
+ const tsChain = TSCore.getSelectedTsChain();
216
+ const network = tsChain.network;
217
+
218
+ assertAdapterSupportsDataMessage(tsChain.tsChainId, adapters.adapterId);
219
+
220
+ const hubChain = getHubChain(network);
221
+ const hubTokenData = getHubTokenData(tsTokenId, network);
222
+
223
+ const spokeChain = getSpokeChain(tsChain.tsChainId, network);
224
+
225
+ const userAddress = getSignerGenericAddress({
226
+ signer: TSCore.getTSSigner().signer,
227
+ chainType: tsChain.chainType,
228
+ });
229
+ const data: RepayWithCollateralMessageData = {
230
+ loanId,
231
+ poolId: hubTokenData.poolId,
232
+ amount,
233
+ };
234
+
235
+ const messageBuilderParams: MessageBuilderParams = {
236
+ userAddress,
237
+ accountId,
238
+ adapters,
239
+ action: Action.RepayWithCollateral,
240
+ sender: spokeChain.spokeOperationAddress,
241
+ destinationChainId: hubChain.tsChainId,
242
+ handler: hubChain.hubAddress,
243
+ data,
244
+ extraArgs: '0x',
245
+ };
246
+ const feeParams: OptionalFeeParams = {
247
+ returnGasLimit: 0n,
248
+ gasLimit: 0n,
249
+ };
250
+
251
+ feeParams.gasLimit = await estimateAdapterReceiveGasLimit(
252
+ tsChain.tsChainId,
253
+ hubChain.tsChainId,
254
+ TSCore.getHubProvider(),
255
+ tsChain.network,
256
+ MessageDirection.SpokeToHub,
257
+ messageBuilderParams
258
+ );
259
+
260
+ const messageToSend = buildMessageToSend(
261
+ tsChain.chainType,
262
+ messageBuilderParams,
263
+ feeParams
264
+ );
265
+
266
+ switch (tsChain.chainType) {
267
+ case ChainType.EVM:
268
+ return await TSEvmLoan.prepare.repayWithCollateral(
269
+ TSCore.getProvider<ChainType.EVM>(tsChain.tsChainId),
270
+ convertFromGenericAddress(userAddress, tsChain.chainType),
271
+ messageToSend,
272
+ network,
273
+ accountId,
274
+ loanId,
275
+ tsTokenId,
276
+ amount,
277
+ spokeChain
278
+ );
279
+ default:
280
+ return exhaustiveCheck(tsChain.chainType);
281
+ }
282
+ },
283
+
284
+ async deleteLoan(
285
+ accountId: AccountId,
286
+ loanId: LoanId,
287
+ adapters: MessageAdapters
288
+ ) {
289
+ const tsChain = TSCore.getSelectedTsChain();
290
+
291
+ assertAdapterSupportsDataMessage(tsChain.tsChainId, adapters.adapterId);
292
+ const spokeChain = getSpokeChain(tsChain.tsChainId, tsChain.network);
293
+ const hubChain = getHubChain(tsChain.network);
294
+
295
+ const userAddress = getSignerGenericAddress({
296
+ signer: TSCore.getTSSigner().signer,
297
+ chainType: tsChain.chainType,
298
+ });
299
+
300
+ const data: DeleteLoanMessageData = {
301
+ accountId,
302
+ loanId,
303
+ };
304
+ const messageBuilderParams: MessageBuilderParams = {
305
+ userAddress,
306
+ accountId,
307
+ adapters,
308
+ action: Action.DeleteLoan,
309
+ sender: spokeChain.spokeOperationAddress,
310
+ destinationChainId: hubChain.tsChainId,
311
+ handler: hubChain.hubAddress,
312
+ data,
313
+ extraArgs: '0x',
314
+ };
315
+ const feeParams: OptionalFeeParams = {};
316
+
317
+ feeParams.gasLimit = await estimateAdapterReceiveGasLimit(
318
+ tsChain.tsChainId,
319
+ hubChain.tsChainId,
320
+ TSCore.getHubProvider(),
321
+ tsChain.network,
322
+ MessageDirection.SpokeToHub,
323
+ messageBuilderParams
324
+ );
325
+
326
+ const messageToSend = buildMessageToSend(
327
+ tsChain.chainType,
328
+ messageBuilderParams,
329
+ feeParams
330
+ );
331
+
332
+ switch (tsChain.chainType) {
333
+ case ChainType.EVM:
334
+ return await TSEvmLoan.prepare.deleteLoan(
335
+ TSCore.getProvider<ChainType.EVM>(tsChain.tsChainId),
336
+ convertFromGenericAddress(userAddress, tsChain.chainType),
337
+ messageToSend,
338
+ accountId,
339
+ loanId,
340
+ spokeChain
341
+ );
342
+ default:
343
+ return exhaustiveCheck(tsChain.chainType);
344
+ }
345
+ },
346
+
347
+ async createLoanAndDeposit(
348
+ accountId: AccountId,
349
+ nonce: Nonce,
350
+ loanTypeId: LoanTypeId,
351
+ loanName: LoanName,
352
+ tsTokenId: TSTokenId,
353
+ amount: bigint,
354
+ adapters: MessageAdapters
355
+ ) {
356
+ const tsChain = TSCore.getSelectedTsChain();
357
+
358
+ assertSpokeChainSupportTsToken(
359
+ tsChain.tsChainId,
360
+ tsTokenId,
361
+ tsChain.network
362
+ );
363
+ assertLoanTypeSupported(loanTypeId, tsTokenId, tsChain.network);
364
+ const spokeChain = getSpokeChain(tsChain.tsChainId, tsChain.network);
365
+ const hubChain = getHubChain(tsChain.network);
366
+
367
+ const spokeTokenData = getSpokeTokenData(spokeChain, tsTokenId);
368
+ const hubTokenData = getHubTokenData(tsTokenId, tsChain.network);
369
+
370
+ if (spokeTokenData.token.type === TokenType.CROSS_CHAIN)
371
+ assertAdapterSupportsCrossChainToken(
372
+ tsChain.tsChainId,
373
+ spokeTokenData.token,
374
+ adapters.adapterId
375
+ );
376
+ else
377
+ assertAdapterSupportsDataMessage(tsChain.tsChainId, adapters.adapterId);
378
+
379
+ const userAddress = getSignerGenericAddress({
380
+ signer: TSCore.getTSSigner().signer,
381
+ chainType: tsChain.chainType,
382
+ });
383
+
384
+ const data: CreateLoanAndDepositMessageData = {
385
+ nonce,
386
+ poolId: hubTokenData.poolId,
387
+ amount,
388
+ loanTypeId,
389
+ loanName,
390
+ };
391
+ const extraArgs: DepositExtraArgs = {
392
+ token: spokeTokenData.token,
393
+ recipient: hubTokenData.poolAddress,
394
+ amount,
395
+ };
396
+ const messageBuilderParams: MessageBuilderParams = {
397
+ userAddress,
398
+ accountId,
399
+ adapters,
400
+ action: Action.InitiateLoanAccountWithDeposit,
401
+ sender: getSpokeTokenData(spokeChain, tsTokenId).spokeAddress,
402
+ destinationChainId: hubChain.tsChainId,
403
+ handler: hubChain.hubAddress,
404
+ data,
405
+ extraArgs,
406
+ };
407
+ const feeParams: OptionalFeeParams = {};
408
+
409
+ feeParams.gasLimit = await estimateAdapterReceiveGasLimit(
410
+ tsChain.tsChainId,
411
+ hubChain.tsChainId,
412
+ TSCore.getHubProvider(),
413
+ tsChain.network,
414
+ MessageDirection.SpokeToHub,
415
+ messageBuilderParams
416
+ );
417
+ feeParams.returnGasLimit = SEND_TOKEN_ACTION_RETURN_GAS_LIMIT;
418
+
419
+ const messageToSend = buildMessageToSend(
420
+ tsChain.chainType,
421
+ messageBuilderParams,
422
+ feeParams
423
+ );
424
+
425
+ switch (tsChain.chainType) {
426
+ case ChainType.EVM:
427
+ return await TSEvmLoan.prepare.createLoanAndDeposit(
428
+ TSCore.getProvider<ChainType.EVM>(tsChain.tsChainId),
429
+ convertFromGenericAddress(userAddress, tsChain.chainType),
430
+ messageToSend,
431
+ accountId,
432
+ nonce,
433
+ loanTypeId,
434
+ loanName,
435
+ amount,
436
+ spokeChain,
437
+ spokeTokenData
438
+ );
439
+ default:
440
+ return exhaustiveCheck(tsChain.chainType);
441
+ }
442
+ },
443
+
444
+ async deposit(
445
+ accountId: AccountId,
446
+ loanId: LoanId,
447
+ loanTypeId: LoanTypeId,
448
+ tsTokenId: TSTokenId,
449
+ amount: bigint,
450
+ adapters: MessageAdapters
451
+ ) {
452
+ const tsChain = TSCore.getSelectedTsChain();
453
+
454
+ assertSpokeChainSupportTsToken(
455
+ tsChain.tsChainId,
456
+ tsTokenId,
457
+ tsChain.network
458
+ );
459
+ assertLoanTypeSupported(loanTypeId, tsTokenId, tsChain.network);
460
+ const spokeChain = getSpokeChain(tsChain.tsChainId, tsChain.network);
461
+ const hubChain = getHubChain(tsChain.network);
462
+
463
+ const spokeTokenData = getSpokeTokenData(spokeChain, tsTokenId);
464
+ const hubTokenData = getHubTokenData(tsTokenId, tsChain.network);
465
+
466
+ if (spokeTokenData.token.type === TokenType.CROSS_CHAIN)
467
+ assertAdapterSupportsCrossChainToken(
468
+ tsChain.tsChainId,
469
+ spokeTokenData.token,
470
+ adapters.adapterId
471
+ );
472
+ else
473
+ assertAdapterSupportsDataMessage(tsChain.tsChainId, adapters.adapterId);
474
+
475
+ const userAddress = getSignerGenericAddress({
476
+ signer: TSCore.getTSSigner().signer,
477
+ chainType: tsChain.chainType,
478
+ });
479
+
480
+ const data: DepositMessageData = {
481
+ loanId,
482
+ poolId: hubTokenData.poolId,
483
+ amount,
484
+ };
485
+ const extraArgs: DepositExtraArgs = {
486
+ token: spokeTokenData.token,
487
+ recipient: hubTokenData.poolAddress,
488
+ amount,
489
+ };
490
+ const messageBuilderParams: MessageBuilderParams = {
491
+ userAddress,
492
+ accountId,
493
+ adapters,
494
+ action: Action.Deposit,
495
+ sender: getSpokeTokenData(spokeChain, tsTokenId).spokeAddress,
496
+ destinationChainId: hubChain.tsChainId,
497
+ handler: hubChain.hubAddress,
498
+ data,
499
+ extraArgs,
500
+ };
501
+ const feeParams: OptionalFeeParams = {};
502
+
503
+ feeParams.gasLimit = await estimateAdapterReceiveGasLimit(
504
+ tsChain.tsChainId,
505
+ hubChain.tsChainId,
506
+ TSCore.getHubProvider(),
507
+ tsChain.network,
508
+ MessageDirection.SpokeToHub,
509
+ messageBuilderParams
510
+ );
511
+ feeParams.returnGasLimit = SEND_TOKEN_ACTION_RETURN_GAS_LIMIT;
512
+
513
+ const messageToSend = buildMessageToSend(
514
+ tsChain.chainType,
515
+ messageBuilderParams,
516
+ feeParams
517
+ );
518
+
519
+ switch (tsChain.chainType) {
520
+ case ChainType.EVM:
521
+ return await TSEvmLoan.prepare.deposit(
522
+ TSCore.getProvider<ChainType.EVM>(tsChain.tsChainId),
523
+ convertFromGenericAddress(userAddress, tsChain.chainType),
524
+ messageToSend,
525
+ accountId,
526
+ loanId,
527
+ amount,
528
+ spokeChain,
529
+ spokeTokenData
530
+ );
531
+ default:
532
+ return exhaustiveCheck(tsChain.chainType);
533
+ }
534
+ },
535
+
536
+ async withdraw(
537
+ accountId: AccountId,
538
+ loanId: LoanId,
539
+ tsTokenId: TSTokenId,
540
+ amount: bigint,
541
+ isTAmount: boolean,
542
+ receiverTsChainId: TSChainId,
543
+ adapters: MessageAdapters
544
+ ) {
545
+ const tsChain = TSCore.getSelectedTsChain();
546
+ const network = tsChain.network;
547
+ const receiverTsChain = getTsChain(receiverTsChainId, network);
548
+
549
+ const spokeChain = getSpokeChain(tsChain.tsChainId, network);
550
+ const receiverSpokeChain = getSpokeChain(receiverTsChainId, network);
551
+ const receiverSpokeTokenData = getSpokeTokenData(
552
+ receiverSpokeChain,
553
+ tsTokenId
554
+ );
555
+
556
+ assertAdapterSupportsDataMessage(tsChain.tsChainId, adapters.adapterId);
557
+ if (receiverSpokeTokenData.token.type === TokenType.CROSS_CHAIN)
558
+ assertAdapterSupportsCrossChainToken(
559
+ receiverTsChainId,
560
+ receiverSpokeTokenData.token,
561
+ adapters.returnAdapterId
562
+ );
563
+ else
564
+ assertAdapterSupportsDataMessage(
565
+ receiverTsChainId,
566
+ adapters.returnAdapterId
567
+ );
568
+
569
+ assertSpokeChainSupportTsToken(receiverTsChainId, tsTokenId, network);
570
+
571
+ const hubChain = getHubChain(network);
572
+ const hubTokenData = getHubTokenData(tsTokenId, network);
573
+
574
+ const userAddress = getSignerGenericAddress({
575
+ signer: TSCore.getTSSigner().signer,
576
+ chainType: tsChain.chainType,
577
+ });
578
+
579
+ const feeParams: OptionalFeeParams = {};
580
+
581
+ const returnData: SendTokenMessageData = {
582
+ amount,
583
+ };
584
+ const returnExtraArgs: SendTokenExtraArgs = {
585
+ tsTokenId,
586
+ token: hubTokenData.token,
587
+ recipient: receiverSpokeTokenData.spokeAddress,
588
+ amount,
589
+ };
590
+ const overrideData: OverrideTokenData = {
591
+ tsTokenId,
592
+ token: receiverSpokeTokenData.token,
593
+ address: receiverSpokeTokenData.spokeAddress,
594
+ amount,
595
+ };
596
+ const returnMessageBuilderParams: MessageBuilderParams = {
597
+ userAddress,
598
+ accountId,
599
+ adapters,
600
+ action: Action.SendToken,
601
+ sender: hubChain.hubAddress,
602
+ destinationChainId: receiverTsChainId,
603
+ handler: receiverSpokeTokenData.spokeAddress,
604
+ data: returnData,
605
+ extraArgs: returnExtraArgs,
606
+ overrideData,
607
+ };
608
+ feeParams.returnGasLimit = await estimateAdapterReceiveGasLimit(
609
+ hubChain.tsChainId,
610
+ receiverTsChain.tsChainId,
611
+ TSCore.getEVMProvider(receiverTsChain.tsChainId),
612
+ tsChain.network,
613
+ MessageDirection.HubToSpoke,
614
+ returnMessageBuilderParams
615
+ );
616
+
617
+ const data: WithdrawMessageData = {
618
+ loanId,
619
+ poolId: hubTokenData.poolId,
620
+ receiverTsChainId,
621
+ amount,
622
+ isFAmount: isTAmount,
623
+ };
624
+ const messageBuilderParams: MessageBuilderParams = {
625
+ userAddress,
626
+ accountId,
627
+ adapters,
628
+ action: Action.Withdraw,
629
+ sender: spokeChain.spokeOperationAddress,
630
+ destinationChainId: hubChain.tsChainId,
631
+ handler: hubChain.hubAddress,
632
+ data,
633
+ extraArgs: '0x',
634
+ };
635
+ feeParams.receiverValue = await TsHubLoan.getSendTokenAdapterFees(
636
+ TSCore.getHubProvider(),
637
+ network,
638
+ accountId,
639
+ tsTokenId,
640
+ amount,
641
+ receiverTsChainId,
642
+ adapters,
643
+ feeParams
644
+ );
645
+ feeParams.gasLimit = await estimateAdapterReceiveGasLimit(
646
+ tsChain.tsChainId,
647
+ hubChain.tsChainId,
648
+ TSCore.getHubProvider(),
649
+ tsChain.network,
650
+ MessageDirection.SpokeToHub,
651
+ messageBuilderParams,
652
+ feeParams.receiverValue
653
+ );
654
+
655
+ const messageToSend = buildMessageToSend(
656
+ tsChain.chainType,
657
+ messageBuilderParams,
658
+ feeParams
659
+ );
660
+
661
+ switch (tsChain.chainType) {
662
+ case ChainType.EVM:
663
+ return await TSEvmLoan.prepare.withdraw(
664
+ TSCore.getProvider<ChainType.EVM>(tsChain.tsChainId),
665
+ convertFromGenericAddress(userAddress, tsChain.chainType),
666
+ messageToSend,
667
+ network,
668
+ accountId,
669
+ loanId,
670
+ tsTokenId,
671
+ amount,
672
+ isTAmount,
673
+ receiverTsChainId,
674
+ spokeChain
675
+ );
676
+ default:
677
+ return exhaustiveCheck(tsChain.chainType);
678
+ }
679
+ },
680
+
681
+ async borrow(
682
+ accountId: AccountId,
683
+ loanId: LoanId,
684
+ tsTokenId: TSTokenId,
685
+ amount: bigint,
686
+ maxStableRate: bigint,
687
+ receiverTsChainId: TSChainId,
688
+ adapters: MessageAdapters
689
+ ) {
690
+ const tsChain = TSCore.getSelectedTsChain();
691
+ const network = tsChain.network;
692
+ const receiverTsChain = getTsChain(receiverTsChainId, network);
693
+
694
+ const spokeChain = getSpokeChain(tsChain.tsChainId, network);
695
+ const receiverSpokeChain = getSpokeChain(receiverTsChainId, network);
696
+ const receiverSpokeTokenData = getSpokeTokenData(
697
+ receiverSpokeChain,
698
+ tsTokenId
699
+ );
700
+
701
+ assertAdapterSupportsDataMessage(tsChain.tsChainId, adapters.adapterId);
702
+ if (receiverSpokeTokenData.token.type === TokenType.CROSS_CHAIN)
703
+ assertAdapterSupportsCrossChainToken(
704
+ receiverTsChainId,
705
+ receiverSpokeTokenData.token,
706
+ adapters.returnAdapterId
707
+ );
708
+ else
709
+ assertAdapterSupportsDataMessage(
710
+ receiverTsChainId,
711
+ adapters.returnAdapterId
712
+ );
713
+ assertSpokeChainSupportTsToken(receiverTsChainId, tsTokenId, network);
714
+
715
+ const hubChain = getHubChain(network);
716
+ const hubTokenData = getHubTokenData(tsTokenId, network);
717
+
718
+ const userAddress = getSignerGenericAddress({
719
+ signer: TSCore.getTSSigner().signer,
720
+ chainType: tsChain.chainType,
721
+ });
722
+
723
+ const feeParams: OptionalFeeParams = {};
724
+
725
+ const returnData: SendTokenMessageData = {
726
+ amount,
727
+ };
728
+ const returnExtraArgs: SendTokenExtraArgs = {
729
+ tsTokenId,
730
+ token: hubTokenData.token,
731
+ recipient: receiverSpokeTokenData.spokeAddress,
732
+ amount,
733
+ };
734
+ const overrideData: OverrideTokenData = {
735
+ tsTokenId,
736
+ token: receiverSpokeTokenData.token,
737
+ address: receiverSpokeTokenData.spokeAddress,
738
+ amount,
739
+ };
740
+ const returnMessageBuilderParams: MessageBuilderParams = {
741
+ userAddress,
742
+ accountId,
743
+ adapters,
744
+ action: Action.SendToken,
745
+ sender: hubChain.hubAddress,
746
+ destinationChainId: receiverTsChainId,
747
+ handler: receiverSpokeTokenData.spokeAddress,
748
+ data: returnData,
749
+ extraArgs: returnExtraArgs,
750
+ overrideData,
751
+ };
752
+ feeParams.returnGasLimit = await estimateAdapterReceiveGasLimit(
753
+ hubChain.tsChainId,
754
+ receiverTsChain.tsChainId,
755
+ TSCore.getEVMProvider(receiverTsChain.tsChainId),
756
+ tsChain.network,
757
+ MessageDirection.HubToSpoke,
758
+ returnMessageBuilderParams
759
+ );
760
+
761
+ const data: BorrowMessageData = {
762
+ loanId,
763
+ poolId: hubTokenData.poolId,
764
+ receiverTsChainId,
765
+ amount,
766
+ maxStableRate,
767
+ };
768
+ const messageBuilderParams: MessageBuilderParams = {
769
+ userAddress,
770
+ accountId,
771
+ adapters,
772
+ action: Action.Borrow,
773
+ sender: spokeChain.spokeOperationAddress,
774
+ destinationChainId: hubChain.tsChainId,
775
+ handler: hubChain.hubAddress,
776
+ data,
777
+ extraArgs: '0x',
778
+ };
779
+ feeParams.receiverValue = await TsHubLoan.getSendTokenAdapterFees(
780
+ TSCore.getHubProvider(),
781
+ network,
782
+ accountId,
783
+ tsTokenId,
784
+ amount,
785
+ receiverTsChainId,
786
+ adapters,
787
+ feeParams
788
+ );
789
+ feeParams.gasLimit = await estimateAdapterReceiveGasLimit(
790
+ tsChain.tsChainId,
791
+ hubChain.tsChainId,
792
+ TSCore.getHubProvider(),
793
+ tsChain.network,
794
+ MessageDirection.SpokeToHub,
795
+ messageBuilderParams,
796
+ feeParams.receiverValue
797
+ );
798
+
799
+ const messageToSend = buildMessageToSend(
800
+ tsChain.chainType,
801
+ messageBuilderParams,
802
+ feeParams
803
+ );
804
+
805
+ switch (tsChain.chainType) {
806
+ case ChainType.EVM:
807
+ return await TSEvmLoan.prepare.borrow(
808
+ TSCore.getProvider<ChainType.EVM>(tsChain.tsChainId),
809
+ convertFromGenericAddress(userAddress, tsChain.chainType),
810
+ messageToSend,
811
+ network,
812
+ accountId,
813
+ loanId,
814
+ tsTokenId,
815
+ amount,
816
+ maxStableRate,
817
+ receiverTsChainId,
818
+ spokeChain
819
+ );
820
+ default:
821
+ return exhaustiveCheck(tsChain.chainType);
822
+ }
823
+ },
824
+
825
+ async repay(
826
+ accountId: AccountId,
827
+ loanId: LoanId,
828
+ loanTypeId: LoanTypeId,
829
+ tsTokenId: TSTokenId,
830
+ amount: bigint,
831
+ maxOverRepayment: bigint,
832
+ adapters: MessageAdapters
833
+ ): Promise<PrepareRepayCall> {
834
+ const tsChain = TSCore.getSelectedTsChain();
835
+
836
+ assertSpokeChainSupportTsToken(
837
+ tsChain.tsChainId,
838
+ tsTokenId,
839
+ tsChain.network
840
+ );
841
+ assertLoanTypeSupported(loanTypeId, tsTokenId, tsChain.network);
842
+ const spokeChain = getSpokeChain(tsChain.tsChainId, tsChain.network);
843
+ const hubChain = getHubChain(tsChain.network);
844
+
845
+ const spokeTokenData = getSpokeTokenData(spokeChain, tsTokenId);
846
+ const hubTokenData = getHubTokenData(tsTokenId, tsChain.network);
847
+
848
+ if (spokeTokenData.token.type === TokenType.CROSS_CHAIN)
849
+ assertAdapterSupportsCrossChainToken(
850
+ tsChain.tsChainId,
851
+ spokeTokenData.token,
852
+ adapters.adapterId
853
+ );
854
+ else
855
+ assertAdapterSupportsDataMessage(tsChain.tsChainId, adapters.adapterId);
856
+
857
+ const userAddress = getSignerGenericAddress({
858
+ signer: TSCore.getTSSigner().signer,
859
+ chainType: tsChain.chainType,
860
+ });
861
+
862
+ const data: RepayMessageData = {
863
+ loanId,
864
+ poolId: hubTokenData.poolId,
865
+ amount,
866
+ maxOverRepayment,
867
+ };
868
+ const extraArgs: RepayExtraArgs = {
869
+ token: spokeTokenData.token,
870
+ recipient: hubTokenData.poolAddress,
871
+ amount,
872
+ };
873
+ const messageBuilderParams: MessageBuilderParams = {
874
+ userAddress,
875
+ accountId,
876
+ adapters,
877
+ action: Action.Repay,
878
+ sender: getSpokeTokenData(spokeChain, tsTokenId).spokeAddress,
879
+ destinationChainId: hubChain.tsChainId,
880
+ handler: hubChain.hubAddress,
881
+ data,
882
+ extraArgs,
883
+ };
884
+ const feeParams: OptionalFeeParams = {};
885
+
886
+ feeParams.gasLimit = await estimateAdapterReceiveGasLimit(
887
+ tsChain.tsChainId,
888
+ hubChain.tsChainId,
889
+ TSCore.getHubProvider(),
890
+ tsChain.network,
891
+ MessageDirection.SpokeToHub,
892
+ messageBuilderParams
893
+ );
894
+ feeParams.returnGasLimit = SEND_TOKEN_ACTION_RETURN_GAS_LIMIT;
895
+
896
+ const messageToSend = buildMessageToSend(
897
+ tsChain.chainType,
898
+ messageBuilderParams,
899
+ feeParams
900
+ );
901
+
902
+ switch (tsChain.chainType) {
903
+ case ChainType.EVM:
904
+ return await TSEvmLoan.prepare.repay(
905
+ TSCore.getProvider<ChainType.EVM>(tsChain.tsChainId),
906
+ convertFromGenericAddress(userAddress, tsChain.chainType),
907
+ messageToSend,
908
+ accountId,
909
+ loanId,
910
+ amount,
911
+ maxOverRepayment,
912
+ spokeChain,
913
+ spokeTokenData
914
+ );
915
+ default:
916
+ return exhaustiveCheck(tsChain.chainType);
917
+ }
918
+ },
919
+ };
920
+
921
+ export const write = {
922
+ async createLoan(
923
+ accountId: AccountId,
924
+ nonce: Nonce,
925
+ loanTypeId: LoanTypeId,
926
+ loanName: LoanName,
927
+ prepareCall: PrepareCreateLoanCall
928
+ ) {
929
+ const tsChain = TSCore.getSelectedTsChain();
930
+
931
+ assertSpokeChainSupported(tsChain.tsChainId, tsChain.network);
932
+
933
+ switch (tsChain.chainType) {
934
+ case ChainType.EVM:
935
+ return await TSEvmLoan.write.createLoan(
936
+ TSCore.getProvider<ChainType.EVM>(tsChain.tsChainId),
937
+ TSCore.getSigner<ChainType.EVM>(),
938
+ accountId,
939
+ nonce,
940
+ loanTypeId,
941
+ loanName,
942
+ prepareCall
943
+ );
944
+ default:
945
+ return exhaustiveCheck(tsChain.chainType);
946
+ }
947
+ },
948
+
949
+ async deleteLoan(
950
+ accountId: AccountId,
951
+ loanId: LoanId,
952
+ prepareCall: PrepareCreateLoanCall
953
+ ) {
954
+ const tsChain = TSCore.getSelectedTsChain();
955
+
956
+ assertSpokeChainSupported(tsChain.tsChainId, tsChain.network);
957
+
958
+ switch (tsChain.chainType) {
959
+ case ChainType.EVM:
960
+ return await TSEvmLoan.write.deleteLoan(
961
+ TSCore.getProvider<ChainType.EVM>(tsChain.tsChainId),
962
+ TSCore.getSigner<ChainType.EVM>(),
963
+ accountId,
964
+ loanId,
965
+ prepareCall
966
+ );
967
+ default:
968
+ return exhaustiveCheck(tsChain.chainType);
969
+ }
970
+ },
971
+
972
+ async createLoanAndDeposit(
973
+ accountId: AccountId,
974
+ nonce: Nonce,
975
+ loanTypeId: LoanTypeId,
976
+ loanName: LoanName,
977
+ amount: bigint,
978
+ includeApproval: boolean,
979
+ prepareCall: PrepareCreateLoanAndDepositCall
980
+ ) {
981
+ const tsChain = TSCore.getSelectedTsChain();
982
+
983
+ assertSpokeChainSupported(tsChain.tsChainId, tsChain.network);
984
+
985
+ switch (tsChain.chainType) {
986
+ case ChainType.EVM:
987
+ return await TSEvmLoan.write.createLoanAndDeposit(
988
+ TSCore.getProvider<ChainType.EVM>(tsChain.tsChainId),
989
+ TSCore.getSigner<ChainType.EVM>(),
990
+ accountId,
991
+ nonce,
992
+ loanTypeId,
993
+ loanName,
994
+ amount,
995
+ includeApproval,
996
+ prepareCall
997
+ );
998
+ default:
999
+ return exhaustiveCheck(tsChain.chainType);
1000
+ }
1001
+ },
1002
+
1003
+ async deposit(
1004
+ accountId: AccountId,
1005
+ loanId: LoanId,
1006
+ amount: bigint,
1007
+ includeApproval: boolean,
1008
+ prepareCall: PrepareDepositCall
1009
+ ) {
1010
+ const tsChain = TSCore.getSelectedTsChain();
1011
+
1012
+ assertSpokeChainSupported(tsChain.tsChainId, tsChain.network);
1013
+
1014
+ switch (tsChain.chainType) {
1015
+ case ChainType.EVM:
1016
+ return await TSEvmLoan.write.deposit(
1017
+ TSCore.getProvider<ChainType.EVM>(tsChain.tsChainId),
1018
+ TSCore.getSigner<ChainType.EVM>(),
1019
+ accountId,
1020
+ loanId,
1021
+ amount,
1022
+ includeApproval,
1023
+ prepareCall
1024
+ );
1025
+ default:
1026
+ return exhaustiveCheck(tsChain.chainType);
1027
+ }
1028
+ },
1029
+
1030
+ async withdraw(
1031
+ accountId: AccountId,
1032
+ loanId: LoanId,
1033
+ tsTokenId: TSTokenId,
1034
+ amount: bigint,
1035
+ isTAmount: boolean,
1036
+ receiverTsChainId: TSChainId,
1037
+ prepareCall: PrepareWithdrawCall
1038
+ ) {
1039
+ const tsChain = TSCore.getSelectedTsChain();
1040
+
1041
+ const { poolId } = getHubTokenData(tsTokenId, tsChain.network);
1042
+
1043
+ switch (tsChain.chainType) {
1044
+ case ChainType.EVM:
1045
+ return await TSEvmLoan.write.withdraw(
1046
+ TSCore.getProvider<ChainType.EVM>(tsChain.tsChainId),
1047
+ TSCore.getSigner<ChainType.EVM>(),
1048
+ accountId,
1049
+ loanId,
1050
+ poolId,
1051
+ amount,
1052
+ isTAmount,
1053
+ receiverTsChainId,
1054
+ prepareCall
1055
+ );
1056
+ default:
1057
+ return exhaustiveCheck(tsChain.chainType);
1058
+ }
1059
+ },
1060
+
1061
+ async borrow(
1062
+ accountId: AccountId,
1063
+ loanId: LoanId,
1064
+ tsTokenId: TSTokenId,
1065
+ amount: bigint,
1066
+ maxStableRate: bigint,
1067
+ receiverTsChainId: TSChainId,
1068
+ prepareCall: PrepareBorrowCall
1069
+ ) {
1070
+ const tsChain = TSCore.getSelectedTsChain();
1071
+
1072
+ const { poolId } = getHubTokenData(tsTokenId, tsChain.network);
1073
+
1074
+ switch (tsChain.chainType) {
1075
+ case ChainType.EVM:
1076
+ return await TSEvmLoan.write.borrow(
1077
+ TSCore.getProvider<ChainType.EVM>(tsChain.tsChainId),
1078
+ TSCore.getSigner<ChainType.EVM>(),
1079
+ accountId,
1080
+ loanId,
1081
+ poolId,
1082
+ amount,
1083
+ maxStableRate,
1084
+ receiverTsChainId,
1085
+ prepareCall
1086
+ );
1087
+ default:
1088
+ return exhaustiveCheck(tsChain.chainType);
1089
+ }
1090
+ },
1091
+
1092
+ async repay(
1093
+ accountId: AccountId,
1094
+ loanId: LoanId,
1095
+ amount: bigint,
1096
+ maxOverRepayment: bigint,
1097
+ includeApproval: boolean,
1098
+ prepareCall: PrepareRepayCall
1099
+ ) {
1100
+ const tsChain = TSCore.getSelectedTsChain();
1101
+
1102
+ assertSpokeChainSupported(tsChain.tsChainId, tsChain.network);
1103
+
1104
+ switch (tsChain.chainType) {
1105
+ case ChainType.EVM:
1106
+ return await TSEvmLoan.write.repay(
1107
+ TSCore.getProvider<ChainType.EVM>(tsChain.tsChainId),
1108
+ TSCore.getSigner<ChainType.EVM>(),
1109
+ accountId,
1110
+ loanId,
1111
+ amount,
1112
+ maxOverRepayment,
1113
+ includeApproval,
1114
+ prepareCall
1115
+ );
1116
+ default:
1117
+ return exhaustiveCheck(tsChain.chainType);
1118
+ }
1119
+ },
1120
+
1121
+ async liquidate(accountId: AccountId, prepareCall: PrepareLiquidateCall) {
1122
+ const tsChain = TSCore.getSelectedTsChain();
1123
+ assertHubChainSelected(tsChain.tsChainId, tsChain.network);
1124
+
1125
+ return await TsHubLoan.write.liquidate(
1126
+ TSCore.getProvider<ChainType.EVM>(tsChain.tsChainId),
1127
+ TSCore.getSigner<ChainType.EVM>(),
1128
+ accountId,
1129
+ prepareCall
1130
+ );
1131
+ },
1132
+ async repayWithCollateral(
1133
+ accountId: AccountId,
1134
+ loanId: LoanId,
1135
+ tsTokenId: TSTokenId,
1136
+ amount: bigint,
1137
+ prepareCall: PrepareRepayWithCollateralCall
1138
+ ) {
1139
+ const tsChain = TSCore.getSelectedTsChain();
1140
+
1141
+ const { poolId } = getHubTokenData(tsTokenId, tsChain.network);
1142
+
1143
+ switch (tsChain.chainType) {
1144
+ case ChainType.EVM:
1145
+ return await TSEvmLoan.write.repayWithCollateral(
1146
+ TSCore.getProvider<ChainType.EVM>(tsChain.tsChainId),
1147
+ TSCore.getSigner<ChainType.EVM>(),
1148
+ accountId,
1149
+ loanId,
1150
+ poolId,
1151
+ amount,
1152
+ prepareCall
1153
+ );
1154
+ default:
1155
+ return exhaustiveCheck(tsChain.chainType);
1156
+ }
1157
+ },
1158
+ };
1159
+
1160
+ export const read = {
1161
+ async rateLimit(
1162
+ tsTokenId: TSTokenId,
1163
+ tsChainId: TSChainId
1164
+ ): Promise<TokenRateLimit> {
1165
+ const network = TSCore.getSelectedNetwork();
1166
+ const tsChain = getTsChain(tsChainId, network);
1167
+
1168
+ assertSpokeChainSupportTsToken(
1169
+ tsChain.tsChainId,
1170
+ tsTokenId,
1171
+ tsChain.network
1172
+ );
1173
+ const spokeChain = getSpokeChain(tsChain.tsChainId, tsChain.network);
1174
+ const spokeTokenData = getSpokeTokenData(spokeChain, tsTokenId);
1175
+
1176
+ switch (tsChain.chainType) {
1177
+ case ChainType.EVM:
1178
+ return await TSEvmLoan.read.rateLimitInfo(
1179
+ TSCore.getProvider<ChainType.EVM>(tsChain.tsChainId),
1180
+ spokeTokenData
1181
+ );
1182
+ default:
1183
+ return exhaustiveCheck(tsChain.chainType);
1184
+ }
1185
+ },
1186
+
1187
+ async loanTypeInfo(loanTypeId: LoanTypeId): Promise<LoanTypeInfo> {
1188
+ const network = TSCore.getSelectedNetwork();
1189
+
1190
+ // filter for all tokens supported in loan type
1191
+ const tokensData = Object.values(getHubTokensData(network)).filter(
1192
+ (tokenData) => tokenData.supportedLoanTypes.has(loanTypeId)
1193
+ );
1194
+
1195
+ return await TsHubLoan.getLoanTypeInfo(
1196
+ TSCore.getHubProvider(),
1197
+ network,
1198
+ loanTypeId,
1199
+ tokensData
1200
+ );
1201
+ },
1202
+
1203
+ async userLoansIds(
1204
+ accountId: AccountId,
1205
+ loanTypeIdsFilter?: Array<LoanTypeId>
1206
+ ): Promise<Map<LoanTypeId, Array<LoanId>>> {
1207
+ const network = TSCore.getSelectedNetwork();
1208
+ return await TsHubLoan.getUserLoanIds(
1209
+ TSCore.getHubProvider(),
1210
+ network,
1211
+ accountId,
1212
+ loanTypeIdsFilter
1213
+ );
1214
+ },
1215
+
1216
+ async userLoans(
1217
+ loanIds: Array<LoanId>,
1218
+ throwErrorOnInactiveLoan = true
1219
+ ): Promise<Map<LoanId, LoanControllerUserLoan>> {
1220
+ const network = TSCore.getSelectedNetwork();
1221
+ return await TsHubLoan.getUserLoans(
1222
+ TSCore.getHubProvider(),
1223
+ network,
1224
+ loanIds,
1225
+ throwErrorOnInactiveLoan
1226
+ );
1227
+ },
1228
+ };
1229
+
1230
+ export const util = {
1231
+ userLoansInfo(
1232
+ userLoansMap: Map<LoanId, LoanControllerUserLoan>,
1233
+ poolsInfo: Partial<Record<TSTokenId, PoolInfo>>,
1234
+ loanTypesInfo: Partial<Record<LoanTypeId, LoanTypeInfo>>,
1235
+ oraclePrices: OraclePrices,
1236
+ additionalInterests?: AssetsAdditionalInterest
1237
+ ): Record<LoanId, UserLoanInfo> {
1238
+ // get info of each user loan
1239
+ return TsHubLoan.getUserLoansInfo(
1240
+ userLoansMap,
1241
+ poolsInfo,
1242
+ loanTypesInfo,
1243
+ oraclePrices,
1244
+ additionalInterests
1245
+ );
1246
+ },
1247
+
1248
+ emptyLoanForSimulate(
1249
+ accountId: AccountId,
1250
+ loanTypeId: LoanTypeId
1251
+ ): LoanControllerUserLoan {
1252
+ return {
1253
+ accountId,
1254
+ loanTypeId,
1255
+ colPools: [],
1256
+ borPools: [],
1257
+ userLoanCollateral: [],
1258
+ userLoanBorrow: [],
1259
+ };
1260
+ },
1261
+
1262
+ simulateLoanChanges(
1263
+ loan: LoanControllerUserLoan,
1264
+ changes: Array<LoanChange>
1265
+ ): LoanControllerUserLoan {
1266
+ return TsHubLoan.simulateLoanChanges(loan, changes);
1267
+ },
1268
+ };