AbstractBridge
AbstractBridge
is an abstract class that provides a skeleton implementation for bridging assets
between Layer 1 and Layer 2. It serves as a base class that contains common functionality shared across different bridge implementations.
This class implements the core bridging functionality such as:
- Token deposits from L1 to L2
- Token withdrawals from L2 to L1
- Withdrawal finalization on L1
- ERC20 token approval management
- Transaction validation and gas estimation
Abstract Methods
Concrete bridge implementations must define the following abstract methods:
getSecondBridgeDepositCalldata
Returns the deposit calldata for the second bridge.
Inputs
Parameter | Type | Description |
---|---|---|
transaction | IDepositTransaction | Deposit transaction. |
protected abstract getSecondBridgeDepositCalldata(
transaction: IDepositTransaction
): Promise<string>;
populateWithdrawTransaction
Populates the withdraw transaction for the bridge.
Inputs
Parameter | Type | Description |
---|---|---|
transaction | IWithdrawTransaction | Withdraw transaction. |
protected abstract populateWithdrawTransaction(
transaction: IWithdrawTransaction
): Promise<TransactionLike>;
finalizeL1Deposit
Finalizes the L1 deposit.
Inputs
Parameter | Type | Description |
---|---|---|
bridgeAddress | Address | The address of the bridge contract to be used. |
finalizeParams | FinalizeL1DepositParams | Finalize L1 deposit parameters. |
overrides? | ethers.Overrides | Transaction's overrides which may be used to pass L1 gasLimit , gasPrice , value , etc. |
protected abstract finalizeL1Deposit(
bridgeAddress: Address,
finalizeParams: FinalizeL1DepositParams,
overrides?: Overrides
): Promise<ContractTransactionResponse>;
checkIfWithdrawalIsFinalized
Checks if a withdrawal has been finalized on L1.
Inputs
Parameter | Type | Description |
---|---|---|
bridgeAddress | Address | The address of the bridge contract to be used. |
finalizeParams | FinalizeL1DepositParams | Finalize withdrawal parameters. |
protected abstract checkIfWithdrawalIsFinalized(
bridgeAddress: Address,
finalizeParams: FinalizeL1DepositParams
): Promise<boolean>;
Validation Hooks
The class provides optional validation hooks that can be overridden:
validateDepositParams
Validates deposit transaction parameters. The function is expected to throw an exception if the deposit parameters are not valid.
Inputs
Parameter | Type | Description |
---|---|---|
transaction | IDepositTransaction | Deposit transaction. |
protected async validateDepositParams(
transaction: IDepositTransaction
): Promise<void>;
validateWithdrawParams
Validates withdrawal transaction parameters. The function is expected to throw an exception if the withdrawal parameters are not valid.
Inputs
Parameter | Type | Description |
---|---|---|
transaction | IWithdrawTransaction | Withdraw transaction. |
protected async validateWithdrawParams(
transaction: IWithdrawTransaction
): Promise<void>;
Complete Implementation Example
For a complete implementation example, see the USDCBridge
class which extends AbstractBridge
and
implements all required abstract methods for USDC token bridging operations.