@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,1032 @@
1
+ import { multicall, waitForTransactionReceipt } from 'viem/actions';
2
+
3
+ import { ChainType } from '../../../../common/types/chain.js';
4
+ import { TokenType } from '../../../../common/types/token.js';
5
+ import { convertFromGenericAddress } from '../../../../common/utils/address.js';
6
+ import {
7
+ calcNextPeriodReset,
8
+ calcPeriodNumber,
9
+ } from '../../../../common/utils/formulae.js';
10
+ import { GAS_LIMIT_ESTIMATE_INCREASE } from '../../common/constant/contract.js';
11
+ import { getEvmSignerAccount } from '../../common/utils/chain.js';
12
+ import { sendERC20Approve } from '../../common/utils/contract.js';
13
+ import { getAllowanceStateOverride } from '../../common/utils/tokens.js';
14
+ import { getHubTokenData } from '../../hub/utils/chain.js';
15
+ import {
16
+ getSpokeMessageDispatcherContract,
17
+ getSpokeOperationContract,
18
+ getSpokeTokenContract,
19
+ } from '../utils/contract.js';
20
+
21
+ import type { EvmAddress } from '../../../../common/types/address.js';
22
+ import type {
23
+ TSChainId,
24
+ NetworkType,
25
+ SpokeChain,
26
+ } from '../../../../common/types/chain.js';
27
+ import type {
28
+ AccountId,
29
+ LoanId,
30
+ LoanName,
31
+ LoanTypeId,
32
+ Nonce,
33
+ } from '../../../../common/types/lending.js';
34
+ import type { MessageToSend } from '../../../../common/types/message.js';
35
+ import type {
36
+ TSTokenId,
37
+ SpokeTokenData,
38
+ } from '../../../../common/types/token.js';
39
+ import type {
40
+ PrepareBorrowCall,
41
+ PrepareCreateLoanAndDepositCall,
42
+ PrepareCreateLoanCall,
43
+ PrepareDeleteLoanCall,
44
+ PrepareDepositCall,
45
+ PrepareRepayCall,
46
+ PrepareRepayWithCollateralCall,
47
+ PrepareSwitchBorrowTypeCall,
48
+ PrepareWithdrawCall,
49
+ } from '../../common/types/module.js';
50
+ import type { TokenRateLimit } from '../types/pool.js';
51
+ import type { Client, EstimateGasParameters, WalletClient } from 'viem';
52
+
53
+ export const prepare = {
54
+ async createLoan(
55
+ provider: Client,
56
+ sender: EvmAddress,
57
+ messageToSend: MessageToSend,
58
+ accountId: AccountId,
59
+ nonce: Nonce,
60
+ loanTypeId: LoanTypeId,
61
+ loanName: LoanName,
62
+ spokeChain: SpokeChain,
63
+ transactionOptions: EstimateGasParameters = { account: sender }
64
+ ): Promise<PrepareCreateLoanCall> {
65
+ const spokeOperationAddress = spokeChain.spokeOperationAddress;
66
+
67
+ const spokeOperation = getSpokeOperationContract(
68
+ provider,
69
+ spokeOperationAddress
70
+ );
71
+ const bridgeRouter = getSpokeMessageDispatcherContract(
72
+ provider,
73
+ spokeChain.messageDispatcherAddress
74
+ );
75
+
76
+ // get adapter fees
77
+ const msgValue = await bridgeRouter.read.getSendFee([messageToSend]);
78
+
79
+ // get gas limits
80
+ const gasLimit = await spokeOperation.estimateGas.createLoan(
81
+ [messageToSend.params, accountId, nonce, loanTypeId, loanName],
82
+ {
83
+ value: msgValue,
84
+ ...transactionOptions,
85
+ }
86
+ );
87
+
88
+ return {
89
+ msgValue,
90
+ gasLimit: gasLimit + GAS_LIMIT_ESTIMATE_INCREASE,
91
+ messageParams: messageToSend.params,
92
+ spokeOperationAddress,
93
+ };
94
+ },
95
+
96
+ async deleteLoan(
97
+ provider: Client,
98
+ sender: EvmAddress,
99
+ messageToSend: MessageToSend,
100
+ accountId: AccountId,
101
+ loanId: LoanId,
102
+ spokeChain: SpokeChain,
103
+ transactionOptions: EstimateGasParameters = { account: sender }
104
+ ): Promise<PrepareDeleteLoanCall> {
105
+ const spokeOperationAddress = spokeChain.spokeOperationAddress;
106
+
107
+ const spokeOperation = getSpokeOperationContract(
108
+ provider,
109
+ spokeOperationAddress
110
+ );
111
+ const bridgeRouter = getSpokeMessageDispatcherContract(
112
+ provider,
113
+ spokeChain.messageDispatcherAddress
114
+ );
115
+
116
+ // get adapter fees
117
+ const msgValue = await bridgeRouter.read.getSendFee([messageToSend]);
118
+
119
+ // get gas limits
120
+ const gasLimit = await spokeOperation.estimateGas.deleteLoan(
121
+ [messageToSend.params, accountId, loanId],
122
+ {
123
+ value: msgValue,
124
+ ...transactionOptions,
125
+ }
126
+ );
127
+
128
+ return {
129
+ msgValue,
130
+ gasLimit: gasLimit + GAS_LIMIT_ESTIMATE_INCREASE,
131
+ messageParams: messageToSend.params,
132
+ spokeOperationAddress,
133
+ };
134
+ },
135
+
136
+ async createLoanAndDeposit(
137
+ provider: Client,
138
+ sender: EvmAddress,
139
+ messageToSend: MessageToSend,
140
+ accountId: AccountId,
141
+ nonce: Nonce,
142
+ loanTypeId: LoanTypeId,
143
+ loanName: LoanName,
144
+ amount: bigint,
145
+ spokeChain: SpokeChain,
146
+ spokeTokenData: SpokeTokenData,
147
+ transactionOptions: EstimateGasParameters = { account: sender }
148
+ ) {
149
+ const spokeToken = getSpokeTokenContract(
150
+ provider,
151
+ spokeTokenData.spokeAddress
152
+ );
153
+ const bridgeRouter = getSpokeMessageDispatcherContract(
154
+ provider,
155
+ spokeChain.messageDispatcherAddress
156
+ );
157
+
158
+ const spender = convertFromGenericAddress(
159
+ spokeTokenData.spokeAddress,
160
+ ChainType.EVM
161
+ );
162
+
163
+ // get state override
164
+ let stateOverride;
165
+ if (
166
+ spokeTokenData.token.type === TokenType.ERC20 ||
167
+ spokeTokenData.token.type === TokenType.CROSS_CHAIN
168
+ ) {
169
+ const erc20Address = convertFromGenericAddress(
170
+ spokeTokenData.token.address,
171
+ ChainType.EVM
172
+ );
173
+ stateOverride = getAllowanceStateOverride([
174
+ {
175
+ erc20Address,
176
+ stateDiff: [
177
+ {
178
+ owner: sender,
179
+ spender,
180
+ tsChainId: spokeChain.tsChainId,
181
+ tsTokenId: spokeTokenData.TsTokenId,
182
+ tokenType: spokeTokenData.token.type,
183
+ amount,
184
+ },
185
+ ],
186
+ },
187
+ ]);
188
+ }
189
+
190
+ // get adapter fees
191
+ const adapterFees = await bridgeRouter.read.getSendFee([messageToSend]);
192
+ const value =
193
+ spokeTokenData.token.type === TokenType.NATIVE ? amount : BigInt(0);
194
+ const msgValue = adapterFees + value;
195
+
196
+ // get gas limits
197
+ const gasLimit =
198
+ await spokeToken.estimateGas.initiateLoanAccountWithDeposit(
199
+ [messageToSend.params, accountId, nonce, amount, loanTypeId, loanName],
200
+ {
201
+ value: msgValue,
202
+ ...transactionOptions,
203
+ stateOverride,
204
+ }
205
+ );
206
+
207
+ return {
208
+ msgValue,
209
+ gasLimit: gasLimit + GAS_LIMIT_ESTIMATE_INCREASE,
210
+ messageParams: messageToSend.params,
211
+ spokeTokenData: spokeTokenData,
212
+ };
213
+ },
214
+
215
+ async deposit(
216
+ provider: Client,
217
+ sender: EvmAddress,
218
+ messageToSend: MessageToSend,
219
+ accountId: AccountId,
220
+ loanId: LoanId,
221
+ amount: bigint,
222
+ spokeChain: SpokeChain,
223
+ spokeTokenData: SpokeTokenData,
224
+ transactionOptions: EstimateGasParameters = { account: sender }
225
+ ): Promise<PrepareDepositCall> {
226
+ const spokeToken = getSpokeTokenContract(
227
+ provider,
228
+ spokeTokenData.spokeAddress
229
+ );
230
+ const bridgeRouter = getSpokeMessageDispatcherContract(
231
+ provider,
232
+ spokeChain.messageDispatcherAddress
233
+ );
234
+
235
+ const spender = convertFromGenericAddress(
236
+ spokeTokenData.spokeAddress,
237
+ ChainType.EVM
238
+ );
239
+
240
+ // get state override
241
+ let stateOverride;
242
+ if (
243
+ spokeTokenData.token.type === TokenType.ERC20 ||
244
+ spokeTokenData.token.type === TokenType.CROSS_CHAIN
245
+ ) {
246
+ const erc20Address = convertFromGenericAddress(
247
+ spokeTokenData.token.address,
248
+ ChainType.EVM
249
+ );
250
+ stateOverride = getAllowanceStateOverride([
251
+ {
252
+ erc20Address,
253
+ stateDiff: [
254
+ {
255
+ owner: sender,
256
+ spender,
257
+ tsChainId: spokeChain.tsChainId,
258
+ tsTokenId: spokeTokenData.TsTokenId,
259
+ tokenType: spokeTokenData.token.type,
260
+ amount,
261
+ },
262
+ ],
263
+ },
264
+ ]);
265
+ }
266
+
267
+ // get adapter fees
268
+ const adapterFees = await bridgeRouter.read.getSendFee([messageToSend]);
269
+ const value =
270
+ spokeTokenData.token.type === TokenType.NATIVE ? amount : BigInt(0);
271
+ const msgValue = adapterFees + value;
272
+
273
+ // get gas limits
274
+ const gasLimit = await spokeToken.estimateGas.topup(
275
+ [messageToSend.params, accountId, loanId, amount],
276
+ {
277
+ value: msgValue,
278
+ ...transactionOptions,
279
+ stateOverride,
280
+ }
281
+ );
282
+
283
+ return {
284
+ msgValue,
285
+ gasLimit: gasLimit + GAS_LIMIT_ESTIMATE_INCREASE,
286
+ messageParams: messageToSend.params,
287
+ spokeTokenData: spokeTokenData,
288
+ };
289
+ },
290
+
291
+ async withdraw(
292
+ provider: Client,
293
+ sender: EvmAddress,
294
+ messageToSend: MessageToSend,
295
+ network: NetworkType,
296
+ accountId: AccountId,
297
+ loanId: LoanId,
298
+ tsTokenId: TSTokenId,
299
+ amount: bigint,
300
+ isTAmount: boolean,
301
+ receiverTsChainId: TSChainId,
302
+ spokeChain: SpokeChain,
303
+ transactionOptions: EstimateGasParameters = { account: sender }
304
+ ): Promise<PrepareWithdrawCall> {
305
+ const hubTokenData = getHubTokenData(tsTokenId, network);
306
+
307
+ const spokeOperationAddress = spokeChain.spokeOperationAddress;
308
+ const spokeOperation = getSpokeOperationContract(
309
+ provider,
310
+ spokeOperationAddress
311
+ );
312
+ const spokeBridgeRouter = getSpokeMessageDispatcherContract(
313
+ provider,
314
+ spokeChain.messageDispatcherAddress
315
+ );
316
+
317
+ // get adapter fee
318
+ const msgValue = await spokeBridgeRouter.read.getSendFee([messageToSend]);
319
+
320
+ // get gas limits
321
+ const gasLimit = await spokeOperation.estimateGas.withdraw(
322
+ [
323
+ messageToSend.params,
324
+ accountId,
325
+ loanId,
326
+ hubTokenData.poolId,
327
+ receiverTsChainId,
328
+ amount,
329
+ isTAmount,
330
+ ],
331
+ {
332
+ value: msgValue,
333
+ ...transactionOptions,
334
+ }
335
+ );
336
+
337
+ return {
338
+ msgValue,
339
+ gasLimit: gasLimit + GAS_LIMIT_ESTIMATE_INCREASE,
340
+ messageParams: messageToSend.params,
341
+ spokeOperationAddress,
342
+ };
343
+ },
344
+
345
+ async borrow(
346
+ provider: Client,
347
+ sender: EvmAddress,
348
+ messageToSend: MessageToSend,
349
+ network: NetworkType,
350
+ accountId: AccountId,
351
+ loanId: LoanId,
352
+ tsTokenId: TSTokenId,
353
+ amount: bigint,
354
+ maxStableRate: bigint,
355
+ receiverTSChainId: TSChainId,
356
+ spokeChain: SpokeChain,
357
+ transactionOptions: EstimateGasParameters = { account: sender }
358
+ ): Promise<PrepareBorrowCall> {
359
+ const hubTokenData = getHubTokenData(tsTokenId, network);
360
+
361
+ const spokeOperationAddress = spokeChain.spokeOperationAddress;
362
+ const spokeOperation = getSpokeOperationContract(
363
+ provider,
364
+ spokeOperationAddress
365
+ );
366
+ const spokeBridgeRouter = getSpokeMessageDispatcherContract(
367
+ provider,
368
+ spokeChain.messageDispatcherAddress
369
+ );
370
+
371
+ // get adapter fee
372
+ const msgValue = await spokeBridgeRouter.read.getSendFee([messageToSend]);
373
+
374
+ // get gas limits
375
+ const gasLimit = await spokeOperation.estimateGas.borrow(
376
+ [
377
+ messageToSend.params,
378
+ accountId,
379
+ loanId,
380
+ hubTokenData.poolId,
381
+ receiverTSChainId,
382
+ amount,
383
+ maxStableRate,
384
+ ],
385
+ {
386
+ value: msgValue,
387
+ ...transactionOptions,
388
+ }
389
+ );
390
+
391
+ return {
392
+ msgValue,
393
+ gasLimit: gasLimit + GAS_LIMIT_ESTIMATE_INCREASE,
394
+ messageParams: messageToSend.params,
395
+ spokeOperationAddress,
396
+ };
397
+ },
398
+
399
+ async repay(
400
+ provider: Client,
401
+ sender: EvmAddress,
402
+ messageToSend: MessageToSend,
403
+ accountId: AccountId,
404
+ loanId: LoanId,
405
+ amount: bigint,
406
+ maxOverRepayment: bigint,
407
+ spokeChain: SpokeChain,
408
+ spokeTokenData: SpokeTokenData,
409
+ transactionOptions: EstimateGasParameters = { account: sender }
410
+ ): Promise<PrepareRepayCall> {
411
+ const spokeToken = getSpokeTokenContract(
412
+ provider,
413
+ spokeTokenData.spokeAddress
414
+ );
415
+ const bridgeRouter = getSpokeMessageDispatcherContract(
416
+ provider,
417
+ spokeChain.messageDispatcherAddress
418
+ );
419
+
420
+ const spender = convertFromGenericAddress(
421
+ spokeTokenData.spokeAddress,
422
+ ChainType.EVM
423
+ );
424
+
425
+ // get state override
426
+ let stateOverride;
427
+ if (
428
+ spokeTokenData.token.type === TokenType.ERC20 ||
429
+ spokeTokenData.token.type === TokenType.CROSS_CHAIN
430
+ ) {
431
+ const erc20Address = convertFromGenericAddress(
432
+ spokeTokenData.token.address,
433
+ ChainType.EVM
434
+ );
435
+ stateOverride = getAllowanceStateOverride([
436
+ {
437
+ erc20Address,
438
+ stateDiff: [
439
+ {
440
+ owner: sender,
441
+ spender,
442
+ tsChainId: spokeChain.tsChainId,
443
+ tsTokenId: spokeTokenData.TsTokenId,
444
+ tokenType: spokeTokenData.token.type,
445
+ amount,
446
+ },
447
+ ],
448
+ },
449
+ ]);
450
+ }
451
+
452
+ // get adapter fees
453
+ const adapterFees = await bridgeRouter.read.getSendFee([messageToSend]);
454
+ const value =
455
+ spokeTokenData.token.type === TokenType.NATIVE ? amount : BigInt(0);
456
+ const msgValue = adapterFees + value;
457
+
458
+ // get gas limits
459
+ const gasLimit = await spokeToken.estimateGas.repay(
460
+ [messageToSend.params, accountId, loanId, amount, maxOverRepayment],
461
+ {
462
+ value: msgValue,
463
+ ...transactionOptions,
464
+ stateOverride,
465
+ }
466
+ );
467
+
468
+ return {
469
+ msgValue,
470
+ gasLimit: gasLimit + GAS_LIMIT_ESTIMATE_INCREASE,
471
+ messageParams: messageToSend.params,
472
+ spokeTokenData: spokeTokenData,
473
+ };
474
+ },
475
+
476
+ async repayWithCollateral(
477
+ provider: Client,
478
+ sender: EvmAddress,
479
+ messageToSend: MessageToSend,
480
+ network: NetworkType,
481
+ accountId: AccountId,
482
+ loanId: LoanId,
483
+ tsTokenId: TSTokenId,
484
+ amount: bigint,
485
+ spokeChain: SpokeChain,
486
+ transactionOptions: EstimateGasParameters = { account: sender }
487
+ ): Promise<PrepareRepayWithCollateralCall> {
488
+ const hubTokenData = getHubTokenData(tsTokenId, network);
489
+
490
+ const spokeOperationAddress = spokeChain.spokeOperationAddress;
491
+
492
+ const spokeOperation = getSpokeOperationContract(
493
+ provider,
494
+ spokeOperationAddress
495
+ );
496
+ const bridgeRouter = getSpokeMessageDispatcherContract(
497
+ provider,
498
+ spokeChain.messageDispatcherAddress
499
+ );
500
+
501
+ // get adapter fees
502
+ const msgValue = await bridgeRouter.read.getSendFee([messageToSend]);
503
+
504
+ // get gas limits
505
+ const gasLimit = await spokeOperation.estimateGas.repayWithCollateral(
506
+ [messageToSend.params, accountId, loanId, hubTokenData.poolId, amount],
507
+ {
508
+ value: msgValue,
509
+ ...transactionOptions,
510
+ }
511
+ );
512
+
513
+ return {
514
+ msgValue,
515
+ gasLimit: gasLimit + GAS_LIMIT_ESTIMATE_INCREASE,
516
+ messageParams: messageToSend.params,
517
+ spokeOperationAddress,
518
+ };
519
+ },
520
+
521
+ async switchBorrowType(
522
+ provider: Client,
523
+ sender: EvmAddress,
524
+ messageToSend: MessageToSend,
525
+ network: NetworkType,
526
+ accountId: AccountId,
527
+ loanId: LoanId,
528
+ tsTokenId: TSTokenId,
529
+ maxStableRate: bigint,
530
+ spokeChain: SpokeChain,
531
+ transactionOptions: EstimateGasParameters = { account: sender }
532
+ ): Promise<PrepareSwitchBorrowTypeCall> {
533
+ const hubTokenData = getHubTokenData(tsTokenId, network);
534
+
535
+ const spokeOperationAddress = spokeChain.spokeOperationAddress;
536
+
537
+ const spokeOperation = getSpokeOperationContract(
538
+ provider,
539
+ spokeOperationAddress
540
+ );
541
+ const bridgeRouter = getSpokeMessageDispatcherContract(
542
+ provider,
543
+ spokeChain.messageDispatcherAddress
544
+ );
545
+
546
+ // get adapter fees
547
+ const msgValue = await bridgeRouter.read.getSendFee([messageToSend]);
548
+
549
+ // get gas limits
550
+ const gasLimit = await spokeOperation.estimateGas.changeBorrowMode(
551
+ [
552
+ messageToSend.params,
553
+ accountId,
554
+ loanId,
555
+ hubTokenData.poolId,
556
+ maxStableRate,
557
+ ],
558
+ {
559
+ value: msgValue,
560
+ ...transactionOptions,
561
+ }
562
+ );
563
+
564
+ return {
565
+ msgValue,
566
+ gasLimit: gasLimit + GAS_LIMIT_ESTIMATE_INCREASE,
567
+ messageParams: messageToSend.params,
568
+ spokeOperationAddress,
569
+ };
570
+ },
571
+ };
572
+
573
+ export const write = {
574
+ async createLoan(
575
+ provider: Client,
576
+ signer: WalletClient,
577
+ accountId: AccountId,
578
+ nonce: Nonce,
579
+ loanTypeId: LoanTypeId,
580
+ loanName: LoanName,
581
+ prepareCall: PrepareCreateLoanCall
582
+ ) {
583
+ const {
584
+ msgValue,
585
+ gasLimit,
586
+ maxFeePerGas,
587
+ maxPriorityFeePerGas,
588
+ messageParams,
589
+ spokeOperationAddress,
590
+ } = prepareCall;
591
+
592
+ const spokeOperation = getSpokeOperationContract(
593
+ provider,
594
+ spokeOperationAddress,
595
+ signer
596
+ );
597
+
598
+ return await spokeOperation.write.createLoan(
599
+ [messageParams, accountId, nonce, loanTypeId, loanName],
600
+ {
601
+ account: getEvmSignerAccount(signer),
602
+ chain: signer.chain,
603
+ gas: gasLimit,
604
+ maxFeePerGas,
605
+ maxPriorityFeePerGas,
606
+ value: msgValue,
607
+ }
608
+ );
609
+ },
610
+
611
+ async deleteLoan(
612
+ provider: Client,
613
+ signer: WalletClient,
614
+ accountId: AccountId,
615
+ loanId: LoanId,
616
+ prepareCall: PrepareDeleteLoanCall
617
+ ) {
618
+ const {
619
+ msgValue,
620
+ gasLimit,
621
+ maxFeePerGas,
622
+ maxPriorityFeePerGas,
623
+ messageParams,
624
+ spokeOperationAddress,
625
+ } = prepareCall;
626
+
627
+ const spokeOperation = getSpokeOperationContract(
628
+ provider,
629
+ spokeOperationAddress,
630
+ signer
631
+ );
632
+
633
+ return await spokeOperation.write.deleteLoan(
634
+ [messageParams, accountId, loanId],
635
+ {
636
+ account: getEvmSignerAccount(signer),
637
+ chain: signer.chain,
638
+ gas: gasLimit,
639
+ maxFeePerGas,
640
+ maxPriorityFeePerGas,
641
+ value: msgValue,
642
+ }
643
+ );
644
+ },
645
+
646
+ async createLoanAndDeposit(
647
+ provider: Client,
648
+ signer: WalletClient,
649
+ accountId: AccountId,
650
+ nonce: Nonce,
651
+ loanTypeId: LoanTypeId,
652
+ loanName: LoanName,
653
+ amount: bigint,
654
+ includeApprove = true,
655
+ prepareCall: PrepareCreateLoanAndDepositCall
656
+ ) {
657
+ const {
658
+ msgValue,
659
+ gasLimit,
660
+ maxFeePerGas,
661
+ maxPriorityFeePerGas,
662
+ messageParams,
663
+ spokeTokenData,
664
+ } = prepareCall;
665
+ const { token } = spokeTokenData;
666
+
667
+ const spokeToken = getSpokeTokenContract(
668
+ provider,
669
+ spokeTokenData.spokeAddress,
670
+ signer
671
+ );
672
+
673
+ if (
674
+ includeApprove &&
675
+ (token.type === TokenType.CROSS_CHAIN || token.type === TokenType.ERC20)
676
+ ) {
677
+ const approveTxId = await sendERC20Approve(
678
+ provider,
679
+ token.address,
680
+ signer,
681
+ convertFromGenericAddress(spokeTokenData.spokeAddress, ChainType.EVM),
682
+ amount
683
+ );
684
+ if (approveTxId !== null)
685
+ await waitForTransactionReceipt(provider, { hash: approveTxId });
686
+ }
687
+
688
+ return await spokeToken.write.initiateLoanAccountWithDeposit(
689
+ [messageParams, accountId, nonce, amount, loanTypeId, loanName],
690
+ {
691
+ account: getEvmSignerAccount(signer),
692
+ chain: signer.chain,
693
+ gas: gasLimit,
694
+ maxFeePerGas,
695
+ maxPriorityFeePerGas,
696
+ value: msgValue,
697
+ }
698
+ );
699
+ },
700
+
701
+ async deposit(
702
+ provider: Client,
703
+ signer: WalletClient,
704
+ accountId: AccountId,
705
+ loanId: LoanId,
706
+ amount: bigint,
707
+ includeApprove = true,
708
+ prepareCall: PrepareDepositCall
709
+ ) {
710
+ const {
711
+ msgValue,
712
+ gasLimit,
713
+ maxFeePerGas,
714
+ maxPriorityFeePerGas,
715
+ messageParams,
716
+ spokeTokenData,
717
+ } = prepareCall;
718
+ const { token } = spokeTokenData;
719
+
720
+ const spokeToken = getSpokeTokenContract(
721
+ provider,
722
+ spokeTokenData.spokeAddress,
723
+ signer
724
+ );
725
+
726
+ if (
727
+ includeApprove &&
728
+ (token.type === TokenType.CROSS_CHAIN || token.type === TokenType.ERC20)
729
+ ) {
730
+ const approveTxId = await sendERC20Approve(
731
+ provider,
732
+ token.address,
733
+ signer,
734
+ convertFromGenericAddress(spokeTokenData.spokeAddress, ChainType.EVM),
735
+ amount
736
+ );
737
+ if (approveTxId !== null)
738
+ await waitForTransactionReceipt(provider, { hash: approveTxId });
739
+ }
740
+
741
+ return await spokeToken.write.topup(
742
+ [messageParams, accountId, loanId, amount],
743
+ {
744
+ account: getEvmSignerAccount(signer),
745
+ chain: signer.chain,
746
+ gas: gasLimit,
747
+ maxFeePerGas,
748
+ maxPriorityFeePerGas,
749
+ value: msgValue,
750
+ }
751
+ );
752
+ },
753
+
754
+ async withdraw(
755
+ provider: Client,
756
+ signer: WalletClient,
757
+ accountId: AccountId,
758
+ loanId: LoanId,
759
+ poolId: number,
760
+ amount: bigint,
761
+ isTAmount: boolean,
762
+ receiverChainId: TSChainId,
763
+ prepareCall: PrepareWithdrawCall
764
+ ) {
765
+ const {
766
+ msgValue,
767
+ gasLimit,
768
+ maxFeePerGas,
769
+ maxPriorityFeePerGas,
770
+ messageParams,
771
+ spokeOperationAddress,
772
+ } = prepareCall;
773
+
774
+ const spokeOperation = getSpokeOperationContract(
775
+ provider,
776
+ spokeOperationAddress,
777
+ signer
778
+ );
779
+
780
+ return await spokeOperation.write.withdraw(
781
+ [
782
+ messageParams,
783
+ accountId,
784
+ loanId,
785
+ poolId,
786
+ receiverChainId,
787
+ amount,
788
+ isTAmount,
789
+ ],
790
+ {
791
+ account: getEvmSignerAccount(signer),
792
+ chain: signer.chain,
793
+ gas: gasLimit,
794
+ maxFeePerGas,
795
+ maxPriorityFeePerGas,
796
+ value: msgValue,
797
+ }
798
+ );
799
+ },
800
+
801
+ async borrow(
802
+ provider: Client,
803
+ signer: WalletClient,
804
+ accountId: AccountId,
805
+ loanId: LoanId,
806
+ poolId: number,
807
+ amount: bigint,
808
+ maxStableRate: bigint,
809
+ receiverChainId: TSChainId,
810
+ prepareCall: PrepareBorrowCall
811
+ ) {
812
+ const {
813
+ msgValue,
814
+ gasLimit,
815
+ maxFeePerGas,
816
+ maxPriorityFeePerGas,
817
+ messageParams,
818
+ spokeOperationAddress,
819
+ } = prepareCall;
820
+
821
+ const spokeOperation = getSpokeOperationContract(
822
+ provider,
823
+ spokeOperationAddress,
824
+ signer
825
+ );
826
+
827
+ return await spokeOperation.write.borrow(
828
+ [
829
+ messageParams,
830
+ accountId,
831
+ loanId,
832
+ poolId,
833
+ receiverChainId,
834
+ amount,
835
+ maxStableRate,
836
+ ],
837
+ {
838
+ account: getEvmSignerAccount(signer),
839
+ chain: signer.chain,
840
+ gas: gasLimit,
841
+ maxFeePerGas,
842
+ maxPriorityFeePerGas,
843
+ value: msgValue,
844
+ }
845
+ );
846
+ },
847
+
848
+ async repay(
849
+ provider: Client,
850
+ signer: WalletClient,
851
+ accountId: AccountId,
852
+ loanId: LoanId,
853
+ amount: bigint,
854
+ maxOverRepayment: bigint,
855
+ includeApprove = true,
856
+ prepareCall: PrepareRepayCall
857
+ ) {
858
+ const {
859
+ msgValue,
860
+ gasLimit,
861
+ maxFeePerGas,
862
+ maxPriorityFeePerGas,
863
+ messageParams,
864
+ spokeTokenData,
865
+ } = prepareCall;
866
+ const { token } = spokeTokenData;
867
+
868
+ const spokeToken = getSpokeTokenContract(
869
+ provider,
870
+ spokeTokenData.spokeAddress,
871
+ signer
872
+ );
873
+
874
+ if (
875
+ includeApprove &&
876
+ (token.type === TokenType.CROSS_CHAIN || token.type === TokenType.ERC20)
877
+ ) {
878
+ const approveTxId = await sendERC20Approve(
879
+ provider,
880
+ token.address,
881
+ signer,
882
+ convertFromGenericAddress(spokeTokenData.spokeAddress, ChainType.EVM),
883
+ amount
884
+ );
885
+ if (approveTxId !== null)
886
+ await waitForTransactionReceipt(provider, { hash: approveTxId });
887
+ }
888
+
889
+ return await spokeToken.write.repay(
890
+ [messageParams, accountId, loanId, amount, maxOverRepayment],
891
+ {
892
+ account: getEvmSignerAccount(signer),
893
+ chain: signer.chain,
894
+ gas: gasLimit,
895
+ maxFeePerGas,
896
+ maxPriorityFeePerGas,
897
+ value: msgValue,
898
+ }
899
+ );
900
+ },
901
+
902
+ async repayWithCollateral(
903
+ provider: Client,
904
+ signer: WalletClient,
905
+ accountId: AccountId,
906
+ loanId: LoanId,
907
+ poolId: number,
908
+ amount: bigint,
909
+ prepareCall: PrepareRepayWithCollateralCall
910
+ ) {
911
+ const {
912
+ msgValue,
913
+ gasLimit,
914
+ maxFeePerGas,
915
+ maxPriorityFeePerGas,
916
+ messageParams,
917
+ spokeOperationAddress,
918
+ } = prepareCall;
919
+
920
+ const spokeOperation = getSpokeOperationContract(
921
+ provider,
922
+ spokeOperationAddress,
923
+ signer
924
+ );
925
+
926
+ return await spokeOperation.write.repayWithCollateral(
927
+ [messageParams, accountId, loanId, poolId, amount],
928
+ {
929
+ account: getEvmSignerAccount(signer),
930
+ chain: signer.chain,
931
+ gas: gasLimit,
932
+ maxFeePerGas,
933
+ maxPriorityFeePerGas,
934
+ value: msgValue,
935
+ }
936
+ );
937
+ },
938
+
939
+ async switchBorrowType(
940
+ provider: Client,
941
+ signer: WalletClient,
942
+ accountId: AccountId,
943
+ loanId: LoanId,
944
+ poolId: number,
945
+ maxStableRate: bigint,
946
+ prepareCall: PrepareSwitchBorrowTypeCall
947
+ ) {
948
+ const {
949
+ msgValue,
950
+ gasLimit,
951
+ maxFeePerGas,
952
+ maxPriorityFeePerGas,
953
+ messageParams,
954
+ spokeOperationAddress,
955
+ } = prepareCall;
956
+
957
+ const spokeOperation = getSpokeOperationContract(
958
+ provider,
959
+ spokeOperationAddress,
960
+ signer
961
+ );
962
+
963
+ return await spokeOperation.write.changeBorrowMode(
964
+ [messageParams, accountId, loanId, poolId, maxStableRate],
965
+ {
966
+ account: getEvmSignerAccount(signer),
967
+ chain: signer.chain,
968
+ gas: gasLimit,
969
+ maxFeePerGas,
970
+ maxPriorityFeePerGas,
971
+ value: msgValue,
972
+ }
973
+ );
974
+ },
975
+ };
976
+
977
+ export const read = {
978
+ async rateLimitInfo(
979
+ provider: Client,
980
+ token: SpokeTokenData
981
+ ): Promise<TokenRateLimit> {
982
+ const spokeToken = getSpokeTokenContract(provider, token.spokeAddress);
983
+
984
+ // get rate limit data
985
+ const [bucketConfig, oldPeriodNumber, oldCurrentCapacity] = await multicall(
986
+ provider,
987
+ {
988
+ contracts: [
989
+ {
990
+ address: spokeToken.address,
991
+ abi: spokeToken.abi,
992
+ functionName: 'bucketConfig',
993
+ },
994
+ {
995
+ address: spokeToken.address,
996
+ abi: spokeToken.abi,
997
+ functionName: 'currentPeriodNumber',
998
+ },
999
+ {
1000
+ address: spokeToken.address,
1001
+ abi: spokeToken.abi,
1002
+ functionName: 'currentCapacity',
1003
+ },
1004
+ ],
1005
+ allowFailure: false,
1006
+ }
1007
+ );
1008
+
1009
+ // TODO consider min limit
1010
+ const [periodLength, periodOffset, periodLimit] = bucketConfig;
1011
+ const newPeriodNumber = calcPeriodNumber(
1012
+ BigInt(periodOffset),
1013
+ BigInt(periodLength)
1014
+ );
1015
+ const isNewPeriod = newPeriodNumber !== BigInt(oldPeriodNumber);
1016
+ const currentCapacity = isNewPeriod ? periodLimit : oldCurrentCapacity;
1017
+ const nextPeriodReset = calcNextPeriodReset(
1018
+ newPeriodNumber,
1019
+ BigInt(periodOffset),
1020
+ BigInt(periodLength)
1021
+ );
1022
+
1023
+ // build rate limit info
1024
+ return {
1025
+ periodLength: BigInt(periodLength),
1026
+ periodOffset: BigInt(periodOffset),
1027
+ periodLimit: BigInt(periodLimit),
1028
+ currentCapacity,
1029
+ nextPeriodReset,
1030
+ };
1031
+ },
1032
+ };