@instadapp/interop-x 0.0.0-dev.8965b57 → 0.0.0-dev.8a9ef54

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 (228) hide show
  1. package/.github/workflows/ci.yml +19 -0
  2. package/dist/package.json +14 -12
  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 -2
  91. package/dist/src/abi/interopX.json +1436 -0
  92. package/dist/src/api/index.js +1 -1
  93. package/dist/src/constants/addresses.js +4 -7
  94. package/dist/src/constants/tokens.js +44 -51
  95. package/dist/src/db/models/transaction.js +12 -10
  96. package/dist/src/gnosis/actions/aaveV2/index.js +11 -0
  97. package/dist/src/gnosis/actions/aaveV2/source.js +62 -0
  98. package/dist/src/gnosis/actions/aaveV2/target.js +8 -0
  99. package/dist/src/gnosis/actions/index.js +2 -2
  100. package/dist/src/gnosis/index.js +3 -3
  101. package/dist/src/index.js +1 -1
  102. package/dist/src/tasks/{InteropXContract/SyncBridgeRequestEvents.js → InteropX/SyncLogSubmitEvents.js} +25 -16
  103. package/dist/src/tasks/Transactions/SyncTransactionStatusTask.js +6 -3
  104. package/dist/src/tasks/index.js +6 -10
  105. package/dist/src/typechain/{InteropXContract.js → InteropX.js} +0 -0
  106. package/dist/src/typechain/factories/InteropX__factory.js +1928 -0
  107. package/dist/src/typechain/factories/index.js +3 -3
  108. package/dist/src/typechain/index.js +3 -3
  109. package/dist/src/utils/index.js +87 -33
  110. package/package.json +14 -12
  111. package/src/abi/connectors/index.ts +14 -0
  112. package/src/abi/connectors/v1/aave.ts +147 -0
  113. package/src/abi/connectors/v1/aave_claim.ts +3 -0
  114. package/src/abi/connectors/v1/aave_migrate.ts +108 -0
  115. package/src/abi/connectors/v1/aave_polygon_migrate.ts +109 -0
  116. package/src/abi/connectors/v1/aave_stake.ts +3 -0
  117. package/src/abi/connectors/v1/aave_v1_import.ts +53 -0
  118. package/src/abi/connectors/v1/aave_v2.ts +229 -0
  119. package/src/abi/connectors/v1/aave_v2_import.ts +58 -0
  120. package/src/abi/connectors/v1/authority.ts +99 -0
  121. package/src/abi/connectors/v1/basic.ts +135 -0
  122. package/src/abi/connectors/v1/chi.ts +35 -0
  123. package/src/abi/connectors/v1/comp.ts +3 -0
  124. package/src/abi/connectors/v1/compound.ts +3 -0
  125. package/src/abi/connectors/v1/compoundImport.ts +68 -0
  126. package/src/abi/connectors/v1/compoundImport_v2.ts +3 -0
  127. package/src/abi/connectors/v1/compound_old.ts +447 -0
  128. package/src/abi/connectors/v1/curve.ts +139 -0
  129. package/src/abi/connectors/v1/curve_claim.ts +62 -0
  130. package/src/abi/connectors/v1/curve_gauge.ts +157 -0
  131. package/src/abi/connectors/v1/curve_sbtc.ts +139 -0
  132. package/src/abi/connectors/v1/curve_susd.ts +139 -0
  133. package/src/abi/connectors/v1/curve_three.ts +78 -0
  134. package/src/abi/connectors/v1/curve_y.ts +139 -0
  135. package/src/abi/connectors/v1/dsa_migrate_v1_to_v2.ts +3 -0
  136. package/src/abi/connectors/v1/dydx.ts +147 -0
  137. package/src/abi/connectors/v1/dydx_flash.ts +51 -0
  138. package/src/abi/connectors/v1/fee.ts +49 -0
  139. package/src/abi/connectors/v1/gelato.ts +1137 -0
  140. package/src/abi/connectors/v1/index.ts +42 -0
  141. package/src/abi/connectors/v1/instapool.ts +438 -0
  142. package/src/abi/connectors/v1/instapool_v2.ts +125 -0
  143. package/src/abi/connectors/v1/kyber.ts +116 -0
  144. package/src/abi/connectors/v1/maker.ts +479 -0
  145. package/src/abi/connectors/v1/maker_old.ts +299 -0
  146. package/src/abi/connectors/v1/math.ts +42 -0
  147. package/src/abi/connectors/v1/migrate.ts +45 -0
  148. package/src/abi/connectors/v1/oasis.ts +197 -0
  149. package/src/abi/connectors/v1/oneInch.ts +159 -0
  150. package/src/abi/connectors/v1/polygon_bridge.ts +3 -0
  151. package/src/abi/connectors/v1/refinance.ts +3 -0
  152. package/src/abi/connectors/v1/staking.ts +219 -0
  153. package/src/abi/connectors/v1/swerve.ts +178 -0
  154. package/src/abi/connectors/v1/uniswap.ts +297 -0
  155. package/src/abi/connectors/v2/1INCH-A.ts +3 -0
  156. package/src/abi/connectors/v2/1INCH-B.ts +3 -0
  157. package/src/abi/connectors/v2/AAVE-CLAIM-A.ts +3 -0
  158. package/src/abi/connectors/v2/AAVE-CLAIM-B.ts +165 -0
  159. package/src/abi/connectors/v2/AAVE-STAKE-A.ts +3 -0
  160. package/src/abi/connectors/v2/AAVE-V1-A.ts +130 -0
  161. package/src/abi/connectors/v2/AAVE-V1-IMPORT-A.ts +3 -0
  162. package/src/abi/connectors/v2/AAVE-V2-A.ts +229 -0
  163. package/src/abi/connectors/v2/AAVE-V2-IMPORT-A.ts +3 -0
  164. package/src/abi/connectors/v2/AAVE-V2-IMPORT-B.ts +224 -0
  165. package/src/abi/connectors/v2/AUTHORITY-A.ts +99 -0
  166. package/src/abi/connectors/v2/B-COMPOUND-A.ts +3 -0
  167. package/src/abi/connectors/v2/B-LIQUITY-A.ts +3 -0
  168. package/src/abi/connectors/v2/B-MAKERDAO-A.ts +3 -0
  169. package/src/abi/connectors/v2/BASIC-A.ts +135 -0
  170. package/src/abi/connectors/v2/BASIC-B.ts +3 -0
  171. package/src/abi/connectors/v2/BASIC-C.ts +3 -0
  172. package/src/abi/connectors/v2/COMP-A.ts +3 -0
  173. package/src/abi/connectors/v2/COMPOUND-A.ts +3 -0
  174. package/src/abi/connectors/v2/COMPOUND-IMPORT-A.ts +3 -0
  175. package/src/abi/connectors/v2/COMPOUND-IMPORT-B.ts +194 -0
  176. package/src/abi/connectors/v2/G-UNISWAP-A.ts +3 -0
  177. package/src/abi/connectors/v2/GELATO-AAVE-A.ts +3 -0
  178. package/src/abi/connectors/v2/INST-A.ts +3 -0
  179. package/src/abi/connectors/v2/INST-LM-A.ts +3 -0
  180. package/src/abi/connectors/v2/INST-STAKING-A.ts +3 -0
  181. package/src/abi/connectors/v2/INST-STAKING-B.ts +3 -0
  182. package/src/abi/connectors/v2/INSTAPOOL-A.ts +3 -0
  183. package/src/abi/connectors/v2/LIQUITY-A.ts +3 -0
  184. package/src/abi/connectors/v2/MAKERDAO-A.ts +3 -0
  185. package/src/abi/connectors/v2/MAKERDAO-CLAIM-A.ts +135 -0
  186. package/src/abi/connectors/v2/PARASWAP-A.ts +3 -0
  187. package/src/abi/connectors/v2/POLYGON-BRIDGE-A.ts +3 -0
  188. package/src/abi/connectors/v2/REFINANCE-A.ts +3 -0
  189. package/src/abi/connectors/v2/REFLEXER-A.ts +3 -0
  190. package/src/abi/connectors/v2/STAKE-ERC20-A.ts +3 -0
  191. package/src/abi/connectors/v2/UNISWAP-A.ts +297 -0
  192. package/src/abi/connectors/v2/UNISWAP-V2-A.ts +3 -0
  193. package/src/abi/connectors/v2/UNISWAP-V3-A.ts +3 -0
  194. package/src/abi/connectors/v2/UNISWAP-V3-STAKE-A.ts +3 -0
  195. package/src/abi/connectors/v2/WETH-A.ts +3 -0
  196. package/src/abi/connectors/v2/YEARN-VAULT-A.ts +3 -0
  197. package/src/abi/connectors/v2/index.ts +87 -0
  198. package/src/abi/index.ts +7 -5
  199. package/src/abi/interopX.json +1436 -0
  200. package/src/api/index.ts +1 -1
  201. package/src/constants/addresses.ts +5 -8
  202. package/src/constants/tokens.ts +44 -51
  203. package/src/db/models/transaction.ts +31 -30
  204. package/src/gnosis/actions/aaveV2/index.ts +9 -0
  205. package/src/gnosis/actions/aaveV2/source.ts +104 -0
  206. package/src/gnosis/actions/aaveV2/target.ts +13 -0
  207. package/src/gnosis/actions/index.ts +2 -2
  208. package/src/gnosis/index.ts +3 -3
  209. package/src/tasks/InteropX/SyncLogSubmitEvents.ts +138 -0
  210. package/src/tasks/Transactions/SyncTransactionStatusTask.ts +6 -3
  211. package/src/tasks/index.ts +5 -12
  212. package/src/typechain/InteropX.ts +1216 -0
  213. package/src/typechain/factories/InteropX__factory.ts +1932 -0
  214. package/src/typechain/factories/index.ts +1 -1
  215. package/src/typechain/index.ts +2 -2
  216. package/src/utils/index.ts +222 -97
  217. package/dist/src/abi/interopXContract.json +0 -391
  218. package/dist/src/gnosis/actions/withdraw/index.js +0 -55
  219. package/dist/src/tasks/InteropXContract/ProcessBridgeRequestEvents.js +0 -152
  220. package/dist/src/tasks/InteropXContract/SyncBridgeRequestSentEvents.js +0 -89
  221. package/dist/src/typechain/factories/InteropXContract__factory.js +0 -526
  222. package/src/abi/interopXContract.json +0 -391
  223. package/src/gnosis/actions/withdraw/index.ts +0 -76
  224. package/src/tasks/InteropXContract/ProcessBridgeRequestEvents.ts +0 -216
  225. package/src/tasks/InteropXContract/SyncBridgeRequestEvents.ts +0 -114
  226. package/src/tasks/InteropXContract/SyncBridgeRequestSentEvents.ts +0 -120
  227. package/src/typechain/InteropXContract.ts +0 -524
  228. package/src/typechain/factories/InteropXContract__factory.ts +0 -533
