@instadapp/interop-x 0.0.0-dev.e69b5e8 → 0.0.0-dev.ee3d74b
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/ci.yml +19 -0
- package/dist/package.json +16 -13
- 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 -4
- package/dist/src/abi/interopX.json +1436 -0
- package/dist/src/alias.js +10 -0
- package/dist/src/api/index.js +3 -0
- package/dist/src/config/index.js +10 -1
- package/dist/src/constants/addresses.js +4 -7
- package/dist/src/constants/blockConfirmations.js +8 -0
- package/dist/src/constants/index.js +1 -1
- package/dist/src/constants/tokens.js +62 -39
- package/dist/src/db/models/transaction.js +29 -11
- 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 +9 -0
- package/dist/src/gnosis/index.js +20 -0
- package/dist/src/index.js +34 -22
- package/dist/src/net/protocol/dial/SignatureDialProtocol.js +9 -10
- package/dist/src/net/protocol/dial/{SignatureDialProtocol.1.js → TransactionStatusDialProtocol.js} +2 -0
- package/dist/src/net/protocol/index.js +17 -7
- package/dist/src/tasks/AutoUpdateTask.js +10 -7
- package/dist/src/tasks/BaseTask.js +4 -0
- package/dist/src/tasks/InteropX/ProcessSubmitSubmitEvents.js +168 -0
- package/dist/src/tasks/InteropX/SyncLogSubmitEvents.js +86 -0
- package/dist/src/tasks/Transactions/SyncTransactionStatusTask.js +8 -3
- package/dist/src/tasks/index.js +12 -19
- package/dist/src/typechain/{InteropBridgeToken.js → InteropX.js} +0 -0
- package/dist/src/typechain/factories/InteropX__factory.js +1928 -0
- package/dist/src/typechain/factories/index.js +3 -5
- package/dist/src/typechain/index.js +3 -5
- package/dist/src/utils/index.js +96 -112
- package/package.json +16 -13
- 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 -7
- package/src/abi/interopX.json +1436 -0
- package/src/alias.ts +6 -0
- package/src/api/index.ts +3 -0
- package/src/config/index.ts +9 -1
- package/src/constants/addresses.ts +5 -8
- package/src/constants/blockConfirmations.ts +5 -0
- package/src/constants/index.ts +1 -1
- package/src/constants/tokens.ts +63 -40
- package/src/db/models/transaction.ts +65 -25
- 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 +5 -0
- package/src/gnosis/index.ts +19 -0
- package/src/index.ts +47 -26
- package/src/net/protocol/dial/SignatureDialProtocol.ts +12 -13
- package/src/net/protocol/dial/{SignatureDialProtocol.1.ts → TransactionStatusDialProtocol.ts} +3 -1
- package/src/net/protocol/index.ts +17 -7
- package/src/tasks/AutoUpdateTask.ts +14 -13
- package/src/tasks/BaseTask.ts +5 -0
- package/src/tasks/InteropX/ProcessSubmitSubmitEvents.ts +252 -0
- package/src/tasks/InteropX/SyncLogSubmitEvents.ts +138 -0
- package/src/tasks/Transactions/SyncTransactionStatusTask.ts +8 -3
- package/src/tasks/index.ts +15 -21
- package/src/typechain/InteropX.ts +1216 -0
- package/src/typechain/factories/InteropX__factory.ts +1932 -0
- package/src/typechain/factories/index.ts +1 -2
- package/src/typechain/index.ts +2 -4
- package/src/utils/index.ts +229 -183
- package/tsconfig.json +7 -2
- package/dist/src/abi/interopBridgeToken.json +0 -286
- package/dist/src/abi/interopXGateway.json +0 -184
- package/dist/src/constants/itokens.js +0 -13
- package/dist/src/tasks/InteropBridge/ProcessWithdrawEvents.js +0 -146
- package/dist/src/tasks/InteropBridge/SyncWithdrawEvents.js +0 -69
- package/dist/src/tasks/InteropXGateway/ProcessDepositEvents.js +0 -149
- package/dist/src/tasks/InteropXGateway/SyncDepositEvents.js +0 -74
- package/dist/src/typechain/InteropXGateway.js +0 -2
- package/dist/src/typechain/factories/InteropBridgeToken__factory.js +0 -459
- package/dist/src/typechain/factories/InteropXGateway__factory.js +0 -265
- package/src/abi/interopBridgeToken.json +0 -286
- package/src/abi/interopXGateway.json +0 -184
- package/src/constants/itokens.ts +0 -10
- package/src/tasks/InteropBridge/ProcessWithdrawEvents.ts +0 -231
- package/src/tasks/InteropBridge/SyncWithdrawEvents.ts +0 -119
- package/src/tasks/InteropXGateway/ProcessDepositEvents.ts +0 -243
- package/src/tasks/InteropXGateway/SyncDepositEvents.ts +0 -124
- package/src/typechain/InteropBridgeToken.ts +0 -686
- package/src/typechain/InteropXGateway.ts +0 -407
- package/src/typechain/factories/InteropBridgeToken__factory.ts +0 -466
- package/src/typechain/factories/InteropXGateway__factory.ts +0 -272
@@ -3,5 +3,4 @@
|
|
3
3
|
/* eslint-disable */
|
4
4
|
export { Erc20__factory } from "./Erc20__factory";
|
5
5
|
export { GnosisSafe__factory } from "./GnosisSafe__factory";
|
6
|
-
export {
|
7
|
-
export { InteropXGateway__factory } from "./InteropXGateway__factory";
|
6
|
+
export { InteropX__factory } from "./InteropX__factory";
|
package/src/typechain/index.ts
CHANGED
@@ -3,10 +3,8 @@
|
|
3
3
|
/* eslint-disable */
|
4
4
|
export type { Erc20 } from "./Erc20";
|
5
5
|
export type { GnosisSafe } from "./GnosisSafe";
|
6
|
-
export type {
|
7
|
-
export type { InteropXGateway } from "./InteropXGateway";
|
6
|
+
export type { InteropX } from "./InteropX";
|
8
7
|
export * as factories from "./factories";
|
9
8
|
export { Erc20__factory } from "./factories/Erc20__factory";
|
10
9
|
export { GnosisSafe__factory } from "./factories/GnosisSafe__factory";
|
11
|
-
export {
|
12
|
-
export { InteropXGateway__factory } from "./factories/InteropXGateway__factory";
|
10
|
+
export { InteropX__factory } from "./factories/InteropX__factory";
|
package/src/utils/index.ts
CHANGED
@@ -1,22 +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
|
7
|
-
import { ChainId } from
|
8
|
-
import { ethers } from
|
9
|
-
import {
|
10
|
-
import
|
11
|
-
import
|
12
|
-
import abi from '@/abi';
|
13
|
-
import { InteropBridgeToken, InteropXGateway } from '@/typechain';
|
6
|
+
import { addresses } from "@/constants";
|
7
|
+
import { ChainId } from "@/types";
|
8
|
+
import { ethers } from "ethers";
|
9
|
+
import { GnosisSafe } from "@/typechain";
|
10
|
+
import retry from "async-retry";
|
11
|
+
import { connectors } from "@/abi/connectors";
|
14
12
|
|
15
13
|
export const http = axios.create();
|
16
14
|
|
17
15
|
axiosRetry(http, { retries: 3, retryDelay: axiosRetry.exponentialDelay });
|
18
16
|
|
19
|
-
|
20
17
|
export function shortenHash(hash: string, length: number = 4) {
|
21
18
|
if (!hash) return;
|
22
19
|
|
@@ -30,22 +27,25 @@ export function shortenHash(hash: string, length: number = 4) {
|
|
30
27
|
}
|
31
28
|
|
32
29
|
export function short(buffer: Buffer): string {
|
33
|
-
return buffer.toString(
|
30
|
+
return buffer.toString("hex").slice(0, 8) + "...";
|
34
31
|
}
|
35
32
|
|
36
|
-
export const signGnosisSafeTx = async (
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
33
|
+
export const signGnosisSafeTx = async (
|
34
|
+
{
|
35
|
+
to,
|
36
|
+
data = null as any,
|
37
|
+
value = "0",
|
38
|
+
operation = "1",
|
39
|
+
baseGas = "0",
|
40
|
+
gasPrice = "0",
|
41
|
+
gasToken = "0x0000000000000000000000000000000000000000",
|
42
|
+
refundReceiver = "0x0000000000000000000000000000000000000000",
|
43
|
+
safeTxGas = "79668" as string | number,
|
44
|
+
nonce = "0",
|
45
|
+
chainId = 137 as ChainId,
|
46
|
+
},
|
47
|
+
{ signer }
|
48
|
+
) => {
|
49
49
|
const gnosisSafe = addresses[chainId].gnosisSafe;
|
50
50
|
|
51
51
|
const domain = {
|
@@ -55,16 +55,16 @@ export const signGnosisSafeTx = async ({
|
|
55
55
|
|
56
56
|
const types = {
|
57
57
|
SafeTx: [
|
58
|
-
{ type:
|
59
|
-
{ type:
|
60
|
-
{ type:
|
61
|
-
{ type:
|
62
|
-
{ type:
|
63
|
-
{ type:
|
64
|
-
{ type:
|
65
|
-
{ type:
|
66
|
-
{ type:
|
67
|
-
{ 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" },
|
68
68
|
],
|
69
69
|
};
|
70
70
|
|
@@ -82,21 +82,21 @@ export const signGnosisSafeTx = async ({
|
|
82
82
|
value,
|
83
83
|
};
|
84
84
|
|
85
|
-
return await signer._signTypedData(domain, types, message)
|
85
|
+
return await signer._signTypedData(domain, types, message);
|
86
86
|
};
|
87
87
|
|
88
88
|
export const getRpcProviderUrl = (chainId: ChainId) => {
|
89
89
|
switch (chainId) {
|
90
90
|
case 1:
|
91
|
-
return
|
91
|
+
return "https://rpc.ankr.com/eth";
|
92
92
|
case 137:
|
93
|
-
return
|
93
|
+
return "https://rpc.ankr.com/polygon";
|
94
94
|
case 43114:
|
95
|
-
return
|
95
|
+
return "https://rpc.ankr.com/avalanche";
|
96
96
|
default:
|
97
97
|
throw new Error(`Unknown chainId: ${chainId}`);
|
98
98
|
}
|
99
|
-
}
|
99
|
+
};
|
100
100
|
|
101
101
|
export interface Signature {
|
102
102
|
signer: string;
|
@@ -119,201 +119,247 @@ export const buildSignatureBytes = (signatures: Signature[]): string => {
|
|
119
119
|
* Call an async function with a maximum time limit (in milliseconds) for the timeout
|
120
120
|
* Resolved promise for async function call, or an error if time limit reached
|
121
121
|
*/
|
122
|
-
export const asyncCallWithTimeout = async <T>(
|
122
|
+
export const asyncCallWithTimeout = async <T>(
|
123
|
+
asyncPromise: Promise<T>,
|
124
|
+
timeout: number
|
125
|
+
) => {
|
123
126
|
let timeoutHandle;
|
124
127
|
|
125
128
|
const timeoutPromise = new Promise((_resolve, reject) => {
|
126
129
|
timeoutHandle = setTimeout(
|
127
|
-
() => reject(new Error(
|
130
|
+
() => reject(new Error("Async call timeout limit reached")),
|
128
131
|
timeout
|
129
132
|
);
|
130
133
|
});
|
131
134
|
|
132
|
-
return Promise.race([asyncPromise, timeoutPromise]).then(result => {
|
135
|
+
return Promise.race([asyncPromise, timeoutPromise]).then((result) => {
|
133
136
|
clearTimeout(timeoutHandle);
|
134
137
|
return result;
|
135
|
-
}) as Promise<T
|
136
|
-
}
|
137
|
-
|
138
|
-
|
139
|
-
export const generateInteropTransactionHash = (data: { action: string, submitTransactionHash: string, sourceChainId: string | number, targetChainId: string | number }) => {
|
140
|
-
return ethers.utils.solidityKeccak256(['string', 'string', 'string', 'string'], [
|
141
|
-
String(data.action),
|
142
|
-
String(data.submitTransactionHash),
|
143
|
-
String(data.sourceChainId),
|
144
|
-
String(data.targetChainId),
|
145
|
-
]);
|
146
|
-
}
|
147
|
-
|
148
|
-
export const buildDataForTransaction = async (transaction: Transaction, type?: 'source' | 'target') => {
|
149
|
-
type = type || transaction.sourceStatus === 'pending' ? 'source' : 'target';
|
150
|
-
|
151
|
-
switch (transaction.action) {
|
152
|
-
case "deposit":
|
153
|
-
return await buildDepositDataForTransaction(transaction, type);
|
154
|
-
case "withdraw":
|
155
|
-
return await buildWithdrawDataForTransaction(transaction, type);
|
156
|
-
default:
|
157
|
-
throw new Error(`Unknown action: ${transaction.action}`);
|
158
|
-
}
|
159
|
-
}
|
160
|
-
|
161
|
-
export const buildDepositDataForTransaction = async (transaction: Transaction, type: 'source' | 'target') => {
|
162
|
-
const transactions: MetaTransaction[] = [];
|
163
|
-
|
164
|
-
if (transaction.action !== 'deposit') {
|
165
|
-
throw new Error(`Invalid action: ${transaction.action}`)
|
166
|
-
}
|
167
|
-
|
168
|
-
if (transaction.action === 'deposit' && transaction.sourceStatus === 'pending') {
|
169
|
-
throw Error('Cannot build data for pending deposit transaction');
|
170
|
-
}
|
171
|
-
|
172
|
-
if (!transaction.submitEvent) {
|
173
|
-
throw Error('Cannot build data for transaction without submitEvent');
|
174
|
-
}
|
175
|
-
|
176
|
-
|
177
|
-
const token = tokens[transaction.sourceChainId].find(token => token.address.toLowerCase() === transaction.submitEvent.token.toLowerCase());
|
178
|
-
|
179
|
-
if (!token) {
|
180
|
-
throw Error('Cannot build data for transaction without token');
|
181
|
-
}
|
182
|
-
|
183
|
-
const itoken = itokens[transaction.targetChainId].find(itoken => itoken.symbol.toLowerCase() === token.symbol.toLowerCase());
|
184
|
-
|
185
|
-
if (!itoken) {
|
186
|
-
throw Error('Cannot build data for transaction without itoken');
|
187
|
-
}
|
188
|
-
|
189
|
-
const targetChainProvider = new ethers.providers.JsonRpcProvider(getRpcProviderUrl(transaction.targetChainId as ChainId));
|
190
|
-
const targetWallet = new ethers.Wallet(config.privateKey, targetChainProvider);
|
191
|
-
const interopBridgeContract = getContract<InteropBridgeToken>(itoken.address, abi.interopBridgeToken, targetWallet);
|
192
|
-
|
193
|
-
const { data } = await interopBridgeContract.populateTransaction.mint(
|
194
|
-
transaction.submitEvent.user,
|
195
|
-
ethers.BigNumber.from(transaction.submitEvent.amount.toString()),
|
196
|
-
ethers.BigNumber.from(transaction.submitEvent.sourceChainId.toString()),
|
197
|
-
transaction.submitTransactionHash,
|
198
|
-
);
|
199
|
-
|
200
|
-
transactions.push({
|
201
|
-
to: itoken.address,
|
202
|
-
data: data!,
|
203
|
-
value: '0',
|
204
|
-
operation: OperationType.Call,
|
205
|
-
});
|
206
|
-
|
207
|
-
return encodeMulti(transactions).data
|
208
|
-
}
|
209
|
-
|
210
|
-
export const buildWithdrawDataForTransaction = async (transaction: Transaction, type: 'source' | 'target') => {
|
211
|
-
const transactions: MetaTransaction[] = [];
|
212
|
-
|
213
|
-
if (transaction.action !== 'withdraw') {
|
214
|
-
throw new Error(`Invalid action: ${transaction.action}`)
|
215
|
-
}
|
216
|
-
|
217
|
-
if (transaction.action === 'withdraw' && transaction.sourceStatus === 'pending') {
|
218
|
-
throw Error('Cannot build data for pending withdraw transaction');
|
219
|
-
}
|
220
|
-
|
221
|
-
if (!transaction.submitEvent) {
|
222
|
-
throw Error('Cannot build data for transaction without submitEvent');
|
223
|
-
}
|
224
|
-
|
225
|
-
const { to, amount, chainId, itoken: itokenAddress } = transaction.submitEvent;
|
226
|
-
|
227
|
-
const itoken = itokens[transaction.sourceChainId].find(token => token.address.toLowerCase() === itokenAddress.toLowerCase());
|
228
|
-
|
229
|
-
if (!itoken) {
|
230
|
-
throw Error('Cannot build data for transaction without itoken');
|
231
|
-
}
|
232
|
-
|
233
|
-
const token = tokens[chainId].find(t => t.symbol.toLowerCase() === itoken.symbol.toLowerCase());
|
234
|
-
|
235
|
-
if (!token) {
|
236
|
-
throw Error('Cannot build data for transaction without token');
|
237
|
-
}
|
138
|
+
}) as Promise<T>;
|
139
|
+
};
|
238
140
|
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
141
|
+
type GenerateInteropTransactionHashParam = {
|
142
|
+
actionId: string;
|
143
|
+
vnonce: string;
|
144
|
+
sourceSender: string;
|
145
|
+
sourceChainId: string | number;
|
146
|
+
sourceDsaId: string;
|
147
|
+
targetChainId: string | number;
|
148
|
+
targetDsaId: string;
|
149
|
+
};
|
243
150
|
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
151
|
+
export const generateInteropTransactionHash = (
|
152
|
+
data: GenerateInteropTransactionHashParam
|
153
|
+
) => {
|
154
|
+
return ethers.utils.solidityKeccak256(
|
155
|
+
Array.from({ length: 7 }, () => "string"),
|
156
|
+
[
|
157
|
+
String(data.actionId),
|
158
|
+
String(data.vnonce),
|
159
|
+
String(data.sourceSender),
|
160
|
+
String(data.sourceChainId),
|
161
|
+
String(data.sourceDsaId),
|
162
|
+
String(data.targetChainId),
|
163
|
+
String(data.targetDsaId),
|
164
|
+
]
|
250
165
|
);
|
166
|
+
};
|
251
167
|
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
operation: OperationType.Call,
|
257
|
-
});
|
258
|
-
|
259
|
-
return encodeMulti(transactions).data
|
168
|
+
export class ContractError extends Error {
|
169
|
+
method: string;
|
170
|
+
address: string;
|
171
|
+
args: any[];
|
260
172
|
}
|
261
173
|
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
174
|
+
export function getContract<TContract extends ethers.Contract>(
|
175
|
+
address: string,
|
176
|
+
contractInterface: ethers.ContractInterface | any,
|
177
|
+
signerOrProvider?: ethers.Signer | ethers.providers.Provider
|
178
|
+
) {
|
179
|
+
if (
|
180
|
+
!ethers.utils.getAddress(address) ||
|
181
|
+
address === ethers.constants.AddressZero
|
182
|
+
) {
|
183
|
+
throw Error(`Invalid 'address' parameter '${address}'.`);
|
266
184
|
}
|
267
185
|
|
268
186
|
const contract = new ethers.Contract(
|
269
187
|
address,
|
270
188
|
contractInterface,
|
271
189
|
signerOrProvider
|
272
|
-
) as TContract
|
190
|
+
) as TContract;
|
273
191
|
|
274
192
|
// Make sure the contract properties is writable
|
275
|
-
const desc = Object.getOwnPropertyDescriptor(contract,
|
193
|
+
const desc = Object.getOwnPropertyDescriptor(contract, "functions");
|
276
194
|
|
277
195
|
if (!desc || desc.writable !== true) {
|
278
|
-
return contract
|
196
|
+
return contract;
|
279
197
|
}
|
280
198
|
|
281
199
|
return new Proxy(contract, {
|
282
200
|
get(target, prop, receiver) {
|
283
201
|
const value = Reflect.get(target, prop, receiver);
|
284
202
|
|
285
|
-
if (
|
203
|
+
if (
|
204
|
+
typeof value === "function" &&
|
205
|
+
(contract.functions.hasOwnProperty(prop) ||
|
206
|
+
["queryFilter"].includes(String(prop)))
|
207
|
+
) {
|
208
|
+
let isConstant = false;
|
209
|
+
|
210
|
+
try {
|
211
|
+
isConstant = contract.interface.getFunction(String(prop)).constant;
|
212
|
+
} catch (error) {}
|
213
|
+
|
286
214
|
return async (...args: any[]) => {
|
287
215
|
try {
|
288
|
-
return await
|
216
|
+
return await retry(
|
217
|
+
async () => await value.bind(contract)(...args),
|
218
|
+
{ retries: isConstant ? 1 : 3 }
|
219
|
+
);
|
289
220
|
} catch (error) {
|
290
|
-
|
221
|
+
const err = new ContractError(
|
222
|
+
`Error calling "${String(prop)}" on "${address}": ${
|
223
|
+
error.reason || error.message
|
224
|
+
}`
|
225
|
+
);
|
226
|
+
|
227
|
+
err.method = String(prop);
|
228
|
+
err.address = address;
|
229
|
+
err.args = [...args];
|
230
|
+
|
231
|
+
throw err;
|
291
232
|
}
|
292
|
-
}
|
233
|
+
};
|
293
234
|
}
|
294
235
|
|
295
|
-
|
296
|
-
|
236
|
+
if (
|
237
|
+
typeof value === "object" &&
|
238
|
+
[
|
239
|
+
"populateTransaction",
|
240
|
+
"estimateGas",
|
241
|
+
"functions",
|
242
|
+
"callStatic",
|
243
|
+
].includes(String(prop))
|
244
|
+
) {
|
297
245
|
const parentProp = String(prop);
|
298
246
|
|
299
247
|
return new Proxy(value, {
|
300
248
|
get(target, prop, receiver) {
|
301
249
|
const value = Reflect.get(target, prop, receiver);
|
302
250
|
|
303
|
-
if (typeof value ===
|
251
|
+
if (typeof value === "function") {
|
304
252
|
return async (...args: any[]) => {
|
305
253
|
try {
|
306
|
-
return await
|
254
|
+
return await retry(
|
255
|
+
async () => await value.bind(contract)(...args),
|
256
|
+
{ retries: parentProp === "callStatic" ? 3 : 1 }
|
257
|
+
);
|
307
258
|
} catch (error) {
|
308
|
-
|
259
|
+
const err = new ContractError(
|
260
|
+
`Error calling "${String(
|
261
|
+
prop
|
262
|
+
)}" using "${parentProp}" on "${address}": ${
|
263
|
+
error.reason || error.message
|
264
|
+
}`
|
265
|
+
);
|
266
|
+
|
267
|
+
err.method = String(prop);
|
268
|
+
err.address = address;
|
269
|
+
err.args = [...args];
|
270
|
+
|
271
|
+
throw err;
|
309
272
|
}
|
310
|
-
}
|
273
|
+
};
|
311
274
|
}
|
312
|
-
}
|
313
|
-
})
|
275
|
+
},
|
276
|
+
});
|
314
277
|
}
|
315
278
|
|
316
279
|
return value;
|
317
280
|
},
|
318
281
|
});
|
319
|
-
}
|
282
|
+
}
|
283
|
+
|
284
|
+
export const generateGnosisTransaction = async (
|
285
|
+
transactionData: any,
|
286
|
+
safeContract: GnosisSafe
|
287
|
+
) => {
|
288
|
+
console.log(transactionData);
|
289
|
+
|
290
|
+
let isExecuted = await safeContract.dataHashes(
|
291
|
+
await safeContract.getTransactionHash(
|
292
|
+
transactionData.to,
|
293
|
+
transactionData.value,
|
294
|
+
transactionData.data,
|
295
|
+
transactionData.operation,
|
296
|
+
transactionData.safeTxGas,
|
297
|
+
transactionData.baseGas,
|
298
|
+
transactionData.gasPrice,
|
299
|
+
transactionData.gasToken,
|
300
|
+
transactionData.refundReceiver,
|
301
|
+
transactionData.nonce
|
302
|
+
)
|
303
|
+
);
|
304
|
+
|
305
|
+
while (isExecuted == 1) {
|
306
|
+
transactionData.safeTxGas = ethers.BigNumber.from(
|
307
|
+
String(transactionData.safeTxGas)
|
308
|
+
)
|
309
|
+
.add(1)
|
310
|
+
.toString();
|
311
|
+
|
312
|
+
isExecuted = await safeContract.dataHashes(
|
313
|
+
await safeContract.getTransactionHash(
|
314
|
+
transactionData.to,
|
315
|
+
transactionData.value,
|
316
|
+
transactionData.data,
|
317
|
+
transactionData.operation,
|
318
|
+
transactionData.safeTxGas,
|
319
|
+
transactionData.baseGas,
|
320
|
+
transactionData.gasPrice,
|
321
|
+
transactionData.gasToken,
|
322
|
+
transactionData.refundReceiver,
|
323
|
+
transactionData.nonce
|
324
|
+
)
|
325
|
+
);
|
326
|
+
}
|
327
|
+
|
328
|
+
return transactionData;
|
329
|
+
};
|
330
|
+
|
331
|
+
export class LiquidityError extends Error {
|
332
|
+
constructor(message?: string) {
|
333
|
+
super(message || "Not enough liquidity");
|
334
|
+
Object.setPrototypeOf(this, new.target.prototype);
|
335
|
+
}
|
336
|
+
}
|
337
|
+
|
338
|
+
export const encodeConnectorMethod = (params: {
|
339
|
+
connector: string;
|
340
|
+
method: string;
|
341
|
+
args: string[];
|
342
|
+
}) => {
|
343
|
+
const connectorInterface = getInterface(
|
344
|
+
connectors.versions[2][params.connector],
|
345
|
+
params.method
|
346
|
+
);
|
347
|
+
|
348
|
+
if (!connectorInterface)
|
349
|
+
throw new Error(`ConnectorInterface '${params.method}' not found`);
|
350
|
+
|
351
|
+
const iface = new ethers.utils.Interface(connectorInterface);
|
352
|
+
|
353
|
+
return iface.encodeFunctionData(params.method, params.args);
|
354
|
+
};
|
355
|
+
|
356
|
+
const getInterface = (abiItems: any[], method: string) => {
|
357
|
+
const abiItem = abiItems.find((abiItem) => abiItem.name === method);
|
358
|
+
|
359
|
+
if (!abiItem) {
|
360
|
+
console.error(`${method} is an invalid method.`);
|
361
|
+
return;
|
362
|
+
}
|
363
|
+
|
364
|
+
return abiItem;
|
365
|
+
};
|