@instadapp/interop-x 0.0.0-dev.ab1e84b → 0.0.0-dev.acc4865
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/ci.yml +19 -0
- package/dist/package.json +17 -15
- 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 +6 -3
- 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 +39 -23
- package/dist/src/net/peer/index.js +2 -1
- package/dist/src/net/pool/index.js +7 -2
- package/dist/src/net/protocol/dial/SignatureDialProtocol.js +9 -10
- package/dist/src/net/protocol/dial/TransactionStatusDialProtocol.js +30 -0
- package/dist/src/net/protocol/index.js +26 -5
- package/dist/src/tasks/AutoUpdateTask.js +37 -11
- package/dist/src/tasks/BaseTask.js +11 -3
- 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 +58 -0
- package/dist/src/tasks/index.js +12 -17
- 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 +106 -112
- package/package.json +17 -15
- 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 +5 -2
- 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 +52 -25
- package/src/net/peer/index.ts +2 -1
- package/src/net/pool/index.ts +7 -3
- package/src/net/protocol/dial/SignatureDialProtocol.ts +12 -13
- package/src/net/protocol/dial/TransactionStatusDialProtocol.ts +33 -0
- package/src/net/protocol/index.ts +28 -6
- package/src/tasks/AutoUpdateTask.ts +41 -15
- package/src/tasks/BaseTask.ts +13 -3
- package/src/tasks/InteropX/ProcessSubmitSubmitEvents.ts +252 -0
- package/src/tasks/InteropX/SyncLogSubmitEvents.ts +138 -0
- package/src/tasks/Transactions/SyncTransactionStatusTask.ts +70 -0
- package/src/tasks/index.ts +15 -19
- 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 +240 -182
- 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 -147
- package/dist/src/tasks/InteropBridge/SyncWithdrawEvents.js +0 -70
- package/dist/src/tasks/InteropXGateway/ProcessDepositEvents.js +0 -150
- package/dist/src/tasks/InteropXGateway/SyncDepositEvents.js +0 -75
- 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 -233
- package/src/tasks/InteropBridge/SyncWithdrawEvents.ts +0 -121
- package/src/tasks/InteropXGateway/ProcessDepositEvents.ts +0 -245
- package/src/tasks/InteropXGateway/SyncDepositEvents.ts +0 -126
- 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,39 +1,51 @@
|
|
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
|
|
17
|
+
export function shortenHash(hash: string, length: number = 4) {
|
18
|
+
if (!hash) return;
|
19
|
+
|
20
|
+
if (hash.length < 12) return hash;
|
21
|
+
|
22
|
+
const beginningChars = hash.startsWith("0x") ? length + 2 : length;
|
23
|
+
|
24
|
+
const shortened = hash.substr(0, beginningChars) + "…" + hash.substr(-length);
|
25
|
+
|
26
|
+
return shortened;
|
27
|
+
}
|
19
28
|
|
20
29
|
export function short(buffer: Buffer): string {
|
21
|
-
return buffer.toString(
|
30
|
+
return buffer.toString("hex").slice(0, 8) + "...";
|
22
31
|
}
|
23
32
|
|
24
|
-
export const signGnosisSafeTx = async (
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
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
|
+
) => {
|
37
49
|
const gnosisSafe = addresses[chainId].gnosisSafe;
|
38
50
|
|
39
51
|
const domain = {
|
@@ -43,16 +55,16 @@ export const signGnosisSafeTx = async ({
|
|
43
55
|
|
44
56
|
const types = {
|
45
57
|
SafeTx: [
|
46
|
-
{ type:
|
47
|
-
{ type:
|
48
|
-
{ type:
|
49
|
-
{ type:
|
50
|
-
{ type:
|
51
|
-
{ type:
|
52
|
-
{ type:
|
53
|
-
{ type:
|
54
|
-
{ type:
|
55
|
-
{ 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" },
|
56
68
|
],
|
57
69
|
};
|
58
70
|
|
@@ -70,21 +82,21 @@ export const signGnosisSafeTx = async ({
|
|
70
82
|
value,
|
71
83
|
};
|
72
84
|
|
73
|
-
return await signer._signTypedData(domain, types, message)
|
85
|
+
return await signer._signTypedData(domain, types, message);
|
74
86
|
};
|
75
87
|
|
76
88
|
export const getRpcProviderUrl = (chainId: ChainId) => {
|
77
89
|
switch (chainId) {
|
78
90
|
case 1:
|
79
|
-
return
|
91
|
+
return "https://rpc.ankr.com/eth";
|
80
92
|
case 137:
|
81
|
-
return
|
93
|
+
return "https://rpc.ankr.com/polygon";
|
82
94
|
case 43114:
|
83
|
-
return
|
95
|
+
return "https://rpc.ankr.com/avalanche";
|
84
96
|
default:
|
85
97
|
throw new Error(`Unknown chainId: ${chainId}`);
|
86
98
|
}
|
87
|
-
}
|
99
|
+
};
|
88
100
|
|
89
101
|
export interface Signature {
|
90
102
|
signer: string;
|
@@ -107,201 +119,247 @@ export const buildSignatureBytes = (signatures: Signature[]): string => {
|
|
107
119
|
* Call an async function with a maximum time limit (in milliseconds) for the timeout
|
108
120
|
* Resolved promise for async function call, or an error if time limit reached
|
109
121
|
*/
|
110
|
-
export const asyncCallWithTimeout = async <T>(
|
122
|
+
export const asyncCallWithTimeout = async <T>(
|
123
|
+
asyncPromise: Promise<T>,
|
124
|
+
timeout: number
|
125
|
+
) => {
|
111
126
|
let timeoutHandle;
|
112
127
|
|
113
128
|
const timeoutPromise = new Promise((_resolve, reject) => {
|
114
129
|
timeoutHandle = setTimeout(
|
115
|
-
() => reject(new Error(
|
130
|
+
() => reject(new Error("Async call timeout limit reached")),
|
116
131
|
timeout
|
117
132
|
);
|
118
133
|
});
|
119
134
|
|
120
|
-
return Promise.race([asyncPromise, timeoutPromise]).then(result => {
|
135
|
+
return Promise.race([asyncPromise, timeoutPromise]).then((result) => {
|
121
136
|
clearTimeout(timeoutHandle);
|
122
137
|
return result;
|
123
|
-
}) as Promise<T
|
124
|
-
}
|
125
|
-
|
126
|
-
|
127
|
-
export const generateInteropTransactionHash = (data: { action: string, submitTransactionHash: string, sourceChainId: string | number, targetChainId: string | number }) => {
|
128
|
-
return ethers.utils.solidityKeccak256(['string', 'string', 'string', 'string'], [
|
129
|
-
String(data.action),
|
130
|
-
String(data.submitTransactionHash),
|
131
|
-
String(data.sourceChainId),
|
132
|
-
String(data.targetChainId),
|
133
|
-
]);
|
134
|
-
}
|
135
|
-
|
136
|
-
export const buildDataForTransaction = async (transaction: Transaction, type?: 'source' | 'target') => {
|
137
|
-
type = type || transaction.sourceStatus === 'pending' ? 'source' : 'target';
|
138
|
-
|
139
|
-
switch (transaction.action) {
|
140
|
-
case "deposit":
|
141
|
-
return await buildDepositDataForTransaction(transaction, type);
|
142
|
-
case "withdraw":
|
143
|
-
return await buildWithdrawDataForTransaction(transaction, type);
|
144
|
-
default:
|
145
|
-
throw new Error(`Unknown action: ${transaction.action}`);
|
146
|
-
}
|
147
|
-
}
|
148
|
-
|
149
|
-
export const buildDepositDataForTransaction = async (transaction: Transaction, type: 'source' | 'target') => {
|
150
|
-
const transactions: MetaTransaction[] = [];
|
151
|
-
|
152
|
-
if (transaction.action !== 'deposit') {
|
153
|
-
throw new Error(`Invalid action: ${transaction.action}`)
|
154
|
-
}
|
155
|
-
|
156
|
-
if (transaction.action === 'deposit' && transaction.sourceStatus === 'pending') {
|
157
|
-
throw Error('Cannot build data for pending deposit transaction');
|
158
|
-
}
|
159
|
-
|
160
|
-
if (!transaction.submitEvent) {
|
161
|
-
throw Error('Cannot build data for transaction without submitEvent');
|
162
|
-
}
|
163
|
-
|
164
|
-
|
165
|
-
const token = tokens[transaction.sourceChainId].find(token => token.address.toLowerCase() === transaction.submitEvent.token.toLowerCase());
|
166
|
-
|
167
|
-
if (!token) {
|
168
|
-
throw Error('Cannot build data for transaction without token');
|
169
|
-
}
|
170
|
-
|
171
|
-
const itoken = itokens[transaction.targetChainId].find(itoken => itoken.symbol.toLowerCase() === token.symbol.toLowerCase());
|
172
|
-
|
173
|
-
if (!itoken) {
|
174
|
-
throw Error('Cannot build data for transaction without itoken');
|
175
|
-
}
|
176
|
-
|
177
|
-
const targetChainProvider = new ethers.providers.JsonRpcProvider(getRpcProviderUrl(transaction.targetChainId as ChainId));
|
178
|
-
const targetWallet = new ethers.Wallet(config.privateKey, targetChainProvider);
|
179
|
-
const interopBridgeContract = getContract<InteropBridgeToken>(itoken.address, abi.interopBridgeToken, targetWallet);
|
180
|
-
|
181
|
-
const { data } = await interopBridgeContract.populateTransaction.mint(
|
182
|
-
transaction.submitEvent.user,
|
183
|
-
ethers.BigNumber.from(transaction.submitEvent.amount.toString()),
|
184
|
-
ethers.BigNumber.from(transaction.submitEvent.sourceChainId.toString()),
|
185
|
-
transaction.submitTransactionHash,
|
186
|
-
);
|
187
|
-
|
188
|
-
transactions.push({
|
189
|
-
to: itoken.address,
|
190
|
-
data: data!,
|
191
|
-
value: '0',
|
192
|
-
operation: OperationType.Call,
|
193
|
-
});
|
194
|
-
|
195
|
-
return encodeMulti(transactions).data
|
196
|
-
}
|
197
|
-
|
198
|
-
export const buildWithdrawDataForTransaction = async (transaction: Transaction, type: 'source' | 'target') => {
|
199
|
-
const transactions: MetaTransaction[] = [];
|
200
|
-
|
201
|
-
if (transaction.action !== 'withdraw') {
|
202
|
-
throw new Error(`Invalid action: ${transaction.action}`)
|
203
|
-
}
|
204
|
-
|
205
|
-
if (transaction.action === 'withdraw' && transaction.sourceStatus === 'pending') {
|
206
|
-
throw Error('Cannot build data for pending withdraw transaction');
|
207
|
-
}
|
208
|
-
|
209
|
-
if (!transaction.submitEvent) {
|
210
|
-
throw Error('Cannot build data for transaction without submitEvent');
|
211
|
-
}
|
212
|
-
|
213
|
-
const { to, amount, chainId, itoken: itokenAddress } = transaction.submitEvent;
|
214
|
-
|
215
|
-
const itoken = itokens[transaction.sourceChainId].find(token => token.address.toLowerCase() === itokenAddress.toLowerCase());
|
216
|
-
|
217
|
-
if (!itoken) {
|
218
|
-
throw Error('Cannot build data for transaction without itoken');
|
219
|
-
}
|
220
|
-
|
221
|
-
const token = tokens[chainId].find(t => t.symbol.toLowerCase() === itoken.symbol.toLowerCase());
|
222
|
-
|
223
|
-
if (!token) {
|
224
|
-
throw Error('Cannot build data for transaction without token');
|
225
|
-
}
|
138
|
+
}) as Promise<T>;
|
139
|
+
};
|
226
140
|
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
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
|
+
};
|
231
150
|
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
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
|
+
]
|
238
165
|
);
|
166
|
+
};
|
239
167
|
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
operation: OperationType.Call,
|
245
|
-
});
|
246
|
-
|
247
|
-
return encodeMulti(transactions).data
|
168
|
+
export class ContractError extends Error {
|
169
|
+
method: string;
|
170
|
+
address: string;
|
171
|
+
args: any[];
|
248
172
|
}
|
249
173
|
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
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}'.`);
|
254
184
|
}
|
255
185
|
|
256
186
|
const contract = new ethers.Contract(
|
257
187
|
address,
|
258
188
|
contractInterface,
|
259
189
|
signerOrProvider
|
260
|
-
) as TContract
|
190
|
+
) as TContract;
|
261
191
|
|
262
192
|
// Make sure the contract properties is writable
|
263
|
-
const desc = Object.getOwnPropertyDescriptor(contract,
|
193
|
+
const desc = Object.getOwnPropertyDescriptor(contract, "functions");
|
264
194
|
|
265
195
|
if (!desc || desc.writable !== true) {
|
266
|
-
return contract
|
196
|
+
return contract;
|
267
197
|
}
|
268
198
|
|
269
199
|
return new Proxy(contract, {
|
270
200
|
get(target, prop, receiver) {
|
271
201
|
const value = Reflect.get(target, prop, receiver);
|
272
202
|
|
273
|
-
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
|
+
|
274
214
|
return async (...args: any[]) => {
|
275
215
|
try {
|
276
|
-
return await
|
216
|
+
return await retry(
|
217
|
+
async () => await value.bind(contract)(...args),
|
218
|
+
{ retries: isConstant ? 1 : 3 }
|
219
|
+
);
|
277
220
|
} catch (error) {
|
278
|
-
|
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;
|
279
232
|
}
|
280
|
-
}
|
233
|
+
};
|
281
234
|
}
|
282
235
|
|
283
|
-
|
284
|
-
|
236
|
+
if (
|
237
|
+
typeof value === "object" &&
|
238
|
+
[
|
239
|
+
"populateTransaction",
|
240
|
+
"estimateGas",
|
241
|
+
"functions",
|
242
|
+
"callStatic",
|
243
|
+
].includes(String(prop))
|
244
|
+
) {
|
285
245
|
const parentProp = String(prop);
|
286
246
|
|
287
247
|
return new Proxy(value, {
|
288
248
|
get(target, prop, receiver) {
|
289
249
|
const value = Reflect.get(target, prop, receiver);
|
290
250
|
|
291
|
-
if (typeof value ===
|
251
|
+
if (typeof value === "function") {
|
292
252
|
return async (...args: any[]) => {
|
293
253
|
try {
|
294
|
-
return await
|
254
|
+
return await retry(
|
255
|
+
async () => await value.bind(contract)(...args),
|
256
|
+
{ retries: parentProp === "callStatic" ? 3 : 1 }
|
257
|
+
);
|
295
258
|
} catch (error) {
|
296
|
-
|
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;
|
297
272
|
}
|
298
|
-
}
|
273
|
+
};
|
299
274
|
}
|
300
|
-
}
|
301
|
-
})
|
275
|
+
},
|
276
|
+
});
|
302
277
|
}
|
303
278
|
|
304
279
|
return value;
|
305
280
|
},
|
306
281
|
});
|
307
|
-
}
|
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
|
+
};
|