@1delta/bridge-configs 0.1.0
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/LICENSE +674 -0
- package/dist/configs/across/config.d.ts +4 -0
- package/dist/configs/across/config.d.ts.map +1 -0
- package/dist/configs/across/config.js +317 -0
- package/dist/configs/axelar/abis/AxelarGasService.d.ts +103 -0
- package/dist/configs/axelar/abis/AxelarGasService.d.ts.map +1 -0
- package/dist/configs/axelar/abis/AxelarGasService.js +1073 -0
- package/dist/configs/axelar/abis/AxelarGateway.d.ts +51 -0
- package/dist/configs/axelar/abis/AxelarGateway.d.ts.map +1 -0
- package/dist/configs/axelar/abis/AxelarGateway.js +753 -0
- package/dist/configs/axelar/abis/SquidMulticall.d.ts +47 -0
- package/dist/configs/axelar/abis/SquidMulticall.d.ts.map +1 -0
- package/dist/configs/axelar/abis/SquidMulticall.js +104 -0
- package/dist/configs/axelar/abis/SquidRouter.d.ts +82 -0
- package/dist/configs/axelar/abis/SquidRouter.d.ts.map +1 -0
- package/dist/configs/axelar/abis/SquidRouter.js +837 -0
- package/dist/configs/axelar/calldata/buildTx.d.ts +3 -0
- package/dist/configs/axelar/calldata/buildTx.d.ts.map +1 -0
- package/dist/configs/axelar/calldata/buildTx.js +29 -0
- package/dist/configs/axelar/calldata/index.d.ts +3 -0
- package/dist/configs/axelar/calldata/index.d.ts.map +1 -0
- package/dist/configs/axelar/calldata/index.js +2 -0
- package/dist/configs/axelar/calldata/squid/createSquidMulticallPayload.d.ts +16 -0
- package/dist/configs/axelar/calldata/squid/createSquidMulticallPayload.d.ts.map +1 -0
- package/dist/configs/axelar/calldata/squid/createSquidMulticallPayload.js +76 -0
- package/dist/configs/axelar/calldata/squid/types.d.ts +15 -0
- package/dist/configs/axelar/calldata/squid/types.d.ts.map +1 -0
- package/dist/configs/axelar/calldata/squid/types.js +7 -0
- package/dist/configs/axelar/calldata/types.d.ts +18 -0
- package/dist/configs/axelar/calldata/types.d.ts.map +1 -0
- package/dist/configs/axelar/calldata/types.js +1 -0
- package/dist/configs/axelar/config.d.ts +4 -0
- package/dist/configs/axelar/config.d.ts.map +1 -0
- package/dist/configs/axelar/config.js +99 -0
- package/dist/configs/axelar/data/axelarConfig/index.d.ts +3 -0
- package/dist/configs/axelar/data/axelarConfig/index.d.ts.map +1 -0
- package/dist/configs/axelar/data/axelarConfig/index.js +33 -0
- package/dist/configs/axelar/data/axelarConfig/types.d.ts +181 -0
- package/dist/configs/axelar/data/axelarConfig/types.d.ts.map +1 -0
- package/dist/configs/axelar/data/axelarConfig/types.js +1 -0
- package/dist/configs/axelar/data/squidChains/index.d.ts +6 -0
- package/dist/configs/axelar/data/squidChains/index.d.ts.map +1 -0
- package/dist/configs/axelar/data/squidChains/index.js +61 -0
- package/dist/configs/axelar/data/squidChains/types.d.ts +23 -0
- package/dist/configs/axelar/data/squidChains/types.d.ts.map +1 -0
- package/dist/configs/axelar/data/squidChains/types.js +1 -0
- package/dist/configs/axelar/errors.d.ts +15 -0
- package/dist/configs/axelar/errors.d.ts.map +1 -0
- package/dist/configs/axelar/errors.js +8 -0
- package/dist/configs/axelar/gasEstimation/index.d.ts +7 -0
- package/dist/configs/axelar/gasEstimation/index.d.ts.map +1 -0
- package/dist/configs/axelar/gasEstimation/index.js +38 -0
- package/dist/configs/axelar/gasEstimation/types.d.ts +23 -0
- package/dist/configs/axelar/gasEstimation/types.d.ts.map +1 -0
- package/dist/configs/axelar/gasEstimation/types.js +1 -0
- package/dist/configs/axelar/route/fetchAxelarRoute.d.ts +3 -0
- package/dist/configs/axelar/route/fetchAxelarRoute.d.ts.map +1 -0
- package/dist/configs/axelar/route/fetchAxelarRoute.js +50 -0
- package/dist/configs/axelar/route/index.d.ts +3 -0
- package/dist/configs/axelar/route/index.d.ts.map +1 -0
- package/dist/configs/axelar/route/index.js +2 -0
- package/dist/configs/axelar/route/tokenIdentifier.d.ts +5 -0
- package/dist/configs/axelar/route/tokenIdentifier.d.ts.map +1 -0
- package/dist/configs/axelar/route/tokenIdentifier.js +32 -0
- package/dist/configs/axelar/route/types.d.ts +5 -0
- package/dist/configs/axelar/route/types.d.ts.map +1 -0
- package/dist/configs/axelar/route/types.js +1 -0
- package/dist/configs/butter/config.d.ts +9 -0
- package/dist/configs/butter/config.d.ts.map +1 -0
- package/dist/configs/butter/config.js +207 -0
- package/dist/configs/cowswap/config.d.ts +4 -0
- package/dist/configs/cowswap/config.d.ts.map +1 -0
- package/dist/configs/cowswap/config.js +106 -0
- package/dist/configs/cowswap/errors.d.ts +19 -0
- package/dist/configs/cowswap/errors.d.ts.map +1 -0
- package/dist/configs/cowswap/errors.js +12 -0
- package/dist/configs/cowswap/swap/quote.d.ts +5 -0
- package/dist/configs/cowswap/swap/quote.d.ts.map +1 -0
- package/dist/configs/cowswap/swap/quote.js +28 -0
- package/dist/configs/cowswap/swap/route.d.ts +5 -0
- package/dist/configs/cowswap/swap/route.d.ts.map +1 -0
- package/dist/configs/cowswap/swap/route.js +61 -0
- package/dist/configs/cowswap/track/index.d.ts +6 -0
- package/dist/configs/cowswap/track/index.d.ts.map +1 -0
- package/dist/configs/cowswap/track/index.js +27 -0
- package/dist/configs/cowswap/utils/getCowSwapSlippage.d.ts +4 -0
- package/dist/configs/cowswap/utils/getCowSwapSlippage.d.ts.map +1 -0
- package/dist/configs/cowswap/utils/getCowSwapSlippage.js +16 -0
- package/dist/configs/cowswap/utils/toSupportedChainId.d.ts +3 -0
- package/dist/configs/cowswap/utils/toSupportedChainId.d.ts.map +1 -0
- package/dist/configs/cowswap/utils/toSupportedChainId.js +11 -0
- package/dist/configs/crosscurve/config.d.ts +4 -0
- package/dist/configs/crosscurve/config.d.ts.map +1 -0
- package/dist/configs/crosscurve/config.js +185 -0
- package/dist/configs/gas-zip/chains/fetch.d.ts +10 -0
- package/dist/configs/gas-zip/chains/fetch.d.ts.map +1 -0
- package/dist/configs/gas-zip/chains/fetch.js +29 -0
- package/dist/configs/gas-zip/chains/types.d.ts +25 -0
- package/dist/configs/gas-zip/chains/types.d.ts.map +1 -0
- package/dist/configs/gas-zip/chains/types.js +1 -0
- package/dist/configs/gas-zip/config.d.ts +4 -0
- package/dist/configs/gas-zip/config.d.ts.map +1 -0
- package/dist/configs/gas-zip/config.js +121 -0
- package/dist/configs/index.d.ts +2 -0
- package/dist/configs/index.d.ts.map +1 -0
- package/dist/configs/index.js +41 -0
- package/dist/configs/layerswap/LayerswapNetworks.json +3656 -0
- package/dist/configs/layerswap/config.d.ts +4 -0
- package/dist/configs/layerswap/config.d.ts.map +1 -0
- package/dist/configs/layerswap/config.js +285 -0
- package/dist/configs/lifi/config.d.ts +4 -0
- package/dist/configs/lifi/config.d.ts.map +1 -0
- package/dist/configs/lifi/config.js +104 -0
- package/dist/configs/mayan/calldata/index.d.ts +14 -0
- package/dist/configs/mayan/calldata/index.d.ts.map +1 -0
- package/dist/configs/mayan/calldata/index.js +41 -0
- package/dist/configs/mayan/config.d.ts +4 -0
- package/dist/configs/mayan/config.d.ts.map +1 -0
- package/dist/configs/mayan/config.js +222 -0
- package/dist/configs/odos/config.d.ts +8 -0
- package/dist/configs/odos/config.d.ts.map +1 -0
- package/dist/configs/odos/config.js +127 -0
- package/dist/configs/orbiter/abis/ERC20.d.ts +172 -0
- package/dist/configs/orbiter/abis/ERC20.d.ts.map +1 -0
- package/dist/configs/orbiter/abis/ERC20.js +224 -0
- package/dist/configs/orbiter/abis/OrbiterRouterEVMV3.d.ts +85 -0
- package/dist/configs/orbiter/abis/OrbiterRouterEVMV3.d.ts.map +1 -0
- package/dist/configs/orbiter/abis/OrbiterRouterEVMV3.js +83 -0
- package/dist/configs/orbiter/calldata/index.d.ts +32 -0
- package/dist/configs/orbiter/calldata/index.d.ts.map +1 -0
- package/dist/configs/orbiter/calldata/index.js +59 -0
- package/dist/configs/orbiter/config.d.ts +4 -0
- package/dist/configs/orbiter/config.d.ts.map +1 -0
- package/dist/configs/orbiter/config.js +178 -0
- package/dist/configs/router/config.d.ts +4 -0
- package/dist/configs/router/config.d.ts.map +1 -0
- package/dist/configs/router/config.js +125 -0
- package/dist/configs/squid-v1/config.d.ts +4 -0
- package/dist/configs/squid-v1/config.d.ts.map +1 -0
- package/dist/configs/squid-v1/config.js +133 -0
- package/dist/configs/squid-v2/config.d.ts +4 -0
- package/dist/configs/squid-v2/config.d.ts.map +1 -0
- package/dist/configs/squid-v2/config.js +146 -0
- package/dist/configs/squid-v2/constants.d.ts +2 -0
- package/dist/configs/squid-v2/constants.d.ts.map +1 -0
- package/dist/configs/squid-v2/constants.js +1 -0
- package/dist/configs/stargate/abis/StargatePool.d.ts +41 -0
- package/dist/configs/stargate/abis/StargatePool.d.ts.map +1 -0
- package/dist/configs/stargate/abis/StargatePool.js +318 -0
- package/dist/configs/stargate/abis/TokenMessaging.d.ts +16 -0
- package/dist/configs/stargate/abis/TokenMessaging.d.ts.map +1 -0
- package/dist/configs/stargate/abis/TokenMessaging.js +21 -0
- package/dist/configs/stargate/calldata/constants.d.ts +249 -0
- package/dist/configs/stargate/calldata/constants.d.ts.map +1 -0
- package/dist/configs/stargate/calldata/constants.js +273 -0
- package/dist/configs/stargate/calldata/index.d.ts +6 -0
- package/dist/configs/stargate/calldata/index.d.ts.map +1 -0
- package/dist/configs/stargate/calldata/index.js +127 -0
- package/dist/configs/stargate/calldata/types.d.ts +51 -0
- package/dist/configs/stargate/calldata/types.d.ts.map +1 -0
- package/dist/configs/stargate/calldata/types.js +10 -0
- package/dist/configs/stargate/common/config.d.ts +88 -0
- package/dist/configs/stargate/common/config.d.ts.map +1 -0
- package/dist/configs/stargate/common/config.js +93 -0
- package/dist/configs/stargate/common/constants.d.ts +5 -0
- package/dist/configs/stargate/common/constants.d.ts.map +1 -0
- package/dist/configs/stargate/common/constants.js +7 -0
- package/dist/configs/stargate/common/index.d.ts +3 -0
- package/dist/configs/stargate/common/index.d.ts.map +1 -0
- package/dist/configs/stargate/common/index.js +2 -0
- package/dist/configs/stargate/configs/bus/config.d.ts +4 -0
- package/dist/configs/stargate/configs/bus/config.d.ts.map +1 -0
- package/dist/configs/stargate/configs/bus/config.js +41 -0
- package/dist/configs/stargate/configs/taxi/config.d.ts +4 -0
- package/dist/configs/stargate/configs/taxi/config.d.ts.map +1 -0
- package/dist/configs/stargate/configs/taxi/config.js +58 -0
- package/dist/configs/stargate/types/index.d.ts +12 -0
- package/dist/configs/stargate/types/index.d.ts.map +1 -0
- package/dist/configs/stargate/types/index.js +15 -0
- package/dist/configs/symbiosis/config.d.ts +4 -0
- package/dist/configs/symbiosis/config.d.ts.map +1 -0
- package/dist/configs/symbiosis/config.js +119 -0
- package/dist/configs/utils/index.d.ts +2 -0
- package/dist/configs/utils/index.d.ts.map +1 -0
- package/dist/configs/utils/index.js +3 -0
- package/dist/configs/xy/config.d.ts +4 -0
- package/dist/configs/xy/config.d.ts.map +1 -0
- package/dist/configs/xy/config.js +176 -0
- package/dist/configs/zenlink/calldata/aggregationRouterV2ABI.d.ts +49 -0
- package/dist/configs/zenlink/calldata/aggregationRouterV2ABI.d.ts.map +1 -0
- package/dist/configs/zenlink/calldata/aggregationRouterV2ABI.js +63 -0
- package/dist/configs/zenlink/calldata/index.d.ts +18 -0
- package/dist/configs/zenlink/calldata/index.d.ts.map +1 -0
- package/dist/configs/zenlink/calldata/index.js +35 -0
- package/dist/configs/zenlink/config.d.ts +4 -0
- package/dist/configs/zenlink/config.d.ts.map +1 -0
- package/dist/configs/zenlink/config.js +109 -0
- package/dist/configs/zenlink/errors.d.ts +15 -0
- package/dist/configs/zenlink/errors.d.ts.map +1 -0
- package/dist/configs/zenlink/errors.js +8 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/types/index.d.ts +31 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +52 -0
- package/dist/walletClient.d.ts +4433 -0
- package/dist/walletClient.d.ts.map +1 -0
- package/dist/walletClient.js +7 -0
- package/package.json +27 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare const ERROR_CODES: {
|
|
2
|
+
ERROR: {
|
|
3
|
+
code: string;
|
|
4
|
+
message: string;
|
|
5
|
+
};
|
|
6
|
+
NOT_SUPPORT: {
|
|
7
|
+
code: string;
|
|
8
|
+
message: string;
|
|
9
|
+
};
|
|
10
|
+
DEPOSIT_NOT_FOUND: {
|
|
11
|
+
code: string;
|
|
12
|
+
message: string;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/configs/axelar/errors.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW;;;;;;;;;;;;;CAOvB,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fetches Axelar gas estimation.
|
|
3
|
+
* Docs: https://docs.axelarscan.io/gmp#estimateGasFee
|
|
4
|
+
* @returns {Promise<object|undefined>} A promise that resolves to the configuration object, or undefined on error.
|
|
5
|
+
*/
|
|
6
|
+
export declare function fetchAxelarGasEstimation(params: AxelarGasEstimationParams): Promise<AxelarGasEstimation | undefined>;
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/configs/axelar/gasEstimation/index.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,yBAAyB,GAChC,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAoC1C"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
const AXELAR_GAS_API = 'https://api.axelarscan.io/gmp/estimateGasFee';
|
|
2
|
+
/**
|
|
3
|
+
* Fetches Axelar gas estimation.
|
|
4
|
+
* Docs: https://docs.axelarscan.io/gmp#estimateGasFee
|
|
5
|
+
* @returns {Promise<object|undefined>} A promise that resolves to the configuration object, or undefined on error.
|
|
6
|
+
*/
|
|
7
|
+
export async function fetchAxelarGasEstimation(params) {
|
|
8
|
+
try {
|
|
9
|
+
const requestData = {
|
|
10
|
+
sourceChain: params.sourceChain,
|
|
11
|
+
destinationChain: params.destinationChain,
|
|
12
|
+
gasMultiplier: params.gasMultiplier,
|
|
13
|
+
gasLimit: params.gasLimit.toString(),
|
|
14
|
+
sourceAddress: params.sourceAddress,
|
|
15
|
+
destinationContractAddress: params.destinationContractAddress,
|
|
16
|
+
amountInUnits: params.amountInUnits.toString(),
|
|
17
|
+
symbol: params.symbol,
|
|
18
|
+
sourceTokenAddress: '0x0000000000000000000000000000000000000000',
|
|
19
|
+
showDetailedFees: 'true',
|
|
20
|
+
};
|
|
21
|
+
const response = await fetch(AXELAR_GAS_API, {
|
|
22
|
+
method: 'POST',
|
|
23
|
+
headers: {
|
|
24
|
+
'Content-Type': 'application/json',
|
|
25
|
+
},
|
|
26
|
+
body: JSON.stringify(requestData),
|
|
27
|
+
});
|
|
28
|
+
if (!response.ok) {
|
|
29
|
+
throw new Error(`fetchAxelarGasEstimation: Network response was not ok. Status: ${response.status}`);
|
|
30
|
+
}
|
|
31
|
+
const data = (await response.json());
|
|
32
|
+
return data;
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
console.error('Failed to fetch Axelar gas estimation:', error);
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
interface AxelarGasEstimation {
|
|
2
|
+
totalFee: bigint;
|
|
3
|
+
isExpressSupported: boolean;
|
|
4
|
+
baseFee: bigint;
|
|
5
|
+
expressFee: bigint;
|
|
6
|
+
executionFee: bigint;
|
|
7
|
+
executionFeeWithMultiplier: bigint;
|
|
8
|
+
gasLimit: bigint;
|
|
9
|
+
gasLimitWithL1Fee: bigint;
|
|
10
|
+
gasMultiplier: number;
|
|
11
|
+
minGasPrice: bigint;
|
|
12
|
+
}
|
|
13
|
+
interface AxelarGasEstimationParams {
|
|
14
|
+
sourceChain: string;
|
|
15
|
+
destinationChain: string;
|
|
16
|
+
gasMultiplier: number | 'auto';
|
|
17
|
+
gasLimit: bigint;
|
|
18
|
+
symbol: string;
|
|
19
|
+
amountInUnits: bigint;
|
|
20
|
+
sourceAddress: string;
|
|
21
|
+
destinationContractAddress: string;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/configs/axelar/gasEstimation/types.ts"],"names":[],"mappings":"AAAA,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,kBAAkB,EAAE,OAAO,CAAA;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,0BAA0B,EAAE,MAAM,CAAA;IAClC,QAAQ,EAAE,MAAM,CAAA;IAChB,iBAAiB,EAAE,MAAM,CAAA;IACzB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,UAAU,yBAAyB;IACjC,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,EAAE,MAAM,CAAA;IACxB,aAAa,EAAE,MAAM,GAAG,MAAM,CAAA;IAC9B,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,0BAA0B,EAAE,MAAM,CAAA;CACnC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { AxelarRouteData } from '../calldata/types';
|
|
2
|
+
export declare function fetchAxelarRoute(fromChainId: string, fromTokenAddress: string, toChainId: string, toTokenAddress: string, amountIn: bigint, gasLimit?: bigint): Promise<AxelarRouteData>;
|
|
3
|
+
//# sourceMappingURL=fetchAxelarRoute.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetchAxelarRoute.d.ts","sourceRoot":"","sources":["../../../../src/configs/axelar/route/fetchAxelarRoute.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAiBnD,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,EACxB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,CAAC,CAoD1B"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { CrossChainBusinessException } from '@1delta/bridge-core';
|
|
2
|
+
import { getCachedAxelarConfig } from '../data/axelarConfig';
|
|
3
|
+
import { getSquidRouter } from '../data/squidChains';
|
|
4
|
+
import { ERROR_CODES } from '../errors';
|
|
5
|
+
import { fetchAxelarGasEstimation } from '../gasEstimation';
|
|
6
|
+
import { getAxelarTokenIdentifier } from './tokenIdentifier';
|
|
7
|
+
function isValidPath(fromAxlToken, toAxlToken) {
|
|
8
|
+
if (fromAxlToken.axlChainName === toAxlToken.axlChainName)
|
|
9
|
+
return false;
|
|
10
|
+
if (fromAxlToken.axlTokenSymbol !== toAxlToken.axlTokenSymbol)
|
|
11
|
+
return false;
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
export async function fetchAxelarRoute(fromChainId, fromTokenAddress, toChainId, toTokenAddress, amountIn, gasLimit) {
|
|
15
|
+
const promiseArray = [
|
|
16
|
+
getSquidRouter(fromChainId),
|
|
17
|
+
getSquidRouter(toChainId),
|
|
18
|
+
getCachedAxelarConfig(),
|
|
19
|
+
];
|
|
20
|
+
const [sourceAddress, destinationContractAddress, axelarConfig] = await Promise.all(promiseArray);
|
|
21
|
+
if (!sourceAddress || !destinationContractAddress) {
|
|
22
|
+
throw new CrossChainBusinessException(ERROR_CODES.NOT_SUPPORT);
|
|
23
|
+
}
|
|
24
|
+
const fromAxlToken = getAxelarTokenIdentifier(axelarConfig, fromChainId, fromTokenAddress);
|
|
25
|
+
const toAxlToken = getAxelarTokenIdentifier(axelarConfig, toChainId, toTokenAddress);
|
|
26
|
+
const isValidPair = isValidPath(fromAxlToken, toAxlToken);
|
|
27
|
+
if (!isValidPair)
|
|
28
|
+
throw new CrossChainBusinessException(ERROR_CODES.NOT_SUPPORT);
|
|
29
|
+
const fees = await fetchAxelarGasEstimation({
|
|
30
|
+
sourceChain: fromAxlToken.axlChainName,
|
|
31
|
+
destinationChain: toAxlToken.axlChainName,
|
|
32
|
+
symbol: fromAxlToken.axlTokenSymbol,
|
|
33
|
+
amountInUnits: amountIn,
|
|
34
|
+
sourceAddress,
|
|
35
|
+
destinationContractAddress,
|
|
36
|
+
gasLimit: gasLimit ?? 200000n,
|
|
37
|
+
gasMultiplier: 'auto',
|
|
38
|
+
});
|
|
39
|
+
if (!fees)
|
|
40
|
+
throw new CrossChainBusinessException(ERROR_CODES.NOT_SUPPORT);
|
|
41
|
+
return {
|
|
42
|
+
contractAddress: sourceAddress,
|
|
43
|
+
isExpressSupported: fees.isExpressSupported,
|
|
44
|
+
amount: amountIn,
|
|
45
|
+
totalFeeInNative: fees.totalFee,
|
|
46
|
+
bridgeTokenSymbol: fromAxlToken.axlTokenSymbol,
|
|
47
|
+
destinationChain: toAxlToken.axlChainName,
|
|
48
|
+
destinationAddress: destinationContractAddress,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/configs/axelar/route/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { AxelarConfig } from '../data/axelarConfig/types';
|
|
2
|
+
import { AxelarTokenIdentifier } from './types';
|
|
3
|
+
export declare function getAxelarTokenIdentifier(axelarConfig: AxelarConfig, chainId: string, tokenAddress: string): AxelarTokenIdentifier;
|
|
4
|
+
export declare function getAxelarTokenAddress(axelarConfig: AxelarConfig, chainId: string, axelarSymbol: string): string;
|
|
5
|
+
//# sourceMappingURL=tokenIdentifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenIdentifier.d.ts","sourceRoot":"","sources":["../../../../src/configs/axelar/route/tokenIdentifier.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAE/C,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,GACnB,qBAAqB,CA6BvB;AAED,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,GACnB,MAAM,CAoBR"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export function getAxelarTokenIdentifier(axelarConfig, chainId, tokenAddress) {
|
|
2
|
+
const { chains, assets } = axelarConfig;
|
|
3
|
+
const chain = Object.values(chains).find((chain) => chain.externalChainId === chainId);
|
|
4
|
+
if (!chain)
|
|
5
|
+
throw new Error('Unsupported chain');
|
|
6
|
+
const axlChainName = chain.id.toLowerCase();
|
|
7
|
+
const assetId = Object.entries(chain.assets).find(([_, _tokenAddress]) => _tokenAddress.toLowerCase() === tokenAddress.toLowerCase())?.[0];
|
|
8
|
+
if (!assetId)
|
|
9
|
+
throw new Error('Unsupported asset');
|
|
10
|
+
const assetObj = assets[assetId];
|
|
11
|
+
if (assetObj.type !== 'gateway')
|
|
12
|
+
throw new Error('Only gateway assets supported');
|
|
13
|
+
const axlTokenSymbol = assetObj.chains[axlChainName].symbol;
|
|
14
|
+
return {
|
|
15
|
+
axlChainName,
|
|
16
|
+
axlTokenSymbol,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export function getAxelarTokenAddress(axelarConfig, chainId, axelarSymbol) {
|
|
20
|
+
const { chains, assets } = axelarConfig;
|
|
21
|
+
const chain = Object.values(chains).find((chain) => chain.externalChainId === chainId);
|
|
22
|
+
if (!chain)
|
|
23
|
+
throw new Error('Unsupported chain');
|
|
24
|
+
const axlChainName = chain.id.toLowerCase();
|
|
25
|
+
const assetObj = assets[axelarSymbol];
|
|
26
|
+
if (!assetObj)
|
|
27
|
+
throw new Error('Unsupported asset');
|
|
28
|
+
if (assetObj.type !== 'gateway')
|
|
29
|
+
throw new Error('Only gateway assets supported');
|
|
30
|
+
const axlTokenSymbol = assetObj.chains[axlChainName].tokenAddress;
|
|
31
|
+
return axlTokenSymbol;
|
|
32
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/configs/axelar/route/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,MAAM,CAAA;CACvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { CrossChainConfig } from '@1delta/bridge-core';
|
|
2
|
+
/**
|
|
3
|
+
* curl -X 'GET' \
|
|
4
|
+
'https://bs-router-v3.chainservice.io/routeAndSwap?fromChainId=56&toChainId=22776&amount=1&tokenInAddress=0x55d398326f99059fF775485246999027B3197955&tokenOutAddress=0x0000000000000000000000000000000000000000&type=exactIn&slippage=100&entrance=Butter%2B&from=0x2D4C407BBe49438ED859fe965b140dcF1aaB71a9&receiver=0x2D4C407BBe49438ED859fe965b140dcF1aaB71a9' \
|
|
5
|
+
-H 'accept: application/json'
|
|
6
|
+
*/
|
|
7
|
+
export declare const butterConfig: CrossChainConfig;
|
|
8
|
+
export default butterConfig;
|
|
9
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/configs/butter/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,gBAAgB,EAGjB,MAAM,qBAAqB,CAAA;AAoE5B;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,gBAyJ1B,CAAA;AAED,eAAe,YAAY,CAAA"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { CrossChainBusinessException, } from '@1delta/bridge-core';
|
|
2
|
+
import axios from 'axios';
|
|
3
|
+
import { ceil, flatten } from 'lodash';
|
|
4
|
+
import { parseUnits } from 'viem';
|
|
5
|
+
import { Bridge } from '../../types';
|
|
6
|
+
import { bridgeIcon } from '../utils';
|
|
7
|
+
const serverHost = 'https://bs-router-v3.chainservice.io';
|
|
8
|
+
const tokenServerHost = 'https://bs-tokens-api.chainservice.io';
|
|
9
|
+
const bridgeServerHost = 'https://bs-app-api.chainservice.io';
|
|
10
|
+
const NAME = Bridge.BUTTER;
|
|
11
|
+
const dodoNativeAddress = '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE';
|
|
12
|
+
const butterNativeAddress = '0x0000000000000000000000000000000000000000';
|
|
13
|
+
const MIN_SLIPPAGE = 1.5;
|
|
14
|
+
const errorCodes = {
|
|
15
|
+
ERROR: { code: 'ERROR', message: 'unknown error' },
|
|
16
|
+
NOT_SUPPORT: { code: 'NOT_SUPPORT', message: 'NOT SUPPORT' },
|
|
17
|
+
NOT_ROUTE: { code: 'NOT_ROUTE', message: 'NOT ROUTE' },
|
|
18
|
+
};
|
|
19
|
+
async function getTokenList(network, page, size) {
|
|
20
|
+
const res = await axios.get(`${tokenServerHost}/api/queryTokenList`, {
|
|
21
|
+
params: { network, page, size },
|
|
22
|
+
headers: { 'Content-Type': 'application/json' },
|
|
23
|
+
});
|
|
24
|
+
if (res.status !== 200 || res.data.code !== 200) {
|
|
25
|
+
throw new CrossChainBusinessException(errorCodes.ERROR);
|
|
26
|
+
}
|
|
27
|
+
return res.data.data;
|
|
28
|
+
}
|
|
29
|
+
async function getTokenListAll(network) {
|
|
30
|
+
const size = 1000;
|
|
31
|
+
const tokens = [];
|
|
32
|
+
const tokenlistResult = await getTokenList(network, 1, size);
|
|
33
|
+
const tasks = [];
|
|
34
|
+
const count = ceil(tokenlistResult.count / size);
|
|
35
|
+
for (let i = 2; i <= count; i++) {
|
|
36
|
+
tasks.push(getTokenList(network, i, size));
|
|
37
|
+
}
|
|
38
|
+
const tokenlistResults = await Promise.all(tasks);
|
|
39
|
+
for (const tokenlists of [tokenlistResult, ...tokenlistResults]) {
|
|
40
|
+
for (const item of tokenlists.results) {
|
|
41
|
+
tokens.push({
|
|
42
|
+
chainId: item.chainId,
|
|
43
|
+
address: item.address.toLowerCase() ===
|
|
44
|
+
'0x0000000000000000000000000000000000000000'
|
|
45
|
+
? dodoNativeAddress
|
|
46
|
+
: item.address,
|
|
47
|
+
name: item.name,
|
|
48
|
+
symbol: item.symbol,
|
|
49
|
+
decimals: item.decimals,
|
|
50
|
+
logoImg: item.image,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return tokens;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* curl -X 'GET' \
|
|
58
|
+
'https://bs-router-v3.chainservice.io/routeAndSwap?fromChainId=56&toChainId=22776&amount=1&tokenInAddress=0x55d398326f99059fF775485246999027B3197955&tokenOutAddress=0x0000000000000000000000000000000000000000&type=exactIn&slippage=100&entrance=Butter%2B&from=0x2D4C407BBe49438ED859fe965b140dcF1aaB71a9&receiver=0x2D4C407BBe49438ED859fe965b140dcF1aaB71a9' \
|
|
59
|
+
-H 'accept: application/json'
|
|
60
|
+
*/
|
|
61
|
+
export const butterConfig = {
|
|
62
|
+
name: NAME,
|
|
63
|
+
icon: {
|
|
64
|
+
light: bridgeIcon(NAME),
|
|
65
|
+
dark: bridgeIcon(NAME),
|
|
66
|
+
},
|
|
67
|
+
apiInterface: {
|
|
68
|
+
route: {
|
|
69
|
+
url: `${serverHost}/route`,
|
|
70
|
+
method: 'get',
|
|
71
|
+
requestAfter: (res) => {
|
|
72
|
+
if (res.errno !== 0)
|
|
73
|
+
throw new CrossChainBusinessException(errorCodes.ERROR);
|
|
74
|
+
if (res.data.length < 1)
|
|
75
|
+
throw new CrossChainBusinessException(errorCodes.NOT_ROUTE);
|
|
76
|
+
return res.data[0];
|
|
77
|
+
},
|
|
78
|
+
requestMapping: {
|
|
79
|
+
fromChainId: 'fromChainId',
|
|
80
|
+
tokenInAddress: {
|
|
81
|
+
format: (route) => {
|
|
82
|
+
return route.fromTokenAddress === dodoNativeAddress
|
|
83
|
+
? butterNativeAddress
|
|
84
|
+
: route.fromTokenAddress;
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
amount: {
|
|
88
|
+
format: (params) => (BigInt(params.fromAmount) /
|
|
89
|
+
10n ** BigInt(params.fromTokenDecimals)).toString(),
|
|
90
|
+
},
|
|
91
|
+
toChainId: 'toChainId',
|
|
92
|
+
tokenOutAddress: {
|
|
93
|
+
format: (route) => {
|
|
94
|
+
return route.toTokenAddress === dodoNativeAddress
|
|
95
|
+
? butterNativeAddress
|
|
96
|
+
: route.toTokenAddress;
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
type: 'exactIn', //exactIn, exactOut
|
|
100
|
+
slippage: {
|
|
101
|
+
format: (params) => params.slippage < MIN_SLIPPAGE
|
|
102
|
+
? MIN_SLIPPAGE * 1000
|
|
103
|
+
: params.slippage * 1000,
|
|
104
|
+
},
|
|
105
|
+
entrance: 'Butter+', //eg: Butter+
|
|
106
|
+
},
|
|
107
|
+
responseMapping: {
|
|
108
|
+
name: NAME,
|
|
109
|
+
// Call the swap API to exchange and cross assets and retrieve the deposit contract information
|
|
110
|
+
depositContract: 'contract',
|
|
111
|
+
toAmount: {
|
|
112
|
+
format: (route, { crossChainParamsData }) => parseUnits(route.dstChain.totalAmountOut, crossChainParamsData.toTokenDecimals),
|
|
113
|
+
},
|
|
114
|
+
// fees are already included in the quote
|
|
115
|
+
fee: {},
|
|
116
|
+
estimatedDuration: 'timeEstimated',
|
|
117
|
+
interfaceParamData: {
|
|
118
|
+
hash: 'hash',
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
},
|
|
122
|
+
buildTransactionData: {
|
|
123
|
+
requestMapping: {
|
|
124
|
+
hash: {
|
|
125
|
+
format: (_, { interfaceParamData }) => interfaceParamData.hash,
|
|
126
|
+
}, // interfaceParamData.hash
|
|
127
|
+
slippage: { format: (params) => params.slippage * 10000 },
|
|
128
|
+
from: 'fromAddress', // 源链上的发送者地址
|
|
129
|
+
receiver: 'toAddress', // 目标链上的接收者地址
|
|
130
|
+
},
|
|
131
|
+
url: `${serverHost}/swap`,
|
|
132
|
+
method: 'get',
|
|
133
|
+
requestAfter: (res) => {
|
|
134
|
+
if (res.errno !== 0 || res.data.length < 1)
|
|
135
|
+
throw new CrossChainBusinessException(errorCodes.ERROR);
|
|
136
|
+
return res.data[0];
|
|
137
|
+
},
|
|
138
|
+
responseMapping: {
|
|
139
|
+
data: 'data',
|
|
140
|
+
value: 'value',
|
|
141
|
+
to: 'to',
|
|
142
|
+
},
|
|
143
|
+
},
|
|
144
|
+
status: {
|
|
145
|
+
url: `${bridgeServerHost}/api/queryBridgeInfoBySourceHash`,
|
|
146
|
+
method: 'get',
|
|
147
|
+
requestMapping: {
|
|
148
|
+
hash: 'fromHash',
|
|
149
|
+
},
|
|
150
|
+
responseMapping: {
|
|
151
|
+
toHash: 'info.toHash',
|
|
152
|
+
statusInfo: {
|
|
153
|
+
format: (resResult) => {
|
|
154
|
+
const data = {
|
|
155
|
+
status: 'PENDING',
|
|
156
|
+
bridgeResponseResult: resResult,
|
|
157
|
+
};
|
|
158
|
+
if (resResult.info.state === 1) {
|
|
159
|
+
data.status = 'DONE';
|
|
160
|
+
}
|
|
161
|
+
else if (resResult.info.state === 0) {
|
|
162
|
+
data.status = 'PENDING';
|
|
163
|
+
}
|
|
164
|
+
return data;
|
|
165
|
+
},
|
|
166
|
+
},
|
|
167
|
+
}, // 0: crossing, 1: completed
|
|
168
|
+
requestAfter: (res) => {
|
|
169
|
+
// sometimes butter returns empty info and just a message, if it is success, return pending
|
|
170
|
+
if (!res?.data?.info && res?.message === 'success')
|
|
171
|
+
return { info: { state: 0 } };
|
|
172
|
+
return res.data;
|
|
173
|
+
},
|
|
174
|
+
},
|
|
175
|
+
tokenList: {
|
|
176
|
+
url: `${tokenServerHost}/api/queryChainList`,
|
|
177
|
+
method: 'get',
|
|
178
|
+
requestMapping: {},
|
|
179
|
+
requestAfter: async (res) => {
|
|
180
|
+
if (res.code !== 200)
|
|
181
|
+
throw new CrossChainBusinessException(errorCodes.ERROR);
|
|
182
|
+
const tasks = [];
|
|
183
|
+
for (const item of res.data.chains) {
|
|
184
|
+
tasks.push(getTokenListAll(item.key));
|
|
185
|
+
}
|
|
186
|
+
const tokenAlls = await Promise.all(tasks);
|
|
187
|
+
return flatten(tokenAlls);
|
|
188
|
+
},
|
|
189
|
+
responseMapping: {
|
|
190
|
+
tokens: {
|
|
191
|
+
format: (res) => {
|
|
192
|
+
return res.map((item) => ({
|
|
193
|
+
chainId: item.chainId,
|
|
194
|
+
address: item.address,
|
|
195
|
+
decimals: item.decimals,
|
|
196
|
+
logoImg: item.logoImg,
|
|
197
|
+
name: item.name,
|
|
198
|
+
symbol: item.symbol,
|
|
199
|
+
}));
|
|
200
|
+
},
|
|
201
|
+
},
|
|
202
|
+
},
|
|
203
|
+
},
|
|
204
|
+
},
|
|
205
|
+
errorCodes,
|
|
206
|
+
};
|
|
207
|
+
export default butterConfig;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/configs/cowswap/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,gBAAgB,EAGjB,MAAM,qBAAqB,CAAA;AAc5B,eAAO,MAAM,aAAa,EAAE,gBA0I3B,CAAA;AAED,eAAe,aAAa,CAAA"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { CrossChainBusinessException, } from '@1delta/bridge-core';
|
|
2
|
+
import { NATIVE_PLACEHOLDER } from '@1delta/lib-utils';
|
|
3
|
+
import { OrderStatus } from '@cowprotocol/cow-sdk';
|
|
4
|
+
import { Bridge } from '../../types';
|
|
5
|
+
import { bridgeIcon } from '../utils';
|
|
6
|
+
import { ERROR_CODES } from './errors';
|
|
7
|
+
import { getCowSwapReadonlyQuote } from './swap/quote';
|
|
8
|
+
import { getCowSwapQuote } from './swap/route';
|
|
9
|
+
import { getOrderStatus } from './track';
|
|
10
|
+
import { getCowSwapSlippageForNative } from './utils/getCowSwapSlippage';
|
|
11
|
+
const NAME = Bridge.Cowswap;
|
|
12
|
+
export const cowswapConfig = {
|
|
13
|
+
name: NAME,
|
|
14
|
+
icon: {
|
|
15
|
+
light: bridgeIcon(NAME),
|
|
16
|
+
dark: bridgeIcon(NAME),
|
|
17
|
+
},
|
|
18
|
+
apiInterface: {
|
|
19
|
+
quote: {
|
|
20
|
+
execute: async (crossChainParamsData) => {
|
|
21
|
+
const { fromTokenAddress, fromChainId, toTokenAddress, toChainId, fromAmount, } = crossChainParamsData;
|
|
22
|
+
if (fromChainId === toChainId) {
|
|
23
|
+
const quoteAndContractAddress = await getCowSwapReadonlyQuote(fromChainId, fromTokenAddress, toTokenAddress, fromAmount);
|
|
24
|
+
if (!quoteAndContractAddress)
|
|
25
|
+
throw new CrossChainBusinessException(ERROR_CODES.NOT_SUPPORT);
|
|
26
|
+
const { quote, contractAddress } = quoteAndContractAddress;
|
|
27
|
+
return { ...quote, contractAddress, estimatedDuration: 0 };
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
throw new CrossChainBusinessException(ERROR_CODES.NOT_SUPPORT);
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
responseMapping: {
|
|
34
|
+
name: 'aggregator',
|
|
35
|
+
toAmount: 'quote.buyAmount',
|
|
36
|
+
fee: {},
|
|
37
|
+
estimatedDuration: 'estimatedDuration',
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
route: {
|
|
41
|
+
execute: async (crossChainParamsData) => {
|
|
42
|
+
const { fromTokenAddress, fromChainId, fromTokenDecimals, toTokenAddress, toChainId, toTokenDecimals, fromAmount, fromAddress, toAddress, slippage, } = crossChainParamsData;
|
|
43
|
+
if (fromChainId === toChainId) {
|
|
44
|
+
const quoteAndContractAddress = await getCowSwapQuote(fromChainId, fromTokenAddress, fromTokenDecimals, toTokenAddress, toTokenDecimals, fromAmount, fromAddress, toAddress, slippage);
|
|
45
|
+
if (!quoteAndContractAddress)
|
|
46
|
+
throw new CrossChainBusinessException(ERROR_CODES.NOT_SUPPORT);
|
|
47
|
+
// Check for min slippage if native input
|
|
48
|
+
if (fromTokenAddress === NATIVE_PLACEHOLDER) {
|
|
49
|
+
const minSlippageForNative = getCowSwapSlippageForNative(fromChainId);
|
|
50
|
+
if (minSlippageForNative > slippage)
|
|
51
|
+
throw new CrossChainBusinessException(ERROR_CODES.SLIPPAGE_TOO_LOW);
|
|
52
|
+
}
|
|
53
|
+
const { quote, contractAddress } = quoteAndContractAddress;
|
|
54
|
+
return { ...quote, contractAddress, estimatedDuration: 0 };
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
throw new CrossChainBusinessException(ERROR_CODES.NOT_SUPPORT);
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
responseMapping: {
|
|
61
|
+
name: 'aggregator',
|
|
62
|
+
depositContract: 'contractAddress',
|
|
63
|
+
toAmount: 'quoteResults.amountsAndCosts.beforeNetworkCosts.buyAmount',
|
|
64
|
+
fee: {},
|
|
65
|
+
estimatedDuration: 'estimatedDuration',
|
|
66
|
+
orderData: {
|
|
67
|
+
broadcastIntent: {
|
|
68
|
+
format: (result) => result?.postSwapOrderFromQuote,
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
status: {
|
|
74
|
+
execute: async (crossChainParamsData) => {
|
|
75
|
+
const { fromChainId, orderId } = crossChainParamsData;
|
|
76
|
+
const status = await getOrderStatus(fromChainId, orderId);
|
|
77
|
+
return { ...status };
|
|
78
|
+
},
|
|
79
|
+
responseMapping: {
|
|
80
|
+
fromHash: 'hash',
|
|
81
|
+
statusInfo: {
|
|
82
|
+
format: (resResult) => {
|
|
83
|
+
const status = resResult.status;
|
|
84
|
+
const data = {
|
|
85
|
+
status: 'PENDING',
|
|
86
|
+
message: 'Pending',
|
|
87
|
+
bridgeResponseResult: resResult,
|
|
88
|
+
};
|
|
89
|
+
if (status === OrderStatus.FULFILLED) {
|
|
90
|
+
data.status = 'DONE';
|
|
91
|
+
data.message = 'Executed successfully';
|
|
92
|
+
}
|
|
93
|
+
else if (status === OrderStatus.EXPIRED ||
|
|
94
|
+
status === OrderStatus.CANCELLED) {
|
|
95
|
+
data.status = 'FAILED';
|
|
96
|
+
data.message = 'Transaction failed';
|
|
97
|
+
}
|
|
98
|
+
return data;
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
errorCodes: ERROR_CODES,
|
|
105
|
+
};
|
|
106
|
+
export default cowswapConfig;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export declare const ERROR_CODES: {
|
|
2
|
+
ERROR: {
|
|
3
|
+
code: string;
|
|
4
|
+
message: string;
|
|
5
|
+
};
|
|
6
|
+
NOT_SUPPORT: {
|
|
7
|
+
code: string;
|
|
8
|
+
message: string;
|
|
9
|
+
};
|
|
10
|
+
DEPOSIT_NOT_FOUND: {
|
|
11
|
+
code: string;
|
|
12
|
+
message: string;
|
|
13
|
+
};
|
|
14
|
+
SLIPPAGE_TOO_LOW: {
|
|
15
|
+
code: string;
|
|
16
|
+
message: string;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/configs/cowswap/errors.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;CAWvB,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export const ERROR_CODES = {
|
|
2
|
+
ERROR: { code: 'ERROR', message: 'unknown error' },
|
|
3
|
+
NOT_SUPPORT: { code: 'NOT_SUPPORT', message: 'NOT SUPPORT' },
|
|
4
|
+
DEPOSIT_NOT_FOUND: {
|
|
5
|
+
code: 'DEPOSIT_NOT_FOUND',
|
|
6
|
+
message: 'deposit not found',
|
|
7
|
+
},
|
|
8
|
+
SLIPPAGE_TOO_LOW: {
|
|
9
|
+
code: 'SLIPPAGE_TOO_LOW',
|
|
10
|
+
message: 'slippage too low',
|
|
11
|
+
},
|
|
12
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function getCowSwapReadonlyQuote(fromChainId: string, fromTokenAddress: string, toTokenAddress: string, amountIn: string): Promise<{
|
|
2
|
+
quote: import("@cowprotocol/cow-sdk").OrderQuoteResponse;
|
|
3
|
+
contractAddress: undefined;
|
|
4
|
+
} | undefined>;
|
|
5
|
+
//# sourceMappingURL=quote.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quote.d.ts","sourceRoot":"","sources":["../../../../src/configs/cowswap/swap/quote.ts"],"names":[],"mappings":"AAMA,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,EACxB,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM;;;eAkCjB"}
|