JSPM

@eth-optimism/contracts-bedrock

0.16.1
    • ESM via JSPM
    • ES Module Entrypoint
    • Export Map
    • Keywords
    • License
    • Repository URL
    • TypeScript Types
    • README
    • Created
    • Published
    • Downloads 52416
    • Score
      100M100P100Q161507F
    • License MIT

    Contracts for Optimism Specs

    Package Exports

    • @eth-optimism/contracts-bedrock/deployments/goerli/AddressManager.json
    • @eth-optimism/contracts-bedrock/deployments/goerli/L1CrossDomainMessengerProxy.json
    • @eth-optimism/contracts-bedrock/deployments/goerli/L1StandardBridgeProxy.json
    • @eth-optimism/contracts-bedrock/deployments/goerli/L2OutputOracleProxy.json
    • @eth-optimism/contracts-bedrock/deployments/goerli/OptimismPortalProxy.json
    • @eth-optimism/contracts-bedrock/deployments/mainnet/AddressManager.json
    • @eth-optimism/contracts-bedrock/deployments/mainnet/L1CrossDomainMessengerProxy.json
    • @eth-optimism/contracts-bedrock/deployments/mainnet/L1StandardBridgeProxy.json
    • @eth-optimism/contracts-bedrock/deployments/mainnet/L2OutputOracleProxy.json
    • @eth-optimism/contracts-bedrock/deployments/mainnet/OptimismPortalProxy.json
    • @eth-optimism/contracts-bedrock/deployments/sepolia/AddressManager.json
    • @eth-optimism/contracts-bedrock/deployments/sepolia/L1CrossDomainMessengerProxy.json
    • @eth-optimism/contracts-bedrock/deployments/sepolia/L1StandardBridgeProxy.json
    • @eth-optimism/contracts-bedrock/deployments/sepolia/L2OutputOracleProxy.json
    • @eth-optimism/contracts-bedrock/deployments/sepolia/OptimismPortalProxy.json
    • @eth-optimism/contracts-bedrock/forge-artifacts/GasPriceOracle.sol/GasPriceOracle.json
    • @eth-optimism/contracts-bedrock/forge-artifacts/L1Block.sol/L1Block.json
    • @eth-optimism/contracts-bedrock/forge-artifacts/L1CrossDomainMessenger.sol/L1CrossDomainMessenger.json
    • @eth-optimism/contracts-bedrock/forge-artifacts/L1ERC721Bridge.sol/L1ERC721Bridge.json
    • @eth-optimism/contracts-bedrock/forge-artifacts/L1StandardBridge.sol/L1StandardBridge.json
    • @eth-optimism/contracts-bedrock/forge-artifacts/L2CrossDomainMessenger.sol/L2CrossDomainMessenger.json
    • @eth-optimism/contracts-bedrock/forge-artifacts/L2ERC721Bridge.sol/L2ERC721Bridge.json
    • @eth-optimism/contracts-bedrock/forge-artifacts/L2OutputOracle.sol/L2OutputOracle.json
    • @eth-optimism/contracts-bedrock/forge-artifacts/L2StandardBridge.sol/L2StandardBridge.json
    • @eth-optimism/contracts-bedrock/forge-artifacts/L2ToL1MessagePasser.sol/L2ToL1MessagePasser.json
    • @eth-optimism/contracts-bedrock/forge-artifacts/OptimismMintableERC20.sol/OptimismMintableERC20.json
    • @eth-optimism/contracts-bedrock/forge-artifacts/OptimismMintableERC20Factory.sol/OptimismMintableERC20Factory.json
    • @eth-optimism/contracts-bedrock/forge-artifacts/OptimismPortal.sol/OptimismPortal.json
    • @eth-optimism/contracts-bedrock/forge-artifacts/ProxyAdmin.sol/ProxyAdmin.json

    This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@eth-optimism/contracts-bedrock) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

    Readme

    Optimism Smart Contracts (Bedrock)

    codecov

    This package contains the smart contracts that compose the on-chain component of Optimism's upcoming Bedrock upgrade. We've tried to maintain 100% backwards compatibility with the existing system while also introducing new useful features. You can find detailed specifications for the contracts contained within this package here.

    A style guide we follow for writing contracts can be found here.

    Contracts Overview

    Contracts deployed to L1

    Name Proxy Type Description
    L1CrossDomainMessenger ResolvedDelegateProxy High-level interface for sending messages to and receiving messages from Optimism
    L1StandardBridge L1ChugSplashProxy Standardized system for transfering ERC20 tokens to/from Optimism
    L2OutputOracle Proxy Stores commitments to the state of Optimism which can be used by contracts on L1 to access L2 state
    OptimismPortal Proxy Low-level message passing interface
    OptimismMintableERC20Factory Proxy Deploys standard OptimismMintableERC20 tokens that are compatible with either StandardBridge
    ProxyAdmin - Contract that can upgrade L1 contracts

    Contracts deployed to L2

    Name Proxy Type Description
    GasPriceOracle Proxy Stores L2 gas price configuration values
    L1Block Proxy Stores L1 block context information (e.g., latest known L1 block hash)
    L2CrossDomainMessenger Proxy High-level interface for sending messages to and receiving messages from L1
    L2StandardBridge Proxy Standardized system for transferring ERC20 tokens to/from L1
    L2ToL1MessagePasser Proxy Low-level message passing interface
    SequencerFeeVault Proxy Vault for L2 transaction fees
    OptimismMintableERC20Factory Proxy Deploys standard OptimismMintableERC20 tokens that are compatible with either StandardBridge
    L2ProxyAdmin - Contract that can upgrade L2 contracts when sent a transaction from L1

    Legacy and deprecated contracts

    Name Location Proxy Type Description
    AddressManager L1 - Legacy upgrade mechanism (unused in Bedrock)
    DeployerWhitelist L2 Proxy Legacy contract for managing allowed deployers (unused since EVM Equivalence upgrade)
    L1BlockNumber L2 Proxy Legacy contract for accessing latest known L1 block number, replaced by L1Block

    Installation

    We export contract ABIs, contract source code, and contract deployment information for this package via npm:

    npm install @eth-optimism/contracts-bedrock

    Contributing

    For all information about working on and contributing to Optimism's smart contracts, please see CONTRIBUTING.md

    Deployment

    The smart contracts are deployed using foundry with a hardhat-deploy compatibility layer. When the contracts are deployed, they will write a temp file to disk that can then be formatted into a hardhat-deploy style artifact by calling another script.

    Configuration

    Create or modify a file <network-name>.json inside of the deploy-config folder. By default, the network name will be selected automatically based on the chainid. Alternatively, the DEPLOYMENT_CONTEXT env var can be used to override the network name. The spec for the deploy config is defined by the deployConfigSpec located inside of the hardhat.config.ts.

    Execution

    1. Set the env vars ETH_RPC_URL, PRIVATE_KEY and ETHERSCAN_API_KEY if contract verification is desired
    2. Deploy the contracts with forge script -vvv scripts/Deploy.s.sol:Deploy --rpc-url $ETH_RPC_URL --broadcast --private-key $PRIVATE_KEY Pass the --verify flag to verify the deployments automatically with Etherscan.
    3. Generate the hardhat deploy artifacts with forge script -vvv scripts/Deploy.s.sol:Deploy --sig 'sync()' --rpc-url $ETH_RPC_URL --broadcast --private-key $PRIVATE_KEY

    Deploying a single contract

    All of the functions for deploying a single contract are public meaning that the --sig argument to forge script can be used to target the deployment of a single contract.