@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.
Files changed (58) hide show
  1. package/README.md +7 -4
  2. package/dist/aggregator/fetchAggregatorTrade.d.ts.map +1 -1
  3. package/dist/aggregator/fetchAggregatorTrade.js +40 -7
  4. package/dist/composedTrades/across/acrossWithSwap.d.ts +1 -1
  5. package/dist/composedTrades/across/acrossWithSwap.d.ts.map +1 -1
  6. package/dist/composedTrades/across/acrossWithSwap.js +2 -2
  7. package/dist/composedTrades/across/acrossWithSwaps.d.ts +2 -2
  8. package/dist/composedTrades/across/acrossWithSwaps.d.ts.map +1 -1
  9. package/dist/composedTrades/across/acrossWithSwaps.js +5 -3
  10. package/dist/composedTrades/axelar/axelarWithSwap.d.ts +3 -3
  11. package/dist/composedTrades/axelar/axelarWithSwap.d.ts.map +1 -1
  12. package/dist/composedTrades/axelar/axelarWithSwap.js +11 -11
  13. package/dist/composedTrades/axelar/axelarWithSwaps.d.ts +2 -2
  14. package/dist/composedTrades/axelar/axelarWithSwaps.d.ts.map +1 -1
  15. package/dist/composedTrades/axelar/axelarWithSwaps.js +6 -4
  16. package/dist/composedTrades/utils/createSwapAndBridgeCalldata.d.ts +2 -2
  17. package/dist/composedTrades/utils/createSwapAndBridgeCalldata.d.ts.map +1 -1
  18. package/dist/composedTrades/utils/createSwapAndBridgeCalldata.js +56 -12
  19. package/dist/composedTrades/utils/fetchBridgeAndGasTrade.d.ts +2 -2
  20. package/dist/composedTrades/utils/fetchBridgeAndGasTrade.d.ts.map +1 -1
  21. package/dist/composedTrades/utils/fetchBridgeAndGasTrade.js +3 -3
  22. package/dist/composedTrades/utils/multichainUtils.d.ts +2 -2
  23. package/dist/composedTrades/utils/multichainUtils.d.ts.map +1 -1
  24. package/dist/composedTrades/utils/multichainUtils.js +3 -17
  25. package/dist/core.d.ts +6 -2
  26. package/dist/core.d.ts.map +1 -1
  27. package/dist/core.js +29 -3
  28. package/dist/deltaCall/createDeltaCallsCalldata.d.ts.map +1 -1
  29. package/dist/deltaCall/createDeltaCallsCalldata.js +37 -9
  30. package/dist/deltaCall/toComposerCall.d.ts.map +1 -1
  31. package/dist/deltaCall/toComposerCall.js +69 -5
  32. package/dist/deltaCall/toForwarderCall.d.ts +1 -1
  33. package/dist/deltaCall/toForwarderCall.d.ts.map +1 -1
  34. package/dist/deltaCall/toForwarderCall.js +7 -2
  35. package/dist/index.d.ts +3 -2
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +0 -1
  38. package/dist/initialize.d.ts +14 -9
  39. package/dist/initialize.d.ts.map +1 -1
  40. package/dist/initialize.js +22 -18
  41. package/dist/registry/config.d.ts +7 -0
  42. package/dist/registry/config.d.ts.map +1 -0
  43. package/dist/registry/config.js +19 -0
  44. package/dist/registry/currency.d.ts +4 -0
  45. package/dist/registry/currency.d.ts.map +1 -0
  46. package/dist/registry/currency.js +19 -0
  47. package/dist/registry/index.d.ts +3 -6
  48. package/dist/registry/index.d.ts.map +1 -1
  49. package/dist/registry/index.js +3 -19
  50. package/dist/registry/price.d.ts +4 -0
  51. package/dist/registry/price.d.ts.map +1 -0
  52. package/dist/registry/price.js +23 -0
  53. package/dist/types/bridgeInput.d.ts +12 -9
  54. package/dist/types/bridgeInput.d.ts.map +1 -1
  55. package/dist/utils/utils.d.ts +2 -27
  56. package/dist/utils/utils.d.ts.map +1 -1
  57. package/dist/utils/utils.js +13 -27
  58. 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
