@instadapp/interop-x 0.0.0-dev.1abc1ca → 0.0.0-dev.20e87fa

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