@folks-finance/xchain-sdk 0.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 (346) hide show
  1. package/README.md +1 -0
  2. package/dist/chains/evm/common/constants/abi/ccip-data-adapter-abi.d.ts +796 -0
  3. package/dist/chains/evm/common/constants/abi/ccip-data-adapter-abi.js +614 -0
  4. package/dist/chains/evm/common/constants/abi/ccip-data-adapter-abi.js.map +1 -0
  5. package/dist/chains/evm/common/constants/abi/erc-20-abi.d.ts +235 -0
  6. package/dist/chains/evm/common/constants/abi/erc-20-abi.js +157 -0
  7. package/dist/chains/evm/common/constants/abi/erc-20-abi.js.map +1 -0
  8. package/dist/chains/evm/common/constants/abi/wormhole-data-adapter-abi.d.ts +807 -0
  9. package/dist/chains/evm/common/constants/abi/wormhole-data-adapter-abi.js +621 -0
  10. package/dist/chains/evm/common/constants/abi/wormhole-data-adapter-abi.js.map +1 -0
  11. package/dist/chains/evm/common/constants/chain.d.ts +2349 -0
  12. package/dist/chains/evm/common/constants/chain.js +45 -0
  13. package/dist/chains/evm/common/constants/chain.js.map +1 -0
  14. package/dist/chains/evm/common/constants/contract.d.ts +2 -0
  15. package/dist/chains/evm/common/constants/contract.js +6 -0
  16. package/dist/chains/evm/common/constants/contract.js.map +1 -0
  17. package/dist/chains/evm/common/constants/tokens.d.ts +6 -0
  18. package/dist/chains/evm/common/constants/tokens.js +33 -0
  19. package/dist/chains/evm/common/constants/tokens.js.map +1 -0
  20. package/dist/chains/evm/common/types/chain.d.ts +10 -0
  21. package/dist/chains/evm/common/types/chain.js +2 -0
  22. package/dist/chains/evm/common/types/chain.js.map +1 -0
  23. package/dist/chains/evm/common/types/contract.d.ts +8 -0
  24. package/dist/chains/evm/common/types/contract.js +2 -0
  25. package/dist/chains/evm/common/types/contract.js.map +1 -0
  26. package/dist/chains/evm/common/types/gmp.d.ts +14 -0
  27. package/dist/chains/evm/common/types/gmp.js +2 -0
  28. package/dist/chains/evm/common/types/gmp.js.map +1 -0
  29. package/dist/chains/evm/common/types/index.d.ts +3 -0
  30. package/dist/chains/evm/common/types/index.js +4 -0
  31. package/dist/chains/evm/common/types/index.js.map +1 -0
  32. package/dist/chains/evm/common/types/module.d.ts +66 -0
  33. package/dist/chains/evm/common/types/module.js +2 -0
  34. package/dist/chains/evm/common/types/module.js.map +1 -0
  35. package/dist/chains/evm/common/types/tokens.d.ts +28 -0
  36. package/dist/chains/evm/common/types/tokens.js +2 -0
  37. package/dist/chains/evm/common/types/tokens.js.map +1 -0
  38. package/dist/chains/evm/common/utils/chain.d.ts +6 -0
  39. package/dist/chains/evm/common/utils/chain.js +16 -0
  40. package/dist/chains/evm/common/utils/chain.js.map +1 -0
  41. package/dist/chains/evm/common/utils/contract.d.ts +6006 -0
  42. package/dist/chains/evm/common/utils/contract.js +54 -0
  43. package/dist/chains/evm/common/utils/contract.js.map +1 -0
  44. package/dist/chains/evm/common/utils/gmp.d.ts +4 -0
  45. package/dist/chains/evm/common/utils/gmp.js +13 -0
  46. package/dist/chains/evm/common/utils/gmp.js.map +1 -0
  47. package/dist/chains/evm/common/utils/message.d.ts +22 -0
  48. package/dist/chains/evm/common/utils/message.js +398 -0
  49. package/dist/chains/evm/common/utils/message.js.map +1 -0
  50. package/dist/chains/evm/common/utils/provider.d.ts +5 -0
  51. package/dist/chains/evm/common/utils/provider.js +24 -0
  52. package/dist/chains/evm/common/utils/provider.js.map +1 -0
  53. package/dist/chains/evm/common/utils/tokens.d.ts +10 -0
  54. package/dist/chains/evm/common/utils/tokens.js +37 -0
  55. package/dist/chains/evm/common/utils/tokens.js.map +1 -0
  56. package/dist/chains/evm/hub/constants/abi/account-manager-abi.d.ts +907 -0
  57. package/dist/chains/evm/hub/constants/abi/account-manager-abi.js +686 -0
  58. package/dist/chains/evm/hub/constants/abi/account-manager-abi.js.map +1 -0
  59. package/dist/chains/evm/hub/constants/abi/bridge-router-hub-abi.d.ts +969 -0
  60. package/dist/chains/evm/hub/constants/abi/bridge-router-hub-abi.js +764 -0
  61. package/dist/chains/evm/hub/constants/abi/bridge-router-hub-abi.js.map +1 -0
  62. package/dist/chains/evm/hub/constants/abi/hub-abi.d.ts +285 -0
  63. package/dist/chains/evm/hub/constants/abi/hub-abi.js +187 -0
  64. package/dist/chains/evm/hub/constants/abi/hub-abi.js.map +1 -0
  65. package/dist/chains/evm/hub/constants/abi/hub-pool-abi.d.ts +1742 -0
  66. package/dist/chains/evm/hub/constants/abi/hub-pool-abi.js +1346 -0
  67. package/dist/chains/evm/hub/constants/abi/hub-pool-abi.js.map +1 -0
  68. package/dist/chains/evm/hub/constants/abi/loan-manager-abi.d.ts +1559 -0
  69. package/dist/chains/evm/hub/constants/abi/loan-manager-abi.js +1040 -0
  70. package/dist/chains/evm/hub/constants/abi/loan-manager-abi.js.map +1 -0
  71. package/dist/chains/evm/hub/constants/abi/oracle-manager-abi.d.ts +495 -0
  72. package/dist/chains/evm/hub/constants/abi/oracle-manager-abi.js +389 -0
  73. package/dist/chains/evm/hub/constants/abi/oracle-manager-abi.js.map +1 -0
  74. package/dist/chains/evm/hub/constants/chain.d.ts +3 -0
  75. package/dist/chains/evm/hub/constants/chain.js +96 -0
  76. package/dist/chains/evm/hub/constants/chain.js.map +1 -0
  77. package/dist/chains/evm/hub/modules/folks-hub-account.d.ts +15 -0
  78. package/dist/chains/evm/hub/modules/folks-hub-account.js +98 -0
  79. package/dist/chains/evm/hub/modules/folks-hub-account.js.map +1 -0
  80. package/dist/chains/evm/hub/modules/folks-hub-gmp.d.ts +14 -0
  81. package/dist/chains/evm/hub/modules/folks-hub-gmp.js +57 -0
  82. package/dist/chains/evm/hub/modules/folks-hub-gmp.js.map +1 -0
  83. package/dist/chains/evm/hub/modules/folks-hub-loan.d.ts +25 -0
  84. package/dist/chains/evm/hub/modules/folks-hub-loan.js +397 -0
  85. package/dist/chains/evm/hub/modules/folks-hub-loan.js.map +1 -0
  86. package/dist/chains/evm/hub/modules/folks-hub-oracle.d.ts +5 -0
  87. package/dist/chains/evm/hub/modules/folks-hub-oracle.js +24 -0
  88. package/dist/chains/evm/hub/modules/folks-hub-oracle.js.map +1 -0
  89. package/dist/chains/evm/hub/modules/folks-hub-pool.d.ts +5 -0
  90. package/dist/chains/evm/hub/modules/folks-hub-pool.js +114 -0
  91. package/dist/chains/evm/hub/modules/folks-hub-pool.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/types/account.d.ts +23 -0
  96. package/dist/chains/evm/hub/types/account.js +2 -0
  97. package/dist/chains/evm/hub/types/account.js.map +1 -0
  98. package/dist/chains/evm/hub/types/chain.d.ts +15 -0
  99. package/dist/chains/evm/hub/types/chain.js +2 -0
  100. package/dist/chains/evm/hub/types/chain.js.map +1 -0
  101. package/dist/chains/evm/hub/types/loan.d.ts +126 -0
  102. package/dist/chains/evm/hub/types/loan.js +9 -0
  103. package/dist/chains/evm/hub/types/loan.js.map +1 -0
  104. package/dist/chains/evm/hub/types/oracle.d.ts +4 -0
  105. package/dist/chains/evm/hub/types/oracle.js +2 -0
  106. package/dist/chains/evm/hub/types/oracle.js.map +1 -0
  107. package/dist/chains/evm/hub/types/pool.d.ts +60 -0
  108. package/dist/chains/evm/hub/types/pool.js +2 -0
  109. package/dist/chains/evm/hub/types/pool.js.map +1 -0
  110. package/dist/chains/evm/hub/types/token.d.ts +9 -0
  111. package/dist/chains/evm/hub/types/token.js +2 -0
  112. package/dist/chains/evm/hub/types/token.js.map +1 -0
  113. package/dist/chains/evm/hub/utils/chain.d.ts +13 -0
  114. package/dist/chains/evm/hub/utils/chain.js +29 -0
  115. package/dist/chains/evm/hub/utils/chain.js.map +1 -0
  116. package/dist/chains/evm/hub/utils/contract.d.ts +17 -0
  117. package/dist/chains/evm/hub/utils/contract.js +52 -0
  118. package/dist/chains/evm/hub/utils/contract.js.map +1 -0
  119. package/dist/chains/evm/hub/utils/events.d.ts +24 -0
  120. package/dist/chains/evm/hub/utils/events.js +97 -0
  121. package/dist/chains/evm/hub/utils/events.js.map +1 -0
  122. package/dist/chains/evm/hub/utils/loan.d.ts +4 -0
  123. package/dist/chains/evm/hub/utils/loan.js +36 -0
  124. package/dist/chains/evm/hub/utils/loan.js.map +1 -0
  125. package/dist/chains/evm/spoke/constants/abi/bridge-router-spoke-abi.d.ts +951 -0
  126. package/dist/chains/evm/spoke/constants/abi/bridge-router-spoke-abi.js +754 -0
  127. package/dist/chains/evm/spoke/constants/abi/bridge-router-spoke-abi.js.map +1 -0
  128. package/dist/chains/evm/spoke/constants/abi/spoke-common-abi.d.ts +1101 -0
  129. package/dist/chains/evm/spoke/constants/abi/spoke-common-abi.js +710 -0
  130. package/dist/chains/evm/spoke/constants/abi/spoke-common-abi.js.map +1 -0
  131. package/dist/chains/evm/spoke/constants/abi/spoke-token-abi.d.ts +882 -0
  132. package/dist/chains/evm/spoke/constants/abi/spoke-token-abi.js +643 -0
  133. package/dist/chains/evm/spoke/constants/abi/spoke-token-abi.js.map +1 -0
  134. package/dist/chains/evm/spoke/modules/folks-evm-account.d.ts +18 -0
  135. package/dist/chains/evm/spoke/modules/folks-evm-account.js +119 -0
  136. package/dist/chains/evm/spoke/modules/folks-evm-account.js.map +1 -0
  137. package/dist/chains/evm/spoke/modules/folks-evm-gmp.d.ts +14 -0
  138. package/dist/chains/evm/spoke/modules/folks-evm-gmp.js +57 -0
  139. package/dist/chains/evm/spoke/modules/folks-evm-gmp.js.map +1 -0
  140. package/dist/chains/evm/spoke/modules/folks-evm-loan.d.ts +39 -0
  141. package/dist/chains/evm/spoke/modules/folks-evm-loan.js +396 -0
  142. package/dist/chains/evm/spoke/modules/folks-evm-loan.js.map +1 -0
  143. package/dist/chains/evm/spoke/modules/index.d.ts +3 -0
  144. package/dist/chains/evm/spoke/modules/index.js +4 -0
  145. package/dist/chains/evm/spoke/modules/index.js.map +1 -0
  146. package/dist/chains/evm/spoke/types/pool.d.ts +7 -0
  147. package/dist/chains/evm/spoke/types/pool.js +2 -0
  148. package/dist/chains/evm/spoke/types/pool.js.map +1 -0
  149. package/dist/chains/evm/spoke/utils/contract.d.ts +12 -0
  150. package/dist/chains/evm/spoke/utils/contract.js +28 -0
  151. package/dist/chains/evm/spoke/utils/contract.js.map +1 -0
  152. package/dist/common/constants/adapter.d.ts +4 -0
  153. package/dist/common/constants/adapter.js +5 -0
  154. package/dist/common/constants/adapter.js.map +1 -0
  155. package/dist/common/constants/bytes.d.ts +5 -0
  156. package/dist/common/constants/bytes.js +6 -0
  157. package/dist/common/constants/bytes.js.map +1 -0
  158. package/dist/common/constants/chain.d.ts +15 -0
  159. package/dist/common/constants/chain.js +152 -0
  160. package/dist/common/constants/chain.js.map +1 -0
  161. package/dist/common/constants/gmp.d.ts +4 -0
  162. package/dist/common/constants/gmp.js +32 -0
  163. package/dist/common/constants/gmp.js.map +1 -0
  164. package/dist/common/constants/lending.d.ts +1 -0
  165. package/dist/common/constants/lending.js +3 -0
  166. package/dist/common/constants/lending.js.map +1 -0
  167. package/dist/common/constants/message.d.ts +4 -0
  168. package/dist/common/constants/message.js +5 -0
  169. package/dist/common/constants/message.js.map +1 -0
  170. package/dist/common/constants/pool.d.ts +8 -0
  171. package/dist/common/constants/pool.js +10 -0
  172. package/dist/common/constants/pool.js.map +1 -0
  173. package/dist/common/constants/token.d.ts +2 -0
  174. package/dist/common/constants/token.js +3 -0
  175. package/dist/common/constants/token.js.map +1 -0
  176. package/dist/common/types/adapter.d.ts +30 -0
  177. package/dist/common/types/adapter.js +7 -0
  178. package/dist/common/types/adapter.js.map +1 -0
  179. package/dist/common/types/address.d.ts +9 -0
  180. package/dist/common/types/address.js +2 -0
  181. package/dist/common/types/address.js.map +1 -0
  182. package/dist/common/types/brand.d.ts +6 -0
  183. package/dist/common/types/brand.js +2 -0
  184. package/dist/common/types/brand.js.map +1 -0
  185. package/dist/common/types/chain.d.ts +29 -0
  186. package/dist/common/types/chain.js +10 -0
  187. package/dist/common/types/chain.js.map +1 -0
  188. package/dist/common/types/core.d.ts +28 -0
  189. package/dist/common/types/core.js +2 -0
  190. package/dist/common/types/core.js.map +1 -0
  191. package/dist/common/types/gmp.d.ts +17 -0
  192. package/dist/common/types/gmp.js +6 -0
  193. package/dist/common/types/gmp.js.map +1 -0
  194. package/dist/common/types/lending.d.ts +4 -0
  195. package/dist/common/types/lending.js +2 -0
  196. package/dist/common/types/lending.js.map +1 -0
  197. package/dist/common/types/message.d.ts +239 -0
  198. package/dist/common/types/message.js +33 -0
  199. package/dist/common/types/message.js.map +1 -0
  200. package/dist/common/types/module.d.ts +21 -0
  201. package/dist/common/types/module.js +6 -0
  202. package/dist/common/types/module.js.map +1 -0
  203. package/dist/common/types/token.d.ts +42 -0
  204. package/dist/common/types/token.js +15 -0
  205. package/dist/common/types/token.js.map +1 -0
  206. package/dist/common/utils/adapter.d.ts +11 -0
  207. package/dist/common/utils/adapter.js +63 -0
  208. package/dist/common/utils/adapter.js.map +1 -0
  209. package/dist/common/utils/address.d.ts +8 -0
  210. package/dist/common/utils/address.js +35 -0
  211. package/dist/common/utils/address.js.map +1 -0
  212. package/dist/common/utils/bytes.d.ts +9 -0
  213. package/dist/common/utils/bytes.js +34 -0
  214. package/dist/common/utils/bytes.js.map +1 -0
  215. package/dist/common/utils/chain.d.ts +19 -0
  216. package/dist/common/utils/chain.js +74 -0
  217. package/dist/common/utils/chain.js.map +1 -0
  218. package/dist/common/utils/formulae.d.ts +15 -0
  219. package/dist/common/utils/formulae.js +77 -0
  220. package/dist/common/utils/formulae.js.map +1 -0
  221. package/dist/common/utils/gmp.d.ts +4 -0
  222. package/dist/common/utils/gmp.js +14 -0
  223. package/dist/common/utils/gmp.js.map +1 -0
  224. package/dist/common/utils/math-lib.d.ts +9 -0
  225. package/dist/common/utils/math-lib.js +38 -0
  226. package/dist/common/utils/math-lib.js.map +1 -0
  227. package/dist/common/utils/messages.d.ts +7 -0
  228. package/dist/common/utils/messages.js +93 -0
  229. package/dist/common/utils/messages.js.map +1 -0
  230. package/dist/common/utils/token.d.ts +2 -0
  231. package/dist/common/utils/token.js +5 -0
  232. package/dist/common/utils/token.js.map +1 -0
  233. package/dist/index.d.ts +30 -0
  234. package/dist/index.js +38 -0
  235. package/dist/index.js.map +1 -0
  236. package/dist/utils/exhaustive-check.d.ts +1 -0
  237. package/dist/utils/exhaustive-check.js +4 -0
  238. package/dist/utils/exhaustive-check.js.map +1 -0
  239. package/dist/xchain/core/folks-core.d.ts +24 -0
  240. package/dist/xchain/core/folks-core.js +100 -0
  241. package/dist/xchain/core/folks-core.js.map +1 -0
  242. package/dist/xchain/modules/folks-account.d.ts +30 -0
  243. package/dist/xchain/modules/folks-account.js +205 -0
  244. package/dist/xchain/modules/folks-account.js.map +1 -0
  245. package/dist/xchain/modules/folks-gmp.d.ts +12 -0
  246. package/dist/xchain/modules/folks-gmp.js +53 -0
  247. package/dist/xchain/modules/folks-gmp.js.map +1 -0
  248. package/dist/xchain/modules/folks-loan.d.ts +68 -0
  249. package/dist/xchain/modules/folks-loan.js +598 -0
  250. package/dist/xchain/modules/folks-loan.js.map +1 -0
  251. package/dist/xchain/modules/folks-oracle.d.ts +4 -0
  252. package/dist/xchain/modules/folks-oracle.js +11 -0
  253. package/dist/xchain/modules/folks-oracle.js.map +1 -0
  254. package/dist/xchain/modules/folks-pool.d.ts +5 -0
  255. package/dist/xchain/modules/folks-pool.js +8 -0
  256. package/dist/xchain/modules/folks-pool.js.map +1 -0
  257. package/dist/xchain/modules/index.d.ts +5 -0
  258. package/dist/xchain/modules/index.js +6 -0
  259. package/dist/xchain/modules/index.js.map +1 -0
  260. package/package.json +79 -0
  261. package/src/chains/evm/common/constants/abi/ccip-data-adapter-abi.ts +613 -0
  262. package/src/chains/evm/common/constants/abi/erc-20-abi.ts +156 -0
  263. package/src/chains/evm/common/constants/abi/wormhole-data-adapter-abi.ts +620 -0
  264. package/src/chains/evm/common/constants/chain.ts +56 -0
  265. package/src/chains/evm/common/constants/contract.ts +7 -0
  266. package/src/chains/evm/common/constants/tokens.ts +39 -0
  267. package/src/chains/evm/common/types/chain.ts +23 -0
  268. package/src/chains/evm/common/types/contract.ts +7 -0
  269. package/src/chains/evm/common/types/gmp.ts +15 -0
  270. package/src/chains/evm/common/types/index.ts +3 -0
  271. package/src/chains/evm/common/types/module.ts +85 -0
  272. package/src/chains/evm/common/types/tokens.ts +31 -0
  273. package/src/chains/evm/common/utils/chain.ts +20 -0
  274. package/src/chains/evm/common/utils/contract.ts +84 -0
  275. package/src/chains/evm/common/utils/gmp.ts +24 -0
  276. package/src/chains/evm/common/utils/message.ts +496 -0
  277. package/src/chains/evm/common/utils/provider.ts +32 -0
  278. package/src/chains/evm/common/utils/tokens.ts +52 -0
  279. package/src/chains/evm/hub/constants/abi/account-manager-abi.ts +685 -0
  280. package/src/chains/evm/hub/constants/abi/bridge-router-hub-abi.ts +763 -0
  281. package/src/chains/evm/hub/constants/abi/hub-abi.ts +186 -0
  282. package/src/chains/evm/hub/constants/abi/hub-pool-abi.ts +1345 -0
  283. package/src/chains/evm/hub/constants/abi/loan-manager-abi.ts +1039 -0
  284. package/src/chains/evm/hub/constants/abi/oracle-manager-abi.ts +388 -0
  285. package/src/chains/evm/hub/constants/chain.ts +130 -0
  286. package/src/chains/evm/hub/modules/folks-hub-account.ts +137 -0
  287. package/src/chains/evm/hub/modules/folks-hub-gmp.ts +105 -0
  288. package/src/chains/evm/hub/modules/folks-hub-loan.ts +603 -0
  289. package/src/chains/evm/hub/modules/folks-hub-oracle.ts +38 -0
  290. package/src/chains/evm/hub/modules/folks-hub-pool.ts +171 -0
  291. package/src/chains/evm/hub/modules/index.ts +5 -0
  292. package/src/chains/evm/hub/types/account.ts +27 -0
  293. package/src/chains/evm/hub/types/chain.ts +16 -0
  294. package/src/chains/evm/hub/types/loan.ts +147 -0
  295. package/src/chains/evm/hub/types/oracle.ts +6 -0
  296. package/src/chains/evm/hub/types/pool.ts +66 -0
  297. package/src/chains/evm/hub/types/token.ts +10 -0
  298. package/src/chains/evm/hub/utils/chain.ts +41 -0
  299. package/src/chains/evm/hub/utils/contract.ts +98 -0
  300. package/src/chains/evm/hub/utils/events.ts +112 -0
  301. package/src/chains/evm/hub/utils/loan.ts +60 -0
  302. package/src/chains/evm/spoke/constants/abi/bridge-router-spoke-abi.ts +753 -0
  303. package/src/chains/evm/spoke/constants/abi/spoke-common-abi.ts +709 -0
  304. package/src/chains/evm/spoke/constants/abi/spoke-token-abi.ts +642 -0
  305. package/src/chains/evm/spoke/modules/folks-evm-account.ts +228 -0
  306. package/src/chains/evm/spoke/modules/folks-evm-gmp.ts +105 -0
  307. package/src/chains/evm/spoke/modules/folks-evm-loan.ts +721 -0
  308. package/src/chains/evm/spoke/modules/index.ts +3 -0
  309. package/src/chains/evm/spoke/types/pool.ts +7 -0
  310. package/src/chains/evm/spoke/utils/contract.ts +74 -0
  311. package/src/common/constants/adapter.ts +5 -0
  312. package/src/common/constants/bytes.ts +6 -0
  313. package/src/common/constants/chain.ts +227 -0
  314. package/src/common/constants/gmp.ts +38 -0
  315. package/src/common/constants/lending.ts +3 -0
  316. package/src/common/constants/message.ts +4 -0
  317. package/src/common/constants/pool.ts +11 -0
  318. package/src/common/constants/token.ts +3 -0
  319. package/src/common/types/adapter.ts +38 -0
  320. package/src/common/types/address.ts +11 -0
  321. package/src/common/types/brand.ts +3 -0
  322. package/src/common/types/chain.ts +35 -0
  323. package/src/common/types/core.ts +31 -0
  324. package/src/common/types/gmp.ts +22 -0
  325. package/src/common/types/lending.ts +5 -0
  326. package/src/common/types/message.ts +330 -0
  327. package/src/common/types/module.ts +42 -0
  328. package/src/common/types/token.ts +50 -0
  329. package/src/common/utils/adapter.ts +75 -0
  330. package/src/common/utils/address.ts +49 -0
  331. package/src/common/utils/bytes.ts +46 -0
  332. package/src/common/utils/chain.ts +103 -0
  333. package/src/common/utils/formulae.ts +124 -0
  334. package/src/common/utils/gmp.ts +16 -0
  335. package/src/common/utils/math-lib.ts +46 -0
  336. package/src/common/utils/messages.ts +192 -0
  337. package/src/common/utils/token.ts +7 -0
  338. package/src/index.ts +47 -0
  339. package/src/utils/exhaustive-check.ts +3 -0
  340. package/src/xchain/core/folks-core.ts +128 -0
  341. package/src/xchain/modules/folks-account.ts +385 -0
  342. package/src/xchain/modules/folks-gmp.ts +129 -0
  343. package/src/xchain/modules/folks-loan.ts +1175 -0
  344. package/src/xchain/modules/folks-oracle.ts +15 -0
  345. package/src/xchain/modules/folks-pool.ts +11 -0
  346. package/src/xchain/modules/index.ts +5 -0
