@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.
- package/.github/workflows/ci.yml +19 -0
- package/dist/package.json +14 -12
- package/dist/src/abi/connectors/index.js +36 -0
- package/dist/src/abi/connectors/v1/aave.js +148 -0
- package/dist/src/abi/connectors/v1/aave_claim.js +4 -0
- package/dist/src/abi/connectors/v1/aave_migrate.js +109 -0
- package/dist/src/abi/connectors/v1/aave_polygon_migrate.js +110 -0
- package/dist/src/abi/connectors/v1/aave_stake.js +4 -0
- package/dist/src/abi/connectors/v1/aave_v1_import.js +54 -0
- package/dist/src/abi/connectors/v1/aave_v2.js +230 -0
- package/dist/src/abi/connectors/v1/aave_v2_import.js +59 -0
- package/dist/src/abi/connectors/v1/authority.js +100 -0
- package/dist/src/abi/connectors/v1/basic.js +136 -0
- package/dist/src/abi/connectors/v1/chi.js +36 -0
- package/dist/src/abi/connectors/v1/comp.js +4 -0
- package/dist/src/abi/connectors/v1/compound.js +4 -0
- package/dist/src/abi/connectors/v1/compoundImport.js +69 -0
- package/dist/src/abi/connectors/v1/compoundImport_v2.js +4 -0
- package/dist/src/abi/connectors/v1/compound_old.js +448 -0
- package/dist/src/abi/connectors/v1/curve.js +140 -0
- package/dist/src/abi/connectors/v1/curve_claim.js +63 -0
- package/dist/src/abi/connectors/v1/curve_gauge.js +158 -0
- package/dist/src/abi/connectors/v1/curve_sbtc.js +140 -0
- package/dist/src/abi/connectors/v1/curve_susd.js +140 -0
- package/dist/src/abi/connectors/v1/curve_three.js +79 -0
- package/dist/src/abi/connectors/v1/curve_y.js +140 -0
- package/dist/src/abi/connectors/v1/dsa_migrate_v1_to_v2.js +4 -0
- package/dist/src/abi/connectors/v1/dydx.js +148 -0
- package/dist/src/abi/connectors/v1/dydx_flash.js +52 -0
- package/dist/src/abi/connectors/v1/fee.js +50 -0
- package/dist/src/abi/connectors/v1/gelato.js +1138 -0
- package/dist/src/abi/connectors/v1/index.js +58 -0
- package/dist/src/abi/connectors/v1/instapool.js +439 -0
- package/dist/src/abi/connectors/v1/instapool_v2.js +126 -0
- package/dist/src/abi/connectors/v1/kyber.js +117 -0
- package/dist/src/abi/connectors/v1/maker.js +480 -0
- package/dist/src/abi/connectors/v1/maker_old.js +300 -0
- package/dist/src/abi/connectors/v1/math.js +43 -0
- package/dist/src/abi/connectors/v1/migrate.js +46 -0
- package/dist/src/abi/connectors/v1/oasis.js +198 -0
- package/dist/src/abi/connectors/v1/oneInch.js +160 -0
- package/dist/src/abi/connectors/v1/polygon_bridge.js +4 -0
- package/dist/src/abi/connectors/v1/refinance.js +4 -0
- package/dist/src/abi/connectors/v1/staking.js +220 -0
- package/dist/src/abi/connectors/v1/swerve.js +179 -0
- package/dist/src/abi/connectors/v1/uniswap.js +297 -0
- package/dist/src/abi/connectors/v2/1INCH-A.js +4 -0
- package/dist/src/abi/connectors/v2/1INCH-B.js +4 -0
- package/dist/src/abi/connectors/v2/AAVE-CLAIM-A.js +4 -0
- package/dist/src/abi/connectors/v2/AAVE-CLAIM-B.js +166 -0
- package/dist/src/abi/connectors/v2/AAVE-STAKE-A.js +4 -0
- package/dist/src/abi/connectors/v2/AAVE-V1-A.js +130 -0
- package/dist/src/abi/connectors/v2/AAVE-V1-IMPORT-A.js +4 -0
- package/dist/src/abi/connectors/v2/AAVE-V2-A.js +230 -0
- package/dist/src/abi/connectors/v2/AAVE-V2-IMPORT-A.js +4 -0
- package/dist/src/abi/connectors/v2/AAVE-V2-IMPORT-B.js +225 -0
- package/dist/src/abi/connectors/v2/AUTHORITY-A.js +100 -0
- package/dist/src/abi/connectors/v2/B-COMPOUND-A.js +4 -0
- package/dist/src/abi/connectors/v2/B-LIQUITY-A.js +4 -0
- package/dist/src/abi/connectors/v2/B-MAKERDAO-A.js +4 -0
- package/dist/src/abi/connectors/v2/BASIC-A.js +136 -0
- package/dist/src/abi/connectors/v2/BASIC-B.js +4 -0
- package/dist/src/abi/connectors/v2/BASIC-C.js +4 -0
- package/dist/src/abi/connectors/v2/COMP-A.js +4 -0
- package/dist/src/abi/connectors/v2/COMPOUND-A.js +4 -0
- package/dist/src/abi/connectors/v2/COMPOUND-IMPORT-A.js +4 -0
- package/dist/src/abi/connectors/v2/COMPOUND-IMPORT-B.js +195 -0
- package/dist/src/abi/connectors/v2/G-UNISWAP-A.js +4 -0
- package/dist/src/abi/connectors/v2/GELATO-AAVE-A.js +4 -0
- package/dist/src/abi/connectors/v2/INST-A.js +4 -0
- package/dist/src/abi/connectors/v2/INST-LM-A.js +4 -0
- package/dist/src/abi/connectors/v2/INST-STAKING-A.js +4 -0
- package/dist/src/abi/connectors/v2/INST-STAKING-B.js +4 -0
- package/dist/src/abi/connectors/v2/INSTAPOOL-A.js +4 -0
- package/dist/src/abi/connectors/v2/LIQUITY-A.js +4 -0
- package/dist/src/abi/connectors/v2/MAKERDAO-A.js +4 -0
- package/dist/src/abi/connectors/v2/MAKERDAO-CLAIM-A.js +136 -0
- package/dist/src/abi/connectors/v2/PARASWAP-A.js +4 -0
- package/dist/src/abi/connectors/v2/POLYGON-BRIDGE-A.js +4 -0
- package/dist/src/abi/connectors/v2/REFINANCE-A.js +4 -0
- package/dist/src/abi/connectors/v2/REFLEXER-A.js +4 -0
- package/dist/src/abi/connectors/v2/STAKE-ERC20-A.js +4 -0
- package/dist/src/abi/connectors/v2/UNISWAP-A.js +297 -0
- package/dist/src/abi/connectors/v2/UNISWAP-V2-A.js +4 -0
- package/dist/src/abi/connectors/v2/UNISWAP-V3-A.js +4 -0
- package/dist/src/abi/connectors/v2/UNISWAP-V3-STAKE-A.js +4 -0
- package/dist/src/abi/connectors/v2/WETH-A.js +4 -0
- package/dist/src/abi/connectors/v2/YEARN-VAULT-A.js +4 -0
- package/dist/src/abi/connectors/v2/index.js +89 -0
- package/dist/src/abi/index.js +4 -2
- package/dist/src/abi/interopX.json +1436 -0
- package/dist/src/api/index.js +1 -1
- package/dist/src/constants/addresses.js +4 -7
- package/dist/src/constants/tokens.js +44 -51
- package/dist/src/db/models/transaction.js +12 -10
- package/dist/src/gnosis/actions/aaveV2/index.js +11 -0
- package/dist/src/gnosis/actions/aaveV2/source.js +62 -0
- package/dist/src/gnosis/actions/aaveV2/target.js +8 -0
- package/dist/src/gnosis/actions/index.js +2 -2
- package/dist/src/gnosis/index.js +3 -3
- package/dist/src/index.js +1 -1
- package/dist/src/tasks/{InteropXContract/SyncBridgeRequestEvents.js → InteropX/SyncLogSubmitEvents.js} +25 -16
- package/dist/src/tasks/Transactions/SyncTransactionStatusTask.js +6 -3
- package/dist/src/tasks/index.js +6 -10
- package/dist/src/typechain/{InteropXContract.js → InteropX.js} +0 -0
- package/dist/src/typechain/factories/InteropX__factory.js +1928 -0
- package/dist/src/typechain/factories/index.js +3 -3
- package/dist/src/typechain/index.js +3 -3
- package/dist/src/utils/index.js +87 -33
- package/package.json +14 -12
- package/src/abi/connectors/index.ts +14 -0
- package/src/abi/connectors/v1/aave.ts +147 -0
- package/src/abi/connectors/v1/aave_claim.ts +3 -0
- package/src/abi/connectors/v1/aave_migrate.ts +108 -0
- package/src/abi/connectors/v1/aave_polygon_migrate.ts +109 -0
- package/src/abi/connectors/v1/aave_stake.ts +3 -0
- package/src/abi/connectors/v1/aave_v1_import.ts +53 -0
- package/src/abi/connectors/v1/aave_v2.ts +229 -0
- package/src/abi/connectors/v1/aave_v2_import.ts +58 -0
- package/src/abi/connectors/v1/authority.ts +99 -0
- package/src/abi/connectors/v1/basic.ts +135 -0
- package/src/abi/connectors/v1/chi.ts +35 -0
- package/src/abi/connectors/v1/comp.ts +3 -0
- package/src/abi/connectors/v1/compound.ts +3 -0
- package/src/abi/connectors/v1/compoundImport.ts +68 -0
- package/src/abi/connectors/v1/compoundImport_v2.ts +3 -0
- package/src/abi/connectors/v1/compound_old.ts +447 -0
- package/src/abi/connectors/v1/curve.ts +139 -0
- package/src/abi/connectors/v1/curve_claim.ts +62 -0
- package/src/abi/connectors/v1/curve_gauge.ts +157 -0
- package/src/abi/connectors/v1/curve_sbtc.ts +139 -0
- package/src/abi/connectors/v1/curve_susd.ts +139 -0
- package/src/abi/connectors/v1/curve_three.ts +78 -0
- package/src/abi/connectors/v1/curve_y.ts +139 -0
- package/src/abi/connectors/v1/dsa_migrate_v1_to_v2.ts +3 -0
- package/src/abi/connectors/v1/dydx.ts +147 -0
- package/src/abi/connectors/v1/dydx_flash.ts +51 -0
- package/src/abi/connectors/v1/fee.ts +49 -0
- package/src/abi/connectors/v1/gelato.ts +1137 -0
- package/src/abi/connectors/v1/index.ts +42 -0
- package/src/abi/connectors/v1/instapool.ts +438 -0
- package/src/abi/connectors/v1/instapool_v2.ts +125 -0
- package/src/abi/connectors/v1/kyber.ts +116 -0
- package/src/abi/connectors/v1/maker.ts +479 -0
- package/src/abi/connectors/v1/maker_old.ts +299 -0
- package/src/abi/connectors/v1/math.ts +42 -0
- package/src/abi/connectors/v1/migrate.ts +45 -0
- package/src/abi/connectors/v1/oasis.ts +197 -0
- package/src/abi/connectors/v1/oneInch.ts +159 -0
- package/src/abi/connectors/v1/polygon_bridge.ts +3 -0
- package/src/abi/connectors/v1/refinance.ts +3 -0
- package/src/abi/connectors/v1/staking.ts +219 -0
- package/src/abi/connectors/v1/swerve.ts +178 -0
- package/src/abi/connectors/v1/uniswap.ts +297 -0
- package/src/abi/connectors/v2/1INCH-A.ts +3 -0
- package/src/abi/connectors/v2/1INCH-B.ts +3 -0
- package/src/abi/connectors/v2/AAVE-CLAIM-A.ts +3 -0
- package/src/abi/connectors/v2/AAVE-CLAIM-B.ts +165 -0
- package/src/abi/connectors/v2/AAVE-STAKE-A.ts +3 -0
- package/src/abi/connectors/v2/AAVE-V1-A.ts +130 -0
- package/src/abi/connectors/v2/AAVE-V1-IMPORT-A.ts +3 -0
- package/src/abi/connectors/v2/AAVE-V2-A.ts +229 -0
- package/src/abi/connectors/v2/AAVE-V2-IMPORT-A.ts +3 -0
- package/src/abi/connectors/v2/AAVE-V2-IMPORT-B.ts +224 -0
- package/src/abi/connectors/v2/AUTHORITY-A.ts +99 -0
- package/src/abi/connectors/v2/B-COMPOUND-A.ts +3 -0
- package/src/abi/connectors/v2/B-LIQUITY-A.ts +3 -0
- package/src/abi/connectors/v2/B-MAKERDAO-A.ts +3 -0
- package/src/abi/connectors/v2/BASIC-A.ts +135 -0
- package/src/abi/connectors/v2/BASIC-B.ts +3 -0
- package/src/abi/connectors/v2/BASIC-C.ts +3 -0
- package/src/abi/connectors/v2/COMP-A.ts +3 -0
- package/src/abi/connectors/v2/COMPOUND-A.ts +3 -0
- package/src/abi/connectors/v2/COMPOUND-IMPORT-A.ts +3 -0
- package/src/abi/connectors/v2/COMPOUND-IMPORT-B.ts +194 -0
- package/src/abi/connectors/v2/G-UNISWAP-A.ts +3 -0
- package/src/abi/connectors/v2/GELATO-AAVE-A.ts +3 -0
- package/src/abi/connectors/v2/INST-A.ts +3 -0
- package/src/abi/connectors/v2/INST-LM-A.ts +3 -0
- package/src/abi/connectors/v2/INST-STAKING-A.ts +3 -0
- package/src/abi/connectors/v2/INST-STAKING-B.ts +3 -0
- package/src/abi/connectors/v2/INSTAPOOL-A.ts +3 -0
- package/src/abi/connectors/v2/LIQUITY-A.ts +3 -0
- package/src/abi/connectors/v2/MAKERDAO-A.ts +3 -0
- package/src/abi/connectors/v2/MAKERDAO-CLAIM-A.ts +135 -0
- package/src/abi/connectors/v2/PARASWAP-A.ts +3 -0
- package/src/abi/connectors/v2/POLYGON-BRIDGE-A.ts +3 -0
- package/src/abi/connectors/v2/REFINANCE-A.ts +3 -0
- package/src/abi/connectors/v2/REFLEXER-A.ts +3 -0
- package/src/abi/connectors/v2/STAKE-ERC20-A.ts +3 -0
- package/src/abi/connectors/v2/UNISWAP-A.ts +297 -0
- package/src/abi/connectors/v2/UNISWAP-V2-A.ts +3 -0
- package/src/abi/connectors/v2/UNISWAP-V3-A.ts +3 -0
- package/src/abi/connectors/v2/UNISWAP-V3-STAKE-A.ts +3 -0
- package/src/abi/connectors/v2/WETH-A.ts +3 -0
- package/src/abi/connectors/v2/YEARN-VAULT-A.ts +3 -0
- package/src/abi/connectors/v2/index.ts +87 -0
- package/src/abi/index.ts +7 -5
- package/src/abi/interopX.json +1436 -0
- package/src/api/index.ts +1 -1
- package/src/constants/addresses.ts +5 -8
- package/src/constants/tokens.ts +44 -51
- package/src/db/models/transaction.ts +31 -30
- package/src/gnosis/actions/aaveV2/index.ts +9 -0
- package/src/gnosis/actions/aaveV2/source.ts +104 -0
- package/src/gnosis/actions/aaveV2/target.ts +13 -0
- package/src/gnosis/actions/index.ts +2 -2
- package/src/gnosis/index.ts +3 -3
- package/src/tasks/InteropX/SyncLogSubmitEvents.ts +138 -0
- package/src/tasks/Transactions/SyncTransactionStatusTask.ts +6 -3
- package/src/tasks/index.ts +5 -12
- package/src/typechain/InteropX.ts +1216 -0
- package/src/typechain/factories/InteropX__factory.ts +1932 -0
- package/src/typechain/factories/index.ts +1 -1
- package/src/typechain/index.ts +2 -2
- package/src/utils/index.ts +222 -97
- package/dist/src/abi/interopXContract.json +0 -391
- package/dist/src/gnosis/actions/withdraw/index.js +0 -55
- package/dist/src/tasks/InteropXContract/ProcessBridgeRequestEvents.js +0 -152
- package/dist/src/tasks/InteropXContract/SyncBridgeRequestSentEvents.js +0 -89
- package/dist/src/typechain/factories/InteropXContract__factory.js +0 -526
- package/src/abi/interopXContract.json +0 -391
- package/src/gnosis/actions/withdraw/index.ts +0 -76
- package/src/tasks/InteropXContract/ProcessBridgeRequestEvents.ts +0 -216
- package/src/tasks/InteropXContract/SyncBridgeRequestEvents.ts +0 -114
- package/src/tasks/InteropXContract/SyncBridgeRequestSentEvents.ts +0 -120
- package/src/typechain/InteropXContract.ts +0 -524
- package/src/typechain/factories/InteropXContract__factory.ts +0 -533
package/src/typechain/index.ts
CHANGED
@@ -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 {
|
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 {
|
10
|
+
export { InteropX__factory } from "./factories/InteropX__factory";
|
package/src/utils/index.ts
CHANGED
@@ -1,17 +1,19 @@
|
|
1
1
|
/**
|
2
2
|
* @module util
|
3
3
|
*/
|
4
|
-
import axios from
|
4
|
+
import axios from "axios";
|
5
5
|
import axiosRetry from "axios-retry";
|
6
|
-
import { addresses } from
|
7
|
-
import { ChainId } from
|
8
|
-
import { ethers } from
|
9
|
-
import { GnosisSafe } from
|
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(
|
30
|
+
return buffer.toString("hex").slice(0, 8) + "...";
|
29
31
|
}
|
30
32
|
|
31
|
-
export const signGnosisSafeTx = async (
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
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:
|
54
|
-
{ type:
|
55
|
-
{ type:
|
56
|
-
{ type:
|
57
|
-
{ type:
|
58
|
-
{ type:
|
59
|
-
{ type:
|
60
|
-
{ type:
|
61
|
-
{ type:
|
62
|
-
{ type:
|
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
|
91
|
+
return "https://rpc.ankr.com/eth";
|
87
92
|
case 137:
|
88
|
-
return
|
93
|
+
return "https://rpc.ankr.com/polygon";
|
89
94
|
case 43114:
|
90
|
-
return
|
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>(
|
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(
|
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 = (
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
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>(
|
145
|
-
|
146
|
-
|
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,
|
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 (
|
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
|
216
|
+
return await retry(
|
217
|
+
async () => await value.bind(contract)(...args),
|
218
|
+
{ retries: isConstant ? 1 : 3 }
|
219
|
+
);
|
170
220
|
} catch (error) {
|
171
|
-
|
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
|
-
|
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 ===
|
251
|
+
if (typeof value === "function") {
|
185
252
|
return async (...args: any[]) => {
|
186
253
|
try {
|
187
|
-
return await
|
254
|
+
return await retry(
|
255
|
+
async () => await value.bind(contract)(...args),
|
256
|
+
{ retries: parentProp === "callStatic" ? 3 : 1 }
|
257
|
+
);
|
188
258
|
} catch (error) {
|
189
|
-
|
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 (
|
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
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
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
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
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
|
-
|
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
|
+
};
|