Optimism Public Changelog
What is this?
This page tracks which software versions we release and the environments we deploy them to.
Release Cycle
Optimism releases new software every Tuesday and Thursday at 7PM UTC. Software is released on Goerli first, followed by mainnet a week later.
Each "release" consists of multiple software packages. The package versions listed in release describe what was actually deployed to each environment. Note that we create many more software packages than we actually deploy to production.
Some releases are more important than others. Those that require action are marked with a "critical" tag in the list below. We may release critical software updates outside our regular release cycle at our discretion.
We recommend subscribing to our RSS feed or the optimism-announce@optimism.io mailing list. Both will allow you to be notified when we release new software.
Supported Environments
Mainnet |
|
---|---|
Goerli |
|
Kovan |
Kovan is deprecated. Please migrate to Goerli as soon as possible. |
Releases
2022-08-02 - Kovan is Deprecated, Migrate to Goerli
As we announced last month, we’ve started the process of migrating our testnet from Kovan to Goerli. In line with the migration, we’ve updated this changelog to no longer reference the Kovan testnet. If you haven’t already, please migrate your apps to Goerli using the URLs described below:
- Public Endpoint: https://goerli.optimism.io
- Block Explorer: https://blockscout.com/optimism/goerli/
For more information about the migration process, please see our dev blog and follow our Twitter for updates.
Changelog:
Mainnet | Kovan | Goerli |
---|---|---|
|
|
|
2022-04-05 - Mainnet Gas Price Reduction
This release reduces gas prices on mainnet by 20% in order to pass the gas savings introduced by batch compression on to our users.
This change is transparent - no action is necessary to take advantage of it. Enjoy the reduced fees!
Changelog:
Mainnet | Kovan | Goerli |
---|---|---|
|
|
|
2022-03-24 - Mainnet Batch Compression
This release enables batch compression on mainnet. Please upgrade your data-transport-layer
s to at least version 0.5.20
as soon as possible if you are syncing from L1. See this release for more information on batch compression.
Changelog:
Mainnet | Kovan | Goerli |
---|---|---|
|
|
|
2022-03-17 - Kovan Batch Compression
Batch Compression
This release enables batch compression on Kovan. Batch compression will be rolled out to mainnet next week, so please upgrade your data-transport-layer
s to at least version 0.5.20
as soon as possible if you are syncing from L1. See this release for more information on batch compression.
Changelog:
Mainnet | Kovan | Goerli |
---|---|---|
|
|
|
2022-03-15 - Mainnet System Addresses, Batch Compression Upgrade Warning
System Addresses
This release adds support for system addresses on mainnet. If you haven’t already , please upgrade l2geth
to at least version 0.5.14
. See the Kovan Release for more information on system addresses.
Rate Limiting
As part of this release, we upgraded our caching infrastructure and began enforcing a rate limit on our public mainnet endpoint. The limit is quite high, and is designed to deter misconfigured/malicious clients from degrading the service. If you go over the limit, your IP will be banned for 1 minute. If you need a higher rate limit than what the public endpoint affords we recommend using a third-party infrastructure provider.
Batch Compression Upgrade Warning
We will be enabling batch compression on Kovan on Thursday the 17th. We’ll be enabling it on mainnet on the 21st. Please upgrade your data-transport-layer
s to at least version 0.5.20
as soon as possible if you are syncing from L1. See last week’s release for more information on the batch compression spec.
Routine Upgrades
Apart from the above, we also performed a routine upgrade of other services.
data-transport-layer
- Updated dependencies [
b3f9bde
] - Updated dependencies [
175ae0b
] - Updated dependencies [
e53b578
]- @eth-optimism/common-ts@0.2.2
- @eth-optimism/contracts@0.5.17
batch-submitter-service
aca0684
: Add 20% buffer to gas estimation on tx-batch submission to prevent OOG reverts75040ca
: Adds MIN_L1_TX_SIZE configuration
Changelog:
Mainnet | Kovan | Goerli |
---|---|---|
|
2022-03-08 - Kovan System Addresses
System Addresses
This release adds support for two additional system addresses to our Kovan sequencer. System addresses are special addresses of the form 0x420...NN
, and are used for things like our cross chain messenger contract. This change is technically a hardfork, so please upgrade your replicas to at least 0.5.14
as soon as possible in order to avoid a chain split.
Note that both system addresses are currently empty. Unupgraded nodes will continue to work until we deploy a contract at one of the system addresses. However, you should still upgrade as soon as possible since we might deploy a system contract at any time without warning.
We’ll be deploying these changes to mainnet next Tuesday.
Typed Batches and Batch Compression
This release also adds support for typed batches and batch compression. Please see the announcement post for more information. We will be enabling compression on Kovan on the 17th, and mainnet on the 24th. Unless you are running an L1-syncing replica or parsing L1 batches yourself, no action is required.
If you are running an L1-syncing replica, please upgrade your data-transport-layer
to at least version 0.5.20
.
If you are parsing L1 batches yourself, please see the specification at the end of this post.
Typed Batches/Batch Compression Spec
Transaction batches are specified as follows:
Sequencer Batch Appended Calldata
Starting tx index: 5 bytes
Number of elements in batch: 3 bytes
Number of batch contexts: 3 bytes
Number of contexts * batch context size: number of contexts * 16 bytes
transaction length: 3 bytes
raw transaction: transaction length number of bytes
Batch Context
Number of txs sent directly to L2: 3 bytes
Number of deposits: 3 bytes
Timestamp: 5 bytes
Block Number: 5 bytes
To support a “versioning” of batches, we introduce the concept of a type batch. Typed batches include a dummy context with a timestamp of 0. It would be impossible to have a real context with a timestamp of 0, so this very clearly defines that the transaction batch is typed. The block number is then used as an enum to describe which batch type is in use.
Transaction Batch Types
Type 0
Sequencer Batch Appended Calldata
Starting tx index: 5 bytes
Number of elements in batch: 3 bytes
Number of batch contexts: 3 bytes
Dummy Context
Number of txs: 0x000000
Number of deposits: 0x000000
Timestamp: 0x0000000000
Blocknumber: 0x0000000000
Number of contexts - 1 * batch context size: number of contexts - 1 * 16 bytes
zlib.compress:
transaction length: 3 bytes
raw transaction: transaction length number of bytes
Batch Context
Number of txs sent directly to L2: 3 bytes
Number of deposits: 3 bytes
Timestamp: 5 bytes
Block Number: 5 bytes
The main difference for this batch type is that the transaction data is compressed with zlib. There is an implementation of zlib in the node.js standard library as well as the golang standard library.
Routine Upgrades
Apart from the above, we also performed a routine upgrade of other services and added caching and automated failover to our public endpoints.
data-transport-layer
3873b69
: Enable typed batch support- Updated dependencies [
962f36e
] - Updated dependencies [
f2179e3
] - Updated dependencies [
b6a4fa4
] - Updated dependencies [
b7c0a5c
] - Updated dependencies [
5a6f539
] - Updated dependencies [
27d8942
]- @eth-optimism/contracts@0.5.16
- @eth-optimism/core-utils@0.8.1
gas-oracle
fed748e
: Update to go-ethereum v1.10.16
batch-submitter-service
6af67df
: Move L2 dial logic out of bss-core to avoid l2geth dependencyfe68056
: Enable the usage of typed batches and type 0 zlib compressed batches
Changelog:
Mainnet | Kovan | Goerli |
---|---|---|
|
|
2022-03-03 - Batch Submitter Upgrade
This release replaces our legacy batch submitter with a newer, more efficient one written in Go. Unless you are operating a batch submitter as part of a private Optimism testnet, no action is required. The new batch submitter lays the groundwork for concurrent batch submission and batch compression, which together will let us increase throughput and reduce fees.
As part of this release, we re-evaluated our batch submission rate given the network’s current usage. We’ve set the batch submission rate to be once every 30 minutes as a result of our findings. Tangibly, this means that messages sent from L2 to L1 may take up to 30 minutes to arrive. We’re working on a solution that will let us bring our batch submission rate back up - stay tuned.
Changelog:
Mainnet | Kovan | Goerli |
---|---|---|
|
|
|
2022-03-01 - DTL L1 Syncing Fix
This release adds patch blocks to the DTL so that it can properly sync from L1. As mentioned in the Batch Submitter L1 Sync Hotfix release, we discovered a bug in the batch submitter that led to state root divergence between nodes that sync from L1 and nodes that sync from L2. If you are one of the small number of node operators that sync from L1, you will need to update your DTL to use version 0.5.18
and resync.
Note that this fix only applies to mainnet. L1 syncing on Kovan is affected by a different issue which we are still looking into a fix for.
This release also includes routine updates and bugfixes for l2geth
.
l2geth:
0002b1d
: Remove dead code in l2geth1187dc9
: Don’t block read rpc requests when syncingbc342ec
: Fix queue index comparison
data-transport-layer:
275eb81
: Include patch contexts for bss hf1baece50
: Hardcodes BSS HF1 block into the DTL
Changelog:
Mainnet | Kovan | Goerli |
---|---|---|
|
|
2022-02-22 - Mainnet Timestamp Interval Update
This release updates a runtime parameter on mainnet to reduce the timestamp update interval from 5 minutes to 15 seconds.
Apart from the timestamp change, we also upgraded the Kovan batch submitter with some minor fixes:
bcbde5f
: Fixes a bug that causes the txmgr to not wait for the configured numConfirmations
Changelog:
Mainnet | Kovan | Goerli |
---|---|---|
|
|
|
2022-02-15 - Mainnet Berlin Hardfork
This release upgrades mainnet with the Berlin hardfork. The hardfork is set to activate at block 3950000
. Given current usage, this will be sometime next week. Please upgrade your replicas to l2geth 0.5.11
as soon as possible.
The upgrade process is the same as it was on Kovan, with slightly different parameters:
- Stop Geth if it is running.
- Run the following command:
geth init https://storage.googleapis.com/optimism/mainnet/genesis-berlin.json 0x106b0a3247ca54714381b1109e82cc6b7e32fd79ae56fbcc2e7b1541122f84ea
. You must also specifyUSING_OVM=true
in your environment variables. This will automatically download the updated genesis state and apply it. - Start Geth.
Note that you will need to run the steps above even if you upgraded l2geth
to version 0.5.11
last week in order to mitigate the critical security bug. Upgrading the node software and updating the genesis configuration are distinct processes.
If you’re syncing a node from scratch via op-replica, please use the mainnet-gen5-berlin
shared env.
Apart from the Berlin hardfork, we also upgraded the Kovan batch submitter with some minor fixes:
69118ac
: Switch num_elements_per_batch from Histogram to Summarydf98d13
: Remove extra space in metric names3ec0630
: Default to JSON logs, add LOG_TERMINAL flag for debuggingfe32161
: Unify metric name format93a2681
: Fixes a bug where clearing txs are rejected on startup due to missing gas limit
Changelog:
Mainnet | Kovan | Goerli |
---|---|---|
|
|
|
2022-02-08 - Critical Security Update Critical
IMPORTANT SECURITY UPDATE: This release fixes a critical security bug that made it possible to create ETH on Optimism by repeatedly triggering the SELFDESTRUCT
opcode. While our sequencer and all infrastructure providers are already patched, please upgrade replicas to l2geth
version 0.5.11
as soon as possible to avoid falling out of sync.
For more information about the bug, please see the disclosure.
Other items in this release include:
Kovan/mainnet l2geth:
- 9ef215b: Various small changes to reduce our upstream Geth diff
- 2e7f6a5: Fixes incorrect timestamp handling for L1 syncing verifiers
- 81d9056: Bring back RPC methods that were previously blocked
Kovan data-transport-layer:
- 8f72064: Handle case where the remote block isn’t found for
GET /eth/context/latest
andGET /eth/context/blocknumber/:number
- 1741d88: Updates DTL to correctly parse L1 to L2 tx timestamps after the first bss hardfork
Kovan batch-submitter:
- Migrate to Go based batch-submitter service.
Changelog:
Mainnet | Kovan | Goerli |
---|---|---|
|
2022-02-01 - Berlin Hardfork
This release deploys the Berlin hardfork on Kovan. Please upgrade your version of l2geth to version 0.5.9
as soon as possible. The hardfork activates at block 1138900
, and any unupgraded nodes will fall out of sync at that time.
Our Berlin hardfork includes a subset of mainnet’s Berlin EIPs:
- EIP-2929
- Note: We used to use a modified EIP-2929. This hardfork makes our EIP-2929 implementation match mainnet.
- EIP-2565
- EIP-3529
It does not include typed transactions.
To upgrade an existing Kovan node, you’ll need to reinitialize Geth. To do that:
- Stop Geth if it is running.
- Run the following command:
geth init https://storage.googleapis.com/optimism/kovan/kovan-berlin-genesis.json 0xaed938bc5dee7eb703658d4bec1f3e28f8b92bd9c032b2be779186eafc2b5a2a
. This will automatically download the updated genesis state and apply it. - Start Geth.
Alternatively, if you’re using op-replica, set the SHARED_ENV
environment variable to mainnet-gen5-kovan
to do this automatically.
You will need to do this again on mainnet in a few weeks.
Changelog:
Mainnet | Kovan | Goerli |
---|---|---|
|
|
2022-01-28 - Batch Submitter L1 Sync Hotfix
We discovered a bug in the batch submitter that led to state root divergence between nodes that sync from L1 and nodes that sync from L2. The majority of our node operators sync from L2, and are unaffected by this issue. For the node operators that sync from L1, we’re fixing this issue in phases:
- Fix the batch submitter.
- Add “patch configs” to the DTL that will overwrite the invalid timestamps submitted to L1.
This release implements phase one for Kovan. Phase 2 will complete shortly, then we’ll roll everything out to mainnet. Once we’ve deployed the updated batch submitter to mainnet, all L1 syncing replicas will need to update their DTL and batch submitter versions and resync.
Again, you do not need to do anything if your node syncs from L2. To find out which sync mode your node is in, check the value of the ROLLUP_BACKEND
environment variable. If it’s set to l1
, then you are affected by this issue. If it’s undefined or set to l2
, then you are not affected by this issue.
Changelog:
Mainnet | Kovan | Goerli |
---|---|---|
|
|
|
2022-01-25 - Nonce Error Hotfix
This release fixes a critical bug in l2geth
’s nonce handling logic that could have caused a denial-of-service. The fix has been rolled out across both Kovan and mainnet, as well as to all major infrastructure providers. If you are running a replica, please upgrade l2geth
to version 0.5.8
as soon as possible. No funds were ever at risk, and the issue was never exploited.
For full details of what went wrong, see the Nonce Error Hotfix Post-Mortem.
This release also deploys last week’s timestamp changes to mainnet and performs a bunch of routine upgrades.
Changelog:
Mainnet | Kovan | Goerli |
---|---|---|
|
|
2022-01-21 - Kovan Provider Proxy
This release adds a caching proxy called proxyd
to our public Kovan endpoint that routes traffic to infrastructure providers like Alchemy and Infura. This gives the Kovan public endpoint similar consistency and scalability guarantees to mainnet, and lets us test proxyd
before rolling it out on mainnet.
Changelog:
Mainnet | Kovan | Goerli |
---|---|---|
|
|
|
2022-01-11 - Routine Upgrade
This routine upgrade bumps the batch submitter to fix a broken metric.
Changelog:
Mainnet | Kovan | Goerli |
---|---|---|
|
|
|