@instadapp/interop-x 0.0.0-dev.fabee70 → 0.0.0-dev.fac2c15

Sign up to get free protection for your applications and to get access to all the features.
Files changed (286) hide show
  1. package/.github/workflows/ci.yml +19 -0
  2. package/dist/package.json +18 -14
  3. package/dist/src/abi/connectors/index.js +36 -0
  4. package/dist/src/abi/connectors/v1/aave.js +148 -0
  5. package/dist/src/abi/connectors/v1/aave_claim.js +4 -0
  6. package/dist/src/abi/connectors/v1/aave_migrate.js +109 -0
  7. package/dist/src/abi/connectors/v1/aave_polygon_migrate.js +110 -0
  8. package/dist/src/abi/connectors/v1/aave_stake.js +4 -0
  9. package/dist/src/abi/connectors/v1/aave_v1_import.js +54 -0
  10. package/dist/src/abi/connectors/v1/aave_v2.js +230 -0
  11. package/dist/src/abi/connectors/v1/aave_v2_import.js +59 -0
  12. package/dist/src/abi/connectors/v1/authority.js +100 -0
  13. package/dist/src/abi/connectors/v1/basic.js +136 -0
  14. package/dist/src/abi/connectors/v1/chi.js +36 -0
  15. package/dist/src/abi/connectors/v1/comp.js +4 -0
  16. package/dist/src/abi/connectors/v1/compound.js +4 -0
  17. package/dist/src/abi/connectors/v1/compoundImport.js +69 -0
  18. package/dist/src/abi/connectors/v1/compoundImport_v2.js +4 -0
  19. package/dist/src/abi/connectors/v1/compound_old.js +448 -0
  20. package/dist/src/abi/connectors/v1/curve.js +140 -0
  21. package/dist/src/abi/connectors/v1/curve_claim.js +63 -0
  22. package/dist/src/abi/connectors/v1/curve_gauge.js +158 -0
  23. package/dist/src/abi/connectors/v1/curve_sbtc.js +140 -0
  24. package/dist/src/abi/connectors/v1/curve_susd.js +140 -0
  25. package/dist/src/abi/connectors/v1/curve_three.js +79 -0
  26. package/dist/src/abi/connectors/v1/curve_y.js +140 -0
  27. package/dist/src/abi/connectors/v1/dsa_migrate_v1_to_v2.js +4 -0
  28. package/dist/src/abi/connectors/v1/dydx.js +148 -0
  29. package/dist/src/abi/connectors/v1/dydx_flash.js +52 -0
  30. package/dist/src/abi/connectors/v1/fee.js +50 -0
  31. package/dist/src/abi/connectors/v1/gelato.js +1138 -0
  32. package/dist/src/abi/connectors/v1/index.js +58 -0
  33. package/dist/src/abi/connectors/v1/instapool.js +439 -0
  34. package/dist/src/abi/connectors/v1/instapool_v2.js +126 -0
  35. package/dist/src/abi/connectors/v1/kyber.js +117 -0
  36. package/dist/src/abi/connectors/v1/maker.js +480 -0
  37. package/dist/src/abi/connectors/v1/maker_old.js +300 -0
  38. package/dist/src/abi/connectors/v1/math.js +43 -0
  39. package/dist/src/abi/connectors/v1/migrate.js +46 -0
  40. package/dist/src/abi/connectors/v1/oasis.js +198 -0
  41. package/dist/src/abi/connectors/v1/oneInch.js +160 -0
  42. package/dist/src/abi/connectors/v1/polygon_bridge.js +4 -0
  43. package/dist/src/abi/connectors/v1/refinance.js +4 -0
  44. package/dist/src/abi/connectors/v1/staking.js +220 -0
  45. package/dist/src/abi/connectors/v1/swerve.js +179 -0
  46. package/dist/src/abi/connectors/v1/uniswap.js +297 -0
  47. package/dist/src/abi/connectors/v2/1INCH-A.js +4 -0
  48. package/dist/src/abi/connectors/v2/1INCH-B.js +4 -0
  49. package/dist/src/abi/connectors/v2/AAVE-CLAIM-A.js +4 -0
  50. package/dist/src/abi/connectors/v2/AAVE-CLAIM-B.js +166 -0
  51. package/dist/src/abi/connectors/v2/AAVE-STAKE-A.js +4 -0
  52. package/dist/src/abi/connectors/v2/AAVE-V1-A.js +130 -0
  53. package/dist/src/abi/connectors/v2/AAVE-V1-IMPORT-A.js +4 -0
  54. package/dist/src/abi/connectors/v2/AAVE-V2-A.js +230 -0
  55. package/dist/src/abi/connectors/v2/AAVE-V2-IMPORT-A.js +4 -0
  56. package/dist/src/abi/connectors/v2/AAVE-V2-IMPORT-B.js +225 -0
  57. package/dist/src/abi/connectors/v2/AUTHORITY-A.js +100 -0
  58. package/dist/src/abi/connectors/v2/B-COMPOUND-A.js +4 -0
  59. package/dist/src/abi/connectors/v2/B-LIQUITY-A.js +4 -0
  60. package/dist/src/abi/connectors/v2/B-MAKERDAO-A.js +4 -0
  61. package/dist/src/abi/connectors/v2/BASIC-A.js +136 -0
  62. package/dist/src/abi/connectors/v2/BASIC-B.js +4 -0
  63. package/dist/src/abi/connectors/v2/BASIC-C.js +4 -0
  64. package/dist/src/abi/connectors/v2/COMP-A.js +4 -0
  65. package/dist/src/abi/connectors/v2/COMPOUND-A.js +4 -0
  66. package/dist/src/abi/connectors/v2/COMPOUND-IMPORT-A.js +4 -0
  67. package/dist/src/abi/connectors/v2/COMPOUND-IMPORT-B.js +195 -0
  68. package/dist/src/abi/connectors/v2/G-UNISWAP-A.js +4 -0
  69. package/dist/src/abi/connectors/v2/GELATO-AAVE-A.js +4 -0
  70. package/dist/src/abi/connectors/v2/INST-A.js +4 -0
  71. package/dist/src/abi/connectors/v2/INST-LM-A.js +4 -0
  72. package/dist/src/abi/connectors/v2/INST-STAKING-A.js +4 -0
  73. package/dist/src/abi/connectors/v2/INST-STAKING-B.js +4 -0
  74. package/dist/src/abi/connectors/v2/INSTAPOOL-A.js +4 -0
  75. package/dist/src/abi/connectors/v2/LIQUITY-A.js +4 -0
  76. package/dist/src/abi/connectors/v2/MAKERDAO-A.js +4 -0
  77. package/dist/src/abi/connectors/v2/MAKERDAO-CLAIM-A.js +136 -0
  78. package/dist/src/abi/connectors/v2/PARASWAP-A.js +4 -0
  79. package/dist/src/abi/connectors/v2/POLYGON-BRIDGE-A.js +4 -0
  80. package/dist/src/abi/connectors/v2/REFINANCE-A.js +4 -0
  81. package/dist/src/abi/connectors/v2/REFLEXER-A.js +4 -0
  82. package/dist/src/abi/connectors/v2/STAKE-ERC20-A.js +4 -0
  83. package/dist/src/abi/connectors/v2/UNISWAP-A.js +297 -0
  84. package/dist/src/abi/connectors/v2/UNISWAP-V2-A.js +4 -0
  85. package/dist/src/abi/connectors/v2/UNISWAP-V3-A.js +4 -0
  86. package/dist/src/abi/connectors/v2/UNISWAP-V3-STAKE-A.js +4 -0
  87. package/dist/src/abi/connectors/v2/WETH-A.js +4 -0
  88. package/dist/src/abi/connectors/v2/YEARN-VAULT-A.js +4 -0
  89. package/dist/src/abi/connectors/v2/index.js +89 -0
  90. package/dist/src/abi/index.js +6 -4
  91. package/dist/src/abi/instList.json +232 -0
  92. package/dist/src/abi/interopX.json +1436 -0
  93. package/dist/src/alias.js +10 -0
  94. package/dist/src/api/index.js +10 -0
  95. package/dist/src/config/index.js +10 -1
  96. package/dist/src/constants/addresses.js +6 -7
  97. package/dist/src/constants/blockConfirmations.js +8 -0
  98. package/dist/src/constants/index.js +1 -1
  99. package/dist/src/constants/tokens.js +62 -39
  100. package/dist/src/db/models/transaction.js +41 -15
  101. package/dist/src/errors/index.js +10 -0
  102. package/dist/src/gnosis/actions/aaveV2/index.js +11 -0
  103. package/dist/src/gnosis/actions/aaveV2/source.js +73 -0
  104. package/dist/src/gnosis/actions/aaveV2/target.js +86 -0
  105. package/dist/src/gnosis/actions/index.js +9 -0
  106. package/dist/src/gnosis/index.js +20 -0
  107. package/dist/src/index.js +34 -22
  108. package/dist/src/net/protocol/dial/SignatureDialProtocol.js +9 -10
  109. package/dist/src/net/protocol/dial/{SignatureDialProtocol.1.js → TransactionStatusDialProtocol.js} +2 -0
  110. package/dist/src/net/protocol/index.js +17 -7
  111. package/dist/src/tasks/AutoUpdateTask.js +20 -7
  112. package/dist/src/tasks/BaseTask.js +4 -0
  113. package/dist/src/tasks/InteropX/ProcessSubmitSubmitEvents.js +180 -0
  114. package/dist/src/tasks/InteropX/ProcessValidateEvents.js +184 -0
  115. package/dist/src/tasks/InteropX/SyncLogExecuteEvents.js +112 -0
  116. package/dist/src/tasks/InteropX/SyncLogSubmitEvents.js +87 -0
  117. package/dist/src/tasks/InteropX/SyncLogValidateEvents.js +105 -0
  118. package/dist/src/tasks/Transactions/SyncTransactionStatusTask.js +8 -3
  119. package/dist/src/tasks/index.js +21 -19
  120. package/dist/src/typechain/{InteropBridgeToken.js → InstList.js} +0 -0
  121. package/dist/src/typechain/{InteropXGateway.js → InteropX.js} +0 -0
  122. package/dist/src/typechain/factories/InstList__factory.js +249 -0
  123. package/dist/src/typechain/factories/InteropX__factory.js +1928 -0
  124. package/dist/src/typechain/factories/index.js +5 -5
  125. package/dist/src/typechain/index.js +5 -5
  126. package/dist/src/utils/async.js +18 -0
  127. package/dist/src/utils/dsa.js +24 -0
  128. package/dist/src/utils/formatting.js +17 -0
  129. package/dist/src/utils/gnosis.js +62 -0
  130. package/dist/src/utils/http.js +10 -0
  131. package/dist/src/utils/index.js +20 -235
  132. package/dist/src/utils/interop.js +16 -0
  133. package/dist/src/utils/web3.js +92 -0
  134. package/package.json +18 -14
  135. package/src/abi/connectors/index.ts +14 -0
  136. package/src/abi/connectors/v1/aave.ts +147 -0
  137. package/src/abi/connectors/v1/aave_claim.ts +3 -0
  138. package/src/abi/connectors/v1/aave_migrate.ts +108 -0
  139. package/src/abi/connectors/v1/aave_polygon_migrate.ts +109 -0
  140. package/src/abi/connectors/v1/aave_stake.ts +3 -0
  141. package/src/abi/connectors/v1/aave_v1_import.ts +53 -0
  142. package/src/abi/connectors/v1/aave_v2.ts +229 -0
  143. package/src/abi/connectors/v1/aave_v2_import.ts +58 -0
  144. package/src/abi/connectors/v1/authority.ts +99 -0
  145. package/src/abi/connectors/v1/basic.ts +135 -0
  146. package/src/abi/connectors/v1/chi.ts +35 -0
  147. package/src/abi/connectors/v1/comp.ts +3 -0
  148. package/src/abi/connectors/v1/compound.ts +3 -0
  149. package/src/abi/connectors/v1/compoundImport.ts +68 -0
  150. package/src/abi/connectors/v1/compoundImport_v2.ts +3 -0
  151. package/src/abi/connectors/v1/compound_old.ts +447 -0
  152. package/src/abi/connectors/v1/curve.ts +139 -0
  153. package/src/abi/connectors/v1/curve_claim.ts +62 -0
  154. package/src/abi/connectors/v1/curve_gauge.ts +157 -0
  155. package/src/abi/connectors/v1/curve_sbtc.ts +139 -0
  156. package/src/abi/connectors/v1/curve_susd.ts +139 -0
  157. package/src/abi/connectors/v1/curve_three.ts +78 -0
  158. package/src/abi/connectors/v1/curve_y.ts +139 -0
  159. package/src/abi/connectors/v1/dsa_migrate_v1_to_v2.ts +3 -0
  160. package/src/abi/connectors/v1/dydx.ts +147 -0
  161. package/src/abi/connectors/v1/dydx_flash.ts +51 -0
  162. package/src/abi/connectors/v1/fee.ts +49 -0
  163. package/src/abi/connectors/v1/gelato.ts +1137 -0
  164. package/src/abi/connectors/v1/index.ts +42 -0
  165. package/src/abi/connectors/v1/instapool.ts +438 -0
  166. package/src/abi/connectors/v1/instapool_v2.ts +125 -0
  167. package/src/abi/connectors/v1/kyber.ts +116 -0
  168. package/src/abi/connectors/v1/maker.ts +479 -0
  169. package/src/abi/connectors/v1/maker_old.ts +299 -0
  170. package/src/abi/connectors/v1/math.ts +42 -0
  171. package/src/abi/connectors/v1/migrate.ts +45 -0
  172. package/src/abi/connectors/v1/oasis.ts +197 -0
  173. package/src/abi/connectors/v1/oneInch.ts +159 -0
  174. package/src/abi/connectors/v1/polygon_bridge.ts +3 -0
  175. package/src/abi/connectors/v1/refinance.ts +3 -0
  176. package/src/abi/connectors/v1/staking.ts +219 -0
  177. package/src/abi/connectors/v1/swerve.ts +178 -0
  178. package/src/abi/connectors/v1/uniswap.ts +297 -0
  179. package/src/abi/connectors/v2/1INCH-A.ts +3 -0
  180. package/src/abi/connectors/v2/1INCH-B.ts +3 -0
  181. package/src/abi/connectors/v2/AAVE-CLAIM-A.ts +3 -0
  182. package/src/abi/connectors/v2/AAVE-CLAIM-B.ts +165 -0
  183. package/src/abi/connectors/v2/AAVE-STAKE-A.ts +3 -0
  184. package/src/abi/connectors/v2/AAVE-V1-A.ts +130 -0
  185. package/src/abi/connectors/v2/AAVE-V1-IMPORT-A.ts +3 -0
  186. package/src/abi/connectors/v2/AAVE-V2-A.ts +229 -0
  187. package/src/abi/connectors/v2/AAVE-V2-IMPORT-A.ts +3 -0
  188. package/src/abi/connectors/v2/AAVE-V2-IMPORT-B.ts +224 -0
  189. package/src/abi/connectors/v2/AUTHORITY-A.ts +99 -0
  190. package/src/abi/connectors/v2/B-COMPOUND-A.ts +3 -0
  191. package/src/abi/connectors/v2/B-LIQUITY-A.ts +3 -0
  192. package/src/abi/connectors/v2/B-MAKERDAO-A.ts +3 -0
  193. package/src/abi/connectors/v2/BASIC-A.ts +135 -0
  194. package/src/abi/connectors/v2/BASIC-B.ts +3 -0
  195. package/src/abi/connectors/v2/BASIC-C.ts +3 -0
  196. package/src/abi/connectors/v2/COMP-A.ts +3 -0
  197. package/src/abi/connectors/v2/COMPOUND-A.ts +3 -0
  198. package/src/abi/connectors/v2/COMPOUND-IMPORT-A.ts +3 -0
  199. package/src/abi/connectors/v2/COMPOUND-IMPORT-B.ts +194 -0
  200. package/src/abi/connectors/v2/G-UNISWAP-A.ts +3 -0
  201. package/src/abi/connectors/v2/GELATO-AAVE-A.ts +3 -0
  202. package/src/abi/connectors/v2/INST-A.ts +3 -0
  203. package/src/abi/connectors/v2/INST-LM-A.ts +3 -0
  204. package/src/abi/connectors/v2/INST-STAKING-A.ts +3 -0
  205. package/src/abi/connectors/v2/INST-STAKING-B.ts +3 -0
  206. package/src/abi/connectors/v2/INSTAPOOL-A.ts +3 -0
  207. package/src/abi/connectors/v2/LIQUITY-A.ts +3 -0
  208. package/src/abi/connectors/v2/MAKERDAO-A.ts +3 -0
  209. package/src/abi/connectors/v2/MAKERDAO-CLAIM-A.ts +135 -0
  210. package/src/abi/connectors/v2/PARASWAP-A.ts +3 -0
  211. package/src/abi/connectors/v2/POLYGON-BRIDGE-A.ts +3 -0
  212. package/src/abi/connectors/v2/REFINANCE-A.ts +3 -0
  213. package/src/abi/connectors/v2/REFLEXER-A.ts +3 -0
  214. package/src/abi/connectors/v2/STAKE-ERC20-A.ts +3 -0
  215. package/src/abi/connectors/v2/UNISWAP-A.ts +297 -0
  216. package/src/abi/connectors/v2/UNISWAP-V2-A.ts +3 -0
  217. package/src/abi/connectors/v2/UNISWAP-V3-A.ts +3 -0
  218. package/src/abi/connectors/v2/UNISWAP-V3-STAKE-A.ts +3 -0
  219. package/src/abi/connectors/v2/WETH-A.ts +3 -0
  220. package/src/abi/connectors/v2/YEARN-VAULT-A.ts +3 -0
  221. package/src/abi/connectors/v2/index.ts +87 -0
  222. package/src/abi/index.ts +9 -7
  223. package/src/abi/instList.json +232 -0
  224. package/src/abi/interopX.json +1436 -0
  225. package/src/alias.ts +6 -0
  226. package/src/api/index.ts +11 -0
  227. package/src/config/index.ts +9 -1
  228. package/src/constants/addresses.ts +7 -8
  229. package/src/constants/blockConfirmations.ts +5 -0
  230. package/src/constants/index.ts +1 -1
  231. package/src/constants/tokens.ts +63 -40
  232. package/src/db/models/transaction.ts +159 -65
  233. package/src/errors/index.ts +6 -0
  234. package/src/gnosis/actions/aaveV2/index.ts +9 -0
  235. package/src/gnosis/actions/aaveV2/source.ts +118 -0
  236. package/src/gnosis/actions/aaveV2/target.ts +141 -0
  237. package/src/gnosis/actions/index.ts +5 -0
  238. package/src/gnosis/index.ts +19 -0
  239. package/src/index.ts +47 -26
  240. package/src/net/protocol/dial/SignatureDialProtocol.ts +12 -13
  241. package/src/net/protocol/dial/{SignatureDialProtocol.1.ts → TransactionStatusDialProtocol.ts} +3 -1
  242. package/src/net/protocol/index.ts +17 -7
  243. package/src/tasks/AutoUpdateTask.ts +24 -15
  244. package/src/tasks/BaseTask.ts +5 -0
  245. package/src/tasks/InteropX/ProcessSubmitSubmitEvents.ts +267 -0
  246. package/src/tasks/InteropX/ProcessValidateEvents.ts +272 -0
  247. package/src/tasks/InteropX/SyncLogExecuteEvents.ts +160 -0
  248. package/src/tasks/InteropX/SyncLogSubmitEvents.ts +137 -0
  249. package/src/tasks/InteropX/SyncLogValidateEvents.ts +150 -0
  250. package/src/tasks/Transactions/SyncTransactionStatusTask.ts +8 -3
  251. package/src/tasks/index.ts +26 -20
  252. package/src/typechain/InstList.ts +402 -0
  253. package/src/typechain/InteropX.ts +1216 -0
  254. package/src/typechain/factories/InstList__factory.ts +253 -0
  255. package/src/typechain/factories/InteropX__factory.ts +1932 -0
  256. package/src/typechain/factories/index.ts +2 -2
  257. package/src/typechain/index.ts +4 -4
  258. package/src/utils/async.ts +22 -0
  259. package/src/utils/dsa.ts +30 -0
  260. package/src/utils/formatting.ts +15 -0
  261. package/src/utils/gnosis.ts +123 -0
  262. package/src/utils/http.ts +6 -0
  263. package/src/utils/index.ts +7 -319
  264. package/src/utils/interop.ts +28 -0
  265. package/src/utils/web3.ts +131 -0
  266. package/tsconfig.json +7 -2
  267. package/dist/src/abi/interopBridgeToken.json +0 -286
  268. package/dist/src/abi/interopXGateway.json +0 -184
  269. package/dist/src/constants/itokens.js +0 -13
  270. package/dist/src/tasks/InteropBridge/ProcessWithdrawEvents.js +0 -146
  271. package/dist/src/tasks/InteropBridge/SyncWithdrawEvents.js +0 -69
  272. package/dist/src/tasks/InteropXGateway/ProcessDepositEvents.js +0 -149
  273. package/dist/src/tasks/InteropXGateway/SyncDepositEvents.js +0 -74
  274. package/dist/src/typechain/factories/InteropBridgeToken__factory.js +0 -459
  275. package/dist/src/typechain/factories/InteropXGateway__factory.js +0 -265
  276. package/src/abi/interopBridgeToken.json +0 -286
  277. package/src/abi/interopXGateway.json +0 -184
  278. package/src/constants/itokens.ts +0 -10
  279. package/src/tasks/InteropBridge/ProcessWithdrawEvents.ts +0 -231
  280. package/src/tasks/InteropBridge/SyncWithdrawEvents.ts +0 -119
  281. package/src/tasks/InteropXGateway/ProcessDepositEvents.ts +0 -243
  282. package/src/tasks/InteropXGateway/SyncDepositEvents.ts +0 -124
  283. package/src/typechain/InteropBridgeToken.ts +0 -686
  284. package/src/typechain/InteropXGateway.ts +0 -407
  285. package/src/typechain/factories/InteropBridgeToken__factory.ts +0 -466
  286. package/src/typechain/factories/InteropXGateway__factory.ts +0 -272
