@1delta/trade-sdk 0.1.9 → 0.1.10
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/dist/composedTrades/across/acrossAdapter.d.ts +5 -0
- package/dist/composedTrades/across/acrossAdapter.d.ts.map +1 -0
- package/dist/composedTrades/across/acrossAdapter.js +44 -0
- package/dist/composedTrades/across/acrossRoutes.d.ts +1 -2
- package/dist/composedTrades/across/acrossRoutes.d.ts.map +1 -1
- package/dist/composedTrades/across/acrossWithSwap.integration.spec.d.ts +1 -0
- package/dist/composedTrades/across/acrossWithSwap.integration.spec.js +122 -116
- package/dist/composedTrades/axelar/axelarAdapter.d.ts +5 -0
- package/dist/composedTrades/axelar/axelarAdapter.d.ts.map +1 -0
- package/dist/composedTrades/axelar/axelarAdapter.js +38 -0
- package/dist/composedTrades/axelar/axelarRoutes.d.ts +1 -2
- package/dist/composedTrades/axelar/axelarRoutes.d.ts.map +1 -1
- package/dist/composedTrades/gaszip/gaszipAdapter.d.ts +9 -0
- package/dist/composedTrades/gaszip/gaszipAdapter.d.ts.map +1 -0
- package/dist/composedTrades/gaszip/gaszipAdapter.js +46 -0
- package/dist/composedTrades/general/composableBridgeAdapter.d.ts +9 -0
- package/dist/composedTrades/general/composableBridgeAdapter.d.ts.map +1 -0
- package/dist/composedTrades/general/composableBridgeAdapter.js +39 -0
- package/dist/composedTrades/general/composeBridgeTrade.d.ts +5 -0
- package/dist/composedTrades/general/composeBridgeTrade.d.ts.map +1 -0
- package/dist/composedTrades/general/composeBridgeTrade.js +106 -0
- package/dist/composedTrades/general/index.d.ts +3 -0
- package/dist/composedTrades/general/index.d.ts.map +1 -0
- package/dist/composedTrades/general/index.js +2 -0
- package/dist/composedTrades/index.d.ts +3 -3
- package/dist/composedTrades/index.d.ts.map +1 -1
- package/dist/composedTrades/index.js +40 -3
- package/dist/composedTrades/utils/createSwapAndBridgeCalldata.d.ts.map +1 -1
- package/dist/composedTrades/utils/createSwapAndBridgeCalldata.js +1 -25
- package/dist/composedTrades/utils/index.d.ts +1 -0
- package/dist/composedTrades/utils/index.d.ts.map +1 -1
- package/dist/composedTrades/utils/index.js +1 -0
- package/dist/composedTrades/utils/validateContracts.d.ts +5 -0
- package/dist/composedTrades/utils/validateContracts.d.ts.map +1 -0
- package/dist/composedTrades/utils/validateContracts.js +11 -0
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +1 -13
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/initialize.d.ts +2 -2
- package/dist/initialize.d.ts.map +1 -1
- package/dist/registry/currency.d.ts +1 -1
- package/dist/registry/currency.d.ts.map +1 -1
- package/dist/registry/currency.js +2 -1
- package/dist/registry/price.d.ts +1 -1
- package/dist/registry/price.d.ts.map +1 -1
- package/dist/registry/price.js +2 -1
- package/dist/tradeExecution/getStatusFromTrade.d.ts +20 -0
- package/dist/tradeExecution/getStatusFromTrade.d.ts.map +1 -0
- package/dist/tradeExecution/getStatusFromTrade.js +71 -0
- package/dist/tradeExecution/getTransactionData.d.ts +13 -0
- package/dist/tradeExecution/getTransactionData.d.ts.map +1 -0
- package/dist/tradeExecution/getTransactionData.js +50 -0
- package/dist/tradeExecution/index.d.ts +13 -0
- package/dist/tradeExecution/index.d.ts.map +1 -0
- package/dist/tradeExecution/index.js +150 -0
- package/dist/tradeExecution/isBridge.d.ts +3 -0
- package/dist/tradeExecution/isBridge.d.ts.map +1 -0
- package/dist/tradeExecution/isBridge.js +3 -0
- package/dist/tradeExecution/signData.d.ts +4 -0
- package/dist/tradeExecution/signData.d.ts.map +1 -0
- package/dist/tradeExecution/signData.js +21 -0
- package/dist/tradeExecution/trackTradeCompletion.d.ts +9 -0
- package/dist/tradeExecution/trackTradeCompletion.d.ts.map +1 -0
- package/dist/tradeExecution/trackTradeCompletion.js +75 -0
- package/dist/tradeExecution/types.d.ts +30 -0
- package/dist/tradeExecution/types.d.ts.map +1 -0
- package/dist/tradeExecution/types.js +1 -0
- package/dist/types/bridgeInput.d.ts +30 -19
- package/dist/types/bridgeInput.d.ts.map +1 -1
- package/dist/types/bridgeInput.js +1 -1
- package/dist/types/composedBridgeAdapter.d.ts +33 -0
- package/dist/types/composedBridgeAdapter.d.ts.map +1 -0
- package/dist/types/composedBridgeAdapter.js +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/package.json +3 -3
- package/dist/composedTrades/across/acrossWithSwaps.d.ts +0 -5
- package/dist/composedTrades/across/acrossWithSwaps.d.ts.map +0 -1
- package/dist/composedTrades/across/acrossWithSwaps.integration.spec.d.ts +0 -1
- package/dist/composedTrades/across/acrossWithSwaps.integration.spec.d.ts.map +0 -1
- package/dist/composedTrades/across/acrossWithSwaps.integration.spec.js +0 -110
- package/dist/composedTrades/across/acrossWithSwaps.js +0 -124
- package/dist/composedTrades/axelar/axelarWithSwaps.d.ts +0 -5
- package/dist/composedTrades/axelar/axelarWithSwaps.d.ts.map +0 -1
- package/dist/composedTrades/axelar/axelarWithSwaps.js +0 -126
- package/dist/composedTrades/gaszip/gaszipWithSwaps.d.ts +0 -5
- package/dist/composedTrades/gaszip/gaszipWithSwaps.d.ts.map +0 -1
- package/dist/composedTrades/gaszip/gaszipWithSwaps.js +0 -115
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { AcrossBaseInput, ComposedBridgeAdapter } from '../../types';
|
|
2
|
+
import { AcrossRouteResponse } from './acrossRoutes';
|
|
3
|
+
import { AcrossWithSwapInput } from './acrossWithSwap';
|
|
4
|
+
export declare const AcrossAdapter: ComposedBridgeAdapter<AcrossBaseInput, AcrossWithSwapInput, AcrossRouteResponse>;
|
|
5
|
+
//# sourceMappingURL=acrossAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acrossAdapter.d.ts","sourceRoot":"","sources":["../../../src/composedTrades/across/acrossAdapter.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACpE,OAAO,EACL,mBAAmB,EAGpB,MAAM,gBAAgB,CAAA;AACvB,OAAiC,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAIhF,eAAO,MAAM,aAAa,EAAE,qBAAqB,CAC/C,eAAe,EACf,mBAAmB,EACnB,mBAAmB,CAgEpB,CAAA"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Bridge } from '@1delta/bridge-configs';
|
|
2
|
+
import { CurrencyHandler, nativeOnChain } from '@1delta/lib-utils';
|
|
3
|
+
import { getCurrencyGetter } from '../../registry';
|
|
4
|
+
import { fetchAcrossRoutes, selectAcrossRoute, } from './acrossRoutes';
|
|
5
|
+
import fetchAcrossTradeWithSwap from './acrossWithSwap';
|
|
6
|
+
const DUMMY_ADDRESS = '0x0000000000000000000000000000000000000001';
|
|
7
|
+
export const AcrossAdapter = {
|
|
8
|
+
async getRoute(fromChainId, toChainId, input) {
|
|
9
|
+
if (!input.fromCurrency || !input.toCurrency)
|
|
10
|
+
return undefined;
|
|
11
|
+
const routes = await fetchAcrossRoutes(fromChainId, toChainId);
|
|
12
|
+
return selectAcrossRoute(routes, input.fromCurrency, input.toCurrency);
|
|
13
|
+
},
|
|
14
|
+
getBridgeCurrencies(route, input) {
|
|
15
|
+
const getCurrency = getCurrencyGetter();
|
|
16
|
+
const fromAcrossCurrency = getCurrency(route.originChainId.toString(), route.originToken);
|
|
17
|
+
const toAcrossCurrency = getCurrency(route.destinationChainId.toString(), route.destinationToken);
|
|
18
|
+
return {
|
|
19
|
+
fromBridgeCurrency: fromAcrossCurrency,
|
|
20
|
+
toBridgeCurrency: toAcrossCurrency,
|
|
21
|
+
inputIsBridgeAsset: CurrencyHandler.equal(CurrencyHandler.wrapped(input.fromCurrency), fromAcrossCurrency),
|
|
22
|
+
outputIsBridgeAsset: CurrencyHandler.equal(CurrencyHandler.wrapped(input.toCurrency), toAcrossCurrency),
|
|
23
|
+
};
|
|
24
|
+
},
|
|
25
|
+
buildBridgeInput({ input, extendedAmount, bridgeSlippage, isDummy, fromBridgeCurrency, toBridgeCurrency, route, }) {
|
|
26
|
+
const fromCurrency = route.isNative
|
|
27
|
+
? nativeOnChain(route.originChainId.toString())
|
|
28
|
+
: fromBridgeCurrency;
|
|
29
|
+
return {
|
|
30
|
+
...input,
|
|
31
|
+
swapAmount: extendedAmount,
|
|
32
|
+
slippage: bridgeSlippage,
|
|
33
|
+
fromCurrency,
|
|
34
|
+
bridgeToCurrency: toBridgeCurrency,
|
|
35
|
+
caller: isDummy ? DUMMY_ADDRESS : input.caller,
|
|
36
|
+
receiver: isDummy ? DUMMY_ADDRESS : input.receiver,
|
|
37
|
+
};
|
|
38
|
+
},
|
|
39
|
+
async fetchBridgeTrade(bridge, input, controller) {
|
|
40
|
+
if (bridge !== Bridge.ACROSS)
|
|
41
|
+
throw new Error(`AcrossAdapter only supports Across bridge`);
|
|
42
|
+
return await fetchAcrossTradeWithSwap(input, controller);
|
|
43
|
+
},
|
|
44
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { RawCurrency } from '@1delta/lib-utils';
|
|
2
|
-
interface AcrossRouteResponse {
|
|
2
|
+
export interface AcrossRouteResponse {
|
|
3
3
|
originChainId: number;
|
|
4
4
|
originToken: string;
|
|
5
5
|
destinationChainId: number;
|
|
@@ -13,5 +13,4 @@ export declare const fetchAcrossRoutes: (fromChainId: string, toChainId: string)
|
|
|
13
13
|
* Enhanced route selection with clearer priority logic
|
|
14
14
|
*/
|
|
15
15
|
export declare const selectAcrossRoute: (routes: AcrossRouteResponse[], fromCurrency: RawCurrency, toCurrency: RawCurrency) => AcrossRouteResponse | undefined;
|
|
16
|
-
export {};
|
|
17
16
|
//# sourceMappingURL=acrossRoutes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acrossRoutes.d.ts","sourceRoot":"","sources":["../../../src/composedTrades/across/acrossRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEhE,
|
|
1
|
+
{"version":3,"file":"acrossRoutes.d.ts","sourceRoot":"","sources":["../../../src/composedTrades/across/acrossRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEhE,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,gBAAgB,EAAE,MAAM,CAAA;IACxB,iBAAiB,EAAE,MAAM,CAAA;IACzB,sBAAsB,EAAE,MAAM,CAAA;IAC9B,QAAQ,EAAE,OAAO,CAAA;CAClB;AAKD,eAAO,MAAM,iBAAiB,GAC5B,aAAa,MAAM,EACnB,WAAW,MAAM,KAChB,OAAO,CAAC,mBAAmB,EAAE,CAK/B,CAAA;AA4DD;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,mBAAmB,EAAE,EAC7B,cAAc,WAAW,EACzB,YAAY,WAAW,KACtB,mBAAmB,GAAG,SAyBxB,CAAA"}
|
|
@@ -1,116 +1,122 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
//
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
//
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
1
|
+
import { CurrencyHandler, getAcrossMulticallHandler, nativeOnChain, SupportedChainId, TradeType, } from '@1delta/lib-utils';
|
|
2
|
+
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
3
|
+
import fetchAcrossTradeWithSwap from './acrossWithSwap';
|
|
4
|
+
describe('fetchAcrossTradeWithSwap', () => {
|
|
5
|
+
beforeEach(() => {
|
|
6
|
+
vi.clearAllMocks();
|
|
7
|
+
});
|
|
8
|
+
const ACCOUNT = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045';
|
|
9
|
+
const WBTC_OP = {
|
|
10
|
+
chainId: SupportedChainId.OP_MAINNET,
|
|
11
|
+
address: '0x68f180fcCe6836688e9084f035309E29Bf0A2095',
|
|
12
|
+
decimals: 8,
|
|
13
|
+
symbol: 'WBTC',
|
|
14
|
+
name: 'Wrapped BTC',
|
|
15
|
+
};
|
|
16
|
+
const USDC_OP = {
|
|
17
|
+
chainId: SupportedChainId.OP_MAINNET,
|
|
18
|
+
address: '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85',
|
|
19
|
+
decimals: 6,
|
|
20
|
+
symbol: 'USDC',
|
|
21
|
+
name: 'USDC Stablecoin',
|
|
22
|
+
};
|
|
23
|
+
const USDC_ARB = {
|
|
24
|
+
chainId: SupportedChainId.ARBITRUM_NOVA,
|
|
25
|
+
address: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
|
|
26
|
+
decimals: 6,
|
|
27
|
+
symbol: 'USDC',
|
|
28
|
+
name: 'USDC Stablecoin',
|
|
29
|
+
};
|
|
30
|
+
it('Bridge Native', async () => {
|
|
31
|
+
// Receive Native only if receiver address is EOA
|
|
32
|
+
const fromCurrency = nativeOnChain(SupportedChainId.ARBITRUM_ONE);
|
|
33
|
+
const toCurrency = USDC_OP;
|
|
34
|
+
const bridgeToCurrency = CurrencyHandler.wrapped(toCurrency);
|
|
35
|
+
const input = {
|
|
36
|
+
tradeType: TradeType.EXACT_INPUT,
|
|
37
|
+
fromCurrency,
|
|
38
|
+
bridgeToCurrency,
|
|
39
|
+
toCurrency,
|
|
40
|
+
slippage: 1,
|
|
41
|
+
swapAmount: '1000000000000000000',
|
|
42
|
+
caller: ACCOUNT,
|
|
43
|
+
receiver: ACCOUNT,
|
|
44
|
+
order: 'FASTEST',
|
|
45
|
+
};
|
|
46
|
+
const { trade: result, receiver } = await fetchAcrossTradeWithSwap(input);
|
|
47
|
+
console.log('result', result, receiver);
|
|
48
|
+
expect(result).toBeDefined();
|
|
49
|
+
expect(result?.inputAmount.currency).toEqual(fromCurrency);
|
|
50
|
+
expect(result?.outputAmount.currency).toEqual(toCurrency);
|
|
51
|
+
expect(receiver).toEqual(ACCOUNT);
|
|
52
|
+
expect(result?.crossChainParams?.message).toBeUndefined();
|
|
53
|
+
});
|
|
54
|
+
it('Bridge Native -> WETH', async () => {
|
|
55
|
+
// Receive Wrapped Native only if receiver address is contract
|
|
56
|
+
const fromCurrency = nativeOnChain(SupportedChainId.ARBITRUM_ONE);
|
|
57
|
+
const toCurrency = CurrencyHandler.wrapped(nativeOnChain(SupportedChainId.OP_MAINNET));
|
|
58
|
+
const input = {
|
|
59
|
+
tradeType: TradeType.EXACT_INPUT,
|
|
60
|
+
fromCurrency,
|
|
61
|
+
bridgeToCurrency: toCurrency,
|
|
62
|
+
toCurrency,
|
|
63
|
+
slippage: 1,
|
|
64
|
+
swapAmount: '1000000000000000000',
|
|
65
|
+
caller: ACCOUNT,
|
|
66
|
+
receiver: ACCOUNT,
|
|
67
|
+
order: 'FASTEST',
|
|
68
|
+
};
|
|
69
|
+
const { trade: result, receiver } = await fetchAcrossTradeWithSwap(input);
|
|
70
|
+
console.log('result', result, receiver);
|
|
71
|
+
expect(result).toBeDefined();
|
|
72
|
+
expect(result?.inputAmount.currency).toEqual(fromCurrency);
|
|
73
|
+
expect(result?.outputAmount.currency).toEqual(toCurrency);
|
|
74
|
+
expect(receiver).toEqual(getAcrossMulticallHandler(SupportedChainId.OP_MAINNET));
|
|
75
|
+
expect(result?.crossChainParams?.message).toBeDefined();
|
|
76
|
+
});
|
|
77
|
+
it('Bridge USDC', async () => {
|
|
78
|
+
const fromCurrency = USDC_ARB;
|
|
79
|
+
const toCurrency = USDC_OP;
|
|
80
|
+
const input = {
|
|
81
|
+
tradeType: TradeType.EXACT_INPUT,
|
|
82
|
+
fromCurrency,
|
|
83
|
+
bridgeToCurrency: toCurrency,
|
|
84
|
+
toCurrency,
|
|
85
|
+
slippage: 1,
|
|
86
|
+
swapAmount: '1000000',
|
|
87
|
+
caller: ACCOUNT,
|
|
88
|
+
receiver: ACCOUNT,
|
|
89
|
+
order: 'FASTEST',
|
|
90
|
+
};
|
|
91
|
+
const { trade: result, receiver } = await fetchAcrossTradeWithSwap(input);
|
|
92
|
+
console.log('result', result, receiver);
|
|
93
|
+
expect(result).toBeDefined();
|
|
94
|
+
expect(result?.inputAmount.currency).toEqual(fromCurrency);
|
|
95
|
+
expect(result?.outputAmount.currency).toEqual(toCurrency);
|
|
96
|
+
expect(receiver).toEqual(ACCOUNT);
|
|
97
|
+
expect(result?.crossChainParams?.message).toBeUndefined();
|
|
98
|
+
});
|
|
99
|
+
it('Bridge + Swap', async () => {
|
|
100
|
+
const fromCurrency = USDC_ARB;
|
|
101
|
+
const bridgeToCurrency = USDC_OP;
|
|
102
|
+
const toCurrency = WBTC_OP;
|
|
103
|
+
const input = {
|
|
104
|
+
tradeType: TradeType.EXACT_INPUT,
|
|
105
|
+
fromCurrency,
|
|
106
|
+
bridgeToCurrency,
|
|
107
|
+
toCurrency,
|
|
108
|
+
slippage: 1,
|
|
109
|
+
swapAmount: '1000000',
|
|
110
|
+
caller: ACCOUNT,
|
|
111
|
+
receiver: ACCOUNT,
|
|
112
|
+
order: 'FASTEST',
|
|
113
|
+
};
|
|
114
|
+
const { trade: result, receiver } = await fetchAcrossTradeWithSwap(input);
|
|
115
|
+
console.log('result', result, receiver);
|
|
116
|
+
expect(result).toBeDefined();
|
|
117
|
+
expect(result?.inputAmount.currency).toEqual(fromCurrency);
|
|
118
|
+
expect(result?.outputAmount.currency).toEqual(toCurrency);
|
|
119
|
+
expect(receiver).toEqual(getAcrossMulticallHandler(SupportedChainId.OP_MAINNET));
|
|
120
|
+
expect(result?.crossChainParams?.message).toBeDefined();
|
|
121
|
+
});
|
|
122
|
+
}, 20000);
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { AxelarBaseInput, ComposedBridgeAdapter } from '../../types';
|
|
2
|
+
import { AxelarRoute } from './axelarRoutes';
|
|
3
|
+
import { AxelarWithSwapInput } from './axelarWithSwap';
|
|
4
|
+
export declare const AxelarAdapter: ComposedBridgeAdapter<AxelarBaseInput, AxelarWithSwapInput, AxelarRoute>;
|
|
5
|
+
//# sourceMappingURL=axelarAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"axelarAdapter.d.ts","sourceRoot":"","sources":["../../../src/composedTrades/axelar/axelarAdapter.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE5C,OAAiC,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAIhF,eAAO,MAAM,aAAa,EAAE,qBAAqB,CAC/C,eAAe,EACf,mBAAmB,EACnB,WAAW,CA0DZ,CAAA"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Bridge } from '@1delta/bridge-configs';
|
|
2
|
+
import { CurrencyHandler } from '@1delta/lib-utils';
|
|
3
|
+
import { getCurrencyGetter } from '../../registry';
|
|
4
|
+
import { fetchAxelarRoute } from './axelarRoutes';
|
|
5
|
+
import fetchAxelarTradeWithSwap from './axelarWithSwap';
|
|
6
|
+
const DUMMY_ADDRESS = '0x0000000000000000000000000000000000000001';
|
|
7
|
+
export const AxelarAdapter = {
|
|
8
|
+
async getRoute(fromChainId, toChainId) {
|
|
9
|
+
return fetchAxelarRoute(fromChainId, toChainId);
|
|
10
|
+
},
|
|
11
|
+
getBridgeCurrencies(route, input) {
|
|
12
|
+
const getCurrency = getCurrencyGetter();
|
|
13
|
+
const fromBridgeCurrency = getCurrency(input.fromCurrency?.chainId, route.fromBridgeToken);
|
|
14
|
+
const toBridgeCurrency = getCurrency(input.toCurrency?.chainId, route.toBridgeToken);
|
|
15
|
+
return {
|
|
16
|
+
fromBridgeCurrency,
|
|
17
|
+
toBridgeCurrency,
|
|
18
|
+
inputIsBridgeAsset: CurrencyHandler.equal(CurrencyHandler.wrapped(input.fromCurrency), fromBridgeCurrency),
|
|
19
|
+
outputIsBridgeAsset: CurrencyHandler.equal(CurrencyHandler.wrapped(input.toCurrency), toBridgeCurrency),
|
|
20
|
+
};
|
|
21
|
+
},
|
|
22
|
+
buildBridgeInput({ input, extendedAmount, bridgeSlippage, isDummy, fromBridgeCurrency, toBridgeCurrency, forwarder, }) {
|
|
23
|
+
return {
|
|
24
|
+
...input,
|
|
25
|
+
slippage: bridgeSlippage,
|
|
26
|
+
swapAmount: extendedAmount,
|
|
27
|
+
fromCurrency: fromBridgeCurrency,
|
|
28
|
+
bridgeToCurrency: toBridgeCurrency,
|
|
29
|
+
caller: forwarder,
|
|
30
|
+
receiver: isDummy ? DUMMY_ADDRESS : input.receiver,
|
|
31
|
+
};
|
|
32
|
+
},
|
|
33
|
+
async fetchBridgeTrade(bridge, input, controller) {
|
|
34
|
+
if (bridge !== Bridge.AXELAR)
|
|
35
|
+
throw new Error(`AxelarAdapter only supports Axelar bridge`);
|
|
36
|
+
return fetchAxelarTradeWithSwap(input, controller);
|
|
37
|
+
},
|
|
38
|
+
};
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
interface AxelarRoute {
|
|
1
|
+
export interface AxelarRoute {
|
|
2
2
|
fromBridgeToken: string;
|
|
3
3
|
toBridgeToken: string;
|
|
4
4
|
}
|
|
5
5
|
export declare function fetchAxelarRoute(fromChainId: string, toChainId: string): Promise<AxelarRoute | undefined>;
|
|
6
|
-
export {};
|
|
7
6
|
//# sourceMappingURL=axelarRoutes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"axelarRoutes.d.ts","sourceRoot":"","sources":["../../../src/composedTrades/axelar/axelarRoutes.ts"],"names":[],"mappings":"AAcA,
|
|
1
|
+
{"version":3,"file":"axelarRoutes.d.ts","sourceRoot":"","sources":["../../../src/composedTrades/axelar/axelarRoutes.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,WAAW;IAC1B,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAWlC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { RawCurrency } from '@1delta/lib-utils';
|
|
2
|
+
import { BaseBridgeInput, ComposedBridgeAdapter, ComposedBridgeInput } from '../../types';
|
|
3
|
+
interface Route {
|
|
4
|
+
fromBridgeCurrency: RawCurrency;
|
|
5
|
+
toBridgeCurrency: RawCurrency;
|
|
6
|
+
}
|
|
7
|
+
export declare const GaszipAdapter: ComposedBridgeAdapter<ComposedBridgeInput, BaseBridgeInput, Route>;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=gaszipAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gaszipAdapter.d.ts","sourceRoot":"","sources":["../../../src/composedTrades/gaszip/gaszipAdapter.ts"],"names":[],"mappings":"AACA,OAAO,EAAkC,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAG/E,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,aAAa,CAAA;AAIpB,UAAU,KAAK;IACb,kBAAkB,EAAE,WAAW,CAAA;IAC/B,gBAAgB,EAAE,WAAW,CAAA;CAC9B;AAED,eAAO,MAAM,aAAa,EAAE,qBAAqB,CAC/C,mBAAmB,EACnB,eAAe,EACf,KAAK,CA2DN,CAAA"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Bridge } from '@1delta/bridge-configs';
|
|
2
|
+
import { CurrencyHandler, nativeOnChain } from '@1delta/lib-utils';
|
|
3
|
+
import { fetchBridgeTrade } from '../../bridge';
|
|
4
|
+
const DUMMY_ADDRESS = '0x0000000000000000000000000000000000000001';
|
|
5
|
+
export const GaszipAdapter = {
|
|
6
|
+
async getRoute(fromChainId, toChainId, input) {
|
|
7
|
+
const fromBridgeCurrency = nativeOnChain(fromChainId);
|
|
8
|
+
const toBridgeCurrency = nativeOnChain(toChainId);
|
|
9
|
+
if (!CurrencyHandler.isNative(input.toCurrency)) {
|
|
10
|
+
throw new Error('Gaszip only supports native output');
|
|
11
|
+
}
|
|
12
|
+
return {
|
|
13
|
+
fromBridgeCurrency,
|
|
14
|
+
toBridgeCurrency,
|
|
15
|
+
};
|
|
16
|
+
},
|
|
17
|
+
getBridgeCurrencies(route, input) {
|
|
18
|
+
const { fromBridgeCurrency, toBridgeCurrency } = route;
|
|
19
|
+
return {
|
|
20
|
+
fromBridgeCurrency,
|
|
21
|
+
toBridgeCurrency,
|
|
22
|
+
inputIsBridgeAsset: CurrencyHandler.equal(input.fromCurrency, route.fromBridgeCurrency),
|
|
23
|
+
outputIsBridgeAsset: true,
|
|
24
|
+
};
|
|
25
|
+
},
|
|
26
|
+
buildBridgeInput({ input, extendedAmount, bridgeSlippage, isDummy, fromBridgeCurrency, toBridgeCurrency, }) {
|
|
27
|
+
return {
|
|
28
|
+
tradeType: input.tradeType,
|
|
29
|
+
swapAmount: extendedAmount,
|
|
30
|
+
slippage: bridgeSlippage,
|
|
31
|
+
fromCurrency: fromBridgeCurrency,
|
|
32
|
+
toCurrency: toBridgeCurrency,
|
|
33
|
+
caller: isDummy ? DUMMY_ADDRESS : input.caller,
|
|
34
|
+
receiver: isDummy ? DUMMY_ADDRESS : input.receiver,
|
|
35
|
+
order: 'CHEAPEST',
|
|
36
|
+
};
|
|
37
|
+
},
|
|
38
|
+
async fetchBridgeTrade(bridge, input, controller) {
|
|
39
|
+
if (bridge !== Bridge.GASZIP)
|
|
40
|
+
throw new Error(`GaszipAdapter only supports Gaszip bridge`);
|
|
41
|
+
const trade = await fetchBridgeTrade(bridge, input, controller);
|
|
42
|
+
return {
|
|
43
|
+
trade,
|
|
44
|
+
};
|
|
45
|
+
},
|
|
46
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { RawCurrency } from '@1delta/lib-utils';
|
|
2
|
+
import { BaseBridgeInput, ComposedBridgeAdapter, ComposedBridgeInput } from '../../types';
|
|
3
|
+
interface Route {
|
|
4
|
+
fromBridgeCurrency: RawCurrency;
|
|
5
|
+
toBridgeCurrency: RawCurrency;
|
|
6
|
+
}
|
|
7
|
+
export declare const ComposableBridgeAdapter: ComposedBridgeAdapter<ComposedBridgeInput, BaseBridgeInput, Route>;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=composableBridgeAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composableBridgeAdapter.d.ts","sourceRoot":"","sources":["../../../src/composedTrades/general/composableBridgeAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAGhE,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,aAAa,CAAA;AAIpB,UAAU,KAAK;IACb,kBAAkB,EAAE,WAAW,CAAA;IAC/B,gBAAgB,EAAE,WAAW,CAAA;CAC9B;AAED,eAAO,MAAM,uBAAuB,EAAE,qBAAqB,CACzD,mBAAmB,EACnB,eAAe,EACf,KAAK,CA8CN,CAAA"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { CurrencyHandler } from '@1delta/lib-utils';
|
|
2
|
+
import { fetchBridgeTrade } from '../../bridge';
|
|
3
|
+
const DUMMY_ADDRESS = '0x0000000000000000000000000000000000000001';
|
|
4
|
+
export const ComposableBridgeAdapter = {
|
|
5
|
+
async getRoute(_fromChainId, _toChainId, input) {
|
|
6
|
+
if (!input.fromCurrency || !input.toCurrency)
|
|
7
|
+
return undefined;
|
|
8
|
+
const fromBridgeCurrency = input.fromCurrency;
|
|
9
|
+
const toBridgeCurrency = input.toCurrency;
|
|
10
|
+
return {
|
|
11
|
+
fromBridgeCurrency,
|
|
12
|
+
toBridgeCurrency,
|
|
13
|
+
};
|
|
14
|
+
},
|
|
15
|
+
getBridgeCurrencies(route, input) {
|
|
16
|
+
const { fromBridgeCurrency, toBridgeCurrency } = route;
|
|
17
|
+
return {
|
|
18
|
+
fromBridgeCurrency,
|
|
19
|
+
toBridgeCurrency,
|
|
20
|
+
inputIsBridgeAsset: CurrencyHandler.equal(input.fromCurrency, route.fromBridgeCurrency),
|
|
21
|
+
outputIsBridgeAsset: CurrencyHandler.equal(input.toCurrency, route.toBridgeCurrency),
|
|
22
|
+
};
|
|
23
|
+
},
|
|
24
|
+
buildBridgeInput({ input, extendedAmount, bridgeSlippage, isDummy }) {
|
|
25
|
+
return {
|
|
26
|
+
...input,
|
|
27
|
+
swapAmount: extendedAmount,
|
|
28
|
+
slippage: bridgeSlippage,
|
|
29
|
+
caller: isDummy ? DUMMY_ADDRESS : input.caller,
|
|
30
|
+
receiver: isDummy ? DUMMY_ADDRESS : input.receiver,
|
|
31
|
+
};
|
|
32
|
+
},
|
|
33
|
+
async fetchBridgeTrade(bridge, input, controller) {
|
|
34
|
+
const trade = await fetchBridgeTrade(bridge, input, controller);
|
|
35
|
+
return {
|
|
36
|
+
trade,
|
|
37
|
+
};
|
|
38
|
+
},
|
|
39
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Bridge } from '@1delta/bridge-configs';
|
|
2
|
+
import { GenericTrade } from '@1delta/lib-utils';
|
|
3
|
+
import { ComposedBridgeAdapter, ComposedBridgeInput } from '../../types';
|
|
4
|
+
export declare function composeBridgeTrade<Input extends ComposedBridgeInput, BridgeInput, Route>(bridge: Bridge, input: Input, adapter: ComposedBridgeAdapter<Input, BridgeInput, Route>, controller?: AbortController): Promise<GenericTrade | undefined>;
|
|
5
|
+
//# sourceMappingURL=composeBridgeTrade.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composeBridgeTrade.d.ts","sourceRoot":"","sources":["../../../src/composedTrades/general/composeBridgeTrade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAO/C,OAAO,EAGL,YAAY,EAKb,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAEL,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,aAAa,CAAA;AAOpB,wBAAsB,kBAAkB,CACtC,KAAK,SAAS,mBAAmB,EACjC,WAAW,EACX,KAAK,EAEL,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,qBAAqB,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,EACzD,UAAU,CAAC,EAAE,eAAe,GAC3B,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAqKnC"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { convertRawAmount, DeltaCallType, LendingCall, nativeOnChain, } from '@1delta/lib-utils';
|
|
2
|
+
import { CurrencyHandler, getSafeChainId, minimumAmountOutFromTrade, splitSlippage, TradeType, } from '@1delta/lib-utils';
|
|
3
|
+
import { createSwapAndBridgeCalldata, validateContracts } from '../utils';
|
|
4
|
+
import { fetchBestTrade, increaseAmountBySlippage, } from '../utils/multichainUtils';
|
|
5
|
+
export async function composeBridgeTrade(bridge, input, adapter, controller) {
|
|
6
|
+
if (!input.fromCurrency || !input.toCurrency)
|
|
7
|
+
return undefined;
|
|
8
|
+
if (input.tradeType === TradeType.EXACT_OUTPUT)
|
|
9
|
+
throw new Error('Exact-out not supported for composed bridge trades');
|
|
10
|
+
const isDummy = !input.caller || !input.receiver;
|
|
11
|
+
const fromChainId = getSafeChainId(input.fromCurrency.chainId);
|
|
12
|
+
const toChainId = getSafeChainId(input.toCurrency.chainId);
|
|
13
|
+
const { forwarder, composer } = validateContracts(fromChainId);
|
|
14
|
+
// 1. Route
|
|
15
|
+
const route = await adapter.getRoute(fromChainId, toChainId, input);
|
|
16
|
+
if (!route)
|
|
17
|
+
return undefined;
|
|
18
|
+
// 2. Bridge currencies
|
|
19
|
+
const { fromBridgeCurrency, toBridgeCurrency, inputIsBridgeAsset, outputIsBridgeAsset, } = adapter.getBridgeCurrencies(route, input);
|
|
20
|
+
// 3. Slippage split
|
|
21
|
+
const [swapSlippage, bridgeSlippage] = splitSlippage(input.slippage, inputIsBridgeAsset, outputIsBridgeAsset);
|
|
22
|
+
// 4. Optional source swap
|
|
23
|
+
let sourceSwapTrade;
|
|
24
|
+
if (!inputIsBridgeAsset) {
|
|
25
|
+
const swapInput = {
|
|
26
|
+
chainId: fromChainId,
|
|
27
|
+
tradeType: TradeType.EXACT_INPUT,
|
|
28
|
+
fromCurrency: input.fromCurrency,
|
|
29
|
+
toCurrency: fromBridgeCurrency,
|
|
30
|
+
slippage: swapSlippage,
|
|
31
|
+
swapAmount: input.swapAmount,
|
|
32
|
+
txOrigin: input.caller,
|
|
33
|
+
caller: forwarder,
|
|
34
|
+
receiver: forwarder,
|
|
35
|
+
disableComposer: true,
|
|
36
|
+
};
|
|
37
|
+
sourceSwapTrade = await fetchBestTrade(swapInput, controller);
|
|
38
|
+
}
|
|
39
|
+
// 5. Extend amount
|
|
40
|
+
const extendedAmount = sourceSwapTrade
|
|
41
|
+
? minimumAmountOutFromTrade(sourceSwapTrade, sourceSwapTrade.slippage).amount.toString()
|
|
42
|
+
: input.swapAmount;
|
|
43
|
+
// 6. Bridge trade
|
|
44
|
+
const bridgeInput = adapter.buildBridgeInput({
|
|
45
|
+
input,
|
|
46
|
+
route,
|
|
47
|
+
extendedAmount,
|
|
48
|
+
bridgeSlippage,
|
|
49
|
+
isDummy,
|
|
50
|
+
fromBridgeCurrency,
|
|
51
|
+
toBridgeCurrency,
|
|
52
|
+
forwarder,
|
|
53
|
+
composer,
|
|
54
|
+
});
|
|
55
|
+
const { trade, gasTrade, receiver } = await adapter.fetchBridgeTrade(bridge, bridgeInput, controller);
|
|
56
|
+
if (!trade)
|
|
57
|
+
return undefined;
|
|
58
|
+
// 7. Compose trades
|
|
59
|
+
const trades = [];
|
|
60
|
+
if (sourceSwapTrade)
|
|
61
|
+
trades.push(sourceSwapTrade);
|
|
62
|
+
if (gasTrade)
|
|
63
|
+
trades.push(gasTrade);
|
|
64
|
+
trades.push(trade);
|
|
65
|
+
// 8. Assemble
|
|
66
|
+
const assemble = async () => {
|
|
67
|
+
if (isDummy)
|
|
68
|
+
return undefined;
|
|
69
|
+
const fundsToPull = [];
|
|
70
|
+
const isWithdrawOrBorrow = input.preCalls?.some((c) => c.callType === DeltaCallType.LENDING &&
|
|
71
|
+
(c.lendingAction === LendingCall.DeltaCallLendingAction.WITHDRAW ||
|
|
72
|
+
c.lendingAction === LendingCall.DeltaCallLendingAction.BORROW)) ?? false;
|
|
73
|
+
if (!isWithdrawOrBorrow) {
|
|
74
|
+
fundsToPull.push({
|
|
75
|
+
address: input.fromCurrency.address,
|
|
76
|
+
amount: BigInt(input.swapAmount),
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
if (!gasTrade && trade.gasAmount) {
|
|
80
|
+
fundsToPull.push({
|
|
81
|
+
address: nativeOnChain(fromChainId).address,
|
|
82
|
+
amount: trade.gasAmount,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
const { calldata, value, to } = await createSwapAndBridgeCalldata(trades, input.caller, receiver ?? input.receiver, true, fundsToPull, false, true, input.preCalls);
|
|
86
|
+
return { EVM: { to, calldata, value: value.toString() } };
|
|
87
|
+
};
|
|
88
|
+
// 9. Output normalization
|
|
89
|
+
const outputAmount = sourceSwapTrade
|
|
90
|
+
? increaseAmountBySlippage(trade.outputAmount.amount, Number(swapSlippage))
|
|
91
|
+
: trade.outputAmount.amount;
|
|
92
|
+
return {
|
|
93
|
+
...trade,
|
|
94
|
+
inputAmount: CurrencyHandler.fromRawAmount(input.fromCurrency, input.swapAmount),
|
|
95
|
+
inputAmountRealized: convertRawAmount(input.swapAmount, input.fromCurrency.decimals),
|
|
96
|
+
outputAmount: CurrencyHandler.fromRawAmount(trade.outputAmount.currency, outputAmount),
|
|
97
|
+
outputAmountRealized: convertRawAmount(outputAmount, trade.outputAmount.currency.decimals),
|
|
98
|
+
stringified: trades.map((t) => t.stringified).join('-'),
|
|
99
|
+
target: composer,
|
|
100
|
+
approvalTarget: composer,
|
|
101
|
+
slippage: input.slippage,
|
|
102
|
+
assemble,
|
|
103
|
+
refresh: (o) => composeBridgeTrade(bridge, { ...input, slippage: o?.slippage ?? input.slippage }, adapter, controller),
|
|
104
|
+
gasAmount: gasTrade ? undefined : trade.gasAmount,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/composedTrades/general/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAA;AACzC,cAAc,sBAAsB,CAAA"}
|