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
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -34,14 +34,14 @@ export abstract class BaseBridgeAdapter<O, D> {
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(
Expand All @@ -67,7 +67,7 @@ export abstract class BaseBridgeAdapter<O, D> {
): Promise<BridgeEvents>;

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 {
Expand Down
8 changes: 4 additions & 4 deletions src/adapter/BaseChainAdapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -223,7 +223,7 @@ export class BaseChainAdapter<O, D> {
// 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));
Expand All @@ -248,7 +248,7 @@ export class BaseChainAdapter<O, D> {
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()));
Expand Down
13 changes: 13 additions & 0 deletions src/adapter/directed/index.ts
Original file line number Diff line number Diff line change
@@ -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";
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<Signer, Signer | Provider> {
private readonly l2Gas = 200000;
Expand Down
Original file line number Diff line number Diff line change
@@ -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 {
Expand All @@ -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)];
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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<Signer, Signer | Provider> {
constructor(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<Signer, Signer | Provider> {
protected atomicDepositor: Contract;
Expand Down Expand Up @@ -55,7 +55,7 @@ export class LineaWethBridge extends BaseBridgeAdapter<Signer, Signer | Provider
return Promise.resolve({
contract: this.atomicDepositor,
method: "bridgeWeth",
args: [this.l2chainId, amount, amount, bnZero, bridgeCalldata],
args: [this.dstChainId, amount, amount, bnZero, bridgeCalldata],
});
}

Expand Down Expand Up @@ -94,8 +94,8 @@ export class LineaWethBridge extends BaseBridgeAdapter<Signer, Signer | Provider
]);

const [l1FromBlock, l1ToBlock] = [
await getBlockForTimestamp(this.logger, this.hubChainId, fromBlock.timestamp, this.blockFinder),
await getBlockForTimestamp(this.logger, this.hubChainId, toBlock.timestamp, this.blockFinder),
await getBlockForTimestamp(this.logger, this.srcChainId, fromBlock.timestamp, this.blockFinder),
await getBlockForTimestamp(this.logger, this.srcChainId, toBlock.timestamp, this.blockFinder),
];
const l1SearchConfig = {
from: l1FromBlock,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 OpStackDefaultERC20Bridge extends BaseBridgeAdapter<Signer, Signer | Provider> {
private readonly l2Gas = 200000;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<Signer, Signer | Provider> {
private readonly l2Gas = 200000;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<Signer, Signer | Provider> {
protected atomicDepositor: Contract;
Expand Down Expand Up @@ -54,7 +54,7 @@ export class OpStackWethBridge extends BaseBridgeAdapter<Signer, Signer | Provid
this.atomicDepositor = new Contract(atomicDepositorAddress, atomicDepositorAbi, l1Signer);

this.l2Weth = new Contract(TOKEN_SYMBOLS_MAP.WETH.addresses[l2chainId], WETH_ABI, l2SignerOrProvider);
this.l1Weth = EvmAddress.from(TOKEN_SYMBOLS_MAP.WETH.addresses[this.hubChainId]);
this.l1Weth = EvmAddress.from(TOKEN_SYMBOLS_MAP.WETH.addresses[this.srcChainId]);
}

async constructL1ToL2Txn(
Expand All @@ -71,7 +71,7 @@ export class OpStackWethBridge extends BaseBridgeAdapter<Signer, Signer | Provid
return Promise.resolve({
contract: this.atomicDepositor,
method: "bridgeWeth",
args: [this.l2chainId, amount, amount, bnZero, bridgeCalldata],
args: [this.dstChainId, amount, amount, bnZero, bridgeCalldata],
});
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ import {
ZERO_ADDRESS,
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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -64,7 +64,7 @@ export class PolygonWethBridge extends BaseBridgeAdapter<Signer, Signer | Provid
return Promise.resolve({
contract: this.atomicDepositor,
method: "bridgeWeth",
args: [this.l2chainId, amount, amount, bnZero, bridgeCalldata],
args: [this.dstChainId, amount, amount, bnZero, bridgeCalldata],
});
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@ import {
TOKEN_SYMBOLS_MAP,
EvmAddress,
winston,
} from "../../utils";
import { CONTRACT_ADDRESSES, SCROLL_CUSTOM_GATEWAY } from "../../common";
import { BaseBridgeAdapter, BridgeTransactionDetails, BridgeEvents } from "./BaseBridgeAdapter";
import { processEvent } from "../utils";
} from "../../../utils";
import { CONTRACT_ADDRESSES, SCROLL_CUSTOM_GATEWAY } from "../../../common";
import { BaseBridgeAdapter, BridgeTransactionDetails, BridgeEvents } from "../../BaseBridgeAdapter";
import { processEvent } from "../../utils";

const SCROLL_STANDARD_GATEWAY: { l1: string; l2: string } = {
l1: "0xD8A791fE2bE73eb6E6cF1eb0cb3F36adC9B3F8f9",
Expand Down Expand Up @@ -135,8 +135,8 @@ export class ScrollERC20Bridge extends BaseBridgeAdapter<Signer, Signer | Provid
}

protected override resolveL2TokenAddress(l1Token: EvmAddress): string {
if (compareAddressesSimple(TOKEN_SYMBOLS_MAP.USDC.addresses[this.hubChainId], l1Token.toNative())) {
return TOKEN_SYMBOLS_MAP.USDC.addresses[this.l2chainId]; // Scroll only has one USDC token type.
if (compareAddressesSimple(TOKEN_SYMBOLS_MAP.USDC.addresses[this.srcChainId], l1Token.toNative())) {
return TOKEN_SYMBOLS_MAP.USDC.addresses[this.dstChainId]; // Scroll only has one USDC token type.
}
return super.resolveL2TokenAddress(l1Token);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@ import {
isContractDeployedToAddress,
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 SnxOptimismBridge extends BaseBridgeAdapter<Signer, Signer | Provider> {
constructor(
Expand Down Expand Up @@ -91,11 +91,11 @@ export class SnxOptimismBridge extends BaseBridgeAdapter<Signer, Signer | Provid
}

private getHubPool(): Contract {
const hubPoolContractData = CONTRACT_ADDRESSES[this.hubChainId]?.hubPool;
const hubPoolContractData = CONTRACT_ADDRESSES[this.srcChainId]?.hubPool;
if (!hubPoolContractData) {
throw new Error(`hubPoolContractData not found for chain ${this.hubChainId}`);
throw new Error(`hubPoolContractData not found for chain ${this.srcChainId}`);
}
return new Contract(hubPoolContractData.address, hubPoolContractData.abi, this.l1Signer);
return new Contract(hubPoolContractData.address, hubPoolContractData.abi, this.srcSigner);
}

private isL2ChainContract(address: EvmAddress): Promise<boolean> {
Expand Down
Loading