Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions src/adapter/BaseChainAdapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ import {
setL2TokenAllowanceInCache,
TransferTokenParams,
} from "./utils";
import { BaseBridgeAdapter, BridgeTransactionDetails } from "./bridges/BaseBridgeAdapter";
import { BridgeEvents, BaseBridgeAdapter, BridgeTransactionDetails } from "./bridges/BaseBridgeAdapter";
import { OutstandingTransfers } from "../interfaces";
import WETH_ABI from "../common/abi/Weth.json";
import { BaseL2BridgeAdapter } from "./l2Bridges/BaseL2BridgeAdapter";
Expand All @@ -57,7 +57,7 @@ import { ExpandedERC20 } from "@across-protocol/contracts";
export type SupportedL1Token = EvmAddress;
export type SupportedTokenSymbol = string;

export class BaseChainAdapter {
export class BaseChainAdapter<O, D> {
protected baseL1SearchConfig: MakeOptional<EventSearchConfig, "to">;
protected baseL2SearchConfig: MakeOptional<EventSearchConfig, "to">;
protected readonly spokePoolManager: SpokePoolManager;
Expand All @@ -70,7 +70,7 @@ export class BaseChainAdapter {
protected readonly monitoredAddresses: Address[],
protected readonly logger: winston.Logger,
public readonly supportedTokens: SupportedTokenSymbol[],
protected readonly bridges: { [l1Token: string]: BaseBridgeAdapter },
protected readonly bridges: { [l1Token: string]: BaseBridgeAdapter<O, D> },
protected readonly l2Bridges: { [l1Token: string]: BaseL2BridgeAdapter },
protected readonly gasMultiplier: number
) {
Expand Down Expand Up @@ -513,7 +513,7 @@ export class BaseChainAdapter {
await forEachAsync(this.monitoredAddresses, async (monitoredAddress) => {
await forEachAsync(availableL1Tokens, async (l1Token) => {
const bridge = this.bridges[l1Token.toNative()];
const [depositInitiatedResults, depositFinalizedResults] = await Promise.all([
const [depositInitiatedResults, depositFinalizedResults]: [BridgeEvents, BridgeEvents] = await Promise.all([
bridge.queryL1BridgeInitiationEvents(l1Token, monitoredAddress, monitoredAddress, l1SearchConfig),
bridge.queryL2BridgeFinalizationEvents(l1Token, monitoredAddress, monitoredAddress, l2SearchConfig),
]);
Expand Down
4 changes: 2 additions & 2 deletions src/adapter/bridges/ArbitrumOrbitBridge.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ const maxFeePerGas: { [chainId: number]: BigNumber } = {
[CHAIN_IDs.ARBITRUM_SEPOLIA]: toBN(20e9),
};

export class ArbitrumOrbitBridge extends BaseBridgeAdapter {
export class ArbitrumOrbitBridge extends BaseBridgeAdapter<Signer, Signer | Provider> {
protected l1GatewayRouter: Contract;

private readonly transactionSubmissionData =
Expand All @@ -58,7 +58,7 @@ export class ArbitrumOrbitBridge extends BaseBridgeAdapter {
const l1Abi = CONTRACT_ADDRESSES[hubChainId][`orbitErc20Gateway_${l2chainId}`].abi;
const l2Abi = ARBITRUM_ERC20_GATEWAY_L2_ABI;

super(l2chainId, hubChainId, l1Signer, [EvmAddress.from(l1Address)]);
super(l2chainId, hubChainId, l1Signer, l2SignerOrProvider, [EvmAddress.from(l1Address)]);

const nativeToken = PUBLIC_NETWORKS[l2chainId].nativeToken;
// Only set nonstandard gas tokens.
Expand Down
6 changes: 3 additions & 3 deletions src/adapter/bridges/BaseBridgeAdapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import {
Contract,
BigNumber,
EventSearchConfig,
Signer,
getTranslatedTokenAddress,
assert,
isDefined,
Expand All @@ -27,7 +26,7 @@ export type BridgeEvent = SortableEvent & {

export type BridgeEvents = { [l2Token: string]: BridgeEvent[] };

export abstract class BaseBridgeAdapter {
export abstract class BaseBridgeAdapter<O, D> {
protected l1Bridge: Contract;
protected l2Bridge: Contract;
public gasToken: EvmAddress | undefined;
Expand All @@ -37,7 +36,8 @@ export abstract class BaseBridgeAdapter {
constructor(
protected l2chainId: number,
protected hubChainId: number,
protected l1Signer: Signer,
protected l1Signer: O,
protected l2SignerOrProvider: D,
public l1Gateways: EvmAddress[]
) {
this.hubPoolAddress = getHubPoolAddress(hubChainId);
Expand Down
4 changes: 2 additions & 2 deletions src/adapter/bridges/BinanceCEXBridge.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import {
import { BaseBridgeAdapter, BridgeTransactionDetails, BridgeEvents, BridgeEvent } from "./BaseBridgeAdapter";
import ERC20_ABI from "../../common/abi/MinimalERC20.json";

export class BinanceCEXBridge extends BaseBridgeAdapter {
export class BinanceCEXBridge extends BaseBridgeAdapter<Signer, Signer | Provider> {
// Only store the promise in the constructor and evaluate the promise in async blocks.
protected readonly binanceApiClientPromise;
protected binanceApiClient;
Expand All @@ -44,7 +44,7 @@ export class BinanceCEXBridge extends BaseBridgeAdapter {
throw new Error("Cannot define a binance CEX bridge on a non-production network");
}
// No L1 gateways needed since no L1 bridge transfers tokens from the EOA.
super(l2chainId, hubChainId, l1Signer, []);
super(l2chainId, hubChainId, l1Signer, l2SignerOrProvider, []);
// Pull the binance API key from environment and throw if we cannot instantiate this bridge.
this.binanceApiClientPromise = getBinanceApiClient(process.env["BINANCE_API_BASE"]);

Expand Down
4 changes: 2 additions & 2 deletions src/adapter/bridges/BlastBridge.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import { CONTRACT_ADDRESSES } from "../../common";
import { BaseBridgeAdapter, BridgeTransactionDetails, BridgeEvents } from "./BaseBridgeAdapter";
import { processEvent } from "../utils";

export class BlastBridge extends BaseBridgeAdapter {
export class BlastBridge extends BaseBridgeAdapter<Signer, Signer | Provider> {
private readonly l2Gas = 200000;

constructor(
Expand All @@ -27,7 +27,7 @@ export class BlastBridge extends BaseBridgeAdapter {
) {
const { address: l1Address, abi: l1Abi } = CONTRACT_ADDRESSES[hubChainId].blastBridge;
const { address: l2Address, abi: l2Abi } = CONTRACT_ADDRESSES[l2chainId].blastBridge;
super(l2chainId, hubChainId, l1Signer, [EvmAddress.from(l1Address)]);
super(l2chainId, hubChainId, l1Signer, l2SignerOrProvider, [EvmAddress.from(l1Address)]);

this.l1Bridge = new Contract(l1Address, l1Abi, l1Signer);
this.l2Bridge = new Contract(l2Address, l2Abi, l2SignerOrProvider);
Expand Down
4 changes: 2 additions & 2 deletions src/adapter/bridges/HyperlaneXERC20Bridge.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import { PUBLIC_NETWORKS, HYPERLANE_NO_DOMAIN_ID } from "@across-protocol/consta
import HYPERLANE_ROUTER_ABI from "../../common/abi/IHypXERC20Router.json";
import { HYPERLANE_DEFAULT_FEE_CAP, HYPERLANE_FEE_CAP_OVERRIDES, HYPERLANE_ROUTERS } from "../../common";

export class HyperlaneXERC20Bridge extends BaseBridgeAdapter {
export class HyperlaneXERC20Bridge extends BaseBridgeAdapter<Signer, Signer | Provider> {
readonly hubToken: EvmAddress;
readonly dstToken: EvmAddress;
private readonly hubDomainId: number;
Expand All @@ -40,7 +40,7 @@ export class HyperlaneXERC20Bridge extends BaseBridgeAdapter {
);
const l1RouterEvmAddress = EvmAddress.from(l1RouterAddressStr);

super(l2chainId, hubChainId, l1Signer, [l1RouterEvmAddress]);
super(l2chainId, hubChainId, l1Signer, l2SignerOrProvider, [l1RouterEvmAddress]);

this.hubToken = l1Token;
this.hubDomainId = PUBLIC_NETWORKS[hubChainId].hypDomainId;
Expand Down
4 changes: 2 additions & 2 deletions src/adapter/bridges/LineaBridge.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import { CONTRACT_ADDRESSES } from "../../common";
import { BridgeTransactionDetails, BaseBridgeAdapter, BridgeEvents } from "./BaseBridgeAdapter";
import { processEvent } from "../utils";

export class LineaBridge extends BaseBridgeAdapter {
export class LineaBridge extends BaseBridgeAdapter<Signer, Signer | Provider> {
constructor(
l2chainId: number,
hubChainId: number,
Expand All @@ -25,7 +25,7 @@ export class LineaBridge extends BaseBridgeAdapter {
) {
const { address: l1Address, abi: l1Abi } = CONTRACT_ADDRESSES[hubChainId].lineaL1TokenBridge;
const { address: l2Address, abi: l2Abi } = CONTRACT_ADDRESSES[l2chainId].lineaL2TokenBridge;
super(l2chainId, hubChainId, l1Signer, [EvmAddress.from(l1Address)]);
super(l2chainId, hubChainId, l1Signer, l2SignerOrProvider, [EvmAddress.from(l1Address)]);

this.l1Bridge = new Contract(l1Address, l1Abi, l1Signer);
this.l2Bridge = new Contract(l2Address, l2Abi, l2SignerOrProvider);
Expand Down
4 changes: 2 additions & 2 deletions src/adapter/bridges/LineaWethBridge.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import { CONTRACT_ADDRESSES } from "../../common";
import { BridgeTransactionDetails, BaseBridgeAdapter, BridgeEvents } from "./BaseBridgeAdapter";
import { processEvent } from "../utils";

export class LineaWethBridge extends BaseBridgeAdapter {
export class LineaWethBridge extends BaseBridgeAdapter<Signer, Signer | Provider> {
protected atomicDepositor: Contract;
protected blockFinder: EVMBlockFinder;

Expand All @@ -34,7 +34,7 @@ export class LineaWethBridge extends BaseBridgeAdapter {
const { address: l1Address, abi: l1Abi } = CONTRACT_ADDRESSES[hubChainId].lineaMessageService;
const { address: l2Address, abi: l2Abi } = CONTRACT_ADDRESSES[l2chainId].l2MessageService;
const { address: atomicDepositorAddress, abi: atomicDepositorAbi } = CONTRACT_ADDRESSES[hubChainId].atomicDepositor;
super(l2chainId, hubChainId, l1Signer, [EvmAddress.from(atomicDepositorAddress)]);
super(l2chainId, hubChainId, l1Signer, l2SignerOrProvider, [EvmAddress.from(atomicDepositorAddress)]);

this.atomicDepositor = new Contract(atomicDepositorAddress, atomicDepositorAbi, l1Signer);
this.l1Bridge = new Contract(l1Address, l1Abi, l1Signer);
Expand Down
4 changes: 2 additions & 2 deletions src/adapter/bridges/OFTBridge.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ type OFTBridgeArguments = {
refundAddress: string;
};

export class OFTBridge extends BaseBridgeAdapter {
export class OFTBridge extends BaseBridgeAdapter<Signer, Signer | Provider> {
public readonly l2TokenAddress: string;
private readonly l1ChainEid: number;
private readonly l2ChainEid: number;
Expand All @@ -51,7 +51,7 @@ export class OFTBridge extends BaseBridgeAdapter {
const l1OftMessenger = OFT.getMessengerEvm(l1TokenAddress, l1ChainId);
const l2OftMessenger = OFT.getMessengerEvm(l1TokenAddress, l2ChainId);

super(l2ChainId, l1ChainId, l1Signer, [l1OftMessenger]);
super(l2ChainId, l1ChainId, l1Signer, l2SignerOrProvider, [l1OftMessenger]);

this.l2TokenAddress = this.resolveL2TokenAddress(l1TokenAddress);
this.l1ChainEid = OFT.getEndpointId(l1ChainId);
Expand Down
4 changes: 2 additions & 2 deletions src/adapter/bridges/OpStackDefaultErc20Bridge.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import { CONTRACT_ADDRESSES } from "../../common";
import { BridgeTransactionDetails, BaseBridgeAdapter, BridgeEvents } from "./BaseBridgeAdapter";
import { processEvent } from "../utils";

export class OpStackDefaultERC20Bridge extends BaseBridgeAdapter {
export class OpStackDefaultERC20Bridge extends BaseBridgeAdapter<Signer, Signer | Provider> {
private readonly l2Gas = 200000;

constructor(
Expand All @@ -25,7 +25,7 @@ export class OpStackDefaultERC20Bridge extends BaseBridgeAdapter {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
_logger: winston.Logger
) {
super(l2chainId, hubChainId, l1Signer, [
super(l2chainId, hubChainId, l1Signer, l2SignerOrProvider, [
EvmAddress.from(CONTRACT_ADDRESSES[hubChainId][`ovmStandardBridge_${l2chainId}`].address),
]);

Expand Down
4 changes: 2 additions & 2 deletions src/adapter/bridges/OpStackUSDCBridge.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import { CONTRACT_ADDRESSES } from "../../common";
import { BaseBridgeAdapter, BridgeTransactionDetails, BridgeEvents } from "./BaseBridgeAdapter";
import { processEvent } from "../utils";

export class OpStackUSDCBridge extends BaseBridgeAdapter {
export class OpStackUSDCBridge extends BaseBridgeAdapter<Signer, Signer | Provider> {
private readonly l2Gas = 200000;

constructor(
Expand All @@ -27,7 +27,7 @@ export class OpStackUSDCBridge extends BaseBridgeAdapter {
) {
const { address: l1Address, abi: l1Abi } = CONTRACT_ADDRESSES[hubChainId][`opUSDCBridge_${l2chainId}`];
const { address: l2Address, abi: l2Abi } = CONTRACT_ADDRESSES[l2chainId].opUSDCBridge;
super(l2chainId, hubChainId, l1Signer, [EvmAddress.from(l1Address)]);
super(l2chainId, hubChainId, l1Signer, l2SignerOrProvider, [EvmAddress.from(l1Address)]);

this.l1Bridge = new Contract(l1Address, l1Abi, l1Signer);
this.l2Bridge = new Contract(l2Address, l2Abi, l2SignerOrProvider);
Expand Down
3 changes: 2 additions & 1 deletion src/adapter/bridges/OpStackWethBridge.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import { utils } from "@across-protocol/sdk";
import { BridgeTransactionDetails, BaseBridgeAdapter, BridgeEvents } from "./BaseBridgeAdapter";
import WETH_ABI from "../../common/abi/Weth.json";

export class OpStackWethBridge extends BaseBridgeAdapter {
export class OpStackWethBridge extends BaseBridgeAdapter<Signer, Signer | Provider> {
protected atomicDepositor: Contract;
protected l2Weth: Contract;
protected l1Weth: EvmAddress;
Expand All @@ -39,6 +39,7 @@ export class OpStackWethBridge extends BaseBridgeAdapter {
l2chainId,
hubChainId,
l1Signer,
l2SignerOrProvider,
// To keep existing logic, we should use atomic depositor as the l1 bridge
[EvmAddress.from(CONTRACT_ADDRESSES[hubChainId].atomicDepositor.address)]
);
Expand Down
4 changes: 2 additions & 2 deletions src/adapter/bridges/PolygonERC20Bridge.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import { processEvent } from "../utils";
* and a token gateway which is the address used to initiate a
* deposit
*/
export class PolygonERC20Bridge extends BaseBridgeAdapter {
export class PolygonERC20Bridge extends BaseBridgeAdapter<Signer, Signer | Provider> {
protected l1Gateway: Contract;

constructor(
Expand All @@ -36,7 +36,7 @@ export class PolygonERC20Bridge extends BaseBridgeAdapter {
// up-to-date.
const { address: l1Address, abi: l1Abi } = CONTRACT_ADDRESSES[hubChainId].polygonBridge;
const { address: l1GatewayAddress, abi: l1GatewayAbi } = CONTRACT_ADDRESSES[hubChainId].polygonRootChainManager;
super(l2chainId, hubChainId, l1Signer, [EvmAddress.from(l1Address)]);
super(l2chainId, hubChainId, l1Signer, l2SignerOrProvider, [EvmAddress.from(l1Address)]);

this.l1Bridge = new Contract(l1Address, l1Abi, l1Signer);
this.l1Gateway = new Contract(l1GatewayAddress, l1GatewayAbi, l1Signer);
Expand Down
4 changes: 2 additions & 2 deletions src/adapter/bridges/PolygonWethBridge.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import { processEvent } from "../utils";
* and a token gateway which is the address used to initiate a
* deposit
*/
export class PolygonWethBridge extends BaseBridgeAdapter {
export class PolygonWethBridge extends BaseBridgeAdapter<Signer, Signer | Provider> {
protected atomicDepositor: Contract;
protected rootChainManager: Contract;

Expand All @@ -41,7 +41,7 @@ export class PolygonWethBridge extends BaseBridgeAdapter {
const { address: atomicDepositorAddress, abi: atomicDepositorAbi } = CONTRACT_ADDRESSES[hubChainId].atomicDepositor;
const { address: rootChainManagerAddress, abi: rootChainManagerAbi } =
CONTRACT_ADDRESSES[hubChainId].polygonRootChainManager;
super(l2chainId, hubChainId, l1Signer, [EvmAddress.from(atomicDepositorAddress)]);
super(l2chainId, hubChainId, l1Signer, l2SignerOrProvider, [EvmAddress.from(atomicDepositorAddress)]);

this.l1Bridge = new Contract(l1Address, l1Abi, l1Signer);
this.atomicDepositor = new Contract(atomicDepositorAddress, atomicDepositorAbi, l1Signer);
Expand Down
4 changes: 2 additions & 2 deletions src/adapter/bridges/ScrollERC20Bridge.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ const SCROLL_STANDARD_GATEWAY: { l1: string; l2: string } = {
l2: "0xE2b4795039517653c5Ae8C2A9BFdd783b48f447A",
};

export class ScrollERC20Bridge extends BaseBridgeAdapter {
export class ScrollERC20Bridge extends BaseBridgeAdapter<Signer, Signer | Provider> {
// Gas limit obtained here: https://docs.scroll.io/en/developers/l1-and-l2-bridging/eth-and-erc20-token-bridge
protected l2Gas = 200000;
protected feeMultiplier = toWei(1.5);
Expand All @@ -46,7 +46,7 @@ export class ScrollERC20Bridge extends BaseBridgeAdapter {

const { address: gasPriceOracleAddress, abi: gasPriceOracleAbi } =
CONTRACT_ADDRESSES[hubChainId].scrollGasPriceOracle;
super(l2chainId, hubChainId, l1Signer, [EvmAddress.from(l1Address)]);
super(l2chainId, hubChainId, l1Signer, l2SignerOrProvider, [EvmAddress.from(l1Address)]);

this.l1Bridge = new Contract(l1BridgeAddress, l1Abi, l1Signer);
this.l2Bridge = new Contract(l2BridgeAddress, l2Abi, l2SignerOrProvider);
Expand Down
6 changes: 4 additions & 2 deletions src/adapter/bridges/SnxOptimismBridge.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import { CONTRACT_ADDRESSES } from "../../common";
import { BaseBridgeAdapter, BridgeTransactionDetails, BridgeEvents } from "./BaseBridgeAdapter";
import { processEvent } from "../utils";

export class SnxOptimismBridge extends BaseBridgeAdapter {
export class SnxOptimismBridge extends BaseBridgeAdapter<Signer, Signer | Provider> {
constructor(
l2chainId: number,
hubChainId: number,
Expand All @@ -24,7 +24,9 @@ export class SnxOptimismBridge extends BaseBridgeAdapter {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
_logger: winston.Logger
) {
super(l2chainId, hubChainId, l1Signer, [EvmAddress.from(CONTRACT_ADDRESSES[hubChainId].snxOptimismBridge.address)]);
super(l2chainId, hubChainId, l1Signer, l2SignerOrProvider, [
EvmAddress.from(CONTRACT_ADDRESSES[hubChainId].snxOptimismBridge.address),
]);

const { address: l1Address, abi: l1Abi } = CONTRACT_ADDRESSES[hubChainId].snxOptimismBridge;
this.l1Bridge = new Contract(l1Address, l1Abi, l1Signer);
Expand Down
4 changes: 2 additions & 2 deletions src/adapter/bridges/SolanaUsdcCCTPBridge.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ type MintAndWithdrawData = {
amount: bigint;
};

export class SolanaUsdcCCTPBridge extends BaseBridgeAdapter {
export class SolanaUsdcCCTPBridge extends BaseBridgeAdapter<Signer, SVMProvider> {
private readonly l1UsdcTokenAddress: EvmAddress;
private readonly l2UsdcTokenAddress: SvmAddress;
private readonly solanaMessageTransmitter: SvmAddress;
Expand All @@ -53,7 +53,7 @@ export class SolanaUsdcCCTPBridge extends BaseBridgeAdapter {
// This adapter currently only supports CCTP V1.
const { address: l1Address, abi: l1Abi } = getCctpV1TokenMessenger(hubChainId);

super(l2chainId, hubChainId, l1Signer, [EvmAddress.from(l1Address)]);
super(l2chainId, hubChainId, l1Signer, l2Provider, [EvmAddress.from(l1Address)]);
assert(
getCctpDomainForChainId(l2chainId) !== CCTP_NO_DOMAIN && getCctpDomainForChainId(hubChainId) !== CCTP_NO_DOMAIN,
"Unknown CCTP domain ID"
Expand Down
4 changes: 2 additions & 2 deletions src/adapter/bridges/UsdcCCTPBridge.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ import { CCTP_NO_DOMAIN } from "@across-protocol/constants";
import { CCTP_MAX_SEND_AMOUNT } from "../../common";
import { SortableEvent } from "../../interfaces";

export class UsdcCCTPBridge extends BaseBridgeAdapter {
export class UsdcCCTPBridge extends BaseBridgeAdapter<Signer, Signer | Provider> {
private IS_CCTP_V2 = false;
private readonly l1UsdcTokenAddress: EvmAddress;

Expand All @@ -42,7 +42,7 @@ export class UsdcCCTPBridge extends BaseBridgeAdapter {
_logger: winston.Logger
) {
const { address: l1Address, abi: l1Abi } = getCctpV2TokenMessenger(hubChainId);
super(l2chainId, hubChainId, l1Signer, [EvmAddress.from(l1Address)]);
super(l2chainId, hubChainId, l1Signer, l2SignerOrProvider, [EvmAddress.from(l1Address)]);
assert(
getCctpDomainForChainId(l2chainId) !== CCTP_NO_DOMAIN && getCctpDomainForChainId(hubChainId) !== CCTP_NO_DOMAIN,
"Unknown CCTP domain ID"
Expand Down
Loading