@instadapp/interop-x 0.0.0-dev.a9cd1d2 → 0.0.0-dev.acc4865

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 (210) hide show
  1. package/.github/workflows/ci.yml +19 -0
  2. package/dist/package.json +3 -2
  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 +2 -0
  91. package/dist/src/constants/addresses.js +2 -0
  92. package/dist/src/constants/blockConfirmations.js +8 -0
  93. package/dist/src/constants/index.js +1 -0
  94. package/dist/src/db/models/transaction.js +2 -2
  95. package/dist/src/gnosis/actions/aaveV2/index.js +11 -0
  96. package/dist/src/gnosis/actions/aaveV2/source.js +62 -0
  97. package/dist/src/gnosis/actions/aaveV2/target.js +8 -0
  98. package/dist/src/gnosis/actions/index.js +2 -2
  99. package/dist/src/index.js +1 -1
  100. package/dist/src/net/protocol/dial/SignatureDialProtocol.js +2 -2
  101. package/dist/src/tasks/InteropX/ProcessSubmitSubmitEvents.js +168 -0
  102. package/dist/src/tasks/InteropX/SyncLogSubmitEvents.js +5 -3
  103. package/dist/src/tasks/Transactions/SyncTransactionStatusTask.js +4 -3
  104. package/dist/src/tasks/index.js +5 -0
  105. package/dist/src/utils/index.js +57 -30
  106. package/package.json +3 -2
  107. package/src/abi/connectors/index.ts +14 -0
  108. package/src/abi/connectors/v1/aave.ts +147 -0
  109. package/src/abi/connectors/v1/aave_claim.ts +3 -0
  110. package/src/abi/connectors/v1/aave_migrate.ts +108 -0
  111. package/src/abi/connectors/v1/aave_polygon_migrate.ts +109 -0
  112. package/src/abi/connectors/v1/aave_stake.ts +3 -0
  113. package/src/abi/connectors/v1/aave_v1_import.ts +53 -0
  114. package/src/abi/connectors/v1/aave_v2.ts +229 -0
  115. package/src/abi/connectors/v1/aave_v2_import.ts +58 -0
  116. package/src/abi/connectors/v1/authority.ts +99 -0
  117. package/src/abi/connectors/v1/basic.ts +135 -0
  118. package/src/abi/connectors/v1/chi.ts +35 -0
  119. package/src/abi/connectors/v1/comp.ts +3 -0
  120. package/src/abi/connectors/v1/compound.ts +3 -0
  121. package/src/abi/connectors/v1/compoundImport.ts +68 -0
  122. package/src/abi/connectors/v1/compoundImport_v2.ts +3 -0
  123. package/src/abi/connectors/v1/compound_old.ts +447 -0
  124. package/src/abi/connectors/v1/curve.ts +139 -0
  125. package/src/abi/connectors/v1/curve_claim.ts +62 -0
  126. package/src/abi/connectors/v1/curve_gauge.ts +157 -0
  127. package/src/abi/connectors/v1/curve_sbtc.ts +139 -0
  128. package/src/abi/connectors/v1/curve_susd.ts +139 -0
  129. package/src/abi/connectors/v1/curve_three.ts +78 -0
  130. package/src/abi/connectors/v1/curve_y.ts +139 -0
  131. package/src/abi/connectors/v1/dsa_migrate_v1_to_v2.ts +3 -0
  132. package/src/abi/connectors/v1/dydx.ts +147 -0
  133. package/src/abi/connectors/v1/dydx_flash.ts +51 -0
  134. package/src/abi/connectors/v1/fee.ts +49 -0
  135. package/src/abi/connectors/v1/gelato.ts +1137 -0
  136. package/src/abi/connectors/v1/index.ts +42 -0
  137. package/src/abi/connectors/v1/instapool.ts +438 -0
  138. package/src/abi/connectors/v1/instapool_v2.ts +125 -0
  139. package/src/abi/connectors/v1/kyber.ts +116 -0
  140. package/src/abi/connectors/v1/maker.ts +479 -0
  141. package/src/abi/connectors/v1/maker_old.ts +299 -0
  142. package/src/abi/connectors/v1/math.ts +42 -0
  143. package/src/abi/connectors/v1/migrate.ts +45 -0
  144. package/src/abi/connectors/v1/oasis.ts +197 -0
  145. package/src/abi/connectors/v1/oneInch.ts +159 -0
  146. package/src/abi/connectors/v1/polygon_bridge.ts +3 -0
  147. package/src/abi/connectors/v1/refinance.ts +3 -0
  148. package/src/abi/connectors/v1/staking.ts +219 -0
  149. package/src/abi/connectors/v1/swerve.ts +178 -0
  150. package/src/abi/connectors/v1/uniswap.ts +297 -0
  151. package/src/abi/connectors/v2/1INCH-A.ts +3 -0
  152. package/src/abi/connectors/v2/1INCH-B.ts +3 -0
  153. package/src/abi/connectors/v2/AAVE-CLAIM-A.ts +3 -0
  154. package/src/abi/connectors/v2/AAVE-CLAIM-B.ts +165 -0
  155. package/src/abi/connectors/v2/AAVE-STAKE-A.ts +3 -0
  156. package/src/abi/connectors/v2/AAVE-V1-A.ts +130 -0
  157. package/src/abi/connectors/v2/AAVE-V1-IMPORT-A.ts +3 -0
  158. package/src/abi/connectors/v2/AAVE-V2-A.ts +229 -0
  159. package/src/abi/connectors/v2/AAVE-V2-IMPORT-A.ts +3 -0
  160. package/src/abi/connectors/v2/AAVE-V2-IMPORT-B.ts +224 -0
  161. package/src/abi/connectors/v2/AUTHORITY-A.ts +99 -0
  162. package/src/abi/connectors/v2/B-COMPOUND-A.ts +3 -0
  163. package/src/abi/connectors/v2/B-LIQUITY-A.ts +3 -0
  164. package/src/abi/connectors/v2/B-MAKERDAO-A.ts +3 -0
  165. package/src/abi/connectors/v2/BASIC-A.ts +135 -0
  166. package/src/abi/connectors/v2/BASIC-B.ts +3 -0
  167. package/src/abi/connectors/v2/BASIC-C.ts +3 -0
  168. package/src/abi/connectors/v2/COMP-A.ts +3 -0
  169. package/src/abi/connectors/v2/COMPOUND-A.ts +3 -0
  170. package/src/abi/connectors/v2/COMPOUND-IMPORT-A.ts +3 -0
  171. package/src/abi/connectors/v2/COMPOUND-IMPORT-B.ts +194 -0
  172. package/src/abi/connectors/v2/G-UNISWAP-A.ts +3 -0
  173. package/src/abi/connectors/v2/GELATO-AAVE-A.ts +3 -0
  174. package/src/abi/connectors/v2/INST-A.ts +3 -0
  175. package/src/abi/connectors/v2/INST-LM-A.ts +3 -0
  176. package/src/abi/connectors/v2/INST-STAKING-A.ts +3 -0
  177. package/src/abi/connectors/v2/INST-STAKING-B.ts +3 -0
  178. package/src/abi/connectors/v2/INSTAPOOL-A.ts +3 -0
  179. package/src/abi/connectors/v2/LIQUITY-A.ts +3 -0
  180. package/src/abi/connectors/v2/MAKERDAO-A.ts +3 -0
  181. package/src/abi/connectors/v2/MAKERDAO-CLAIM-A.ts +135 -0
  182. package/src/abi/connectors/v2/PARASWAP-A.ts +3 -0
  183. package/src/abi/connectors/v2/POLYGON-BRIDGE-A.ts +3 -0
  184. package/src/abi/connectors/v2/REFINANCE-A.ts +3 -0
  185. package/src/abi/connectors/v2/REFLEXER-A.ts +3 -0
  186. package/src/abi/connectors/v2/STAKE-ERC20-A.ts +3 -0
  187. package/src/abi/connectors/v2/UNISWAP-A.ts +297 -0
  188. package/src/abi/connectors/v2/UNISWAP-V2-A.ts +3 -0
  189. package/src/abi/connectors/v2/UNISWAP-V3-A.ts +3 -0
  190. package/src/abi/connectors/v2/UNISWAP-V3-STAKE-A.ts +3 -0
  191. package/src/abi/connectors/v2/WETH-A.ts +3 -0
  192. package/src/abi/connectors/v2/YEARN-VAULT-A.ts +3 -0
  193. package/src/abi/connectors/v2/index.ts +87 -0
  194. package/src/abi/index.ts +6 -4
  195. package/src/constants/addresses.ts +3 -1
  196. package/src/constants/blockConfirmations.ts +5 -0
  197. package/src/constants/index.ts +1 -0
  198. package/src/db/models/transaction.ts +2 -2
  199. package/src/gnosis/actions/aaveV2/index.ts +9 -0
  200. package/src/gnosis/actions/aaveV2/source.ts +104 -0
  201. package/src/gnosis/actions/aaveV2/target.ts +13 -0
  202. package/src/gnosis/actions/index.ts +2 -2
  203. package/src/net/protocol/dial/SignatureDialProtocol.ts +3 -2
  204. package/src/tasks/InteropX/ProcessSubmitSubmitEvents.ts +252 -0
  205. package/src/tasks/InteropX/SyncLogSubmitEvents.ts +118 -116
  206. package/src/tasks/Transactions/SyncTransactionStatusTask.ts +4 -3
  207. package/src/tasks/index.ts +6 -1
  208. package/src/utils/index.ts +169 -93
  209. package/dist/src/gnosis/actions/withdraw/index.js +0 -114
  210. package/src/gnosis/actions/withdraw/index.ts +0 -155
