Important: Nodes Must Upgrade Before February 21, 2023
Ceramic nodes operating on Ceramic mainnet must upgrade to at least version 2.20.1
of the @ceramicnetwork/cli
package or the docker image before February 21st.
The Ceramic core team implemented the network's first hard-fork on February 15th. The team discovered a bug during post hard-fork validation related to an incorrect smart contract address. An immediate hot-fix was deployed to address the issue and will prepare Ceramic nodes to use the proper smart contract address.
As a result of the hot-fix, Ceramic nodes operating on the Ceramic mainnet must upgrade to running at least version 2.20.1
of the @ceramicnetwork/cli
package or the docker image before February 21st.
We will continue to share status updates as we work on this via the Forum.
Update Feb 22: You might see the AWS error below while updating, please disregard:
"NOTE: The AWS SDK for JavaScript (v2) will be put into maintenance mode in 2023. Please migrate your code to use AWS SDK for JavaScript (v3). For more information, check the migration guide at https://a.co/7PzMCcy(Use node --trace-warnings ...
to show where the warning was created)"
Protocol Changes to Anchoring, Detailed
The upcoming ComposeDB Beta launch at ETHDenver includes HistorySync, the ability to sync historical data related to your models. Enabling HistorySync requires breaking changes to the Ceramic anchoring system.
There are two main changes we are making to the way anchoring (timestamping) works:
- 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.
- 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.