@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,197 @@
1
+ import {
2
+ getHubTokenData,
3
+ isHubChain,
4
+ } from '../../chains/evm/hub/utils/chain.js';
5
+ import { ensureNonEmpty, intersect } from '../../utils/array.js';
6
+ import { exhaustiveCheck } from '../../utils/exhaustive-check.js';
7
+ import { TSCore } from '../../lifeline/core/ts-core.js';
8
+ import { DATA_ADAPTERS } from '../constants/adapter.js';
9
+ import { MessageAdapterParamsType } from '../types/adapter.js';
10
+ import { AdapterType } from '../types/message.js';
11
+ import { TokenType } from '../types/token.js';
12
+
13
+ import { getSpokeChain } from './chain.js';
14
+
15
+ import type { NonEmptyArray } from '../../types/generics.js';
16
+ import type {
17
+ MessageAdapterParams,
18
+ ReceiveTokenMessageAdapterParams,
19
+ } from '../types/adapter.js';
20
+ import type { TSChainId, NetworkType } from '../types/chain.js';
21
+ import type { SupportedMessageAdaptersMap } from '../types/message.js';
22
+ import type { CrossChainTokenType, TSTokenId } from '../types/token.js';
23
+
24
+ export function getSpokeAdapterIds(
25
+ tsChainId: TSChainId,
26
+ network: NetworkType
27
+ ): NonEmptyArray<AdapterType> {
28
+ const spokeChain = getSpokeChain(tsChainId, network);
29
+ const { adapters } = spokeChain;
30
+ const adapterIds = Object.keys(adapters).map<AdapterType>(Number);
31
+ return ensureNonEmpty(adapterIds, `No adapters found for chain ${tsChainId}`);
32
+ }
33
+
34
+ export function doesAdapterSupportDataMessage(
35
+ tsChainId: TSChainId,
36
+ adapterId: AdapterType
37
+ ): boolean {
38
+ const isHub = isHubChain(tsChainId, TSCore.getSelectedNetwork());
39
+ return (
40
+ (isHub && adapterId === AdapterType.HUB) ||
41
+ (!isHub && adapterId === AdapterType.WORMHOLE_DATA)
42
+ );
43
+ }
44
+
45
+ export function assertAdapterSupportsDataMessage(
46
+ tsChainId: TSChainId,
47
+ adapterId: AdapterType
48
+ ): void {
49
+ if (!doesAdapterSupportDataMessage(tsChainId, adapterId))
50
+ throw Error(
51
+ `Adapter ${adapterId} does not support data message for tsChainId: ${tsChainId}`
52
+ );
53
+ }
54
+
55
+ export function doesAdapterSupportTokenMessage(
56
+ tsChainId: TSChainId,
57
+ adapterId: AdapterType
58
+ ): boolean {
59
+ const isHub = isHubChain(tsChainId, TSCore.getSelectedNetwork());
60
+ return (
61
+ (isHub && adapterId === AdapterType.HUB) ||
62
+ (!isHub && adapterId === AdapterType.WORMHOLE_DATA)
63
+ );
64
+ }
65
+
66
+ export function assertAdapterSupportsTokenMessage(
67
+ tsChainId: TSChainId,
68
+ adapterId: AdapterType
69
+ ): void {
70
+ if (!doesAdapterSupportTokenMessage(tsChainId, adapterId))
71
+ throw Error(
72
+ `Adapter ${adapterId} does not support token message for tsChainId: ${tsChainId}`
73
+ );
74
+ }
75
+
76
+ export function doesAdapterSupportCrossChainToken(
77
+ crossChainToken: CrossChainTokenType,
78
+ tsChainId: TSChainId,
79
+ adapterId: AdapterType
80
+ ): boolean {
81
+ const isHub = isHubChain(tsChainId, TSCore.getSelectedNetwork());
82
+ return (
83
+ (isHub && adapterId === AdapterType.HUB) ||
84
+ (!isHub && crossChainToken.adapters.includes(adapterId))
85
+ );
86
+ }
87
+
88
+ export function assertCrossChainTokenSupportedByAdapter(
89
+ crossChainToken: CrossChainTokenType,
90
+ tsChainId: TSChainId,
91
+ adapterId: AdapterType
92
+ ): void {
93
+ if (!doesAdapterSupportCrossChainToken(crossChainToken, tsChainId, adapterId))
94
+ throw Error(
95
+ `Adapter ${adapterId} does not support cross chain token: ${crossChainToken.address}`
96
+ );
97
+ }
98
+
99
+ export function assertAdapterSupportsCrossChainToken(
100
+ tsChainId: TSChainId,
101
+ crossChainToken: CrossChainTokenType,
102
+ adapterId: AdapterType
103
+ ): void {
104
+ assertAdapterSupportsTokenMessage(tsChainId, adapterId);
105
+ assertCrossChainTokenSupportedByAdapter(
106
+ crossChainToken,
107
+ tsChainId,
108
+ adapterId
109
+ );
110
+ }
111
+
112
+ export function doesAdapterSupportReceiverValue(
113
+ tsChainId: TSChainId,
114
+ adapterId: AdapterType
115
+ ): boolean {
116
+ const isHub = isHubChain(tsChainId, TSCore.getSelectedNetwork());
117
+ return (
118
+ (isHub && adapterId === AdapterType.HUB) ||
119
+ (!isHub && adapterId === AdapterType.WORMHOLE_DATA)
120
+ );
121
+ }
122
+
123
+ export function assertAdapterSupportsReceiverValue(
124
+ tsChainId: TSChainId,
125
+ adapterId: AdapterType
126
+ ): void {
127
+ if (!doesAdapterSupportReceiverValue(tsChainId, adapterId))
128
+ throw Error(
129
+ `Adapter ${adapterId} does not support receiver value for tsChainId: ${tsChainId}`
130
+ );
131
+ }
132
+
133
+ function getSendTokenAdapterIds(tsTokenId: TSTokenId, network: NetworkType) {
134
+ const hubTokenData = getHubTokenData(tsTokenId, network);
135
+ if (hubTokenData.token.type == TokenType.CROSS_CHAIN)
136
+ return hubTokenData.token.adapters;
137
+ return DATA_ADAPTERS;
138
+ }
139
+
140
+ function getMessageAdapterIds(messageAdapterParams: MessageAdapterParams) {
141
+ const { network, messageAdapterParamType } = messageAdapterParams;
142
+ if (messageAdapterParamType === MessageAdapterParamsType.SendToken)
143
+ return getSendTokenAdapterIds(messageAdapterParams.tsTokenId, network);
144
+ return DATA_ADAPTERS;
145
+ }
146
+
147
+ function getReturnMessageAdapterIds({
148
+ tsTokenId,
149
+ network,
150
+ }: ReceiveTokenMessageAdapterParams) {
151
+ return getSendTokenAdapterIds(tsTokenId, network);
152
+ }
153
+
154
+ export function getSupportedMessageAdapters<T extends MessageAdapterParams>(
155
+ params: T
156
+ ): SupportedMessageAdaptersMap[T['messageAdapterParamType']] {
157
+ const { messageAdapterParamType, sourceTsChainId, network } = params;
158
+ const spokeAdapterIds = getSpokeAdapterIds(sourceTsChainId, network);
159
+ const supportedAdapterIds = ensureNonEmpty(
160
+ getMessageAdapterIds(params).filter(intersect(spokeAdapterIds)),
161
+ `No supported adapters found for chain ${sourceTsChainId}`
162
+ );
163
+
164
+ switch (messageAdapterParamType) {
165
+ case MessageAdapterParamsType.SendToken:
166
+ return {
167
+ adapterIds: supportedAdapterIds,
168
+ returnAdapterIds: supportedAdapterIds,
169
+ } as SupportedMessageAdaptersMap[T['messageAdapterParamType']];
170
+
171
+ case MessageAdapterParamsType.ReceiveToken: {
172
+ const destSpokeAdapterIds = getSpokeAdapterIds(
173
+ params.destTsChainId,
174
+ network
175
+ );
176
+ const supportedReturnAdapterIds = ensureNonEmpty(
177
+ getReturnMessageAdapterIds(params).filter(
178
+ intersect(destSpokeAdapterIds)
179
+ ),
180
+ `No supported return adapters found for chain ${params.destTsChainId}`
181
+ );
182
+ return {
183
+ adapterIds: supportedAdapterIds,
184
+ returnAdapterIds: supportedReturnAdapterIds,
185
+ } as SupportedMessageAdaptersMap[T['messageAdapterParamType']];
186
+ }
187
+
188
+ case MessageAdapterParamsType.Data:
189
+ return {
190
+ adapterIds: supportedAdapterIds,
191
+ returnAdapterIds: [AdapterType.HUB],
192
+ } as SupportedMessageAdaptersMap[T['messageAdapterParamType']];
193
+
194
+ default:
195
+ return exhaustiveCheck(messageAdapterParamType);
196
+ }
197
+ }
@@ -0,0 +1,50 @@
1
+ import { getAddress, pad, sliceHex } from 'viem';
2
+ import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts';
3
+
4
+ import { exhaustiveCheck } from '../../utils/exhaustive-check.js';
5
+ import { BYTES32_LENGTH, EVM_ADDRESS_BYTES_LENGTH } from '../constants/byte.js';
6
+ import { ChainType } from '../types/chain.js';
7
+
8
+ import type {
9
+ AddressType,
10
+ EvmAddress,
11
+ GenericAddress,
12
+ } from '../types/address.js';
13
+
14
+ export function getRandomGenericAddress(): GenericAddress {
15
+ return pad(privateKeyToAccount(generatePrivateKey()).address, {
16
+ size: BYTES32_LENGTH,
17
+ }).toLowerCase() as GenericAddress;
18
+ }
19
+
20
+ export function isGenericAddress(address: GenericAddress): boolean {
21
+ return address.length === 64 + 2;
22
+ }
23
+
24
+ export function convertToGenericAddress<T extends ChainType>(
25
+ address: AddressType<T>,
26
+ fromChainType: ChainType
27
+ ): GenericAddress {
28
+ switch (fromChainType) {
29
+ case ChainType.EVM:
30
+ return pad(address as EvmAddress, {
31
+ size: BYTES32_LENGTH,
32
+ }).toLowerCase() as GenericAddress;
33
+ default:
34
+ return exhaustiveCheck(fromChainType);
35
+ }
36
+ }
37
+
38
+ export function convertFromGenericAddress<T extends ChainType>(
39
+ address: GenericAddress,
40
+ toChainType: ChainType
41
+ ): AddressType<T> {
42
+ switch (toChainType) {
43
+ case ChainType.EVM:
44
+ return getAddress(
45
+ sliceHex(address, BYTES32_LENGTH - EVM_ADDRESS_BYTES_LENGTH)
46
+ ) as EvmAddress;
47
+ default:
48
+ return exhaustiveCheck(toChainType);
49
+ }
50
+ }
@@ -0,0 +1,36 @@
1
+ import { bytesToHex, pad, toHex } from 'viem';
2
+
3
+ import type { Hex } from 'viem';
4
+
5
+ export function getEmptyBytes(length: number): string {
6
+ return pad('0x', { size: length });
7
+ }
8
+
9
+ export function convertNumberToBytes(
10
+ num: number | bigint,
11
+ length: number
12
+ ): Hex {
13
+ // insert 0s at the beginning if data is smaller than length bytes
14
+ const buf = Buffer.alloc(length, 0);
15
+
16
+ // convert num to bytes
17
+ const hex = num.toString(16);
18
+ const isEven = hex.length % 2 === 0;
19
+ const bytes = Buffer.from(isEven ? hex : '0' + hex, 'hex');
20
+
21
+ // write bytes to fixed length buf
22
+ bytes.copy(buf, buf.length - bytes.length);
23
+ return toHex(buf);
24
+ }
25
+
26
+ export function convertStringToBytes(str: string): Hex {
27
+ return toHex('0x' + Buffer.from(str).toString('hex'));
28
+ }
29
+
30
+ export function convertBooleanToByte(bool: boolean): Hex {
31
+ return bool ? '0x01' : '0x00';
32
+ }
33
+
34
+ export function getRandomBytes(length: number): Hex {
35
+ return bytesToHex(crypto.getRandomValues(new Uint8Array(length)));
36
+ }
@@ -0,0 +1,163 @@
1
+ import { getEvmSignerAddress } from '../../chains/evm/common/utils/chain.js';
2
+ import {
3
+ getHubChainAdapterAddress,
4
+ isHubChain,
5
+ } from '../../chains/evm/hub/utils/chain.js';
6
+ import { exhaustiveCheck } from '../../utils/exhaustive-check.js';
7
+ import { TS_CHAIN, SPOKE_CHAIN } from '../constants/chain.js';
8
+ import { ChainType } from '../types/chain.js';
9
+
10
+ import { convertToGenericAddress } from './address.js';
11
+
12
+ import type { GenericAddress } from '../types/address.js';
13
+ import type {
14
+ TSChain,
15
+ TSChainId,
16
+ NetworkType,
17
+ SpokeChain,
18
+ } from '../types/chain.js';
19
+ import type { TSChainSigner } from '../types/core.js';
20
+ import type { AdapterType } from '../types/message.js';
21
+
22
+ import type { TSTokenId, SpokeTokenData } from '../types/token.js';
23
+
24
+ export function getTsChain(
25
+ tsChainId: TSChainId,
26
+ network: NetworkType
27
+ ): TSChain {
28
+ const tsChain = TS_CHAIN[network][tsChainId];
29
+ if (!tsChain)
30
+ throw new Error(`Townsq Chain not found for tsChainId: ${tsChainId}`);
31
+
32
+ return tsChain;
33
+ }
34
+
35
+ export function getTsChainsByNetwork(network: NetworkType): Array<TSChain> {
36
+ return Object.values(TS_CHAIN[network]);
37
+ }
38
+
39
+ export function getTsChainIdsByNetwork(
40
+ networkType: NetworkType
41
+ ): Array<TSChainId> {
42
+ return getTsChainsByNetwork(networkType).map(
43
+ (tsChain) => tsChain.tsChainId
44
+ );
45
+ }
46
+
47
+ export function isSpokeChainSupported(
48
+ tsChainId: TSChainId,
49
+ network: NetworkType
50
+ ): boolean {
51
+ return SPOKE_CHAIN[network][tsChainId] !== undefined;
52
+ }
53
+
54
+ export function assertSpokeChainSupported(
55
+ tsChainId: TSChainId,
56
+ network: NetworkType
57
+ ) {
58
+ if (!isSpokeChainSupported(tsChainId, network))
59
+ throw new Error(`Spoke chain is not supported for tsChainId: ${tsChainId}`);
60
+ }
61
+
62
+ export function getSpokeChain(
63
+ tsChainId: TSChainId,
64
+ network: NetworkType
65
+ ): SpokeChain {
66
+ const spokeChain = SPOKE_CHAIN[network][tsChainId];
67
+ if (!spokeChain)
68
+ throw new Error(`Spoke chain not found for tsChainId: ${tsChainId}`);
69
+
70
+ return spokeChain;
71
+ }
72
+
73
+ export function doesSpokeSupportTsToken(
74
+ spokeChain: SpokeChain,
75
+ tsTokenId: TSTokenId
76
+ ): boolean {
77
+ return spokeChain.tokens[tsTokenId] !== undefined;
78
+ }
79
+
80
+ export function getSpokeTokenData(
81
+ spokeChain: SpokeChain,
82
+ tsTokenId: TSTokenId
83
+ ): SpokeTokenData {
84
+ const tokenData = spokeChain.tokens[tsTokenId];
85
+ if (!tokenData)
86
+ throw new Error(`Spoke Token not found for tsTokenId: ${tsTokenId}`);
87
+
88
+ return tokenData;
89
+ }
90
+
91
+ export function isTsTokenSupported(
92
+ tsTokenId: TSTokenId,
93
+ tsChainId: TSChainId,
94
+ network: NetworkType
95
+ ): boolean {
96
+ const spokeChain = getSpokeChain(tsChainId, network);
97
+ return doesSpokeSupportTsToken(spokeChain, tsTokenId);
98
+ }
99
+
100
+ export function assertSpokeChainSupportTsToken(
101
+ tsChainId: TSChainId,
102
+ tsTokenId: TSTokenId,
103
+ network: NetworkType
104
+ ) {
105
+ if (!isTsTokenSupported(tsTokenId, tsChainId, network))
106
+ throw new Error(
107
+ `Townsq Token ${tsTokenId} is not supported on Townsq Chain ${tsChainId}`
108
+ );
109
+ }
110
+
111
+ export function getSpokeChainAdapterAddress(
112
+ tsChainId: TSChainId,
113
+ network: NetworkType,
114
+ adapterType: AdapterType
115
+ ): GenericAddress {
116
+ const spokeChain = getSpokeChain(tsChainId, network);
117
+ const { adapters } = spokeChain;
118
+ const adapterAddress = adapters[adapterType];
119
+ if (adapterAddress) return adapterAddress;
120
+ throw new Error(
121
+ `Adapter ${adapterType} not found for spoke chain ${tsChainId}`
122
+ );
123
+ }
124
+
125
+ export function getAdapterAddress(
126
+ tsChainId: TSChainId,
127
+ network: NetworkType,
128
+ adapterType: AdapterType
129
+ ) {
130
+ if (isHubChain(tsChainId, network))
131
+ return getHubChainAdapterAddress(network, adapterType);
132
+ return getSpokeChainAdapterAddress(tsChainId, network, adapterType);
133
+ }
134
+
135
+ export function getSpokeChainBridgeRouterAddress(spokeChain: SpokeChain) {
136
+ const { messageDispatcherAddress } = spokeChain;
137
+ return messageDispatcherAddress;
138
+ }
139
+
140
+ export function getSignerGenericAddress(
141
+ tsChainSigner: TSChainSigner
142
+ ): GenericAddress {
143
+ const chainType = tsChainSigner.chainType;
144
+ switch (chainType) {
145
+ case ChainType.EVM:
146
+ return convertToGenericAddress(
147
+ getEvmSignerAddress(tsChainSigner.signer),
148
+ chainType
149
+ );
150
+ default:
151
+ return exhaustiveCheck(chainType);
152
+ }
153
+ }
154
+
155
+ export function assertHubChainSelected(
156
+ tsChainId: TSChainId,
157
+ network: NetworkType
158
+ ) {
159
+ if (!isHubChain(tsChainId, network))
160
+ throw new Error(
161
+ `Wrong chain selected: ${tsChainId}. Expected Hub chain`
162
+ );
163
+ }
@@ -0,0 +1,270 @@
1
+ import * as dn from 'dnum';
2
+
3
+ import { SECONDS_IN_YEAR, expBySquaring, unixTime } from './math-lib.js';
4
+
5
+ import type { Dnum } from 'dnum';
6
+
7
+ export function calcPeriodNumber(offset: bigint, length: bigint): bigint {
8
+ return (BigInt(unixTime()) + offset) / length;
9
+ }
10
+
11
+ export function calcNextPeriodReset(
12
+ periodNumber: bigint,
13
+ offset: bigint,
14
+ length: bigint
15
+ ): bigint {
16
+ return (periodNumber + BigInt(1)) * length - offset;
17
+ }
18
+
19
+ export function calcOverallBorrowInterestRate(
20
+ totalVarDebt: bigint,
21
+ totalStableDebt: bigint,
22
+ variableBorInterestRate: Dnum,
23
+ avgStableBorInterestRate: Dnum
24
+ ): Dnum {
25
+ const totalDebt = totalVarDebt + totalStableDebt;
26
+ if (totalDebt === 0n) return dn.from(0, 18);
27
+
28
+ return dn.div(
29
+ dn.add(
30
+ dn.mul(totalVarDebt, variableBorInterestRate, {
31
+ rounding: 'ROUND_DOWN',
32
+ decimals: 0,
33
+ }),
34
+ dn.mul(totalStableDebt, avgStableBorInterestRate, {
35
+ rounding: 'ROUND_DOWN',
36
+ decimals: 0,
37
+ })
38
+ ),
39
+ totalDebt,
40
+ { rounding: 'ROUND_DOWN', decimals: 18 }
41
+ );
42
+ }
43
+
44
+ export function calcDepositInterestIndex(
45
+ dirt1: Dnum,
46
+ diit1: Dnum,
47
+ latestUpdate: bigint,
48
+ lastTimestamp = BigInt(unixTime())
49
+ ): Dnum {
50
+ const dt = lastTimestamp - latestUpdate;
51
+ return dn.mul(
52
+ diit1,
53
+ dn.add(
54
+ dn.from(1, 18),
55
+ dn.div(dn.mul(dirt1, dt, { rounding: 'ROUND_DOWN' }), SECONDS_IN_YEAR, {
56
+ rounding: 'ROUND_DOWN',
57
+ })
58
+ ),
59
+ { rounding: 'ROUND_DOWN' }
60
+ );
61
+ }
62
+
63
+ export function calcBorrowInterestIndex(
64
+ birt1: Dnum,
65
+ biit1: Dnum,
66
+ latestUpdate: bigint,
67
+ lastTimestamp = BigInt(unixTime())
68
+ ): Dnum {
69
+ const dt = lastTimestamp - latestUpdate;
70
+ return dn.mul(
71
+ biit1,
72
+ expBySquaring(
73
+ dn.add(
74
+ dn.from(1, 18),
75
+ dn.div(birt1, SECONDS_IN_YEAR, { rounding: 'ROUND_DOWN' })
76
+ ),
77
+ dt
78
+ ),
79
+ { rounding: 'ROUND_DOWN' }
80
+ );
81
+ }
82
+
83
+ export function calcRetention(
84
+ actualRetained: bigint,
85
+ totalDebt: bigint,
86
+ overallBorrowInterestRate: Dnum,
87
+ retentionRate: Dnum,
88
+ latestUpdate: bigint,
89
+ lastTimestamp = BigInt(unixTime())
90
+ ): bigint {
91
+ const dt = lastTimestamp - latestUpdate;
92
+
93
+ const [retainedDelta] = dn.div(
94
+ dn.mul(
95
+ dn.mul(
96
+ dn.mul(totalDebt, overallBorrowInterestRate, {
97
+ rounding: 'ROUND_DOWN',
98
+ decimals: 0,
99
+ }),
100
+ retentionRate,
101
+ {
102
+ rounding: 'ROUND_DOWN',
103
+ decimals: 0,
104
+ }
105
+ ),
106
+ dt,
107
+ { rounding: 'ROUND_DOWN' }
108
+ ),
109
+ SECONDS_IN_YEAR,
110
+ {
111
+ rounding: 'ROUND_DOWN',
112
+ }
113
+ );
114
+ return actualRetained + retainedDelta;
115
+ }
116
+
117
+ export function calcRewardIndex(
118
+ used: bigint,
119
+ ma: bigint,
120
+ rit1: Dnum,
121
+ rs: Dnum,
122
+ latestUpdate: bigint
123
+ ): Dnum {
124
+ if (used <= ma) return rit1;
125
+ const dt = BigInt(unixTime()) - latestUpdate;
126
+ return dn.add(
127
+ rit1,
128
+ dn.div(dn.mul(rs, dt, { rounding: 'ROUND_DOWN' }), used, {
129
+ rounding: 'ROUND_DOWN',
130
+ })
131
+ );
132
+ }
133
+
134
+ export function calcAccruedRewards(
135
+ amount: bigint,
136
+ rit: Dnum,
137
+ ritn1: Dnum
138
+ ): bigint {
139
+ const [accruedRewards] = dn.mul([amount, 0], dn.sub(rit, ritn1), {
140
+ rounding: 'ROUND_DOWN',
141
+ });
142
+ return accruedRewards;
143
+ }
144
+
145
+ export function toFAmount(underlyingAmount: bigint, diit: Dnum): bigint {
146
+ const [fAmount] = dn.div([underlyingAmount, 0], diit, {
147
+ rounding: 'ROUND_DOWN',
148
+ });
149
+ return fAmount;
150
+ }
151
+
152
+ export function toUnderlyingAmount(fAmount: bigint, diit: Dnum): bigint {
153
+ const [underlyingAmount] = dn.mul([fAmount, 0], diit, {
154
+ rounding: 'ROUND_DOWN',
155
+ });
156
+ return underlyingAmount;
157
+ }
158
+
159
+ export function calcAssetDollarValue(
160
+ amount: bigint,
161
+ tokenPrice: Dnum,
162
+ tokenDecimals: number
163
+ ): Dnum {
164
+ return dn.mul(tokenPrice, [amount, tokenDecimals], {
165
+ rounding: 'ROUND_DOWN',
166
+ });
167
+ }
168
+
169
+ export function calcCollateralAssetLoanValue(
170
+ amount: bigint,
171
+ tokenPrice: Dnum,
172
+ tokenDecimals: number,
173
+ collateralFactor: Dnum
174
+ ): Dnum {
175
+ return dn.mul(
176
+ calcAssetDollarValue(amount, tokenPrice, tokenDecimals),
177
+ collateralFactor,
178
+ {
179
+ rounding: 'ROUND_DOWN',
180
+ decimals: 8,
181
+ }
182
+ );
183
+ }
184
+
185
+ export function calcBorrowAssetLoanValue(
186
+ amount: bigint,
187
+ tokenPrice: Dnum,
188
+ tokenDecimals: number,
189
+ borrowFactor: Dnum
190
+ ): Dnum {
191
+ return dn.mul(
192
+ calcAssetDollarValue(amount, tokenPrice, tokenDecimals),
193
+ borrowFactor,
194
+ {
195
+ rounding: 'ROUND_UP',
196
+ decimals: 8,
197
+ }
198
+ );
199
+ }
200
+
201
+ export function calcBorrowBalance(
202
+ bbtn1: bigint,
203
+ biit: Dnum,
204
+ biitn1: Dnum
205
+ ): bigint {
206
+ const [borrowBalance] = dn.mul(
207
+ [bbtn1, 0],
208
+ dn.div(biit, biitn1, { rounding: 'ROUND_UP' }),
209
+ {
210
+ rounding: 'ROUND_UP',
211
+ }
212
+ );
213
+ return borrowBalance;
214
+ }
215
+
216
+ export function calcStableInterestRate(
217
+ bbt: bigint,
218
+ amount: bigint,
219
+ sbirtn1: Dnum,
220
+ sbirt1: Dnum
221
+ ): Dnum {
222
+ return dn.div(
223
+ dn.add(dn.mul(sbirtn1, [bbt, 0]), dn.mul(sbirt1, [amount, 0])),
224
+ dn.add([bbt, 0], [amount, 0])
225
+ );
226
+ }
227
+
228
+ export function calcLtvRatio(
229
+ totalBorrowBalanceValue: Dnum,
230
+ totalCollateralBalanceValue: Dnum
231
+ ): Dnum {
232
+ const [, decimals] = totalBorrowBalanceValue;
233
+ if (dn.equal(totalCollateralBalanceValue, 0)) return dn.from(0, decimals);
234
+ return dn.div(totalBorrowBalanceValue, totalCollateralBalanceValue, {
235
+ rounding: 'ROUND_UP',
236
+ });
237
+ }
238
+
239
+ export function calcBorrowUtilisationRatio(
240
+ totalEffectiveBorrowBalanceValue: Dnum,
241
+ totalEffectiveCollateralBalanceValue: Dnum
242
+ ): Dnum {
243
+ const [, decimals] = totalEffectiveBorrowBalanceValue;
244
+ if (dn.equal(totalEffectiveCollateralBalanceValue, 0))
245
+ return dn.from(0, decimals);
246
+ return dn.div(
247
+ totalEffectiveBorrowBalanceValue,
248
+ totalEffectiveCollateralBalanceValue,
249
+ { rounding: 'ROUND_UP' }
250
+ );
251
+ }
252
+
253
+ export function calcLiquidationMargin(
254
+ totalEffectiveBorrowBalanceValue: Dnum,
255
+ totalEffectiveCollateralBalanceValue: Dnum
256
+ ): Dnum {
257
+ const [, decimals] = totalEffectiveBorrowBalanceValue;
258
+ if (dn.equal(totalEffectiveCollateralBalanceValue, 0))
259
+ return dn.from(0, decimals);
260
+ return dn.div(
261
+ dn.sub(
262
+ totalEffectiveCollateralBalanceValue,
263
+ totalEffectiveBorrowBalanceValue
264
+ ),
265
+ totalEffectiveCollateralBalanceValue,
266
+ {
267
+ rounding: 'ROUND_DOWN',
268
+ }
269
+ );
270
+ }