-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[R4R]support fork id in header; elegant upgrade #53
Conversation
c085270
to
4fd78f8
Compare
consensus/parlia/snapshot.go
Outdated
return cpy | ||
} | ||
|
||
func (s *Snapshot) isMajorityFork(header *types.Header, forkHash string) bool { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
header *types.Header
seems useless here.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed.
4fd78f8
to
60606d3
Compare
ally++ | ||
} | ||
} | ||
return ally > len(s.RecentForkHashes)/2 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we need to ensure if the length of s.RecentForkHashes
is closed to the length of current validatorset?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
updated.
91d79a2
to
24dc208
Compare
BEP-89: Visual Fork of Binance Smart Chain
1. Summary
This BEP describes a proposal to enable the chain to display the whole view of validators that on different upcoming forks.
2. Abstract
The four bytes of
Header.Extra[28:32]
will be fulfilled withNEXT_FORK_HASH
. TheNEXT_FORK_HASH
indicates which fork the signer of this block is going to stay on. By analysingN
(N
is the amount of validators) continuous block headers, we are able to know which fork is supported by the majority of validators and exact which validator has not upgraded yet.3. Status
Draft.
4. Motivation
Binance Smart Chain will have some hard forks inevitably in the long run. Binance Smart Chain takes a risk of halt during hard fork once the validators can not reach a consensus. A validator could be slashed if it is not on the canonical fork which could be avoidable if the maintainer received alerts in time. A new protocol should be introduced to enable the chain to display the whole view of validators that on different upcoming forks. Any nodes/validators can decide to upgrade/fork or not accordingly.
5. Specification
5.1 Fork Hash
Fork Hash is introduced in EIP-2124. It is a mechanism that can let ethereum nodes precisely identify whether another node will be useful.
FORK_HASH
. IEEE CRC32 checksum ([4]byte) of the genesis hash and fork blocks numbers that already passed. E.g. Fork Hash for mainnet would be:forkhash₂ = 0x91d1f948 (DAO fork) = CRC32(<genesis-hash> || uint64(1150000) || uint64(1920000))
.FORK_NEXT
. Block number (uint64) of the next upcoming fork, or 0 if no next fork is known.NEXT_FORK_HASH
, whose algorithm is same withFORK_HASH
, butFORK_NEXT
will be included as well if it is not 0.5.2 Vanity
Format of
Header.Extra
:extraVanity
field is customized now, validator can use it to recordNEXT_FORK_HASH
of itself. TheNEXT_FORK_HASH
will only use the last 4 bytes ofextraVanity
.5.3 Clients
Header.Extra
withNEXT_FORK_HASH
during preparing block header.NEXT_FORK_HASH
is different from local.5.4 Backwards Compatibility
6. License
The content is licensed under CC0.