@1delta/trade-sdk 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/README.md +63 -0
- package/dist/aggregator/fetchAggregatorTrade.d.ts +6 -0
- package/dist/aggregator/fetchAggregatorTrade.d.ts.map +1 -0
- package/dist/aggregator/fetchAggregatorTrade.js +14 -0
- package/dist/aggregator/getAvailableAggregators.d.ts +2 -0
- package/dist/aggregator/getAvailableAggregators.d.ts.map +1 -0
- package/dist/aggregator/getAvailableAggregators.js +11 -0
- package/dist/aggregator/index.d.ts +3 -0
- package/dist/aggregator/index.d.ts.map +1 -0
- package/dist/aggregator/index.js +2 -0
- package/dist/bridge/fetchBridgeTrade.d.ts +5 -0
- package/dist/bridge/fetchBridgeTrade.d.ts.map +1 -0
- package/dist/bridge/fetchBridgeTrade.js +195 -0
- package/dist/bridge/index.d.ts +2 -0
- package/dist/bridge/index.d.ts.map +1 -0
- package/dist/bridge/index.js +1 -0
- package/dist/composedTrades/across/acrossRoutes.d.ts +17 -0
- package/dist/composedTrades/across/acrossRoutes.d.ts.map +1 -0
- package/dist/composedTrades/across/acrossRoutes.js +64 -0
- package/dist/composedTrades/across/acrossWithSwap.d.ts +11 -0
- package/dist/composedTrades/across/acrossWithSwap.d.ts.map +1 -0
- package/dist/composedTrades/across/acrossWithSwap.integration.spec.d.ts +1 -0
- package/dist/composedTrades/across/acrossWithSwap.integration.spec.d.ts.map +1 -0
- package/dist/composedTrades/across/acrossWithSwap.integration.spec.js +116 -0
- package/dist/composedTrades/across/acrossWithSwap.js +122 -0
- package/dist/composedTrades/across/acrossWithSwaps.d.ts +5 -0
- package/dist/composedTrades/across/acrossWithSwaps.d.ts.map +1 -0
- package/dist/composedTrades/across/acrossWithSwaps.integration.spec.d.ts +1 -0
- package/dist/composedTrades/across/acrossWithSwaps.integration.spec.d.ts.map +1 -0
- package/dist/composedTrades/across/acrossWithSwaps.integration.spec.js +110 -0
- package/dist/composedTrades/across/acrossWithSwaps.js +121 -0
- package/dist/composedTrades/across/calldata/createAcrossMessage.d.ts +23 -0
- package/dist/composedTrades/across/calldata/createAcrossMessage.d.ts.map +1 -0
- package/dist/composedTrades/across/calldata/createAcrossMessage.js +69 -0
- package/dist/composedTrades/across/calldata/createAcrossMultiCallMessage.d.ts +14 -0
- package/dist/composedTrades/across/calldata/createAcrossMultiCallMessage.d.ts.map +1 -0
- package/dist/composedTrades/across/calldata/createAcrossMultiCallMessage.js +38 -0
- package/dist/composedTrades/across/calldata/types.d.ts +7 -0
- package/dist/composedTrades/across/calldata/types.d.ts.map +1 -0
- package/dist/composedTrades/across/calldata/types.js +1 -0
- package/dist/composedTrades/axelar/AxelarWithSwaps.d.ts +5 -0
- package/dist/composedTrades/axelar/AxelarWithSwaps.d.ts.map +1 -0
- package/dist/composedTrades/axelar/AxelarWithSwaps.js +117 -0
- package/dist/composedTrades/axelar/axelarRoutes.d.ts +7 -0
- package/dist/composedTrades/axelar/axelarRoutes.d.ts.map +1 -0
- package/dist/composedTrades/axelar/axelarRoutes.js +31 -0
- package/dist/composedTrades/axelar/axelarWithSwap.d.ts +12 -0
- package/dist/composedTrades/axelar/axelarWithSwap.d.ts.map +1 -0
- package/dist/composedTrades/axelar/axelarWithSwap.js +107 -0
- package/dist/composedTrades/axelar/constants.d.ts +9 -0
- package/dist/composedTrades/axelar/constants.d.ts.map +1 -0
- package/dist/composedTrades/axelar/constants.js +9 -0
- package/dist/composedTrades/axelar/squid/createSquidPayload.d.ts +22 -0
- package/dist/composedTrades/axelar/squid/createSquidPayload.d.ts.map +1 -0
- package/dist/composedTrades/axelar/squid/createSquidPayload.js +112 -0
- package/dist/composedTrades/axelar/squid/types.d.ts +15 -0
- package/dist/composedTrades/axelar/squid/types.d.ts.map +1 -0
- package/dist/composedTrades/axelar/squid/types.js +7 -0
- package/dist/composedTrades/gaszip/gaszipWithSwaps.d.ts +5 -0
- package/dist/composedTrades/gaszip/gaszipWithSwaps.d.ts.map +1 -0
- package/dist/composedTrades/gaszip/gaszipWithSwaps.js +114 -0
- package/dist/composedTrades/index.d.ts +4 -0
- package/dist/composedTrades/index.d.ts.map +1 -0
- package/dist/composedTrades/index.js +3 -0
- package/dist/composedTrades/utils/createSwapAndBridgeCalldata.d.ts +10 -0
- package/dist/composedTrades/utils/createSwapAndBridgeCalldata.d.ts.map +1 -0
- package/dist/composedTrades/utils/createSwapAndBridgeCalldata.js +146 -0
- package/dist/composedTrades/utils/fetchBridgeAndGasTrade.d.ts +8 -0
- package/dist/composedTrades/utils/fetchBridgeAndGasTrade.d.ts.map +1 -0
- package/dist/composedTrades/utils/fetchBridgeAndGasTrade.js +41 -0
- package/dist/composedTrades/utils/index.d.ts +3 -0
- package/dist/composedTrades/utils/index.d.ts.map +1 -0
- package/dist/composedTrades/utils/index.js +2 -0
- package/dist/composedTrades/utils/multichainUtils.d.ts +10 -0
- package/dist/composedTrades/utils/multichainUtils.d.ts.map +1 -0
- package/dist/composedTrades/utils/multichainUtils.js +105 -0
- package/dist/core.d.ts +5 -0
- package/dist/core.d.ts.map +1 -0
- package/dist/core.js +13 -0
- package/dist/data/chainData.d.ts +2 -0
- package/dist/data/chainData.d.ts.map +1 -0
- package/dist/data/chainData.js +20 -0
- package/dist/data/readinessStore.d.ts +5 -0
- package/dist/data/readinessStore.d.ts.map +1 -0
- package/dist/data/readinessStore.js +25 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/initialize.d.ts +11 -0
- package/dist/initialize.d.ts.map +1 -0
- package/dist/initialize.js +16 -0
- package/dist/types/aggregator.d.ts +11 -0
- package/dist/types/aggregator.d.ts.map +1 -0
- package/dist/types/aggregator.js +1 -0
- package/dist/types/bridgeInput.d.ts +32 -0
- package/dist/types/bridgeInput.d.ts.map +1 -0
- package/dist/types/bridgeInput.js +1 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +1 -0
- package/dist/utils/utils.d.ts +32 -0
- package/dist/utils/utils.d.ts.map +1 -0
- package/dist/utils/utils.js +41 -0
- package/package.json +35 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { Bridge } from '@1delta/bridge-configs';
|
|
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';
|
|
4
|
+
import { encodePacked, pad } from 'viem';
|
|
5
|
+
export async function createSwapAndBridgeCalldata(trades, account, bridgeReceiver, sweep, fundsToPull = [], catchRevert = true, sweepDust = false) {
|
|
6
|
+
if (!trades || trades.length === 0 || !isSameSourceChainId(trades))
|
|
7
|
+
throw new Error(`Invalid trades array. Must have at least one trade and all trades must be on the same chain`);
|
|
8
|
+
const sourceChainId = trades[0].inputAmount.currency.chainId;
|
|
9
|
+
const forwarder = getForwarderAddress(sourceChainId);
|
|
10
|
+
if (!forwarder)
|
|
11
|
+
throw new Error(`CallForwarder contract does not exist on chain ${sourceChainId}`);
|
|
12
|
+
const composerProxy = getDeltaComposerProxyAddress(sourceChainId);
|
|
13
|
+
if (!composerProxy)
|
|
14
|
+
throw new Error(`ComposerProxy contract does not exist on chain ${sourceChainId}`);
|
|
15
|
+
const commands = [];
|
|
16
|
+
const sweepTokens = TradeUtils.groupCurrency({
|
|
17
|
+
trades,
|
|
18
|
+
getCurrency: (t) => t.inputAmount.currency,
|
|
19
|
+
});
|
|
20
|
+
for (let i = 0; i < trades.length; i++) {
|
|
21
|
+
const currentTrade = trades[i];
|
|
22
|
+
const { aggregator, approvalTarget, target, inputAmount, outputAmount, crossChainParams, } = currentTrade;
|
|
23
|
+
const isFirstTrade = !!currentTrade.debitAmount;
|
|
24
|
+
if (!CurrencyHandler.isNative(inputAmount.currency) && approvalTarget) {
|
|
25
|
+
const approveCall = encodeApprove(inputAmount.currency.address, approvalTarget);
|
|
26
|
+
commands.push(approveCall);
|
|
27
|
+
}
|
|
28
|
+
if (aggregator === Bridge.ACROSS) {
|
|
29
|
+
if (!target)
|
|
30
|
+
throw new Error('Trade target not defined');
|
|
31
|
+
if (!crossChainParams)
|
|
32
|
+
throw new Error('Cross-chain params not defined');
|
|
33
|
+
const fixedFee = safeBigInt(crossChainParams.fixedFee);
|
|
34
|
+
const percFee = Number(safeBigInt(crossChainParams.percFee));
|
|
35
|
+
const message = !!crossChainParams.message
|
|
36
|
+
? crossChainParams.message
|
|
37
|
+
: '0x';
|
|
38
|
+
const deadline = Math.floor(Date.now() / 1000) + 180; // now + 3 minutes
|
|
39
|
+
/**
|
|
40
|
+
* Safely get the explicit currencies from the Across query
|
|
41
|
+
* Trade input/output are not reliable as they can be composite trades
|
|
42
|
+
*/
|
|
43
|
+
if (!crossChainParams.fromTokenDecimals)
|
|
44
|
+
throw new Error('From decimals not provided');
|
|
45
|
+
if (!crossChainParams.toTokenDecimals)
|
|
46
|
+
throw new Error('To decimals not provided');
|
|
47
|
+
const fromDecimals = Number(crossChainParams.fromTokenDecimals);
|
|
48
|
+
const toDecimals = Number(crossChainParams.toTokenDecimals);
|
|
49
|
+
if (CurrencyHandler.isNative(inputAmount.currency)) {
|
|
50
|
+
const bridgeCall = encodeAcrossBridgeNative(target, account, crossChainParams.fromTokenAddress, addressToBytes32Hex(crossChainParams.toTokenAddress), isFirstTrade ? inputAmount.amount : 0n, fixedFee, percFee, Number(crossChainParams.toChainId), fromDecimals, toDecimals, addressToBytes32Hex(bridgeReceiver), deadline, message);
|
|
51
|
+
commands.push(bridgeCall);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
const bridgeCall = encodeAcrossBridgeToken(target, account, crossChainParams.fromTokenAddress, addressToBytes32Hex(crossChainParams.toTokenAddress), isFirstTrade ? inputAmount.amount : 0n, fixedFee, percFee, Number(crossChainParams.toChainId), fromDecimals, toDecimals, addressToBytes32Hex(bridgeReceiver), deadline, message);
|
|
55
|
+
commands.push(bridgeCall);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
else if (aggregator === Bridge.STARGATE_TAXI) {
|
|
59
|
+
if (!crossChainParams)
|
|
60
|
+
throw new Error('Cross-chain params not defined');
|
|
61
|
+
const dstEid = Number(crossChainParams.dstEid);
|
|
62
|
+
const nativeFee = safeBigInt(crossChainParams.nativeFee);
|
|
63
|
+
const slippage = Number(crossChainParams.slippage);
|
|
64
|
+
const bridgeCall = encodeStargateV2BridgeSimpleTaxi(inputAmount.currency.address, target, dstEid, addressToBytes32Hex(bridgeReceiver), account, 0n, CurrencyHandler.isNative(inputAmount.currency), slippage, nativeFee);
|
|
65
|
+
commands.push(bridgeCall);
|
|
66
|
+
}
|
|
67
|
+
else if (aggregator === Bridge.AXELAR) {
|
|
68
|
+
if (!crossChainParams)
|
|
69
|
+
throw new Error('Cross-chain params not defined');
|
|
70
|
+
const message = !!crossChainParams.message
|
|
71
|
+
? crossChainParams.message
|
|
72
|
+
: '0x';
|
|
73
|
+
const bridgeCall = encodeSquidRouterCall(inputAmount.currency.address, crossChainParams.contractAddress, encodePackedString(crossChainParams.bridgeTokenSymbol), safeBigInt(0n), encodePackedString(crossChainParams.destinationChain), encodePackedString(crossChainParams.destinationAddress), message, account, crossChainParams.isExpressSupported, safeBigInt(crossChainParams.totalFeeInNative));
|
|
74
|
+
commands.push(bridgeCall);
|
|
75
|
+
}
|
|
76
|
+
else if (aggregator === Bridge.GASZIP) {
|
|
77
|
+
if (!crossChainParams)
|
|
78
|
+
throw new Error('Cross-chain params not defined');
|
|
79
|
+
const gasZipDestChainId = BigInt(crossChainParams.gasZipDestChainId);
|
|
80
|
+
const bridgeCall = encodeGasZipEvmBridge(crossChainParams.contractAddress, bridgeReceiver, safeBigInt(0n), gasZipDestChainId);
|
|
81
|
+
commands.push(bridgeCall);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
const { calldata, value, target, isSelfBalance } = await buildMetaSwapParams(currentTrade);
|
|
85
|
+
if (catchRevert) {
|
|
86
|
+
const sweepOnCatchCall = createCatchSweep(sweepTokens, account);
|
|
87
|
+
const swapCall = encodeTryExternalCall(target, value, isSelfBalance, false, calldata, sweepOnCatchCall);
|
|
88
|
+
commands.push(swapCall);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
const swapCall = encodeExternalCall(target, value, isSelfBalance, calldata);
|
|
92
|
+
commands.push(swapCall);
|
|
93
|
+
}
|
|
94
|
+
const sweepOutputToken = outputAmount.currency;
|
|
95
|
+
sweepTokens.push(sweepOutputToken);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if (sweep) {
|
|
99
|
+
const sameChainTrades = trades.filter((t) => t.inputAmount.currency.chainId === t.outputAmount.currency.chainId);
|
|
100
|
+
const currencyToAmount = TradeUtils.groupAmountByCurrency({
|
|
101
|
+
trades: sameChainTrades,
|
|
102
|
+
getCurrency: (t) => t.outputAmount.currency,
|
|
103
|
+
getAmount: (t) => minimumAmountInFromAmount(t.outputAmount, t.slippage),
|
|
104
|
+
});
|
|
105
|
+
for (const [currency, amount] of currencyToAmount.entries()) {
|
|
106
|
+
const sweepCall = encodeSweep(currency.address, account, sweepDust ? 0n : amount, SweepType.VALIDATE);
|
|
107
|
+
commands.push(sweepCall);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
let value = 0n;
|
|
111
|
+
const transferInCommands = [];
|
|
112
|
+
for (const { address, amount } of fundsToPull) {
|
|
113
|
+
if (CurrencyHandler.isNativeAddress(address, sourceChainId))
|
|
114
|
+
value += amount;
|
|
115
|
+
else
|
|
116
|
+
transferInCommands.push(encodeTransferIn(address, forwarder, amount));
|
|
117
|
+
}
|
|
118
|
+
const calldata = encodeComposerCompose(packCommands([
|
|
119
|
+
...transferInCommands,
|
|
120
|
+
encodeExternalCall(forwarder, value, false, packCommands(commands)),
|
|
121
|
+
]));
|
|
122
|
+
return { calldata, value, to: composerProxy };
|
|
123
|
+
}
|
|
124
|
+
function createCatchSweep(sweepTokens, receiver) {
|
|
125
|
+
const sweepCalls = sweepTokens.map((token) => encodeSweep(token.address, receiver, 0n, SweepType.VALIDATE));
|
|
126
|
+
return packCommands(sweepCalls);
|
|
127
|
+
}
|
|
128
|
+
const safeBigInt = (value) => {
|
|
129
|
+
try {
|
|
130
|
+
return BigInt(value);
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
return 0n;
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
const isSameSourceChainId = (trades) => {
|
|
137
|
+
const chainId = trades[0].inputAmount.currency.chainId;
|
|
138
|
+
return trades.every((trade) => trade.inputAmount.currency.chainId === chainId);
|
|
139
|
+
};
|
|
140
|
+
function addressToBytes32Hex(address) {
|
|
141
|
+
const addre32Bytes = pad(address, { size: 32, dir: 'left' });
|
|
142
|
+
return addre32Bytes;
|
|
143
|
+
}
|
|
144
|
+
function encodePackedString(data) {
|
|
145
|
+
return encodePacked(['string'], [data]);
|
|
146
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Bridge } from '@1delta/bridge-configs';
|
|
2
|
+
import { GenericTrade, useGeneralPricesCallbackType } from '@1delta/lib-utils';
|
|
3
|
+
import { BridgeInput } from '../../types';
|
|
4
|
+
export declare const fetchBridgeAndGasTrade: (aggregator: Bridge, input: BridgeInput, getPrices: useGeneralPricesCallbackType, controller?: AbortController) => Promise<{
|
|
5
|
+
bridgeTrade: GenericTrade;
|
|
6
|
+
gasTrade: GenericTrade | undefined;
|
|
7
|
+
} | undefined>;
|
|
8
|
+
//# sourceMappingURL=fetchBridgeAndGasTrade.d.ts.map
|
|
@@ -0,0 +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,EAEL,YAAY,EAEZ,4BAA4B,EAC7B,MAAM,mBAAmB,CAAA;AAG1B,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAGzC,eAAO,MAAM,sBAAsB,GACjC,YAAY,MAAM,EAClB,OAAO,WAAW,EAClB,WAAW,4BAA4B,EACvC,aAAa,eAAe,KAC3B,OAAO,CACR;IAAE,WAAW,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,YAAY,GAAG,SAAS,CAAA;CAAE,GAAG,SAAS,CAwE9E,CAAA"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { CurrencyHandler, nativeOnChain, } from '@1delta/lib-utils';
|
|
2
|
+
import { fetchBridgeTrade } from '../../bridge/fetchBridgeTrade';
|
|
3
|
+
import { getExactOutputTrade } from './multichainUtils';
|
|
4
|
+
export const fetchBridgeAndGasTrade = async (aggregator, input, getPrices, controller) => {
|
|
5
|
+
if (!input.fromCurrency || !input.toCurrency || !input.swapAmount)
|
|
6
|
+
return undefined;
|
|
7
|
+
const fromChainId = input.fromCurrency?.chainId;
|
|
8
|
+
const gasTradeSlippage = 1;
|
|
9
|
+
const fetchGasTrade = async (gasAmount) => {
|
|
10
|
+
const gasTrade = await getExactOutputTrade(input.fromCurrency, nativeOnChain(fromChainId), gasAmount, gasTradeSlippage, input.caller, input.caller, getPrices, controller);
|
|
11
|
+
return gasTrade;
|
|
12
|
+
};
|
|
13
|
+
const bridgeTrade = await fetchBridgeTrade(aggregator, input, controller);
|
|
14
|
+
if (!bridgeTrade)
|
|
15
|
+
return undefined;
|
|
16
|
+
if (!bridgeTrade.gasAmount || bridgeTrade.gasAmount === 0n)
|
|
17
|
+
return { gasTrade: undefined, bridgeTrade };
|
|
18
|
+
const bridgeTokenIsNative = CurrencyHandler.isNative(input.fromCurrency);
|
|
19
|
+
if (bridgeTokenIsNative) {
|
|
20
|
+
const adjustedAmount = BigInt(input.swapAmount) - bridgeTrade.gasAmount;
|
|
21
|
+
const updatedStargateTrade = await fetchBridgeTrade(aggregator, {
|
|
22
|
+
...input,
|
|
23
|
+
swapAmount: adjustedAmount.toString(),
|
|
24
|
+
}, controller);
|
|
25
|
+
if (updatedStargateTrade)
|
|
26
|
+
return { gasTrade: undefined, bridgeTrade: updatedStargateTrade };
|
|
27
|
+
}
|
|
28
|
+
const adjustedGasAmount = (bridgeTrade.gasAmount * 110n + BigInt(gasTradeSlippage)) / 100n; // increase by 10% + gas trade slippage
|
|
29
|
+
const gasTrade = await fetchGasTrade(adjustedGasAmount);
|
|
30
|
+
if (gasTrade) {
|
|
31
|
+
const adjustedAmount = BigInt(input.swapAmount) - gasTrade.inputAmount.amount;
|
|
32
|
+
const updatedStargateTrade = await fetchBridgeTrade(aggregator, {
|
|
33
|
+
...input,
|
|
34
|
+
swapAmount: adjustedAmount.toString(),
|
|
35
|
+
}, controller);
|
|
36
|
+
const isEnoughGas = gasTrade.outputAmount.amount >= (updatedStargateTrade?.gasAmount ?? 0n);
|
|
37
|
+
if (isEnoughGas && updatedStargateTrade)
|
|
38
|
+
return { gasTrade, bridgeTrade: updatedStargateTrade };
|
|
39
|
+
}
|
|
40
|
+
return undefined;
|
|
41
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/composedTrades/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA;AACxC,cAAc,mBAAmB,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { GenericTrade, InternalTrade, RawCurrency, useGeneralPricesCallbackType } from '@1delta/lib-utils';
|
|
2
|
+
import { AggregatorInput } from '../../types';
|
|
3
|
+
export interface BridgeTradeWithGas {
|
|
4
|
+
bridgeTrade: GenericTrade;
|
|
5
|
+
gasTrade: GenericTrade | undefined;
|
|
6
|
+
}
|
|
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, getPrices: useGeneralPricesCallbackType, controller?: AbortController): Promise<InternalTrade | undefined>;
|
|
9
|
+
export declare function increaseAmountBySlippage(amount: bigint, slippage: number): bigint;
|
|
10
|
+
//# sourceMappingURL=multichainUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multichainUtils.d.ts","sourceRoot":"","sources":["../../../src/composedTrades/utils/multichainUtils.ts"],"names":[],"mappings":"AAKA,OAAO,EAEL,YAAY,EACZ,aAAa,EAEb,WAAW,EAEX,4BAA4B,EAC7B,MAAM,mBAAmB,CAAA;AAE1B,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,CA0EvB;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,SAAS,EAAE,4BAA4B,EACvC,UAAU,CAAC,EAAE,eAAe,GAC3B,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAwCpC;AAID,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,MAAM,CAKR"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { fetchAggregatorTrade, getAvailableAggregators, TradeAggregator, } from '@1delta/aggregators';
|
|
2
|
+
import { devLog, PricePriority, TradeType, } from '@1delta/lib-utils';
|
|
3
|
+
import { reverseQuote } from '../../utils';
|
|
4
|
+
// --- Fetching Logic ---
|
|
5
|
+
const AGGREGATOR_TIMEOUT_MS = 500;
|
|
6
|
+
const PRIORITY_AGGREGATORS = [
|
|
7
|
+
TradeAggregator.Odos,
|
|
8
|
+
TradeAggregator.Kyberswap,
|
|
9
|
+
];
|
|
10
|
+
export async function fetchBestTrade(input, controller) {
|
|
11
|
+
const allAggregators = getAvailableAggregators(input.chainId).filter((aggregator) => aggregator !== TradeAggregator.Bebop &&
|
|
12
|
+
aggregator !== TradeAggregator.OneDelta &&
|
|
13
|
+
aggregator !== TradeAggregator.Wowmax);
|
|
14
|
+
const trades = [];
|
|
15
|
+
let timeout;
|
|
16
|
+
const collectionPromise = new Promise((resolve) => {
|
|
17
|
+
let settledCount = 0;
|
|
18
|
+
let isDone = false;
|
|
19
|
+
const done = () => {
|
|
20
|
+
if (!isDone) {
|
|
21
|
+
isDone = true;
|
|
22
|
+
if (timeout)
|
|
23
|
+
clearTimeout(timeout);
|
|
24
|
+
resolve();
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
if (allAggregators.length === 0) {
|
|
28
|
+
return done();
|
|
29
|
+
}
|
|
30
|
+
allAggregators.forEach((aggregator) => {
|
|
31
|
+
fetchAggregatorTrade(aggregator, input, controller)
|
|
32
|
+
.then((trade) => {
|
|
33
|
+
if (trade) {
|
|
34
|
+
if (trades.length === 0) {
|
|
35
|
+
timeout = setTimeout(done, AGGREGATOR_TIMEOUT_MS);
|
|
36
|
+
}
|
|
37
|
+
trades.push(trade);
|
|
38
|
+
}
|
|
39
|
+
})
|
|
40
|
+
.catch((error) => {
|
|
41
|
+
devLog(`Error for aggregator ${aggregator}`, error);
|
|
42
|
+
})
|
|
43
|
+
.finally(() => {
|
|
44
|
+
settledCount++;
|
|
45
|
+
if (settledCount === allAggregators.length) {
|
|
46
|
+
done();
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
await collectionPromise;
|
|
52
|
+
if (trades.length === 0) {
|
|
53
|
+
throw new Error(`Could not fetch a trade from any aggregator for input: ${JSON.stringify(input)}`);
|
|
54
|
+
}
|
|
55
|
+
for (const aggregator of PRIORITY_AGGREGATORS) {
|
|
56
|
+
const priorityTrade = trades.find((trade) => trade.aggregator === aggregator);
|
|
57
|
+
if (priorityTrade) {
|
|
58
|
+
devLog(`Returning prioritized trade from ${aggregator}`);
|
|
59
|
+
return priorityTrade;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
const orderedTrades = trades.sort((a, b) => b.outputAmountRealized - a.outputAmountRealized);
|
|
63
|
+
return orderedTrades[0];
|
|
64
|
+
}
|
|
65
|
+
export async function getExactOutputTrade(currencyIn, currencyOut, outputAmount, slippage, txOrigin, caller, getPrices, controller) {
|
|
66
|
+
if (outputAmount === 0n)
|
|
67
|
+
return undefined;
|
|
68
|
+
const [priceIn, priceOut] = getPrices([
|
|
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;
|
|
83
|
+
const quoteInput = {
|
|
84
|
+
chainId: currencyIn.chainId,
|
|
85
|
+
tradeType: TradeType.EXACT_INPUT,
|
|
86
|
+
fromCurrency: currencyIn,
|
|
87
|
+
toCurrency: currencyOut,
|
|
88
|
+
swapAmount: inputAmount.toString(),
|
|
89
|
+
slippage,
|
|
90
|
+
txOrigin,
|
|
91
|
+
caller,
|
|
92
|
+
receiver: caller,
|
|
93
|
+
simpleRoute: true,
|
|
94
|
+
flashSwap: undefined,
|
|
95
|
+
};
|
|
96
|
+
return await fetchBestTrade(quoteInput, controller);
|
|
97
|
+
}
|
|
98
|
+
// --- Type Guards & Data Structuring ---
|
|
99
|
+
export function increaseAmountBySlippage(amount, slippage) {
|
|
100
|
+
if (slippage > 100 || slippage < 0)
|
|
101
|
+
return 0n;
|
|
102
|
+
const slippageBps = BigInt(Math.round(slippage * 100));
|
|
103
|
+
const adjustedAmount = (amount * 10000n) / (10000n - slippageBps);
|
|
104
|
+
return adjustedAmount;
|
|
105
|
+
}
|
package/dist/core.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Bridge } from '@1delta/bridge-configs';
|
|
2
|
+
import { GenericTrade, RawCurrency, useGeneralPricesCallbackType } from '@1delta/lib-utils';
|
|
3
|
+
import { BridgeInput } from './types';
|
|
4
|
+
export declare const fetchBridgeTrade: (bridge: Bridge, input: BridgeInput, getPrices: useGeneralPricesCallbackType, getCurrency: (chainId: string | undefined, tokenAddress: string | undefined) => RawCurrency, controller: AbortController) => Promise<GenericTrade | undefined>;
|
|
5
|
+
//# sourceMappingURL=core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EACL,YAAY,EACZ,WAAW,EACX,4BAA4B,EAC7B,MAAM,mBAAmB,CAAA;AAS1B,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAErC,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,MAAM,EACd,OAAO,WAAW,EAClB,WAAW,4BAA4B,EACvC,aAAa,CACX,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,YAAY,EAAE,MAAM,GAAG,SAAS,KAC7B,WAAW,EAChB,YAAY,eAAe,KAC1B,OAAO,CAAC,YAAY,GAAG,SAAS,CAWlC,CAAA"}
|
package/dist/core.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Bridge } from '@1delta/bridge-configs';
|
|
2
|
+
import { isProductionEnv } from '@1delta/lib-utils';
|
|
3
|
+
import { fetchBridgeTrade as fetchBridgeTradeInternal } from './bridge';
|
|
4
|
+
import { fetchAcrossTradeWithSwaps, fetchAxelarTradeWithSwaps, fetchGaszipTradeWithSwaps, } from './composedTrades';
|
|
5
|
+
export const fetchBridgeTrade = async (bridge, input, getPrices, getCurrency, controller) => {
|
|
6
|
+
if (bridge === Bridge.ACROSS)
|
|
7
|
+
return fetchAcrossTradeWithSwaps(input, getCurrency, controller);
|
|
8
|
+
if (bridge === Bridge.AXELAR)
|
|
9
|
+
return fetchAxelarTradeWithSwaps(input, getCurrency, getPrices, controller);
|
|
10
|
+
if (bridge === Bridge.GASZIP && !isProductionEnv())
|
|
11
|
+
return fetchGaszipTradeWithSwaps(input, controller);
|
|
12
|
+
return fetchBridgeTradeInternal(bridge, input, controller);
|
|
13
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chainData.d.ts","sourceRoot":"","sources":["../../src/data/chainData.ts"],"names":[],"mappings":"AA2BA,wBAAsB,oBAAoB,kBAIzC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { initializeChainData } from '@1delta/data-sdk';
|
|
2
|
+
import { markChainsReady } from './readinessStore';
|
|
3
|
+
const baseUrlChains = 'https://raw.githubusercontent.com/1delta-DAO/chains/main';
|
|
4
|
+
const chains = baseUrlChains + '/data.json';
|
|
5
|
+
function inititalize(params) {
|
|
6
|
+
const { chainsOverride } = params;
|
|
7
|
+
initializeChainData({ chainsOverride });
|
|
8
|
+
markChainsReady();
|
|
9
|
+
}
|
|
10
|
+
async function fetchChainDataFromDir() {
|
|
11
|
+
const promises = [chains].map(async (a) => fetch(a).then(async (b) => await b.json()));
|
|
12
|
+
const [chainsOverride] = await Promise.all(promises);
|
|
13
|
+
return {
|
|
14
|
+
chainsOverride,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export async function inititalizeChainData() {
|
|
18
|
+
const params = await fetchChainDataFromDir();
|
|
19
|
+
inititalize(params);
|
|
20
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function getReadySnapshot(): boolean;
|
|
2
|
+
export declare function subscribeReady(listener: () => void): () => void;
|
|
3
|
+
export declare function markChainsReady(): void;
|
|
4
|
+
export declare function resetReady(): void;
|
|
5
|
+
//# sourceMappingURL=readinessStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readinessStore.d.ts","sourceRoot":"","sources":["../../src/data/readinessStore.ts"],"names":[],"mappings":"AAUA,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAG/D;AAED,wBAAgB,eAAe,SAM9B;AAGD,wBAAgB,UAAU,SAGzB"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
let state = { chains: false };
|
|
2
|
+
const listeners = new Set();
|
|
3
|
+
function emit() {
|
|
4
|
+
listeners.forEach((l) => l());
|
|
5
|
+
}
|
|
6
|
+
export function getReadySnapshot() {
|
|
7
|
+
return state !== false && state.chains;
|
|
8
|
+
}
|
|
9
|
+
export function subscribeReady(listener) {
|
|
10
|
+
listeners.add(listener);
|
|
11
|
+
return () => listeners.delete(listener);
|
|
12
|
+
}
|
|
13
|
+
export function markChainsReady() {
|
|
14
|
+
if (state === false)
|
|
15
|
+
state = { chains: false };
|
|
16
|
+
if (!state.chains) {
|
|
17
|
+
state = { ...state, chains: true };
|
|
18
|
+
emit();
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
// Optional (tests / hot reload)
|
|
22
|
+
export function resetReady() {
|
|
23
|
+
state = { chains: false };
|
|
24
|
+
emit();
|
|
25
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { fetchAggregatorTrade, getAvailableAggregators } from './aggregator';
|
|
2
|
+
export { fetchBridgeTrade as fetchBridgeTradeWithoutComposed } from './bridge';
|
|
3
|
+
export * from './core';
|
|
4
|
+
export * from './initialize';
|
|
5
|
+
export { TradeAggregator } from '@1delta/aggregators';
|
|
6
|
+
export { Bridge } from '@1delta/bridge-configs';
|
|
7
|
+
export { getStatus as getBridgeStatus } from '@1delta/bridge-core';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA;AAC5E,OAAO,EAAE,gBAAgB,IAAI,+BAA+B,EAAE,MAAM,UAAU,CAAA;AAC9E,cAAc,QAAQ,CAAA;AACtB,cAAc,cAAc,CAAA;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EAAE,SAAS,IAAI,eAAe,EAAE,MAAM,qBAAqB,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { fetchAggregatorTrade, getAvailableAggregators } from './aggregator';
|
|
2
|
+
export { fetchBridgeTrade as fetchBridgeTradeWithoutComposed } from './bridge';
|
|
3
|
+
export * from './core';
|
|
4
|
+
export * from './initialize';
|
|
5
|
+
export { TradeAggregator } from '@1delta/aggregators';
|
|
6
|
+
export { Bridge } from '@1delta/bridge-configs';
|
|
7
|
+
export { getStatus as getBridgeStatus } from '@1delta/bridge-core';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { WalletClient } from 'viem';
|
|
2
|
+
type SdkConfig = {
|
|
3
|
+
isProductionEnv: boolean;
|
|
4
|
+
loadChainData: boolean;
|
|
5
|
+
loadSquidData: boolean;
|
|
6
|
+
load1deltaConfigs: boolean;
|
|
7
|
+
};
|
|
8
|
+
export declare const initialize: (config: SdkConfig) => Promise<void>;
|
|
9
|
+
export declare const setWalletClient: (walletClient: WalletClient) => void;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=initialize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initialize.d.ts","sourceRoot":"","sources":["../src/initialize.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAInC,KAAK,SAAS,GAAG;IACf,eAAe,EAAE,OAAO,CAAA;IACxB,aAAa,EAAE,OAAO,CAAA;IACtB,aAAa,EAAE,OAAO,CAAA;IACtB,iBAAiB,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED,eAAO,MAAM,UAAU,GAAU,QAAQ,SAAS,KAAG,OAAO,CAAC,IAAI,CAKhE,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,cAAc,YAAY,SAEzD,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { fetchAndCacheSquidChains, getAllBridgeConfigs, setWalletClient as setWalletClientBridgeConfigs, } from '@1delta/bridge-configs';
|
|
2
|
+
import { registerConfig } from '@1delta/bridge-core';
|
|
3
|
+
import { setIsProduction } from '@1delta/lib-utils';
|
|
4
|
+
import { inititalizeChainData } from './data/chainData';
|
|
5
|
+
export const initialize = async (config) => {
|
|
6
|
+
setIsProduction(config.isProductionEnv);
|
|
7
|
+
if (config.load1deltaConfigs)
|
|
8
|
+
getAllBridgeConfigs().forEach(registerConfig);
|
|
9
|
+
if (config.loadChainData)
|
|
10
|
+
await inititalizeChainData();
|
|
11
|
+
if (config.loadSquidData)
|
|
12
|
+
await fetchAndCacheSquidChains();
|
|
13
|
+
};
|
|
14
|
+
export const setWalletClient = (walletClient) => {
|
|
15
|
+
setWalletClientBridgeConfigs(walletClient);
|
|
16
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { AggregatorApiInput, GenericTrade, OneDeltaInput, RawCurrency, RawCurrencyAmount } from '@1delta/lib-utils';
|
|
2
|
+
export type AggregatorState = GenericTrade;
|
|
3
|
+
export type AggregatorInput = AggregatorApiInput | OneDeltaInput;
|
|
4
|
+
export type MultiSwapAggregatorApiInput = Omit<AggregatorApiInput, 'swapAmount' | 'fromCurrency' | 'chainId'> & {
|
|
5
|
+
swapAmounts: string[];
|
|
6
|
+
fromCurrencies: RawCurrency[];
|
|
7
|
+
parsedAmount: RawCurrencyAmount | undefined;
|
|
8
|
+
destinationGasToSwap: bigint;
|
|
9
|
+
};
|
|
10
|
+
export type AggregatorApiValueSetter = (params: AggregatorApiInput) => void;
|
|
11
|
+
//# sourceMappingURL=aggregator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregator.d.ts","sourceRoot":"","sources":["../../src/types/aggregator.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,WAAW,EACX,iBAAiB,EAClB,MAAM,mBAAmB,CAAA;AAE1B,MAAM,MAAM,eAAe,GAAG,YAAY,CAAA;AAE1C,MAAM,MAAM,eAAe,GAAG,kBAAkB,GAAG,aAAa,CAAA;AAEhE,MAAM,MAAM,2BAA2B,GAAG,IAAI,CAC5C,kBAAkB,EAClB,YAAY,GAAG,cAAc,GAAG,SAAS,CAC1C,GAAG;IACF,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,cAAc,EAAE,WAAW,EAAE,CAAA;IAC7B,YAAY,EAAE,iBAAiB,GAAG,SAAS,CAAA;IAC3C,oBAAoB,EAAE,MAAM,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { GenericTrade, RawCurrency, RawCurrencyAmount, TradeType } from '@1delta/lib-utils';
|
|
2
|
+
export type BridgeState = GenericTrade;
|
|
3
|
+
export interface BridgeMultiInput {
|
|
4
|
+
slippage: number;
|
|
5
|
+
tradeType: TradeType;
|
|
6
|
+
fromCurrencies: RawCurrency[];
|
|
7
|
+
toCurrency: RawCurrency | undefined;
|
|
8
|
+
swapAmounts: string[];
|
|
9
|
+
caller: string;
|
|
10
|
+
receiver: string;
|
|
11
|
+
order: 'CHEAPEST' | 'FASTEST';
|
|
12
|
+
parsedAmount: RawCurrencyAmount | undefined;
|
|
13
|
+
usePermit?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface BridgeInput {
|
|
16
|
+
slippage: number;
|
|
17
|
+
tradeType: TradeType;
|
|
18
|
+
fromCurrency: RawCurrency | undefined;
|
|
19
|
+
toCurrency: RawCurrency | undefined;
|
|
20
|
+
swapAmount: string | undefined;
|
|
21
|
+
caller: string;
|
|
22
|
+
receiver: string;
|
|
23
|
+
order: 'CHEAPEST' | 'FASTEST';
|
|
24
|
+
message?: string;
|
|
25
|
+
usePermit?: boolean;
|
|
26
|
+
destinationGasLimit?: bigint;
|
|
27
|
+
}
|
|
28
|
+
export interface BridgeApiInput extends Omit<BridgeInput, 'slippage'> {
|
|
29
|
+
slippage: number | 'auto';
|
|
30
|
+
defaultSlippage: number;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=bridgeInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridgeInput.d.ts","sourceRoot":"","sources":["../../src/types/bridgeInput.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,WAAW,EACX,iBAAiB,EACjB,SAAS,EACV,MAAM,mBAAmB,CAAA;AAE1B,MAAM,MAAM,WAAW,GAAG,YAAY,CAAA;AAEtC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,SAAS,CAAA;IACpB,cAAc,EAAE,WAAW,EAAE,CAAA;IAC7B,UAAU,EAAE,WAAW,GAAG,SAAS,CAAA;IACnC,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,UAAU,GAAG,SAAS,CAAA;IAC7B,YAAY,EAAE,iBAAiB,GAAG,SAAS,CAAA;IAC3C,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,SAAS,CAAA;IACpB,YAAY,EAAE,WAAW,GAAG,SAAS,CAAA;IACrC,UAAU,EAAE,WAAW,GAAG,SAAS,CAAA;IACnC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,UAAU,GAAG,SAAS,CAAA;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC7B;AAED,MAAM,WAAW,cAAe,SAAQ,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC;IACnE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;IACzB,eAAe,EAAE,MAAM,CAAA;CACxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './utils';
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { RawCurrency, TradeType } from '@1delta/lib-utils';
|
|
2
|
+
export declare const emptyAggregatorInput: {
|
|
3
|
+
chainId: string;
|
|
4
|
+
fromCurrency: undefined;
|
|
5
|
+
toCurrency: undefined;
|
|
6
|
+
swapAmount: string;
|
|
7
|
+
slippage: number;
|
|
8
|
+
caller: string;
|
|
9
|
+
receiver: string;
|
|
10
|
+
tradeType: TradeType;
|
|
11
|
+
flashSwap: boolean;
|
|
12
|
+
routerConfig: {};
|
|
13
|
+
};
|
|
14
|
+
export declare const emptyMultiSwapAggregatorInput: {
|
|
15
|
+
fromCurrencies: never[];
|
|
16
|
+
toCurrency: undefined;
|
|
17
|
+
swapAmounts: never[];
|
|
18
|
+
slippage: number;
|
|
19
|
+
caller: string;
|
|
20
|
+
receiver: string;
|
|
21
|
+
tradeType: TradeType;
|
|
22
|
+
flashSwap: boolean;
|
|
23
|
+
routerConfig: {};
|
|
24
|
+
parsedAmount: undefined;
|
|
25
|
+
destinationGasToSwap: bigint;
|
|
26
|
+
};
|
|
27
|
+
export declare function reverseQuote(currencyIn: RawCurrency, currencyOut: RawCurrency, amountOut: string | bigint, priceIn: number, priceOut: number): {
|
|
28
|
+
currency: RawCurrency;
|
|
29
|
+
amount: bigint;
|
|
30
|
+
};
|
|
31
|
+
export declare function quote(currencyIn: RawCurrency, currencyOut: RawCurrency, amountIn: string | bigint, priceIn: number, priceOut: number): bigint;
|
|
32
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,WAAW,EAEX,SAAS,EACV,MAAM,mBAAmB,CAAA;AAG1B,eAAO,MAAM,oBAAoB;;;;;;;;;;;CAWhC,CAAA;AAED,eAAO,MAAM,6BAA6B;;;;;;;;;;;;CAYzC,CAAA;AAED,wBAAgB,YAAY,CAC1B,UAAU,EAAE,WAAW,EACvB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,MAAM,GAAG,MAAM,EAC1B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM;;;EASjB;AAED,wBAAgB,KAAK,CACnB,UAAU,EAAE,WAAW,EACvB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,MAAM,CAKR"}
|