@@ -3,4 +3,4 @@
3
3
  /* eslint-disable */
4
4
  export { Erc20__factory } from "./Erc20__factory";
5
5
  export { GnosisSafe__factory } from "./GnosisSafe__factory";
6
- export { InteropXContract__factory } from "./InteropXContract__factory";
6
+ export { InteropX__factory } from "./InteropX__factory";
@@ -3,8 +3,8 @@
3
3
  /* eslint-disable */
4
4
  export type { Erc20 } from "./Erc20";
5
5
  export type { GnosisSafe } from "./GnosisSafe";
6
- export type { InteropXContract } from "./InteropXContract";
6
+ export type { InteropX } from "./InteropX";
7
7
  export * as factories from "./factories";
8
8
  export { Erc20__factory } from "./factories/Erc20__factory";
9
9
  export { GnosisSafe__factory } from "./factories/GnosisSafe__factory";
10
- export { InteropXContract__factory } from "./factories/InteropXContract__factory";
10
+ export { InteropX__factory } from "./factories/InteropX__factory";
@@ -1,17 +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 } from '@/constants';
7
- import { ChainId } from '@/types'
8
- import { ethers } from 'ethers';
9
- import { GnosisSafe } 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
+
10
13
  export const http = axios.create();
11
14
 
12
15
  axiosRetry(http, { retries: 3, retryDelay: axiosRetry.exponentialDelay });