@@ -3,5 +3,5 @@
3
3
  /* eslint-disable */
4
4
  export { Erc20__factory } from "./Erc20__factory";
5
5
  export { GnosisSafe__factory } from "./GnosisSafe__factory";
6
- export { InteropBridgeToken__factory } from "./InteropBridgeToken__factory";
7
- export { InteropXGateway__factory } from "./InteropXGateway__factory";
6
+ export { InstList__factory } from "./InstList__factory";
7
+ export { InteropX__factory } from "./InteropX__factory";
@@ -3,10 +3,10 @@
3
3
  /* eslint-disable */
4
4
  export type { Erc20 } from "./Erc20";
5
5
  export type { GnosisSafe } from "./GnosisSafe";
6
- export type { InteropBridgeToken } from "./InteropBridgeToken";
7
- export type { InteropXGateway } from "./InteropXGateway";
6
+ export type { InstList } from "./InstList";
7
+ export type { InteropX } from "./InteropX";
8
8
  export * as factories from "./factories";
9
9
  export { Erc20__factory } from "./factories/Erc20__factory";
10
10
  export { GnosisSafe__factory } from "./factories/GnosisSafe__factory";
11
- export { InteropBridgeToken__factory } from "./factories/InteropBridgeToken__factory";
12
- export { InteropXGateway__factory } from "./factories/InteropXGateway__factory";
11
+ export { InstList__factory } from "./factories/InstList__factory";
12
+ export { InteropX__factory } from "./factories/InteropX__factory";
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Call an async function with a maximum time limit (in milliseconds) for the timeout
3
+ * Resolved promise for async function call, or an error if time limit reached
4
+ */
5
+ export const asyncCallWithTimeout = async <T>(
6
+ asyncPromise: Promise<T>,
7
+ timeout: number
8
+ ) => {
9
+ let timeoutHandle;
10
+
11
+ const timeoutPromise = new Promise((_resolve, reject) => {
12
+ timeoutHandle = setTimeout(
13
+ () => reject(new Error("Async call timeout limit reached")),
14
+ timeout
15
+ );
16
+ });
17
+
18
+ return Promise.race([asyncPromise, timeoutPromise]).then((result) => {
19
+ clearTimeout(timeoutHandle);
20
+ return result;
21
+ }) as Promise<T>;
22
+ };
@@ -0,0 +1,30 @@
1
+ import Web3EthAbi from "web3-eth-abi";
2
+ import { connectors } from "@/abi/connectors";
3
+
4
+ export const encodeConnectorMethod = (params: {
5
+ connector: string;
6
+ method: string;
7
+ args: string[];
8
+ }) => {
9
+ const connectorInterface = getInterface(
10
+ connectors.versions[2][params.connector],
11
+ params.method
12
+ );
13
+
14
+ if (!connectorInterface)
15
+ throw new Error(`ConnectorInterface '${params.method}' not found`);
16
+
17
+ //@ts-ignore
18
+ return Web3EthAbi.encodeFunctionCall(connectorInterface, params.args);
19
+ };
20
+
21
+ const getInterface = (abiItems: any[], method: string) => {
22
+ const abiItem = abiItems.find((abiItem) => abiItem.name === method);
23
+
24
+ if (!abiItem) {
25
+ console.error(`${method} is an invalid method.`);
26
+ return;
27
+ }
28
+
29
+ return abiItem;
30
+ };
@@ -0,0 +1,15 @@
1
+ export function shortenHash(hash: string, length: number = 4) {
2
+ if (!hash) return;
3
+
4
+ if (hash.length < 12) return hash;
5
+
6
+ const beginningChars = hash.startsWith("0x") ? length + 2 : length;
7
+
8
+ const shortened = hash.substr(0, beginningChars) + "…" + hash.substr(-length);
9
+
10
+ return shortened;
11
+ }
12
+
13
+ export function short(buffer: Buffer): string {
14
+ return buffer.toString("hex").slice(0, 8) + "...";
15
+ }
@@ -0,0 +1,123 @@
1
+ import { addresses } from "@/constants";
2
+ import { GnosisSafe } from "@/typechain";
3
+ import { ChainId } from "@/types";
4
+ import { ethers, Wallet } from "ethers";
5
+
6
+ export interface Signature {
7
+ signer: string;
8
+ hash?: string;
9
+ data: string;
10
+ }
11
+
12
+ export const buildSignatureBytes = (signatures: Signature[]): string => {
13
+ signatures.sort((left, right) =>
14
+ left.signer.toLowerCase().localeCompare(right.signer.toLowerCase())
15
+ );
16
+ let signatureBytes = "0x";
17
+ for (const sig of signatures) {
18
+ signatureBytes += sig.data.slice(2);
19
+ }
20
+ return signatureBytes;
21
+ };
22
+
23
+ export const signGnosisSafeTx = async (
24
+ {
25
+ to,
26
+ data = null as any,
27
+ value = "0",
28
+ operation = "1",
29
+ baseGas = "0",
30
+ gasPrice = "0",
31
+ gasToken = "0x0000000000000000000000000000000000000000",
32
+ refundReceiver = "0x0000000000000000000000000000000000000000",
33
+ safeTxGas = "79668" as string | number,
34
+ nonce = "0",
35
+ chainId = 137 as ChainId,
36
+ },
37
+ { signer }: { signer: Wallet }
38
+ ) => {
39
+ const gnosisSafe = addresses[chainId].gnosisSafe;
40
+
41
+ const domain = {
42
+ verifyingContract: gnosisSafe,
43
+ chainId,
44
+ };
45
+
46
+ const types = {
47
+ SafeTx: [
48
+ { type: "address", name: "to" },
49
+ { type: "uint256", name: "value" },
50
+ { type: "bytes", name: "data" },
51
+ { type: "uint8", name: "operation" },
52
+ { type: "uint256", name: "safeTxGas" },
53
+ { type: "uint256", name: "baseGas" },
54
+ { type: "uint256", name: "gasPrice" },
55
+ { type: "address", name: "gasToken" },
56
+ { type: "address", name: "refundReceiver" },
57
+ { type: "uint256", name: "nonce" },
58
+ ],
59
+ };
60
+
61
+ const message = {
62
+ baseGas,
63
+ data,
64
+ gasPrice,
65
+ gasToken,
66
+ nonce: Number(nonce),
67
+ operation,
68
+ refundReceiver,
69
+ safeAddress: gnosisSafe,
70
+ safeTxGas: String(safeTxGas),
71
+ to,
72
+ value,
73
+ };
74
+
75
+ return await signer._signTypedData(domain, types, message);
76
+ };
77
+
78
+ export const generateGnosisTransaction = async (
79
+ transactionData: any,
80
+ safeContract: GnosisSafe
81
+ ) => {
82
+ console.log(transactionData);
83
+
84
+ let isExecuted = await safeContract.dataHashes(
85
+ await safeContract.getTransactionHash(
86
+ transactionData.to,
87
+ transactionData.value,
88
+ transactionData.data,
89
+ transactionData.operation,
90
+ transactionData.safeTxGas,
91
+ transactionData.baseGas,
92
+ transactionData.gasPrice,
93
+ transactionData.gasToken,
94
+ transactionData.refundReceiver,
95
+ transactionData.nonce
96
+ )
97
+ );
98
+
99
+ while (isExecuted == 1) {
100
+ transactionData.safeTxGas = ethers.BigNumber.from(
101
+ String(transactionData.safeTxGas)
102
+ )
103
+ .add(1)
104
+ .toString();
105
+
106
+ isExecuted = await safeContract.dataHashes(
107
+ await safeContract.getTransactionHash(
108
+ transactionData.to,
109
+ transactionData.value,
110
+ transactionData.data,
111
+ transactionData.operation,
112
+ transactionData.safeTxGas,
113
+ transactionData.baseGas,
114
+ transactionData.gasPrice,
115
+ transactionData.gasToken,
116
+ transactionData.refundReceiver,
117
+ transactionData.nonce
118
+ )
119
+ );
120
+ }
121
+
122
+ return transactionData;
123
+ };
@@ -0,0 +1,6 @@
1
+ import axios from "axios";
2
+ import axiosRetry from "axios-retry";
3
+
4
+ export const http = axios.create();
5
+
6
+ axiosRetry(http, { retries: 3, retryDelay: axiosRetry.exponentialDelay });
@@ -1,319 +1,7 @@
1
- /**
2
- * @module util
3
- */
4
- import axios from 'axios'
5
- import axiosRetry from "axios-retry";
6
- import { addresses, itokens, tokens } from '@/constants';
7
- import { ChainId } from '@/types'
8
- import { ethers } from 'ethers';
9
- import { encodeMulti, MetaTransaction, OperationType } from 'ethers-multisend';
10
- import { Transaction } from '@/db';
11
- import config from '@/config';
12
- import abi from '@/abi';
13
- import { InteropBridgeToken, InteropXGateway } from '@/typechain';
14
-
15
- export const http = axios.create();
16
-
17
- axiosRetry(http, { retries: 3, retryDelay: axiosRetry.exponentialDelay });
18
-
19
-
20
- export function shortenHash(hash: string, length: number = 4) {
21
- if (!hash) return;
22
-
23
- if (hash.length < 12) return hash;
24
-
25
- const beginningChars = hash.startsWith("0x") ? length + 2 : length;
26
-
27
- const shortened = hash.substr(0, beginningChars) + "…" + hash.substr(-length);
28
-
29
- return shortened;
30
- }
31
-
32
- export function short(buffer: Buffer): string {
33
- return buffer.toString('hex').slice(0, 8) + '...'
34
- }
35
-
36
- export const signGnosisSafeTx = async ({
37
- to,
38
- data = null as any,
39
- value = '0',
40
- operation = '1',
41
- baseGas = '0',
42
- gasPrice = "0",
43
- gasToken = "0x0000000000000000000000000000000000000000",
44
- refundReceiver = "0x0000000000000000000000000000000000000000",
45
- safeTxGas = "79668" as string | number,
46
- nonce = "0",
47
- chainId = 137 as ChainId,
48
- }, { signer }) => {
49
- const gnosisSafe = addresses[chainId].gnosisSafe;
50
-
51
- const domain = {
52
- verifyingContract: gnosisSafe,
53
- chainId,
54
- };
55
-
56
- const types = {
57
- SafeTx: [
58
- { type: 'address', name: 'to' },
59
- { type: 'uint256', name: 'value' },
60
- { type: 'bytes', name: 'data' },
61
- { type: 'uint8', name: 'operation' },
62
- { type: 'uint256', name: 'safeTxGas' },
63
- { type: 'uint256', name: 'baseGas' },
64
- { type: 'uint256', name: 'gasPrice' },
65
- { type: 'address', name: 'gasToken' },
66
- { type: 'address', name: 'refundReceiver' },
67
- { type: 'uint256', name: 'nonce' },
68
- ],
69
- };
70
-
71
- const message = {
72
- baseGas,
73
- data,
74
- gasPrice,
75
- gasToken,
76
- nonce: Number(nonce),
77
- operation,
78
- refundReceiver,
79
- safeAddress: gnosisSafe,
80
- safeTxGas: String(safeTxGas),
81
- to,
82
- value,
83
- };
84
-
85
- return await signer._signTypedData(domain, types, message)
86
- };
87
-
88
- export const getRpcProviderUrl = (chainId: ChainId) => {
89
- switch (chainId) {
90
- case 1:
91
- return 'https://rpc.ankr.com/eth';
92
- case 137:
93
- return 'https://rpc.ankr.com/polygon';
94
- case 43114:
95
- return 'https://rpc.ankr.com/avalanche';
96
- default:
97
- throw new Error(`Unknown chainId: ${chainId}`);
98
- }
99
- }
100
-
101
- export interface Signature {
102
- signer: string;
103
- hash?: string;
104
- data: string;
105
- }
106
-
107
- export const buildSignatureBytes = (signatures: Signature[]): string => {
108
- signatures.sort((left, right) =>
109
- left.signer.toLowerCase().localeCompare(right.signer.toLowerCase())
110
- );
111
- let signatureBytes = "0x";
112
- for (const sig of signatures) {
113
- signatureBytes += sig.data.slice(2);
114
- }
115
- return signatureBytes;
116
- };
117
-
118
- /**
119
- * Call an async function with a maximum time limit (in milliseconds) for the timeout
120
- * Resolved promise for async function call, or an error if time limit reached
121
- */
122
- export const asyncCallWithTimeout = async <T>(asyncPromise: Promise<T>, timeout: number) => {
123
- let timeoutHandle;
124
-
125
- const timeoutPromise = new Promise((_resolve, reject) => {
126
- timeoutHandle = setTimeout(
127
- () => reject(new Error('Async call timeout limit reached')),
128
- timeout
129
- );
130
- });
131
-
132
- return Promise.race([asyncPromise, timeoutPromise]).then(result => {
133
- clearTimeout(timeoutHandle);
134
- return result;
135
- }) as Promise<T>
136
- }
137
-
138
-
139
- export const generateInteropTransactionHash = (data: { action: string, submitTransactionHash: string, sourceChainId: string | number, targetChainId: string | number }) => {
140
- return ethers.utils.solidityKeccak256(['string', 'string', 'string', 'string'], [
141
- String(data.action),
142
- String(data.submitTransactionHash),
143
- String(data.sourceChainId),
144
- String(data.targetChainId),
145
- ]);
146
- }
147
-
148
- export const buildDataForTransaction = async (transaction: Transaction, type?: 'source' | 'target') => {
149
- type = type || transaction.sourceStatus === 'pending' ? 'source' : 'target';
150
-
151
- switch (transaction.action) {
152
- case "deposit":
153
- return await buildDepositDataForTransaction(transaction, type);
154
- case "withdraw":
155
- return await buildWithdrawDataForTransaction(transaction, type);
156
- default:
157
- throw new Error(`Unknown action: ${transaction.action}`);
158
- }
159
- }
160
-
161
- export const buildDepositDataForTransaction = async (transaction: Transaction, type: 'source' | 'target') => {
162
- const transactions: MetaTransaction[] = [];
163
-
164
- if (transaction.action !== 'deposit') {
165
- throw new Error(`Invalid action: ${transaction.action}`)
166
- }
167
-
168
- if (transaction.action === 'deposit' && transaction.sourceStatus === 'pending') {
169
- throw Error('Cannot build data for pending deposit transaction');
170
- }
171
-
172
- if (!transaction.submitEvent) {
173
- throw Error('Cannot build data for transaction without submitEvent');
174
- }
175
-
176
-
177
- const token = tokens[transaction.sourceChainId].find(token => token.address.toLowerCase() === transaction.submitEvent.token.toLowerCase());
178
-
179
- if (!token) {
180
- throw Error('Cannot build data for transaction without token');
181
- }
182
-
183
- const itoken = itokens[transaction.targetChainId].find(itoken => itoken.symbol.toLowerCase() === token.symbol.toLowerCase());
184
-
185
- if (!itoken) {
186
- throw Error('Cannot build data for transaction without itoken');
187
- }
188
-
189
- const targetChainProvider = new ethers.providers.JsonRpcProvider(getRpcProviderUrl(transaction.targetChainId as ChainId));
190
- const targetWallet = new ethers.Wallet(config.privateKey, targetChainProvider);
191
- const interopBridgeContract = getContract<InteropBridgeToken>(itoken.address, abi.interopBridgeToken, targetWallet);
192
-
193
- const { data } = await interopBridgeContract.populateTransaction.mint(
194
- transaction.submitEvent.user,
195
- ethers.BigNumber.from(transaction.submitEvent.amount.toString()),
196
- ethers.BigNumber.from(transaction.submitEvent.sourceChainId.toString()),
197
- transaction.submitTransactionHash,
198
- );
199
-
200
- transactions.push({
201
- to: itoken.address,
202
- data: data!,
203
- value: '0',
204
- operation: OperationType.Call,
205
- });
206
-
207
- return encodeMulti(transactions).data
208
- }
209
-
210
- export const buildWithdrawDataForTransaction = async (transaction: Transaction, type: 'source' | 'target') => {
211
- const transactions: MetaTransaction[] = [];
212
-
213
- if (transaction.action !== 'withdraw') {
214
- throw new Error(`Invalid action: ${transaction.action}`)
215
- }
216
-
217
- if (transaction.action === 'withdraw' && transaction.sourceStatus === 'pending') {
218
- throw Error('Cannot build data for pending withdraw transaction');
219
- }
220
-
221
- if (!transaction.submitEvent) {
222
- throw Error('Cannot build data for transaction without submitEvent');
223
- }
224
-
225
- const { to, amount, chainId, itoken: itokenAddress } = transaction.submitEvent;
226
-
227
- const itoken = itokens[transaction.sourceChainId].find(token => token.address.toLowerCase() === itokenAddress.toLowerCase());
228
-
229
- if (!itoken) {
230
- throw Error('Cannot build data for transaction without itoken');
231
- }
232
-
233
- const token = tokens[chainId].find(t => t.symbol.toLowerCase() === itoken.symbol.toLowerCase());
234
-
235
- if (!token) {
236
- throw Error('Cannot build data for transaction without token');
237
- }
238
-
239
- const targetChainProvider = new ethers.providers.JsonRpcProvider(getRpcProviderUrl(transaction.targetChainId as ChainId));
240
- const targetWallet = new ethers.Wallet(config.privateKey, targetChainProvider);
241
- const gatewayAddress = addresses[chainId].interopXGateway;
242
- const interopBridgeContract = getContract<InteropXGateway>(gatewayAddress, abi.interopXGateway, targetWallet);
243
-
244
- const { data } = await interopBridgeContract.populateTransaction.systemWithdraw(
245
- ethers.BigNumber.from(amount.toString()),
246
- to,
247
- token.address,
248
- ethers.BigNumber.from(transaction.sourceChainId.toString()),
249
- transaction.submitTransactionHash,
250
- );
251
-
252
- transactions.push({
253
- to: gatewayAddress,
254
- data: data!,
255
- value: '0',
256
- operation: OperationType.Call,
257
- });
258
-
259
- return encodeMulti(transactions).data
260
- }
261
-
262
-
263
- export function getContract<TContract extends ethers.Contract>(address: string, contractInterface: ethers.ContractInterface | any, signerOrProvider?: ethers.Signer | ethers.providers.Provider) {
264
- if (!ethers.utils.getAddress(address) || address === ethers.constants.AddressZero) {
265
- throw Error(`Invalid 'address' parameter '${address}'.`)
266
- }
267
-
268
- const contract = new ethers.Contract(
269
- address,
270
- contractInterface,
271
- signerOrProvider
272
- ) as TContract
273
-
274
- // Make sure the contract properties is writable
275
- const desc = Object.getOwnPropertyDescriptor(contract, 'functions');
276
-
277
- if (!desc || desc.writable !== true) {
278
- return contract
279
- }
280
-
281
- return new Proxy(contract, {
282
- get(target, prop, receiver) {
283
- const value = Reflect.get(target, prop, receiver);
284
-
285
- if (typeof value === 'function' && (contract.functions.hasOwnProperty(prop) || ['queryFilter'].includes(String(prop)))) {
286
- return async (...args: any[]) => {
287
- try {
288
- return await value.bind(contract)(...args);
289
- } catch (error) {
290
- throw new Error(`Error calling "${String(prop)}" on "${address}": ${error.reason || error.message}`)
291
- }
292
- }
293
- }
294
-
295
-
296
- if (typeof value === 'object' && ['populateTransaction', 'estimateGas', 'functions', 'callStatic'].includes(String(prop))) {
297
- const parentProp = String(prop);
298
-
299
- return new Proxy(value, {
300
- get(target, prop, receiver) {
301
- const value = Reflect.get(target, prop, receiver);
302
-
303
- if (typeof value === 'function') {
304
- return async (...args: any[]) => {
305
- try {
306
- return await value.bind(contract)(...args);
307
- } catch (error) {
308
- throw new Error(`Error calling "${String(prop)}" using "${parentProp}" on "${address}": ${error.reason || error.message}`)
309
- }
310
- }
311
- }
312
- }
313
- })
314
- }
315
-
316
- return value;
317
- },
318
- });
319
- }
1
+ export * from './async';
2
+ export * from './dsa';
3
+ export * from './formatting';
4
+ export * from './gnosis';
5
+ export * from './http';
6
+ export * from './interop';
7
+ export * from './web3';
@@ -0,0 +1,28 @@
1
+ import { ethers } from "ethers";
2
+
3
+ type GenerateInteropTransactionHashParam = {
4
+ actionId: string;
5
+ vnonce: string;
6
+ sourceSender: string;
7
+ sourceChainId: string | number;
8
+ sourceDsaId: string;
9
+ targetChainId: string | number;
10
+ targetDsaId: string;
11
+ };
12
+
13
+ export const generateInteropTransactionHash = (
14
+ data: GenerateInteropTransactionHashParam
15
+ ) => {
16
+ return ethers.utils.solidityKeccak256(
17
+ Array.from({ length: 7 }, () => "string"),
18
+ [
19
+ String(data.actionId),
20
+ String(data.vnonce),
21
+ String(data.sourceSender),
22
+ String(data.sourceChainId),
23
+ String(data.sourceDsaId),
24
+ String(data.targetChainId),
25
+ String(data.targetDsaId),
26
+ ]
27
+ );
28
+ };