HistorySync Hard Fork: Upgrade Your Node by Feb 15

Hi @everyone , we wanted to inform that Ceramic’s first ever hard-fork is approaching.

The HistorySync release changes the way parts of the anchoring system work to enable the upcoming release of ComposeDB. Specifically these changes allow nodes to discover and sync existing data for a given data model from the other nodes on the network.

This means that all Ceramic nodes operating on the Ceramic mainnet must be upgraded to running at least version 2.18.0 of the @ceramicnetwork/cli package by February 15, 2023.

Nodes that have not upgraded by that time will no longer be able to verify anchor commits from the network, which will lead to all writes eventually becoming corrupted and lost due to CACAO timeout errors. To reiterate, nodes that have not upgraded by February 15, 2023 will begin to have all of their writes fail. If you are operating a Ceramic mainnet node, please let us know ASAP if you have any concerns about upgrading your Ceramic node by February 15, 2023.

Protocol Changes

There are 2 main changes we are making to the way anchoring (timestamping) works:

  1. Transactions to put anchor tree merkle roots onto Ethereum will no longer be simple regular transactions. Instead there will be an anchor smart contract and we will call an “anchor” function that causes the smart contract to emit an “anchor event” that ethereum RPC clients can subscribe to. This will make it easier for Ceramic nodes to discover when anchors happen and to sync the history of anchor events.
  2. The second change is designed to make the system more resilient to block reorgs on Ethereum. Ceramic anchor commits will no longer include the specific blockNumber and blockTimestamp that the anchor event was included in, as it’s possible the transaction could later be reorged into a new block. Instead, Ceramic will only use the transaction hash and will look up which blockNumber the transaction was included in from Ethereum directly.

Both of these changes require changes to the js-ceramic node implementation so that the node can still know how to verify and apply anchor commits with the new behavior. Nodes that haven’t upgraded will have failures when applying anchor commits. Data update commits that fail to be anchored within the CACAO timeout period will then start failing to apply as the node will not be able to verify that the update was created during the time when the CACAO (the capability that gave the app permission to write into the stream on behalf of the user) was valid. This can wind up corrupting the state of streams and invalidating writes that seemed to be applied successfully at first, but then are later invalidated when their CACAO times out.