-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Design Documents Switchable Consensus Parameters
A single member of an IBFT Blockchain consortium wishes to leave the group, but wants to maintain their existing data.
Thus, a mechanism must exist which allows the list of validators to be overridden with a hard-coded list at a given block.
The overall goal of this change is that the validators for an IBFT2 network change at a given block. What this means:
- The genesis file must specify the block at which the validators are to change, and also who the new validators are.
- It must list the new validators, not just the expected extra data, as the new validators are required to know that at block-X they are responsible for producing a block (this is different to existing behaviour, as the genesis file defines the block upon which all work is to be performed - this change defines the block to be created).
- IBFT business logic must be able to determine the currently active validators from a source other than just the latest block - i.e. it must somehow factor in the "validator switch" data specified in the genesis file.
- Block Validator rules must be updated to expect the validators in the block to be either as per existing voting, OR as per genesis file content.
- This will probably be abstracted behind the
VoteTallyCache.
- This will probably be abstracted behind the
- Votes cast prior to the "change Block" will need to be discarded on a change into a custom fork.
Currently, the overarching behaviour of the system is defined by the ProtocolSchedule and the associated ProtocolContext. The validators and votes are (indirectly) contained within the ProtocolContext, of which only one exists for the lifetime of the network.
It is proposed that ConsensusState contained within the ProtocolContext be either:
- Replaceable upon custom block.
- Or the entire
ProtocolContextbe overwritten upon custom block.
The existing forking process (in the ProtocolSchedule) is to be reused. However, the forks/milestones will be recognised as "transitions" in the genesis file.
Genesis File
{
"config": {
"chainId": 4,
"homesteadBlock": 1,
"eip150Block": 200,
"eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"eip155Block": 300,
"eip158Block": 300,
"byzantiumBlock": 400,
"transitions" : {
"250" : {
"ibft2": {
"validators": ["0x12345...", "0x09875..."]
}
},
"350": {
"ibft2": {
"validators": ["0x12345...", "0x09875..."]
}
}
}
}
}During construction of the ProtocolSchedule, additional ProtocolSpecs will be added at the "transitions" block numbers.
besu-eth/wiki and edits made here are overwritten on the next publish. To change a page, open a pull request against the source repo instead. See Home for how.
Contributing
Development & Testing
Developing & Conventions
Project Process
Governance
Incident Reports
- 2024-01-06 Mainnet Halting Event
- 2022-11-11 Fork on Sepolia
- 2022-05-30 Phishing PRs
- 2021-08-04 Value Transfer Public Transactions Rejected
- 2021-04-23 ATs Failures
Performance & Stability
- Improvements Since the Merge
- Memory Usage Investigations (23.7.3-RC)
- Reduce Memory Usage
- Testing Taskforce Brainstorming
- Q4 2022 Stability and Improvements
- Permissioned Chain Testing
Design Documents
- Design Documents
- Modular Besu
- Refactor EVM into a Standalone Library
- Bonsai Tries Design Overview
- Bonsai Archive Feature
- Bonsai Archive State Proofs
- Switchable Consensus Parameters
- SECP256R1 Support
- RPC Endpoint Service
- Feature Proposal Template
- Feature Flags
- CI/CD Tooling and Process
Programs & Mentorship