@cowprotocol/sdk-bridging 3.1.2 → 3.3.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/dist/index.d.mts +3 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +110 -94
- package/dist/index.mjs +74 -41
- package/package.json +12 -12
package/dist/index.d.mts
CHANGED
|
@@ -38,6 +38,9 @@ type QuoteBridgeRequest = {
|
|
|
38
38
|
kind: OrderKind;
|
|
39
39
|
amount: bigint;
|
|
40
40
|
owner?: AccountAddress;
|
|
41
|
+
/** Final recipient on destination chain. Can be non-EVM (Solana/BTC).
|
|
42
|
+
* Used by bridge providers. Falls back to `receiver` then `account`. */
|
|
43
|
+
bridgeRecipient?: string;
|
|
41
44
|
} & WithSellToken & WithBuyToken & WithQuoter & WithTrader & Omit<TradeOptionalParameters, 'slippageBps'> & WithSwapAndBrideSlippage;
|
|
42
45
|
type QuoteBridgeRequestWithoutAmount = Omit<QuoteBridgeRequest, 'amount'>;
|
|
43
46
|
interface BridgeQuoteResult {
|
package/dist/index.d.ts
CHANGED
|
@@ -38,6 +38,9 @@ type QuoteBridgeRequest = {
|
|
|
38
38
|
kind: OrderKind;
|
|
39
39
|
amount: bigint;
|
|
40
40
|
owner?: AccountAddress;
|
|
41
|
+
/** Final recipient on destination chain. Can be non-EVM (Solana/BTC).
|
|
42
|
+
* Used by bridge providers. Falls back to `receiver` then `account`. */
|
|
43
|
+
bridgeRecipient?: string;
|
|
41
44
|
} & WithSellToken & WithBuyToken & WithQuoter & WithTrader & Omit<TradeOptionalParameters, 'slippageBps'> & WithSwapAndBrideSlippage;
|
|
42
45
|
type QuoteBridgeRequestWithoutAmount = Omit<QuoteBridgeRequest, 'amount'>;
|
|
43
46
|
interface BridgeQuoteResult {
|
package/dist/index.js
CHANGED
|
@@ -237,20 +237,21 @@ async function getCrossChainOrder(params) {
|
|
|
237
237
|
var import_sdk_trading2 = require("@cowprotocol/sdk-trading");
|
|
238
238
|
var import_sdk_order_book3 = require("@cowprotocol/sdk-order-book");
|
|
239
239
|
var import_sdk_config3 = require("@cowprotocol/sdk-config");
|
|
240
|
-
var
|
|
240
|
+
var import_sdk_common8 = require("@cowprotocol/sdk-common");
|
|
241
241
|
|
|
242
242
|
// src/BridgingSdk/helpers.ts
|
|
243
|
+
var import_sdk_common = require("@cowprotocol/sdk-common");
|
|
243
244
|
var getCacheKey = ({
|
|
244
245
|
id,
|
|
245
246
|
buyChainId,
|
|
246
247
|
sellChainId = "noSellChainID",
|
|
247
248
|
tokenAddress = "noTokenAddress"
|
|
248
249
|
}) => {
|
|
249
|
-
return `${id}-${buyChainId}-${sellChainId}-${
|
|
250
|
+
return `${id}-${buyChainId}-${sellChainId}-${(0, import_sdk_common.getAddressKey)(tokenAddress)}`;
|
|
250
251
|
};
|
|
251
252
|
|
|
252
253
|
// src/BridgingSdk/getQuoteWithoutBridge.ts
|
|
253
|
-
var
|
|
254
|
+
var import_sdk_common2 = require("@cowprotocol/sdk-common");
|
|
254
255
|
function getQuoteWithoutBridge(params) {
|
|
255
256
|
const { quoteBridgeRequest, advancedSettings, tradingSdk } = params;
|
|
256
257
|
const { sellTokenAddress, buyTokenAddress, amount, swapSlippageBps, ...rest } = quoteBridgeRequest;
|
|
@@ -263,19 +264,19 @@ function getQuoteWithoutBridge(params) {
|
|
|
263
264
|
amount: amount.toString()
|
|
264
265
|
};
|
|
265
266
|
const { signer: _, ...paramsToLog } = swapParams;
|
|
266
|
-
(0,
|
|
267
|
+
(0, import_sdk_common2.log)(`Single-chain swap: Delegate to trading SDK with params ${JSON.stringify(paramsToLog, import_sdk_common2.jsonWithBigintReplacer)}`);
|
|
267
268
|
return tradingSdk.getQuote(swapParams, advancedSettings);
|
|
268
269
|
}
|
|
269
270
|
|
|
270
271
|
// src/BridgingSdk/getQuoteWithBridge.ts
|
|
271
272
|
var import_sdk_trading = require("@cowprotocol/sdk-trading");
|
|
272
|
-
var
|
|
273
|
+
var import_sdk_common7 = require("@cowprotocol/sdk-common");
|
|
273
274
|
var import_sdk_order_book = require("@cowprotocol/sdk-order-book");
|
|
274
275
|
|
|
275
276
|
// src/BridgingSdk/getBridgeSignedHook.ts
|
|
276
|
-
var
|
|
277
|
+
var import_sdk_common3 = require("@cowprotocol/sdk-common");
|
|
277
278
|
async function getBridgeSignedHook(provider, bridgeRequest, { signer, hookGasLimit, swapResult, validToOverride }) {
|
|
278
|
-
const adapter = (0,
|
|
279
|
+
const adapter = (0, import_sdk_common3.getGlobalAdapter)();
|
|
279
280
|
const bridgingQuote = await provider.getQuote(bridgeRequest);
|
|
280
281
|
const unsignedBridgeCall = await provider.getUnsignedBridgeCall(bridgeRequest, bridgingQuote);
|
|
281
282
|
const deadline = BigInt(validToOverride ?? swapResult.orderToSign.validTo);
|
|
@@ -309,13 +310,14 @@ function getHookMockForCostEstimation(gasLimit) {
|
|
|
309
310
|
}
|
|
310
311
|
|
|
311
312
|
// src/BridgingSdk/getIntermediateSwapResult.ts
|
|
312
|
-
var
|
|
313
|
+
var import_sdk_common6 = require("@cowprotocol/sdk-common");
|
|
313
314
|
|
|
314
315
|
// src/BridgingSdk/determineIntermediateToken.ts
|
|
315
|
-
var
|
|
316
|
+
var import_sdk_common5 = require("@cowprotocol/sdk-common");
|
|
316
317
|
|
|
317
318
|
// src/BridgingSdk/tokenPriority.ts
|
|
318
319
|
var import_sdk_config2 = require("@cowprotocol/sdk-config");
|
|
320
|
+
var import_sdk_common4 = require("@cowprotocol/sdk-common");
|
|
319
321
|
var PRIORITY_STABLECOIN_TOKENS = {
|
|
320
322
|
[import_sdk_config2.SupportedChainId.MAINNET]: /* @__PURE__ */ new Set([
|
|
321
323
|
"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
|
@@ -364,7 +366,7 @@ var PRIORITY_STABLECOIN_TOKENS = {
|
|
|
364
366
|
[import_sdk_config2.SupportedChainId.LINEA]: /* @__PURE__ */ new Set([
|
|
365
367
|
"0x176211869ca2b568f2a7d4ee941e073a821ee1ff",
|
|
366
368
|
// USDC
|
|
367
|
-
"
|
|
369
|
+
"0xa219439258ca9da29e9cc4ce5596924745e12b93"
|
|
368
370
|
// USDT
|
|
369
371
|
]),
|
|
370
372
|
[import_sdk_config2.SupportedChainId.SEPOLIA]: /* @__PURE__ */ new Set([
|
|
@@ -376,10 +378,10 @@ function isStablecoinPriorityToken(chainId, tokenAddress) {
|
|
|
376
378
|
const chainTokens = PRIORITY_STABLECOIN_TOKENS[chainId];
|
|
377
379
|
if (!chainTokens)
|
|
378
380
|
return false;
|
|
379
|
-
return chainTokens.has(
|
|
381
|
+
return chainTokens.has((0, import_sdk_common4.getAddressKey)(tokenAddress));
|
|
380
382
|
}
|
|
381
383
|
function isCorrelatedToken(tokenAddress, correlatedTokens) {
|
|
382
|
-
return correlatedTokens.has(
|
|
384
|
+
return correlatedTokens.has((0, import_sdk_common4.getAddressKey)(tokenAddress));
|
|
383
385
|
}
|
|
384
386
|
|
|
385
387
|
// src/BridgingSdk/determineIntermediateToken.ts
|
|
@@ -393,11 +395,11 @@ async function determineIntermediateToken(sourceChainId, sourceTokenAddress, int
|
|
|
393
395
|
}
|
|
394
396
|
const correlatedTokens = await resolveCorrelatedTokens(sourceChainId, getCorrelatedTokens);
|
|
395
397
|
const sellTokenLike = { chainId: sourceChainId, address: sourceTokenAddress };
|
|
396
|
-
const isSellNativeOrWrapped = (0,
|
|
397
|
-
const filteredTokens = allowIntermediateEqSellToken ? intermediateTokens : intermediateTokens.filter((token) => !(0,
|
|
398
|
+
const isSellNativeOrWrapped = (0, import_sdk_common5.isNativeToken)(sellTokenLike) || (0, import_sdk_common5.isWrappedNativeToken)(sellTokenLike);
|
|
399
|
+
const filteredTokens = allowIntermediateEqSellToken ? intermediateTokens : intermediateTokens.filter((token) => !(0, import_sdk_common5.areAddressesEqual)(token.address, sourceTokenAddress));
|
|
398
400
|
const tokensWithPriority = filteredTokens.map((token) => {
|
|
399
|
-
const isNativeOrWrapped = (0,
|
|
400
|
-
if ((0,
|
|
401
|
+
const isNativeOrWrapped = (0, import_sdk_common5.isNativeToken)(token) || (0, import_sdk_common5.isWrappedNativeToken)(token);
|
|
402
|
+
if ((0, import_sdk_common5.areAddressesEqual)(token.address, sourceTokenAddress)) {
|
|
401
403
|
if (!(isSellNativeOrWrapped && isNativeOrWrapped)) {
|
|
402
404
|
return { token, priority: 5 /* HIGHEST */ };
|
|
403
405
|
}
|
|
@@ -408,7 +410,7 @@ async function determineIntermediateToken(sourceChainId, sourceTokenAddress, int
|
|
|
408
410
|
if (isCorrelatedToken(token.address, correlatedTokens)) {
|
|
409
411
|
return { token, priority: 3 /* MEDIUM */ };
|
|
410
412
|
}
|
|
411
|
-
if ((0,
|
|
413
|
+
if ((0, import_sdk_common5.isNativeToken)(token) && !isSellNativeOrWrapped) {
|
|
412
414
|
return { token, priority: 2 /* LOW */ };
|
|
413
415
|
}
|
|
414
416
|
return { token, priority: 1 /* LOWEST */ };
|
|
@@ -429,7 +431,7 @@ async function resolveCorrelatedTokens(sourceChainId, getCorrelatedTokens) {
|
|
|
429
431
|
if (getCorrelatedTokens) {
|
|
430
432
|
try {
|
|
431
433
|
const tokens = await getCorrelatedTokens(sourceChainId);
|
|
432
|
-
return new Set(tokens.map((t) =>
|
|
434
|
+
return new Set(tokens.map((t) => (0, import_sdk_common5.getAddressKey)(t)));
|
|
433
435
|
} catch (error) {
|
|
434
436
|
console.warn(
|
|
435
437
|
"[determineIntermediateToken] Failed to fetch correlated tokens, falling back to basic priority",
|
|
@@ -456,9 +458,9 @@ async function getIntermediateSwapResult({
|
|
|
456
458
|
amount,
|
|
457
459
|
signer: signerLike
|
|
458
460
|
} = swapAndBridgeRequest;
|
|
459
|
-
const adapter = (0,
|
|
461
|
+
const adapter = (0, import_sdk_common6.getGlobalAdapter)();
|
|
460
462
|
const signer = signerLike ? adapter.createSigner(signerLike) : adapter.signer;
|
|
461
|
-
(0,
|
|
463
|
+
(0, import_sdk_common6.log)(
|
|
462
464
|
`Cross-chain ${kind} ${amount} ${sellTokenAddress} (source chain ${sellTokenChainId}) for ${buyTokenAddress} (target chain ${buyTokenChainId})`
|
|
463
465
|
);
|
|
464
466
|
const intermediateTokens = await getIntermediateTokens({
|
|
@@ -473,7 +475,7 @@ async function getIntermediateSwapResult({
|
|
|
473
475
|
params.advancedSettings?.getCorrelatedTokens,
|
|
474
476
|
allowIntermediateEqSellToken
|
|
475
477
|
);
|
|
476
|
-
(0,
|
|
478
|
+
(0, import_sdk_common6.log)(`Using ${intermediateToken?.name ?? intermediateToken?.address} as intermediate tokens`);
|
|
477
479
|
const bridgeRequestWithoutAmount = {
|
|
478
480
|
...swapAndBridgeRequest,
|
|
479
481
|
sellTokenAddress: intermediateToken.address,
|
|
@@ -508,7 +510,7 @@ async function getIntermediateSwapResult({
|
|
|
508
510
|
signer
|
|
509
511
|
});
|
|
510
512
|
const intermediateTokenAmount = swapResult.amountsAndCosts.afterSlippage.buyAmount;
|
|
511
|
-
(0,
|
|
513
|
+
(0, import_sdk_common6.log)(
|
|
512
514
|
`Expected to receive ${intermediateTokenAmount} of the intermediate token (${(intermediateTokenAmount / 10n ** BigInt(intermediaryTokenDecimals)).toString()} formatted)`
|
|
513
515
|
);
|
|
514
516
|
return {
|
|
@@ -555,6 +557,10 @@ async function getSwapQuote(params) {
|
|
|
555
557
|
bridgeSlippageBps: _bridgeSlippageBps,
|
|
556
558
|
amount,
|
|
557
559
|
swapSlippageBps,
|
|
560
|
+
receiver: _receiver,
|
|
561
|
+
// Strip receiver from CoW API params — bridge providers override it after the quote
|
|
562
|
+
bridgeRecipient: _bridgeRecipient,
|
|
563
|
+
// Not relevant for CoW API
|
|
558
564
|
...rest
|
|
559
565
|
} = swapAndBridgeRequest;
|
|
560
566
|
const { sellTokenAddress: intermediateToken, sellTokenDecimals: intermediaryTokenDecimals } = bridgeRequestWithoutAmount;
|
|
@@ -570,10 +576,10 @@ async function getSwapQuote(params) {
|
|
|
570
576
|
signer
|
|
571
577
|
};
|
|
572
578
|
const { signer: _, ...swapParamsToLog } = swapParams;
|
|
573
|
-
(0,
|
|
579
|
+
(0, import_sdk_common6.log)(
|
|
574
580
|
`Getting a quote for the swap (sell token to buy intermediate token). Delegate to trading SDK with params: ${JSON.stringify(
|
|
575
581
|
swapParamsToLog,
|
|
576
|
-
|
|
582
|
+
import_sdk_common6.jsonWithBigintReplacer
|
|
577
583
|
)}`
|
|
578
584
|
);
|
|
579
585
|
const { result: swapResult, orderBookApi } = await tradingSdk.getQuoteResults(swapParams, advancedSettings);
|
|
@@ -659,7 +665,7 @@ async function getQuoteWithReceiverAccountBridge(provider, params) {
|
|
|
659
665
|
bridgeRequestWithoutAmount,
|
|
660
666
|
intermediateTokenAmount
|
|
661
667
|
});
|
|
662
|
-
(0,
|
|
668
|
+
(0, import_sdk_common7.log)(`Bridge receiver override: ${bridgeReceiverOverride}`);
|
|
663
669
|
swapResult.tradeParameters.receiver = bridgeReceiverOverride;
|
|
664
670
|
swapResult.appDataInfo = await (0, import_sdk_trading.mergeAppDataDoc)(swapResult.appDataInfo.doc, {
|
|
665
671
|
metadata: {
|
|
@@ -706,7 +712,7 @@ async function getQuoteWithHookBridge(provider, params) {
|
|
|
706
712
|
getBridgeHook: async (bridgeRequestWithoutAmount2) => {
|
|
707
713
|
const hookEstimatedGasLimit2 = await provider.getGasLimitEstimationForHook(bridgeRequestWithoutAmount2);
|
|
708
714
|
const mockedHook = getHookMockForCostEstimation(hookEstimatedGasLimit2);
|
|
709
|
-
(0,
|
|
715
|
+
(0, import_sdk_common7.log)(`Using mocked hook for swap gas estimation: ${JSON.stringify(mockedHook)}`);
|
|
710
716
|
return mockedHook;
|
|
711
717
|
}
|
|
712
718
|
});
|
|
@@ -732,9 +738,9 @@ async function getQuoteWithHookBridge(provider, params) {
|
|
|
732
738
|
validToOverride,
|
|
733
739
|
hookGasLimit
|
|
734
740
|
});
|
|
735
|
-
(0,
|
|
741
|
+
(0, import_sdk_common7.log)(`Bridge hook for swap: ${JSON.stringify(bridgeHook)}`);
|
|
736
742
|
swapResult.tradeParameters.receiver = bridgeHook.recipient;
|
|
737
|
-
(0,
|
|
743
|
+
(0, import_sdk_common7.log)(`App data for swap: appDataKeccak256=${appDataKeccak256}, fullAppData="${fullAppData}"`);
|
|
738
744
|
swapResult.appDataInfo = {
|
|
739
745
|
fullAppData,
|
|
740
746
|
appDataKeccak256,
|
|
@@ -751,10 +757,10 @@ async function getQuoteWithHookBridge(provider, params) {
|
|
|
751
757
|
}
|
|
752
758
|
};
|
|
753
759
|
}
|
|
754
|
-
(0,
|
|
760
|
+
(0, import_sdk_common7.log)(`Using gas limit: ${hookEstimatedGasLimit}`);
|
|
755
761
|
const result = await getBridgeProviderQuote(
|
|
756
762
|
// Sign the hooks with quoteSigner if provided
|
|
757
|
-
quoteSigner ? (0,
|
|
763
|
+
quoteSigner ? (0, import_sdk_common7.getGlobalAdapter)().createSigner(quoteSigner) : signer,
|
|
758
764
|
// Use estimated hook gas limit if quoteSigner is provided, so we don't have to estimate the hook gas limit twice
|
|
759
765
|
// Moreover, since quoteSigner is not the real signer, the estimation will fail
|
|
760
766
|
hookEstimatedGasLimit
|
|
@@ -1196,14 +1202,14 @@ var BridgingSdk = class {
|
|
|
1196
1202
|
constructor(options, adapter) {
|
|
1197
1203
|
this.options = options;
|
|
1198
1204
|
if (adapter) {
|
|
1199
|
-
(0,
|
|
1205
|
+
(0, import_sdk_common8.setGlobalAdapter)(adapter);
|
|
1200
1206
|
}
|
|
1201
1207
|
const { providers, cacheConfig, ...restOptions } = options;
|
|
1202
1208
|
if (!providers || providers.length === 0) {
|
|
1203
1209
|
throw new Error("At least one bridge provider is required");
|
|
1204
1210
|
}
|
|
1205
1211
|
if (options.enableLogging !== void 0) {
|
|
1206
|
-
(0,
|
|
1212
|
+
(0, import_sdk_common8.enableLogging)(options.enableLogging);
|
|
1207
1213
|
}
|
|
1208
1214
|
const tradingSdk = options.tradingSdk ?? new import_sdk_trading2.TradingSdk({}, { enableLogging: options.enableLogging });
|
|
1209
1215
|
const orderBookApi = tradingSdk?.options.orderBookApi ?? new import_sdk_order_book3.OrderBookApi();
|
|
@@ -1214,12 +1220,12 @@ var BridgingSdk = class {
|
|
|
1214
1220
|
orderBookApi
|
|
1215
1221
|
};
|
|
1216
1222
|
this.cacheConfig = { ...DEFAULT_CACHE_CONFIG, ...cacheConfig };
|
|
1217
|
-
this.intermediateTokensCache = new
|
|
1223
|
+
this.intermediateTokensCache = new import_sdk_common8.TTLCache(
|
|
1218
1224
|
"bridging-intermediate-tokens",
|
|
1219
1225
|
this.cacheConfig.enabled,
|
|
1220
1226
|
this.cacheConfig.intermediateTokensTtl
|
|
1221
1227
|
);
|
|
1222
|
-
this.buyTokensCache = new
|
|
1228
|
+
this.buyTokensCache = new import_sdk_common8.TTLCache(
|
|
1223
1229
|
"bridging-buy-tokens",
|
|
1224
1230
|
this.cacheConfig.enabled,
|
|
1225
1231
|
this.cacheConfig.buyTokensTtl
|
|
@@ -1300,9 +1306,9 @@ var BridgingSdk = class {
|
|
|
1300
1306
|
const tokens = results.reduce((tokens2, result) => {
|
|
1301
1307
|
if (result.status === "fulfilled" && result.value.tokens) {
|
|
1302
1308
|
result.value.tokens.forEach((token) => {
|
|
1303
|
-
const
|
|
1304
|
-
if (!tokens2.get(
|
|
1305
|
-
tokens2.set(
|
|
1309
|
+
const addressKey = (0, import_sdk_common8.getAddressKey)(token.address);
|
|
1310
|
+
if (!tokens2.get(addressKey)) {
|
|
1311
|
+
tokens2.set(addressKey, token);
|
|
1306
1312
|
}
|
|
1307
1313
|
});
|
|
1308
1314
|
}
|
|
@@ -1433,7 +1439,7 @@ var BridgingSdk = class {
|
|
|
1433
1439
|
};
|
|
1434
1440
|
|
|
1435
1441
|
// src/providers/across/AcrossApi.ts
|
|
1436
|
-
var
|
|
1442
|
+
var import_sdk_common9 = require("@cowprotocol/sdk-common");
|
|
1437
1443
|
var ACROSS_API_URL = "https://app.across.to/api";
|
|
1438
1444
|
var AcrossApi = class {
|
|
1439
1445
|
constructor(options = {}) {
|
|
@@ -1499,7 +1505,7 @@ var AcrossApi = class {
|
|
|
1499
1505
|
async fetchApi(path, params, isValidResponse) {
|
|
1500
1506
|
const baseUrl = this.options.apiBaseUrl || ACROSS_API_URL;
|
|
1501
1507
|
const url = `${baseUrl}${path}?${new URLSearchParams(params).toString()}`;
|
|
1502
|
-
(0,
|
|
1508
|
+
(0, import_sdk_common9.log)(`Fetching Across API: GET ${url}. Params: ${JSON.stringify(params)}`);
|
|
1503
1509
|
const response = await fetch(url, {
|
|
1504
1510
|
method: "GET"
|
|
1505
1511
|
});
|
|
@@ -1538,14 +1544,14 @@ function isValidRoute(item) {
|
|
|
1538
1544
|
}
|
|
1539
1545
|
|
|
1540
1546
|
// src/providers/across/const/interfaces.ts
|
|
1541
|
-
var
|
|
1547
|
+
var import_sdk_common10 = require("@cowprotocol/sdk-common");
|
|
1542
1548
|
var ACROSS_DEPOSIT_EVENT_INTERFACE = () => {
|
|
1543
|
-
return (0,
|
|
1549
|
+
return (0, import_sdk_common10.getGlobalAdapter)().utils.createInterface([
|
|
1544
1550
|
"event FundsDeposited(bytes32 inputToken, bytes32 outputToken, uint256 inputAmount, uint256 outputAmount, uint256 indexed destinationChainId, uint256 indexed depositId, uint32 quoteTimestamp, uint32 fillDeadline, uint32 exclusivityDeadline, bytes32 indexed depositor, bytes32 recipient, bytes32 exclusiveRelayer, bytes message)"
|
|
1545
1551
|
]);
|
|
1546
1552
|
};
|
|
1547
1553
|
var COW_TRADE_EVENT_INTERFACE = () => {
|
|
1548
|
-
return (0,
|
|
1554
|
+
return (0, import_sdk_common10.getGlobalAdapter)().utils.createInterface([
|
|
1549
1555
|
"event Trade(address indexed owner, address sellToken, address buyToken, uint256 sellAmount, uint256 buyAmount, uint256 feeAmount, bytes orderUid)"
|
|
1550
1556
|
]);
|
|
1551
1557
|
};
|
|
@@ -1605,7 +1611,7 @@ var ACROSS_MATH_CONTRACT_ADDRESSES = {
|
|
|
1605
1611
|
|
|
1606
1612
|
// src/providers/across/util.ts
|
|
1607
1613
|
var import_sdk_order_book4 = require("@cowprotocol/sdk-order-book");
|
|
1608
|
-
var
|
|
1614
|
+
var import_sdk_common11 = require("@cowprotocol/sdk-common");
|
|
1609
1615
|
var import_json_stable_stringify = __toESM(require("json-stable-stringify"));
|
|
1610
1616
|
var PCT_100_PERCENT = 10n ** 18n;
|
|
1611
1617
|
function toBridgeQuoteResult(request, slippageBps, suggestedFees) {
|
|
@@ -1663,7 +1669,7 @@ function toAmountsAndCosts(request, slippageBps, suggestedFees) {
|
|
|
1663
1669
|
};
|
|
1664
1670
|
}
|
|
1665
1671
|
function bytes32ToAddress(address) {
|
|
1666
|
-
return (0,
|
|
1672
|
+
return (0, import_sdk_common11.getGlobalAdapter)().utils.decodeAbi(["address"], address).toString();
|
|
1667
1673
|
}
|
|
1668
1674
|
function assertValidPct(pct) {
|
|
1669
1675
|
if (pct > PCT_100_PERCENT || pct < 0n) {
|
|
@@ -1692,14 +1698,15 @@ function mapAcrossStatusToBridgeStatus(status) {
|
|
|
1692
1698
|
return AcrossStatusToBridgeStatus[status];
|
|
1693
1699
|
}
|
|
1694
1700
|
function getAcrossDepositEvents(chainId, logs) {
|
|
1695
|
-
const
|
|
1701
|
+
const addr = ACROSS_SPOOK_CONTRACT_ADDRESSES[chainId];
|
|
1702
|
+
const spookContractAddress = addr ? (0, import_sdk_common11.getAddressKey)(addr) : void 0;
|
|
1696
1703
|
if (!spookContractAddress) {
|
|
1697
1704
|
return [];
|
|
1698
1705
|
}
|
|
1699
1706
|
const acrossDepositInterface = ACROSS_DEPOSIT_EVENT_INTERFACE();
|
|
1700
1707
|
const ACROSS_DEPOSIT_EVENT_TOPIC = acrossDepositInterface.getEventTopic("FundsDeposited");
|
|
1701
1708
|
const depositEvents = logs.filter((log7) => {
|
|
1702
|
-
return log7.address
|
|
1709
|
+
return (0, import_sdk_common11.getAddressKey)(log7.address) === spookContractAddress && log7.topics[0] === ACROSS_DEPOSIT_EVENT_TOPIC;
|
|
1703
1710
|
});
|
|
1704
1711
|
return depositEvents.map((event) => {
|
|
1705
1712
|
const parsedLog = acrossDepositInterface.parseLog(event);
|
|
@@ -1741,7 +1748,7 @@ function getAcrossDepositEvents(chainId, logs) {
|
|
|
1741
1748
|
function getCowTradeEvents(chainId, logs, settlementContractOverride) {
|
|
1742
1749
|
const COW_TRADE_EVENT_TOPIC = COW_TRADE_EVENT_INTERFACE().getEventTopic("Trade");
|
|
1743
1750
|
const cowTradeEvents = logs.filter((log7) => {
|
|
1744
|
-
return ((0,
|
|
1751
|
+
return ((0, import_sdk_common11.isCoWSettlementContract)(log7.address, chainId) || (0, import_sdk_common11.areAddressesEqual)(settlementContractOverride?.[chainId], log7.address)) && log7.topics[0] === COW_TRADE_EVENT_TOPIC;
|
|
1745
1752
|
});
|
|
1746
1753
|
return cowTradeEvents.map((event) => {
|
|
1747
1754
|
const parsedLog = COW_TRADE_EVENT_INTERFACE().parseLog(event);
|
|
@@ -3541,11 +3548,11 @@ var ACROSS_SPOKE_POOL_ABI = [
|
|
|
3541
3548
|
];
|
|
3542
3549
|
|
|
3543
3550
|
// src/providers/across/createAcrossDepositCall.ts
|
|
3544
|
-
var
|
|
3551
|
+
var import_sdk_common12 = require("@cowprotocol/sdk-common");
|
|
3545
3552
|
var ERC20_BALANCE_OF_ABI = ["function balanceOf(address account) external view returns (uint256)"];
|
|
3546
3553
|
var ERC20_APPROVE_OF_ABI = ["function approve(address spender, uint256 amount) external returns (bool)"];
|
|
3547
3554
|
function getSpookPoolContract(sellTokenChainId) {
|
|
3548
|
-
const adapter = (0,
|
|
3555
|
+
const adapter = (0, import_sdk_common12.getGlobalAdapter)();
|
|
3549
3556
|
const spokePoolAddress = ACROSS_SPOOK_CONTRACT_ADDRESSES[sellTokenChainId];
|
|
3550
3557
|
if (!spokePoolAddress) {
|
|
3551
3558
|
throw new Error("Spoke pool address not found for chain: " + sellTokenChainId);
|
|
@@ -3556,7 +3563,7 @@ function getSpookPoolContract(sellTokenChainId) {
|
|
|
3556
3563
|
);
|
|
3557
3564
|
}
|
|
3558
3565
|
function getMathContract(sellTokenChainId) {
|
|
3559
|
-
const adapter = (0,
|
|
3566
|
+
const adapter = (0, import_sdk_common12.getGlobalAdapter)();
|
|
3560
3567
|
const mathContractAddress = ACROSS_MATH_CONTRACT_ADDRESSES[sellTokenChainId];
|
|
3561
3568
|
if (!mathContractAddress) {
|
|
3562
3569
|
throw new Error("Math contract address not found for chain: " + sellTokenChainId);
|
|
@@ -3567,14 +3574,14 @@ function getMathContract(sellTokenChainId) {
|
|
|
3567
3574
|
);
|
|
3568
3575
|
}
|
|
3569
3576
|
function getBalanceOfSellTokenContract(sellTokenAddress) {
|
|
3570
|
-
const adapter = (0,
|
|
3577
|
+
const adapter = (0, import_sdk_common12.getGlobalAdapter)();
|
|
3571
3578
|
return (0, import_sdk_weiroll.createWeirollContract)(
|
|
3572
3579
|
adapter.getContract(sellTokenAddress, ERC20_BALANCE_OF_ABI),
|
|
3573
3580
|
import_sdk_weiroll.WeirollCommandFlags.STATICCALL
|
|
3574
3581
|
);
|
|
3575
3582
|
}
|
|
3576
3583
|
function getApproveSellTokenContract(sellTokenAddress) {
|
|
3577
|
-
const adapter = (0,
|
|
3584
|
+
const adapter = (0, import_sdk_common12.getGlobalAdapter)();
|
|
3578
3585
|
return (0, import_sdk_weiroll.createWeirollContract)(adapter.getContract(sellTokenAddress, ERC20_APPROVE_OF_ABI), import_sdk_weiroll.WeirollCommandFlags.CALL);
|
|
3579
3586
|
}
|
|
3580
3587
|
function createAcrossDepositCall(params) {
|
|
@@ -3619,7 +3626,7 @@ function createAcrossDepositCall(params) {
|
|
|
3619
3626
|
}
|
|
3620
3627
|
|
|
3621
3628
|
// src/providers/across/getDepositParams.ts
|
|
3622
|
-
var
|
|
3629
|
+
var import_sdk_common13 = require("@cowprotocol/sdk-common");
|
|
3623
3630
|
async function getDepositParams(chainId, orderId, txReceipt, settlementContractOverride) {
|
|
3624
3631
|
const depositEvents = getAcrossDepositEvents(chainId, txReceipt.logs);
|
|
3625
3632
|
if (depositEvents.length === 0) {
|
|
@@ -3631,7 +3638,7 @@ async function getDepositParams(chainId, orderId, txReceipt, settlementContractO
|
|
|
3631
3638
|
return null;
|
|
3632
3639
|
const depositEvent = depositEvents[orderTradeIndex];
|
|
3633
3640
|
if (!depositEvent) {
|
|
3634
|
-
(0,
|
|
3641
|
+
(0, import_sdk_common13.log)(`Trade event found at index ${orderTradeIndex} but only ${depositEvents.length} deposit events available`);
|
|
3635
3642
|
return null;
|
|
3636
3643
|
}
|
|
3637
3644
|
return {
|
|
@@ -3650,14 +3657,14 @@ async function getDepositParams(chainId, orderId, txReceipt, settlementContractO
|
|
|
3650
3657
|
}
|
|
3651
3658
|
|
|
3652
3659
|
// src/providers/utils/getGasLimitEstimationForHook.ts
|
|
3653
|
-
var
|
|
3660
|
+
var import_sdk_common14 = require("@cowprotocol/sdk-common");
|
|
3654
3661
|
async function getGasLimitEstimationForHook({
|
|
3655
3662
|
cowShedSdk,
|
|
3656
3663
|
request,
|
|
3657
3664
|
extraGas,
|
|
3658
3665
|
extraGasProxyCreation
|
|
3659
3666
|
}) {
|
|
3660
|
-
const adapter = (0,
|
|
3667
|
+
const adapter = (0, import_sdk_common14.getGlobalAdapter)();
|
|
3661
3668
|
const proxyAddress = cowShedSdk.getCowShedAccount(request.sellTokenChainId, request.owner || request.account);
|
|
3662
3669
|
const proxyCode = await adapter.getCode(proxyAddress);
|
|
3663
3670
|
if (!proxyCode || proxyCode === "0x") {
|
|
@@ -3668,7 +3675,7 @@ async function getGasLimitEstimationForHook({
|
|
|
3668
3675
|
}
|
|
3669
3676
|
|
|
3670
3677
|
// src/providers/across/AcrossBridgeProvider.ts
|
|
3671
|
-
var
|
|
3678
|
+
var import_sdk_common15 = require("@cowprotocol/sdk-common");
|
|
3672
3679
|
var import_sdk_config5 = require("@cowprotocol/sdk-config");
|
|
3673
3680
|
var import_sdk_cow_shed = require("@cowprotocol/sdk-cow-shed");
|
|
3674
3681
|
var import_sdk_order_book5 = require("@cowprotocol/sdk-order-book");
|
|
@@ -3684,7 +3691,7 @@ var AcrossBridgeProvider = class {
|
|
|
3684
3691
|
constructor(options = {}, _adapter) {
|
|
3685
3692
|
const adapter = _adapter || options.cowShedOptions?.adapter;
|
|
3686
3693
|
if (adapter) {
|
|
3687
|
-
(0,
|
|
3694
|
+
(0, import_sdk_common15.setGlobalAdapter)(adapter);
|
|
3688
3695
|
}
|
|
3689
3696
|
this.api = new AcrossApi(options.apiOptions);
|
|
3690
3697
|
this.cowShedSdk = new import_sdk_cow_shed.CowShedSdk(adapter, options.cowShedOptions?.factoryOptions);
|
|
@@ -3713,7 +3720,7 @@ var AcrossBridgeProvider = class {
|
|
|
3713
3720
|
}
|
|
3714
3721
|
const { sellTokenChainId, buyTokenChainId, buyTokenAddress } = request;
|
|
3715
3722
|
const supportedTokensState = await this.getSupportedTokensState();
|
|
3716
|
-
const buyTokenAddressLower =
|
|
3723
|
+
const buyTokenAddressLower = (0, import_sdk_common15.getAddressKey)(buyTokenAddress);
|
|
3717
3724
|
const sourceTokens = supportedTokensState[sellTokenChainId];
|
|
3718
3725
|
const targetTokens = supportedTokensState[buyTokenChainId];
|
|
3719
3726
|
const targetTokenSymbol = targetTokens && targetTokens[buyTokenAddressLower]?.symbol?.toLowerCase();
|
|
@@ -3784,7 +3791,7 @@ var AcrossBridgeProvider = class {
|
|
|
3784
3791
|
return null;
|
|
3785
3792
|
}
|
|
3786
3793
|
const orderUid = order.uid;
|
|
3787
|
-
const adapter = (0,
|
|
3794
|
+
const adapter = (0, import_sdk_common15.getGlobalAdapter)();
|
|
3788
3795
|
const txReceipt = await adapter.getTransactionReceipt(txHash);
|
|
3789
3796
|
if (!txReceipt)
|
|
3790
3797
|
return null;
|
|
@@ -3820,7 +3827,7 @@ var AcrossBridgeProvider = class {
|
|
|
3820
3827
|
if (!this.supportedTokens) {
|
|
3821
3828
|
const supportedTokens = (await this.api.getSupportedTokens()).reduce((acc, val) => {
|
|
3822
3829
|
const data = acc[val.chainId] || {};
|
|
3823
|
-
data[val.address
|
|
3830
|
+
data[(0, import_sdk_common15.getAddressKey)(val.address)] = val;
|
|
3824
3831
|
acc[val.chainId] = data;
|
|
3825
3832
|
return acc;
|
|
3826
3833
|
}, {});
|
|
@@ -4302,7 +4309,7 @@ var BUNGEE_APPROVE_AND_BRIDGE_V1_ABI = [
|
|
|
4302
4309
|
];
|
|
4303
4310
|
|
|
4304
4311
|
// src/providers/bungee/BungeeApi.ts
|
|
4305
|
-
var
|
|
4312
|
+
var import_sdk_common16 = require("@cowprotocol/sdk-common");
|
|
4306
4313
|
|
|
4307
4314
|
// src/providers/bungee/consts.ts
|
|
4308
4315
|
var BUNGEE_API_PATH = "/api/v1/bungee";
|
|
@@ -4576,7 +4583,7 @@ var BungeeApi = class {
|
|
|
4576
4583
|
* @returns True if the bungee tx data is valid, false otherwise
|
|
4577
4584
|
*/
|
|
4578
4585
|
async verifyBungeeBuildTxData(originChainId, txData, routeId, expectedSocketRequest) {
|
|
4579
|
-
const adapter = (0,
|
|
4586
|
+
const adapter = (0, import_sdk_common16.getGlobalAdapter)();
|
|
4580
4587
|
const socketVerifierAddress = SocketVerifierAddresses[originChainId];
|
|
4581
4588
|
if (!socketVerifierAddress) {
|
|
4582
4589
|
throw new BridgeProviderQuoteError("TX_BUILD_ERROR" /* TX_BUILD_ERROR */, {
|
|
@@ -4697,13 +4704,13 @@ var BungeeApi = class {
|
|
|
4697
4704
|
if (this.shouldAddAffiliate(apiType, baseUrl) && this.options.affiliate) {
|
|
4698
4705
|
headers["affiliate"] = this.options.affiliate;
|
|
4699
4706
|
}
|
|
4700
|
-
(0,
|
|
4707
|
+
(0, import_sdk_common16.log)(`Fetching ${apiType} API: GET ${url}. Params: ${JSON.stringify(params)}`);
|
|
4701
4708
|
try {
|
|
4702
4709
|
const response = await fetch(url, { method: "GET", headers });
|
|
4703
4710
|
if (!response.ok) {
|
|
4704
4711
|
if (isInfrastructureError(response.status) && !useFallback) {
|
|
4705
4712
|
this.enableFallback(apiType);
|
|
4706
|
-
(0,
|
|
4713
|
+
(0, import_sdk_common16.log)(
|
|
4707
4714
|
`Infrastructure error (${response.status}) detected for ${apiType} API. Enabling fallback for ${this.fallbackTimeoutMs}ms`
|
|
4708
4715
|
);
|
|
4709
4716
|
return this.makeApiCall(apiType, path, params, isValidResponse);
|
|
@@ -4719,7 +4726,7 @@ var BungeeApi = class {
|
|
|
4719
4726
|
} catch (error) {
|
|
4720
4727
|
if (!useFallback && isClientFetchError(error)) {
|
|
4721
4728
|
this.enableFallback(apiType);
|
|
4722
|
-
(0,
|
|
4729
|
+
(0, import_sdk_common16.log)(`Network error detected for ${apiType} API. Enabling fallback for ${this.fallbackTimeoutMs}ms`);
|
|
4723
4730
|
return this.makeApiCall(apiType, path, params, isValidResponse);
|
|
4724
4731
|
}
|
|
4725
4732
|
throw error;
|
|
@@ -4729,9 +4736,9 @@ var BungeeApi = class {
|
|
|
4729
4736
|
|
|
4730
4737
|
// src/providers/bungee/createBungeeDepositCall.ts
|
|
4731
4738
|
var import_sdk_config7 = require("@cowprotocol/sdk-config");
|
|
4732
|
-
var
|
|
4739
|
+
var import_sdk_common17 = require("@cowprotocol/sdk-common");
|
|
4733
4740
|
async function createBungeeDepositCall(params) {
|
|
4734
|
-
const adapter = (0,
|
|
4741
|
+
const adapter = (0, import_sdk_common17.getGlobalAdapter)();
|
|
4735
4742
|
const { request, quote } = params;
|
|
4736
4743
|
const { bungeeQuote, buildTx } = quote;
|
|
4737
4744
|
const bridge = bungeeQuote.routeBridge;
|
|
@@ -4769,7 +4776,7 @@ async function createBungeeDepositCall(params) {
|
|
|
4769
4776
|
fullData
|
|
4770
4777
|
// data
|
|
4771
4778
|
]);
|
|
4772
|
-
const value = request.sellTokenAddress
|
|
4779
|
+
const value = (0, import_sdk_common17.areAddressesEqual)(request.sellTokenAddress, import_sdk_config7.ETH_ADDRESS) ? BigInt(bridgeInputAmount) : 0n;
|
|
4773
4780
|
const finalValue = value + nativeTokenExtraFee;
|
|
4774
4781
|
const to = BungeeApproveAndBridgeV1Addresses[request.sellTokenChainId];
|
|
4775
4782
|
if (!to) {
|
|
@@ -4820,7 +4827,7 @@ async function getBridgingStatusFromEvents(events, getAcrossStatus) {
|
|
|
4820
4827
|
// src/providers/bungee/BungeeBridgeProvider.ts
|
|
4821
4828
|
var import_sdk_config8 = require("@cowprotocol/sdk-config");
|
|
4822
4829
|
var import_sdk_cow_shed2 = require("@cowprotocol/sdk-cow-shed");
|
|
4823
|
-
var
|
|
4830
|
+
var import_sdk_common18 = require("@cowprotocol/sdk-common");
|
|
4824
4831
|
var BUNGEE_HOOK_DAPP_ID = `${HOOK_DAPP_BRIDGE_PROVIDER_PREFIX2}/bungee`;
|
|
4825
4832
|
var BUNGEE_SUPPORTED_NETWORKS = [import_sdk_config8.mainnet, import_sdk_config8.polygon, import_sdk_config8.arbitrumOne, import_sdk_config8.base, import_sdk_config8.optimism, import_sdk_config8.avalanche, import_sdk_config8.gnosisChain];
|
|
4826
4833
|
var SLIPPAGE_TOLERANCE_BPS2 = 0;
|
|
@@ -4830,7 +4837,7 @@ var BungeeBridgeProvider = class {
|
|
|
4830
4837
|
this.options = options;
|
|
4831
4838
|
const adapter = _adapter || options.cowShedOptions?.adapter;
|
|
4832
4839
|
if (adapter) {
|
|
4833
|
-
(0,
|
|
4840
|
+
(0, import_sdk_common18.setGlobalAdapter)(adapter);
|
|
4834
4841
|
}
|
|
4835
4842
|
this.api = new BungeeApi(options.apiOptions);
|
|
4836
4843
|
this.cowShedSdk = new import_sdk_cow_shed2.CowShedSdk(adapter, options.cowShedOptions?.factoryOptions);
|
|
@@ -4982,7 +4989,7 @@ var BungeeBridgeProvider = class {
|
|
|
4982
4989
|
};
|
|
4983
4990
|
|
|
4984
4991
|
// src/providers/near-intents/NearIntentsBridgeProvider.ts
|
|
4985
|
-
var
|
|
4992
|
+
var import_sdk_common20 = require("@cowprotocol/sdk-common");
|
|
4986
4993
|
var import_sdk_config11 = require("@cowprotocol/sdk-config");
|
|
4987
4994
|
var import_sdk_cow_shed3 = require("@cowprotocol/sdk-cow-shed");
|
|
4988
4995
|
var import_sdk_order_book8 = require("@cowprotocol/sdk-order-book");
|
|
@@ -5056,7 +5063,9 @@ var NEAR_INTENTS_SUPPORTED_NETWORKS = [
|
|
|
5056
5063
|
import_sdk_config9.mainnet,
|
|
5057
5064
|
import_sdk_config9.optimism,
|
|
5058
5065
|
import_sdk_config9.polygon,
|
|
5059
|
-
import_sdk_config9.plasma
|
|
5066
|
+
import_sdk_config9.plasma,
|
|
5067
|
+
import_sdk_config9.bitcoin,
|
|
5068
|
+
import_sdk_config9.solana
|
|
5060
5069
|
];
|
|
5061
5070
|
var NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS = {
|
|
5062
5071
|
arb: import_sdk_config9.arbitrumOne.id,
|
|
@@ -5067,7 +5076,9 @@ var NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS = {
|
|
|
5067
5076
|
gnosis: import_sdk_config9.gnosisChain.id,
|
|
5068
5077
|
op: import_sdk_config9.optimism.id,
|
|
5069
5078
|
pol: import_sdk_config9.polygon.id,
|
|
5070
|
-
plasma: import_sdk_config9.plasma.id
|
|
5079
|
+
plasma: import_sdk_config9.plasma.id,
|
|
5080
|
+
btc: import_sdk_config9.bitcoin.id,
|
|
5081
|
+
sol: import_sdk_config9.solana.id
|
|
5071
5082
|
};
|
|
5072
5083
|
var NEAR_INTENTS_STATUS_TO_COW_STATUS = {
|
|
5073
5084
|
KNOWN_DEPOSIT_TX: "in_progress" /* IN_PROGRESS */,
|
|
@@ -5084,7 +5095,7 @@ var ATTESTATOR_ADDRESS = "0x0073DD100b51C555E41B2a452E5933ef76F42790";
|
|
|
5084
5095
|
|
|
5085
5096
|
// src/providers/near-intents/util.ts
|
|
5086
5097
|
var import_json_stable_stringify3 = __toESM(require("json-stable-stringify"));
|
|
5087
|
-
var
|
|
5098
|
+
var import_sdk_common19 = require("@cowprotocol/sdk-common");
|
|
5088
5099
|
var import_sdk_config10 = require("@cowprotocol/sdk-config");
|
|
5089
5100
|
var calculateDeadline = (seconds) => {
|
|
5090
5101
|
const secs = Number(seconds);
|
|
@@ -5098,7 +5109,7 @@ var adaptToken = (token) => {
|
|
|
5098
5109
|
const chainId = NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS[token.blockchain];
|
|
5099
5110
|
if (!chainId)
|
|
5100
5111
|
return null;
|
|
5101
|
-
const tokenAddress = token.contractAddress
|
|
5112
|
+
const tokenAddress = token.contractAddress ?? (chainId === NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS.btc ? import_sdk_config10.BTC_CURRENCY_ADDRESS : chainId === NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS.sol ? import_sdk_config10.SOL_NATIVE_CURRENCY_ADDRESS : import_sdk_config10.ETH_ADDRESS);
|
|
5102
5113
|
if (!tokenAddress)
|
|
5103
5114
|
return null;
|
|
5104
5115
|
return {
|
|
@@ -5118,18 +5129,23 @@ var adaptTokens = (tokens) => tokens.reduce((acc, token) => {
|
|
|
5118
5129
|
return acc;
|
|
5119
5130
|
}, []);
|
|
5120
5131
|
var getTokenByAddressAndChainId = (tokens, targetTokenAddress, targetTokenChainId) => {
|
|
5121
|
-
if (!(0, import_sdk_config10.isEvmChain)(targetTokenChainId)) {
|
|
5122
|
-
return void 0;
|
|
5123
|
-
}
|
|
5124
5132
|
return tokens.find((token) => {
|
|
5125
5133
|
const chainId = NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS[token.blockchain];
|
|
5126
5134
|
if (!chainId)
|
|
5127
5135
|
return false;
|
|
5128
|
-
if (
|
|
5129
|
-
return
|
|
5136
|
+
if (chainId !== targetTokenChainId)
|
|
5137
|
+
return false;
|
|
5138
|
+
if (!(0, import_sdk_config10.isEvmChain)(targetTokenChainId)) {
|
|
5139
|
+
if (!token.contractAddress) {
|
|
5140
|
+
return (0, import_sdk_common19.areAddressesEqual)(targetTokenAddress, import_sdk_config10.BTC_CURRENCY_ADDRESS) || (0, import_sdk_common19.areAddressesEqual)(targetTokenAddress, import_sdk_config10.SOL_NATIVE_CURRENCY_ADDRESS);
|
|
5141
|
+
}
|
|
5142
|
+
return (0, import_sdk_common19.areAddressesEqual)(token.contractAddress, targetTokenAddress);
|
|
5143
|
+
}
|
|
5144
|
+
if ((0, import_sdk_common19.areAddressesEqual)(targetTokenAddress, import_sdk_config10.ETH_ADDRESS)) {
|
|
5145
|
+
return !token.contractAddress;
|
|
5130
5146
|
}
|
|
5131
5147
|
const tokenAddress = token.contractAddress || import_sdk_config10.ETH_ADDRESS;
|
|
5132
|
-
return
|
|
5148
|
+
return (0, import_sdk_common19.areAddressesEqual)(tokenAddress, targetTokenAddress);
|
|
5133
5149
|
});
|
|
5134
5150
|
};
|
|
5135
5151
|
var hashQuote = ({
|
|
@@ -5137,7 +5153,7 @@ var hashQuote = ({
|
|
|
5137
5153
|
quoteRequest,
|
|
5138
5154
|
timestamp
|
|
5139
5155
|
}) => {
|
|
5140
|
-
const adapter = (0,
|
|
5156
|
+
const adapter = (0, import_sdk_common19.getGlobalAdapter)();
|
|
5141
5157
|
const stringifiedQuote = (0, import_json_stable_stringify3.default)({
|
|
5142
5158
|
dry: false,
|
|
5143
5159
|
swapType: quoteRequest.swapType,
|
|
@@ -5177,7 +5193,6 @@ var hashQuote = ({
|
|
|
5177
5193
|
};
|
|
5178
5194
|
|
|
5179
5195
|
// src/providers/near-intents/NearIntentsBridgeProvider.ts
|
|
5180
|
-
var import_sdk_config12 = require("@cowprotocol/sdk-config");
|
|
5181
5196
|
var NEAR_INTENTS_HOOK_DAPP_ID2 = `${HOOK_DAPP_BRIDGE_PROVIDER_PREFIX}/near-intents`;
|
|
5182
5197
|
var REFERRAL = "cow";
|
|
5183
5198
|
var providerType3 = "ReceiverAccountBridgeProvider";
|
|
@@ -5195,7 +5210,7 @@ var NearIntentsBridgeProvider = class {
|
|
|
5195
5210
|
constructor(options, _adapter) {
|
|
5196
5211
|
const adapter = _adapter || options?.cowShedOptions?.adapter;
|
|
5197
5212
|
if (adapter) {
|
|
5198
|
-
(0,
|
|
5213
|
+
(0, import_sdk_common20.setGlobalAdapter)(adapter);
|
|
5199
5214
|
}
|
|
5200
5215
|
this.api = new NearIntentsApi(options?.apiKey);
|
|
5201
5216
|
this.cowShedSdk = new import_sdk_cow_shed3.CowShedSdk(adapter, options?.cowShedOptions?.factoryOptions);
|
|
@@ -5220,10 +5235,10 @@ var NearIntentsBridgeProvider = class {
|
|
|
5220
5235
|
const { sourceTokens, targetTokens } = tokens.reduce(
|
|
5221
5236
|
(acc, token) => {
|
|
5222
5237
|
if (token.chainId === sellTokenChainId) {
|
|
5223
|
-
acc.sourceTokens.set(token.address
|
|
5238
|
+
acc.sourceTokens.set((0, import_sdk_common20.getAddressKey)(token.address), token);
|
|
5224
5239
|
}
|
|
5225
5240
|
if (token.chainId === buyTokenChainId) {
|
|
5226
|
-
acc.targetTokens.set(token.address
|
|
5241
|
+
acc.targetTokens.set((0, import_sdk_common20.getAddressKey)(token.address), token);
|
|
5227
5242
|
}
|
|
5228
5243
|
return acc;
|
|
5229
5244
|
},
|
|
@@ -5232,7 +5247,7 @@ var NearIntentsBridgeProvider = class {
|
|
|
5232
5247
|
targetTokens: /* @__PURE__ */ new Map()
|
|
5233
5248
|
}
|
|
5234
5249
|
);
|
|
5235
|
-
const targetToken = targetTokens.get(
|
|
5250
|
+
const targetToken = targetTokens.get((0, import_sdk_common20.getAddressKey)(buyTokenAddress));
|
|
5236
5251
|
if (!targetToken)
|
|
5237
5252
|
return [];
|
|
5238
5253
|
return Array.from(sourceTokens.values());
|
|
@@ -5246,9 +5261,13 @@ var NearIntentsBridgeProvider = class {
|
|
|
5246
5261
|
account,
|
|
5247
5262
|
amount,
|
|
5248
5263
|
receiver,
|
|
5264
|
+
bridgeRecipient,
|
|
5249
5265
|
validFor,
|
|
5250
5266
|
owner
|
|
5251
5267
|
} = request;
|
|
5268
|
+
if ((0, import_sdk_common20.areAddressesEqual)(sellTokenAddress, import_sdk_config11.BTC_CURRENCY_ADDRESS) || (0, import_sdk_common20.areAddressesEqual)(sellTokenAddress, import_sdk_config11.SOL_NATIVE_CURRENCY_ADDRESS)) {
|
|
5269
|
+
throw new BridgeProviderQuoteError("NO_ROUTES" /* NO_ROUTES */);
|
|
5270
|
+
}
|
|
5252
5271
|
const tokens = await this.api.getTokens();
|
|
5253
5272
|
const sellToken = getTokenByAddressAndChainId(tokens, sellTokenAddress, sellTokenChainId);
|
|
5254
5273
|
const buyToken = getTokenByAddressAndChainId(tokens, buyTokenAddress, buyTokenChainId);
|
|
@@ -5264,13 +5283,13 @@ var NearIntentsBridgeProvider = class {
|
|
|
5264
5283
|
amount: amount.toString(),
|
|
5265
5284
|
refundTo: owner || account,
|
|
5266
5285
|
refundType: import_one_click_sdk_typescript2.QuoteRequest.refundType.ORIGIN_CHAIN,
|
|
5267
|
-
recipient: receiver || account,
|
|
5286
|
+
recipient: bridgeRecipient || receiver || account,
|
|
5268
5287
|
recipientType: import_one_click_sdk_typescript2.QuoteRequest.recipientType.DESTINATION_CHAIN,
|
|
5269
5288
|
deadline: calculateDeadline(validFor || 3600),
|
|
5270
5289
|
referral: REFERRAL
|
|
5271
5290
|
});
|
|
5272
5291
|
const recoveredDepositAddress = await this.recoverDepositAddress(quoteResponse);
|
|
5273
|
-
if (recoveredDepositAddress
|
|
5292
|
+
if (!recoveredDepositAddress || !(0, import_sdk_common20.areAddressesEqual)(recoveredDepositAddress.address, ATTESTATOR_ADDRESS)) {
|
|
5274
5293
|
throw new BridgeProviderQuoteError("QUOTE_DOES_NOT_MATCH_DEPOSIT_ADDRESS" /* QUOTE_DOES_NOT_MATCH_DEPOSIT_ADDRESS */);
|
|
5275
5294
|
}
|
|
5276
5295
|
const { quote, timestamp: isoDate } = quoteResponse;
|
|
@@ -5347,9 +5366,6 @@ var NearIntentsBridgeProvider = class {
|
|
|
5347
5366
|
if (!adaptedInput?.chainId || !adaptedOutput?.chainId) {
|
|
5348
5367
|
throw new Error("Token not supported");
|
|
5349
5368
|
}
|
|
5350
|
-
if (!(0, import_sdk_config12.isEvmChain)(adaptedInput.chainId) || !(0, import_sdk_config12.isEvmChain)(adaptedOutput.chainId)) {
|
|
5351
|
-
throw new Error("Non-EVM chains are not supported for BridgingDepositParams");
|
|
5352
|
-
}
|
|
5353
5369
|
return {
|
|
5354
5370
|
status: {
|
|
5355
5371
|
fillTimeInSeconds: quote.timeEstimate,
|
|
@@ -5406,7 +5422,7 @@ var NearIntentsBridgeProvider = class {
|
|
|
5406
5422
|
try {
|
|
5407
5423
|
if (!quote?.depositAddress)
|
|
5408
5424
|
return null;
|
|
5409
|
-
const utils = (0,
|
|
5425
|
+
const utils = (0, import_sdk_common20.getGlobalAdapter)().utils;
|
|
5410
5426
|
const { hash: quoteHash, stringifiedQuote } = hashQuote({ quote, quoteRequest, timestamp });
|
|
5411
5427
|
const depositAddr = utils.getChecksumAddress(quote.depositAddress);
|
|
5412
5428
|
const { signature } = await this.api.getAttestation({
|
package/dist/index.mjs
CHANGED
|
@@ -176,16 +176,17 @@ async function getCrossChainOrder(params) {
|
|
|
176
176
|
import { TradingSdk } from "@cowprotocol/sdk-trading";
|
|
177
177
|
import { OrderBookApi as OrderBookApi2 } from "@cowprotocol/sdk-order-book";
|
|
178
178
|
import { ALL_SUPPORTED_CHAINS } from "@cowprotocol/sdk-config";
|
|
179
|
-
import { enableLogging, setGlobalAdapter, TTLCache as TTLCache2 } from "@cowprotocol/sdk-common";
|
|
179
|
+
import { enableLogging, getAddressKey as getAddressKey4, setGlobalAdapter, TTLCache as TTLCache2 } from "@cowprotocol/sdk-common";
|
|
180
180
|
|
|
181
181
|
// src/BridgingSdk/helpers.ts
|
|
182
|
+
import { getAddressKey } from "@cowprotocol/sdk-common";
|
|
182
183
|
var getCacheKey = ({
|
|
183
184
|
id,
|
|
184
185
|
buyChainId,
|
|
185
186
|
sellChainId = "noSellChainID",
|
|
186
187
|
tokenAddress = "noTokenAddress"
|
|
187
188
|
}) => {
|
|
188
|
-
return `${id}-${buyChainId}-${sellChainId}-${tokenAddress
|
|
189
|
+
return `${id}-${buyChainId}-${sellChainId}-${getAddressKey(tokenAddress)}`;
|
|
189
190
|
};
|
|
190
191
|
|
|
191
192
|
// src/BridgingSdk/getQuoteWithoutBridge.ts
|
|
@@ -255,10 +256,11 @@ function getHookMockForCostEstimation(gasLimit) {
|
|
|
255
256
|
import { getGlobalAdapter as getGlobalAdapter2, jsonWithBigintReplacer as jsonWithBigintReplacer2, log as log2 } from "@cowprotocol/sdk-common";
|
|
256
257
|
|
|
257
258
|
// src/BridgingSdk/determineIntermediateToken.ts
|
|
258
|
-
import { areAddressesEqual, isNativeToken, isWrappedNativeToken } from "@cowprotocol/sdk-common";
|
|
259
|
+
import { areAddressesEqual, getAddressKey as getAddressKey3, isNativeToken, isWrappedNativeToken } from "@cowprotocol/sdk-common";
|
|
259
260
|
|
|
260
261
|
// src/BridgingSdk/tokenPriority.ts
|
|
261
262
|
import { SupportedChainId } from "@cowprotocol/sdk-config";
|
|
263
|
+
import { getAddressKey as getAddressKey2 } from "@cowprotocol/sdk-common";
|
|
262
264
|
var PRIORITY_STABLECOIN_TOKENS = {
|
|
263
265
|
[SupportedChainId.MAINNET]: /* @__PURE__ */ new Set([
|
|
264
266
|
"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
|
@@ -307,7 +309,7 @@ var PRIORITY_STABLECOIN_TOKENS = {
|
|
|
307
309
|
[SupportedChainId.LINEA]: /* @__PURE__ */ new Set([
|
|
308
310
|
"0x176211869ca2b568f2a7d4ee941e073a821ee1ff",
|
|
309
311
|
// USDC
|
|
310
|
-
"
|
|
312
|
+
"0xa219439258ca9da29e9cc4ce5596924745e12b93"
|
|
311
313
|
// USDT
|
|
312
314
|
]),
|
|
313
315
|
[SupportedChainId.SEPOLIA]: /* @__PURE__ */ new Set([
|
|
@@ -319,10 +321,10 @@ function isStablecoinPriorityToken(chainId, tokenAddress) {
|
|
|
319
321
|
const chainTokens = PRIORITY_STABLECOIN_TOKENS[chainId];
|
|
320
322
|
if (!chainTokens)
|
|
321
323
|
return false;
|
|
322
|
-
return chainTokens.has(tokenAddress
|
|
324
|
+
return chainTokens.has(getAddressKey2(tokenAddress));
|
|
323
325
|
}
|
|
324
326
|
function isCorrelatedToken(tokenAddress, correlatedTokens) {
|
|
325
|
-
return correlatedTokens.has(tokenAddress
|
|
327
|
+
return correlatedTokens.has(getAddressKey2(tokenAddress));
|
|
326
328
|
}
|
|
327
329
|
|
|
328
330
|
// src/BridgingSdk/determineIntermediateToken.ts
|
|
@@ -372,7 +374,7 @@ async function resolveCorrelatedTokens(sourceChainId, getCorrelatedTokens) {
|
|
|
372
374
|
if (getCorrelatedTokens) {
|
|
373
375
|
try {
|
|
374
376
|
const tokens = await getCorrelatedTokens(sourceChainId);
|
|
375
|
-
return new Set(tokens.map((t) => t
|
|
377
|
+
return new Set(tokens.map((t) => getAddressKey3(t)));
|
|
376
378
|
} catch (error) {
|
|
377
379
|
console.warn(
|
|
378
380
|
"[determineIntermediateToken] Failed to fetch correlated tokens, falling back to basic priority",
|
|
@@ -498,6 +500,10 @@ async function getSwapQuote(params) {
|
|
|
498
500
|
bridgeSlippageBps: _bridgeSlippageBps,
|
|
499
501
|
amount,
|
|
500
502
|
swapSlippageBps,
|
|
503
|
+
receiver: _receiver,
|
|
504
|
+
// Strip receiver from CoW API params — bridge providers override it after the quote
|
|
505
|
+
bridgeRecipient: _bridgeRecipient,
|
|
506
|
+
// Not relevant for CoW API
|
|
501
507
|
...rest
|
|
502
508
|
} = swapAndBridgeRequest;
|
|
503
509
|
const { sellTokenAddress: intermediateToken, sellTokenDecimals: intermediaryTokenDecimals } = bridgeRequestWithoutAmount;
|
|
@@ -1243,9 +1249,9 @@ var BridgingSdk = class {
|
|
|
1243
1249
|
const tokens = results.reduce((tokens2, result) => {
|
|
1244
1250
|
if (result.status === "fulfilled" && result.value.tokens) {
|
|
1245
1251
|
result.value.tokens.forEach((token) => {
|
|
1246
|
-
const
|
|
1247
|
-
if (!tokens2.get(
|
|
1248
|
-
tokens2.set(
|
|
1252
|
+
const addressKey = getAddressKey4(token.address);
|
|
1253
|
+
if (!tokens2.get(addressKey)) {
|
|
1254
|
+
tokens2.set(addressKey, token);
|
|
1249
1255
|
}
|
|
1250
1256
|
});
|
|
1251
1257
|
}
|
|
@@ -1548,7 +1554,7 @@ var ACROSS_MATH_CONTRACT_ADDRESSES = {
|
|
|
1548
1554
|
|
|
1549
1555
|
// src/providers/across/util.ts
|
|
1550
1556
|
import { OrderKind as OrderKind2 } from "@cowprotocol/sdk-order-book";
|
|
1551
|
-
import { areAddressesEqual as areAddressesEqual2, getGlobalAdapter as getGlobalAdapter5, isCoWSettlementContract } from "@cowprotocol/sdk-common";
|
|
1557
|
+
import { areAddressesEqual as areAddressesEqual2, getAddressKey as getAddressKey5, getGlobalAdapter as getGlobalAdapter5, isCoWSettlementContract } from "@cowprotocol/sdk-common";
|
|
1552
1558
|
import stringify from "json-stable-stringify";
|
|
1553
1559
|
var PCT_100_PERCENT = 10n ** 18n;
|
|
1554
1560
|
function toBridgeQuoteResult(request, slippageBps, suggestedFees) {
|
|
@@ -1635,14 +1641,15 @@ function mapAcrossStatusToBridgeStatus(status) {
|
|
|
1635
1641
|
return AcrossStatusToBridgeStatus[status];
|
|
1636
1642
|
}
|
|
1637
1643
|
function getAcrossDepositEvents(chainId, logs) {
|
|
1638
|
-
const
|
|
1644
|
+
const addr = ACROSS_SPOOK_CONTRACT_ADDRESSES[chainId];
|
|
1645
|
+
const spookContractAddress = addr ? getAddressKey5(addr) : void 0;
|
|
1639
1646
|
if (!spookContractAddress) {
|
|
1640
1647
|
return [];
|
|
1641
1648
|
}
|
|
1642
1649
|
const acrossDepositInterface = ACROSS_DEPOSIT_EVENT_INTERFACE();
|
|
1643
1650
|
const ACROSS_DEPOSIT_EVENT_TOPIC = acrossDepositInterface.getEventTopic("FundsDeposited");
|
|
1644
1651
|
const depositEvents = logs.filter((log7) => {
|
|
1645
|
-
return log7.address
|
|
1652
|
+
return getAddressKey5(log7.address) === spookContractAddress && log7.topics[0] === ACROSS_DEPOSIT_EVENT_TOPIC;
|
|
1646
1653
|
});
|
|
1647
1654
|
return depositEvents.map((event) => {
|
|
1648
1655
|
const parsedLog = acrossDepositInterface.parseLog(event);
|
|
@@ -3611,7 +3618,7 @@ async function getGasLimitEstimationForHook({
|
|
|
3611
3618
|
}
|
|
3612
3619
|
|
|
3613
3620
|
// src/providers/across/AcrossBridgeProvider.ts
|
|
3614
|
-
import { getGlobalAdapter as getGlobalAdapter8, setGlobalAdapter as setGlobalAdapter2 } from "@cowprotocol/sdk-common";
|
|
3621
|
+
import { getAddressKey as getAddressKey6, getGlobalAdapter as getGlobalAdapter8, setGlobalAdapter as setGlobalAdapter2 } from "@cowprotocol/sdk-common";
|
|
3615
3622
|
import {
|
|
3616
3623
|
arbitrumOne,
|
|
3617
3624
|
base,
|
|
@@ -3663,7 +3670,7 @@ var AcrossBridgeProvider = class {
|
|
|
3663
3670
|
}
|
|
3664
3671
|
const { sellTokenChainId, buyTokenChainId, buyTokenAddress } = request;
|
|
3665
3672
|
const supportedTokensState = await this.getSupportedTokensState();
|
|
3666
|
-
const buyTokenAddressLower = buyTokenAddress
|
|
3673
|
+
const buyTokenAddressLower = getAddressKey6(buyTokenAddress);
|
|
3667
3674
|
const sourceTokens = supportedTokensState[sellTokenChainId];
|
|
3668
3675
|
const targetTokens = supportedTokensState[buyTokenChainId];
|
|
3669
3676
|
const targetTokenSymbol = targetTokens && targetTokens[buyTokenAddressLower]?.symbol?.toLowerCase();
|
|
@@ -3770,7 +3777,7 @@ var AcrossBridgeProvider = class {
|
|
|
3770
3777
|
if (!this.supportedTokens) {
|
|
3771
3778
|
const supportedTokens = (await this.api.getSupportedTokens()).reduce((acc, val) => {
|
|
3772
3779
|
const data = acc[val.chainId] || {};
|
|
3773
|
-
data[val.address
|
|
3780
|
+
data[getAddressKey6(val.address)] = val;
|
|
3774
3781
|
acc[val.chainId] = data;
|
|
3775
3782
|
return acc;
|
|
3776
3783
|
}, {});
|
|
@@ -4679,7 +4686,7 @@ var BungeeApi = class {
|
|
|
4679
4686
|
|
|
4680
4687
|
// src/providers/bungee/createBungeeDepositCall.ts
|
|
4681
4688
|
import { ETH_ADDRESS } from "@cowprotocol/sdk-config";
|
|
4682
|
-
import { getGlobalAdapter as getGlobalAdapter10 } from "@cowprotocol/sdk-common";
|
|
4689
|
+
import { areAddressesEqual as areAddressesEqual3, getGlobalAdapter as getGlobalAdapter10 } from "@cowprotocol/sdk-common";
|
|
4683
4690
|
async function createBungeeDepositCall(params) {
|
|
4684
4691
|
const adapter = getGlobalAdapter10();
|
|
4685
4692
|
const { request, quote } = params;
|
|
@@ -4719,7 +4726,7 @@ async function createBungeeDepositCall(params) {
|
|
|
4719
4726
|
fullData
|
|
4720
4727
|
// data
|
|
4721
4728
|
]);
|
|
4722
|
-
const value = request.sellTokenAddress
|
|
4729
|
+
const value = areAddressesEqual3(request.sellTokenAddress, ETH_ADDRESS) ? BigInt(bridgeInputAmount) : 0n;
|
|
4723
4730
|
const finalValue = value + nativeTokenExtraFee;
|
|
4724
4731
|
const to = BungeeApproveAndBridgeV1Addresses[request.sellTokenChainId];
|
|
4725
4732
|
if (!to) {
|
|
@@ -4941,8 +4948,8 @@ var BungeeBridgeProvider = class {
|
|
|
4941
4948
|
};
|
|
4942
4949
|
|
|
4943
4950
|
// src/providers/near-intents/NearIntentsBridgeProvider.ts
|
|
4944
|
-
import { getGlobalAdapter as getGlobalAdapter12, setGlobalAdapter as setGlobalAdapter4 } from "@cowprotocol/sdk-common";
|
|
4945
|
-
import { ETH_ADDRESS as ETH_ADDRESS3 } from "@cowprotocol/sdk-config";
|
|
4951
|
+
import { areAddressesEqual as areAddressesEqual5, getAddressKey as getAddressKey7, getGlobalAdapter as getGlobalAdapter12, setGlobalAdapter as setGlobalAdapter4 } from "@cowprotocol/sdk-common";
|
|
4952
|
+
import { BTC_CURRENCY_ADDRESS as BTC_CURRENCY_ADDRESS2, ETH_ADDRESS as ETH_ADDRESS3, SOL_NATIVE_CURRENCY_ADDRESS as SOL_NATIVE_CURRENCY_ADDRESS2 } from "@cowprotocol/sdk-config";
|
|
4946
4953
|
import { CowShedSdk as CowShedSdk3 } from "@cowprotocol/sdk-cow-shed";
|
|
4947
4954
|
import { OrderKind as OrderKind6 } from "@cowprotocol/sdk-order-book";
|
|
4948
4955
|
import { QuoteRequest } from "@defuse-protocol/one-click-sdk-typescript";
|
|
@@ -5004,7 +5011,19 @@ var NearIntentsApi = class {
|
|
|
5004
5011
|
};
|
|
5005
5012
|
|
|
5006
5013
|
// src/providers/near-intents/const/index.ts
|
|
5007
|
-
import {
|
|
5014
|
+
import {
|
|
5015
|
+
arbitrumOne as arbitrumOne3,
|
|
5016
|
+
avalanche as avalanche2,
|
|
5017
|
+
base as base3,
|
|
5018
|
+
bnb,
|
|
5019
|
+
gnosisChain as gnosisChain2,
|
|
5020
|
+
mainnet as mainnet3,
|
|
5021
|
+
optimism as optimism3,
|
|
5022
|
+
polygon as polygon3,
|
|
5023
|
+
plasma,
|
|
5024
|
+
bitcoin,
|
|
5025
|
+
solana
|
|
5026
|
+
} from "@cowprotocol/sdk-config";
|
|
5008
5027
|
var NEAR_INTENTS_HOOK_DAPP_ID = `${HOOK_DAPP_BRIDGE_PROVIDER_PREFIX}/near-intents`;
|
|
5009
5028
|
var NEAR_INTENTS_SUPPORTED_NETWORKS = [
|
|
5010
5029
|
arbitrumOne3,
|
|
@@ -5015,7 +5034,9 @@ var NEAR_INTENTS_SUPPORTED_NETWORKS = [
|
|
|
5015
5034
|
mainnet3,
|
|
5016
5035
|
optimism3,
|
|
5017
5036
|
polygon3,
|
|
5018
|
-
plasma
|
|
5037
|
+
plasma,
|
|
5038
|
+
bitcoin,
|
|
5039
|
+
solana
|
|
5019
5040
|
];
|
|
5020
5041
|
var NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS = {
|
|
5021
5042
|
arb: arbitrumOne3.id,
|
|
@@ -5026,7 +5047,9 @@ var NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS = {
|
|
|
5026
5047
|
gnosis: gnosisChain2.id,
|
|
5027
5048
|
op: optimism3.id,
|
|
5028
5049
|
pol: polygon3.id,
|
|
5029
|
-
plasma: plasma.id
|
|
5050
|
+
plasma: plasma.id,
|
|
5051
|
+
btc: bitcoin.id,
|
|
5052
|
+
sol: solana.id
|
|
5030
5053
|
};
|
|
5031
5054
|
var NEAR_INTENTS_STATUS_TO_COW_STATUS = {
|
|
5032
5055
|
KNOWN_DEPOSIT_TX: "in_progress" /* IN_PROGRESS */,
|
|
@@ -5043,8 +5066,13 @@ var ATTESTATOR_ADDRESS = "0x0073DD100b51C555E41B2a452E5933ef76F42790";
|
|
|
5043
5066
|
|
|
5044
5067
|
// src/providers/near-intents/util.ts
|
|
5045
5068
|
import stringify3 from "json-stable-stringify";
|
|
5046
|
-
import { getGlobalAdapter as getGlobalAdapter11 } from "@cowprotocol/sdk-common";
|
|
5047
|
-
import {
|
|
5069
|
+
import { areAddressesEqual as areAddressesEqual4, getGlobalAdapter as getGlobalAdapter11 } from "@cowprotocol/sdk-common";
|
|
5070
|
+
import {
|
|
5071
|
+
BTC_CURRENCY_ADDRESS,
|
|
5072
|
+
ETH_ADDRESS as ETH_ADDRESS2,
|
|
5073
|
+
SOL_NATIVE_CURRENCY_ADDRESS,
|
|
5074
|
+
isEvmChain
|
|
5075
|
+
} from "@cowprotocol/sdk-config";
|
|
5048
5076
|
var calculateDeadline = (seconds) => {
|
|
5049
5077
|
const secs = Number(seconds);
|
|
5050
5078
|
if (!Number.isFinite(secs)) {
|
|
@@ -5057,7 +5085,7 @@ var adaptToken = (token) => {
|
|
|
5057
5085
|
const chainId = NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS[token.blockchain];
|
|
5058
5086
|
if (!chainId)
|
|
5059
5087
|
return null;
|
|
5060
|
-
const tokenAddress = token.contractAddress
|
|
5088
|
+
const tokenAddress = token.contractAddress ?? (chainId === NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS.btc ? BTC_CURRENCY_ADDRESS : chainId === NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS.sol ? SOL_NATIVE_CURRENCY_ADDRESS : ETH_ADDRESS2);
|
|
5061
5089
|
if (!tokenAddress)
|
|
5062
5090
|
return null;
|
|
5063
5091
|
return {
|
|
@@ -5077,18 +5105,23 @@ var adaptTokens = (tokens) => tokens.reduce((acc, token) => {
|
|
|
5077
5105
|
return acc;
|
|
5078
5106
|
}, []);
|
|
5079
5107
|
var getTokenByAddressAndChainId = (tokens, targetTokenAddress, targetTokenChainId) => {
|
|
5080
|
-
if (!isEvmChain(targetTokenChainId)) {
|
|
5081
|
-
return void 0;
|
|
5082
|
-
}
|
|
5083
5108
|
return tokens.find((token) => {
|
|
5084
5109
|
const chainId = NEAR_INTENTS_BLOCKCHAIN_CHAIN_IDS[token.blockchain];
|
|
5085
5110
|
if (!chainId)
|
|
5086
5111
|
return false;
|
|
5087
|
-
if (
|
|
5088
|
-
return
|
|
5112
|
+
if (chainId !== targetTokenChainId)
|
|
5113
|
+
return false;
|
|
5114
|
+
if (!isEvmChain(targetTokenChainId)) {
|
|
5115
|
+
if (!token.contractAddress) {
|
|
5116
|
+
return areAddressesEqual4(targetTokenAddress, BTC_CURRENCY_ADDRESS) || areAddressesEqual4(targetTokenAddress, SOL_NATIVE_CURRENCY_ADDRESS);
|
|
5117
|
+
}
|
|
5118
|
+
return areAddressesEqual4(token.contractAddress, targetTokenAddress);
|
|
5119
|
+
}
|
|
5120
|
+
if (areAddressesEqual4(targetTokenAddress, ETH_ADDRESS2)) {
|
|
5121
|
+
return !token.contractAddress;
|
|
5089
5122
|
}
|
|
5090
5123
|
const tokenAddress = token.contractAddress || ETH_ADDRESS2;
|
|
5091
|
-
return tokenAddress
|
|
5124
|
+
return areAddressesEqual4(tokenAddress, targetTokenAddress);
|
|
5092
5125
|
});
|
|
5093
5126
|
};
|
|
5094
5127
|
var hashQuote = ({
|
|
@@ -5136,7 +5169,6 @@ var hashQuote = ({
|
|
|
5136
5169
|
};
|
|
5137
5170
|
|
|
5138
5171
|
// src/providers/near-intents/NearIntentsBridgeProvider.ts
|
|
5139
|
-
import { isEvmChain as isEvmChain2 } from "@cowprotocol/sdk-config";
|
|
5140
5172
|
var NEAR_INTENTS_HOOK_DAPP_ID2 = `${HOOK_DAPP_BRIDGE_PROVIDER_PREFIX}/near-intents`;
|
|
5141
5173
|
var REFERRAL = "cow";
|
|
5142
5174
|
var providerType3 = "ReceiverAccountBridgeProvider";
|
|
@@ -5179,10 +5211,10 @@ var NearIntentsBridgeProvider = class {
|
|
|
5179
5211
|
const { sourceTokens, targetTokens } = tokens.reduce(
|
|
5180
5212
|
(acc, token) => {
|
|
5181
5213
|
if (token.chainId === sellTokenChainId) {
|
|
5182
|
-
acc.sourceTokens.set(token.address
|
|
5214
|
+
acc.sourceTokens.set(getAddressKey7(token.address), token);
|
|
5183
5215
|
}
|
|
5184
5216
|
if (token.chainId === buyTokenChainId) {
|
|
5185
|
-
acc.targetTokens.set(token.address
|
|
5217
|
+
acc.targetTokens.set(getAddressKey7(token.address), token);
|
|
5186
5218
|
}
|
|
5187
5219
|
return acc;
|
|
5188
5220
|
},
|
|
@@ -5191,7 +5223,7 @@ var NearIntentsBridgeProvider = class {
|
|
|
5191
5223
|
targetTokens: /* @__PURE__ */ new Map()
|
|
5192
5224
|
}
|
|
5193
5225
|
);
|
|
5194
|
-
const targetToken = targetTokens.get(buyTokenAddress
|
|
5226
|
+
const targetToken = targetTokens.get(getAddressKey7(buyTokenAddress));
|
|
5195
5227
|
if (!targetToken)
|
|
5196
5228
|
return [];
|
|
5197
5229
|
return Array.from(sourceTokens.values());
|
|
@@ -5205,9 +5237,13 @@ var NearIntentsBridgeProvider = class {
|
|
|
5205
5237
|
account,
|
|
5206
5238
|
amount,
|
|
5207
5239
|
receiver,
|
|
5240
|
+
bridgeRecipient,
|
|
5208
5241
|
validFor,
|
|
5209
5242
|
owner
|
|
5210
5243
|
} = request;
|
|
5244
|
+
if (areAddressesEqual5(sellTokenAddress, BTC_CURRENCY_ADDRESS2) || areAddressesEqual5(sellTokenAddress, SOL_NATIVE_CURRENCY_ADDRESS2)) {
|
|
5245
|
+
throw new BridgeProviderQuoteError("NO_ROUTES" /* NO_ROUTES */);
|
|
5246
|
+
}
|
|
5211
5247
|
const tokens = await this.api.getTokens();
|
|
5212
5248
|
const sellToken = getTokenByAddressAndChainId(tokens, sellTokenAddress, sellTokenChainId);
|
|
5213
5249
|
const buyToken = getTokenByAddressAndChainId(tokens, buyTokenAddress, buyTokenChainId);
|
|
@@ -5223,13 +5259,13 @@ var NearIntentsBridgeProvider = class {
|
|
|
5223
5259
|
amount: amount.toString(),
|
|
5224
5260
|
refundTo: owner || account,
|
|
5225
5261
|
refundType: QuoteRequest.refundType.ORIGIN_CHAIN,
|
|
5226
|
-
recipient: receiver || account,
|
|
5262
|
+
recipient: bridgeRecipient || receiver || account,
|
|
5227
5263
|
recipientType: QuoteRequest.recipientType.DESTINATION_CHAIN,
|
|
5228
5264
|
deadline: calculateDeadline(validFor || 3600),
|
|
5229
5265
|
referral: REFERRAL
|
|
5230
5266
|
});
|
|
5231
5267
|
const recoveredDepositAddress = await this.recoverDepositAddress(quoteResponse);
|
|
5232
|
-
if (recoveredDepositAddress
|
|
5268
|
+
if (!recoveredDepositAddress || !areAddressesEqual5(recoveredDepositAddress.address, ATTESTATOR_ADDRESS)) {
|
|
5233
5269
|
throw new BridgeProviderQuoteError("QUOTE_DOES_NOT_MATCH_DEPOSIT_ADDRESS" /* QUOTE_DOES_NOT_MATCH_DEPOSIT_ADDRESS */);
|
|
5234
5270
|
}
|
|
5235
5271
|
const { quote, timestamp: isoDate } = quoteResponse;
|
|
@@ -5306,9 +5342,6 @@ var NearIntentsBridgeProvider = class {
|
|
|
5306
5342
|
if (!adaptedInput?.chainId || !adaptedOutput?.chainId) {
|
|
5307
5343
|
throw new Error("Token not supported");
|
|
5308
5344
|
}
|
|
5309
|
-
if (!isEvmChain2(adaptedInput.chainId) || !isEvmChain2(adaptedOutput.chainId)) {
|
|
5310
|
-
throw new Error("Non-EVM chains are not supported for BridgingDepositParams");
|
|
5311
|
-
}
|
|
5312
5345
|
return {
|
|
5313
5346
|
status: {
|
|
5314
5347
|
fillTimeInSeconds: quote.timeEstimate,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cowprotocol/sdk-bridging",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.3.0",
|
|
4
4
|
"description": "Bridging for CoW Protocol",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -21,14 +21,14 @@
|
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"@defuse-protocol/one-click-sdk-typescript": "0.1.1-0.2",
|
|
23
23
|
"json-stable-stringify": "^1.3.0",
|
|
24
|
-
"@cowprotocol/sdk-
|
|
24
|
+
"@cowprotocol/sdk-common": "0.9.0",
|
|
25
|
+
"@cowprotocol/sdk-app-data": "4.6.13",
|
|
25
26
|
"@cowprotocol/sdk-config": "1.1.2",
|
|
26
|
-
"@cowprotocol/sdk-contracts-ts": "2.
|
|
27
|
-
"@cowprotocol/sdk-
|
|
28
|
-
"@cowprotocol/sdk-
|
|
29
|
-
"@cowprotocol/sdk-
|
|
30
|
-
"@cowprotocol/sdk-weiroll": "0.1.
|
|
31
|
-
"@cowprotocol/sdk-trading": "1.1.2"
|
|
27
|
+
"@cowprotocol/sdk-contracts-ts": "2.3.0",
|
|
28
|
+
"@cowprotocol/sdk-cow-shed": "0.3.4",
|
|
29
|
+
"@cowprotocol/sdk-order-book": "2.0.4",
|
|
30
|
+
"@cowprotocol/sdk-trading": "1.2.1",
|
|
31
|
+
"@cowprotocol/sdk-weiroll": "0.1.27"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@types/jest": "^29.4.0",
|
|
@@ -44,10 +44,10 @@
|
|
|
44
44
|
"typescript": "^5.2.2",
|
|
45
45
|
"viem": "^2.28.4",
|
|
46
46
|
"@cow-sdk/typescript-config": "0.0.0-beta.0",
|
|
47
|
-
"@cowprotocol/sdk-ethers-v5-adapter": "0.
|
|
48
|
-
"@cowprotocol/sdk-ethers-v6-adapter": "0.
|
|
49
|
-
"@cowprotocol/sdk-
|
|
50
|
-
"@cowprotocol/sdk-
|
|
47
|
+
"@cowprotocol/sdk-ethers-v5-adapter": "0.4.1",
|
|
48
|
+
"@cowprotocol/sdk-ethers-v6-adapter": "0.4.1",
|
|
49
|
+
"@cowprotocol/sdk-viem-adapter": "0.3.15",
|
|
50
|
+
"@cowprotocol/sdk-order-signing": "0.2.4"
|
|
51
51
|
},
|
|
52
52
|
"scripts": {
|
|
53
53
|
"build": "tsup src/index.ts --format esm,cjs --dts",
|