@1delta/trade-sdk 0.1.7 → 0.1.9
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/README.md +7 -4
- package/dist/aggregator/fetchAggregatorTrade.d.ts.map +1 -1
- package/dist/aggregator/fetchAggregatorTrade.js +40 -7
- package/dist/composedTrades/across/acrossWithSwap.d.ts +1 -1
- package/dist/composedTrades/across/acrossWithSwap.d.ts.map +1 -1
- package/dist/composedTrades/across/acrossWithSwap.js +2 -2
- package/dist/composedTrades/across/acrossWithSwaps.d.ts +2 -2
- package/dist/composedTrades/across/acrossWithSwaps.d.ts.map +1 -1
- package/dist/composedTrades/across/acrossWithSwaps.js +5 -3
- package/dist/composedTrades/axelar/axelarWithSwap.d.ts +3 -3
- package/dist/composedTrades/axelar/axelarWithSwap.d.ts.map +1 -1
- package/dist/composedTrades/axelar/axelarWithSwap.js +11 -11
- package/dist/composedTrades/axelar/axelarWithSwaps.d.ts +2 -2
- package/dist/composedTrades/axelar/axelarWithSwaps.d.ts.map +1 -1
- package/dist/composedTrades/axelar/axelarWithSwaps.js +6 -4
- package/dist/composedTrades/utils/createSwapAndBridgeCalldata.d.ts +2 -2
- package/dist/composedTrades/utils/createSwapAndBridgeCalldata.d.ts.map +1 -1
- package/dist/composedTrades/utils/createSwapAndBridgeCalldata.js +56 -12
- package/dist/composedTrades/utils/fetchBridgeAndGasTrade.d.ts +2 -2
- package/dist/composedTrades/utils/fetchBridgeAndGasTrade.d.ts.map +1 -1
- package/dist/composedTrades/utils/fetchBridgeAndGasTrade.js +3 -3
- package/dist/composedTrades/utils/multichainUtils.d.ts +2 -2
- package/dist/composedTrades/utils/multichainUtils.d.ts.map +1 -1
- package/dist/composedTrades/utils/multichainUtils.js +3 -17
- package/dist/core.d.ts +6 -2
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +29 -3
- package/dist/deltaCall/createDeltaCallsCalldata.d.ts.map +1 -1
- package/dist/deltaCall/createDeltaCallsCalldata.js +37 -9
- package/dist/deltaCall/toComposerCall.d.ts.map +1 -1
- package/dist/deltaCall/toComposerCall.js +69 -5
- package/dist/deltaCall/toForwarderCall.d.ts +1 -1
- package/dist/deltaCall/toForwarderCall.d.ts.map +1 -1
- package/dist/deltaCall/toForwarderCall.js +7 -2
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/initialize.d.ts +14 -9
- package/dist/initialize.d.ts.map +1 -1
- package/dist/initialize.js +22 -18
- package/dist/registry/config.d.ts +7 -0
- package/dist/registry/config.d.ts.map +1 -0
- package/dist/registry/config.js +19 -0
- package/dist/registry/currency.d.ts +4 -0
- package/dist/registry/currency.d.ts.map +1 -0
- package/dist/registry/currency.js +19 -0
- package/dist/registry/index.d.ts +3 -6
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +3 -19
- package/dist/registry/price.d.ts +4 -0
- package/dist/registry/price.d.ts.map +1 -0
- package/dist/registry/price.js +23 -0
- package/dist/types/bridgeInput.d.ts +12 -9
- package/dist/types/bridgeInput.d.ts.map +1 -1
- package/dist/utils/utils.d.ts +2 -27
- package/dist/utils/utils.d.ts.map +1 -1
- package/dist/utils/utils.js +13 -27
- package/package.json +9 -8
package/README.md
CHANGED
|
@@ -18,15 +18,18 @@ pnpm add @1delta/trade-sdk
|
|
|
18
18
|
## Basic Usage
|
|
19
19
|
|
|
20
20
|
```typescript
|
|
21
|
-
import { initialize, fetchBridgeTrade, fetchAggregatorTrade, Bridge } from '@1delta/trade-sdk';
|
|
21
|
+
import { initialize, fetchBridgeTrade, fetchAggregatorTrade, Bridge, PriceGetter, CurrencyGetter } from '@1delta/trade-sdk';
|
|
22
22
|
import { WalletClient } from 'viem';
|
|
23
23
|
|
|
24
24
|
// Initialize the SDK
|
|
25
|
+
const getPrice: PriceGetter = ...;
|
|
26
|
+
|
|
27
|
+
const getCurrency: CurrencyGetter = ...;
|
|
28
|
+
|
|
25
29
|
await initialize({
|
|
26
30
|
isProductionEnv: true,
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
load1deltaConfigs: true
|
|
31
|
+
priceGetter: getPrice,
|
|
32
|
+
currencyGetter: getCurrency,
|
|
30
33
|
});
|
|
31
34
|
|
|
32
35
|
// Set up wallet client
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchAggregatorTrade.d.ts","sourceRoot":"","sources":["../../src/aggregator/fetchAggregatorTrade.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fetchAggregatorTrade.d.ts","sourceRoot":"","sources":["../../src/aggregator/fetchAggregatorTrade.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,kBAAkB,EAIlB,YAAY,EACZ,aAAa,EAEd,MAAM,mBAAmB,CAAA;AAe1B,eAAO,MAAM,oBAAoB,GAC/B,YAAY,MAAM,EAClB,OAAO,kBAAkB,GAAG,aAAa,EACzC,aAAa,eAAe,KAC3B,OAAO,CAAC,YAAY,GAAG,SAAS,CAelC,CAAA"}
|
|
@@ -1,10 +1,18 @@
|
|
|
1
|
-
import { fetchAggregatorTrade as fetchAggregatorTradeWithoutConfigs, } from '@1delta/aggregators';
|
|
1
|
+
import { fetchAggregatorTrade as fetchAggregatorTradeWithoutConfigs, TradeAggregator, } from '@1delta/aggregators';
|
|
2
2
|
import { getSwapAggregators } from '@1delta/bridge-configs';
|
|
3
|
-
import {
|
|
3
|
+
import { getAllConfigs } from '@1delta/bridge-core';
|
|
4
|
+
import { ChainType, ChainUtils, TradeType, } from '@1delta/lib-utils';
|
|
4
5
|
import { fetchBridgeTrade } from '../bridge/fetchBridgeTrade';
|
|
5
6
|
import { createSwapAndBridgeCalldata, requireDeltaContracts, } from '../composedTrades/utils';
|
|
7
|
+
import { getPriceGetter } from '../registry';
|
|
8
|
+
import { reverseQuote } from '../utils';
|
|
9
|
+
const SUPPORT_EXACT_OUT = [
|
|
10
|
+
TradeAggregator.NativeWrapper,
|
|
11
|
+
TradeAggregator.ERC20Wrapper,
|
|
12
|
+
];
|
|
6
13
|
export const fetchAggregatorTrade = async (aggregator, input, controller) => {
|
|
7
|
-
const needsAdditionalCalls = !!input.
|
|
14
|
+
const needsAdditionalCalls = (!!input.postCalls && input.postCalls.length > 0) ||
|
|
15
|
+
(!!input.preCalls && input.preCalls.length > 0);
|
|
8
16
|
if (input.disableComposer) {
|
|
9
17
|
if (needsAdditionalCalls)
|
|
10
18
|
throw new Error(`Aggregator ${aggregator.toString()} does not support additional calls without composer`);
|
|
@@ -24,7 +32,7 @@ const fetchAggregatorWithComposerTrade = async (aggregator, input, controller) =
|
|
|
24
32
|
throw new Error(`Aggregator ${aggregator.toString()} does not support composer`);
|
|
25
33
|
const assemble = async () => {
|
|
26
34
|
try {
|
|
27
|
-
const chainId =
|
|
35
|
+
const chainId = trade.inputAmount.currency.chainId;
|
|
28
36
|
if (ChainUtils.isEvm(chainId)) {
|
|
29
37
|
const fundsToPull = [
|
|
30
38
|
{
|
|
@@ -32,7 +40,7 @@ const fetchAggregatorWithComposerTrade = async (aggregator, input, controller) =
|
|
|
32
40
|
amount: trade.inputAmount.amount,
|
|
33
41
|
},
|
|
34
42
|
];
|
|
35
|
-
const tx = await createSwapAndBridgeCalldata([trade], input.caller, input.receiver, true, fundsToPull, false, true, input.
|
|
43
|
+
const tx = await createSwapAndBridgeCalldata([trade], input.caller, input.receiver, true, fundsToPull, false, true, input.preCalls, input.postCalls);
|
|
36
44
|
return {
|
|
37
45
|
[ChainType.EVM]: {
|
|
38
46
|
calldata: tx.calldata,
|
|
@@ -56,10 +64,35 @@ const fetchAggregatorWithComposerTrade = async (aggregator, input, controller) =
|
|
|
56
64
|
};
|
|
57
65
|
};
|
|
58
66
|
const fetchSwapTrade = async (aggregator, input, controller) => {
|
|
59
|
-
|
|
67
|
+
const reverseQuoteNeeded = input.tradeType === TradeType.EXACT_OUTPUT &&
|
|
68
|
+
!SUPPORT_EXACT_OUT.includes(aggregator);
|
|
69
|
+
if (reverseQuoteNeeded) {
|
|
70
|
+
const swapAmount = reverseQuote(input.fromCurrency, input.toCurrency, input.swapAmount).amount.toString();
|
|
71
|
+
return fetchExactInSwapTrade(aggregator, {
|
|
72
|
+
...input,
|
|
73
|
+
tradeType: TradeType.EXACT_INPUT,
|
|
74
|
+
swapAmount,
|
|
75
|
+
}, controller);
|
|
76
|
+
}
|
|
77
|
+
return fetchExactInSwapTrade(aggregator, input, controller);
|
|
78
|
+
};
|
|
79
|
+
const fetchExactInSwapTrade = async (aggregator, input, controller) => {
|
|
80
|
+
if (getSwapAggregators().includes(aggregator) ||
|
|
81
|
+
getAllConfigs().some((config) => config.name === aggregator)) {
|
|
60
82
|
return await fetchBridgeTrade(aggregator, { ...input, order: 'CHEAPEST' }, controller);
|
|
61
83
|
}
|
|
62
84
|
else {
|
|
63
|
-
|
|
85
|
+
const getPrice = getPriceGetter();
|
|
86
|
+
const [priceIn, priceOut] = getPrice([
|
|
87
|
+
{
|
|
88
|
+
chainId: input.fromCurrency.chainId,
|
|
89
|
+
tokenAddress: input.fromCurrency.address,
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
chainId: input.toCurrency.chainId,
|
|
93
|
+
tokenAddress: input.toCurrency.address,
|
|
94
|
+
},
|
|
95
|
+
]);
|
|
96
|
+
return await fetchAggregatorTradeWithoutConfigs(aggregator, { ...input, priceIn, priceOut }, controller);
|
|
64
97
|
}
|
|
65
98
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { GenericTrade, RawCurrency } from '@1delta/lib-utils';
|
|
2
2
|
import { AcrossBaseInput } from '../../types';
|
|
3
|
-
export interface AcrossWithSwapInput extends AcrossBaseInput {
|
|
3
|
+
export interface AcrossWithSwapInput extends Omit<AcrossBaseInput, 'preCalls'> {
|
|
4
4
|
bridgeToCurrency: RawCurrency | undefined;
|
|
5
5
|
}
|
|
6
6
|
export declare const fetchAcrossTradeWithSwap: (input: AcrossWithSwapInput, controller?: AbortController) => Promise<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acrossWithSwap.d.ts","sourceRoot":"","sources":["../../../src/composedTrades/across/acrossWithSwap.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,YAAY,EAKZ,WAAW,EAEZ,MAAM,mBAAmB,CAAA;AAG1B,OAAO,EAAE,eAAe,EAAmB,MAAM,aAAa,CAAA;AAO9D,MAAM,WAAW,mBAAoB,SAAQ,eAAe;
|
|
1
|
+
{"version":3,"file":"acrossWithSwap.d.ts","sourceRoot":"","sources":["../../../src/composedTrades/across/acrossWithSwap.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,YAAY,EAKZ,WAAW,EAEZ,MAAM,mBAAmB,CAAA;AAG1B,OAAO,EAAE,eAAe,EAAmB,MAAM,aAAa,CAAA;AAO9D,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC;IAC5E,gBAAgB,EAAE,WAAW,GAAG,SAAS,CAAA;CAC1C;AAED,eAAO,MAAM,wBAAwB,GACnC,OAAO,mBAAmB,EAC1B,aAAa,eAAe,KAC3B,OAAO,CAAC;IAAE,KAAK,EAAE,YAAY,GAAG,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAgD/D,CAAA;AAED,eAAe,wBAAwB,CAAA"}
|
|
@@ -8,7 +8,7 @@ export const fetchAcrossTradeWithSwap = async (input, controller) => {
|
|
|
8
8
|
throw new Error('BridgeToCurrency undefined');
|
|
9
9
|
const toChainId = getSafeChainId(input.toCurrency?.chainId);
|
|
10
10
|
const toTokenIsBridgeToken = CurrencyHandler.equal(input.bridgeToCurrency, CurrencyHandler.wrapped(input.toCurrency));
|
|
11
|
-
const needDestinationCalls = (input.
|
|
11
|
+
const needDestinationCalls = (input.postCalls?.length ?? 0) > 0 || !toTokenIsBridgeToken;
|
|
12
12
|
if (!needDestinationCalls) {
|
|
13
13
|
const toTokenIsWNative = CurrencyHandler.isWNative(input.toCurrency);
|
|
14
14
|
if (toTokenIsWNative) {
|
|
@@ -66,7 +66,7 @@ const fetchAcrossTradeWithDestinationCalls = async (input, controller) => {
|
|
|
66
66
|
if (!input.bridgeToCurrency)
|
|
67
67
|
throw new Error('BridgeToCurrency undefined');
|
|
68
68
|
const toChainId = input.toCurrency.chainId;
|
|
69
|
-
const additionalCalls = input.
|
|
69
|
+
const additionalCalls = input.postCalls ?? [];
|
|
70
70
|
const needsSwap = !CurrencyHandler.equal(input.bridgeToCurrency, input.toCurrency);
|
|
71
71
|
const fetchSwapAndMessage = async (amount) => {
|
|
72
72
|
if (needsSwap) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { GenericTrade
|
|
1
|
+
import { GenericTrade } from '@1delta/lib-utils';
|
|
2
2
|
import { AcrossBaseInput } from '../../types';
|
|
3
|
-
export declare const fetchAcrossTradeWithSwaps: (input: AcrossBaseInput,
|
|
3
|
+
export declare const fetchAcrossTradeWithSwaps: (input: AcrossBaseInput, controller?: AbortController) => Promise<GenericTrade | undefined>;
|
|
4
4
|
export default fetchAcrossTradeWithSwaps;
|
|
5
5
|
//# sourceMappingURL=acrossWithSwaps.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acrossWithSwaps.d.ts","sourceRoot":"","sources":["../../../src/composedTrades/across/acrossWithSwaps.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,YAAY,
|
|
1
|
+
{"version":3,"file":"acrossWithSwaps.d.ts","sourceRoot":"","sources":["../../../src/composedTrades/across/acrossWithSwaps.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,YAAY,EASb,MAAM,mBAAmB,CAAA;AAG1B,OAAO,EAAE,eAAe,EAAmB,MAAM,aAAa,CAAA;AAsB9D,eAAO,MAAM,yBAAyB,GACpC,OAAO,eAAe,EACtB,aAAa,eAAe,KAC3B,OAAO,CAAC,YAAY,GAAG,SAAS,CAyKlC,CAAA;AAED,eAAe,yBAAyB,CAAA"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { convertRawAmount } from '@1delta/lib-utils';
|
|
2
2
|
import { CurrencyHandler, getDeltaComposerProxyAddress, getForwarderAddress, getSafeChainId, minimumAmountOutFromTrade, nativeOnChain, splitSlippage, TradeType, } from '@1delta/lib-utils';
|
|
3
|
+
import { getCurrencyGetter } from '../../registry';
|
|
3
4
|
import { createSwapAndBridgeCalldata } from '../utils/createSwapAndBridgeCalldata';
|
|
4
5
|
import { fetchBestTrade, increaseAmountBySlippage, } from '../utils/multichainUtils';
|
|
5
6
|
import { fetchAcrossRoutes, selectAcrossRoute } from './acrossRoutes';
|
|
@@ -15,7 +16,7 @@ const validateContracts = (fromChainId) => {
|
|
|
15
16
|
return { forwarder, composer };
|
|
16
17
|
};
|
|
17
18
|
const DUMMY_ADDRESS = '0x0000000000000000000000000000000000000001';
|
|
18
|
-
export const fetchAcrossTradeWithSwaps = async (input,
|
|
19
|
+
export const fetchAcrossTradeWithSwaps = async (input, controller) => {
|
|
19
20
|
if (!input.fromCurrency || !input.toCurrency)
|
|
20
21
|
return undefined;
|
|
21
22
|
if (input.tradeType === TradeType.EXACT_OUTPUT)
|
|
@@ -31,6 +32,7 @@ export const fetchAcrossTradeWithSwaps = async (input, getCurrency, controller)
|
|
|
31
32
|
const acrossRoute = selectAcrossRoute(routes, input.fromCurrency, input.toCurrency);
|
|
32
33
|
if (!acrossRoute)
|
|
33
34
|
return undefined;
|
|
35
|
+
const getCurrency = getCurrencyGetter();
|
|
34
36
|
const fromAcrossCurrency = getCurrency(acrossRoute.originChainId.toString(), acrossRoute.originToken);
|
|
35
37
|
const toAcrossCurrency = getCurrency(acrossRoute.destinationChainId.toString(), acrossRoute.destinationToken);
|
|
36
38
|
const outputIsAcrossAsset = CurrencyHandler.equal(CurrencyHandler.wrapped(input.toCurrency), toAcrossCurrency);
|
|
@@ -83,7 +85,7 @@ export const fetchAcrossTradeWithSwaps = async (input, getCurrency, controller)
|
|
|
83
85
|
amount: BigInt(input.swapAmount),
|
|
84
86
|
},
|
|
85
87
|
];
|
|
86
|
-
const { calldata, value, to } = await createSwapAndBridgeCalldata(trades, input.caller, bridgeReceiver, false, fundsToPull, false);
|
|
88
|
+
const { calldata, value, to } = await createSwapAndBridgeCalldata(trades, input.caller, bridgeReceiver, false, fundsToPull, false, false, input.preCalls);
|
|
87
89
|
return {
|
|
88
90
|
EVM: {
|
|
89
91
|
to,
|
|
@@ -97,7 +99,7 @@ export const fetchAcrossTradeWithSwaps = async (input, getCurrency, controller)
|
|
|
97
99
|
...input,
|
|
98
100
|
slippage: inputOverride?.slippage ?? input.slippage,
|
|
99
101
|
};
|
|
100
|
-
return fetchAcrossTradeWithSwaps(newAggregatorInput
|
|
102
|
+
return fetchAcrossTradeWithSwaps(newAggregatorInput);
|
|
101
103
|
};
|
|
102
104
|
const outputAmount = !!sourceSwapTrade
|
|
103
105
|
? increaseAmountBySlippage(acrossTradeWithSwap.outputAmount.amount, Number(swapSlippage))
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { GenericTrade, RawCurrency
|
|
1
|
+
import { GenericTrade, RawCurrency } from '@1delta/lib-utils';
|
|
2
2
|
import { AxelarBaseInput } from '../../types';
|
|
3
|
-
export interface AxelarWithSwapInput extends AxelarBaseInput {
|
|
3
|
+
export interface AxelarWithSwapInput extends Omit<AxelarBaseInput, 'preCalls'> {
|
|
4
4
|
bridgeToCurrency: RawCurrency | undefined;
|
|
5
5
|
}
|
|
6
|
-
export declare const fetchAxelarTradeWithSwap: (input: AxelarWithSwapInput,
|
|
6
|
+
export declare const fetchAxelarTradeWithSwap: (input: AxelarWithSwapInput, controller?: AbortController) => Promise<{
|
|
7
7
|
trade: GenericTrade | undefined;
|
|
8
8
|
gasTrade: GenericTrade | undefined;
|
|
9
9
|
receiver: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"axelarWithSwap.d.ts","sourceRoot":"","sources":["../../../src/composedTrades/axelar/axelarWithSwap.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,YAAY,EAGZ,WAAW,
|
|
1
|
+
{"version":3,"file":"axelarWithSwap.d.ts","sourceRoot":"","sources":["../../../src/composedTrades/axelar/axelarWithSwap.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,YAAY,EAGZ,WAAW,EAEZ,MAAM,mBAAmB,CAAA;AAI1B,OAAO,EAAmB,eAAe,EAAmB,MAAM,aAAa,CAAA;AAS/E,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC;IAC5E,gBAAgB,EAAE,WAAW,GAAG,SAAS,CAAA;CAC1C;AAED,eAAO,MAAM,wBAAwB,GACnC,OAAO,mBAAmB,EAC1B,aAAa,eAAe,KAC3B,OAAO,CAAC;IACT,KAAK,EAAE,YAAY,GAAG,SAAS,CAAA;IAC/B,QAAQ,EAAE,YAAY,GAAG,SAAS,CAAA;IAClC,QAAQ,EAAE,MAAM,CAAA;CACjB,CA4CA,CAAA;AAED,eAAe,wBAAwB,CAAA"}
|
|
@@ -5,19 +5,19 @@ import { fetchBridgeAndGasTrade } from '../utils/fetchBridgeAndGasTrade';
|
|
|
5
5
|
import { fetchBestTrade } from '../utils/multichainUtils';
|
|
6
6
|
import { ADDITIONAL_CALLS_GAS_LIMIT, DESTINATION_SWAP_GAS_LIMIT, } from './constants';
|
|
7
7
|
import { createSquidDestinationPayload } from './squid/createSquidPayload';
|
|
8
|
-
export const fetchAxelarTradeWithSwap = async (input,
|
|
8
|
+
export const fetchAxelarTradeWithSwap = async (input, controller) => {
|
|
9
9
|
if (!input.bridgeToCurrency)
|
|
10
10
|
throw new Error('BridgeToCurrency undefined');
|
|
11
11
|
if (!input.toCurrency)
|
|
12
12
|
throw new Error('ToCurrency undefined');
|
|
13
13
|
const toChainId = input.toCurrency.chainId;
|
|
14
14
|
const toTokenIsBridgeToken = CurrencyHandler.equal(input.bridgeToCurrency, input.toCurrency);
|
|
15
|
-
const needDestinationCalls = (input.
|
|
15
|
+
const needDestinationCalls = (input.postCalls?.calls.length ?? 0) > 0 || !toTokenIsBridgeToken;
|
|
16
16
|
const squidRouter = await getRequiredSquidRouter(toChainId);
|
|
17
17
|
if (!needDestinationCalls) {
|
|
18
18
|
// direct case
|
|
19
19
|
const message = createSquidPayload(input.receiver);
|
|
20
|
-
const bridgeAndGasTrade = await fetchAxelarTrade(input.payFeeWithNative, { ...input, message },
|
|
20
|
+
const bridgeAndGasTrade = await fetchAxelarTrade(input.payFeeWithNative, { ...input, message }, controller);
|
|
21
21
|
return {
|
|
22
22
|
trade: bridgeAndGasTrade?.bridgeTrade,
|
|
23
23
|
gasTrade: bridgeAndGasTrade?.gasTrade,
|
|
@@ -26,7 +26,7 @@ export const fetchAxelarTradeWithSwap = async (input, getPrices, controller) =>
|
|
|
26
26
|
}
|
|
27
27
|
else {
|
|
28
28
|
// destination calls case
|
|
29
|
-
const bridgeAndGasTrade = await fetchAxelarTradeWithDestinationCalls(input,
|
|
29
|
+
const bridgeAndGasTrade = await fetchAxelarTradeWithDestinationCalls(input, controller);
|
|
30
30
|
return {
|
|
31
31
|
trade: bridgeAndGasTrade?.bridgeTrade,
|
|
32
32
|
gasTrade: bridgeAndGasTrade?.gasTrade,
|
|
@@ -35,7 +35,7 @@ export const fetchAxelarTradeWithSwap = async (input, getPrices, controller) =>
|
|
|
35
35
|
}
|
|
36
36
|
};
|
|
37
37
|
export default fetchAxelarTradeWithSwap;
|
|
38
|
-
const fetchAxelarTradeWithDestinationCalls = async (input,
|
|
38
|
+
const fetchAxelarTradeWithDestinationCalls = async (input, controller) => {
|
|
39
39
|
if (!input.swapAmount)
|
|
40
40
|
throw new Error('Swap amount undefined');
|
|
41
41
|
if (!input.fromCurrency)
|
|
@@ -46,8 +46,8 @@ const fetchAxelarTradeWithDestinationCalls = async (input, getPrices, controller
|
|
|
46
46
|
throw new Error('BridgeToCurrency undefined');
|
|
47
47
|
const toChainId = input.toCurrency.chainId;
|
|
48
48
|
const squidMulticall = await getRequiredSquidMulticaller(toChainId);
|
|
49
|
-
const additionalCallsGasLimit = input.
|
|
50
|
-
const additionalCalls = input.
|
|
49
|
+
const additionalCallsGasLimit = input.postCalls?.gasLimit ?? ADDITIONAL_CALLS_GAS_LIMIT;
|
|
50
|
+
const additionalCalls = input.postCalls?.calls ?? [];
|
|
51
51
|
const needsAdditionalCalls = additionalCalls.length > 0;
|
|
52
52
|
const needsSwap = !CurrencyHandler.equal(input.bridgeToCurrency, input.toCurrency);
|
|
53
53
|
const fetchSwapAndMessage = async (amount) => {
|
|
@@ -100,7 +100,7 @@ const fetchAxelarTradeWithDestinationCalls = async (input, getPrices, controller
|
|
|
100
100
|
message: swap.message,
|
|
101
101
|
destinationGasLimit: swap.gasLimit,
|
|
102
102
|
};
|
|
103
|
-
const bridgeAndGasTrade = await fetchAxelarTrade(input.payFeeWithNative, axelarInput,
|
|
103
|
+
const bridgeAndGasTrade = await fetchAxelarTrade(input.payFeeWithNative, axelarInput, controller);
|
|
104
104
|
if (!bridgeAndGasTrade)
|
|
105
105
|
return undefined;
|
|
106
106
|
const { bridgeTrade, gasTrade } = bridgeAndGasTrade;
|
|
@@ -120,7 +120,7 @@ const fetchAxelarTradeWithDestinationCalls = async (input, getPrices, controller
|
|
|
120
120
|
...input,
|
|
121
121
|
slippage: inputOverride?.slippage ?? input.slippage,
|
|
122
122
|
};
|
|
123
|
-
return (await fetchAxelarTradeWithSwap(newAggregatorInput
|
|
123
|
+
return (await fetchAxelarTradeWithSwap(newAggregatorInput)).trade;
|
|
124
124
|
};
|
|
125
125
|
const composedTrade = {
|
|
126
126
|
...updatedAxelarTrade,
|
|
@@ -135,13 +135,13 @@ const fetchAxelarTradeWithDestinationCalls = async (input, getPrices, controller
|
|
|
135
135
|
};
|
|
136
136
|
return { bridgeTrade: composedTrade, gasTrade };
|
|
137
137
|
};
|
|
138
|
-
const fetchAxelarTrade = async (payFeeWithNative, input,
|
|
138
|
+
const fetchAxelarTrade = async (payFeeWithNative, input, controller) => {
|
|
139
139
|
if (payFeeWithNative) {
|
|
140
140
|
const bridgeTrade = await fetchBridgeTrade(Bridge.AXELAR, input, controller);
|
|
141
141
|
return bridgeTrade ? { bridgeTrade, gasTrade: undefined } : undefined;
|
|
142
142
|
}
|
|
143
143
|
else {
|
|
144
|
-
const bridgeAndGasTrade = await fetchBridgeAndGasTrade(Bridge.AXELAR, input,
|
|
144
|
+
const bridgeAndGasTrade = await fetchBridgeAndGasTrade(Bridge.AXELAR, input, controller);
|
|
145
145
|
return bridgeAndGasTrade;
|
|
146
146
|
}
|
|
147
147
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { GenericTrade
|
|
1
|
+
import { GenericTrade } from '@1delta/lib-utils';
|
|
2
2
|
import { AxelarBaseInput } from '../../types';
|
|
3
|
-
export declare const fetchAxelarTradeWithSwaps: (input: AxelarBaseInput,
|
|
3
|
+
export declare const fetchAxelarTradeWithSwaps: (input: AxelarBaseInput, controller?: AbortController) => Promise<GenericTrade | undefined>;
|
|
4
4
|
export default fetchAxelarTradeWithSwaps;
|
|
5
5
|
//# sourceMappingURL=axelarWithSwaps.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"axelarWithSwaps.d.ts","sourceRoot":"","sources":["../../../src/composedTrades/axelar/axelarWithSwaps.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,YAAY,
|
|
1
|
+
{"version":3,"file":"axelarWithSwaps.d.ts","sourceRoot":"","sources":["../../../src/composedTrades/axelar/axelarWithSwaps.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,YAAY,EAQb,MAAM,mBAAmB,CAAA;AAG1B,OAAO,EAAmB,eAAe,EAAE,MAAM,aAAa,CAAA;AAmB9D,eAAO,MAAM,yBAAyB,GACpC,OAAO,eAAe,EACtB,aAAa,eAAe,KAC3B,OAAO,CAAC,YAAY,GAAG,SAAS,CAwKlC,CAAA;AAED,eAAe,yBAAyB,CAAA"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { convertRawAmount, nativeOnChain } from '@1delta/lib-utils';
|
|
2
2
|
import { CurrencyHandler, getDeltaComposerProxyAddress, getForwarderAddress, getSafeChainId, minimumAmountOutFromTrade, splitSlippage, TradeType, } from '@1delta/lib-utils';
|
|
3
|
+
import { getCurrencyGetter } from '../../registry';
|
|
3
4
|
import { fetchBestTrade, increaseAmountBySlippage } from '../utils';
|
|
4
5
|
import { createSwapAndBridgeCalldata } from '../utils/createSwapAndBridgeCalldata';
|
|
5
6
|
import { fetchAxelarRoute } from './axelarRoutes';
|
|
@@ -15,7 +16,7 @@ const validateContracts = (fromChainId) => {
|
|
|
15
16
|
return { forwarder, composer };
|
|
16
17
|
};
|
|
17
18
|
const DUMMY_ADDRESS = '0x0000000000000000000000000000000000000001';
|
|
18
|
-
export const fetchAxelarTradeWithSwaps = async (input,
|
|
19
|
+
export const fetchAxelarTradeWithSwaps = async (input, controller) => {
|
|
19
20
|
if (!input.fromCurrency || !input.toCurrency)
|
|
20
21
|
return undefined;
|
|
21
22
|
if (input.tradeType === TradeType.EXACT_OUTPUT)
|
|
@@ -30,6 +31,7 @@ export const fetchAxelarTradeWithSwaps = async (input, getCurrency, getPrices, c
|
|
|
30
31
|
const route = await fetchAxelarRoute(fromChainId, toChainId);
|
|
31
32
|
if (!route)
|
|
32
33
|
return undefined;
|
|
34
|
+
const getCurrency = getCurrencyGetter();
|
|
33
35
|
const fromBridgeCurrency = getCurrency(fromChainId, route.fromBridgeToken);
|
|
34
36
|
const toBridgeCurrency = getCurrency(toChainId, route.toBridgeToken);
|
|
35
37
|
const outputIsBridgeAsset = CurrencyHandler.equal(CurrencyHandler.wrapped(input.toCurrency), toBridgeCurrency);
|
|
@@ -63,7 +65,7 @@ export const fetchAxelarTradeWithSwaps = async (input, getCurrency, getPrices, c
|
|
|
63
65
|
caller: forwarder,
|
|
64
66
|
receiver: isDummy ? DUMMY_ADDRESS : input.receiver,
|
|
65
67
|
};
|
|
66
|
-
const { trade: bridgeTradeWithSwap, gasTrade, receiver: bridgeReceiver, } = await fetchAxelarTradeWithSwap(bridgeExtendedInput,
|
|
68
|
+
const { trade: bridgeTradeWithSwap, gasTrade, receiver: bridgeReceiver, } = await fetchAxelarTradeWithSwap(bridgeExtendedInput, controller);
|
|
67
69
|
if (!bridgeTradeWithSwap)
|
|
68
70
|
return undefined;
|
|
69
71
|
const trades = [];
|
|
@@ -87,7 +89,7 @@ export const fetchAxelarTradeWithSwaps = async (input, getCurrency, getPrices, c
|
|
|
87
89
|
amount: bridgeTradeWithSwap.gasAmount,
|
|
88
90
|
});
|
|
89
91
|
}
|
|
90
|
-
const { calldata, value, to } = await createSwapAndBridgeCalldata(trades, input.caller, bridgeReceiver, true, fundsToPull, false, true);
|
|
92
|
+
const { calldata, value, to } = await createSwapAndBridgeCalldata(trades, input.caller, bridgeReceiver, true, fundsToPull, false, true, input.preCalls);
|
|
91
93
|
return {
|
|
92
94
|
EVM: {
|
|
93
95
|
to,
|
|
@@ -101,7 +103,7 @@ export const fetchAxelarTradeWithSwaps = async (input, getCurrency, getPrices, c
|
|
|
101
103
|
...input,
|
|
102
104
|
slippage: inputOverride?.slippage ?? input.slippage,
|
|
103
105
|
};
|
|
104
|
-
return fetchAxelarTradeWithSwaps(newAggregatorInput
|
|
106
|
+
return fetchAxelarTradeWithSwaps(newAggregatorInput);
|
|
105
107
|
};
|
|
106
108
|
const outputAmount = !!sourceSwapTrade
|
|
107
109
|
? increaseAmountBySlippage(bridgeTradeWithSwap.outputAmount.amount, Number(swapSlippage))
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { InternalTrade, PostDeltaCall, PreDeltaCall } from '@1delta/lib-utils';
|
|
2
2
|
export declare function createSwapAndBridgeCalldata(trades: InternalTrade[], account: string, bridgeReceiver: string, sweep: boolean, fundsToPull?: {
|
|
3
3
|
address: string;
|
|
4
4
|
amount: bigint;
|
|
5
|
-
}[], catchRevert?: boolean, sweepDust?: boolean,
|
|
5
|
+
}[], catchRevert?: boolean, sweepDust?: boolean, preCalls?: PreDeltaCall[], postCalls?: PostDeltaCall[]): Promise<{
|
|
6
6
|
calldata: `0x${string}`;
|
|
7
7
|
value: bigint;
|
|
8
8
|
to: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createSwapAndBridgeCalldata.d.ts","sourceRoot":"","sources":["../../../src/composedTrades/utils/createSwapAndBridgeCalldata.ts"],"names":[],"mappings":"AAcA,OAAO,
|
|
1
|
+
{"version":3,"file":"createSwapAndBridgeCalldata.d.ts","sourceRoot":"","sources":["../../../src/composedTrades/utils/createSwapAndBridgeCalldata.ts"],"names":[],"mappings":"AAcA,OAAO,EAQL,aAAa,EAIb,aAAa,EACb,YAAY,EAGb,MAAM,mBAAmB,CAAA;AAK1B,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,aAAa,EAAE,EACvB,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,OAAO,EACd,WAAW,GAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAO,EACvD,WAAW,GAAE,OAAc,EAC3B,SAAS,GAAE,OAAe,EAC1B,QAAQ,GAAE,YAAY,EAAO,EAC7B,SAAS,GAAE,aAAa,EAAO;;;;GAiThC"}
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import { Bridge } from '@1delta/bridge-configs';
|
|
2
2
|
import { encodeAcrossBridgeNative, encodeAcrossBridgeToken, encodeApprove, encodeExternalCall, encodeGasZipEvmBridge, encodeSquidRouterCall, encodeStargateV2BridgeSimpleTaxi, encodeSweep, encodeTransferIn, encodeTryExternalCall, SweepType, } from '@1delta/calldatalib';
|
|
3
|
-
import { buildMetaSwapParams, CurrencyHandler, encodeComposerCompose, getDeltaComposerProxyAddress, getForwarderAddress, minimumAmountInFromAmount, packCommands, TradeUtils, } from '@1delta/lib-utils';
|
|
3
|
+
import { buildMetaSwapParams, CurrencyHandler, DeltaCallType, encodeComposerCompose, getDeltaComposerProxyAddress, getForwarderAddress, LendingCall, minimumAmountInFromAmount, packCommands, TradeUtils, } from '@1delta/lib-utils';
|
|
4
4
|
import { encodePacked, pad } from 'viem';
|
|
5
5
|
import { createDeltaCalls } from '../../deltaCall';
|
|
6
|
-
export async function createSwapAndBridgeCalldata(trades, account, bridgeReceiver, sweep, fundsToPull = [], catchRevert = true, sweepDust = false,
|
|
6
|
+
export async function createSwapAndBridgeCalldata(trades, account, bridgeReceiver, sweep, fundsToPull = [], catchRevert = true, sweepDust = false, preCalls = [], postCalls = []) {
|
|
7
7
|
if (!trades || trades.length === 0 || !isSameSourceChainId(trades))
|
|
8
8
|
throw new Error(`Invalid trades array. Must have at least one trade and all trades must be on the same chain`);
|
|
9
9
|
const sourceChainId = trades[0].inputAmount.currency.chainId;
|
|
10
|
+
const destChainId = trades[trades.length - 1].outputAmount.currency.chainId;
|
|
11
|
+
const isCrossChain = sourceChainId !== destChainId;
|
|
12
|
+
if (isCrossChain && postCalls.length > 0)
|
|
13
|
+
throw new Error('Post-calls are not supported for cross-chain trades');
|
|
10
14
|
const forwarder = getForwarderAddress(sourceChainId);
|
|
11
15
|
if (!forwarder)
|
|
12
16
|
throw new Error(`CallForwarder contract does not exist on chain ${sourceChainId}`);
|
|
@@ -96,7 +100,10 @@ export async function createSwapAndBridgeCalldata(trades, account, bridgeReceive
|
|
|
96
100
|
sweepTokens.push(sweepOutputToken);
|
|
97
101
|
}
|
|
98
102
|
}
|
|
99
|
-
const
|
|
103
|
+
const { composerCommands: preComposerCommands } = createDeltaCalls(sourceChainId, preCalls);
|
|
104
|
+
const { forwarderCommands: postForwarderCommands, composerCommands: postComposerCommands, } = createDeltaCalls(sourceChainId, postCalls);
|
|
105
|
+
const forwarderSweepCommands = [];
|
|
106
|
+
const composerSweepCommands = [];
|
|
100
107
|
if (sweep) {
|
|
101
108
|
const sameChainTrades = trades.filter((t) => t.inputAmount.currency.chainId === t.outputAmount.currency.chainId);
|
|
102
109
|
const currencyToAmount = TradeUtils.groupAmountByCurrency({
|
|
@@ -104,9 +111,21 @@ export async function createSwapAndBridgeCalldata(trades, account, bridgeReceive
|
|
|
104
111
|
getCurrency: (t) => t.outputAmount.currency,
|
|
105
112
|
getAmount: (t) => minimumAmountInFromAmount(t.outputAmount, t.slippage),
|
|
106
113
|
});
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
114
|
+
if (postComposerCommands.length > 0) {
|
|
115
|
+
// special case: first sweep to composer and after post composer calls sweep dust to receiver
|
|
116
|
+
for (const [currency, amount] of currencyToAmount.entries()) {
|
|
117
|
+
const forwarderSweepCall = encodeSweep(currency.address, composerProxy, sweepDust ? 0n : amount, SweepType.VALIDATE);
|
|
118
|
+
forwarderSweepCommands.push(forwarderSweepCall);
|
|
119
|
+
const composerSweepCall = encodeSweep(currency.address, account, 0n, SweepType.VALIDATE);
|
|
120
|
+
composerSweepCommands.push(composerSweepCall);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
// normal case: sweep directly to receiver after forwarder calls
|
|
125
|
+
for (const [currency, amount] of currencyToAmount.entries()) {
|
|
126
|
+
const forwarderSweepCall = encodeSweep(currency.address, account, sweepDust ? 0n : amount, SweepType.VALIDATE);
|
|
127
|
+
forwarderSweepCommands.push(forwarderSweepCall);
|
|
128
|
+
}
|
|
110
129
|
}
|
|
111
130
|
}
|
|
112
131
|
let value = 0n;
|
|
@@ -117,15 +136,40 @@ export async function createSwapAndBridgeCalldata(trades, account, bridgeReceive
|
|
|
117
136
|
else
|
|
118
137
|
transferInCommands.push(encodeTransferIn(address, forwarder, amount));
|
|
119
138
|
}
|
|
120
|
-
const
|
|
139
|
+
const nativeWithdrawOrBorrowCalls = preCalls.filter((c) => c.callType === DeltaCallType.LENDING &&
|
|
140
|
+
(c.lendingAction === LendingCall.DeltaCallLendingAction.WITHDRAW ||
|
|
141
|
+
c.lendingAction === LendingCall.DeltaCallLendingAction.BORROW) &&
|
|
142
|
+
CurrencyHandler.isNativeAddress(c.tokenAddress, sourceChainId));
|
|
143
|
+
if (nativeWithdrawOrBorrowCalls.length > 0) {
|
|
144
|
+
const bridgeTrade = trades.find((t) => t.aggregator === Bridge.AXELAR ||
|
|
145
|
+
t.aggregator === Bridge.STARGATE_TAXI ||
|
|
146
|
+
t.aggregator === Bridge.GASZIP);
|
|
147
|
+
let requiredBridgeFee = 0n;
|
|
148
|
+
if (bridgeTrade?.crossChainParams) {
|
|
149
|
+
if (bridgeTrade.aggregator === Bridge.AXELAR) {
|
|
150
|
+
requiredBridgeFee = safeBigInt(bridgeTrade.crossChainParams.totalFeeInNative);
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
requiredBridgeFee = safeBigInt(bridgeTrade.crossChainParams.nativeFee);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
if (requiredBridgeFee > 0n) {
|
|
157
|
+
value = requiredBridgeFee;
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
value = 0n;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
const preCommands = preComposerCommands.length > 0 ? preComposerCommands : transferInCommands;
|
|
121
164
|
const calldata = encodeComposerCompose(packCommands([
|
|
122
|
-
...
|
|
123
|
-
|
|
124
|
-
encodeExternalCall(forwarder, value, false, packCommands([
|
|
165
|
+
...preCommands,
|
|
166
|
+
encodeExternalCall(forwarder, 0n, true, packCommands([
|
|
125
167
|
...commands,
|
|
126
|
-
...
|
|
127
|
-
...
|
|
168
|
+
...postForwarderCommands,
|
|
169
|
+
...forwarderSweepCommands,
|
|
128
170
|
])),
|
|
171
|
+
...postComposerCommands,
|
|
172
|
+
...composerSweepCommands,
|
|
129
173
|
]));
|
|
130
174
|
return { calldata, value, to: composerProxy };
|
|
131
175
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Bridge } from '@1delta/bridge-configs';
|
|
2
|
-
import { GenericTrade
|
|
2
|
+
import { GenericTrade } from '@1delta/lib-utils';
|
|
3
3
|
import { BaseBridgeInput } from '../../types';
|
|
4
|
-
export declare const fetchBridgeAndGasTrade: (aggregator: Bridge, input: BaseBridgeInput,
|
|
4
|
+
export declare const fetchBridgeAndGasTrade: (aggregator: Bridge, input: BaseBridgeInput, controller?: AbortController) => Promise<{
|
|
5
5
|
bridgeTrade: GenericTrade;
|
|
6
6
|
gasTrade: GenericTrade | undefined;
|
|
7
7
|
} | undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchBridgeAndGasTrade.d.ts","sourceRoot":"","sources":["../../../src/composedTrades/utils/fetchBridgeAndGasTrade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/C,OAAO,
|
|
1
|
+
{"version":3,"file":"fetchBridgeAndGasTrade.d.ts","sourceRoot":"","sources":["../../../src/composedTrades/utils/fetchBridgeAndGasTrade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EAAmB,YAAY,EAAiB,MAAM,mBAAmB,CAAA;AAGhF,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAG7C,eAAO,MAAM,sBAAsB,GACjC,YAAY,MAAM,EAClB,OAAO,eAAe,EACtB,aAAa,eAAe,KAC3B,OAAO,CACR;IAAE,WAAW,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,YAAY,GAAG,SAAS,CAAA;CAAE,GAAG,SAAS,CA2E9E,CAAA"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { CurrencyHandler, nativeOnChain
|
|
1
|
+
import { CurrencyHandler, nativeOnChain } from '@1delta/lib-utils';
|
|
2
2
|
import { fetchBridgeTrade } from '../../bridge/fetchBridgeTrade';
|
|
3
3
|
import { getExactOutputTrade } from './multichainUtils';
|
|
4
|
-
export const fetchBridgeAndGasTrade = async (aggregator, input,
|
|
4
|
+
export const fetchBridgeAndGasTrade = async (aggregator, input, controller) => {
|
|
5
5
|
if (!input.fromCurrency || !input.toCurrency || !input.swapAmount)
|
|
6
6
|
return undefined;
|
|
7
7
|
const fromChainId = input.fromCurrency?.chainId;
|
|
8
8
|
const gasTradeSlippage = 1;
|
|
9
9
|
const fetchGasTrade = async (gasAmount) => {
|
|
10
|
-
const gasTrade = await getExactOutputTrade(input.fromCurrency, nativeOnChain(fromChainId), gasAmount, gasTradeSlippage, input.caller, input.caller,
|
|
10
|
+
const gasTrade = await getExactOutputTrade(input.fromCurrency, nativeOnChain(fromChainId), gasAmount, gasTradeSlippage, input.caller, input.caller, controller);
|
|
11
11
|
return gasTrade;
|
|
12
12
|
};
|
|
13
13
|
const bridgeTrade = await fetchBridgeTrade(aggregator, input, controller);
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { GenericTrade, InternalTrade, RawCurrency
|
|
1
|
+
import { GenericTrade, InternalTrade, RawCurrency } from '@1delta/lib-utils';
|
|
2
2
|
import { AggregatorInput } from '../../types';
|
|
3
3
|
export interface BridgeTradeWithGas {
|
|
4
4
|
bridgeTrade: GenericTrade;
|
|
5
5
|
gasTrade: GenericTrade | undefined;
|
|
6
6
|
}
|
|
7
7
|
export declare function fetchBestTrade(input: AggregatorInput, controller?: AbortController): Promise<GenericTrade>;
|
|
8
|
-
export declare function getExactOutputTrade(currencyIn: RawCurrency, currencyOut: RawCurrency, outputAmount: bigint, slippage: number, txOrigin: string, caller: string,
|
|
8
|
+
export declare function getExactOutputTrade(currencyIn: RawCurrency, currencyOut: RawCurrency, outputAmount: bigint, slippage: number, txOrigin: string, caller: string, controller?: AbortController): Promise<InternalTrade | undefined>;
|
|
9
9
|
export declare function increaseAmountBySlippage(amount: bigint, slippage: number): bigint;
|
|
10
10
|
//# sourceMappingURL=multichainUtils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multichainUtils.d.ts","sourceRoot":"","sources":["../../../src/composedTrades/utils/multichainUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,YAAY,EACZ,aAAa,
|
|
1
|
+
{"version":3,"file":"multichainUtils.d.ts","sourceRoot":"","sources":["../../../src/composedTrades/utils/multichainUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,YAAY,EACZ,aAAa,EACb,WAAW,EAEZ,MAAM,mBAAmB,CAAA;AAG1B,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAK7C,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,YAAY,CAAA;IACzB,QAAQ,EAAE,YAAY,GAAG,SAAS,CAAA;CACnC;AAWD,wBAAsB,cAAc,CAClC,KAAK,EAAE,eAAe,EACtB,UAAU,CAAC,EAAE,eAAe,GAC3B,OAAO,CAAC,YAAY,CAAC,CAyEvB;AAED,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,WAAW,EACvB,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,eAAe,GAC3B,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAoBpC;AAID,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,MAAM,CAKR"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { TradeAggregator } from '@1delta/aggregators';
|
|
2
|
-
import { devLog,
|
|
2
|
+
import { devLog, TradeType, } from '@1delta/lib-utils';
|
|
3
3
|
import { fetchAggregatorTrade, getAvailableAggregators } from '../../aggregator';
|
|
4
4
|
import { reverseQuote } from '../../utils';
|
|
5
5
|
// --- Fetching Logic ---
|
|
@@ -62,24 +62,10 @@ export async function fetchBestTrade(input, controller) {
|
|
|
62
62
|
const orderedTrades = trades.sort((a, b) => b.outputAmountRealized - a.outputAmountRealized);
|
|
63
63
|
return orderedTrades[0];
|
|
64
64
|
}
|
|
65
|
-
export async function getExactOutputTrade(currencyIn, currencyOut, outputAmount, slippage, txOrigin, caller,
|
|
65
|
+
export async function getExactOutputTrade(currencyIn, currencyOut, outputAmount, slippage, txOrigin, caller, controller) {
|
|
66
66
|
if (outputAmount === 0n)
|
|
67
67
|
return undefined;
|
|
68
|
-
const
|
|
69
|
-
{
|
|
70
|
-
asset: currencyIn.address,
|
|
71
|
-
chainId: currencyIn.chainId,
|
|
72
|
-
priority: PricePriority.ORACLE,
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
asset: currencyOut.address,
|
|
76
|
-
chainId: currencyOut.chainId,
|
|
77
|
-
priority: PricePriority.ORACLE,
|
|
78
|
-
},
|
|
79
|
-
]);
|
|
80
|
-
if (priceIn <= 0 || priceOut <= 0)
|
|
81
|
-
throw new Error('Invalid price');
|
|
82
|
-
const inputAmount = reverseQuote(currencyIn, currencyOut, outputAmount, priceIn, priceOut).amount;
|
|
68
|
+
const inputAmount = reverseQuote(currencyIn, currencyOut, outputAmount).amount;
|
|
83
69
|
const quoteInput = {
|
|
84
70
|
chainId: currencyIn.chainId,
|
|
85
71
|
tradeType: TradeType.EXACT_INPUT,
|
package/dist/core.d.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DeltaCall, EvmGenericCallInfo, GenericTrade } from '@1delta/lib-utils';
|
|
2
2
|
import { BridgeInput } from './types';
|
|
3
|
-
export declare const fetchBridgeTrade: (input: BridgeInput,
|
|
3
|
+
export declare const fetchBridgeTrade: (input: BridgeInput, controller: AbortController) => Promise<GenericTrade | undefined>;
|
|
4
|
+
export declare const assembleDeltaCalls: (chainId: string, calls: DeltaCall[], value: bigint, sweepTokensProps?: {
|
|
5
|
+
tokensToSweep: string[];
|
|
6
|
+
receiver: string;
|
|
7
|
+
}) => EvmGenericCallInfo;
|
|
4
8
|
//# sourceMappingURL=core.d.ts.map
|
package/dist/core.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AACA,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AACA,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,YAAY,EAEb,MAAM,mBAAmB,CAAA;AAU1B,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAGrC,eAAO,MAAM,gBAAgB,GAC3B,OAAO,WAAW,EAClB,YAAY,eAAe,KAC1B,OAAO,CAAC,YAAY,GAAG,SAAS,CA0BlC,CAAA;AAmBD,eAAO,MAAM,kBAAkB,GAC7B,SAAS,MAAM,EACf,OAAO,SAAS,EAAE,EAClB,OAAO,MAAM,EACb,mBAAmB;IACjB,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,QAAQ,EAAE,MAAM,CAAA;CACjB,KACA,kBAOF,CAAA"}
|