Optimism Smart Contracts (Bedrock)
![codecov](https://codecov.io/gh/ethereum-optimism/optimism/branch/develop/graph/badge.svg?token=0VTG7PG7YR&flag=contracts-bedrock-tests)
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
Contracts deployed to L2
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
- Set the env vars
ETH_RPC_URL
, PRIVATE_KEY
and ETHERSCAN_API_KEY
if contract verification is desired - 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. - 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.