@instadapp/interop-x 0.0.0-dev.d2e8d37 → 0.0.0-dev.d58bb7b

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 (261) hide show
  1. package/.github/workflows/ci.yml +19 -0
  2. package/dist/package.json +17 -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 +4 -4
  91. package/dist/src/abi/interopX.json +1436 -0
  92. package/dist/src/alias.js +10 -0
  93. package/dist/src/api/index.js +3 -0
  94. package/dist/src/config/index.js +10 -1
  95. package/dist/src/constants/addresses.js +4 -7
  96. package/dist/src/constants/blockConfirmations.js +8 -0
  97. package/dist/src/constants/index.js +1 -1
  98. package/dist/src/constants/tokens.js +62 -39
  99. package/dist/src/db/models/transaction.js +37 -15
  100. package/dist/src/gnosis/actions/aaveV2/index.js +11 -0
  101. package/dist/src/gnosis/actions/aaveV2/source.js +73 -0
  102. package/dist/src/gnosis/actions/aaveV2/target.js +8 -0
  103. package/dist/src/gnosis/actions/index.js +9 -0
  104. package/dist/src/gnosis/index.js +20 -0
  105. package/dist/src/index.js +34 -22
  106. package/dist/src/net/protocol/dial/SignatureDialProtocol.js +9 -10
  107. package/dist/src/net/protocol/dial/{SignatureDialProtocol.1.js → TransactionStatusDialProtocol.js} +2 -0
  108. package/dist/src/net/protocol/index.js +17 -7
  109. package/dist/src/tasks/AutoUpdateTask.js +11 -8
  110. package/dist/src/tasks/BaseTask.js +4 -0
  111. package/dist/src/tasks/InteropX/ProcessSubmitSubmitEvents.js +179 -0
  112. package/dist/src/tasks/InteropX/SyncLogSubmitEvents.js +87 -0
  113. package/dist/src/tasks/InteropX/SyncLogValidateEvents.js +105 -0
  114. package/dist/src/tasks/Transactions/SyncTransactionStatusTask.js +8 -3
  115. package/dist/src/tasks/index.js +15 -19
  116. package/dist/src/typechain/{InteropBridgeToken.js → InteropX.js} +0 -0
  117. package/dist/src/typechain/factories/InteropX__factory.js +1928 -0
  118. package/dist/src/typechain/factories/index.js +3 -5
  119. package/dist/src/typechain/index.js +3 -5
  120. package/dist/src/utils/index.js +97 -112
  121. package/package.json +17 -14
  122. package/src/abi/connectors/index.ts +14 -0
  123. package/src/abi/connectors/v1/aave.ts +147 -0
  124. package/src/abi/connectors/v1/aave_claim.ts +3 -0
  125. package/src/abi/connectors/v1/aave_migrate.ts +108 -0
  126. package/src/abi/connectors/v1/aave_polygon_migrate.ts +109 -0
  127. package/src/abi/connectors/v1/aave_stake.ts +3 -0
  128. package/src/abi/connectors/v1/aave_v1_import.ts +53 -0
  129. package/src/abi/connectors/v1/aave_v2.ts +229 -0
  130. package/src/abi/connectors/v1/aave_v2_import.ts +58 -0
  131. package/src/abi/connectors/v1/authority.ts +99 -0
  132. package/src/abi/connectors/v1/basic.ts +135 -0
  133. package/src/abi/connectors/v1/chi.ts +35 -0
  134. package/src/abi/connectors/v1/comp.ts +3 -0
  135. package/src/abi/connectors/v1/compound.ts +3 -0
  136. package/src/abi/connectors/v1/compoundImport.ts +68 -0
  137. package/src/abi/connectors/v1/compoundImport_v2.ts +3 -0
  138. package/src/abi/connectors/v1/compound_old.ts +447 -0
  139. package/src/abi/connectors/v1/curve.ts +139 -0
  140. package/src/abi/connectors/v1/curve_claim.ts +62 -0
  141. package/src/abi/connectors/v1/curve_gauge.ts +157 -0
  142. package/src/abi/connectors/v1/curve_sbtc.ts +139 -0
  143. package/src/abi/connectors/v1/curve_susd.ts +139 -0
  144. package/src/abi/connectors/v1/curve_three.ts +78 -0
  145. package/src/abi/connectors/v1/curve_y.ts +139 -0
  146. package/src/abi/connectors/v1/dsa_migrate_v1_to_v2.ts +3 -0
  147. package/src/abi/connectors/v1/dydx.ts +147 -0
  148. package/src/abi/connectors/v1/dydx_flash.ts +51 -0
  149. package/src/abi/connectors/v1/fee.ts +49 -0
  150. package/src/abi/connectors/v1/gelato.ts +1137 -0
  151. package/src/abi/connectors/v1/index.ts +42 -0
  152. package/src/abi/connectors/v1/instapool.ts +438 -0
  153. package/src/abi/connectors/v1/instapool_v2.ts +125 -0
  154. package/src/abi/connectors/v1/kyber.ts +116 -0
  155. package/src/abi/connectors/v1/maker.ts +479 -0
  156. package/src/abi/connectors/v1/maker_old.ts +299 -0
  157. package/src/abi/connectors/v1/math.ts +42 -0
  158. package/src/abi/connectors/v1/migrate.ts +45 -0
  159. package/src/abi/connectors/v1/oasis.ts +197 -0
  160. package/src/abi/connectors/v1/oneInch.ts +159 -0
  161. package/src/abi/connectors/v1/polygon_bridge.ts +3 -0
  162. package/src/abi/connectors/v1/refinance.ts +3 -0
  163. package/src/abi/connectors/v1/staking.ts +219 -0
  164. package/src/abi/connectors/v1/swerve.ts +178 -0
  165. package/src/abi/connectors/v1/uniswap.ts +297 -0
  166. package/src/abi/connectors/v2/1INCH-A.ts +3 -0
  167. package/src/abi/connectors/v2/1INCH-B.ts +3 -0
  168. package/src/abi/connectors/v2/AAVE-CLAIM-A.ts +3 -0
  169. package/src/abi/connectors/v2/AAVE-CLAIM-B.ts +165 -0
  170. package/src/abi/connectors/v2/AAVE-STAKE-A.ts +3 -0
  171. package/src/abi/connectors/v2/AAVE-V1-A.ts +130 -0
  172. package/src/abi/connectors/v2/AAVE-V1-IMPORT-A.ts +3 -0
  173. package/src/abi/connectors/v2/AAVE-V2-A.ts +229 -0
  174. package/src/abi/connectors/v2/AAVE-V2-IMPORT-A.ts +3 -0
  175. package/src/abi/connectors/v2/AAVE-V2-IMPORT-B.ts +224 -0
  176. package/src/abi/connectors/v2/AUTHORITY-A.ts +99 -0
  177. package/src/abi/connectors/v2/B-COMPOUND-A.ts +3 -0
  178. package/src/abi/connectors/v2/B-LIQUITY-A.ts +3 -0
  179. package/src/abi/connectors/v2/B-MAKERDAO-A.ts +3 -0
  180. package/src/abi/connectors/v2/BASIC-A.ts +135 -0
  181. package/src/abi/connectors/v2/BASIC-B.ts +3 -0
  182. package/src/abi/connectors/v2/BASIC-C.ts +3 -0
  183. package/src/abi/connectors/v2/COMP-A.ts +3 -0
  184. package/src/abi/connectors/v2/COMPOUND-A.ts +3 -0
  185. package/src/abi/connectors/v2/COMPOUND-IMPORT-A.ts +3 -0
  186. package/src/abi/connectors/v2/COMPOUND-IMPORT-B.ts +194 -0
  187. package/src/abi/connectors/v2/G-UNISWAP-A.ts +3 -0
  188. package/src/abi/connectors/v2/GELATO-AAVE-A.ts +3 -0
  189. package/src/abi/connectors/v2/INST-A.ts +3 -0
  190. package/src/abi/connectors/v2/INST-LM-A.ts +3 -0
  191. package/src/abi/connectors/v2/INST-STAKING-A.ts +3 -0
  192. package/src/abi/connectors/v2/INST-STAKING-B.ts +3 -0
  193. package/src/abi/connectors/v2/INSTAPOOL-A.ts +3 -0
  194. package/src/abi/connectors/v2/LIQUITY-A.ts +3 -0
  195. package/src/abi/connectors/v2/MAKERDAO-A.ts +3 -0
  196. package/src/abi/connectors/v2/MAKERDAO-CLAIM-A.ts +135 -0
  197. package/src/abi/connectors/v2/PARASWAP-A.ts +3 -0
  198. package/src/abi/connectors/v2/POLYGON-BRIDGE-A.ts +3 -0
  199. package/src/abi/connectors/v2/REFINANCE-A.ts +3 -0
  200. package/src/abi/connectors/v2/REFLEXER-A.ts +3 -0
  201. package/src/abi/connectors/v2/STAKE-ERC20-A.ts +3 -0
  202. package/src/abi/connectors/v2/UNISWAP-A.ts +297 -0
  203. package/src/abi/connectors/v2/UNISWAP-V2-A.ts +3 -0
  204. package/src/abi/connectors/v2/UNISWAP-V3-A.ts +3 -0
  205. package/src/abi/connectors/v2/UNISWAP-V3-STAKE-A.ts +3 -0
  206. package/src/abi/connectors/v2/WETH-A.ts +3 -0
  207. package/src/abi/connectors/v2/YEARN-VAULT-A.ts +3 -0
  208. package/src/abi/connectors/v2/index.ts +87 -0
  209. package/src/abi/index.ts +7 -7
  210. package/src/abi/interopX.json +1436 -0
  211. package/src/alias.ts +6 -0
  212. package/src/api/index.ts +3 -0
  213. package/src/config/index.ts +9 -1
  214. package/src/constants/addresses.ts +5 -8
  215. package/src/constants/blockConfirmations.ts +5 -0
  216. package/src/constants/index.ts +1 -1
  217. package/src/constants/tokens.ts +63 -40
  218. package/src/db/models/transaction.ts +138 -65
  219. package/src/gnosis/actions/aaveV2/index.ts +9 -0
  220. package/src/gnosis/actions/aaveV2/source.ts +118 -0
  221. package/src/gnosis/actions/aaveV2/target.ts +13 -0
  222. package/src/gnosis/actions/index.ts +5 -0
  223. package/src/gnosis/index.ts +19 -0
  224. package/src/index.ts +47 -26
  225. package/src/net/protocol/dial/SignatureDialProtocol.ts +12 -13
  226. package/src/net/protocol/dial/{SignatureDialProtocol.1.ts → TransactionStatusDialProtocol.ts} +3 -1
  227. package/src/net/protocol/index.ts +17 -7
  228. package/src/tasks/AutoUpdateTask.ts +15 -14
  229. package/src/tasks/BaseTask.ts +5 -0
  230. package/src/tasks/InteropX/ProcessSubmitSubmitEvents.ts +269 -0
  231. package/src/tasks/InteropX/SyncLogSubmitEvents.ts +139 -0
  232. package/src/tasks/InteropX/SyncLogValidateEvents.ts +152 -0
  233. package/src/tasks/Transactions/SyncTransactionStatusTask.ts +8 -3
  234. package/src/tasks/index.ts +18 -20
  235. package/src/typechain/InteropX.ts +1216 -0
  236. package/src/typechain/factories/InteropX__factory.ts +1932 -0
  237. package/src/typechain/factories/index.ts +1 -2
  238. package/src/typechain/index.ts +2 -4
  239. package/src/utils/index.ts +229 -183
  240. package/tsconfig.json +7 -2
  241. package/dist/src/abi/interopBridgeToken.json +0 -286
  242. package/dist/src/abi/interopXGateway.json +0 -184
  243. package/dist/src/constants/itokens.js +0 -13
  244. package/dist/src/tasks/InteropBridge/ProcessWithdrawEvents.js +0 -146
  245. package/dist/src/tasks/InteropBridge/SyncWithdrawEvents.js +0 -69
  246. package/dist/src/tasks/InteropXGateway/ProcessDepositEvents.js +0 -149
  247. package/dist/src/tasks/InteropXGateway/SyncDepositEvents.js +0 -74
  248. package/dist/src/typechain/InteropXGateway.js +0 -2
  249. package/dist/src/typechain/factories/InteropBridgeToken__factory.js +0 -459
  250. package/dist/src/typechain/factories/InteropXGateway__factory.js +0 -265
  251. package/src/abi/interopBridgeToken.json +0 -286
  252. package/src/abi/interopXGateway.json +0 -184
  253. package/src/constants/itokens.ts +0 -10
  254. package/src/tasks/InteropBridge/ProcessWithdrawEvents.ts +0 -231
  255. package/src/tasks/InteropBridge/SyncWithdrawEvents.ts +0 -119
  256. package/src/tasks/InteropXGateway/ProcessDepositEvents.ts +0 -243
  257. package/src/tasks/InteropXGateway/SyncDepositEvents.ts +0 -124
  258. package/src/typechain/InteropBridgeToken.ts +0 -686
  259. package/src/typechain/InteropXGateway.ts +0 -407
  260. package/src/typechain/factories/InteropBridgeToken__factory.ts +0 -466
  261. package/src/typechain/factories/InteropXGateway__factory.ts +0 -272
