@instadapp/interop-x 0.0.0-dev.9b1fcb8 → 0.0.0-dev.a145c8e
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 +21 -17
- 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 +11 -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 +37 -15
- package/dist/src/gnosis/actions/aaveV2/index.js +11 -0
- package/dist/src/gnosis/actions/aaveV2/source.js +73 -0
- package/dist/src/gnosis/actions/aaveV2/target.js +85 -0
- package/dist/src/gnosis/actions/index.js +9 -0
- package/dist/src/gnosis/index.js +20 -0
- package/dist/src/index.js +75 -24
- package/dist/src/net/peer/index.js +2 -1
- package/dist/src/net/pool/index.js +18 -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 +51 -1
- package/dist/src/tasks/AutoUpdateTask.js +70 -0
- package/dist/src/tasks/BaseTask.js +11 -3
- package/dist/src/tasks/InteropX/ProcessSubmitSubmitEvents.js +179 -0
- package/dist/src/tasks/InteropX/SyncLogSubmitEvents.js +87 -0
- package/dist/src/tasks/InteropX/SyncLogValidateEvents.js +105 -0
- package/dist/src/tasks/Transactions/SyncTransactionStatusTask.js +58 -0
- package/dist/src/tasks/index.js +17 -13
- 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 +111 -66
- package/package.json +21 -17
- 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 +11 -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 +138 -65
- package/src/gnosis/actions/aaveV2/index.ts +9 -0
- package/src/gnosis/actions/aaveV2/source.ts +118 -0
- package/src/gnosis/actions/aaveV2/target.ts +132 -0
- package/src/gnosis/actions/index.ts +5 -0
- package/src/gnosis/index.ts +19 -0
- package/src/index.ts +96 -26
- package/src/net/peer/index.ts +2 -1
- package/src/net/pool/index.ts +25 -5
- package/src/net/protocol/dial/SignatureDialProtocol.ts +12 -13
- package/src/net/protocol/dial/TransactionStatusDialProtocol.ts +33 -0
- package/src/net/protocol/index.ts +67 -1
- package/src/tasks/AutoUpdateTask.ts +82 -0
- package/src/tasks/BaseTask.ts +13 -3
- package/src/tasks/InteropX/ProcessSubmitSubmitEvents.ts +269 -0
- package/src/tasks/InteropX/SyncLogSubmitEvents.ts +139 -0
- package/src/tasks/InteropX/SyncLogValidateEvents.ts +152 -0
- package/src/tasks/Transactions/SyncTransactionStatusTask.ts +70 -0
- package/src/tasks/index.ts +25 -16
- 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 +244 -117
- 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/SyncWithdrawEvents.js +0 -68
- package/dist/src/tasks/InteropXGateway/ProcessDepositEvents.js +0 -147
- 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/SyncWithdrawEvents.ts +0 -119
- package/src/tasks/InteropXGateway/ProcessDepositEvents.ts +0 -241
- 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,52 @@
|
|
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
|
13
|
-
import { InteropBridgeToken } 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";
|
12
|
+
import Web3EthAbi from "web3-eth-abi";
|
14
13
|
|
15
14
|
export const http = axios.create();
|
16
15
|
|
17
16
|
axiosRetry(http, { retries: 3, retryDelay: axiosRetry.exponentialDelay });
|
18
17
|
|
18
|
+
export function shortenHash(hash: string, length: number = 4) {
|
19
|
+
if (!hash) return;
|
20
|
+
|
21
|
+
if (hash.length < 12) return hash;
|
22
|
+
|
23
|
+
const beginningChars = hash.startsWith("0x") ? length + 2 : length;
|
24
|
+
|
25
|
+
const shortened = hash.substr(0, beginningChars) + "…" + hash.substr(-length);
|
26
|
+
|
27
|
+
return shortened;
|
28
|
+
}
|
19
29
|
|
20
30
|
export function short(buffer: Buffer): string {
|
21
|
-
return buffer.toString(
|
31
|
+
return buffer.toString("hex").slice(0, 8) + "...";
|
22
32
|
}
|
23
33
|
|
24
|
-
export const signGnosisSafeTx = async (
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
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
|
+
) => {
|
37
50
|
const gnosisSafe = addresses[chainId].gnosisSafe;
|
38
51
|
|
39
52
|
const domain = {
|
@@ -43,16 +56,16 @@ export const signGnosisSafeTx = async ({
|
|
43
56
|
|
44
57
|
const types = {
|
45
58
|
SafeTx: [
|
46
|
-
{ type:
|
47
|
-
{ type:
|
48
|
-
{ type:
|
49
|
-
{ type:
|
50
|
-
{ type:
|
51
|
-
{ type:
|
52
|
-
{ type:
|
53
|
-
{ type:
|
54
|
-
{ type:
|
55
|
-
{ type:
|
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" },
|
56
69
|
],
|
57
70
|
};
|
58
71
|
|
@@ -70,21 +83,21 @@ export const signGnosisSafeTx = async ({
|
|
70
83
|
value,
|
71
84
|
};
|
72
85
|
|
73
|
-
return await signer._signTypedData(domain, types, message)
|
86
|
+
return await signer._signTypedData(domain, types, message);
|
74
87
|
};
|
75
88
|
|
76
89
|
export const getRpcProviderUrl = (chainId: ChainId) => {
|
77
90
|
switch (chainId) {
|
78
91
|
case 1:
|
79
|
-
return
|
92
|
+
return "https://rpc.ankr.com/eth";
|
80
93
|
case 137:
|
81
|
-
return
|
94
|
+
return "https://rpc.ankr.com/polygon";
|
82
95
|
case 43114:
|
83
|
-
return
|
96
|
+
return "https://rpc.ankr.com/avalanche";
|
84
97
|
default:
|
85
98
|
throw new Error(`Unknown chainId: ${chainId}`);
|
86
99
|
}
|
87
|
-
}
|
100
|
+
};
|
88
101
|
|
89
102
|
export interface Signature {
|
90
103
|
signer: string;
|
@@ -107,132 +120,246 @@ export const buildSignatureBytes = (signatures: Signature[]): string => {
|
|
107
120
|
* Call an async function with a maximum time limit (in milliseconds) for the timeout
|
108
121
|
* Resolved promise for async function call, or an error if time limit reached
|
109
122
|
*/
|
110
|
-
export const asyncCallWithTimeout = async <T>(
|
123
|
+
export const asyncCallWithTimeout = async <T>(
|
124
|
+
asyncPromise: Promise<T>,
|
125
|
+
timeout: number
|
126
|
+
) => {
|
111
127
|
let timeoutHandle;
|
112
128
|
|
113
129
|
const timeoutPromise = new Promise((_resolve, reject) => {
|
114
130
|
timeoutHandle = setTimeout(
|
115
|
-
() => reject(new Error(
|
131
|
+
() => reject(new Error("Async call timeout limit reached")),
|
116
132
|
timeout
|
117
133
|
);
|
118
134
|
});
|
119
135
|
|
120
|
-
return Promise.race([asyncPromise, timeoutPromise]).then(result => {
|
136
|
+
return Promise.race([asyncPromise, timeoutPromise]).then((result) => {
|
121
137
|
clearTimeout(timeoutHandle);
|
122
138
|
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
|
-
const transactions: MetaTransaction[] = [];
|
140
|
-
|
141
|
-
if (transaction.action != 'deposit') {
|
142
|
-
throw new Error('Invalid action');
|
143
|
-
}
|
144
|
-
|
145
|
-
if (transaction.action === 'deposit' && transaction.sourceStatus === 'pending') {
|
146
|
-
throw Error('Cannot build data for pending deposit transaction');
|
147
|
-
}
|
148
|
-
|
149
|
-
if (!transaction.submitEvent) {
|
150
|
-
throw Error('Cannot build data for transaction without submitEvent');
|
151
|
-
}
|
152
|
-
|
153
|
-
|
154
|
-
const token = tokens[transaction.sourceChainId].find(token => token.address.toLowerCase() === transaction.submitEvent.token.toLowerCase());
|
155
|
-
|
156
|
-
if (!token) {
|
157
|
-
throw Error('Cannot build data for transaction without token');
|
158
|
-
}
|
159
|
-
|
160
|
-
const itoken = itokens[transaction.targetChainId].find(itoken => itoken.symbol.toLowerCase() === token.symbol.toLowerCase());
|
161
|
-
|
162
|
-
if (!itoken) {
|
163
|
-
throw Error('Cannot build data for transaction without itoken');
|
164
|
-
}
|
139
|
+
}) as Promise<T>;
|
140
|
+
};
|
165
141
|
|
166
|
-
|
167
|
-
|
168
|
-
|
142
|
+
type GenerateInteropTransactionHashParam = {
|
143
|
+
actionId: string;
|
144
|
+
vnonce: string;
|
145
|
+
sourceSender: string;
|
146
|
+
sourceChainId: string | number;
|
147
|
+
sourceDsaId: string;
|
148
|
+
targetChainId: string | number;
|
149
|
+
targetDsaId: string;
|
150
|
+
};
|
169
151
|
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
152
|
+
export const generateInteropTransactionHash = (
|
153
|
+
data: GenerateInteropTransactionHashParam
|
154
|
+
) => {
|
155
|
+
return ethers.utils.solidityKeccak256(
|
156
|
+
Array.from({ length: 7 }, () => "string"),
|
157
|
+
[
|
158
|
+
String(data.actionId),
|
159
|
+
String(data.vnonce),
|
160
|
+
String(data.sourceSender),
|
161
|
+
String(data.sourceChainId),
|
162
|
+
String(data.sourceDsaId),
|
163
|
+
String(data.targetChainId),
|
164
|
+
String(data.targetDsaId),
|
165
|
+
]
|
175
166
|
);
|
167
|
+
};
|
176
168
|
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
operation: OperationType.Call,
|
182
|
-
});
|
183
|
-
|
184
|
-
return encodeMulti(transactions).data
|
169
|
+
export class ContractError extends Error {
|
170
|
+
method: string;
|
171
|
+
address: string;
|
172
|
+
args: any[];
|
185
173
|
}
|
186
174
|
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
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}'.`);
|
191
185
|
}
|
192
186
|
|
193
187
|
const contract = new ethers.Contract(
|
194
188
|
address,
|
195
189
|
contractInterface,
|
196
190
|
signerOrProvider
|
197
|
-
) as TContract
|
191
|
+
) as TContract;
|
198
192
|
|
193
|
+
// Make sure the contract properties is writable
|
194
|
+
const desc = Object.getOwnPropertyDescriptor(contract, "functions");
|
195
|
+
|
196
|
+
if (!desc || desc.writable !== true) {
|
197
|
+
return contract;
|
198
|
+
}
|
199
199
|
|
200
200
|
return new Proxy(contract, {
|
201
201
|
get(target, prop, receiver) {
|
202
202
|
const value = Reflect.get(target, prop, receiver);
|
203
203
|
|
204
|
-
if (
|
204
|
+
if (
|
205
|
+
typeof value === "function" &&
|
206
|
+
(contract.functions.hasOwnProperty(prop) ||
|
207
|
+
["queryFilter"].includes(String(prop)))
|
208
|
+
) {
|
209
|
+
let isConstant = false;
|
210
|
+
|
211
|
+
try {
|
212
|
+
isConstant = contract.interface.getFunction(String(prop)).constant;
|
213
|
+
} catch (error) {}
|
214
|
+
|
205
215
|
return async (...args: any[]) => {
|
206
216
|
try {
|
207
|
-
return await
|
217
|
+
return await retry(
|
218
|
+
async () => await value.bind(contract)(...args),
|
219
|
+
{ retries: isConstant ? 1 : 3 }
|
220
|
+
);
|
208
221
|
} catch (error) {
|
209
|
-
|
222
|
+
const err = new ContractError(
|
223
|
+
`Error calling "${String(prop)}" on "${address}": ${
|
224
|
+
error.reason || error.message
|
225
|
+
}`
|
226
|
+
);
|
227
|
+
|
228
|
+
err.method = String(prop);
|
229
|
+
err.address = address;
|
230
|
+
err.args = [...args];
|
231
|
+
|
232
|
+
throw err;
|
210
233
|
}
|
211
|
-
}
|
234
|
+
};
|
212
235
|
}
|
213
236
|
|
214
|
-
|
215
|
-
|
237
|
+
if (
|
238
|
+
typeof value === "object" &&
|
239
|
+
[
|
240
|
+
"populateTransaction",
|
241
|
+
"estimateGas",
|
242
|
+
"functions",
|
243
|
+
"callStatic",
|
244
|
+
].includes(String(prop))
|
245
|
+
) {
|
216
246
|
const parentProp = String(prop);
|
217
247
|
|
218
248
|
return new Proxy(value, {
|
219
249
|
get(target, prop, receiver) {
|
220
250
|
const value = Reflect.get(target, prop, receiver);
|
221
251
|
|
222
|
-
if (typeof value ===
|
252
|
+
if (typeof value === "function") {
|
223
253
|
return async (...args: any[]) => {
|
224
254
|
try {
|
225
|
-
return await
|
255
|
+
return await retry(
|
256
|
+
async () => await value.bind(contract)(...args),
|
257
|
+
{ retries: parentProp === "callStatic" ? 3 : 1 }
|
258
|
+
);
|
226
259
|
} catch (error) {
|
227
|
-
|
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;
|
228
273
|
}
|
229
|
-
}
|
274
|
+
};
|
230
275
|
}
|
231
|
-
}
|
232
|
-
})
|
276
|
+
},
|
277
|
+
});
|
233
278
|
}
|
234
279
|
|
235
280
|
return value;
|
236
281
|
},
|
237
282
|
});
|
238
|
-
}
|
283
|
+
}
|
284
|
+
|
285
|
+
export const generateGnosisTransaction = async (
|
286
|
+
transactionData: any,
|
287
|
+
safeContract: GnosisSafe
|
288
|
+
) => {
|
289
|
+
console.log(transactionData);
|
290
|
+
|
291
|
+
let isExecuted = await safeContract.dataHashes(
|
292
|
+
await safeContract.getTransactionHash(
|
293
|
+
transactionData.to,
|
294
|
+
transactionData.value,
|
295
|
+
transactionData.data,
|
296
|
+
transactionData.operation,
|
297
|
+
transactionData.safeTxGas,
|
298
|
+
transactionData.baseGas,
|
299
|
+
transactionData.gasPrice,
|
300
|
+
transactionData.gasToken,
|
301
|
+
transactionData.refundReceiver,
|
302
|
+
transactionData.nonce
|
303
|
+
)
|
304
|
+
);
|
305
|
+
|
306
|
+
while (isExecuted == 1) {
|
307
|
+
transactionData.safeTxGas = ethers.BigNumber.from(
|
308
|
+
String(transactionData.safeTxGas)
|
309
|
+
)
|
310
|
+
.add(1)
|
311
|
+
.toString();
|
312
|
+
|
313
|
+
isExecuted = await safeContract.dataHashes(
|
314
|
+
await safeContract.getTransactionHash(
|
315
|
+
transactionData.to,
|
316
|
+
transactionData.value,
|
317
|
+
transactionData.data,
|
318
|
+
transactionData.operation,
|
319
|
+
transactionData.safeTxGas,
|
320
|
+
transactionData.baseGas,
|
321
|
+
transactionData.gasPrice,
|
322
|
+
transactionData.gasToken,
|
323
|
+
transactionData.refundReceiver,
|
324
|
+
transactionData.nonce
|
325
|
+
)
|
326
|
+
);
|
327
|
+
}
|
328
|
+
|
329
|
+
return transactionData;
|
330
|
+
};
|
331
|
+
|
332
|
+
export class LiquidityError extends Error {
|
333
|
+
constructor(message?: string) {
|
334
|
+
super(message || "Not enough liquidity");
|
335
|
+
Object.setPrototypeOf(this, new.target.prototype);
|
336
|
+
}
|
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
|
+
};
|