fix(eth): initialize engine with finalized chain config, fix #2138#2180
fix(eth): initialize engine with finalized chain config, fix #2138#2180gzliudan wants to merge 1 commit intoXinFinOrg:dev-upgradefrom
Conversation
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
📝 Coding Plan
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment Tip CodeRabbit can suggest fixes for GitHub Check annotations.Configure the |
There was a problem hiding this comment.
Pull request overview
This PR addresses a sync failure at the first XDPoS v2 block when syncing from genesis (#2138) by ensuring the effective genesis/chain configuration is resolved (and stored when possible) before the consensus engine is constructed.
Changes:
- Replace
core.LoadChainConfigwithcore.SetupGenesisBlockduringeth.Newinitialization. - Construct the consensus engine after resolving the chain config, and reuse the instance when building the
Ethereumservice.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| @@ -141,6 +141,7 @@ func New(stack *node.Node, config *ethconfig.Config, XDCXServ *XDCx.XDCX, lendin | |||
| networkID = chainConfig.ChainID.Uint64() | |||
| } | |||
| common.CopyConstants(networkID) | |||
| engine := CreateConsensusEngine(stack, chainConfig, chainDb) | |||
| @@ -141,6 +141,7 @@ func New(stack *node.Node, config *ethconfig.Config, XDCXServ *XDCx.XDCX, lendin | |||
| networkID = chainConfig.ChainID.Uint64() | |||
| } | |||
| common.CopyConstants(networkID) | |||
| engine := CreateConsensusEngine(stack, chainConfig, chainDb) | |||
| // Resolve and persist the effective chain config before constructing | ||
| // the consensus engine so it always initializes with final network settings. |
1676ccd to
72382c3
Compare
…g#2138 Reorder initialization in eth.New so the effective chain config is resolved and persisted via core.SetupGenesisBlock before creating the consensus engine. Background: - On first sync from genesis, LoadChainConfig could return a stored/incomplete config (notably with XDPoS.V2 unset in legacy testnet setups). - Creating XDPoS before finalizing genesis config could trigger mainnet V2 fallback and log/behavior mismatches around SwitchBlock. What changed: - Replace early LoadChainConfig usage with SetupGenesisBlock in eth.New. - Keep ConfigCompatError semantics consistent with core/blockchain initialization: fail only on non-compat errors. - Initialize consensus engine after finalized chainConfig is available. Result: - Consensus engine now starts with finalized network config on first boot. - Avoids incorrect V2 fallback parameters (e.g. wrong SwitchBlock) during initial testnet sync. Tests: - Added regression tests in eth/backend_test.go to cover legacy missing-V2 repair and SetupGenesisBlock idempotency.
72382c3 to
372c5c4
Compare
Proposed changes
Reorder initialization in eth.New so the effective chain config is resolved and persisted via core.SetupGenesisBlock before creating the consensus engine.
Background:
Proof:
Add a log in function
func (x *XDPoS) VerifyHeaders:Result:
What changed:
Result:
Tests:
fix #2138
Types of changes
What types of changes does your code introduce to XDC network?
Put an
✅in the boxes that applyImpacted Components
Which parts of the codebase does this PR touch?
Put an
✅in the boxes that applyChecklist
Put an
✅in the boxes once you have confirmed below actions (or provide reasons on not doing so) that