@@ -3,5 +3,4 @@
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 { InteropX__factory } from "./InteropX__factory";
@@ -3,10 +3,8 @@
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 { InteropX } from "./InteropX";
8
7
  export * as factories from "./factories";
9
8
  export { Erc20__factory } from "./factories/Erc20__factory";
10
9
  export { GnosisSafe__factory } from "./factories/GnosisSafe__factory";
11
- export { InteropBridgeToken__factory } from "./factories/InteropBridgeToken__factory";
12
- export { InteropXGateway__factory } from "./factories/InteropXGateway__factory";
10
+ export { InteropX__factory } from "./factories/InteropX__factory";
@@ -1,22 +1,20 @@
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, InteropXGateway } 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
 
19
-
20
18
  export function shortenHash(hash: string, length: number = 4) {
21
19
  if (!hash) return;
22
20
 
@@ -30,22 +28,25 @@ export function shortenHash(hash: string, length: number = 4) {
30
28
  }
31
29
 
32
30
  export function short(buffer: Buffer): string {
33
- return buffer.toString('hex').slice(0, 8) + '...'
31
+ return buffer.toString("hex").slice(0, 8) + "...";
34
32
  }
35
33
 
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 }) => {
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
+ ) => {
49
50
  const gnosisSafe = addresses[chainId].gnosisSafe;
50
51
 
51
52
  const domain = {
@@ -55,16 +56,16 @@ export const signGnosisSafeTx = async ({
55
56
 
56
57
  const types = {
57
58
  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' },
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" },
68
69
  ],
69
70
  };
70
71
 
@@ -82,21 +83,21 @@ export const signGnosisSafeTx = async ({
82
83
  value,
83
84
  };
84
85
 
85
- return await signer._signTypedData(domain, types, message)
86
+ return await signer._signTypedData(domain, types, message);
86
87
  };
87
88
 
88
89
  export const getRpcProviderUrl = (chainId: ChainId) => {
89
90
  switch (chainId) {
90
91
  case 1:
91
- return 'https://rpc.ankr.com/eth';
92
+ return "https://rpc.ankr.com/eth";
92
93
  case 137:
93
- return 'https://rpc.ankr.com/polygon';
94
+ return "https://rpc.ankr.com/polygon";
94
95
  case 43114:
95
- return 'https://rpc.ankr.com/avalanche';
96
+ return "https://rpc.ankr.com/avalanche";
96
97
  default:
97
98
  throw new Error(`Unknown chainId: ${chainId}`);
98
99
  }
99
- }
100
+ };
100
101
 
101
102
  export interface Signature {
102
103
  signer: string;
@@ -119,201 +120,246 @@ export const buildSignatureBytes = (signatures: Signature[]): string => {
119
120
  * Call an async function with a maximum time limit (in milliseconds) for the timeout
120
121
  * Resolved promise for async function call, or an error if time limit reached
121
122
  */
122
- export const asyncCallWithTimeout = async <T>(asyncPromise: Promise<T>, timeout: number) => {
123
+ export const asyncCallWithTimeout = async <T>(
124
+ asyncPromise: Promise<T>,
125
+ timeout: number
126
+ ) => {
123
127
  let timeoutHandle;
124
128
 
125
129
  const timeoutPromise = new Promise((_resolve, reject) => {
126
130
  timeoutHandle = setTimeout(
127
- () => reject(new Error('Async call timeout limit reached')),
131
+ () => reject(new Error("Async call timeout limit reached")),
128
132
  timeout
129
133
  );
130
134
  });
131
135
 
132
- return Promise.race([asyncPromise, timeoutPromise]).then(result => {
136
+ return Promise.race([asyncPromise, timeoutPromise]).then((result) => {
133
137
  clearTimeout(timeoutHandle);
134
138
  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
- }
139
+ }) as Promise<T>;
140
+ };
238
141
 
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);
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
+ };
243
151
 
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,
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
+ ]
250
166
  );
167
+ };
251
168
 
252
- transactions.push({
253
- to: gatewayAddress,
254
- data: data!,
255
- value: '0',
256
- operation: OperationType.Call,
257
- });
258
-
259
- return encodeMulti(transactions).data
169
+ export class ContractError extends Error {
170
+ method: string;
171
+ address: string;
172
+ args: any[];
260
173
  }
261
174
 
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}'.`)
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}'.`);
266
185
  }