13
16
 
14
-
15
17
  export function shortenHash(hash: string, length: number = 4) {
16
18
  if (!hash) return;
17
19
 
@@ -25,22 +27,25 @@ export function shortenHash(hash: string, length: number = 4) {
25
27
  }
26
28
 
27
29
  export function short(buffer: Buffer): string {
28
- return buffer.toString('hex').slice(0, 8) + '...'
30
+ return buffer.toString("hex").slice(0, 8) + "...";
29
31
  }
30
32
 
31
- export const signGnosisSafeTx = async ({
32
- to,
33
- data = null as any,
34
- value = '0',
35
- operation = '1',
36
- baseGas = '0',
37
- gasPrice = "0",
38
- gasToken = "0x0000000000000000000000000000000000000000",
39
- refundReceiver = "0x0000000000000000000000000000000000000000",
40
- safeTxGas = "79668" as string | number,
41
- nonce = "0",
42
- chainId = 137 as ChainId,
43
- }, { 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
+ ) => {
44
49
  const gnosisSafe = addresses[chainId].gnosisSafe;
45
50
 
46
51
  const domain = {
@@ -50,16 +55,16 @@ export const signGnosisSafeTx = async ({
50
55
 
51
56
  const types = {
52
57
  SafeTx: [
53
- { type: 'address', name: 'to' },
54
- { type: 'uint256', name: 'value' },
55
- { type: 'bytes', name: 'data' },
56
- { type: 'uint8', name: 'operation' },
57
- { type: 'uint256', name: 'safeTxGas' },
58
- { type: 'uint256', name: 'baseGas' },
59
- { type: 'uint256', name: 'gasPrice' },
60
- { type: 'address', name: 'gasToken' },
61
- { type: 'address', name: 'refundReceiver' },
62
- { 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" },
63
68
  ],
64
69
  };
65
70
 
@@ -77,21 +82,21 @@ export const signGnosisSafeTx = async ({
77
82
  value,
78
83
  };
79
84
 
80
- return await signer._signTypedData(domain, types, message)
85
+ return await signer._signTypedData(domain, types, message);
81
86
  };
82
87
 
83
88
  export const getRpcProviderUrl = (chainId: ChainId) => {
84
89
  switch (chainId) {
85
90
  case 1:
86
- return 'https://rpc.ankr.com/eth';
91
+ return "https://rpc.ankr.com/eth";
87
92
  case 137:
88
- return 'https://rpc.ankr.com/polygon';
93
+ return "https://rpc.ankr.com/polygon";
89
94
  case 43114:
90
- return 'https://rpc.ankr.com/avalanche';
95
+ return "https://rpc.ankr.com/avalanche";
91
96
  default:
92
97
  throw new Error(`Unknown chainId: ${chainId}`);
93
98
  }
94
- }
99
+ };
95
100
 
96
101
  export interface Signature {
97
102
  signer: string;
@@ -114,84 +119,161 @@ export const buildSignatureBytes = (signatures: Signature[]): string => {
114
119
  * Call an async function with a maximum time limit (in milliseconds) for the timeout
115
120
  * Resolved promise for async function call, or an error if time limit reached
116
121
  */
117
- export const asyncCallWithTimeout = async <T>(asyncPromise: Promise<T>, timeout: number) => {
122
+ export const asyncCallWithTimeout = async <T>(
123
+ asyncPromise: Promise<T>,
124
+ timeout: number
125
+ ) => {
118
126
  let timeoutHandle;
119
127
 
120
128
  const timeoutPromise = new Promise((_resolve, reject) => {
121
129
  timeoutHandle = setTimeout(
122
- () => reject(new Error('Async call timeout limit reached')),
130
+ () => reject(new Error("Async call timeout limit reached")),
123
131
  timeout
124
132
  );
125
133
  });
126
134
 
127
- return Promise.race([asyncPromise, timeoutPromise]).then(result => {
135
+ return Promise.race([asyncPromise, timeoutPromise]).then((result) => {
128
136
  clearTimeout(timeoutHandle);
129
137
  return result;
130
- }) as Promise<T>
131
- }
138
+ }) as Promise<T>;
139
+ };
132
140
 
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
+ };
133
150
 
134
- export const generateInteropTransactionHash = (data: { action: string, bridger: string, requestTransactionHash: string, sourceChainId: string | number, targetChainId: string | number }) => {
135
- return ethers.utils.solidityKeccak256(['string', 'string', 'string', 'string', 'string'], [
136
- String(data.action),
137
- String(data.bridger),
138
- String(data.requestTransactionHash),
139
- String(data.sourceChainId),
140
- String(data.targetChainId),
141
- ]);
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
+ ]
165
+ );
166
+ };
167
+
168
+ export class ContractError extends Error {
169
+ method: string;
170
+ address: string;
171
+ args: any[];
142
172
  }
143
173
 
144
- export function getContract<TContract extends ethers.Contract>(address: string, contractInterface: ethers.ContractInterface | any, signerOrProvider?: ethers.Signer | ethers.providers.Provider) {
145
- if (!ethers.utils.getAddress(address) || address === ethers.constants.AddressZero) {
146
- 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}'.`);
147
184
  }
148
185
 
149
186
  const contract = new ethers.Contract(
150
187
  address,
151
188
  contractInterface,
152
189
  signerOrProvider
153
- ) as TContract
190
+ ) as TContract;
154
191
 
155
192
  // Make sure the contract properties is writable
156
- const desc = Object.getOwnPropertyDescriptor(contract, 'functions');
193
+ const desc = Object.getOwnPropertyDescriptor(contract, "functions");
157
194
 
158
195
  if (!desc || desc.writable !== true) {
159
- return contract
196
+ return contract;
160
197
  }
161
198
 
162
199
  return new Proxy(contract, {
163
200
  get(target, prop, receiver) {
164
201
  const value = Reflect.get(target, prop, receiver);
165
202
 
166
- 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
+
167
214
  return async (...args: any[]) => {
168
215
  try {
169
- return await value.bind(contract)(...args);
216
+ return await retry(
217
+ async () => await value.bind(contract)(...args),
218
+ { retries: isConstant ? 1 : 3 }
219
+ );
170
220
  } catch (error) {
171
- 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;
172
232
  }
173
- }
233
+ };
174
234
  }
175
235
 
176
-
177
- 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
+ ) {
178
245
  const parentProp = String(prop);
179
246
 
180
247
  return new Proxy(value, {
181
248
  get(target, prop, receiver) {
182
249
  const value = Reflect.get(target, prop, receiver);
183
250
 
184
- if (typeof value === 'function') {
251
+ if (typeof value === "function") {
185
252
  return async (...args: any[]) => {
186
253
  try {
187
- return await value.bind(contract)(...args);
254
+ return await retry(
255
+ async () => await value.bind(contract)(...args),
256
+ { retries: parentProp === "callStatic" ? 3 : 1 }
257
+ );
188
258
  } catch (error) {
189
- 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;
190
272
  }
191
- }
273
+ };
192
274
  }
193
- }
194
- })
275
+ },
276
+ });
195
277
  }
196
278
 
197
279
  return value;
@@ -199,42 +281,85 @@ export function getContract<TContract extends ethers.Contract>(address: string,
199
281
  });
