Closed Pangssu closed 5 days ago
[!IMPORTANT]
Review skipped
Auto reviews are disabled on base/target branches other than the default branch.
🗂️ Base branches to auto review (2)
* dev * mainPlease check the settings in the CodeRabbit UI or the
.coderabbit.yaml
file in this repository. To trigger a single review, invoke the@coderabbitai review
command.You can disable this status message by setting the
reviews.review_status
tofalse
in the CodeRabbit configuration file.
The changes in this pull request enhance the Ethereum Geth client by adding new configuration options and flags related to the Kroma protocol, specifically for managing MPT migration and ZK features. Key modifications include updates to configuration handling, the introduction of a state migrator for transitioning from ZKTrie to MPT, and enhancements to error handling and logging. Additionally, new test cases validate the functionality of self-destruct operations and the behavior of the state migrator. The overall structure and logic of the application are preserved while integrating these new features.
File | Change Summary |
---|---|
cmd/geth/config.go | Added DisableMPTMigration field and new command-line flags OverrideKromaMPT , KromaZKTrie . Updated error handling in loadConfig and modified dumpConfig . Removed duplicate imports. |
cmd/geth/main.go | Added utils.OverrideKromaMPT flag and reintroduced utils.RollupSequencerHTTPFlag . |
cmd/utils/flags.go | Added flags OverrideKromaMPT , DisableMPTMigrationFlag , and reintroduced RollupSequencerHTTPFlag . Removed unsupported flags. |
consensus/beacon/consensus.go | Modified IsTTDReached to always return true for Kroma. Updated comments for clarity. |
core/blockchain.go | Introduced GetMigratedRef method. Updated InsertChain and writeBlockWithState for MPT handling. |
core/blockchain_reader.go | Enhanced HasState method to handle errors when opening a trie for Kroma. |
core/blockchain_test.go | Added TestSelfDestructReEnabled and modified TestSelfDestructDisabled for Kroma MPT checks. |
core/genesis.go | Added OverrideKromaMPT field to ChainOverrides struct. Updated SetupGenesisBlockWithOverride . |
core/kroma_migration.go | Introduced MigratedRef struct and methods for managing migration references. |
core/types/transaction.go | Added IsSystemTx method to Transaction struct. |
core/vm/instructions.go | Added uint256 import. Updated opSelfdestruct and opSelfdestruct6780 for Kroma checks. |
core/vm/interpreter.go | Removed specific handling for SELFDESTRUCT opcode in Kroma. Enhanced tracing capabilities. |
eth/api_backend.go | Added HistoricalRPCService method to EthAPIBackend struct. |
eth/backend.go | Introduced migrator field in Ethereum struct and added StateMigrator method. |
eth/catalyst/api.go | Updated forkchoiceUpdated and NewPayload methods for Kroma state migration checks. |
eth/ethconfig/config.go | Added OverrideKromaMPT and DisableMPTMigration fields. Removed rollup-related fields. |
eth/ethconfig/gen_config.go | Enhanced MarshalTOML and UnmarshalTOML methods with new fields for Kroma. |
eth/tracers/api.go | Added HistoricalRPCService() method. Updated error handling in tracing methods. |
eth/tracers/api_test.go | Introduced mockHistoricalBackend for testing historical RPC functionality. |
eth/tracers/native/prestate.go | Updated CaptureStart to include new Kroma addresses for account lookups. |
internal/ethapi/api.go | Removed unsupported historical RPC handling code. |
internal/ethapi/api_test.go | Updated error handling in TestCall function for non-existent blocks. |
internal/ethapi/backend.go | Added HistoricalRPCService() method to Backend interface. |
internal/ethapi/transaction_args_test.go | Added HistoricalRPCService method to backendMock struct. |
migration/migrator.go | Introduced StateMigrator struct for managing state migrations. |
migration/migrator_genesis.go | Added zkPreimageWithAlloc function for retrieving preimages from the genesis block. |
migration/migrator_newstate.go | Implemented methods for managing state transitions and updates. |
migration/migrator_range.go | Introduced hashRange struct for managing hash ranges during migrations. |
migration/migrator_validate.go | Added ValidateMigratedState method for validating migrated state consistency. |
miner/miner.go | Added BackendWithHistoricalState interface for historical state retrieval. |
miner/payload_building.go | Modified buildPayload to handle Kroma migration blocks. |
miner/worker.go | Updated makeEnv and generateWork for Kroma state retrieval logic. |
params/config.go | Added KromaMPTTime and Optimism fields to ChainConfig . |
rpc/errors.go | Introduced NoHistoricalFallbackError type for error handling. |
trie/iterator.go | Updated seek method to accept zk.TreePath . Added new helper methods for traversal. |
trie/iterator_test.go | Enhanced test coverage for trie iterator functionality. |
sequenceDiagram
participant User
participant GethClient
participant StateMigrator
participant Database
User->>GethClient: Start migration with new flags
GethClient->>StateMigrator: Initialize migration
StateMigrator->>Database: Retrieve current state
Database-->>StateMigrator: Return current state
StateMigrator->>StateMigrator: Process state transitions
StateMigrator->>Database: Update migrated state
Database-->>StateMigrator: Confirm update
StateMigrator-->>GethClient: Migration complete
GethClient-->>User: Migration successful
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?
@coderabbitai review
After Kroma MPT time, if a user wants to sync their node from genesis without snapshot, that user might have zkt db and mpt db from genesis to Kroma MPT time. What do you think about this case? Should we highly recommend to sync with snapshot? Or we need to handle this case like starting state migrator only when the block height reaches some days before Kroma MPT time?
After Kroma MPT time, if a user wants to sync their node from genesis without snapshot, that user might have zkt db and mpt db from genesis to Kroma MPT time. What do you think about this case? Should we highly recommend to sync with snapshot? Or we need to handle this case like starting state migrator only when the block height reaches some days before Kroma MPT time?
Users can sync their nodes from genesis and the migration will be seamless. Using snapshots will help them sync faster, but we don't have to force it.
Migrate the backend of state trie from ZK Trie to MPT for better performance and user experience, and to enable zkVM fault proof. This PR also involves reducing code and state differences with op-geth.
IsSystemTx()
function.This PR should be merged after #118 is merged.