267
186
 
268
187
  const contract = new ethers.Contract(
269
188
  address,
270
189
  contractInterface,
271
190
  signerOrProvider
272
- ) as TContract
191
+ ) as TContract;
273
192
 
274
193
  // Make sure the contract properties is writable
275
- const desc = Object.getOwnPropertyDescriptor(contract, 'functions');
194
+ const desc = Object.getOwnPropertyDescriptor(contract, "functions");
276
195
 
277
196
  if (!desc || desc.writable !== true) {
278
- return contract
197
+ return contract;
279
198
  }
280
199
 
281
200
  return new Proxy(contract, {
282
201
  get(target, prop, receiver) {
283
202
  const value = Reflect.get(target, prop, receiver);
284
203
 
285
- if (typeof value === 'function' && (contract.functions.hasOwnProperty(prop) || ['queryFilter'].includes(String(prop)))) {
204
+ if (
205
+ typeof value === "function" &&
206
+ (contract.functions.hasOwnProperty(prop) ||
207
+ ["queryFilter"].includes(String(prop)))
208
+ ) {
209
+ let isConstant = false;
210
+
211
+ try {
212
+ isConstant = contract.interface.getFunction(String(prop)).constant;
213
+ } catch (error) {}
214
+
286
215
  return async (...args: any[]) => {
287
216
  try {
288
- return await value.bind(contract)(...args);
217
+ return await retry(
218
+ async () => await value.bind(contract)(...args),
219
+ { retries: isConstant ? 1 : 3 }
220
+ );
289
221
  } catch (error) {
290
- throw new Error(`Error calling "${String(prop)}" on "${address}": ${error.reason || error.message}`)
222
+ const err = new ContractError(
223
+ `Error calling "${String(prop)}" on "${address}": ${
224
+ error.reason || error.message
225
+ }`
226
+ );
227
+
228
+ err.method = String(prop);
229
+ err.address = address;
230
+ err.args = [...args];
231
+
232
+ throw err;
291
233
  }
292
- }
234
+ };
293
235
  }
294
236
 
295
-
296
- if (typeof value === 'object' && ['populateTransaction', 'estimateGas', 'functions', 'callStatic'].includes(String(prop))) {
237
+ if (
238
+ typeof value === "object" &&
239
+ [
240
+ "populateTransaction",
241
+ "estimateGas",
242
+ "functions",
243
+ "callStatic",
244
+ ].includes(String(prop))
245
+ ) {
297
246
  const parentProp = String(prop);
298
247
 
299
248
  return new Proxy(value, {
300
249
  get(target, prop, receiver) {
301
250
  const value = Reflect.get(target, prop, receiver);
302
251
 
303
- if (typeof value === 'function') {
252
+ if (typeof value === "function") {
304
253
  return async (...args: any[]) => {
305
254
  try {
306
- return await value.bind(contract)(...args);
255
+ return await retry(
256
+ async () => await value.bind(contract)(...args),
257
+ { retries: parentProp === "callStatic" ? 3 : 1 }
258
+ );
307
259
  } catch (error) {
308
- throw new Error(`Error calling "${String(prop)}" using "${parentProp}" on "${address}": ${error.reason || error.message}`)
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];
271
+
272
+ throw err;
309
273
  }
310
- }
274
+ };
311
275
  }
312
- }
313
- })
276
+ },
277
+ });
314
278
  }
315
279
 
316
280
  return value;
317
281
  },
318
282
  });
319
- }
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
+ };
331
+
332
+ export class LiquidityError extends Error {
333
+ constructor(message?: string) {
334
+ super(message || "Not enough liquidity");
335
+ Object.setPrototypeOf(this, new.target.prototype);
336
+ }
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",