L1 Contracts

The following are brief descriptions of the L1 contracts and some of their notable features.

Staking Contract

For info on the Zircuit staking contract, please refer to https://stake.zircuit.com/faq.

L1Standard Bridge

The L1StandardBridge handles ETH and ERC20 transfers between L1 and L2. For L1-native ERC20 tokens, they're escrowed in this contract, while L2-native ones are burnt. ETH is stored in the OptimismPortal contract.

NOTE: The contract doesn't support all ERC20 variations, e.g., those with transfer fees, rebasing tokens, or blocklists.

Functions:

bridgeETH: Sends ETH the sender's address on L2.

bridgeETHTo: Sends ETH to a receiver's address on L2.

bridgeERC20: Sends ERC20 tokens to the sender's address onon L2.

depositERC20To: Deposit an ERC20 for a target on L2.

receive: Bridge ETH via direct send to the bridge.

finalizeBridgeETH: Finalizes an ETH bridge.

finalizeBridgeERC20: Finalizes an ERC20 bridge.

L1CrossDomainMessenger

The contract serves as an interface for managing cross-layer communication between L1 and L2. It provides functionalities to send and receive messages, potentially facilitating interactions like token transfers or contract calls between different layers of the network.

L1ERC721Bridge

The L1ERC721Bridge contract facilitates ERC721 token transfers between Ethereum and Zircuit by escrowing tokens on L1, liaising with the L2 bridge, and ensuring secure, transparent transfers. It's vital for scaling NFTs and ERC721 assets across blockchain layers.

L2OutputOracle

The contract holds an array of L2 state outputs, each representing the L2 chain state at specific block numbers. It permits adding new outputs and removing existing ones based on conditions.

Events:

OutputProposed: Announces a new output with its details.

Functions:

proposeL2Output: Submits a new L2 output, ensuring block number and timestamp accuracy.

getL2Output: Retrieves an output by index.

getL2OutputIndexAfter & getL2OutputAfter: Uses binary search to find and return outputs based on block numbers.

finalizationPeriodSeconds: The minimum time (in seconds) that must elapse before a withdrawal can be finalized.

OptimismPortal

The OptimismPortal is responsible for managing cross-chain communication between L1 and Zircuit L2. It handles depositing messages from L1 to L2 and proving and finalizing withdrawal messages from L2 to L1.

Functions

minimumGasLimit: Computes the minimum gas limit for a deposit.

receive(): Allows users to send ETH directly to the contract and have the funds deposited to their address on L2.

donateETH: Accepts ETH without triggering a deposit to L2.

proveWithdrawalTransaction: Allows a user to prove a withdrawal transaction by providing necessary proofs.

finalizeWithdrawalTransaction: Finalizes a withdrawal transaction after it has been proven.

depositTransaction: Accepts deposits of ETH and data, and triggers a TransactionDeposited event.

isOutputFinalized: Checks if a given L2 output is finalized.

Verifier

The Verifier is responsible for checking Zircuit validity and template proofs.

Last updated