@@ -0,0 +1,330 @@
1
+ import type { GenericAddress } from "./address.js";
2
+ import type { FolksChainId } from "./chain.js";
3
+ import type { AccountId, LoanId, LoanName } from "./lending.js";
4
+ import type { LoanTypeId } from "./module.js";
5
+ import type { FolksTokenId, FolksSpokeTokenType } from "./token.js";
6
+ import type { FINALITY } from "../constants/message.js";
7
+ import type { Hex } from "viem";
8
+
9
+ export enum AdapterType {
10
+ HUB = 1,
11
+ WORMHOLE_DATA = 2,
12
+ WORMHOLE_CCTP = 3,
13
+ CCIP_DATA = 4,
14
+ CCIP_TOKEN = 5,
15
+ }
16
+
17
+ export enum Action {
18
+ // SPOKE -> HUB
19
+ CreateAccount,
20
+ InviteAddress,
21
+ AcceptInviteAddress,
22
+ UnregisterAddress,
23
+ AddDelegate,
24
+ RemoveDelegate,
25
+ CreateLoan,
26
+ DeleteLoan,
27
+ CreateLoanAndDeposit,
28
+ Deposit,
29
+ DepositFToken,
30
+ Withdraw,
31
+ WithdrawFToken,
32
+ Borrow,
33
+ Repay,
34
+ RepayWithCollateral,
35
+ Liquidate,
36
+ SwitchBorrowType,
37
+ // HUB -> SPOKE
38
+ SendToken,
39
+ }
40
+
41
+ export type SendTokenAction = Extract<Action, Action.Deposit | Action.Repay>;
42
+ export type ReceiveTokenAction = Extract<Action, Action.Withdraw | Action.Borrow>;
43
+ export type HubAction = Extract<
44
+ Action,
45
+ Action.DepositFToken | Action.WithdrawFToken | Action.Liquidate | Action.SendToken
46
+ >;
47
+ export type DataAction = Extract<
48
+ Action,
49
+ | Action.CreateAccount
50
+ | Action.InviteAddress
51
+ | Action.AcceptInviteAddress
52
+ | Action.UnregisterAddress
53
+ | Action.AddDelegate
54
+ | Action.RemoveDelegate
55
+ | Action.CreateLoan
56
+ | Action.DeleteLoan
57
+ | Action.RepayWithCollateral
58
+ | Action.SwitchBorrowType
59
+ >;
60
+
61
+ export type Finality = (typeof FINALITY)[keyof typeof FINALITY];
62
+
63
+ export type MessageAdapters = {
64
+ adapterId: AdapterType;
65
+ returnAdapterId: AdapterType;
66
+ };
67
+
68
+ export type SupportedMessageAdapters = {
69
+ adapterId: Array<AdapterType>;
70
+ returnAdapterId: Array<AdapterType>;
71
+ };
72
+
73
+ export type FeeParams = {
74
+ receiverValue: bigint;
75
+ gasLimit: bigint;
76
+ returnGasLimit: bigint;
77
+ };
78
+
79
+ export type MessageParams = FeeParams & MessageAdapters;
80
+
81
+ export type OptionalFeeParams = Partial<FeeParams>;
82
+
83
+ export type MessageToSend = {
84
+ params: MessageParams;
85
+ sender: GenericAddress;
86
+ destinationChainId: number;
87
+ handler: GenericAddress;
88
+ payload: Hex;
89
+ finalityLevel: Finality;
90
+ extraArgs: Hex;
91
+ };
92
+
93
+ // Data
94
+ export type DefaultMessageData = "0x";
95
+
96
+ // Data: account
97
+ export type CreateAccountMessageData = {
98
+ refAccountId: AccountId;
99
+ };
100
+
101
+ export type InviteAddressMessageData = {
102
+ folksChainIdToInvite: FolksChainId;
103
+ addressToInvite: GenericAddress;
104
+ refAccountId: AccountId;
105
+ };
106
+
107
+ export type UnregisterAddressMessageData = {
108
+ folksChainIdToUnregister: FolksChainId;
109
+ };
110
+
111
+ // Data: loan
112
+ export type CreateLoanMessageData = {
113
+ loanId: LoanId;
114
+ loanTypeId: LoanTypeId;
115
+ loanName: LoanName;
116
+ };
117
+
118
+ export type DeleteLoanMessageData = {
119
+ accountId: AccountId;
120
+ loanId: LoanId;
121
+ };
122
+
123
+ export type CreateLoanAndDepositMessageData = {
124
+ loanId: LoanId;
125
+ poolId: number;
126
+ amount: bigint;
127
+ loanTypeId: LoanTypeId;
128
+ loanName: LoanName;
129
+ };
130
+
131
+ export type DepositMessageData = {
132
+ loanId: LoanId;
133
+ poolId: number;
134
+ amount: bigint;
135
+ };
136
+
137
+ export type WithdrawMessageData = {
138
+ loanId: LoanId;
139
+ poolId: number;
140
+ receiverFolksChainId: FolksChainId;
141
+ amount: bigint;
142
+ isFAmount: boolean;
143
+ };
144
+
145
+ export type BorrowMessageData = {
146
+ loanId: LoanId;
147
+ poolId: number;
148
+ receiverFolksChainId: FolksChainId;
149
+ amount: bigint;
150
+ maxStableRate: bigint;
151
+ };
152
+
153
+ export type RepayMessageData = {
154
+ loanId: LoanId;
155
+ poolId: number;
156
+ amount: bigint;
157
+ maxOverRepayment: bigint;
158
+ };
159
+
160
+ export type RepayWithCollateralMessageData = {
161
+ loanId: LoanId;
162
+ poolId: number;
163
+ amount: bigint;
164
+ };
165
+
166
+ export type SwitchBorrowTypeMessageData = {
167
+ loanId: LoanId;
168
+ poolId: number;
169
+ maxStableRate: bigint;
170
+ };
171
+
172
+ export type LiquidateMessageData = {
173
+ violatorLoanId: LoanId;
174
+ liquidatorLoanId: LoanId;
175
+ colPoolId: number;
176
+ borPoolId: number;
177
+ repayingAmount: bigint;
178
+ minSeizedAmount: bigint;
179
+ };
180
+
181
+ export type SendTokenMessageData = {
182
+ folksTokenId: FolksTokenId;
183
+ amount: bigint;
184
+ };
185
+
186
+ // Extra args
187
+ export type DefaultExtraArgs = "0x";
188
+
189
+ // Extra args: loan
190
+ export type DepositExtraArgs = {
191
+ token: FolksSpokeTokenType;
192
+ recipient: GenericAddress;
193
+ amount: bigint;
194
+ };
195
+
196
+ export type RepayExtraArgs = {
197
+ token: FolksSpokeTokenType;
198
+ recipient: GenericAddress;
199
+ amount: bigint;
200
+ };
201
+
202
+ export type SendTokenExtraArgs = {
203
+ token: FolksSpokeTokenType;
204
+ recipient: GenericAddress;
205
+ amount: bigint;
206
+ };
207
+
208
+ // Params
209
+ export type DefaultMessageDataParams = {
210
+ action:
211
+ | Action.AcceptInviteAddress
212
+ | Action.AddDelegate
213
+ | Action.RemoveDelegate
214
+ | Action.DepositFToken
215
+ | Action.WithdrawFToken;
216
+ data: DefaultMessageData;
217
+ extraArgs: DefaultExtraArgs;
218
+ };
219
+
220
+ // Params: account
221
+ export type CreateAccountMessageDataParams = {
222
+ action: Action.CreateAccount;
223
+ data: CreateAccountMessageData;
224
+ extraArgs: DefaultExtraArgs;
225
+ };
226
+
227
+ export type InviteAddressMessageDataParams = {
228
+ action: Action.InviteAddress;
229
+ data: InviteAddressMessageData;
230
+ extraArgs: DefaultExtraArgs;
231
+ };
232
+
233
+ export type UnregisterAddressMessageDataParams = {
234
+ action: Action.UnregisterAddress;
235
+ data: UnregisterAddressMessageData;
236
+ extraArgs: DefaultExtraArgs;
237
+ };
238
+
239
+ // Params: loan
240
+ export type CreateLoanMessageDataParams = {
241
+ action: Action.CreateLoan;
242
+ data: CreateLoanMessageData;
243
+ extraArgs: DefaultExtraArgs;
244
+ };
245
+
246
+ export type DeleteLoanMessageDataParams = {
247
+ action: Action.DeleteLoan;
248
+ data: DeleteLoanMessageData;
249
+ extraArgs: DefaultExtraArgs;
250
+ };
251
+
252
+ export type CreateLoanAndDepositMessageDataParams = {
253
+ action: Action.CreateLoanAndDeposit;
254
+ data: CreateLoanAndDepositMessageData;
255
+ extraArgs: DepositExtraArgs;
256
+ };
257
+
258
+ export type DepositMessageDataParams = {
259
+ action: Action.Deposit;
260
+ data: DepositMessageData;
261
+ extraArgs: DepositExtraArgs;
262
+ };
263
+
264
+ export type WithdrawMessageDataParams = {
265
+ action: Action.Withdraw;
266
+ data: WithdrawMessageData;
267
+ extraArgs: DefaultExtraArgs;
268
+ };
269
+
270
+ export type BorrowMessageDataParams = {
271
+ action: Action.Borrow;
272
+ data: BorrowMessageData;
273
+ extraArgs: DefaultExtraArgs;
274
+ };
275
+
276
+ export type RepayMessageDataParams = {
277
+ action: Action.Repay;
278
+ data: RepayMessageData;
279
+ extraArgs: RepayExtraArgs;
280
+ };
281
+
282
+ export type RepayWithCollateralMessageDataParams = {
283
+ action: Action.RepayWithCollateral;
284
+ data: RepayWithCollateralMessageData;
285
+ extraArgs: DefaultExtraArgs;
286
+ };
287
+
288
+ export type SwitchBorrowTypeMessageDataParams = {
289
+ action: Action.SwitchBorrowType;
290
+ data: SwitchBorrowTypeMessageData;
291
+ extraArgs: DefaultExtraArgs;
292
+ };
293
+
294
+ export type LiquidateMessageDataParams = {
295
+ action: Action.Liquidate;
296
+ data: LiquidateMessageData;
297
+ extraArgs: DefaultExtraArgs;
298
+ };
299
+
300
+ export type SendTokenMessageDataParams = {
301
+ action: Action.SendToken;
302
+ data: SendTokenMessageData;
303
+ extraArgs: SendTokenExtraArgs;
304
+ };
305
+
306
+ export type MessageDataParams =
307
+ | DefaultMessageDataParams
308
+ | CreateAccountMessageDataParams
309
+ | InviteAddressMessageDataParams
310
+ | UnregisterAddressMessageDataParams
311
+ | CreateLoanMessageDataParams
312
+ | DeleteLoanMessageDataParams
313
+ | CreateLoanAndDepositMessageDataParams
314
+ | DepositMessageDataParams
315
+ | WithdrawMessageDataParams
316
+ | BorrowMessageDataParams
317
+ | RepayMessageDataParams
318
+ | RepayWithCollateralMessageDataParams
319
+ | SwitchBorrowTypeMessageDataParams
320
+ | LiquidateMessageDataParams
321
+ | SendTokenMessageDataParams;
322
+
323
+ export type MessageBuilderParams = {
324
+ userAddress: GenericAddress;
325
+ accountId: AccountId;
326
+ adapters: MessageAdapters;
327
+ sender: GenericAddress;
328
+ destinationChainId: FolksChainId;
329
+ handler: GenericAddress;
330
+ } & MessageDataParams;
@@ -0,0 +1,42 @@
1
+ import type {
2
+ PrepareCreateAccountCall as PrepareCreateAccountEVMCall,
3
+ PrepareInviteAddressCall as PrepareInviteAddressEVMCall,
4
+ PrepareAcceptInviteAddressCall as PrepareAcceptInviteAddressEVMCall,
5
+ PrepareUnregisterAddressCall as PrepareUnregisterAddressEVMCall,
6
+ PrepareCreateLoanCall as PrepareCreateLoanEVMCall,
7
+ PrepareDeleteLoanCall as PrepareDeleteLoanEVMCall,
8
+ PrepareCreateLoanAndDepositCall as PrepareCreateLoanAndDepositEVMCall,
9
+ PrepareDepositCall as PrepareDepositEVMCall,
10
+ PrepareWithdrawCall as PrepareWithdrawEVMCall,
11
+ PrepareCall as PrepareEVMCall,
12
+ PrepareBorrowCall as PrepareBorrowEVMCall,
13
+ PrepareRepayCall as PrepareRepayEVMCall,
14
+ PrepareRepayWithCollateralCall as PrepareRepayWithCollateralEVMCall,
15
+ PrepareSwitchBorrowTypeCall as PrepareSwitchBorrowTypeEVMCall,
16
+ PrepareLiquidateCall as PrepareLiquidateEVMCall,
17
+ PrepareRetryMessageCall as PrepareRetryMessageEVMCall,
18
+ } from "../../chains/evm/common/types/module.js";
19
+
20
+ export enum LoanTypeId {
21
+ DEPOSIT = 1, // no support for borrows
22
+ GENERAL = 2,
23
+ }
24
+
25
+ export type PrepareCall = PrepareEVMCall;
26
+
27
+ export type PrepareCreateAccountCall = PrepareCreateAccountEVMCall;
28
+ export type PrepareInviteAddressCall = PrepareInviteAddressEVMCall;
29
+ export type PrepareAcceptInviteAddressCall = PrepareAcceptInviteAddressEVMCall;
30
+ export type PrepareUnregisterAddressCall = PrepareUnregisterAddressEVMCall;
31
+
32
+ export type PrepareCreateLoanCall = PrepareCreateLoanEVMCall;
33
+ export type PrepareDeleteLoanCall = PrepareDeleteLoanEVMCall;
34
+ export type PrepareCreateLoanAndDepositCall = PrepareCreateLoanAndDepositEVMCall;
35
+ export type PrepareDepositCall = PrepareDepositEVMCall;
36
+ export type PrepareWithdrawCall = PrepareWithdrawEVMCall;
37
+ export type PrepareBorrowCall = PrepareBorrowEVMCall;
38
+ export type PrepareRepayCall = PrepareRepayEVMCall;
39
+ export type PrepareRepayWithCollateralCall = PrepareRepayWithCollateralEVMCall;
40
+ export type PrepareSwitchBorrowTypeCall = PrepareSwitchBorrowTypeEVMCall;
41
+ export type PrepareLiquidateCall = PrepareLiquidateEVMCall;
42
+ export type PrepareRetryMessageCall = PrepareRetryMessageEVMCall;
@@ -0,0 +1,50 @@
1
+ import type { GenericAddress } from "./address.js";
2
+
3
+ export enum FolksTokenId {
4
+ USDC = "USDC",
5
+ AVAX = "AVAX",
6
+ ETH_eth_sep = "ETH_eth_sep",
7
+ ETH_base_sep = "ETH_base_sep",
8
+ LINK_eth_sep = "LINK_eth_sep",
9
+ }
10
+
11
+ export enum TokenType {
12
+ NATIVE = "NATIVE",
13
+ ERC20 = "ERC20",
14
+ CIRCLE = "CIRCLE",
15
+ }
16
+
17
+ export type ITokenData = {
18
+ folksTokenId: FolksTokenId;
19
+ };
20
+
21
+ type Erc20SpokeTokenType = {
22
+ type: TokenType.ERC20;
23
+ address: GenericAddress;
24
+ decimals: number;
25
+ };
26
+
27
+ type Erc20HubTokenType = {
28
+ type: TokenType.ERC20;
29
+ decimals: number;
30
+ };
31
+
32
+ type CircleTokenType = {
33
+ type: TokenType.CIRCLE;
34
+ address: GenericAddress;
35
+ decimals: number;
36
+ };
37
+
38
+ type NativeTokenType = {
39
+ type: TokenType.NATIVE;
40
+ decimals: number;
41
+ };
42
+
43
+ export type FolksSpokeTokenType = Erc20SpokeTokenType | CircleTokenType | NativeTokenType;
44
+ export type FolksHubTokenType = Erc20HubTokenType | CircleTokenType | NativeTokenType;
45
+
46
+ export type SpokeTokenData = {
47
+ poolId: number;
48
+ spokeAddress: GenericAddress;
49
+ token: FolksSpokeTokenType;
50
+ } & ITokenData;
@@ -0,0 +1,75 @@
1
+ import { isHubChain } from "../../chains/evm/hub/utils/chain.js";
2
+ import { exhaustiveCheck } from "../../utils/exhaustive-check.js";
3
+ import { FolksCore } from "../../xchain/core/folks-core.js";
4
+ import { DATA_ADAPTERS, HUB_ADAPTERS, TOKEN_ADAPTERS } from "../constants/adapter.js";
5
+ import { MessageAdapterParamsType } from "../types/adapter.js";
6
+ import { AdapterType } from "../types/message.js";
7
+
8
+ import { isCircleToken } from "./token.js";
9
+
10
+ import type { MessageAdapterParams, ReceiveTokenMessageAdapterParams } from "../types/adapter.js";
11
+ import type { FolksChainId } from "../types/chain.js";
12
+
13
+ export function doesAdapterSupportDataMessage(folksChainId: FolksChainId, adapterId: AdapterType): boolean {
14
+ const isHub = isHubChain(folksChainId, FolksCore.getSelectedNetwork());
15
+ return (
16
+ (isHub && adapterId === AdapterType.HUB) ||
17
+ (!isHub && (adapterId === AdapterType.WORMHOLE_DATA || adapterId === AdapterType.CCIP_DATA))
18
+ );
19
+ }
20
+
21
+ export function assertAdapterSupportsDataMessage(folksChainId: FolksChainId, adapterId: AdapterType): void {
22
+ if (!doesAdapterSupportDataMessage(folksChainId, adapterId))
23
+ throw Error(`Adapter ${adapterId} does not support data message for folksChainId: ${folksChainId}`);
24
+ }
25
+
26
+ export function doesAdapterSupportTokenMessage(folksChainId: FolksChainId, adapterId: AdapterType): boolean {
27
+ const isHub = isHubChain(folksChainId, FolksCore.getSelectedNetwork());
28
+ return (
29
+ (isHub && adapterId === AdapterType.HUB) ||
30
+ (!isHub && (adapterId === AdapterType.WORMHOLE_CCTP || adapterId === AdapterType.CCIP_TOKEN))
31
+ );
32
+ }
33
+
34
+ export function assertAdapterSupportsTokenMessage(folksChainId: FolksChainId, adapterId: AdapterType): void {
35
+ if (!doesAdapterSupportTokenMessage(folksChainId, adapterId))
36
+ throw Error(`Adapter ${adapterId} does not support token message for folksChainId: ${folksChainId}`);
37
+ }
38
+
39
+ function getAdapterIds(messageAdapterParams: MessageAdapterParams) {
40
+ const { sourceFolksChainId, network, messageAdapterParamType } = messageAdapterParams;
41
+ if (isHubChain(sourceFolksChainId, network)) return HUB_ADAPTERS;
42
+ if (messageAdapterParamType == MessageAdapterParamsType.SendToken && isCircleToken(messageAdapterParams.folksTokenId))
43
+ return TOKEN_ADAPTERS;
44
+ return DATA_ADAPTERS;
45
+ }
46
+
47
+ function getReturnAdapterIds({ folksTokenId, destFolksChainId, network }: ReceiveTokenMessageAdapterParams) {
48
+ if (isHubChain(destFolksChainId, network)) return HUB_ADAPTERS;
49
+ if (isCircleToken(folksTokenId)) return TOKEN_ADAPTERS;
50
+ return DATA_ADAPTERS;
51
+ }
52
+
53
+ export function getSupportedMessageAdapters(params: MessageAdapterParams) {
54
+ const { messageAdapterParamType } = params;
55
+
56
+ switch (messageAdapterParamType) {
57
+ case MessageAdapterParamsType.SendToken:
58
+ return {
59
+ adapterIds: getAdapterIds(params),
60
+ returnAdapterIds: [AdapterType.HUB],
61
+ };
62
+ case MessageAdapterParamsType.ReceiveToken:
63
+ return {
64
+ adapterIds: getAdapterIds(params),
65
+ returnAdapterIds: getReturnAdapterIds(params),
66
+ };
67
+ case MessageAdapterParamsType.Data:
68
+ return {
69
+ adapterIds: getAdapterIds(params),
70
+ returnAdapterIds: [AdapterType.HUB],
71
+ };
72
+ default:
73
+ return exhaustiveCheck(messageAdapterParamType);
74
+ }
75
+ }
@@ -0,0 +1,49 @@
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/bytes.js";
6
+ import { ChainType } from "../types/chain.js";
7
+
8
+ import type { AddressType, EvmAddress, GenericAddress } from "../types/address.js";
9
+ import type { AccountId } from "../types/lending.js";
10
+
11
+ export function getRandomGenericAddress(): GenericAddress {
12
+ return pad(privateKeyToAccount(generatePrivateKey()).address, {
13
+ size: BYTES32_LENGTH,
14
+ }).toLowerCase() as GenericAddress;
15
+ }
16
+
17
+ export function isGenericAddress(address: GenericAddress): boolean {
18
+ return address.length === 64 + 2;
19
+ }
20
+
21
+ export function isAccountId(accountId: AccountId): boolean {
22
+ return accountId.length === 64 + 2;
23
+ }
24
+
25
+ export function convertToGenericAddress<T extends ChainType>(
26
+ address: AddressType<T>,
27
+ fromChainType: ChainType,
28
+ ): GenericAddress {
29
+ switch (fromChainType) {
30
+ case ChainType.EVM:
31
+ return pad(address as EvmAddress, {
32
+ size: BYTES32_LENGTH,
33
+ }).toLowerCase() as GenericAddress;
34
+ default:
35
+ return exhaustiveCheck(fromChainType);
36
+ }
37
+ }
38
+
39
+ export function convertFromGenericAddress<T extends ChainType>(
40
+ address: GenericAddress,
41
+ toChainType: ChainType,
42
+ ): AddressType<T> {
43
+ switch (toChainType) {
44
+ case ChainType.EVM:
45
+ return getAddress(sliceHex(address, BYTES32_LENGTH - EVM_ADDRESS_BYTES_LENGTH)) as EvmAddress;
46
+ default:
47
+ return exhaustiveCheck(toChainType);
48
+ }
49
+ }
@@ -0,0 +1,46 @@
1
+ import { bytesToHex, pad, toHex } from "viem";
2
+
3
+ import { BYTES32_LENGTH } from "../constants/bytes.js";
4
+
5
+ import type { AccountId, LoanId } from "../types/lending.js";
6
+ import type { Hex } from "viem";
7
+
8
+ export function getEmptyBytes(length: number): string {
9
+ return pad("0x", { size: length });
10
+ }
11
+
12
+ export function getAccountIdBytes(accountId: string): AccountId {
13
+ return pad(toHex(Buffer.from(accountId)), {
14
+ size: BYTES32_LENGTH,
15
+ }) as AccountId;
16
+ }
17
+
18
+ export function convertNumberToBytes(num: number | bigint, length: number): Hex {
19
+ // insert 0s at the beginning if data is smaller than length bytes
20
+ const buf = Buffer.alloc(length, 0);
21
+
22
+ // convert num to bytes
23
+ const hex = num.toString(16);
24
+ const isEven = hex.length % 2 === 0;
25
+ const bytes = Buffer.from(isEven ? hex : "0" + hex, "hex");
26
+
27
+ // write bytes to fixed length buf
28
+ bytes.copy(buf, buf.length - bytes.length);
29
+ return toHex(buf);
30
+ }
31
+
32
+ export function convertStringToBytes(str: string): Hex {
33
+ return toHex("0x" + Buffer.from(str).toString("hex"));
34
+ }
35
+
36
+ export function convertBooleanToByte(bool: boolean): Hex {
37
+ return bool ? "0x01" : "0x00";
38
+ }
39
+
40
+ export function getRandomBytes(length: number): Hex {
41
+ return bytesToHex(crypto.getRandomValues(new Uint8Array(length)));
42
+ }
43
+
44
+ export function generateLoanId(): LoanId {
45
+ return getRandomBytes(BYTES32_LENGTH) as LoanId;
46
+ }
@@ -0,0 +1,103 @@
1
+ import { getEvmSignerAddress } from "../../chains/evm/common/utils/chain.js";
2
+ import { getHubChainAdapterAddress, isHubChain } from "../../chains/evm/hub/utils/chain.js";
3
+ import { exhaustiveCheck } from "../../utils/exhaustive-check.js";
4
+ import { FOLKS_CHAIN, SPOKE_CHAIN } from "../constants/chain.js";
5
+ import { ChainType } from "../types/chain.js";
6
+
7
+ import { convertToGenericAddress } from "./address.js";
8
+
9
+ import type { GenericAddress } from "../types/address.js";
10
+ import type { FolksChain, FolksChainId, NetworkType, SpokeChain } from "../types/chain.js";
11
+ import type { FolksChainSigner } from "../types/core.js";
12
+ import type { AdapterType } from "../types/message.js";
13
+ import type { FolksTokenId, SpokeTokenData } from "../types/token.js";
14
+
15
+ export function getFolksChain(folksChainId: FolksChainId, network: NetworkType): FolksChain {
16
+ const folksChain = FOLKS_CHAIN[network][folksChainId];
17
+ if (!folksChain) throw new Error(`Folks Chain not found for folksChainId: ${folksChainId}`);
18
+
19
+ return folksChain;
20
+ }
21
+
22
+ export function getFolksChainsByNetwork(network: NetworkType): Array<FolksChain> {
23
+ return Object.values(FOLKS_CHAIN[network]);
24
+ }
25
+
26
+ export function getFolksChainIdsByNetwork(networkType: NetworkType): Array<FolksChainId> {
27
+ return getFolksChainsByNetwork(networkType).map((folksChain) => folksChain.folksChainId);
28
+ }
29
+
30
+ export function isSpokeChainSupported(folksChainId: FolksChainId, network: NetworkType): boolean {
31
+ return SPOKE_CHAIN[network][folksChainId] !== undefined;
32
+ }
33
+
34
+ export function assertSpokeChainSupported(folksChainId: FolksChainId, network: NetworkType) {
35
+ if (!isSpokeChainSupported(folksChainId, network))
36
+ throw new Error(`Spoke chain is not supported for folksChainId: ${folksChainId}`);
37
+ }
38
+
39
+ export function getSpokeChain(folksChainId: FolksChainId, network: NetworkType): SpokeChain {
40
+ const spokeChain = SPOKE_CHAIN[network][folksChainId];
41
+ if (!spokeChain) throw new Error(`Spoke chain not found for folksChainId: ${folksChainId}`);
42
+
43
+ return spokeChain;
44
+ }
45
+
46
+ export function doesSpokeSupportFolksToken(spokeChain: SpokeChain, folksTokenId: FolksTokenId): boolean {
47
+ return spokeChain.tokens[folksTokenId] !== undefined;
48
+ }
49
+
50
+ export function getSpokeTokenData(spokeChain: SpokeChain, folksTokenId: FolksTokenId): SpokeTokenData {
51
+ const tokenData = spokeChain.tokens[folksTokenId];
52
+ if (!tokenData) throw new Error(`Spoke Token not found for folksTokenId: ${folksTokenId}`);
53
+
54
+ return tokenData;
55
+ }
56
+
57
+ export function isFolksTokenSupported(
58
+ folksTokenId: FolksTokenId,
59
+ folksChainId: FolksChainId,
60
+ network: NetworkType,
61
+ ): boolean {
62
+ const spokeChain = getSpokeChain(folksChainId, network);
63
+ return doesSpokeSupportFolksToken(spokeChain, folksTokenId);
64
+ }
65
+
66
+ export function assertSpokeChainSupportFolksToken(
67
+ folksChainId: FolksChainId,
68
+ folksTokenId: FolksTokenId,
69
+ network: NetworkType,
70
+ ) {
71
+ if (!isFolksTokenSupported(folksTokenId, folksChainId, network))
72
+ throw new Error(`Folks Token ${folksTokenId} is not supported on Folks Chain ${folksChainId}`);
73
+ }
74
+
75
+ export function getSpokeChainAdapterAddress(
76
+ folksChainId: FolksChainId,
77
+ network: NetworkType,
78
+ adapterType: AdapterType,
79
+ ): GenericAddress {
80
+ const spokeChain = getSpokeChain(folksChainId, network);
81
+ const adapterAddress = spokeChain.adapters[adapterType];
82
+ if (adapterAddress) return adapterAddress;
83
+ throw new Error(`Adapter ${adapterType} not found for spoke chain ${folksChainId}`);
84
+ }
85
+
86
+ export function getAdapterAddress(folksChainId: FolksChainId, network: NetworkType, adapterType: AdapterType) {
87
+ if (isHubChain(folksChainId, network)) return getHubChainAdapterAddress(network, adapterType);
88
+ return getSpokeChainAdapterAddress(folksChainId, network, adapterType);
89
+ }
90
+
91
+ export function getSignerGenericAddress(folksChainSigner: FolksChainSigner): GenericAddress {
92
+ const chainType = folksChainSigner.chainType;
93
+ switch (chainType) {
94
+ case ChainType.EVM:
95
+ return convertToGenericAddress(getEvmSignerAddress(folksChainSigner.signer), chainType);
96
+ default:
97
+ return exhaustiveCheck(chainType);
98
+ }
99
+ }
100
+
101
+ export function assertHubChainSelected(folksChainId: FolksChainId, network: NetworkType) {
102
+ if (!isHubChain(folksChainId, network)) throw new Error(`Wrong chain selected: ${folksChainId}. Expected Hub chain`);
103
+ }