200
282
  }
201
283
 
202
- export const generateGnosisTransaction = async (transactionData: any, safeContract: GnosisSafe) => {
284
+ export const generateGnosisTransaction = async (
285
+ transactionData: any,
286
+ safeContract: GnosisSafe
287
+ ) => {
203
288
  console.log(transactionData);
204
289
 
205
290
  let isExecuted = await safeContract.dataHashes(
206
- await safeContract.getTransactionHash(
207
- transactionData.to,
208
- transactionData.value,
209
- transactionData.data,
210
- transactionData.operation,
211
- transactionData.safeTxGas,
212
- transactionData.baseGas,
213
- transactionData.gasPrice,
214
- transactionData.gasToken,
215
- transactionData.refundReceiver,
216
- transactionData.nonce
217
- )
218
- )
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
+ );
219
304
 
220
305
  while (isExecuted == 1) {
221
- transactionData.safeTxGas = ethers.BigNumber.from(String(transactionData.safeTxGas)).add(1).toString()
222
-
223
- isExecuted = await safeContract.dataHashes(
224
- await safeContract.getTransactionHash(
225
- transactionData.to,
226
- transactionData.value,
227
- transactionData.data,
228
- transactionData.operation,
229
- transactionData.safeTxGas,
230
- transactionData.baseGas,
231
- transactionData.gasPrice,
232
- transactionData.gasToken,
233
- transactionData.refundReceiver,
234
- transactionData.nonce
235
- )
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
236
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);
237
335
  }
336
+ }
238
337
 
239
- return transactionData
240
- }
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
+ };