This change reduces the number of Precommit messages sent to peers by 50%. During the `ApplyNewRoundStepMessage`, we update the known state of the peer sending us the message. We set the value of `ps.PRS.Precommits` to nil in this method if the peer is entering a new height or round.34ca3fb474/consensus/reactor.go (L1368)We then assign `ps.PRS.LastCommit = ps.PRS.Precommits` if the peer is entering a new height only - this does not happen during just a round change. This therefore results in `ps.PRS.LastCommit` having the value `nil`. When the `LastCommit` bit field is seen as `nil` in the reactor, an empty bit field is initialized.34ca3fb474/consensus/reactor.go (L1273)The code responsible for gossiping votes from the previous height uses this `LastCommit` value and, seeing an empty `LastCommit` will resend every `Precommit` from the previous height since it lost the information it previously had detailing which precommits from the previous height the peer had. This can be seen in the code responsible for gossiping precommits from the previous height:34ca3fb474/consensus/reactor.go (L773)Where this code grabs the, previously `nil`, `LastCommit` bit field:34ca3fb474/consensus/reactor.go (L1204-L1212)--- #### PR checklist - [ ] Tests written/updated, or no tests needed - [ ] `CHANGELOG_PENDING.md` updated, or no changelog entry needed - [ ] Updated relevant documentation (`docs/`) and code comments, or no documentation updates needed
5.8 KiB
Unreleased Changes
v0.38.0
BREAKING CHANGES
-
CLI/RPC/Config
-
Apps
-
P2P Protocol
-
Go API
- [p2p] #9625 Remove unused p2p/trust package (@cmwaters)
-
Blockchain Protocol
-
Data Storage
- [state] #6541 Move pruneBlocks from consensus/state to state/execution. (@JayT106)
-
Tooling
- [tools/tm-signer-harness] #6498 Set OS home dir to instead of the hardcoded PATH. (@JayT106)
- [metrics] #9682 move state-syncing and block-syncing metrics to their respective packages (@cmwaters) labels have moved from block_syncing -> blocksync_syncing and state_syncing -> statesync_syncing
FEATURES
- [config] #9680 Introduce
BootstrapPeersto the config to allow nodes to list peers to be added to the addressbook upon start up (@cmwaters)
IMPROVEMENTS
- [pubsub] #7319 Performance improvements for the event query API (@creachadair)
- [p2p/pex] #6509 Improve addrBook.hash performance (@cuonglm)
- [crypto/merkle] #6443 & #6513 Improve HashAlternatives performance (@cuonglm, @marbar3778)
- [rpc] #9650 Enable caching of RPC responses (@JayT106)
- [consensus] #9760 Save peer LastCommit correctly to achieve 50% reduction in gossiped precommits. (@williambanfield)
BUG FIXES
- [docker] #9462 ensure Docker image uses consistent version of Go
- [abci-cli] #9717 fix broken abci-cli help command
v0.37.0
Special thanks to external contributors on this release:
Friendly reminder, we have a bug bounty program.
BREAKING CHANGES
-
CLI/RPC/Config
- [config] #9259 Rename the fastsync section and the fast_sync key blocksync and block_sync respectively
-
Apps
- [abci/counter] #6684 Delete counter example app
- [abci] #5783 Make length delimiter encoding consistent (
uint64) between ABCI and P2P wire-level protocols - [abci] #9145 Removes unused Response/Request
SetOptionfrom ABCI (@samricotta) - [abci/params] #9287 Deduplicate
ConsensusParamsandBlockParamsso onlytypesproto definitions are used (@cmwaters)- Remove
TimeIotaMsand use a hard-coded 1 millisecond value to ensure monotonically increasing block times. - Rename
AppVersiontoAppso as to not stutter.
- Remove
- [types] #9287 Reduce the use of protobuf types in core logic. (@cmwaters)
ConsensusParams,BlockParams,ValidatorParams,EvidenceParams,VersionParamshave become native types. They still utilize protobuf when being sent over the wire or written to disk.- Moved
ValidateConsensusParamsinside (now native type)ConsensusParams, and renamed it toValidateBasic.
- [abci] #9301 New ABCI methods
PrepareProposalandProcessProposalwhich give the app control over transactions proposed and allows for verification of proposed blocks. - [abci] #8216 Renamed
EvidenceTypetoMisbehaviorTypeandEvidencetoMisbehavioras a more accurate label of their contents. (@williambanfield, @sergio-mena) - [abci] #9122 Renamed
LastCommitInfotoCommitInfoin preparation for vote extensions. (@cmwaters) - [abci] #8656, #8901 Added cli commands for
PrepareProposalandProcessProposal. (@jmalicevic, @hvanz) - [abci] #6403 Change the
keyandvaluefields from[]bytetostringin theEventAttributetype. (@alexanderbez)
-
P2P Protocol
-
Go API
- [all] #9144 Change spelling from British English to American (@cmwaters)
- Rename "Subscription.Cancelled()" to "Subscription.Canceled()" in libs/pubsub
- [crypto/sr25519] #6526 Do not re-execute the Ed25519-style key derivation step when doing signing and verification. The derivation is now done once and only once. This breaks
sr25519.GenPrivKeyFromSecretoutput compatibility. (@Yawning)
- [all] #9144 Change spelling from British English to American (@cmwaters)
-
Blockchain Protocol
FEATURES
- [abci] #9301 New ABCI methods
PrepareProposalandProcessProposalwhich give the app control over transactions proposed and allows for verification of proposed blocks.
IMPROVEMENTS
-
[crypto] #9250 Update to use btcec v2 and the latest btcutil. (@wcsiu)
-
[cli] #9171 add
--hardflag to rollback command (and a boolean to theRollbackStatemethod). This will rollback state and remove the last block. This command can be triggered multiple times. The application must also rollback state to the same height. (@tsutsu, @cmwaters) -
[proto] #9356 Migrate from
gogo/protobuftocosmos/gogoproto(@julienrbrt) -
[rpc] #9276 Added
headerandheader_by_hashqueries to the RPC client (@samricotta) -
[abci] #5706 Added
AbciVersiontoRequestInfoallowing applications to check ABCI version when connecting to Tendermint. (@marbar3778) -
[node] #6059 Validate and complete genesis doc before saving to state store (@silasdavis)
-
[crypto/ed25519] #5632 Adopt zip215
ed25519verification. (@marbar3778) -
[crypto/ed25519] #6526 Use curve25519-voi for
ed25519signing and verification. (@Yawning) -
[crypto/sr25519] #6526 Use curve25519-voi for
sr25519signing and verification. (@Yawning) -
[crypto] #6120 Implement batch verification interface for ed25519 and sr25519. (@marbar3778 & @Yawning)
-
[types] #6120 use batch verification for verifying commits signatures. (@marbar3778 & @cmwaters & @Yawning)
- If the key type supports the batch verification API it will try to batch verify. If the verification fails we will single verify each signature.
-
[state] #9505 Added logic so when pruning, the evidence period is taken into consideration and only deletes unecessary data (@samricotta)
BUG FIXES
- [consensus] #9229 fix round number of
enterProposewhen handlingRoundStepNewRoundtimeout. (@fatcat22) - [docker] #9073 enable cross platform build using docker buildx
- [blocksync] #9518 handle the case when the sending queue is full: retry block request after a timeout