diff --git a/src/adapter/bridges/BaseBridgeAdapter.ts b/src/adapter/BaseBridgeAdapter.ts similarity index 77% rename from src/adapter/bridges/BaseBridgeAdapter.ts rename to src/adapter/BaseBridgeAdapter.ts index f29cda5b06..d50bd14e83 100644 --- a/src/adapter/bridges/BaseBridgeAdapter.ts +++ b/src/adapter/BaseBridgeAdapter.ts @@ -9,9 +9,9 @@ import { Address, getHubPoolAddress, getSpokePoolAddress, -} from "../../utils"; -import { SortableEvent } from "../../interfaces"; -import { TransferTokenParams } from "../utils"; +} from "../utils"; +import { SortableEvent } from "../interfaces"; +import { TransferTokenParams } from "./utils"; export interface BridgeTransactionDetails { readonly contract: Contract; @@ -34,14 +34,14 @@ export abstract class BaseBridgeAdapter { protected readonly spokePoolAddress: Address; constructor( - protected l2chainId: number, - protected hubChainId: number, - protected l1Signer: O, - protected l2SignerOrProvider: D, - public l1Gateways: EvmAddress[] + protected dstChainId: number, + protected srcChainId: number, + protected srcSigner: O, + protected dstSignerOrProvider: D, + public srcGateways: EvmAddress[] ) { - this.hubPoolAddress = getHubPoolAddress(hubChainId); - this.spokePoolAddress = getSpokePoolAddress(l2chainId); + this.hubPoolAddress = getHubPoolAddress(srcChainId); + this.spokePoolAddress = getSpokePoolAddress(dstChainId); } abstract constructL1ToL2Txn( @@ -67,7 +67,7 @@ export abstract class BaseBridgeAdapter { ): Promise; protected resolveL2TokenAddress(l1Token: EvmAddress): string { - return getTranslatedTokenAddress(l1Token, this.hubChainId, this.l2chainId, false).toNative(); + return getTranslatedTokenAddress(l1Token, this.srcChainId, this.dstChainId, false).toNative(); } protected getL1Bridge(): Contract { diff --git a/src/adapter/BaseChainAdapter.ts b/src/adapter/BaseChainAdapter.ts index ee168dfdb3..e282650cd1 100644 --- a/src/adapter/BaseChainAdapter.ts +++ b/src/adapter/BaseChainAdapter.ts @@ -48,10 +48,10 @@ import { setL2TokenAllowanceInCache, TransferTokenParams, } from "./utils"; -import { BridgeEvents, BaseBridgeAdapter, BridgeTransactionDetails } from "./bridges/BaseBridgeAdapter"; +import { BridgeEvents, BaseBridgeAdapter, BridgeTransactionDetails } from "./BaseBridgeAdapter"; import { OutstandingTransfers } from "../interfaces"; import WETH_ABI from "../common/abi/Weth.json"; -import { BaseL2BridgeAdapter } from "./l2Bridges/BaseL2BridgeAdapter"; +import { BaseL2BridgeAdapter } from "./directed"; import { ExpandedERC20 } from "@across-protocol/contracts"; export type SupportedL1Token = EvmAddress; @@ -223,7 +223,7 @@ export class BaseChainAdapter { // each bridge supports (if applicable). const [bridgeTokensToApprove, gasTokensToApprove] = await Promise.all([ mapAsync( - l1Tokens.map((token) => [token, this.bridges[token.toNative()]?.l1Gateways] as [EvmAddress, EvmAddress[]]), + l1Tokens.map((token) => [token, this.bridges[token.toNative()]?.srcGateways] as [EvmAddress, EvmAddress[]]), async ([l1Token, bridges]) => { const l1TokenAddress = l1Token.toNative(); const erc20 = ERC20.connect(l1TokenAddress, this.getSigner(this.hubChainId)); @@ -248,7 +248,7 @@ export class BaseChainAdapter { async (bridge) => { const gasToken = bridge.gasToken; const erc20 = ERC20.connect(gasToken.toNative(), this.getSigner(this.hubChainId)); - const bridgesToApprove = await filterAsync(bridge.l1Gateways, async (gateway) => { + const bridgesToApprove = await filterAsync(bridge.srcGateways, async (gateway) => { const senderAddress = EvmAddress.from(await erc20.signer.getAddress()); const cachedResult = await getTokenAllowanceFromCache(gasToken, senderAddress, gateway); const allowance = cachedResult ?? (await erc20.allowance(senderAddress.toNative(), gateway.toNative())); diff --git a/src/adapter/directed/index.ts b/src/adapter/directed/index.ts new file mode 100644 index 0000000000..b546787514 --- /dev/null +++ b/src/adapter/directed/index.ts @@ -0,0 +1,13 @@ +export * from "./l1ToL2"; +export { + BaseL2BridgeAdapter, + HyperlaneXERC20BridgeL2, + OFTL2Bridge, + OpStackUSDCBridge as L2OpStackUSDCBridge, + OpStackWethBridge as L2OpStackWethBridge, + OpStackBridge as L2OpStackBridge, + BinanceCEXBridge as L2BinanceCEXBridge, + UsdcCCTPBridge as L2UsdcCCTPBridge, + BinanceCEXNativeBridge as L2BinanceCEXNativeBridge, + SolanaUsdcCCTPBridge as L2SolanaUsdcCCTPBridge, +} from "./l2ToL1"; diff --git a/src/adapter/bridges/ArbitrumOrbitBridge.ts b/src/adapter/directed/l1ToL2/ArbitrumOrbitBridge.ts similarity index 94% rename from src/adapter/bridges/ArbitrumOrbitBridge.ts rename to src/adapter/directed/l1ToL2/ArbitrumOrbitBridge.ts index e074a20ca5..63bdd56ced 100644 --- a/src/adapter/bridges/ArbitrumOrbitBridge.ts +++ b/src/adapter/directed/l1ToL2/ArbitrumOrbitBridge.ts @@ -14,12 +14,12 @@ import { CHAIN_IDs, EvmAddress, winston, -} from "../../utils"; -import { CONTRACT_ADDRESSES, CUSTOM_ARBITRUM_GATEWAYS, DEFAULT_ARBITRUM_GATEWAY } from "../../common"; -import { BridgeTransactionDetails, BaseBridgeAdapter, BridgeEvents } from "./BaseBridgeAdapter"; -import { processEvent } from "../utils"; +} from "../../../utils"; +import { CONTRACT_ADDRESSES, CUSTOM_ARBITRUM_GATEWAYS, DEFAULT_ARBITRUM_GATEWAY } from "../../../common"; +import { BridgeTransactionDetails, BaseBridgeAdapter, BridgeEvents } from "../../BaseBridgeAdapter"; +import { processEvent } from "../../utils"; import { PUBLIC_NETWORKS } from "@across-protocol/constants"; -import ARBITRUM_ERC20_GATEWAY_L2_ABI from "../../common/abi/ArbitrumErc20GatewayL2.json"; +import ARBITRUM_ERC20_GATEWAY_L2_ABI from "../../../common/abi/ArbitrumErc20GatewayL2.json"; const bridgeSubmitValue: { [chainId: number]: BigNumber } = { [CHAIN_IDs.ARBITRUM]: toWei(0.013), diff --git a/src/adapter/bridges/BlastBridge.ts b/src/adapter/directed/l1ToL2/BlastBridge.ts similarity index 93% rename from src/adapter/bridges/BlastBridge.ts rename to src/adapter/directed/l1ToL2/BlastBridge.ts index 4b0d6b4533..f866f84287 100644 --- a/src/adapter/bridges/BlastBridge.ts +++ b/src/adapter/directed/l1ToL2/BlastBridge.ts @@ -7,10 +7,10 @@ import { Provider, EvmAddress, winston, -} from "../../utils"; -import { CONTRACT_ADDRESSES } from "../../common"; -import { BaseBridgeAdapter, BridgeTransactionDetails, BridgeEvents } from "./BaseBridgeAdapter"; -import { processEvent } from "../utils"; +} from "../../../utils"; +import { CONTRACT_ADDRESSES } from "../../../common"; +import { BaseBridgeAdapter, BridgeTransactionDetails, BridgeEvents } from "../../BaseBridgeAdapter"; +import { processEvent } from "../../utils"; export class BlastBridge extends BaseBridgeAdapter { private readonly l2Gas = 200000; diff --git a/src/adapter/bridges/DaiOptimismBridge.ts b/src/adapter/directed/l1ToL2/DaiOptimismBridge.ts similarity index 89% rename from src/adapter/bridges/DaiOptimismBridge.ts rename to src/adapter/directed/l1ToL2/DaiOptimismBridge.ts index 873204e077..e46e4353c6 100644 --- a/src/adapter/bridges/DaiOptimismBridge.ts +++ b/src/adapter/directed/l1ToL2/DaiOptimismBridge.ts @@ -1,5 +1,5 @@ -import { Contract, Signer, Provider, EvmAddress, winston } from "../../utils"; -import { CONTRACT_ADDRESSES } from "../../common"; +import { Contract, Signer, Provider, EvmAddress, winston } from "../../../utils"; +import { CONTRACT_ADDRESSES } from "../../../common"; import { OpStackDefaultERC20Bridge } from "./OpStackDefaultErc20Bridge"; export class DaiOptimismBridge extends OpStackDefaultERC20Bridge { @@ -23,6 +23,6 @@ export class DaiOptimismBridge extends OpStackDefaultERC20Bridge { // we will need to overwrite the l1Gateways parameter, since when calling the super() // constructor, l1Gateways will be incorrectly set to the OVM standard bridge address, // not the DaiOptimismBridgeAddress. - this.l1Gateways = [EvmAddress.from(l1Address)]; + this.srcGateways = [EvmAddress.from(l1Address)]; } } diff --git a/src/adapter/bridges/LineaBridge.ts b/src/adapter/directed/l1ToL2/LineaBridge.ts similarity index 93% rename from src/adapter/bridges/LineaBridge.ts rename to src/adapter/directed/l1ToL2/LineaBridge.ts index 92cc63be7e..1cc38f930d 100644 --- a/src/adapter/bridges/LineaBridge.ts +++ b/src/adapter/directed/l1ToL2/LineaBridge.ts @@ -7,10 +7,10 @@ import { Provider, EvmAddress, winston, -} from "../../utils"; -import { CONTRACT_ADDRESSES } from "../../common"; -import { BridgeTransactionDetails, BaseBridgeAdapter, BridgeEvents } from "./BaseBridgeAdapter"; -import { processEvent } from "../utils"; +} from "../../../utils"; +import { CONTRACT_ADDRESSES } from "../../../common"; +import { BridgeTransactionDetails, BaseBridgeAdapter, BridgeEvents } from "../../BaseBridgeAdapter"; +import { processEvent } from "../../utils"; export class LineaBridge extends BaseBridgeAdapter { constructor( diff --git a/src/adapter/bridges/LineaWethBridge.ts b/src/adapter/directed/l1ToL2/LineaWethBridge.ts similarity index 92% rename from src/adapter/bridges/LineaWethBridge.ts rename to src/adapter/directed/l1ToL2/LineaWethBridge.ts index a63413dd74..99ad38ec9f 100644 --- a/src/adapter/bridges/LineaWethBridge.ts +++ b/src/adapter/directed/l1ToL2/LineaWethBridge.ts @@ -11,10 +11,10 @@ import { isDefined, EvmAddress, winston, -} from "../../utils"; -import { CONTRACT_ADDRESSES } from "../../common"; -import { BridgeTransactionDetails, BaseBridgeAdapter, BridgeEvents } from "./BaseBridgeAdapter"; -import { processEvent } from "../utils"; +} from "../../../utils"; +import { CONTRACT_ADDRESSES } from "../../../common"; +import { BridgeTransactionDetails, BaseBridgeAdapter, BridgeEvents } from "../../BaseBridgeAdapter"; +import { processEvent } from "../../utils"; export class LineaWethBridge extends BaseBridgeAdapter { protected atomicDepositor: Contract; @@ -55,7 +55,7 @@ export class LineaWethBridge extends BaseBridgeAdapter { private readonly l2Gas = 200000; diff --git a/src/adapter/bridges/OpStackUSDCBridge.ts b/src/adapter/directed/l1ToL2/OpStackUSDCBridge.ts similarity index 93% rename from src/adapter/bridges/OpStackUSDCBridge.ts rename to src/adapter/directed/l1ToL2/OpStackUSDCBridge.ts index e6bce4c41b..987070b63a 100644 --- a/src/adapter/bridges/OpStackUSDCBridge.ts +++ b/src/adapter/directed/l1ToL2/OpStackUSDCBridge.ts @@ -7,10 +7,10 @@ import { Provider, EvmAddress, winston, -} from "../../utils"; -import { CONTRACT_ADDRESSES } from "../../common"; -import { BaseBridgeAdapter, BridgeTransactionDetails, BridgeEvents } from "./BaseBridgeAdapter"; -import { processEvent } from "../utils"; +} from "../../../utils"; +import { CONTRACT_ADDRESSES } from "../../../common"; +import { BaseBridgeAdapter, BridgeTransactionDetails, BridgeEvents } from "../../BaseBridgeAdapter"; +import { processEvent } from "../../utils"; export class OpStackUSDCBridge extends BaseBridgeAdapter { private readonly l2Gas = 200000; diff --git a/src/adapter/bridges/OpStackWethBridge.ts b/src/adapter/directed/l1ToL2/OpStackWethBridge.ts similarity index 96% rename from src/adapter/bridges/OpStackWethBridge.ts rename to src/adapter/directed/l1ToL2/OpStackWethBridge.ts index 8ec55534c9..55336cbf91 100644 --- a/src/adapter/bridges/OpStackWethBridge.ts +++ b/src/adapter/directed/l1ToL2/OpStackWethBridge.ts @@ -10,13 +10,13 @@ import { TOKEN_SYMBOLS_MAP, EvmAddress, winston, -} from "../../utils"; -import { CONTRACT_ADDRESSES } from "../../common"; -import { Log } from "../../interfaces"; -import { matchL2EthDepositAndWrapEvents, processEvent } from "../utils"; +} from "../../../utils"; +import { CONTRACT_ADDRESSES } from "../../../common"; +import { Log } from "../../../interfaces"; +import { matchL2EthDepositAndWrapEvents, processEvent } from "../../utils"; import { utils } from "@across-protocol/sdk"; -import { BridgeTransactionDetails, BaseBridgeAdapter, BridgeEvents } from "./BaseBridgeAdapter"; -import WETH_ABI from "../../common/abi/Weth.json"; +import { BridgeTransactionDetails, BaseBridgeAdapter, BridgeEvents } from "../../BaseBridgeAdapter"; +import WETH_ABI from "../../../common/abi/Weth.json"; export class OpStackWethBridge extends BaseBridgeAdapter { protected atomicDepositor: Contract; @@ -54,7 +54,7 @@ export class OpStackWethBridge extends BaseBridgeAdapter L2 events * and a token gateway which is the address used to initiate a diff --git a/src/adapter/bridges/PolygonWethBridge.ts b/src/adapter/directed/l1ToL2/PolygonWethBridge.ts similarity index 93% rename from src/adapter/bridges/PolygonWethBridge.ts rename to src/adapter/directed/l1ToL2/PolygonWethBridge.ts index 5302e4a02d..a3fc3d906f 100644 --- a/src/adapter/bridges/PolygonWethBridge.ts +++ b/src/adapter/directed/l1ToL2/PolygonWethBridge.ts @@ -10,10 +10,10 @@ import { getL2TokenAddresses, EvmAddress, winston, -} from "../../utils"; -import { CONTRACT_ADDRESSES } from "../../common"; -import { BridgeTransactionDetails, BaseBridgeAdapter, BridgeEvents } from "./BaseBridgeAdapter"; -import { processEvent } from "../utils"; +} from "../../../utils"; +import { CONTRACT_ADDRESSES } from "../../../common"; +import { BridgeTransactionDetails, BaseBridgeAdapter, BridgeEvents } from "../../BaseBridgeAdapter"; +import { processEvent } from "../../utils"; /* Polygon has a bridge which we check for L1 <-> L2 events * and a token gateway which is the address used to initiate a @@ -64,7 +64,7 @@ export class PolygonWethBridge extends BaseBridgeAdapter { constructor( @@ -91,11 +91,11 @@ export class SnxOptimismBridge extends BaseBridgeAdapter { diff --git a/src/adapter/bridges/SolanaUsdcCCTPBridge.ts b/src/adapter/directed/l1ToL2/SolanaUsdcCCTPBridge.ts similarity index 90% rename from src/adapter/bridges/SolanaUsdcCCTPBridge.ts rename to src/adapter/directed/l1ToL2/SolanaUsdcCCTPBridge.ts index 6109eabbd5..ef2eb8d007 100644 --- a/src/adapter/bridges/SolanaUsdcCCTPBridge.ts +++ b/src/adapter/directed/l1ToL2/SolanaUsdcCCTPBridge.ts @@ -1,5 +1,5 @@ import { Contract, Signer } from "ethers"; -import { BridgeTransactionDetails, BaseBridgeAdapter, BridgeEvents } from "./BaseBridgeAdapter"; +import { BridgeTransactionDetails, BaseBridgeAdapter, BridgeEvents } from "../../BaseBridgeAdapter"; import { BigNumber, EventSearchConfig, @@ -18,12 +18,12 @@ import { getAssociatedTokenAddress, winston, getCctpV1TokenMessenger, -} from "../../utils"; -import { processEvent } from "../utils"; +} from "../../../utils"; +import { processEvent } from "../../utils"; import { CCTP_NO_DOMAIN } from "@across-protocol/constants"; import { arch } from "@across-protocol/sdk"; import { TokenMessengerMinterIdl } from "@across-protocol/contracts"; -import { CCTP_MAX_SEND_AMOUNT } from "../../common"; +import { CCTP_MAX_SEND_AMOUNT } from "../../../common"; type MintAndWithdrawData = { mintRecipient: string; @@ -68,17 +68,17 @@ export class SolanaUsdcCCTPBridge extends BaseBridgeAdapter l2Address, TokenMessengerMinterIdl ); - this.l1UsdcTokenAddress = EvmAddress.from(TOKEN_SYMBOLS_MAP.USDC.addresses[this.hubChainId]); - this.l2UsdcTokenAddress = SvmAddress.from(TOKEN_SYMBOLS_MAP.USDC.addresses[this.l2chainId]); + this.l1UsdcTokenAddress = EvmAddress.from(TOKEN_SYMBOLS_MAP.USDC.addresses[this.srcChainId]); + this.l2UsdcTokenAddress = SvmAddress.from(TOKEN_SYMBOLS_MAP.USDC.addresses[this.dstChainId]); } private get l2DestinationDomain(): number { - return getCctpDomainForChainId(this.l2chainId); + return getCctpDomainForChainId(this.dstChainId); } protected resolveL2TokenAddress(l1Token: EvmAddress): string { l1Token; - return TOKEN_SYMBOLS_MAP.USDC.addresses[this.l2chainId]; + return TOKEN_SYMBOLS_MAP.USDC.addresses[this.dstChainId]; } async constructL1ToL2Txn( @@ -87,8 +87,8 @@ export class SolanaUsdcCCTPBridge extends BaseBridgeAdapter _l2Token: Address, amount: BigNumber ): Promise { - assert(compareAddressesSimple(l1Token.toNative(), TOKEN_SYMBOLS_MAP.USDC.addresses[this.hubChainId])); - const signer = await this.l1Signer.getAddress(); + assert(compareAddressesSimple(l1Token.toNative(), TOKEN_SYMBOLS_MAP.USDC.addresses[this.srcChainId])); + const signer = await this.srcSigner.getAddress(); assert(compareAddressesSimple(signer, toAddress.toEvmAddress()), "Cannot rebalance to a non-signer address"); const associatedTokenAddress = await this._getAssociatedTokenAddress(); amount = amount.gt(CCTP_MAX_SEND_AMOUNT) ? CCTP_MAX_SEND_AMOUNT : amount; @@ -105,14 +105,14 @@ export class SolanaUsdcCCTPBridge extends BaseBridgeAdapter toAddress: Address, eventConfig: EventSearchConfig ): Promise { - const signer = await this.l1Signer.getAddress(); + const signer = await this.srcSigner.getAddress(); // @todo. We can only track EOA transfers of the signer of the bot since we cannot translate an EVM address to an SVM token account // unless we have knowledge of the private key. if (fromAddress.toNative() !== signer) { return {}; } const associatedTokenAddress = await this._getAssociatedTokenAddress(); - assert(compareAddressesSimple(l1Token.toNative(), TOKEN_SYMBOLS_MAP.USDC.addresses[this.hubChainId])); + assert(compareAddressesSimple(l1Token.toNative(), TOKEN_SYMBOLS_MAP.USDC.addresses[this.srcChainId])); const eventFilterArgs = [undefined, this.l1UsdcTokenAddress.toNative(), undefined, fromAddress.toNative()]; const eventFilter = this.getL1Bridge().filters.DepositForBurn(...eventFilterArgs); const events = (await paginatedEventQuery(this.getL1Bridge(), eventFilter, eventConfig)).filter((event) => @@ -129,7 +129,7 @@ export class SolanaUsdcCCTPBridge extends BaseBridgeAdapter toAddress: Address, eventConfig: EventSearchConfig ): Promise { - const signer = await this.l1Signer.getAddress(); + const signer = await this.srcSigner.getAddress(); // @todo. We can only track EOA transfers of the signer of the bot since we cannot translate an EVM address to an SVM token account // unless we have knowledge of the private key. if (fromAddress.toNative() !== signer) { @@ -139,7 +139,7 @@ export class SolanaUsdcCCTPBridge extends BaseBridgeAdapter // Lazily evaluate the events client. this.solanaEventsClient ??= await this.solanaEventsClientPromise; - assert(compareAddressesSimple(l1Token.toNative(), TOKEN_SYMBOLS_MAP.USDC.addresses[this.hubChainId])); + assert(compareAddressesSimple(l1Token.toNative(), TOKEN_SYMBOLS_MAP.USDC.addresses[this.srcChainId])); const l2FinalizationEvents = await this.solanaEventsClient.queryDerivedAddressEvents( "MintAndWithdraw", arch.svm.toAddress(this.solanaMessageTransmitter), @@ -167,7 +167,7 @@ export class SolanaUsdcCCTPBridge extends BaseBridgeAdapter } async _getAssociatedTokenAddress(): Promise
{ - const svmSigner = getSvmSignerFromEvmSigner(this.l1Signer); + const svmSigner = getSvmSignerFromEvmSigner(this.srcSigner); const associatedTokenAddress = await getAssociatedTokenAddress( SvmAddress.from(svmSigner.publicKey.toBase58()), this.l2UsdcTokenAddress diff --git a/src/adapter/bridges/UsdcTokenSplitterBridge.ts b/src/adapter/directed/l1ToL2/UsdcTokenSplitterBridge.ts similarity index 88% rename from src/adapter/bridges/UsdcTokenSplitterBridge.ts rename to src/adapter/directed/l1ToL2/UsdcTokenSplitterBridge.ts index d1f051ca50..3868322dda 100644 --- a/src/adapter/bridges/UsdcTokenSplitterBridge.ts +++ b/src/adapter/directed/l1ToL2/UsdcTokenSplitterBridge.ts @@ -1,7 +1,7 @@ import { Signer } from "ethers"; -import { CONTRACT_ADDRESSES, EVM_CANONICAL_BRIDGE } from "../../common"; -import { UsdcCCTPBridge } from "./UsdcCCTPBridge"; -import { BridgeTransactionDetails, BaseBridgeAdapter, BridgeEvents } from "./BaseBridgeAdapter"; +import { CONTRACT_ADDRESSES, EVM_CANONICAL_BRIDGE } from "../../../common"; +import { UsdcCCTPBridge } from "../../undirected/UsdcCCTPBridge"; +import { BridgeTransactionDetails, BaseBridgeAdapter, BridgeEvents } from "../../BaseBridgeAdapter"; import { BigNumber, EventSearchConfig, @@ -12,8 +12,8 @@ import { EvmAddress, Address, winston, -} from "../../utils"; -import { TransferTokenParams } from "../utils"; +} from "../../../utils"; +import { TransferTokenParams } from "../../utils"; export class UsdcTokenSplitterBridge extends BaseBridgeAdapter { protected cctpBridge: BaseBridgeAdapter; @@ -39,7 +39,7 @@ export class UsdcTokenSplitterBridge extends BaseBridgeAdapter { - return compareAddressesSimple(l2Token.toNative(), TOKEN_SYMBOLS_MAP.USDC.addresses[this.l2chainId]) + return compareAddressesSimple(l2Token.toNative(), TOKEN_SYMBOLS_MAP.USDC.addresses[this.dstChainId]) ? this.cctpBridge : this.canonicalBridge; } @@ -59,7 +59,7 @@ export class UsdcTokenSplitterBridge extends BaseBridgeAdapter { - assert(compareAddressesSimple(l1Token.toNative(), TOKEN_SYMBOLS_MAP.USDC.addresses[this.hubChainId])); + assert(compareAddressesSimple(l1Token.toNative(), TOKEN_SYMBOLS_MAP.USDC.addresses[this.srcChainId])); return this.getRouteForL2Token(l2Token).constructL1ToL2Txn(toAddress, l1Token, l2Token, amount, optionalParams); } @@ -69,7 +69,7 @@ export class UsdcTokenSplitterBridge extends BaseBridgeAdapter { - assert(compareAddressesSimple(l1Token.toNative(), TOKEN_SYMBOLS_MAP.USDC.addresses[this.hubChainId])); + assert(compareAddressesSimple(l1Token.toNative(), TOKEN_SYMBOLS_MAP.USDC.addresses[this.srcChainId])); const events = await Promise.all([ this.cctpBridge.queryL1BridgeInitiationEvents(l1Token, fromAddress, toAddress, eventConfig), this.canonicalBridge.queryL1BridgeInitiationEvents(l1Token, fromAddress, toAddress, eventConfig), @@ -89,7 +89,7 @@ export class UsdcTokenSplitterBridge extends BaseBridgeAdapter { - assert(compareAddressesSimple(l1Token.toNative(), TOKEN_SYMBOLS_MAP.USDC.addresses[this.hubChainId])); + assert(compareAddressesSimple(l1Token.toNative(), TOKEN_SYMBOLS_MAP.USDC.addresses[this.srcChainId])); const events = await Promise.all([ this.cctpBridge.queryL2BridgeFinalizationEvents(l1Token, fromAddress, toAddress, eventConfig), this.canonicalBridge.queryL2BridgeFinalizationEvents(l1Token, fromAddress, toAddress, eventConfig), diff --git a/src/adapter/bridges/ZKStackBridge.ts b/src/adapter/directed/l1ToL2/ZKStackBridge.ts similarity index 95% rename from src/adapter/bridges/ZKStackBridge.ts rename to src/adapter/directed/l1ToL2/ZKStackBridge.ts index 35a2fde7c0..db27296eea 100644 --- a/src/adapter/bridges/ZKStackBridge.ts +++ b/src/adapter/directed/l1ToL2/ZKStackBridge.ts @@ -15,10 +15,10 @@ import { ZERO_BYTES, EvmGasPriceEstimate, winston, -} from "../../utils"; -import { processEvent, matchL2EthDepositAndWrapEvents } from "../utils"; -import { CONTRACT_ADDRESSES } from "../../common"; -import { BridgeTransactionDetails, BaseBridgeAdapter, BridgeEvents } from "./BaseBridgeAdapter"; +} from "../../../utils"; +import { processEvent, matchL2EthDepositAndWrapEvents } from "../../utils"; +import { CONTRACT_ADDRESSES } from "../../../common"; +import { BridgeTransactionDetails, BaseBridgeAdapter, BridgeEvents } from "../../BaseBridgeAdapter"; import { gasPriceOracle } from "@across-protocol/sdk"; import { PUBLIC_NETWORKS } from "@across-protocol/constants"; import * as zksync from "zksync-ethers"; @@ -101,7 +101,7 @@ export class ZKStackBridge extends BaseBridgeAdapter method = "requestL2TransactionDirect"; args = [ [ - this.l2chainId, + this.dstChainId, amount.add(txBaseCost), toAddress.toNative(), amount, @@ -117,7 +117,7 @@ export class ZKStackBridge extends BaseBridgeAdapter method = "requestL2TransactionTwoBridges"; args = [ [ - this.l2chainId, + this.dstChainId, txBaseCost, 0, this.l2GasLimit, @@ -157,7 +157,7 @@ export class ZKStackBridge extends BaseBridgeAdapter } const rawEvents = await paginatedEventQuery( this.nativeTokenVault, - this.nativeTokenVault.filters.BridgeBurn(this.l2chainId, assetId, annotatedFromAddress), + this.nativeTokenVault.filters.BridgeBurn(this.dstChainId, assetId, annotatedFromAddress), eventConfig ); processedEvents = rawEvents @@ -183,7 +183,7 @@ export class ZKStackBridge extends BaseBridgeAdapter } else { const rawEvents = await paginatedEventQuery( this.sharedBridge, - this.sharedBridge.filters.BridgehubDepositBaseTokenInitiated(this.l2chainId, annotatedFromAddress), + this.sharedBridge.filters.BridgehubDepositBaseTokenInitiated(this.dstChainId, annotatedFromAddress), eventConfig ); processedEvents = rawEvents.map((e) => processEvent(e, "amount")); @@ -213,7 +213,7 @@ export class ZKStackBridge extends BaseBridgeAdapter } const events = await paginatedEventQuery( this.getL2Bridge(), - this.getL2Bridge().filters.BridgeMint(this.hubChainId, assetId), + this.getL2Bridge().filters.BridgeMint(this.srcChainId, assetId), eventConfig ); processedEvents = events @@ -272,7 +272,7 @@ export class ZKStackBridge extends BaseBridgeAdapter .mul(FEE_SCALER_NUMERATOR) .div(FEE_SCALER_DENOMINATOR); const l2Gas = await this.getL1Bridge().l2TransactionBaseCost( - this.l2chainId, + this.dstChainId, estimatedL1GasPrice, this.l2GasLimit, this.gasPerPubdataLimit @@ -287,10 +287,10 @@ export class ZKStackBridge extends BaseBridgeAdapter protected override resolveL2TokenAddress(l1Token: EvmAddress): string { // ZkStack chains may or may not have native USDC, but all will have only one USDC "type" supported by Across. If there is an entry in the TOKEN_SYMBOLS_MAP for USDC, then use this, otherwise, bubble up the resolution. if ( - compareAddressesSimple(TOKEN_SYMBOLS_MAP.USDC.addresses[this.hubChainId], l1Token.toNative()) && - isDefined(TOKEN_SYMBOLS_MAP.USDC.addresses[this.l2chainId]) + compareAddressesSimple(TOKEN_SYMBOLS_MAP.USDC.addresses[this.srcChainId], l1Token.toNative()) && + isDefined(TOKEN_SYMBOLS_MAP.USDC.addresses[this.dstChainId]) ) { - return TOKEN_SYMBOLS_MAP.USDC.addresses[this.l2chainId]; + return TOKEN_SYMBOLS_MAP.USDC.addresses[this.dstChainId]; } return super.resolveL2TokenAddress(l1Token); } diff --git a/src/adapter/bridges/ZKStackUSDCBridge.ts b/src/adapter/directed/l1ToL2/ZKStackUSDCBridge.ts similarity index 90% rename from src/adapter/bridges/ZKStackUSDCBridge.ts rename to src/adapter/directed/l1ToL2/ZKStackUSDCBridge.ts index 5bffef0dcc..b2ba4c449a 100644 --- a/src/adapter/bridges/ZKStackUSDCBridge.ts +++ b/src/adapter/directed/l1ToL2/ZKStackUSDCBridge.ts @@ -9,10 +9,10 @@ import { paginatedEventQuery, isDefined, bnZero, -} from "../../utils"; -import { CONTRACT_ADDRESSES } from "../../common"; -import { processEvent } from "../utils"; -import { BridgeEvents, BridgeTransactionDetails } from "./BaseBridgeAdapter"; +} from "../../../utils"; +import { CONTRACT_ADDRESSES } from "../../../common"; +import { processEvent } from "../../utils"; +import { BridgeEvents, BridgeTransactionDetails } from "../../BaseBridgeAdapter"; import { ZKStackBridge } from "./ZKStackBridge"; import winston from "winston"; @@ -40,7 +40,7 @@ export class ZKStackUSDCBridge extends ZKStackBridge { const { address: l2Bridge, abi: l2ABI } = CONTRACT_ADDRESSES[l2chainId].usdcBridge; this.l2Bridge = new Contract(l2Bridge, l2ABI, l2SignerOrProvider); - this.l1Gateways.push(EvmAddress.from(this.usdcBridge.address)); + this.srcGateways.push(EvmAddress.from(this.usdcBridge.address)); } async constructL1ToL2Txn( @@ -56,7 +56,7 @@ export class ZKStackUSDCBridge extends ZKStackBridge { const args = [ [ - this.l2chainId, + this.dstChainId, txBaseCost, 0, this.l2GasLimit, @@ -78,7 +78,7 @@ export class ZKStackUSDCBridge extends ZKStackBridge { to: EvmAddress, eventConfig: EventSearchConfig ): Promise { - const filter = this.usdcBridge.filters.BridgehubDepositInitiated(this.l2chainId, null, null); + const filter = this.usdcBridge.filters.BridgehubDepositInitiated(this.dstChainId, null, null); const events = await paginatedEventQuery(this.usdcBridge, filter, eventConfig); const processedEvents = events diff --git a/src/adapter/bridges/ZKStackWethBridge.ts b/src/adapter/directed/l1ToL2/ZKStackWethBridge.ts similarity index 94% rename from src/adapter/bridges/ZKStackWethBridge.ts rename to src/adapter/directed/l1ToL2/ZKStackWethBridge.ts index b12aa9f60c..d23cfe210a 100644 --- a/src/adapter/bridges/ZKStackWethBridge.ts +++ b/src/adapter/directed/l1ToL2/ZKStackWethBridge.ts @@ -11,11 +11,11 @@ import { isDefined, EvmAddress, winston, -} from "../../utils"; +} from "../../../utils"; import { ZKStackBridge } from "./"; -import { processEvent, matchL2EthDepositAndWrapEvents } from "../utils"; -import { CONTRACT_ADDRESSES } from "../../common"; -import { BridgeTransactionDetails, BridgeEvents } from "./BaseBridgeAdapter"; +import { processEvent, matchL2EthDepositAndWrapEvents } from "../../utils"; +import { CONTRACT_ADDRESSES } from "../../../common"; +import { BridgeTransactionDetails, BridgeEvents } from "../../BaseBridgeAdapter"; import * as zksync from "zksync-ethers"; const ETH_TOKEN_ADDRESS = EvmAddress.from("0x0000000000000000000000000000000000000001"); @@ -38,7 +38,7 @@ export class ZKStackWethBridge extends ZKStackBridge { // Overwrite the bridge gateway to the correct gateway. The correct gateway is the atomic depositor since this is the // address which is pulling weth out of the relayer via a `transferFrom`. - this.l1Gateways = [EvmAddress.from(atomicDepositorAddress)]; + this.srcGateways = [EvmAddress.from(atomicDepositorAddress)]; // Grab both the l2 WETH and l2 ETH contract addresses. Note: If the L2 uses a custom gas token, then the l2 ETH contract // will be unused, so it must not necessarily be defined in CONTRACT_ADDRESSES. @@ -63,7 +63,7 @@ export class ZKStackWethBridge extends ZKStackBridge { if (usingCustomGasToken) { bridgeCalldata = this.getL1Bridge().interface.encodeFunctionData("requestL2TransactionTwoBridges", [ [ - this.l2chainId, + this.dstChainId, txBaseCost, 0, this.l2GasLimit, @@ -79,7 +79,7 @@ export class ZKStackWethBridge extends ZKStackBridge { } else { bridgeCalldata = this.getL1Bridge().interface.encodeFunctionData("requestL2TransactionDirect", [ [ - this.l2chainId, + this.dstChainId, txBaseCost.add(amount), toAddress.toNative(), amount, @@ -97,7 +97,7 @@ export class ZKStackWethBridge extends ZKStackBridge { return { contract: this.getAtomicDepositor(), method: "bridgeWeth", - args: [this.l2chainId, netValue, amount, feeAmount, bridgeCalldata], + args: [this.dstChainId, netValue, amount, feeAmount, bridgeCalldata], }; } @@ -128,7 +128,7 @@ export class ZKStackWethBridge extends ZKStackBridge { // This means we are bridging via an EOA, so we should just look for atomic weth deposits. const events = await paginatedEventQuery( this.getAtomicDepositor(), - this.getAtomicDepositor().filters.AtomicWethDepositInitiated(fromAddress.toNative(), this.l2chainId), + this.getAtomicDepositor().filters.AtomicWethDepositInitiated(fromAddress.toNative(), this.dstChainId), eventConfig ); processedEvents = events.map((e) => processEvent(e, "amount")); diff --git a/src/adapter/bridges/index.ts b/src/adapter/directed/l1ToL2/index.ts similarity index 74% rename from src/adapter/bridges/index.ts rename to src/adapter/directed/l1ToL2/index.ts index 591a779b12..bdb37a7fa4 100644 --- a/src/adapter/bridges/index.ts +++ b/src/adapter/directed/l1ToL2/index.ts @@ -1,8 +1,5 @@ export * from "./DaiOptimismBridge"; export * from "./SnxOptimismBridge"; -export * from "./BaseBridgeAdapter"; -export * from "./BinanceCEXBridge"; -export * from "./BinanceCEXNativeBridge"; export * from "./UsdcTokenSplitterBridge"; export * from "./OpStackWethBridge"; export * from "./ArbitrumOrbitBridge"; @@ -14,10 +11,7 @@ export * from "./LineaWethBridge"; export * from "./BlastBridge"; export * from "./ScrollERC20Bridge"; export * from "./OpStackUSDCBridge"; -export * from "./UsdcCCTPBridge"; export * from "./ZKStackBridge"; export * from "./ZKStackUSDCBridge"; export * from "./ZKStackWethBridge"; export * from "./SolanaUsdcCCTPBridge"; -export * from "./OFTBridge"; -export * from "./OFTWethBridge"; diff --git a/src/adapter/l2Bridges/ArbitrumOrbitBridge.ts b/src/adapter/directed/l2ToL1/ArbitrumOrbitBridge.ts similarity index 94% rename from src/adapter/l2Bridges/ArbitrumOrbitBridge.ts rename to src/adapter/directed/l2ToL1/ArbitrumOrbitBridge.ts index a56ac227ef..06fe303d3b 100644 --- a/src/adapter/l2Bridges/ArbitrumOrbitBridge.ts +++ b/src/adapter/directed/l2ToL1/ArbitrumOrbitBridge.ts @@ -1,4 +1,4 @@ -import { CONTRACT_ADDRESSES, CUSTOM_ARBITRUM_GATEWAYS, DEFAULT_ARBITRUM_GATEWAY } from "../../common"; +import { CONTRACT_ADDRESSES, CUSTOM_ARBITRUM_GATEWAYS, DEFAULT_ARBITRUM_GATEWAY } from "../../../common"; import { BigNumber, bnZero, @@ -13,10 +13,10 @@ import { toBN, EvmAddress, getTokenInfo, -} from "../../utils"; +} from "../../../utils"; import { BaseL2BridgeAdapter } from "./BaseL2BridgeAdapter"; -import { AugmentedTransaction } from "../../clients/TransactionClient"; -import ARBITRUM_ERC20_GATEWAY_L2_ABI from "../../common/abi/ArbitrumErc20GatewayL2.json"; +import { AugmentedTransaction } from "../../../clients/TransactionClient"; +import ARBITRUM_ERC20_GATEWAY_L2_ABI from "../../../common/abi/ArbitrumErc20GatewayL2.json"; export class ArbitrumOrbitBridge extends BaseL2BridgeAdapter { protected l2GatewayRouter: Contract; diff --git a/src/adapter/l2Bridges/BaseL2BridgeAdapter.ts b/src/adapter/directed/l2ToL1/BaseL2BridgeAdapter.ts similarity index 92% rename from src/adapter/l2Bridges/BaseL2BridgeAdapter.ts rename to src/adapter/directed/l2ToL1/BaseL2BridgeAdapter.ts index 77557b319f..a62b094f72 100644 --- a/src/adapter/l2Bridges/BaseL2BridgeAdapter.ts +++ b/src/adapter/directed/l2ToL1/BaseL2BridgeAdapter.ts @@ -1,4 +1,4 @@ -import { AugmentedTransaction } from "../../clients/TransactionClient"; +import { AugmentedTransaction } from "../../../clients/TransactionClient"; import { BigNumber, Contract, @@ -10,8 +10,8 @@ import { getSpokePoolAddress, SVMProvider, SolanaTransaction, -} from "../../utils"; -import { TransferTokenParams } from "../utils"; +} from "../../../utils"; +import { TransferTokenParams } from "../../utils"; export abstract class BaseL2BridgeAdapter { protected l2Bridge: Contract; diff --git a/src/adapter/l2Bridges/BinanceCEXBridge.ts b/src/adapter/directed/l2ToL1/BinanceCEXBridge.ts similarity index 95% rename from src/adapter/l2Bridges/BinanceCEXBridge.ts rename to src/adapter/directed/l2ToL1/BinanceCEXBridge.ts index 4ece6bdeae..2653fcc4e0 100644 --- a/src/adapter/l2Bridges/BinanceCEXBridge.ts +++ b/src/adapter/directed/l2ToL1/BinanceCEXBridge.ts @@ -19,11 +19,11 @@ import { getBinanceWithdrawals, BINANCE_NETWORKS, mapAsync, -} from "../../utils"; -import { L1Token } from "../../interfaces"; +} from "../../../utils"; +import { L1Token } from "../../../interfaces"; import { BaseL2BridgeAdapter } from "./BaseL2BridgeAdapter"; -import ERC20_ABI from "../../common/abi/MinimalERC20.json"; -import { AugmentedTransaction } from "../../clients/TransactionClient"; +import ERC20_ABI from "../../../common/abi/MinimalERC20.json"; +import { AugmentedTransaction } from "../../../clients/TransactionClient"; export class BinanceCEXBridge extends BaseL2BridgeAdapter { // Store the promise to be evaluated when needed so that we can construct the bridge synchronously. diff --git a/src/adapter/l2Bridges/BinanceCEXNativeBridge.ts b/src/adapter/directed/l2ToL1/BinanceCEXNativeBridge.ts similarity index 93% rename from src/adapter/l2Bridges/BinanceCEXNativeBridge.ts rename to src/adapter/directed/l2ToL1/BinanceCEXNativeBridge.ts index 9054ca29e0..54954abd8d 100644 --- a/src/adapter/l2Bridges/BinanceCEXNativeBridge.ts +++ b/src/adapter/directed/l2ToL1/BinanceCEXNativeBridge.ts @@ -6,9 +6,9 @@ import { Contract, EvmAddress, getTokenInfo, -} from "../../utils"; -import { AugmentedTransaction } from "../../clients/TransactionClient"; -import WETH_ABI from "../../common/abi/Weth.json"; +} from "../../../utils"; +import { AugmentedTransaction } from "../../../clients/TransactionClient"; +import WETH_ABI from "../../../common/abi/Weth.json"; import { BinanceCEXBridge } from "./"; export class BinanceCEXNativeBridge extends BinanceCEXBridge { diff --git a/src/adapter/l2Bridges/HyperlaneXERC20Bridge.ts b/src/adapter/directed/l2ToL1/HyperlaneXERC20Bridge.ts similarity index 96% rename from src/adapter/l2Bridges/HyperlaneXERC20Bridge.ts rename to src/adapter/directed/l2ToL1/HyperlaneXERC20Bridge.ts index 04bfb69e1f..bdff4e204a 100644 --- a/src/adapter/l2Bridges/HyperlaneXERC20Bridge.ts +++ b/src/adapter/directed/l2ToL1/HyperlaneXERC20Bridge.ts @@ -15,12 +15,12 @@ import { getNetworkName, createFormatFunction, isContractDeployedToAddress, -} from "../../utils"; +} from "../../../utils"; import { PUBLIC_NETWORKS, HYPERLANE_NO_DOMAIN_ID } from "@across-protocol/constants"; import { BaseL2BridgeAdapter } from "./BaseL2BridgeAdapter"; -import HYPERLANE_ROUTER_ABI from "../../common/abi/IHypXERC20Router.json"; -import { HYPERLANE_ROUTERS, HYPERLANE_DEFAULT_FEE_CAP, HYPERLANE_FEE_CAP_OVERRIDES } from "../../common"; -import { AugmentedTransaction } from "../../clients/TransactionClient"; +import HYPERLANE_ROUTER_ABI from "../../../common/abi/IHypXERC20Router.json"; +import { HYPERLANE_ROUTERS, HYPERLANE_DEFAULT_FEE_CAP, HYPERLANE_FEE_CAP_OVERRIDES } from "../../../common"; +import { AugmentedTransaction } from "../../../clients/TransactionClient"; export class HyperlaneXERC20BridgeL2 extends BaseL2BridgeAdapter { readonly l2Token: EvmAddress; diff --git a/src/adapter/l2Bridges/OFTL2Bridge.ts b/src/adapter/directed/l2ToL1/OFTL2Bridge.ts similarity index 98% rename from src/adapter/l2Bridges/OFTL2Bridge.ts rename to src/adapter/directed/l2ToL1/OFTL2Bridge.ts index e0e3a9567f..b812bfcf9e 100644 --- a/src/adapter/l2Bridges/OFTL2Bridge.ts +++ b/src/adapter/directed/l2ToL1/OFTL2Bridge.ts @@ -1,5 +1,5 @@ import { BigNumber, Contract, Signer } from "ethers"; -import { AugmentedTransaction } from "../../clients"; +import { AugmentedTransaction } from "../../../clients"; import { Address, EvmAddress, @@ -13,11 +13,11 @@ import { EventSearchConfig, getTokenInfo, fixedPointAdjustment, -} from "../../utils"; +} from "../../../utils"; import { interfaces as sdkInterfaces } from "@across-protocol/sdk"; import { BaseL2BridgeAdapter } from "./BaseL2BridgeAdapter"; -import { IOFT_ABI_FULL, OFT_DEFAULT_FEE_CAP, OFT_FEE_CAP_OVERRIDES } from "../../common"; -import * as OFT from "../../utils/OFTUtils"; +import { IOFT_ABI_FULL, OFT_DEFAULT_FEE_CAP, OFT_FEE_CAP_OVERRIDES } from "../../../common"; +import * as OFT from "../../../utils/OFTUtils"; export class OFTL2Bridge extends BaseL2BridgeAdapter { readonly l2Token: EvmAddress; diff --git a/src/adapter/l2Bridges/OpStackBridge.ts b/src/adapter/directed/l2ToL1/OpStackBridge.ts similarity index 95% rename from src/adapter/l2Bridges/OpStackBridge.ts rename to src/adapter/directed/l2ToL1/OpStackBridge.ts index c59cbbf777..6a27fd51c0 100644 --- a/src/adapter/l2Bridges/OpStackBridge.ts +++ b/src/adapter/directed/l2ToL1/OpStackBridge.ts @@ -1,4 +1,4 @@ -import { CONTRACT_ADDRESSES } from "../../common"; +import { CONTRACT_ADDRESSES } from "../../../common"; import { BigNumber, bnZero, @@ -12,9 +12,9 @@ import { toBN, EvmAddress, getTokenInfo, -} from "../../utils"; +} from "../../../utils"; import { BaseL2BridgeAdapter } from "./BaseL2BridgeAdapter"; -import { AugmentedTransaction } from "../../clients/TransactionClient"; +import { AugmentedTransaction } from "../../../clients/TransactionClient"; export class OpStackBridge extends BaseL2BridgeAdapter { constructor(l2chainId: number, hubChainId: number, l2Signer: Signer, l1Signer: Signer, l1Token: EvmAddress) { diff --git a/src/adapter/l2Bridges/OpStackUSDCBridge.ts b/src/adapter/directed/l2ToL1/OpStackUSDCBridge.ts similarity index 94% rename from src/adapter/l2Bridges/OpStackUSDCBridge.ts rename to src/adapter/directed/l2ToL1/OpStackUSDCBridge.ts index fad1d93553..a714d49a6e 100644 --- a/src/adapter/l2Bridges/OpStackUSDCBridge.ts +++ b/src/adapter/directed/l2ToL1/OpStackUSDCBridge.ts @@ -1,6 +1,6 @@ -import { CONTRACT_ADDRESSES } from "../../common"; -import { AugmentedTransaction } from "../../clients/TransactionClient"; -import ERC20_ABI from "../../common/abi/MinimalERC20.json"; +import { CONTRACT_ADDRESSES } from "../../../common"; +import { AugmentedTransaction } from "../../../clients/TransactionClient"; +import ERC20_ABI from "../../../common/abi/MinimalERC20.json"; import { BigNumber, bnZero, @@ -15,7 +15,7 @@ import { EvmAddress, getTokenInfo, toBN, -} from "../../utils"; +} from "../../../utils"; import { BaseL2BridgeAdapter } from "./BaseL2BridgeAdapter"; export class OpStackUSDCBridge extends BaseL2BridgeAdapter { diff --git a/src/adapter/l2Bridges/OpStackWethBridge.ts b/src/adapter/directed/l2ToL1/OpStackWethBridge.ts similarity index 94% rename from src/adapter/l2Bridges/OpStackWethBridge.ts rename to src/adapter/directed/l2ToL1/OpStackWethBridge.ts index 3ab2cceb7f..0e36b9589b 100644 --- a/src/adapter/l2Bridges/OpStackWethBridge.ts +++ b/src/adapter/directed/l2ToL1/OpStackWethBridge.ts @@ -1,4 +1,4 @@ -import { CONTRACT_ADDRESSES } from "../../common"; +import { CONTRACT_ADDRESSES } from "../../../common"; import { BigNumber, bnZero, @@ -12,10 +12,10 @@ import { toBN, EvmAddress, getTokenInfo, -} from "../../utils"; +} from "../../../utils"; import { BaseL2BridgeAdapter } from "./BaseL2BridgeAdapter"; -import WETH_ABI from "../../common/abi/Weth.json"; -import { AugmentedTransaction } from "../../clients/TransactionClient"; +import WETH_ABI from "../../../common/abi/Weth.json"; +import { AugmentedTransaction } from "../../../clients/TransactionClient"; export class OpStackWethBridge extends BaseL2BridgeAdapter { constructor(l2chainId: number, hubChainId: number, l2Signer: Signer, l1Signer: Signer, l1Token: EvmAddress) { diff --git a/src/adapter/l2Bridges/SolanaUsdcCCTPBridge.ts b/src/adapter/directed/l2ToL1/SolanaUsdcCCTPBridge.ts similarity index 98% rename from src/adapter/l2Bridges/SolanaUsdcCCTPBridge.ts rename to src/adapter/directed/l2ToL1/SolanaUsdcCCTPBridge.ts index 8272d284a8..eb7ae56394 100644 --- a/src/adapter/l2Bridges/SolanaUsdcCCTPBridge.ts +++ b/src/adapter/directed/l2ToL1/SolanaUsdcCCTPBridge.ts @@ -19,9 +19,9 @@ import { createDefaultTransaction, isDefined, SolanaTransaction, -} from "../../utils"; +} from "../../../utils"; import { BaseL2BridgeAdapter } from "./BaseL2BridgeAdapter"; -import { CCTP_MAX_SEND_AMOUNT } from "../../common"; +import { CCTP_MAX_SEND_AMOUNT } from "../../../common"; import { arch } from "@across-protocol/sdk"; import { TokenMessengerMinterIdl, TokenMessengerMinterClient } from "@across-protocol/contracts"; import { diff --git a/src/adapter/l2Bridges/UsdcCCTPBridge.ts b/src/adapter/directed/l2ToL1/UsdcCCTPBridge.ts similarity index 96% rename from src/adapter/l2Bridges/UsdcCCTPBridge.ts rename to src/adapter/directed/l2ToL1/UsdcCCTPBridge.ts index d60f2598bf..02388b70a0 100644 --- a/src/adapter/l2Bridges/UsdcCCTPBridge.ts +++ b/src/adapter/directed/l2ToL1/UsdcCCTPBridge.ts @@ -18,11 +18,11 @@ import { getV2DepositForBurnMaxFee, getCctpV2TokenMessenger, CCTPV2_FINALITY_THRESHOLD_STANDARD, -} from "../../utils"; +} from "../../../utils"; import { BaseL2BridgeAdapter } from "./BaseL2BridgeAdapter"; -import { AugmentedTransaction } from "../../clients/TransactionClient"; -import { CCTP_MAX_SEND_AMOUNT } from "../../common"; -import { TransferTokenParams } from "../utils"; +import { AugmentedTransaction } from "../../../clients/TransactionClient"; +import { CCTP_MAX_SEND_AMOUNT } from "../../../common"; +import { TransferTokenParams } from "../../utils"; /** * This adapter uses CCTP V2 to bridge USDC between L2's. diff --git a/src/adapter/l2Bridges/index.ts b/src/adapter/directed/l2ToL1/index.ts similarity index 82% rename from src/adapter/l2Bridges/index.ts rename to src/adapter/directed/l2ToL1/index.ts index ce85cf1257..d77d1fbf9c 100644 --- a/src/adapter/l2Bridges/index.ts +++ b/src/adapter/directed/l2ToL1/index.ts @@ -7,3 +7,5 @@ export * from "./OpStackUSDCBridge"; export * from "./OpStackWethBridge"; export * from "./UsdcCCTPBridge"; export * from "./SolanaUsdcCCTPBridge"; +export * from "./OFTL2Bridge"; +export * from "./HyperlaneXERC20Bridge"; diff --git a/src/adapter/index.ts b/src/adapter/index.ts index da6499b2f9..bfaf2ac140 100644 --- a/src/adapter/index.ts +++ b/src/adapter/index.ts @@ -1,2 +1,3 @@ export * from "./BaseChainAdapter"; +export * from "./BaseBridgeAdapter"; export { aboveAllowanceThreshold } from "./utils"; diff --git a/src/adapter/bridges/BinanceCEXBridge.ts b/src/adapter/undirected/BinanceCEXBridge.ts similarity index 83% rename from src/adapter/bridges/BinanceCEXBridge.ts rename to src/adapter/undirected/BinanceCEXBridge.ts index 77b01071c2..d57b4d811f 100644 --- a/src/adapter/bridges/BinanceCEXBridge.ts +++ b/src/adapter/undirected/BinanceCEXBridge.ts @@ -21,7 +21,7 @@ import { BINANCE_NETWORKS, ethers, } from "../../utils"; -import { BaseBridgeAdapter, BridgeTransactionDetails, BridgeEvents, BridgeEvent } from "./BaseBridgeAdapter"; +import { BaseBridgeAdapter, BridgeTransactionDetails, BridgeEvents, BridgeEvent } from "../BaseBridgeAdapter"; import ERC20_ABI from "../../common/abi/MinimalERC20.json"; export class BinanceCEXBridge extends BaseBridgeAdapter { @@ -32,41 +32,41 @@ export class BinanceCEXBridge extends BaseBridgeAdapter { - assert(l1Token.toNative() === this.getL1Bridge().address); + assert(srcToken.toNative() === this.getL1Bridge().address); // Fetch the deposit address from the binance API. const binanceApiClient = await this.getBinanceClient(); @@ -84,7 +84,7 @@ export class BinanceCEXBridge extends BaseBridgeAdapter { const txnReceipt = await this.getL1Bridge().provider.getTransactionReceipt(deposit.txId); if (!compareAddressesSimple(txnReceipt.from, fromAddress.toNative())) { @@ -118,12 +118,12 @@ export class BinanceCEXBridge extends BaseBridgeAdapter { + [this.resolveL2TokenAddress(srcToken)]: await mapAsync(withdrawalHistory, async (withdrawal) => { const txnReceipt = await this.l2Provider.getTransactionReceipt(withdrawal.txId); return this.toBridgeEvent(floatToBN(withdrawal.amount, l1Decimals), txnReceipt); }), @@ -159,7 +159,7 @@ export class BinanceCEXBridge extends BaseBridgeAdapter { const [isL1Contract, isL2Contract] = await Promise.all([ - isContractDeployedToAddress(address.toNative(), this.l1Signer.provider), + isContractDeployedToAddress(address.toNative(), this.srcSigner.provider), isContractDeployedToAddress(address.toNative(), this.l2Provider), ]); return isL1Contract || isL2Contract; diff --git a/src/adapter/bridges/BinanceCEXNativeBridge.ts b/src/adapter/undirected/BinanceCEXNativeBridge.ts similarity index 72% rename from src/adapter/bridges/BinanceCEXNativeBridge.ts rename to src/adapter/undirected/BinanceCEXNativeBridge.ts index 48625256ef..9f53dc10d6 100644 --- a/src/adapter/bridges/BinanceCEXNativeBridge.ts +++ b/src/adapter/undirected/BinanceCEXNativeBridge.ts @@ -1,42 +1,42 @@ import { Contract, BigNumber, Signer, Provider, EvmAddress, assert, bnZero, winston } from "../../utils"; import { CONTRACT_ADDRESSES } from "../../common"; -import { BridgeTransactionDetails } from "./BaseBridgeAdapter"; +import { BridgeTransactionDetails } from "../BaseBridgeAdapter"; import { BinanceCEXBridge } from "./"; export class BinanceCEXNativeBridge extends BinanceCEXBridge { protected readonly atomicDepositor: Contract; protected readonly transferProxy: Contract; constructor( - l2chainId: number, - hubChainId: number, - l1Signer: Signer, - l2SignerOrProvider: Signer | Provider, - l1Token: EvmAddress, + dstChainId: number, + srcChainId: number, + srcSigner: Signer, + dstSignerOrProvider: Signer | Provider, + srcToken: EvmAddress, logger: winston.Logger ) { // No L1 gateways needed since no L1 bridge transfers tokens from the EOA. - super(l2chainId, hubChainId, l1Signer, l2SignerOrProvider, l1Token, logger); + super(dstChainId, srcChainId, srcSigner, dstSignerOrProvider, srcToken, logger); const { address: atomicDepositorAddress, abi: atomicDepositorAbi } = - CONTRACT_ADDRESSES[this.hubChainId].atomicDepositor; - this.atomicDepositor = new Contract(atomicDepositorAddress, atomicDepositorAbi, this.l1Signer); + CONTRACT_ADDRESSES[this.srcChainId].atomicDepositor; + this.atomicDepositor = new Contract(atomicDepositorAddress, atomicDepositorAbi, this.srcSigner); const { address: transferProxyAddress, abi: transferProxyAbi } = - CONTRACT_ADDRESSES[this.hubChainId].atomicDepositorTransferProxy; + CONTRACT_ADDRESSES[this.srcChainId].atomicDepositorTransferProxy; this.transferProxy = new Contract(transferProxyAddress, transferProxyAbi); // Overwrite the token symbol to ETH. this.tokenSymbol = "ETH"; // Also overwrite the l1Gateway to the atomic depositor. - this.l1Gateways = [EvmAddress.from(this.atomicDepositor.address)]; + this.srcGateways = [EvmAddress.from(this.atomicDepositor.address)]; } override async constructL1ToL2Txn( _toAddress: EvmAddress, - l1Token: EvmAddress, + srcToken: EvmAddress, _l2Token: EvmAddress, amount: BigNumber ): Promise { - assert(l1Token.toNative() === this.getL1Bridge().address); + assert(srcToken.toNative() === this.getL1Bridge().address); // Fetch the deposit address from the binance API. const binanceApiClient = await this.getBinanceClient(); @@ -50,7 +50,7 @@ export class BinanceCEXNativeBridge extends BinanceCEXBridge { // Once we have the address, create a transfer to the deposit address routed via the multicall handler. Then, call the atomic depositor. return { method: "bridgeWeth", - args: [this.l2chainId, amount, amount, bnZero, bridgeCalldata], + args: [this.dstChainId, amount, amount, bnZero, bridgeCalldata], contract: this.atomicDepositor, }; } diff --git a/src/adapter/bridges/HyperlaneXERC20Bridge.ts b/src/adapter/undirected/HyperlaneXERC20Bridge.ts similarity index 71% rename from src/adapter/bridges/HyperlaneXERC20Bridge.ts rename to src/adapter/undirected/HyperlaneXERC20Bridge.ts index 0d11acec7b..b7f81e3c4f 100644 --- a/src/adapter/bridges/HyperlaneXERC20Bridge.ts +++ b/src/adapter/undirected/HyperlaneXERC20Bridge.ts @@ -12,7 +12,7 @@ import { EventSearchConfig, winston, } from "../../utils"; -import { BaseBridgeAdapter, BridgeTransactionDetails, BridgeEvents } from "./BaseBridgeAdapter"; +import { BaseBridgeAdapter, BridgeTransactionDetails, BridgeEvents } from "../BaseBridgeAdapter"; import { processEvent } from "../utils"; import { PUBLIC_NETWORKS, HYPERLANE_NO_DOMAIN_ID } from "@across-protocol/constants"; import HYPERLANE_ROUTER_ABI from "../../common/abi/IHypXERC20Router.json"; @@ -25,67 +25,67 @@ export class HyperlaneXERC20Bridge extends BaseBridgeAdapter { assert( - this.hubToken.eq(l1Token), - `this.l1Token does not match l1Token constructL1ToL2Txn was called with: ${this.hubToken} != ${l1Token}` + this.hubToken.eq(srcToken), + `this.srcToken does not match srcToken constructL1ToL2Txn was called with: ${this.hubToken} != ${srcToken}` ); const fee: BigNumber = await this.l1Bridge.quoteGasPayment(this.dstDomainId); - const feeCap = HYPERLANE_FEE_CAP_OVERRIDES[this.l2chainId] ?? HYPERLANE_DEFAULT_FEE_CAP; + const feeCap = HYPERLANE_FEE_CAP_OVERRIDES[this.dstChainId] ?? HYPERLANE_DEFAULT_FEE_CAP; if (fee.gt(feeCap)) { throw new Error( `Hyperlane fee ${ethers.utils.formatEther(fee)} ETH exceeds cap ${ethers.utils.formatEther( feeCap - )} ETH for chain ${this.l2chainId}` + )} ETH for chain ${this.dstChainId}` ); } @@ -103,12 +103,12 @@ export class HyperlaneXERC20Bridge extends BaseBridgeAdapter { - if (!this.hubToken.eq(l1Token)) { + if (!this.hubToken.eq(srcToken)) { return {}; } @@ -131,12 +131,12 @@ export class HyperlaneXERC20Bridge extends BaseBridgeAdapter { - if (!this.hubToken.eq(l1Token)) { + if (!this.hubToken.eq(srcToken)) { return {}; } diff --git a/src/adapter/bridges/OFTBridge.ts b/src/adapter/undirected/OFTBridge.ts similarity index 89% rename from src/adapter/bridges/OFTBridge.ts rename to src/adapter/undirected/OFTBridge.ts index 0bfb2e306f..878231aab7 100644 --- a/src/adapter/bridges/OFTBridge.ts +++ b/src/adapter/undirected/OFTBridge.ts @@ -1,5 +1,5 @@ import { Contract, Signer } from "ethers"; -import { BridgeTransactionDetails, BaseBridgeAdapter, BridgeEvents } from "./BaseBridgeAdapter"; +import { BridgeTransactionDetails, BaseBridgeAdapter, BridgeEvents } from "../BaseBridgeAdapter"; import { BigNumber, EventSearchConfig, @@ -33,33 +33,33 @@ export class OFTBridge extends BaseBridgeAdapter { private readonly nativeFeeCap: BigNumber; constructor( - l2ChainId: number, - l1ChainId: number, - l1Signer: Signer, - l2SignerOrProvider: Signer | Provider, + dstChainId: number, + srcChainId: number, + srcSigner: Signer, + dstSignerOrProvider: Signer | Provider, public readonly l1TokenAddress: EvmAddress, // eslint-disable-next-line @typescript-eslint/no-unused-vars - _logger: winston.Logger + logger: winston.Logger ) { // OFT bridge currently only supports Ethereum MAINNET as hub chain assert( - l1ChainId == CHAIN_IDs.MAINNET, - `OFT bridge only supports Ethereum as hub chain, got chain ID: ${l1ChainId}` + srcChainId == CHAIN_IDs.MAINNET, + `OFT bridge only supports Ethereum as hub chain, got chain ID: ${srcChainId}` ); // Route discovery via configured IOFT messengers: if both L1 and L2 messengers exist, the route exists - const l1OftMessenger = OFT.getMessengerEvm(l1TokenAddress, l1ChainId); - const l2OftMessenger = OFT.getMessengerEvm(l1TokenAddress, l2ChainId); + const l1OftMessenger = OFT.getMessengerEvm(l1TokenAddress, srcChainId); + const l2OftMessenger = OFT.getMessengerEvm(l1TokenAddress, dstChainId); - super(l2ChainId, l1ChainId, l1Signer, l2SignerOrProvider, [l1OftMessenger]); + super(dstChainId, srcChainId, srcSigner, dstSignerOrProvider, [l1OftMessenger]); this.l2TokenAddress = this.resolveL2TokenAddress(l1TokenAddress); - this.l1ChainEid = OFT.getEndpointId(l1ChainId); - this.l2ChainEid = OFT.getEndpointId(l2ChainId); - this.l1Bridge = new Contract(l1OftMessenger.toNative(), IOFT_ABI_FULL, l1Signer); - this.l2Bridge = new Contract(l2OftMessenger.toNative(), IOFT_ABI_FULL, l2SignerOrProvider); - this.nativeFeeCap = OFT_FEE_CAP_OVERRIDES[this.hubChainId] ?? OFT_DEFAULT_FEE_CAP; - this.l1TokenInfo = getTokenInfo(this.l1TokenAddress, this.hubChainId); + this.l1ChainEid = OFT.getEndpointId(srcChainId); + this.l2ChainEid = OFT.getEndpointId(dstChainId); + this.l1Bridge = new Contract(l1OftMessenger.toNative(), IOFT_ABI_FULL, srcSigner); + this.l2Bridge = new Contract(l2OftMessenger.toNative(), IOFT_ABI_FULL, dstSignerOrProvider); + this.nativeFeeCap = OFT_FEE_CAP_OVERRIDES[this.srcChainId] ?? OFT_DEFAULT_FEE_CAP; + this.l1TokenInfo = getTokenInfo(this.l1TokenAddress, this.srcChainId); } async constructL1ToL2Txn( diff --git a/src/adapter/bridges/OFTWethBridge.ts b/src/adapter/undirected/OFTWethBridge.ts similarity index 78% rename from src/adapter/bridges/OFTWethBridge.ts rename to src/adapter/undirected/OFTWethBridge.ts index 3345b25212..5b73dc2c60 100644 --- a/src/adapter/bridges/OFTWethBridge.ts +++ b/src/adapter/undirected/OFTWethBridge.ts @@ -1,5 +1,5 @@ import { Contract, Signer } from "ethers"; -import { BridgeTransactionDetails, BridgeEvents } from "./BaseBridgeAdapter"; +import { BridgeTransactionDetails, BridgeEvents } from "../BaseBridgeAdapter"; import { CONTRACT_ADDRESSES } from "../../common"; import { BigNumber, @@ -18,21 +18,21 @@ export class OFTWethBridge extends OFTBridge { private readonly atomicDepositor: Contract; constructor( - l2ChainId: number, - l1ChainId: number, - l1Signer: Signer, - l2SignerOrProvider: Signer | Provider, - public readonly l1TokenAddress: EvmAddress, + dstChainId: number, + srcChainId: number, + srcSigner: Signer, + dstSignerOrProvider: Signer | Provider, + public readonly srcTokenAddress: EvmAddress, logger: winston.Logger ) { - super(l2ChainId, l1ChainId, l1Signer, l2SignerOrProvider, l1TokenAddress, logger); + super(dstChainId, srcChainId, srcSigner, dstSignerOrProvider, srcTokenAddress, logger); const { address: atomicDepositorAddress, abi: atomicDepositorAbi } = - CONTRACT_ADDRESSES[this.hubChainId].atomicDepositor; - this.atomicDepositor = new Contract(atomicDepositorAddress, atomicDepositorAbi, l1Signer); + CONTRACT_ADDRESSES[this.srcChainId].atomicDepositor; + this.atomicDepositor = new Contract(atomicDepositorAddress, atomicDepositorAbi, srcSigner); // Overwrite the l1 gateway to the atomic depositor address. - this.l1Gateways = [EvmAddress.from(atomicDepositorAddress)]; + this.srcGateways = [EvmAddress.from(atomicDepositorAddress)]; } async constructL1ToL2Txn( @@ -55,7 +55,7 @@ export class OFTWethBridge extends OFTBridge { return { contract: this.atomicDepositor, method: "bridgeWeth", - args: [this.l2chainId, netValue, sendParamStruct.amountLD, bnZero, bridgeCalldata], + args: [this.dstChainId, netValue, sendParamStruct.amountLD, bnZero, bridgeCalldata], }; } @@ -68,7 +68,7 @@ export class OFTWethBridge extends OFTBridge { eventConfig: EventSearchConfig ): Promise { // Return no events if the query is for a different l1 token - if (!l1Token.eq(this.l1TokenAddress)) { + if (!l1Token.eq(this.srcTokenAddress)) { return {}; } @@ -82,7 +82,7 @@ export class OFTWethBridge extends OFTBridge { this.atomicDepositor, this.atomicDepositor.filters.AtomicWethDepositInitiated( isAssociatedSpokePool ? this.hubPoolAddress.toNative() : fromAddress.toNative(), // from - this.l2chainId // destinationChainId + this.dstChainId // destinationChainId ), eventConfig ); diff --git a/src/adapter/bridges/UsdcCCTPBridge.ts b/src/adapter/undirected/UsdcCCTPBridge.ts similarity index 79% rename from src/adapter/bridges/UsdcCCTPBridge.ts rename to src/adapter/undirected/UsdcCCTPBridge.ts index 3516e77cbc..a9216ff6f1 100644 --- a/src/adapter/bridges/UsdcCCTPBridge.ts +++ b/src/adapter/undirected/UsdcCCTPBridge.ts @@ -1,5 +1,5 @@ import { Contract, Signer } from "ethers"; -import { BridgeTransactionDetails, BaseBridgeAdapter, BridgeEvents } from "./BaseBridgeAdapter"; +import { BridgeTransactionDetails, BaseBridgeAdapter, BridgeEvents } from "../BaseBridgeAdapter"; import { BigNumber, EventSearchConfig, @@ -32,47 +32,47 @@ export class UsdcCCTPBridge extends BaseBridgeAdapter private readonly l1UsdcTokenAddress: EvmAddress; constructor( - l2chainId: number, - hubChainId: number, - l1Signer: Signer, - l2SignerOrProvider: Signer | Provider, + dstChainId: number, + srcChainId: number, + srcSigner: Signer, + dstSignerOrProvider: Signer | Provider, // eslint-disable-next-line @typescript-eslint/no-unused-vars - _l1Token: EvmAddress, + srcToken: EvmAddress, // eslint-disable-next-line @typescript-eslint/no-unused-vars _logger: winston.Logger ) { - const { address: l1Address, abi: l1Abi } = getCctpV2TokenMessenger(hubChainId); - super(l2chainId, hubChainId, l1Signer, l2SignerOrProvider, [EvmAddress.from(l1Address)]); + const { address: l1Address, abi: l1Abi } = getCctpV2TokenMessenger(srcChainId); + super(dstChainId, srcChainId, srcSigner, dstSignerOrProvider, [EvmAddress.from(l1Address)]); assert( - getCctpDomainForChainId(l2chainId) !== CCTP_NO_DOMAIN && getCctpDomainForChainId(hubChainId) !== CCTP_NO_DOMAIN, + getCctpDomainForChainId(dstChainId) !== CCTP_NO_DOMAIN && getCctpDomainForChainId(srcChainId) !== CCTP_NO_DOMAIN, "Unknown CCTP domain ID" ); - this.l1Bridge = new Contract(l1Address, l1Abi, l1Signer); + this.l1Bridge = new Contract(l1Address, l1Abi, srcSigner); - const { address: l2TokenMessengerAddress, abi: l2TokenMessengerAbi } = getCctpV2TokenMessenger(l2chainId); - this.l2Bridge = new Contract(l2TokenMessengerAddress, l2TokenMessengerAbi, l2SignerOrProvider); + const { address: l2TokenMessengerAddress, abi: l2TokenMessengerAbi } = getCctpV2TokenMessenger(dstChainId); + this.l2Bridge = new Contract(l2TokenMessengerAddress, l2TokenMessengerAbi, dstSignerOrProvider); - this.l1UsdcTokenAddress = EvmAddress.from(TOKEN_SYMBOLS_MAP.USDC.addresses[this.hubChainId]); + this.l1UsdcTokenAddress = EvmAddress.from(TOKEN_SYMBOLS_MAP.USDC.addresses[this.srcChainId]); } private get l2DestinationDomain(): number { - return getCctpDomainForChainId(this.l2chainId); + return getCctpDomainForChainId(this.dstChainId); } - protected resolveL2TokenAddress(l1Token: EvmAddress): string { - l1Token; - return TOKEN_SYMBOLS_MAP.USDC.addresses[this.l2chainId]; + protected resolveL2TokenAddress(srcToken: EvmAddress): string { + srcToken; + return TOKEN_SYMBOLS_MAP.USDC.addresses[this.dstChainId]; } async constructL1ToL2Txn( toAddress: Address, - l1Token: EvmAddress, + srcToken: EvmAddress, _l2Token: Address, amount: BigNumber, optionalParams?: TransferTokenParams ): Promise { - assert(l1Token.eq(this.l1UsdcTokenAddress)); + assert(srcToken.eq(this.l1UsdcTokenAddress)); // Check for fast-transfer allowance and also min fee, and if they are reasonable, then // construct a fast transfer, otherwise default to a standard transfer. amount = amount.gt(CCTP_MAX_SEND_AMOUNT) ? CCTP_MAX_SEND_AMOUNT : amount; @@ -100,12 +100,12 @@ export class UsdcCCTPBridge extends BaseBridgeAdapter } async queryL1BridgeInitiationEvents( - l1Token: EvmAddress, + srcToken: EvmAddress, fromAddress: EvmAddress, toAddress: Address, eventConfig: EventSearchConfig ): Promise { - assert(l1Token.eq(this.l1UsdcTokenAddress)); + assert(srcToken.eq(this.l1UsdcTokenAddress)); const eventFilterArgs = [this.l1UsdcTokenAddress.toNative(), undefined, fromAddress.toNative()]; const eventFilter = this.getL1Bridge().filters.DepositForBurn(...eventFilterArgs); const events = (await paginatedEventQuery(this.getL1Bridge(), eventFilter, eventConfig)).filter( @@ -114,17 +114,17 @@ export class UsdcCCTPBridge extends BaseBridgeAdapter event.args.destinationDomain === this.l2DestinationDomain ); return { - [this.resolveL2TokenAddress(l1Token)]: events.map((event) => processEvent(event, "amount")), + [this.resolveL2TokenAddress(srcToken)]: events.map((event) => processEvent(event, "amount")), }; } async queryL2BridgeFinalizationEvents( - l1Token: EvmAddress, + srcToken: EvmAddress, fromAddress: EvmAddress, toAddress: Address, eventConfig: EventSearchConfig ): Promise { - assert(l1Token.eq(this.l1UsdcTokenAddress)); + assert(srcToken.eq(this.l1UsdcTokenAddress)); const eventFilterArgs = [toAddress.toNative(), undefined, this.resolveL2TokenAddress(this.l1UsdcTokenAddress)]; const eventFilter = this.getL2Bridge().filters.MintAndWithdraw(...eventFilterArgs); const events = await paginatedEventQuery(this.getL2Bridge(), eventFilter, eventConfig); @@ -146,6 +146,6 @@ export class UsdcCCTPBridge extends BaseBridgeAdapter } async _getCctpV2DepositForBurnMaxFee(amount: BigNumber): Promise<{ maxFee: BigNumber; finalityThreshold: number }> { - return getV2DepositForBurnMaxFee(this.l1UsdcTokenAddress, this.hubChainId, this.l2chainId, amount); + return getV2DepositForBurnMaxFee(this.l1UsdcTokenAddress, this.srcChainId, this.dstChainId, amount); } } diff --git a/src/adapter/undirected/index.ts b/src/adapter/undirected/index.ts new file mode 100644 index 0000000000..c9d4ce38cc --- /dev/null +++ b/src/adapter/undirected/index.ts @@ -0,0 +1,6 @@ +export * from "./BinanceCEXBridge"; +export * from "./BinanceCEXNativeBridge"; +export * from "./OFTBridge"; +export * from "./OFTWethBridge"; +export * from "./UsdcCCTPBridge"; +export * from "./HyperlaneXERC20Bridge"; diff --git a/src/adapter/utils.ts b/src/adapter/utils.ts index a5786d427c..606b2fc2c6 100644 --- a/src/adapter/utils.ts +++ b/src/adapter/utils.ts @@ -12,7 +12,7 @@ import { winston, Address, } from "../utils"; -import { BridgeEvent } from "./bridges/BaseBridgeAdapter"; +import { BridgeEvent } from "./BaseBridgeAdapter"; import { Log, SortableEvent } from "../interfaces"; import { ExpandedERC20 } from "@across-protocol/contracts"; diff --git a/src/common/Constants.ts b/src/common/Constants.ts index cf2bfc89cd..c2729c9bce 100644 --- a/src/common/Constants.ts +++ b/src/common/Constants.ts @@ -16,8 +16,8 @@ import { toBN, Provider, } from "../utils"; +import { BaseBridgeAdapter } from "../adapter"; import { - BaseBridgeAdapter, OpStackDefaultERC20Bridge, SnxOptimismBridge, DaiOptimismBridge, @@ -31,30 +31,30 @@ import { BlastBridge, ScrollERC20Bridge, OpStackUSDCBridge, - UsdcCCTPBridge, ZKStackBridge, ZKStackUSDCBridge, ZKStackWethBridge, + SolanaUsdcCCTPBridge, + BaseL2BridgeAdapter, + L2OpStackUSDCBridge, + L2OpStackWethBridge, + L2OpStackBridge, + L2BinanceCEXBridge, + L2UsdcCCTPBridge, + L2BinanceCEXNativeBridge, + L2SolanaUsdcCCTPBridge, + HyperlaneXERC20BridgeL2, + OFTL2Bridge, +} from "../adapter/directed"; +import { + HyperlaneXERC20Bridge, OFTBridge, + OFTWethBridge, BinanceCEXBridge, BinanceCEXNativeBridge, - SolanaUsdcCCTPBridge, - OFTWethBridge, -} from "../adapter/bridges"; -import { - BaseL2BridgeAdapter, - OpStackUSDCBridge as L2OpStackUSDCBridge, - OpStackWethBridge as L2OpStackWethBridge, - OpStackBridge as L2OpStackBridge, - BinanceCEXBridge as L2BinanceCEXBridge, - UsdcCCTPBridge as L2UsdcCCTPBridge, - BinanceCEXNativeBridge as L2BinanceCEXNativeBridge, - SolanaUsdcCCTPBridge as L2SolanaUsdcCCTPBridge, -} from "../adapter/l2Bridges"; + UsdcCCTPBridge, +} from "../adapter/undirected"; import { CONTRACT_ADDRESSES } from "./ContractAddresses"; -import { HyperlaneXERC20Bridge } from "../adapter/bridges/HyperlaneXERC20Bridge"; -import { HyperlaneXERC20BridgeL2 } from "../adapter/l2Bridges/HyperlaneXERC20Bridge"; -import { OFTL2Bridge } from "../adapter/l2Bridges/OFTL2Bridge"; /** * Note: When adding new chains, it's preferred to retain alphabetical ordering of CHAIN_IDs in Object mappings. diff --git a/test/generic-adapters/Arbitrum.ts b/test/generic-adapters/Arbitrum.ts index afaaa07009..dd0d221af1 100644 --- a/test/generic-adapters/Arbitrum.ts +++ b/test/generic-adapters/Arbitrum.ts @@ -1,7 +1,7 @@ import { CHAIN_IDs, TOKEN_SYMBOLS_MAP } from "@across-protocol/constants"; import { EVMSpokePoolClient } from "../../src/clients"; import { BaseChainAdapter } from "../../src/adapter"; -import { ArbitrumOrbitBridge, UsdcTokenSplitterBridge } from "../../src/adapter/bridges"; +import { ArbitrumOrbitBridge, UsdcTokenSplitterBridge } from "../../src/adapter/directed"; import { ethers, getContractFactory, Contract, randomAddress, expect, toBN, createSpyLogger } from "../utils"; import { SUPPORTED_TOKENS } from "../../src/common"; import { getCctpDomainForChainId, EvmAddress, ZERO_ADDRESS, ZERO_BYTES } from "../../src/utils"; diff --git a/test/generic-adapters/Linea.ts b/test/generic-adapters/Linea.ts index 752b5392c9..8362d0286e 100644 --- a/test/generic-adapters/Linea.ts +++ b/test/generic-adapters/Linea.ts @@ -1,6 +1,7 @@ import { CHAIN_IDs, TOKEN_SYMBOLS_MAP } from "@across-protocol/constants"; import { EVMSpokePoolClient } from "../../src/clients"; -import { LineaBridge, LineaWethBridge, UsdcCCTPBridge } from "../../src/adapter/bridges"; +import { LineaBridge, LineaWethBridge } from "../../src/adapter/directed"; +import { UsdcCCTPBridge } from "../../src/adapter/undirected"; import { BaseChainAdapter } from "../../src/adapter"; import { ethers, getContractFactory, Contract, randomAddress, expect, createRandomBytes32 } from "../utils"; import { utils } from "@across-protocol/sdk"; diff --git a/test/generic-adapters/OpStack.ts b/test/generic-adapters/OpStack.ts index ac4b36b9f0..1e24184ecb 100644 --- a/test/generic-adapters/OpStack.ts +++ b/test/generic-adapters/OpStack.ts @@ -9,7 +9,7 @@ import { DaiOptimismBridge, SnxOptimismBridge, UsdcTokenSplitterBridge, -} from "../../src/adapter/bridges"; +} from "../../src/adapter/directed"; import { BaseChainAdapter } from "../../src/adapter/BaseChainAdapter"; import { EVMSpokePoolClient } from "../../src/clients"; diff --git a/test/generic-adapters/Polygon.ts b/test/generic-adapters/Polygon.ts index 1062dc284a..14b962d4e0 100644 --- a/test/generic-adapters/Polygon.ts +++ b/test/generic-adapters/Polygon.ts @@ -2,7 +2,7 @@ import { CHAIN_IDs, TOKEN_SYMBOLS_MAP } from "@across-protocol/constants"; import { utils } from "@across-protocol/sdk"; import { EVMSpokePoolClient } from "../../src/clients"; import { BaseChainAdapter } from "../../src/adapter/BaseChainAdapter"; -import { PolygonWethBridge, PolygonERC20Bridge, UsdcTokenSplitterBridge } from "../../src/adapter/bridges"; +import { PolygonWethBridge, PolygonERC20Bridge, UsdcTokenSplitterBridge } from "../../src/adapter/directed"; import { ethers, expect, diff --git a/test/generic-adapters/Scroll.ts b/test/generic-adapters/Scroll.ts index 0e736b958c..8f0b63c72f 100644 --- a/test/generic-adapters/Scroll.ts +++ b/test/generic-adapters/Scroll.ts @@ -1,7 +1,7 @@ import { CHAIN_IDs, TOKEN_SYMBOLS_MAP } from "@across-protocol/constants"; import { EVMSpokePoolClient } from "../../src/clients"; import { ZERO_ADDRESS } from "../../src/utils"; -import { ScrollERC20Bridge } from "../../src/adapter/bridges"; +import { ScrollERC20Bridge } from "../../src/adapter/directed"; import { BaseChainAdapter } from "../../src/adapter"; import { ethers, getContractFactory, Contract, randomAddress, expect } from "../utils"; import { utils } from "@across-protocol/sdk"; diff --git a/test/generic-adapters/USDC.ts b/test/generic-adapters/USDC.ts index a47bdfd237..cd595bccdf 100644 --- a/test/generic-adapters/USDC.ts +++ b/test/generic-adapters/USDC.ts @@ -1,5 +1,5 @@ import { CHAIN_IDs, TOKEN_SYMBOLS_MAP } from "@across-protocol/constants"; -import { UsdcCCTPBridge } from "../../src/adapter/bridges/UsdcCCTPBridge"; +import { UsdcCCTPBridge } from "../../src/adapter/undirected"; import { ethers, getContractFactory, Contract, randomAddress, expect } from "../utils"; import { utils } from "@across-protocol/sdk"; import { EvmAddress, toBNWei } from "../../src/utils/SDKUtils"; diff --git a/test/generic-adapters/zkSync.ts b/test/generic-adapters/zkSync.ts index 8872d9fcb9..1a421170a5 100644 --- a/test/generic-adapters/zkSync.ts +++ b/test/generic-adapters/zkSync.ts @@ -2,7 +2,7 @@ import { CHAIN_IDs, TOKEN_SYMBOLS_MAP } from "@across-protocol/constants"; import { utils } from "@across-protocol/sdk"; import { EVMSpokePoolClient } from "../../src/clients"; import { BaseChainAdapter } from "../../src/adapter/BaseChainAdapter"; -import { ZKStackUSDCBridge, ZKStackWethBridge, ZKStackBridge } from "../../src/adapter/bridges"; +import { ZKStackUSDCBridge, ZKStackWethBridge, ZKStackBridge } from "../../src/adapter/directed"; import { bnZero, EvmAddress } from "../../src/utils"; import { ethers, diff --git a/test/generic-l2-adapters/USDC.ts b/test/generic-l2-adapters/USDC.ts index 637888e7c4..8df45ce0a0 100644 --- a/test/generic-l2-adapters/USDC.ts +++ b/test/generic-l2-adapters/USDC.ts @@ -1,5 +1,5 @@ import { CHAIN_IDs, TOKEN_SYMBOLS_MAP } from "@across-protocol/constants"; -import { UsdcCCTPBridge } from "../../src/adapter/l2Bridges/UsdcCCTPBridge"; +import { UsdcCCTPBridge } from "../../src/adapter/directed/l2ToL1/UsdcCCTPBridge"; import { ethers, getContractFactory, Contract, randomAddress, expect } from "../utils"; import { utils } from "@across-protocol/sdk"; import { EvmAddress, toBNWei } from "../../src/utils/SDKUtils";