@@ -1,19 +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';
10
- import retry from 'async-retry'
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";
11
12
 
12
13
  export const http = axios.create();
13
14
 
14
15
  axiosRetry(http, { retries: 3, retryDelay: axiosRetry.exponentialDelay });
15
16
 
16
-
17
17
  export function shortenHash(hash: string, length: number = 4) {
18
18
  if (!hash) return;
19
19
 
@@ -27,22 +27,25 @@ export function shortenHash(hash: string, length: number = 4) {
27
27
  }
28
28
 
29
29
  export function short(buffer: Buffer): string {
30
- return buffer.toString('hex').slice(0, 8) + '...'
30
+ return buffer.toString("hex").slice(0, 8) + "...";
31
31
  }
32
32
 
33
- export const signGnosisSafeTx = async ({
34
- to,
35
- data = null as any,
36
- value = '0',
37
- operation = '1',
38
- baseGas = '0',
39
- gasPrice = "0",
40
- gasToken = "0x0000000000000000000000000000000000000000",
41
- refundReceiver = "0x0000000000000000000000000000000000000000",
42
- safeTxGas = "79668" as string | number,
43
- nonce = "0",
44
- chainId = 137 as ChainId,
45
- }, { 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
+ ) => {
46
49
  const gnosisSafe = addresses[chainId].gnosisSafe;
47
50
 
48
51
  const domain = {
@@ -52,16 +55,16 @@ export const signGnosisSafeTx = async ({
52
55
 
53
56
  const types = {
54
57
  SafeTx: [
55
- { type: 'address', name: 'to' },
56
- { type: 'uint256', name: 'value' },
57
- { type: 'bytes', name: 'data' },
58
- { type: 'uint8', name: 'operation' },
59
- { type: 'uint256', name: 'safeTxGas' },
60
- { type: 'uint256', name: 'baseGas' },
61
- { type: 'uint256', name: 'gasPrice' },
62
- { type: 'address', name: 'gasToken' },
63
- { type: 'address', name: 'refundReceiver' },
64
- { 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" },
65
68
  ],
66
69
  };
67
70
 
@@ -79,21 +82,21 @@ export const signGnosisSafeTx = async ({
79
82
  value,
80
83
  };
81
84
 
82
- return await signer._signTypedData(domain, types, message)
85
+ return await signer._signTypedData(domain, types, message);
83
86
  };
84
87
 
85
88
  export const getRpcProviderUrl = (chainId: ChainId) => {
86
89
  switch (chainId) {
87
90
  case 1:
88
- return 'https://rpc.ankr.com/eth';
91
+ return "https://rpc.ankr.com/eth";
89
92
  case 137:
90
- return 'https://rpc.ankr.com/polygon';
93
+ return "https://rpc.ankr.com/polygon";
91
94
  case 43114:
92
- return 'https://rpc.ankr.com/avalanche';
95
+ return "https://rpc.ankr.com/avalanche";
93
96
  default:
94
97
  throw new Error(`Unknown chainId: ${chainId}`);
95
98
  }
96
- }
99
+ };
97
100
 
98
101
  export interface Signature {
99
102
  signer: string;
@@ -116,36 +119,40 @@ export const buildSignatureBytes = (signatures: Signature[]): string => {
116
119
  * Call an async function with a maximum time limit (in milliseconds) for the timeout
117
120
  * Resolved promise for async function call, or an error if time limit reached
118
121
  */
119
- export const asyncCallWithTimeout = async <T>(asyncPromise: Promise<T>, timeout: number) => {
122
+ export const asyncCallWithTimeout = async <T>(
123
+ asyncPromise: Promise<T>,
124
+ timeout: number
125
+ ) => {
120
126
  let timeoutHandle;
121
127
 
122
128
  const timeoutPromise = new Promise((_resolve, reject) => {
123
129
  timeoutHandle = setTimeout(
124
- () => reject(new Error('Async call timeout limit reached')),
130
+ () => reject(new Error("Async call timeout limit reached")),
125
131
  timeout
126
132
  );
127
133
  });
128
134
 
129
- return Promise.race([asyncPromise, timeoutPromise]).then(result => {
135
+ return Promise.race([asyncPromise, timeoutPromise]).then((result) => {
130
136
  clearTimeout(timeoutHandle);
131
137
  return result;
132
- }) as Promise<T>
133
- }
134
-
138
+ }) as Promise<T>;
139
+ };
135
140
 
136
141
  type GenerateInteropTransactionHashParam = {
137
- actionId: string,
138
- vnonce: string,
139
- sourceSender: string,
140
- sourceChainId: string | number,
141
- sourceDsaId: string,
142
- targetChainId: string | number,
143
- targetDsaId: string,
142
+ actionId: string;
143
+ vnonce: string;
144
+ sourceSender: string;
145
+ sourceChainId: string | number;
146
+ sourceDsaId: string;
147
+ targetChainId: string | number;
148
+ targetDsaId: string;
144
149
  };
145
150
 
146
- export const generateInteropTransactionHash = (data: GenerateInteropTransactionHashParam) => {
151
+ export const generateInteropTransactionHash = (
152
+ data: GenerateInteropTransactionHashParam
153
+ ) => {
147
154
  return ethers.utils.solidityKeccak256(
148
- Array.from(Array(7), () => 'string'),
155
+ Array.from({ length: 7 }, () => "string"),
149
156
  [
150
157
  String(data.actionId),
151
158
  String(data.vnonce),
@@ -154,9 +161,9 @@ export const generateInteropTransactionHash = (data: GenerateInteropTransactionH
154
161
  String(data.sourceDsaId),
155
162
  String(data.targetChainId),
156
163
  String(data.targetDsaId),
157
- ]);
158
- }
159
-
164
+ ]
165
+ );
166
+ };
160
167
 
161
168
  export class ContractError extends Error {
162
169
  method: string;
@@ -164,76 +171,109 @@ export class ContractError extends Error {
164
171
  args: any[];
165
172
  }
166
173
 
167
- export function getContract<TContract extends ethers.Contract>(address: string, contractInterface: ethers.ContractInterface | any, signerOrProvider?: ethers.Signer | ethers.providers.Provider) {
168
- if (!ethers.utils.getAddress(address) || address === ethers.constants.AddressZero) {
169
- 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}'.`);
170
184
  }
171
185
 
172
186
  const contract = new ethers.Contract(
173
187
  address,
174
188
  contractInterface,
175
189
  signerOrProvider
176
- ) as TContract
190
+ ) as TContract;
177
191
 
178
192
  // Make sure the contract properties is writable
179
- const desc = Object.getOwnPropertyDescriptor(contract, 'functions');
193
+ const desc = Object.getOwnPropertyDescriptor(contract, "functions");
180
194
 
181
195
  if (!desc || desc.writable !== true) {
182
- return contract
196
+ return contract;
183
197
  }
184
198
 
185
199
  return new Proxy(contract, {
186
200
  get(target, prop, receiver) {
187
201
  const value = Reflect.get(target, prop, receiver);
188
202
 
189
- 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
+ ) {
190
208
  let isConstant = false;
191
209
 
192
210
  try {
193
- isConstant = contract.interface.getFunction(String(prop)).constant
194
- } catch (error) {
195
- }
211
+ isConstant = contract.interface.getFunction(String(prop)).constant;
212
+ } catch (error) {}
196
213
 
197
214
  return async (...args: any[]) => {
198
215
  try {
199
- return await retry(async () => await value.bind(contract)(...args), { retries: isConstant ? 1 : 3 });
216
+ return await retry(
217
+ async () => await value.bind(contract)(...args),
218
+ { retries: isConstant ? 1 : 3 }
219
+ );
200
220
  } catch (error) {
201
- const err = new ContractError(`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
+ );
202
226
 
203
- err.method = String(prop)
204
- err.address = address
205
- err.args = [...args]
227
+ err.method = String(prop);
228
+ err.address = address;
229
+ err.args = [...args];
206
230
 
207
- throw err
231
+ throw err;
208
232
  }
209
- }
233
+ };
210
234
  }
211
235
 
212
-
213
- 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
+ ) {
214
245
  const parentProp = String(prop);
215
246
 
216
247
  return new Proxy(value, {
217
248
  get(target, prop, receiver) {
218
249
  const value = Reflect.get(target, prop, receiver);
219
250
 
220
- if (typeof value === 'function') {
251
+ if (typeof value === "function") {
221
252
  return async (...args: any[]) => {
222
253
  try {
223
- return await retry(async () => await value.bind(contract)(...args), { retries: parentProp === 'callStatic' ? 3 : 1 });
254
+ return await retry(
255
+ async () => await value.bind(contract)(...args),
256
+ { retries: parentProp === "callStatic" ? 3 : 1 }
257
+ );
224
258
  } catch (error) {
225
- const err = new ContractError(`Error calling "${String(prop)}" using "${parentProp}" on "${address}": ${error.reason || error.message}`)
226
-
227
- err.method = String(prop)
228
- err.address = address
229
- err.args = [...args]
230
-
231
- throw err
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;
232
272
  }
233
- }
273
+ };
234
274
  }
235
- }
236
- })
275
+ },
276
+ });
237
277
  }
238
278
 
239
279
  return value;
@@ -241,7 +281,10 @@ export function getContract<TContract extends ethers.Contract>(address: string,
241
281
  });
242
282
  }
243
283
 
244
- export const generateGnosisTransaction = async (transactionData: any, safeContract: GnosisSafe) => {
284
+ export const generateGnosisTransaction = async (
285
+ transactionData: any,
286
+ safeContract: GnosisSafe
287
+ ) => {
245
288
  console.log(transactionData);
246
289
 
247
290
  let isExecuted = await safeContract.dataHashes(
@@ -257,10 +300,14 @@ export const generateGnosisTransaction = async (transactionData: any, safeContra
257
300
  transactionData.refundReceiver,
258
301
  transactionData.nonce
259
302
  )
260
- )
303
+ );
261
304
 
262
305
  while (isExecuted == 1) {
263
- transactionData.safeTxGas = ethers.BigNumber.from(String(transactionData.safeTxGas)).add(1).toString()
306
+ transactionData.safeTxGas = ethers.BigNumber.from(
307
+ String(transactionData.safeTxGas)
308
+ )
309
+ .add(1)
310
+ .toString();
264
311
 
265
312
  isExecuted = await safeContract.dataHashes(
266
313
  await safeContract.getTransactionHash(
@@ -275,15 +322,44 @@ export const generateGnosisTransaction = async (transactionData: any, safeContra
275
322
  transactionData.refundReceiver,
276
323
  transactionData.nonce
277
324
  )
278
- )
325
+ );
279
326
  }
280
327
 
281
- return transactionData
282
- }
328
+ return transactionData;
329
+ };
283
330
 
284
331
  export class LiquidityError extends Error {
285
332
  constructor(message?: string) {
286
- super(message || 'Not enough liquidity');
333
+ super(message || "Not enough liquidity");
287
334
  Object.setPrototypeOf(this, new.target.prototype);
288
335
  }
289
- }
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
+ };
@@ -1,114 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- // const getBridgeAmounts = async (user: string, tokens: string[], chainId: ChainId) => {
4
- // const sourceChainProvider = new ethers.providers.JsonRpcProvider(getRpcProviderUrl(chainId));
5
- // const sourceWallet = new ethers.Wallet(config.privateKey, sourceChainProvider);
6
- // const contractAddress = addresses[chainId].interopX;
7
- // const contract = getContract<InteropX>(contractAddress, abi.interopX, sourceWallet);
8
- // const data = await contract.getBridgeAmounts(user, tokens);
9
- // return data.map((item, index) => ({
10
- // token: tokens[index],
11
- // deposit: item.deposit,
12
- // withdraw: item.withdraw,
13
- // }))
14
- // }
15
- async function default_1(transaction, type) {
16
- const transactions = [];
17
- const logs = [];
18
- // if (transaction.actionId !== 'withdraw') {
19
- // throw new Error(`Invalid action: ${transaction.actionId}`)
20
- // }
21
- // if (type !== 'source') {
22
- // throw new Error(`[WIP] Type not supported: ${type}`)
23
- // }
24
- // if (transaction.sourceStatus === 'pending') {
25
- // throw Error('Source transaction already processesing')
26
- // }
27
- // if (transaction.sourceStatus === 'pending') {
28
- // throw Error('Source transaction already processed')
29
- // }
30
- // if (!transaction.requestEvent) {
31
- // throw Error('Something went wrong, source transaction has no request event')
32
- // }
33
- // const { actionId, bridger, position, sourceChainId, targetChainId, metadata } = transaction.requestEvent;
34
- // const sourceChainProvider = new ethers.providers.JsonRpcProvider(getRpcProviderUrl(sourceChainId as ChainId));
35
- // const sourceWallet = new ethers.Wallet(config.privateKey, sourceChainProvider);
36
- // const contractAddress = addresses[sourceChainId].interopX;
37
- // const contract = getContract<InteropX>(contractAddress, abi.interopX, sourceWallet);
38
- // const sourceToken = tokens[sourceChainId].find(t => t.address.toLowerCase() === position.withdraw[0].sourceToken.toLowerCase());
39
- // if (!sourceToken) {
40
- // throw Error('Source token not found')
41
- // }
42
- // const targetToken = tokens[targetChainId].find(t => t.address.toLowerCase() === position.withdraw[0].targetToken.toLowerCase());
43
- // if (!targetToken) {
44
- // throw Error('Target token not found')
45
- // }
46
- // if (!sourceToken.aliases.some(alias => targetToken.aliases.includes(alias))) {
47
- // throw Error('Source and target token must be the same')
48
- // }
49
- // const networks: ChainId[] = [137, 43114];
50
- // const networkUserData = {}
51
- // for (const network of networks) {
52
- // networkUserData[network] = await getBridgeAmounts(bridger, tokens[network].map(t => t.address), network)
53
- // }
54
- // for (const tokenSymbol of ["dai", "usdc", "usdt", "eth", "wbtc"]) {
55
- // let totalDeposit = BigNumber.from(0)
56
- // let totalWithdraw = BigNumber.from(0)
57
- // for (const network of networks) {
58
- // // on avax might we have 2 usdc/usdt tokens
59
- // const matchedTokens = tokens[network].filter(t => t.aliases.includes(tokenSymbol));
60
- // for (const matchedToken of matchedTokens) {
61
- // const data = networkUserData[network].find(t => t.token.toLowerCase() === matchedToken.address.toLowerCase());
62
- // if (data) {
63
- // totalDeposit = totalDeposit.add(data.deposit)
64
- // totalWithdraw = totalWithdraw.add(data.withdraw)
65
- // }
66
- // }
67
- // // on Mainent add weth too
68
- // if (tokenSymbol === "eth" && network === 1) {
69
- // const weth = tokens[1].find(t => t.symbol === 'WETH');
70
- // if (weth) {
71
- // const data = networkUserData[1].find(t => t.token.toLowerCase() === weth.address.toLowerCase());
72
- // if (data) {
73
- // totalDeposit = totalDeposit.add(data.deposit)
74
- // totalWithdraw = totalWithdraw.add(data.withdraw)
75
- // }
76
- // }
77
- // }
78
- // }
79
- // if (totalWithdraw.gt(totalDeposit)) {
80
- // throw Error(`if withdraw > deposit, user has debt and we can't process the withdraw and reject it`)
81
- // }
82
- // if (totalWithdraw.lt(totalDeposit)) {
83
- // throw Error('Something went wrong')
84
- // }
85
- // }
86
- // let balance = BigNumber.from(0);
87
- // if (position.withdraw[0].sourceToken.toLowerCase() === '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE'.toLowerCase()) {
88
- // balance = await sourceChainProvider.getBalance(bridger);
89
- // } else {
90
- // const erc20 = getContract<Erc20>(position.withdraw[0].sourceToken, abi.erc20, sourceChainProvider);
91
- // balance = await erc20.balanceOf(addresses[sourceChainId].gnosisSafe);
92
- // }
93
- // if (balance.lt(position.withdraw[0].amount)) {
94
- // throw new LiquidityError()
95
- // }
96
- // const { data } = await contract.populateTransaction.withdrawRequested(
97
- // actionId,
98
- // bridger,
99
- // position.withdraw[0].sourceToken,
100
- // position.withdraw[0].targetToken,
101
- // position.withdraw[0].amount,
102
- // targetChainId,
103
- // transaction.requestTransactionHash,
104
- // metadata,
105
- // );
106
- // transactions.push({
107
- // to: contractAddress,
108
- // data: data!,
109
- // value: '0',
110
- // operation: OperationType.Call,
111
- // });
112
- return { transactions, logs };
113
- }
114
- exports.default = default_1;
@@ -1,155 +0,0 @@
1
- import abi from "@/abi";
2
- import config from "@/config";
3
- import { addresses, tokens } from "@/constants";
4
- import { Transaction } from "@/db";
5
- import { Erc20, InteropX } from "@/typechain";
6
- import { ChainId } from "@/types";
7
- import { getContract, getRpcProviderUrl, LiquidityError } from "@/utils";
8
- import { BigNumber, ethers } from "ethers";
9
- import { MetaTransaction, OperationType } from "ethers-multisend";
10
-
11
-
12
- // const getBridgeAmounts = async (user: string, tokens: string[], chainId: ChainId) => {
13
- // const sourceChainProvider = new ethers.providers.JsonRpcProvider(getRpcProviderUrl(chainId));
14
- // const sourceWallet = new ethers.Wallet(config.privateKey, sourceChainProvider);
15
- // const contractAddress = addresses[chainId].interopX;
16
- // const contract = getContract<InteropX>(contractAddress, abi.interopX, sourceWallet);
17
- // const data = await contract.getBridgeAmounts(user, tokens);
18
-
19
-
20
- // return data.map((item, index) => ({
21
- // token: tokens[index],
22
- // deposit: item.deposit,
23
- // withdraw: item.withdraw,
24
- // }))
25
- // }
26
-
27
- export default async function (transaction: Transaction, type: 'source' | 'target') {
28
- const transactions: MetaTransaction[] = [];
29
- const logs: any[] = [];
30
-
31
- // if (transaction.actionId !== 'withdraw') {
32
- // throw new Error(`Invalid action: ${transaction.actionId}`)
33
- // }
34
-
35
- // if (type !== 'source') {
36
- // throw new Error(`[WIP] Type not supported: ${type}`)
37
- // }
38
-
39
- // if (transaction.sourceStatus === 'pending') {
40
- // throw Error('Source transaction already processesing')
41
- // }
42
-
43
- // if (transaction.sourceStatus === 'pending') {
44
- // throw Error('Source transaction already processed')
45
- // }
46
-
47
- // if (!transaction.requestEvent) {
48
- // throw Error('Something went wrong, source transaction has no request event')
49
- // }
50
-
51
- // const { actionId, bridger, position, sourceChainId, targetChainId, metadata } = transaction.requestEvent;
52
-
53
- // const sourceChainProvider = new ethers.providers.JsonRpcProvider(getRpcProviderUrl(sourceChainId as ChainId));
54
- // const sourceWallet = new ethers.Wallet(config.privateKey, sourceChainProvider);
55
- // const contractAddress = addresses[sourceChainId].interopX;
56
- // const contract = getContract<InteropX>(contractAddress, abi.interopX, sourceWallet);
57
-
58
- // const sourceToken = tokens[sourceChainId].find(t => t.address.toLowerCase() === position.withdraw[0].sourceToken.toLowerCase());
59
-
60
- // if (!sourceToken) {
61
- // throw Error('Source token not found')
62
- // }
63
-
64
- // const targetToken = tokens[targetChainId].find(t => t.address.toLowerCase() === position.withdraw[0].targetToken.toLowerCase());
65
-
66
- // if (!targetToken) {
67
- // throw Error('Target token not found')
68
- // }
69
-
70
- // if (!sourceToken.aliases.some(alias => targetToken.aliases.includes(alias))) {
71
- // throw Error('Source and target token must be the same')
72
- // }
73
-
74
- // const networks: ChainId[] = [137, 43114];
75
- // const networkUserData = {}
76
- // for (const network of networks) {
77
- // networkUserData[network] = await getBridgeAmounts(bridger, tokens[network].map(t => t.address), network)
78
- // }
79
-
80
- // for (const tokenSymbol of ["dai", "usdc", "usdt", "eth", "wbtc"]) {
81
- // let totalDeposit = BigNumber.from(0)
82
- // let totalWithdraw = BigNumber.from(0)
83
-
84
- // for (const network of networks) {
85
- // // on avax might we have 2 usdc/usdt tokens
86
- // const matchedTokens = tokens[network].filter(t => t.aliases.includes(tokenSymbol));
87
-
88
- // for (const matchedToken of matchedTokens) {
89
- // const data = networkUserData[network].find(t => t.token.toLowerCase() === matchedToken.address.toLowerCase());
90
-
91
- // if (data) {
92
- // totalDeposit = totalDeposit.add(data.deposit)
93
- // totalWithdraw = totalWithdraw.add(data.withdraw)
94
- // }
95
- // }
96
-
97
- // // on Mainent add weth too
98
- // if (tokenSymbol === "eth" && network === 1) {
99
- // const weth = tokens[1].find(t => t.symbol === 'WETH');
100
-
101
- // if (weth) {
102
- // const data = networkUserData[1].find(t => t.token.toLowerCase() === weth.address.toLowerCase());
103
-
104
- // if (data) {
105
- // totalDeposit = totalDeposit.add(data.deposit)
106
- // totalWithdraw = totalWithdraw.add(data.withdraw)
107
- // }
108
- // }
109
- // }
110
- // }
111
-
112
- // if (totalWithdraw.gt(totalDeposit)) {
113
- // throw Error(`if withdraw > deposit, user has debt and we can't process the withdraw and reject it`)
114
- // }
115
-
116
- // if (totalWithdraw.lt(totalDeposit)) {
117
- // throw Error('Something went wrong')
118
- // }
119
- // }
120
-
121
- // let balance = BigNumber.from(0);
122
-
123
- // if (position.withdraw[0].sourceToken.toLowerCase() === '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE'.toLowerCase()) {
124
- // balance = await sourceChainProvider.getBalance(bridger);
125
-
126
- // } else {
127
- // const erc20 = getContract<Erc20>(position.withdraw[0].sourceToken, abi.erc20, sourceChainProvider);
128
- // balance = await erc20.balanceOf(addresses[sourceChainId].gnosisSafe);
129
- // }
130
-
131
- // if (balance.lt(position.withdraw[0].amount)) {
132
- // throw new LiquidityError()
133
- // }
134
-
135
-
136
- // const { data } = await contract.populateTransaction.withdrawRequested(
137
- // actionId,
138
- // bridger,
139
- // position.withdraw[0].sourceToken,
140
- // position.withdraw[0].targetToken,
141
- // position.withdraw[0].amount,
142
- // targetChainId,
143
- // transaction.requestTransactionHash,
144
- // metadata,
145
- // );
146
-
147
- // transactions.push({
148
- // to: contractAddress,
149
- // data: data!,
150
- // value: '0',
151
- // operation: OperationType.Call,
152
- // });
153
-
154
- return { transactions, logs }
155
- }