@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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export
|
|
1
|
+
import { GenericTrade } from '@1delta/lib-utils';
|
|
2
|
+
import { BridgeInput } from '../types';
|
|
3
|
+
export declare const fetchExactInBridgeTrade: (input: BridgeInput, controller: AbortController) => Promise<GenericTrade | undefined>;
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/composedTrades/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/composedTrades/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGhD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AA8BtC,eAAO,MAAM,uBAAuB,GAClC,OAAO,WAAW,EAClB,YAAY,eAAe,KAC1B,OAAO,CAAC,YAAY,GAAG,SAAS,CAoBlC,CAAA"}
|
|
@@ -1,3 +1,40 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { Bridge } from '@1delta/bridge-configs';
|
|
2
|
+
import { fetchBridgeTrade as fetchBridgeTradeInternal } from '../bridge';
|
|
3
|
+
import { AcrossAdapter } from './across/acrossAdapter';
|
|
4
|
+
import { AxelarAdapter } from './axelar/axelarAdapter';
|
|
5
|
+
import { GaszipAdapter } from './gaszip/gaszipAdapter';
|
|
6
|
+
import { ComposableBridgeAdapter, composeBridgeTrade } from './general';
|
|
7
|
+
const composedAdapters = {
|
|
8
|
+
[Bridge.ACROSS]: AcrossAdapter,
|
|
9
|
+
[Bridge.AXELAR]: AxelarAdapter,
|
|
10
|
+
[Bridge.GASZIP]: GaszipAdapter,
|
|
11
|
+
};
|
|
12
|
+
const composableBridgeSet = new Set([
|
|
13
|
+
Bridge.BUTTER,
|
|
14
|
+
// takes too long, should work though
|
|
15
|
+
Bridge.CROSSCURVE,
|
|
16
|
+
// cannot be called by contracts
|
|
17
|
+
// Bridge.LAYERSWAP,
|
|
18
|
+
Bridge.LIFI,
|
|
19
|
+
// untested
|
|
20
|
+
// Bridge.ORBITER,
|
|
21
|
+
// untested
|
|
22
|
+
// Bridge.SQUID_V1,
|
|
23
|
+
Bridge.SQUID_V2,
|
|
24
|
+
Bridge.STARGATE_BUS,
|
|
25
|
+
Bridge.STARGATE_TAXI,
|
|
26
|
+
Bridge.SYMBIOSIS,
|
|
27
|
+
Bridge.XY,
|
|
28
|
+
]);
|
|
29
|
+
export const fetchExactInBridgeTrade = async (input, controller) => {
|
|
30
|
+
const { bridge, input: internalInput } = input;
|
|
31
|
+
const adapter = composedAdapters[bridge];
|
|
32
|
+
if (bridge === Bridge.ACROSS) {
|
|
33
|
+
console.log('Adapter is AcrossAdapter', adapter, internalInput);
|
|
34
|
+
}
|
|
35
|
+
if (adapter)
|
|
36
|
+
return composeBridgeTrade(bridge, internalInput, adapter, controller);
|
|
37
|
+
if (composableBridgeSet.has(bridge))
|
|
38
|
+
return composeBridgeTrade(bridge, internalInput, ComposableBridgeAdapter, controller);
|
|
39
|
+
return fetchBridgeTradeInternal(bridge, internalInput, controller);
|
|
40
|
+
};
|
|
@@ -1 +1 @@
|
|
|
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;;;;
|
|
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;;;;GAiRhC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
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,
|
|
3
|
+
import { buildMetaSwapParams, CurrencyHandler, encodeComposerCompose, getDeltaComposerProxyAddress, getForwarderAddress, minimumAmountInFromAmount, packCommands, TradeUtils, } from '@1delta/lib-utils';
|
|
4
4
|
import { encodePacked, pad } from 'viem';
|
|
5
5
|
import { createDeltaCalls } from '../../deltaCall';
|
|
6
6
|
export async function createSwapAndBridgeCalldata(trades, account, bridgeReceiver, sweep, fundsToPull = [], catchRevert = true, sweepDust = false, preCalls = [], postCalls = []) {
|
|
@@ -136,30 +136,6 @@ export async function createSwapAndBridgeCalldata(trades, account, bridgeReceive
|
|
|
136
136
|
else
|
|
137
137
|
transferInCommands.push(encodeTransferIn(address, forwarder, amount));
|
|
138
138
|
}
|
|
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
139
|
const preCommands = preComposerCommands.length > 0 ? preComposerCommands : transferInCommands;
|
|
164
140
|
const calldata = encodeComposerCompose(packCommands([
|
|
165
141
|
...preCommands,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/composedTrades/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAA;AAC7C,cAAc,0BAA0B,CAAA;AACxC,cAAc,mBAAmB,CAAA;AACjC,cAAc,yBAAyB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/composedTrades/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAA;AAC7C,cAAc,0BAA0B,CAAA;AACxC,cAAc,mBAAmB,CAAA;AACjC,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateContracts.d.ts","sourceRoot":"","sources":["../../../src/composedTrades/utils/validateContracts.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,iBAAiB,GAAI,SAAS,MAAM;;;CAQhD,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { getDeltaComposerProxyAddress, getForwarderAddress, } from '@1delta/lib-utils';
|
|
2
|
+
// Extract contract address validation
|
|
3
|
+
export const validateContracts = (chainId) => {
|
|
4
|
+
const forwarder = getForwarderAddress(chainId);
|
|
5
|
+
if (!forwarder)
|
|
6
|
+
throw new Error('Forwarder contract not found');
|
|
7
|
+
const composer = getDeltaComposerProxyAddress(chainId);
|
|
8
|
+
if (!composer)
|
|
9
|
+
throw new Error('Composer proxy contract not found');
|
|
10
|
+
return { forwarder, composer };
|
|
11
|
+
};
|
package/dist/core.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AACA,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,YAAY,EAEb,MAAM,mBAAmB,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;AAI1B,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;AAED,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"}
|
package/dist/core.js
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { Bridge } from '@1delta/bridge-configs';
|
|
2
2
|
import { TradeType, } from '@1delta/lib-utils';
|
|
3
|
-
import {
|
|
4
|
-
import { fetchBridgeTrade as fetchBridgeTradeInternal } from './bridge';
|
|
5
|
-
import { fetchAcrossTradeWithSwaps, fetchAxelarTradeWithSwaps, fetchGaszipTradeWithSwaps, } from './composedTrades';
|
|
3
|
+
import { fetchExactInBridgeTrade } from './composedTrades';
|
|
6
4
|
import { createDeltaCallsCalldata } from './deltaCall';
|
|
7
5
|
import { reverseQuote } from './utils';
|
|
8
6
|
export const fetchBridgeTrade = async (input, controller) => {
|
|
@@ -24,16 +22,6 @@ export const fetchBridgeTrade = async (input, controller) => {
|
|
|
24
22
|
};
|
|
25
23
|
return fetchExactInBridgeTrade(bridgeInput, controller);
|
|
26
24
|
};
|
|
27
|
-
const fetchExactInBridgeTrade = async (input, controller) => {
|
|
28
|
-
const { bridge, input: internalInput } = input;
|
|
29
|
-
if (bridge === Bridge.ACROSS)
|
|
30
|
-
return fetchAcrossTradeWithSwaps(internalInput, controller);
|
|
31
|
-
if (bridge === Bridge.AXELAR)
|
|
32
|
-
return fetchAxelarTradeWithSwaps(internalInput, controller);
|
|
33
|
-
if (bridge === Bridge.GASZIP && !isProductionEnv())
|
|
34
|
-
return fetchGaszipTradeWithSwaps(internalInput, controller);
|
|
35
|
-
return fetchBridgeTradeInternal(bridge, internalInput, controller);
|
|
36
|
-
};
|
|
37
25
|
export const assembleDeltaCalls = (chainId, calls, value, sweepTokensProps) => {
|
|
38
26
|
const { calldata, to } = createDeltaCallsCalldata(chainId, calls, sweepTokensProps);
|
|
39
27
|
return { calldata, to, value: value.toString() };
|
package/dist/index.d.ts
CHANGED
|
@@ -3,6 +3,8 @@ export { fetchBridgeTrade as fetchBridgeTradeWithoutComposed } from './bridge';
|
|
|
3
3
|
export * from './core';
|
|
4
4
|
export * from './initialize';
|
|
5
5
|
export type { getCurrencyGetter, getPriceGetter } from './registry';
|
|
6
|
+
export * from './tradeExecution';
|
|
7
|
+
export type { ApprovalInfo } from './tradeExecution/types';
|
|
6
8
|
export type { BridgeInput } from './types';
|
|
7
9
|
export { TradeAggregator } from '@1delta/aggregators';
|
|
8
10
|
export { Bridge, getBridges, getCowSwapSlippage, getSwapAggregators, } from '@1delta/bridge-configs';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +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,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AACnE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EACL,MAAM,EACN,UAAU,EACV,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,wBAAwB,CAAA;AAC/B,YAAY,EACV,MAAM,IAAI,YAAY,EACtB,MAAM,IAAI,YAAY,GACvB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,aAAa,EACb,SAAS,IAAI,eAAe,GAC7B,MAAM,qBAAqB,CAAA;AAC5B,YAAY,EACV,kBAAkB,EAClB,cAAc,EACd,SAAS,EACT,aAAa,EACb,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,4BAA4B,GAC7B,MAAM,mBAAmB,CAAA;AAC1B,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA"}
|
|
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,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AACnE,cAAc,kBAAkB,CAAA;AAChC,YAAY,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAC1D,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EACL,MAAM,EACN,UAAU,EACV,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,wBAAwB,CAAA;AAC/B,YAAY,EACV,MAAM,IAAI,YAAY,EACtB,MAAM,IAAI,YAAY,GACvB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,aAAa,EACb,SAAS,IAAI,eAAe,GAC7B,MAAM,qBAAqB,CAAA;AAC5B,YAAY,EACV,kBAAkB,EAClB,cAAc,EACd,SAAS,EACT,aAAa,EACb,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,4BAA4B,GAC7B,MAAM,mBAAmB,CAAA;AAC1B,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -2,6 +2,7 @@ export { fetchAggregatorTrade, getAvailableAggregators } from './aggregator';
|
|
|
2
2
|
export { fetchBridgeTrade as fetchBridgeTradeWithoutComposed } from './bridge';
|
|
3
3
|
export * from './core';
|
|
4
4
|
export * from './initialize';
|
|
5
|
+
export * from './tradeExecution';
|
|
5
6
|
export { TradeAggregator } from '@1delta/aggregators';
|
|
6
7
|
export { Bridge, getBridges, getCowSwapSlippage, getSwapAggregators, } from '@1delta/bridge-configs';
|
|
7
8
|
export { getBridgeIcon, getStatus as getBridgeStatus, } from '@1delta/bridge-core';
|
package/dist/initialize.d.ts
CHANGED
|
@@ -5,8 +5,8 @@ import { CurrencyGetter, PriceGetter } from '@1delta/lib-utils';
|
|
|
5
5
|
import { WalletClient } from 'viem';
|
|
6
6
|
type SdkConfig = {
|
|
7
7
|
isProductionEnv: boolean;
|
|
8
|
-
priceGetter
|
|
9
|
-
currencyGetter
|
|
8
|
+
priceGetter?: PriceGetter;
|
|
9
|
+
currencyGetter?: CurrencyGetter;
|
|
10
10
|
loadChainData?: boolean;
|
|
11
11
|
loadSquidData?: boolean;
|
|
12
12
|
load1deltaConfigs?: boolean;
|
package/dist/initialize.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initialize.d.ts","sourceRoot":"","sources":["../src/initialize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACxE,OAAO,EACL,MAAM,EAGP,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAEL,cAAc,EACd,WAAW,EAEZ,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAWnC,KAAK,SAAS,GAAG;IACf,eAAe,EAAE,OAAO,CAAA;IACxB,WAAW,EAAE,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"initialize.d.ts","sourceRoot":"","sources":["../src/initialize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACxE,OAAO,EACL,MAAM,EAGP,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAEL,cAAc,EACd,WAAW,EAEZ,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAWnC,KAAK,SAAS,GAAG;IACf,eAAe,EAAE,OAAO,CAAA;IACxB,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B,mBAAmB,CAAC,EAAE,eAAe,EAAE,CAAA;IACvC,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAA;IAClC,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;CAChD,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,UAAU,GAAU,QAAQ,SAAS,KAAG,OAAO,CAAC,IAAI,CA0BhE,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,cAAc,YAAY,SAEzD,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { CurrencyGetter } from '@1delta/lib-utils';
|
|
2
|
-
export declare function registerCurrencyGetter(currencyGetter
|
|
2
|
+
export declare function registerCurrencyGetter(currencyGetter?: CurrencyGetter): void;
|
|
3
3
|
export declare function getCurrencyGetter(): CurrencyGetter;
|
|
4
4
|
//# sourceMappingURL=currency.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"currency.d.ts","sourceRoot":"","sources":["../../src/registry/currency.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAIlD,wBAAgB,sBAAsB,CAAC,cAAc,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"currency.d.ts","sourceRoot":"","sources":["../../src/registry/currency.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAIlD,wBAAgB,sBAAsB,CAAC,cAAc,CAAC,EAAE,cAAc,QAErE;AAED,wBAAgB,iBAAiB,IAAI,cAAc,CAkBlD"}
|
package/dist/registry/price.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { PriceGetter } from '@1delta/lib-utils';
|
|
2
|
-
export declare function registerPriceGetter(priceGetter
|
|
2
|
+
export declare function registerPriceGetter(priceGetter?: PriceGetter): void;
|
|
3
3
|
export declare function getPriceGetter(): PriceGetter;
|
|
4
4
|
//# sourceMappingURL=price.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"price.d.ts","sourceRoot":"","sources":["../../src/registry/price.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAI/C,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"price.d.ts","sourceRoot":"","sources":["../../src/registry/price.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAI/C,wBAAgB,mBAAmB,CAAC,WAAW,CAAC,EAAE,WAAW,QAE5D;AAED,wBAAgB,cAAc,IAAI,WAAW,CAiB5C"}
|
package/dist/registry/price.js
CHANGED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Status as BridgeStatus } from '@1delta/bridge-core';
|
|
2
|
+
import { GenericTrade } from '@1delta/lib-utils';
|
|
3
|
+
import { PublicClient } from 'viem';
|
|
4
|
+
/**
|
|
5
|
+
* Provide a current status from a trade
|
|
6
|
+
* @param fromHash tx hash on source chain
|
|
7
|
+
* @param trade trade object
|
|
8
|
+
* @returns status object
|
|
9
|
+
*/
|
|
10
|
+
export declare function getStatusFromTrade(fromHash: string, trade: GenericTrade, publicClient?: PublicClient): Promise<{
|
|
11
|
+
fromHash?: string | undefined;
|
|
12
|
+
toHash?: string | undefined;
|
|
13
|
+
message?: string;
|
|
14
|
+
statusInfo: {
|
|
15
|
+
status: BridgeStatus;
|
|
16
|
+
message?: string;
|
|
17
|
+
bridgeResponseResult?: any;
|
|
18
|
+
};
|
|
19
|
+
} | null>;
|
|
20
|
+
//# sourceMappingURL=getStatusFromTrade.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getStatusFromTrade.d.ts","sourceRoot":"","sources":["../../src/tradeExecution/getStatusFromTrade.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,MAAM,IAAI,YAAY,EACvB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,YAAY,EAAmB,MAAM,mBAAmB,CAAA;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAInC;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,YAAY,EACnB,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC;IACT,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAE3B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE;QACV,MAAM,EAAE,YAAY,CAAA;QACpB,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,oBAAoB,CAAC,EAAE,GAAG,CAAA;KAC3B,CAAA;CACF,GAAG,IAAI,CAAC,CA0ER"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { getStatus as getBridgeStatus, } from '@1delta/bridge-core';
|
|
2
|
+
import { getViemProvider } from '@1delta/lib-utils';
|
|
3
|
+
import { isBridge } from './isBridge';
|
|
4
|
+
/**
|
|
5
|
+
* Provide a current status from a trade
|
|
6
|
+
* @param fromHash tx hash on source chain
|
|
7
|
+
* @param trade trade object
|
|
8
|
+
* @returns status object
|
|
9
|
+
*/
|
|
10
|
+
export async function getStatusFromTrade(fromHash, trade, publicClient) {
|
|
11
|
+
const provider = publicClient ??
|
|
12
|
+
(await getViemProvider({ chainId: trade.inputAmount.currency.chainId }));
|
|
13
|
+
if (!isBridge(trade)) {
|
|
14
|
+
const receipt = await provider
|
|
15
|
+
?.getTransactionReceipt({ hash: fromHash })
|
|
16
|
+
.catch(() => null);
|
|
17
|
+
if (!receipt) {
|
|
18
|
+
return {
|
|
19
|
+
fromHash,
|
|
20
|
+
toHash: fromHash,
|
|
21
|
+
statusInfo: {
|
|
22
|
+
status: 'PENDING',
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
if (receipt.status === 'success') {
|
|
27
|
+
return {
|
|
28
|
+
fromHash,
|
|
29
|
+
toHash: fromHash,
|
|
30
|
+
statusInfo: {
|
|
31
|
+
status: 'DONE',
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
if (receipt.status === 'reverted') {
|
|
36
|
+
return {
|
|
37
|
+
fromHash,
|
|
38
|
+
toHash: fromHash,
|
|
39
|
+
statusInfo: {
|
|
40
|
+
message: 'Transaction reverted.',
|
|
41
|
+
status: 'FAILED',
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
fromHash,
|
|
47
|
+
toHash: fromHash,
|
|
48
|
+
statusInfo: {
|
|
49
|
+
status: 'PENDING',
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
const srcReceipt = await provider
|
|
54
|
+
?.getTransactionReceipt({ hash: fromHash })
|
|
55
|
+
.catch(() => null);
|
|
56
|
+
if (srcReceipt && srcReceipt.status === 'reverted') {
|
|
57
|
+
return {
|
|
58
|
+
fromHash,
|
|
59
|
+
toHash: fromHash,
|
|
60
|
+
statusInfo: {
|
|
61
|
+
message: 'Source chain transaction reverted.',
|
|
62
|
+
status: 'FAILED',
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
return await getBridgeStatus(trade.aggregator, {
|
|
67
|
+
fromChainId: trade.inputAmount.currency.chainId,
|
|
68
|
+
toChainId: trade.outputAmount.currency.chainId,
|
|
69
|
+
fromHash,
|
|
70
|
+
}, trade.crossChainParams);
|
|
71
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { GenericTrade } from '@1delta/lib-utils';
|
|
2
|
+
import { Address, Hex } from 'viem';
|
|
3
|
+
/**
|
|
4
|
+
* Build txn from trade
|
|
5
|
+
* We need to move this to the SDK
|
|
6
|
+
* @param trade sdk object that generates calldata via `assemble`
|
|
7
|
+
*/
|
|
8
|
+
export declare function getTransactionData(trade: GenericTrade): Promise<{
|
|
9
|
+
to: Address;
|
|
10
|
+
data: Hex;
|
|
11
|
+
value: bigint;
|
|
12
|
+
} | null>;
|
|
13
|
+
//# sourceMappingURL=getTransactionData.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getTransactionData.d.ts","sourceRoot":"","sources":["../../src/tradeExecution/getTransactionData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAA;AAEnC;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC;IACrE,EAAE,EAAE,OAAO,CAAA;IACX,IAAI,EAAE,GAAG,CAAA;IACT,KAAK,EAAE,MAAM,CAAA;CACd,GAAG,IAAI,CAAC,CAiDR"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build txn from trade
|
|
3
|
+
* We need to move this to the SDK
|
|
4
|
+
* @param trade sdk object that generates calldata via `assemble`
|
|
5
|
+
*/
|
|
6
|
+
export async function getTransactionData(trade) {
|
|
7
|
+
if (!trade)
|
|
8
|
+
return null;
|
|
9
|
+
if ('assemble' in trade &&
|
|
10
|
+
trade.assemble &&
|
|
11
|
+
typeof trade.assemble === 'function') {
|
|
12
|
+
const assembled = await trade.assemble();
|
|
13
|
+
const assembledItems = Array.isArray(assembled) ? assembled : [assembled];
|
|
14
|
+
for (const item of assembledItems) {
|
|
15
|
+
if (item && 'EVM' in item && item.EVM) {
|
|
16
|
+
const tx = item.EVM;
|
|
17
|
+
const calldata = tx.calldata ?? tx.data;
|
|
18
|
+
const toAddress = (tx.to ?? trade.target);
|
|
19
|
+
if (!toAddress) {
|
|
20
|
+
throw new Error('Missing transaction target address');
|
|
21
|
+
}
|
|
22
|
+
return {
|
|
23
|
+
to: toAddress,
|
|
24
|
+
data: calldata,
|
|
25
|
+
value: tx.value ?? 0n,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
if (item && item.transaction) {
|
|
29
|
+
const tx = item.transaction;
|
|
30
|
+
const calldata = tx.calldata ?? tx.data;
|
|
31
|
+
if (tx && calldata && tx.to) {
|
|
32
|
+
return {
|
|
33
|
+
to: tx.to,
|
|
34
|
+
data: calldata,
|
|
35
|
+
value: tx.value ?? 0n,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
if (item && item.to && (item.calldata || item.data)) {
|
|
40
|
+
const calldata = item.calldata ?? item.data;
|
|
41
|
+
return {
|
|
42
|
+
to: item.to,
|
|
43
|
+
data: calldata,
|
|
44
|
+
value: item.value ?? 0n,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
throw new Error('No assemble function found');
|
|
50
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { GenericTrade } from '@1delta/lib-utils';
|
|
2
|
+
import type { PublicClient, WalletClient } from 'viem';
|
|
3
|
+
import { ExecutionTracker, ApprovalInfo } from './types';
|
|
4
|
+
export declare function executeTrade(args: {
|
|
5
|
+
trade: GenericTrade;
|
|
6
|
+
account: string;
|
|
7
|
+
walletClient: WalletClient;
|
|
8
|
+
publicClient: PublicClient;
|
|
9
|
+
needsApproval: boolean;
|
|
10
|
+
approvals?: ApprovalInfo[];
|
|
11
|
+
}): ExecutionTracker;
|
|
12
|
+
export * from './types';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tradeExecution/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAO,YAAY,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAO3D,OAAO,EAAkB,gBAAgB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAExE,wBAAgB,YAAY,CAAC,IAAI,EAAE;IACjC,KAAK,EAAE,YAAY,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,YAAY,CAAA;IAC1B,YAAY,EAAE,YAAY,CAAA;IAC1B,aAAa,EAAE,OAAO,CAAA;IACtB,SAAS,CAAC,EAAE,YAAY,EAAE,CAAA;CAC3B,GAAG,gBAAgB,CAiMnB;AAED,cAAc,SAAS,CAAA"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { createApproveTransaction } from '@1delta/calldata-sdk';
|
|
2
|
+
import { zeroAddress } from 'viem';
|
|
3
|
+
import { getTransactionData } from './getTransactionData';
|
|
4
|
+
import { isBridge } from './isBridge';
|
|
5
|
+
import { signEvmDataOrMessage } from './signData';
|
|
6
|
+
import { trackTradeCompletion } from './trackTradeCompletion';
|
|
7
|
+
export function executeTrade(args) {
|
|
8
|
+
const listeners = new Set();
|
|
9
|
+
let cancelled = false;
|
|
10
|
+
const emit = (event) => {
|
|
11
|
+
listeners.forEach((l) => l(event));
|
|
12
|
+
};
|
|
13
|
+
const tracker = {
|
|
14
|
+
on: (listener) => listeners.add(listener),
|
|
15
|
+
off: (listener) => listeners.delete(listener),
|
|
16
|
+
cancel: () => {
|
|
17
|
+
cancelled = true;
|
|
18
|
+
},
|
|
19
|
+
done: null,
|
|
20
|
+
};
|
|
21
|
+
tracker.done = (async () => {
|
|
22
|
+
await Promise.resolve(); // required for listeners to be registered before event emitting
|
|
23
|
+
try {
|
|
24
|
+
// -----------------------------------------------------
|
|
25
|
+
// 1. APPROVAL
|
|
26
|
+
// -----------------------------------------------------
|
|
27
|
+
const chain = args.walletClient.chain;
|
|
28
|
+
if (!chain)
|
|
29
|
+
throw new Error('Missing chain on walletClient');
|
|
30
|
+
if (args.approvals && args.approvals.length > 0) {
|
|
31
|
+
for (const approval of args.approvals) {
|
|
32
|
+
if (approval.needsApproval && approval.token !== zeroAddress) {
|
|
33
|
+
emit({ type: 'approval:start' });
|
|
34
|
+
let approvalTxHash;
|
|
35
|
+
if (approval.approvalTransaction) {
|
|
36
|
+
const tx = approval.approvalTransaction;
|
|
37
|
+
if (!tx.to || !tx.data)
|
|
38
|
+
throw new Error('Invalid approvalTransaction');
|
|
39
|
+
approvalTxHash = await args.walletClient.sendTransaction({
|
|
40
|
+
to: tx.to,
|
|
41
|
+
data: tx.data,
|
|
42
|
+
value: tx.value ?? 0n,
|
|
43
|
+
account: args.account,
|
|
44
|
+
chain,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
const approveTx = createApproveTransaction(String(chain.id), args.account, approval.spender, approval.token, approval.requiredAmount);
|
|
49
|
+
approvalTxHash = await args.walletClient.sendTransaction({
|
|
50
|
+
to: approveTx.to,
|
|
51
|
+
data: approveTx.data,
|
|
52
|
+
value: approveTx.value ?? 0n,
|
|
53
|
+
account: args.account,
|
|
54
|
+
chain,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
emit({ type: 'approval:sent', txHash: approvalTxHash });
|
|
58
|
+
await args.publicClient.waitForTransactionReceipt({
|
|
59
|
+
hash: approvalTxHash,
|
|
60
|
+
});
|
|
61
|
+
emit({ type: 'approval:confirmed', txHash: approvalTxHash });
|
|
62
|
+
if (cancelled)
|
|
63
|
+
throw new Error('Cancelled');
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
const spender = args.trade?.approvalTarget || args.trade?.target;
|
|
68
|
+
if (args.needsApproval &&
|
|
69
|
+
args.trade?.inputAmount.currency.address !== zeroAddress) {
|
|
70
|
+
if (!spender)
|
|
71
|
+
throw new Error('Missing approval target');
|
|
72
|
+
emit({ type: 'approval:start' });
|
|
73
|
+
const approveTx = createApproveTransaction(String(chain.id), args.account, spender, args.trade?.inputAmount.currency.address, args.trade?.inputAmount.amount);
|
|
74
|
+
const approvalTxHash = await args.walletClient.sendTransaction({
|
|
75
|
+
to: approveTx.to,
|
|
76
|
+
data: approveTx.data,
|
|
77
|
+
value: approveTx.value ?? 0n,
|
|
78
|
+
account: args.account,
|
|
79
|
+
chain,
|
|
80
|
+
});
|
|
81
|
+
emit({ type: 'approval:sent', txHash: approvalTxHash });
|
|
82
|
+
await args.publicClient.waitForTransactionReceipt({
|
|
83
|
+
hash: approvalTxHash,
|
|
84
|
+
});
|
|
85
|
+
emit({ type: 'approval:confirmed', txHash: approvalTxHash });
|
|
86
|
+
}
|
|
87
|
+
if (cancelled)
|
|
88
|
+
throw new Error('Cancelled');
|
|
89
|
+
// -----------------------------------------------------
|
|
90
|
+
// 2. SIGN + SEND MAIN TRANSACTION / Execute Order
|
|
91
|
+
// -----------------------------------------------------
|
|
92
|
+
let txHash;
|
|
93
|
+
if (args.trade && args.trade.order) {
|
|
94
|
+
emit({ type: 'tx:signing' });
|
|
95
|
+
const orderSignature = args.trade.order.dataToSign
|
|
96
|
+
? await signEvmDataOrMessage(args.walletClient, args.account, args.trade.order.dataToSign)
|
|
97
|
+
: undefined;
|
|
98
|
+
await args.trade.order.broadcastIntent(orderSignature);
|
|
99
|
+
const result = await args.trade.order.trackIntent();
|
|
100
|
+
if (!result.EVM?.hash)
|
|
101
|
+
throw new Error('Transaction hash not found');
|
|
102
|
+
txHash = result.EVM.hash;
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
emit({ type: 'tx:signing' });
|
|
106
|
+
const txData = await getTransactionData(args.trade);
|
|
107
|
+
if (!txData)
|
|
108
|
+
throw new Error('Transaction creation failed');
|
|
109
|
+
txHash = await args.walletClient.sendTransaction({
|
|
110
|
+
...txData,
|
|
111
|
+
account: args.account,
|
|
112
|
+
chain,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
emit({ type: 'tx:sent', src: txHash });
|
|
116
|
+
const receipt = await args.publicClient.waitForTransactionReceipt({
|
|
117
|
+
hash: txHash,
|
|
118
|
+
});
|
|
119
|
+
if (receipt.status === 'reverted') {
|
|
120
|
+
emit({
|
|
121
|
+
type: 'error',
|
|
122
|
+
error: new Error('Source chain transaction failed (reverted)'),
|
|
123
|
+
src: txHash,
|
|
124
|
+
});
|
|
125
|
+
return { srcHash: txHash, completed: false };
|
|
126
|
+
}
|
|
127
|
+
emit({ type: 'tx:confirmed', src: txHash });
|
|
128
|
+
// -----------------------------------------------------
|
|
129
|
+
// 3. BRIDGE TRACKING
|
|
130
|
+
// -----------------------------------------------------
|
|
131
|
+
if (isBridge(args.trade)) {
|
|
132
|
+
emit({ type: 'tracking', srcHash: txHash });
|
|
133
|
+
const eventSummary = await trackTradeCompletion(txHash, args.trade, emit);
|
|
134
|
+
emit(eventSummary);
|
|
135
|
+
return { srcHash: txHash, dstHash: eventSummary.dst, completed: true };
|
|
136
|
+
}
|
|
137
|
+
// -----------------------------------------------------
|
|
138
|
+
// 4. NO BRIDGE → DONE
|
|
139
|
+
// -----------------------------------------------------
|
|
140
|
+
emit({ type: 'done', src: txHash });
|
|
141
|
+
return { srcHash: txHash, completed: true };
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
emit({ type: 'error', error });
|
|
145
|
+
return { completed: false };
|
|
146
|
+
}
|
|
147
|
+
})();
|
|
148
|
+
return tracker;
|
|
149
|
+
}
|
|
150
|
+
export * from './types';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isBridge.d.ts","sourceRoot":"","sources":["../../src/tradeExecution/isBridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,wBAAgB,QAAQ,CAAC,KAAK,CAAC,EAAE,YAAY,WAE5C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signData.d.ts","sourceRoot":"","sources":["../../src/tradeExecution/signData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAW,YAAY,EAAE,MAAM,MAAM,CAAA;AAE5C,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,aAAa,0BAwBtB"}
|