Configuration
The OP Stack is a flexible platform with various configuration values that you can tweak to fit your specific needs. If you’re looking to fine-tune your deployment, look no further.
🚧 Work in Progress
OP Stack configuration is an active work in progress and will likely evolve significantly as time goes on. If something isn’t working with your configuration, check back with this page to see if anything has changed.
# New Blockchain Configuration
New OP Stack blockchains are currently configured with a JSON file inside the Optimism repository. The file is <optimism repository>/packages/contracts-bedrock/deploy-config/<chain name>.json
. For example, this is the configuration file for the tutorial blockchain (opens new window).
# Admin accounts
Key | Type | Description | Default / Recommended value |
---|---|---|---|
finalSystemOwner | L1 Address | Address that will own all ownable contracts on L1 once the deployment is finished, including the ProxyAdmin contract. | It is recommended to have a single admin account to retain a common security model. |
controller | L1 Address | Address that will own the SystemDictator contract and can therefore control the flow of the deployment or upgrade. | It is recommended to have a single admin account to retain a common security model. |
proxyAdminOwner | L2 Address | Address that will own the ProxyAdmin contract on L2. The L2 ProxyAdmin contract owns all of the Proxy contracts for every predeployed contract in the range 0x42...0000 to 0x42..2048 . This makes predeployed contracts easily upgradeable. | It is recommended to have a single admin account to retain a common security model. |
# Fee recipients
Key | Type | Description | Default value |
---|---|---|---|
baseFeeVaultRecipient | L1 or L2 Address | Address that the base fees from all transactions on the L2 can be withdrawn to. | It is recommended to have a single admin account to retain a common security model. |
l1FeeVaultRecipient | L1 or L2 Address | Address that the L1 data fees from all transactions on the L2 can be withdrawn to. | It is recommended to have a single admin account to retain a common security model. |
sequencerFeeVaultRecipient | L1 or L2 Address | Address that the tip fees from all transactions on the L2 can be withdrawn to. | It is recommended to have a single admin account to retain a common security model. |
# Minimum Fee Withdrawal Amounts
Key | Type | Description | Default value |
---|---|---|---|
baseFeeVaultMinimumWithdrawalAmount | Number in wei | The minimum amount of funds the BaseFeeVault contract must have for a fee withdrawal. | 10 ether |
l1FeeVaultMinimumWithdrawalAmount | Number in wei | The minimum amount of funds the L1FeeVault contract must have for a fee withdrawal. | 10 ether |
sequencerFeeVaultWithdrawalAmount | Number in wei | The minimum amount of funds the SequencerFeeVault contract must have for a fee withdrawal. | 10 ether |
# Withdrawal Network
Key | Type | Description | Default value |
---|---|---|---|
baseFeeVaultWithdrawalNetwork | Number representing network enum | A value of 0 will withdraw funds to the recipient address on L1 and a value of 1 will withdraw funds to the recipient address on L2. | |
l1FeeVaultWithdrawalNetwork | Number representing network enum | A value of 0 will withdraw funds to the recipient address on L1 and a value of 1 will withdraw funds to the recipient address on L2. | |
sequencerFeeVaultWithdrawalNetwork | Number representing network enum | A value of 0 will withdraw funds to the recipient address on L1 and a value of 1 will withdraw funds to the recipient address on L2. |
# Misc.
Key | Type | Description | Default value |
---|---|---|---|
numDeployConfirmations | Number of blocks | Number of confirmations to wait when deploying smart contracts to L1. | 1 |
l1StartingBlockTag | Block hash | Block tag for the L1 block where the L2 chain will begin syncing from. Generally recommended to use a finalized block to avoid issues with reorgs. | |
l1ChainID | Number | Chain ID of the L1 chain. | 1 for L1 Ethereum mainnet, 5 for the Goerli test network. See here for other blockchains (opens new window). |
l2ChainID | Number | Chain ID of the L2 chain. | 42069 |
# Blocks
These fields apply to L2 blocks: Their timing, when do they need to be written to L1, and how they get written.
Key | Type | Description | Default value |
---|---|---|---|
l2BlockTime | Number of seconds | Number of seconds between each L2 block. Must be <= L1 block time (12 on mainnet and Goerli) | 2 |
maxSequencerDrift | Number of seconds | How far the L2 timestamp can differ from the actual L1 timestamp | 600 (10 minutes) |
sequencerWindowSize | Number of blocks | Maximum number of L1 blocks that a Sequencer can wait to incorporate the information in a specific L1 block. For example, if the window is 10 then the information in L1 block n must be incorporated by L1 block n+10 . | 3600 (12 hours) |
channelTimeout | Number of blocks | Maximum number of L1 blocks that a transaction channel frame can be considered valid. A transaction channel frame is a chunk of a compressed batch of transactions. After the timeout, the frame is dropped. | 300 (1 hour) |
p2pSequencerAddress | L1 Address | Address of the key that the Sequencer uses to sign blocks on the p2p network. | Sequencer, an address for which you own the private key |
batchInboxAddress | L1 Address | Address that Sequencer transaction batches are sent to on L1. | 0xff00…0042069 |
batchSenderAddress | L1 Address | Address of the account that nodes will filter for when searching for Sequencer transaction batches being sent to the batchInboxAddress . Can be updated later via the SystemConfig contract on L1. | Batcher, an address for which you own the private key |
# Proposal fields
These fields apply to output root proposals.
Key | Type | Description | Default value |
---|---|---|---|
l2OutputOracleStartingBlockNumber | Number | Block number of the first OP Stack block. Typically this should be zero, but this may be non-zero for networks that have been upgraded from a legacy system (like Optimism Mainnet). Will be removed with the addition of permissionless proposals. | 0 |
l2OutputOracleStartingTimestamp | Number | Timestamp of the first OP Stack block. This MUST be the timestamp corresponding to the block defined by the l1StartingBlockTag . Will be removed with the addition of permissionless proposals. | |
l2OutputOracleSubmissionInterval | Number of blocks | Number of blocks between proposals to the L2OutputOracle . Will be removed with the addition of permissionless proposals. | 120 (24 minutes) |
finalizationPeriodSeconds | Number of seconds | Number of seconds that a proposal must be available to challenge before it is considered finalized by the OptimismPortal contract. | We recommend 12 on test networks, seven days on production ones |
l2OutputOracleProposer | L1 Address | Address that is allowed to submit output proposals to the L2OutputOracle contract. Will be removed when we have permissionless proposals. | |
l2OutputOracleChallenger | L1 Address | Address that is allowed to challenge output proposals submitted to the L2OutputOracle . Will be removed when we have permissionless challenges. | It is recommended to have a single admin account to retain a common security model. |
# L1 data fee
These fields apply to the cost of the L1 data fee (opens new window) for L2 transactions.
Key | Type | Description | Default value |
---|---|---|---|
gasPriceOracleOverhead | Number | Fixed L1 gas overhead per transaction. Default value will likely be adjusted with more information from the Optimism Goerli deployment. | 2100 |
gasPriceOracleScalar | Number | Dynamic L1 gas overhead per transaction, given in 6 decimals. Default value of 1000000 implies a dynamic gas overhead of exactly 1x (no overhead). | 1000000 |
# EIP 1559 gas algorithm
These fields apply to the EIP 1559 algorithm (opens new window) used for the L2 execution costs (opens new window) of transactions on the blockchain.
Key | Type | Description | Default value | Value on L1 Ethereum |
---|---|---|---|---|
eip1559Denominator | Number | Denominator used for the EIP1559 gas pricing mechanism on L2 (opens new window). A larger denominator decreases the amount by which the base fee can change in a single block. | 50 | 8 |
eip1559Elasticity | Number | Elasticity for the EIP1559 gas pricing mechanism on L2 (opens new window). A larger elasticity increases the maximum allowable gas limit per block. | 10 | 2 |
l2GenesisBlockGasLimit | String | Initial block gas limit, represented as a hex string. Default is 25m, implying a 2.5m target when combined with a 10x elasticity. | 0x17D7840 | |
l2GenesisBlockBaseFeePerGas | String | Initial base fee, used to avoid an unstable EIP1559 calculation out of the gate. Initial value is 1 gwei. | 0x3b9aca00 |
# Governance token
The governance token is a side-effect of use of the OP Stack in the Optimism Mainnet network. It may not be included by default in future releases.
Key | Type | Description | Default value |
---|---|---|---|
governanceTokenOwner | L2 Address | Address that will own the token contract deployed by default to every OP Stack based chain. | |
governanceTokenSymbol | String | Symbol for the token deployed by default to each OP Stack chain. | OP |
governanceTokenName | String | Name for the token deployed by default to each OP Stack chain. | Optimism |