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

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 (259) hide show
  1. package/.github/workflows/ci.yml +19 -0
  2. package/dist/package.json +16 -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/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 +29 -11
  100. package/dist/src/gnosis/actions/aaveV2/index.js +11 -0
  101. package/dist/src/gnosis/actions/aaveV2/source.js +62 -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 +10 -7
  110. package/dist/src/tasks/BaseTask.js +4 -0
  111. package/dist/src/tasks/InteropX/ProcessSubmitSubmitEvents.js +168 -0
  112. package/dist/src/tasks/InteropX/SyncLogSubmitEvents.js +86 -0
  113. package/dist/src/tasks/Transactions/SyncTransactionStatusTask.js +8 -3
  114. package/dist/src/tasks/index.js +12 -19
  115. package/dist/src/typechain/{InteropBridgeToken.js → InteropX.js} +0 -0
  116. package/dist/src/typechain/factories/InteropX__factory.js +1928 -0
  117. package/dist/src/typechain/factories/index.js +3 -5
  118. package/dist/src/typechain/index.js +3 -5
  119. package/dist/src/utils/index.js +96 -112
  120. package/package.json +16 -13
  121. package/src/abi/connectors/index.ts +14 -0
  122. package/src/abi/connectors/v1/aave.ts +147 -0
  123. package/src/abi/connectors/v1/aave_claim.ts +3 -0
  124. package/src/abi/connectors/v1/aave_migrate.ts +108 -0
  125. package/src/abi/connectors/v1/aave_polygon_migrate.ts +109 -0
  126. package/src/abi/connectors/v1/aave_stake.ts +3 -0
  127. package/src/abi/connectors/v1/aave_v1_import.ts +53 -0
  128. package/src/abi/connectors/v1/aave_v2.ts +229 -0
  129. package/src/abi/connectors/v1/aave_v2_import.ts +58 -0
  130. package/src/abi/connectors/v1/authority.ts +99 -0
  131. package/src/abi/connectors/v1/basic.ts +135 -0
  132. package/src/abi/connectors/v1/chi.ts +35 -0
  133. package/src/abi/connectors/v1/comp.ts +3 -0
  134. package/src/abi/connectors/v1/compound.ts +3 -0
  135. package/src/abi/connectors/v1/compoundImport.ts +68 -0
  136. package/src/abi/connectors/v1/compoundImport_v2.ts +3 -0
  137. package/src/abi/connectors/v1/compound_old.ts +447 -0
  138. package/src/abi/connectors/v1/curve.ts +139 -0
  139. package/src/abi/connectors/v1/curve_claim.ts +62 -0
  140. package/src/abi/connectors/v1/curve_gauge.ts +157 -0
  141. package/src/abi/connectors/v1/curve_sbtc.ts +139 -0
  142. package/src/abi/connectors/v1/curve_susd.ts +139 -0
  143. package/src/abi/connectors/v1/curve_three.ts +78 -0
  144. package/src/abi/connectors/v1/curve_y.ts +139 -0
  145. package/src/abi/connectors/v1/dsa_migrate_v1_to_v2.ts +3 -0
  146. package/src/abi/connectors/v1/dydx.ts +147 -0
  147. package/src/abi/connectors/v1/dydx_flash.ts +51 -0
  148. package/src/abi/connectors/v1/fee.ts +49 -0
  149. package/src/abi/connectors/v1/gelato.ts +1137 -0
  150. package/src/abi/connectors/v1/index.ts +42 -0
  151. package/src/abi/connectors/v1/instapool.ts +438 -0
  152. package/src/abi/connectors/v1/instapool_v2.ts +125 -0
  153. package/src/abi/connectors/v1/kyber.ts +116 -0
  154. package/src/abi/connectors/v1/maker.ts +479 -0
  155. package/src/abi/connectors/v1/maker_old.ts +299 -0
  156. package/src/abi/connectors/v1/math.ts +42 -0
  157. package/src/abi/connectors/v1/migrate.ts +45 -0
  158. package/src/abi/connectors/v1/oasis.ts +197 -0
  159. package/src/abi/connectors/v1/oneInch.ts +159 -0
  160. package/src/abi/connectors/v1/polygon_bridge.ts +3 -0
  161. package/src/abi/connectors/v1/refinance.ts +3 -0
  162. package/src/abi/connectors/v1/staking.ts +219 -0
  163. package/src/abi/connectors/v1/swerve.ts +178 -0
  164. package/src/abi/connectors/v1/uniswap.ts +297 -0
  165. package/src/abi/connectors/v2/1INCH-A.ts +3 -0
  166. package/src/abi/connectors/v2/1INCH-B.ts +3 -0
  167. package/src/abi/connectors/v2/AAVE-CLAIM-A.ts +3 -0
  168. package/src/abi/connectors/v2/AAVE-CLAIM-B.ts +165 -0
  169. package/src/abi/connectors/v2/AAVE-STAKE-A.ts +3 -0
  170. package/src/abi/connectors/v2/AAVE-V1-A.ts +130 -0
  171. package/src/abi/connectors/v2/AAVE-V1-IMPORT-A.ts +3 -0
  172. package/src/abi/connectors/v2/AAVE-V2-A.ts +229 -0
  173. package/src/abi/connectors/v2/AAVE-V2-IMPORT-A.ts +3 -0
  174. package/src/abi/connectors/v2/AAVE-V2-IMPORT-B.ts +224 -0
  175. package/src/abi/connectors/v2/AUTHORITY-A.ts +99 -0
  176. package/src/abi/connectors/v2/B-COMPOUND-A.ts +3 -0
  177. package/src/abi/connectors/v2/B-LIQUITY-A.ts +3 -0
  178. package/src/abi/connectors/v2/B-MAKERDAO-A.ts +3 -0
  179. package/src/abi/connectors/v2/BASIC-A.ts +135 -0
  180. package/src/abi/connectors/v2/BASIC-B.ts +3 -0
  181. package/src/abi/connectors/v2/BASIC-C.ts +3 -0
  182. package/src/abi/connectors/v2/COMP-A.ts +3 -0
  183. package/src/abi/connectors/v2/COMPOUND-A.ts +3 -0
  184. package/src/abi/connectors/v2/COMPOUND-IMPORT-A.ts +3 -0
  185. package/src/abi/connectors/v2/COMPOUND-IMPORT-B.ts +194 -0
  186. package/src/abi/connectors/v2/G-UNISWAP-A.ts +3 -0
  187. package/src/abi/connectors/v2/GELATO-AAVE-A.ts +3 -0
  188. package/src/abi/connectors/v2/INST-A.ts +3 -0
  189. package/src/abi/connectors/v2/INST-LM-A.ts +3 -0
  190. package/src/abi/connectors/v2/INST-STAKING-A.ts +3 -0
  191. package/src/abi/connectors/v2/INST-STAKING-B.ts +3 -0
  192. package/src/abi/connectors/v2/INSTAPOOL-A.ts +3 -0
  193. package/src/abi/connectors/v2/LIQUITY-A.ts +3 -0
  194. package/src/abi/connectors/v2/MAKERDAO-A.ts +3 -0
  195. package/src/abi/connectors/v2/MAKERDAO-CLAIM-A.ts +135 -0
  196. package/src/abi/connectors/v2/PARASWAP-A.ts +3 -0
  197. package/src/abi/connectors/v2/POLYGON-BRIDGE-A.ts +3 -0
  198. package/src/abi/connectors/v2/REFINANCE-A.ts +3 -0
  199. package/src/abi/connectors/v2/REFLEXER-A.ts +3 -0
  200. package/src/abi/connectors/v2/STAKE-ERC20-A.ts +3 -0
  201. package/src/abi/connectors/v2/UNISWAP-A.ts +297 -0
  202. package/src/abi/connectors/v2/UNISWAP-V2-A.ts +3 -0
  203. package/src/abi/connectors/v2/UNISWAP-V3-A.ts +3 -0
  204. package/src/abi/connectors/v2/UNISWAP-V3-STAKE-A.ts +3 -0
  205. package/src/abi/connectors/v2/WETH-A.ts +3 -0
  206. package/src/abi/connectors/v2/YEARN-VAULT-A.ts +3 -0
  207. package/src/abi/connectors/v2/index.ts +87 -0
  208. package/src/abi/index.ts +7 -7
  209. package/src/abi/interopX.json +1436 -0
  210. package/src/alias.ts +6 -0
  211. package/src/api/index.ts +3 -0
  212. package/src/config/index.ts +9 -1
  213. package/src/constants/addresses.ts +5 -8
  214. package/src/constants/blockConfirmations.ts +5 -0
  215. package/src/constants/index.ts +1 -1
  216. package/src/constants/tokens.ts +63 -40
  217. package/src/db/models/transaction.ts +65 -25
  218. package/src/gnosis/actions/aaveV2/index.ts +9 -0
  219. package/src/gnosis/actions/aaveV2/source.ts +104 -0
  220. package/src/gnosis/actions/aaveV2/target.ts +13 -0
  221. package/src/gnosis/actions/index.ts +5 -0
  222. package/src/gnosis/index.ts +19 -0
  223. package/src/index.ts +47 -26
  224. package/src/net/protocol/dial/SignatureDialProtocol.ts +12 -13
  225. package/src/net/protocol/dial/{SignatureDialProtocol.1.ts → TransactionStatusDialProtocol.ts} +3 -1
  226. package/src/net/protocol/index.ts +17 -7
  227. package/src/tasks/AutoUpdateTask.ts +14 -13
  228. package/src/tasks/BaseTask.ts +5 -0
  229. package/src/tasks/InteropX/ProcessSubmitSubmitEvents.ts +252 -0
  230. package/src/tasks/InteropX/SyncLogSubmitEvents.ts +138 -0
  231. package/src/tasks/Transactions/SyncTransactionStatusTask.ts +8 -3
  232. package/src/tasks/index.ts +15 -21
  233. package/src/typechain/InteropX.ts +1216 -0
  234. package/src/typechain/factories/InteropX__factory.ts +1932 -0
  235. package/src/typechain/factories/index.ts +1 -2
  236. package/src/typechain/index.ts +2 -4
  237. package/src/utils/index.ts +229 -183
  238. package/tsconfig.json +7 -2
  239. package/dist/src/abi/interopBridgeToken.json +0 -286
  240. package/dist/src/abi/interopXGateway.json +0 -184
  241. package/dist/src/constants/itokens.js +0 -13
  242. package/dist/src/tasks/InteropBridge/ProcessWithdrawEvents.js +0 -146
  243. package/dist/src/tasks/InteropBridge/SyncWithdrawEvents.js +0 -69
  244. package/dist/src/tasks/InteropXGateway/ProcessDepositEvents.js +0 -149
  245. package/dist/src/tasks/InteropXGateway/SyncDepositEvents.js +0 -74
  246. package/dist/src/typechain/InteropXGateway.js +0 -2
  247. package/dist/src/typechain/factories/InteropBridgeToken__factory.js +0 -459
  248. package/dist/src/typechain/factories/InteropXGateway__factory.js +0 -265
  249. package/src/abi/interopBridgeToken.json +0 -286
  250. package/src/abi/interopXGateway.json +0 -184
  251. package/src/constants/itokens.ts +0 -10
  252. package/src/tasks/InteropBridge/ProcessWithdrawEvents.ts +0 -231
  253. package/src/tasks/InteropBridge/SyncWithdrawEvents.ts +0 -119
  254. package/src/tasks/InteropXGateway/ProcessDepositEvents.ts +0 -243
  255. package/src/tasks/InteropXGateway/SyncDepositEvents.ts +0 -124
  256. package/src/typechain/InteropBridgeToken.ts +0 -686
  257. package/src/typechain/InteropXGateway.ts +0 -407
  258. package/src/typechain/factories/InteropBridgeToken__factory.ts +0 -466
  259. 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, 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
- }
138
+ }) as Promise<T>;
139
+ };
238
140
 
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);
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(transaction.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",