- loadChainData: true,
28
- loadSquidData: true,
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":"AAKA,OAAO,EACL,kBAAkB,EAIlB,YAAY,EACZ,aAAa,EACd,MAAM,mBAAmB,CAAA;AAQ1B,eAAO,MAAM,oBAAoB,GAC/B,YAAY,MAAM,EAClB,OAAO,kBAAkB,GAAG,aAAa,EACzC,aAAa,eAAe,KAC3B,OAAO,CAAC,YAAY,GAAG,SAAS,CAclC,CAAA"}
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 { ChainType, ChainUtils, } from '@1delta/lib-utils';
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.additionalCalls && input.additionalCalls.length > 0;
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 = input.fromCurrency.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.additionalCalls);
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
- if (getSwapAggregators().includes(aggregator)) {
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
- return await fetchAggregatorTradeWithoutConfigs(aggregator, input, controller);
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;IAC1D,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"}
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.additionalCalls?.length ?? 0) > 0 || !toTokenIsBridgeToken;
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.additionalCalls ?? [];
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, RawCurrency } from '@1delta/lib-utils';
1
+ import { GenericTrade } from '@1delta/lib-utils';
2
2
  import { AcrossBaseInput } from '../../types';
3
- export declare const fetchAcrossTradeWithSwaps: (input: AcrossBaseInput, getCurrency: (chainId: string | undefined, tokenAddress: string | undefined) => RawCurrency | undefined, controller?: AbortController) => Promise<GenericTrade | undefined>;
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,EAOZ,WAAW,EAGZ,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,eAAe,EAAmB,MAAM,aAAa,CAAA;AAsB9D,eAAO,MAAM,yBAAyB,GACpC,OAAO,eAAe,EACtB,aAAa,CACX,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,YAAY,EAAE,MAAM,GAAG,SAAS,KAC7B,WAAW,GAAG,SAAS,EAC5B,aAAa,eAAe,KAC3B,OAAO,CAAC,YAAY,GAAG,SAAS,CAsKlC,CAAA;AAED,eAAe,yBAAyB,CAAA"}
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, getCurrency, controller) => {
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, getCurrency);
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, useGeneralPricesCallbackType } from '@1delta/lib-utils';
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, getPrices: useGeneralPricesCallbackType, controller?: AbortController) => Promise<{
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,EAEX,4BAA4B,EAC7B,MAAM,mBAAmB,CAAA;AAI1B,OAAO,EAAmB,eAAe,EAAmB,MAAM,aAAa,CAAA;AAS/E,MAAM,WAAW,mBAAoB,SAAQ,eAAe;IAC1D,gBAAgB,EAAE,WAAW,GAAG,SAAS,CAAA;CAC1C;AAED,eAAO,MAAM,wBAAwB,GACnC,OAAO,mBAAmB,EAC1B,WAAW,4BAA4B,EACvC,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,CA8CA,CAAA;AAED,eAAe,wBAAwB,CAAA"}
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, getPrices, controller) => {
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.additionalCalls?.calls.length ?? 0) > 0 || !toTokenIsBridgeToken;
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 }, getPrices, controller);
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, getPrices, controller);
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, getPrices, controller) => {
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.additionalCalls?.gasLimit ?? ADDITIONAL_CALLS_GAS_LIMIT;
50
- const additionalCalls = input.additionalCalls?.calls ?? [];
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, getPrices, controller);
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, getPrices)).trade;
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, getPrices, controller) => {
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, getPrices, controller);
144
+ const bridgeAndGasTrade = await fetchBridgeAndGasTrade(Bridge.AXELAR, input, controller);
145
145
  return bridgeAndGasTrade;
146
146
  }
147
147
  };
@@ -1,5 +1,5 @@
1
- import { GenericTrade, RawCurrency, useGeneralPricesCallbackType } from '@1delta/lib-utils';
1
+ import { GenericTrade } from '@1delta/lib-utils';
2
2
  import { AxelarBaseInput } from '../../types';
