@instadapp/interop-x 0.0.0-dev.edef11e → 0.0.0-dev.ee3d74b

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