## Changelog: Lumia Erigon zkEVM Client Upgrade **Version:** 2.61.14-RC1 (CDK Erigon) **Changes:** - **Client Implementation:** - Migrated from a Go-based zkEVM node to CDK Erigon([https://github.com/0xPolygonHermez/cdk-erigon](https://github.com/0xPolygonHermez/cdk-erigon)), a specialized framework built upon the original Erigon Ethereum client ([https://github.com/ledgerwatch/erigon](https://github.com/ledgerwatch/erigon)). - Leverages Erigon's modular architecture, optimized for performance, reduced disk usage, and faster synchronization. - **State DB:** - Employs a flat database structure for storing state data instead of Merkle Patricia tries. - Stores key-value pairs in Plain State and Hash State tables, maintaining compatibility with Ethereum while significantly reducing memory consumption (10:1 reduction compared to legacy Ethereum nodes). - Uses a separate commitment tree for proof and verification, decoupling data storage from commitment. - Implements Intermediate Hashes caching for efficient tracking of changes in state data. - **Data Streamer Integration:** - Introduces the Data Streamer library ([../../../zkEVM/architecture/data-streamer/data-streamer-design.md](../../../zkEVM/architecture/data-streamer/data-streamer-design.md)) for sharing L2 state data. - Enables any CDK Erigon node (except the Sequencer) to function as both a data stream server and client. - Allows SequenceSender and RPC nodes to request batches from the CDK Erigon Sequencer and serve them to other nodes. - **L1 Syncing and Recovery:** - Introduces two methods for syncing with L1: normal operation mode (L1 syncing) and recovery mode (L1 or DAC recovery, depending on rollup or validium mode) - In normal mode, both CDK Erigon Sequencer and RPC nodes read all data related to sequences, verifications, and L1 info from L1 smart contracts. - Implements L1 recovery for retrieving batch data from L1 (or DAC) to rebuild the state in case of data loss. - **Component Roles:** - Distinguishes between the Sequencer and SequenceSender roles. - The SequenceSender handles batch creation, posting to L1 (for rollups), and interaction with the DAC (for validiums). - **Other Notable Changes:** - Removes the `--externalcl` flag. - Removes the `zkevm_getBroadcastURI` API method. - Introduces the `zkevm.l1-highest-block-type` flag for configuring how the L1 syncer requests the highest block, defaulting to 'finalized'. - Provides support for migrating a node between RPC and Sequencer roles by setting the `CDK_ERIGON_SEQUENCER` environment variable. **Upgrade Notes:** - Developers should be aware of the architectural and API changes when migrating from the previous client implementation. - Consider performance improvements and disk usage reductions offered by CDK Erigon. - Adjust L1 syncing and recovery procedures based on the new methods.