3
- export declare const fetchAxelarTradeWithSwaps: (input: AxelarBaseInput, getCurrency: (chainId: string | undefined, tokenAddress: string | undefined) => RawCurrency | undefined, getPrices: useGeneralPricesCallbackType, controller?: AbortController) => Promise<GenericTrade | undefined>;
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,EAMZ,WAAW,EAGX,4BAA4B,EAC7B,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAmB,eAAe,EAAE,MAAM,aAAa,CAAA;AAmB9D,eAAO,MAAM,yBAAyB,GACpC,OAAO,eAAe,EACtB,aAAa,CACX,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,YAAY,EAAE,MAAM,GAAG,SAAS,KAC7B,WAAW,GAAG,SAAS,EAC5B,WAAW,4BAA4B,EACvC,aAAa,eAAe,KAC3B,OAAO,CAAC,YAAY,GAAG,SAAS,CAsKlC,CAAA;AAED,eAAe,yBAAyB,CAAA"}
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, getCurrency, getPrices, controller) => {
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, getPrices, controller);
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, getCurrency, getPrices);
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 { DeltaCall, InternalTrade } from '@1delta/lib-utils';
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, additionalCalls?: DeltaCall[]): Promise<{
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,EAGL,SAAS,EAKT,aAAa,EAKd,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,eAAe,GAAE,SAAS,EAAO;;;;GA2OlC"}
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, additionalCalls = []) {
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 sweepCommands = [];
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
- for (const [currency, amount] of currencyToAmount.entries()) {
108
- const sweepCall = encodeSweep(currency.address, account, sweepDust ? 0n : amount, SweepType.VALIDATE);
109
- sweepCommands.push(sweepCall);
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 { composerCommands, forwarderCommands } = createDeltaCalls(sourceChainId, additionalCalls);
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
- ...transferInCommands,
123
- ...composerCommands,
124
- encodeExternalCall(forwarder, value, false, packCommands([
165
+ ...preCommands,
166
+ encodeExternalCall(forwarder, 0n, true, packCommands([
125
167
  ...commands,
126
- ...forwarderCommands,
127
- ...sweepCommands,
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, useGeneralPricesCallbackType } from '@1delta/lib-utils';
2
+ import { GenericTrade } from '@1delta/lib-utils';
3
3
  import { BaseBridgeInput } from '../../types';
4
- export declare const fetchBridgeAndGasTrade: (aggregator: Bridge, input: BaseBridgeInput, getPrices: useGeneralPricesCallbackType, controller?: AbortController) => Promise<{
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,EAEL,YAAY,EAEZ,4BAA4B,EAC7B,MAAM,mBAAmB,CAAA;AAG1B,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAG7C,eAAO,MAAM,sBAAsB,GACjC,YAAY,MAAM,EAClB,OAAO,eAAe,EACtB,WAAW,4BAA4B,EACvC,aAAa,eAAe,KAC3B,OAAO,CACR;IAAE,WAAW,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,YAAY,GAAG,SAAS,CAAA;CAAE,GAAG,SAAS,CA4E9E,CAAA"}
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, } from '@1delta/lib-utils';
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, getPrices, controller) => {
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, getPrices, controller);
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, useGeneralPricesCallbackType } from '@1delta/lib-utils';
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, getPrices: useGeneralPricesCallbackType, controller?: AbortController): Promise<InternalTrade | undefined>;
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,EAEb,WAAW,EAEX,4BAA4B,EAC7B,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,SAAS,EAAE,4BAA4B,EACvC,UAAU,CAAC,EAAE,eAAe,GAC3B,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAyCpC;AAID,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,MAAM,CAKR"}
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, PricePriority, TradeType, } from '@1delta/lib-utils';
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, getPrices, controller) {
65
+ export async function getExactOutputTrade(currencyIn, currencyOut, outputAmount, slippage, txOrigin, caller, controller) {
66
66
  if (outputAmount === 0n)
67
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;
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 { GenericTrade, RawCurrency, useGeneralPricesCallbackType } from '@1delta/lib-utils';
1
+ import { DeltaCall, EvmGenericCallInfo, GenericTrade } from '@1delta/lib-utils';
2
2
  import { BridgeInput } from './types';
3
- export declare const fetchBridgeTrade: (input: BridgeInput, getPrices: useGeneralPricesCallbackType, getCurrency: (chainId: string | undefined, tokenAddress: string | undefined) => RawCurrency, controller: AbortController) => Promise<GenericTrade | undefined>;
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
@@ -1 +1 @@
1
- {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,WAAW,EACX,4BAA4B,EAC7B,MAAM,mBAAmB,CAAA;AAS1B,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAErC,eAAO,MAAM,gBAAgB,GAC3B,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,CAiBlC,CAAA"}
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"}