@instadapp/interop-x 0.0.0-dev.7738003 → 0.0.0-dev.7913ed9

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