September 3, 2024
This release includes a security fix for the light client and is recommended for all users.
[light]
Cross-check proposer priorities in retrieved validator sets (#ASA-2024-009)[privval]
Retry accepting a connection (#2047)[privval]
Ignore duplicate privval listen when already connected (#3828
[crypto/secp256k1]
Adjust to breaking interface changes inbtcec/v2
latest release, while avoiding breaking changes to local CometBFT functions (#3728)
[types]
Check that proposer is one of the validators inValidateBasic
(#ASA-2024-009)
August 12, 2024
This release contains a few minor bug fixes and performance improvements.
[indexer]
Fixed ineffective select break statements; they now point to their enclosing for loop label to exit (#3544)
July 16, 2024
This release contains a few minor bug fixes and performance improvements.
[p2p]
Node respects configuredmax_num_outbound_peers
limit when dialing peers provided by a seed node (#486)[blocksync]
Do not stay in blocksync if the node's validator voting power is high enough to block the chain while it is not online (#3406)
[p2p/conn]
Remove the usage of a synchronous pool of buffers in secret connection, storing instead the buffer in the connection struct. This reduces the synchronization primitive usage, speeding up the code. (#3403)
July 1, 2024
This release reverts the API-breaking change to the Mempool
interface introduced in the last patch
release (v0.37.7) while still keeping the performance improvement added to the mempool. It also
includes a minor fix to the RPC endpoints /tx
and /tx_search
.
[mempool]
Revert adding the methodPreUpdate()
to theMempool
interface, recently introduced in the previous patch release (v0.37.7
). Its logic is now moved into theLock
method. With this change, theMempool
interface is the same as inv0.37.6
. (#3363)
[rpc]
Fix nil pointer error in/tx
and/tx_search
when block is absent (#3352)
June 27, 2024
This release is centered around two topics: mempool and performance improvements. The mempool will stop accepting new transactions if the node can't keep up with rechecking the number of transactions already in the mempool. It also contains a few bug fixes.
[mempool]
Add to theMempool
interface a new methodPreUpdate()
. This method should be called before acquiring the mempool lock, to signal that a new update is coming. Also add toErrMempoolIsFull
a new fieldRecheckFull
. (#3314)
[blockstore]
Fix invalid blocks received in blocksync mode, added banning peer option (#ASA-2024-008)[consensus]
Fix a race condition in the consensus timeout ticker. Race is caused by two timeouts being scheduled at the same time. (#3092)
[event-bus]
Remove the debug logs in PublishEventTx, which were noticed production slowdowns. (#2911)[state/execution]
Cache the block hash computation inside of the Block Type, so we only compute it once. (#2924)[consensus/state]
Remove a redundantVerifyBlock
call inFinalizeCommit
(#2928)[p2p/channel]
SpeedupProtoIO
writer creation time, and thereby speedup channel writing by 5%. (#2949)[p2p/conn]
Minor speedup (3%) to connection.WritePacketMsgTo, by removing MinInt calls. (#2952)[internal/bits]
10x speedup creating initialized bitArrays, which speedsup extendedCommit.BitArray(). This is used in consensus vote gossip. (#2959).[blockstore]
Remove a redundantHeader.ValidateBasic
call inLoadBlockMeta
, 75% reducing this time. (#2964)[p2p/conn]
Speedup connection.WritePacketMsgTo, by reusing internal buffers rather than re-allocating. (#2986)- [
blockstore
] Use LRU caches in blockstore, significiantly improving consensus gossip routine performance (#3003 - [
consensus
] Improve performance of consensus metrics by lowering string operations (#3017 - [
protoio
] Remove one allocation and new object call fromReadMsg
, leading to a 4% p2p message reading performance gain. (#3018 [mempool]
Before updating the mempool, consider it as full if rechecking is still in progress. This will stop accepting transactions in the mempool if the node can't keep up with re-CheckTx. This improvement is implemented only in the v0 mempool. (#3314)
April 26, 2024
This release contains a few bug fixes and performance improvements. It also bumps Go version to 1.21.
[state]
Fix rollback to a specific height (#2136)- [
bits
] preventBitArray.UnmarshalJSON
from crashing on 0 bits (#2774)
- Bump Go version used to v1.21 since v1.20 has reached EOL (#2817)
[state/indexer]
Lower the heap allocation of transaction searches (#2839)[internal/bits]
10x speedup and remove heap overhead of bitArray.PickRandom (used extensively in consensus gossip) (#2841).[libs/json]
Lower the memory overhead of JSON encoding by using JSON encoders internally (#2846).
March 12, 2024
This release fixes a security bug in the light client. It also introduces many improvements to the block sync in collaboration with the Osmosis team.
[mempool]
The calculation method of tx size returned by calling proxyapp should be consistent with that of mempool (#1687)[evidence]
WhenVerifyCommitLight
&VerifyCommitLightTrusting
are called as part of evidence verification, all signatures present in the evidence must be verified (#1749)
[types]
ValidateValidator#Address
inValidateBasic
(#1715)[abci]
Increase ABCI socket message size limit to 2GB (#1730: @troykessler)[blocksync]
make the max number of downloaded blocks dynamic. Previously it was a const 600. Now it'speersCount * maxPendingRequestsPerPeer (20)
#2467[blocksync]
Request a block from peer B if we are approaching pool's height (less than 50 blocks) and the current peer A is slow in sending us the block #2475[blocksync]
Request the block N from peer B immediately after gettingNoBlockResponse
from peer A #2475[blocksync]
Sort peers by download rate (the fastest peer is picked first) #2475
November 27, 2023
This release provides the nop mempool for applications that want to build
their own mempool. Using this mempool effectively disables all mempool
functionality in CometBFT, including transaction dissemination and the
broadcast_tx_*
endpoints.
Also fixes a small bug in the mempool for an experimental feature, and reverts the change from v0.37.3 that bumped the minimum Go version to v1.21.
[mempool]
Avoid infinite wait in transaction sending routine when using experimental parameters to limiting transaction gossiping to peers (#1654)
-
[mempool]
Addnop
mempool (#1643)If you want to use it, change mempool's
type
tonop
:[mempool] # The type of mempool for this node to use. # # Possible types: # - "flood" : concurrent linked list mempool with flooding gossip protocol # (default) # - "nop" : nop-mempool (short for no operation; the ABCI app is responsible # for storing, disseminating and proposing txs). "create_empty_blocks=false" # is not supported. type = "nop"
November 17, 2023
This release contains, among other things, an opt-in, experimental feature to help reduce the bandwidth consumption associated with the mempool's transaction gossip.
[p2p]
Remove unused UPnP functionality (#1113)
[state/indexer]
Respect both height params while querying for events (#1529)
[node/state]
Add Go API to bootstrap block store and state store to a height (#1057) (@yihuang)[metrics]
Add metric for mempool size in bytesSizeBytes
. (#1512)
[crypto/sr25519]
Upgrade to [email protected] (#475)[node]
Make handshake cancelable (cometbft/cometbft#857)[node]
Close evidence.db OnStop (cometbft/cometbft#1210: @chillyvee)[mempool]
Add experimental feature to limit the number of persistent peers and non-persistent peers to which the node gossip transactions (only for "v0" mempool). (#1558) (#1584)[config]
Add mempool parametersexperimental_max_gossip_connections_to_persistent_peers
andexperimental_max_gossip_connections_to_non_persistent_peers
for limiting the number of peers to which the node gossip transactions. (#1558) (#1584)
June 14, 2023
Provides several minor bug fixes, as well as fixes for several low-severity security issues.
[state/kvindex]
Querying event attributes that are bigger than int64 is now enabled. We are not supporting reading floats from the db into the indexer nor parsing them into BigFloats to not introduce breaking changes in minor releases. (#771)[pubsub]
Pubsub queries are now able to parse big integers (larger than int64). Very big floats are also properly parsed into very big integers instead of being truncated to int64. (#771)
[rpc]
Remove response data from response failure logs in order to prevent large quantities of log data from being produced (#654)
[rpc/jsonrpc/client]
Low severity - Prevent RPC client credentials from being inadvertently dumped to logs (#787)[cmd/cometbft/commands/debug/kill]
Low severity - Fix unsafe int cast indebug kill
command (#793)[consensus]
Low severity - Avoid recursive call after rename to(*PeerState).MarshalJSON
(#863)[mempool/clist_mempool]
Low severity - Prevent a transaction from appearing twice in the mempool (#890: @otrack)
April 26, 2023
This release fixes several bugs, and has had to introduce one small Go
API-breaking change in the crypto/merkle
package in order to address what
could be a security issue for some users who directly and explicitly make use of
that code.
[crypto/merkle]
Do not allow verification of Merkle Proofs against empty trees (nil
root).Proof.ComputeRootHash
now panics when it encounters an error, butProof.Verify
does not panic (#558)
[consensus]
Unexpected error conditions inApplyBlock
are non-recoverable, so ignoring the error and carrying on is a bug. We replaced areturn
that disregarded the error by apanic
. (#496)[consensus]
Rename(*PeerState).ToJSON
toMarshalJSON
to fix a logging data race (#524)[light]
Fixed an edge case where a light client would panic when attempting to query a node that (1) has started from a non-zero height and (2) does not yet have any data. The light client will now, correctly, not panic and keep the node in its list of providers in the same way it would if it queried a node starting from height zero that does not yet have data (#575)
[jsonrpc/client]
Improve the error message for client errors stemming from bad HTTP responses. (cometbft/cometbft#638)
March 6, 2023
This is the first CometBFT release with ABCI 1.0, which introduces the
PrepareProposal
and ProcessProposal
methods, with the aim of expanding the
range of use cases that application developers can address. This is the first
change to ABCI towards ABCI++, and the full range of ABCI++ functionality will
only become available in the next major release with ABCI 2.0. See the
specification for more details.
In the v0.34.27 release, the CometBFT Go module is still
github.com/tendermint/tendermint
to facilitate ease of upgrading for users,
but in this release we have changed this to github.com/cometbft/cometbft
.
Please also see our upgrading guidelines for more details on upgrading from the v0.34 release series.
Also see our QA results for the v0.37 release.
We'd love your feedback on this release! Please reach out to us via one of our communication channels, such as GitHub Discussions, with any of your questions, comments and/or concerns.
See below for more details.
- The
TMHOME
environment variable was renamed toCMTHOME
, and all environment variables starting withTM_
are instead prefixed withCMT_
(#211) [p2p]
ReactorSend
,TrySend
andReceive
renamed toSendEnvelope
,TrySendEnvelope
andReceiveEnvelope
to allow metrics to be appended to messages and measure bytes sent/received. (#230)- Bump minimum Go version to 1.20 (#385)
- [config] The boolean key
fastsync
is deprecated and replaced byblock_sync
. (#9259) At the same time,block_sync
is also deprecated. In the next release, BlocSync will always be enabled andblock_sync
will be removed. (#409) [abci]
Make length delimiter encoding consistent (uint64
) between ABCI and P2P wire-level protocols (#5783)[abci]
Change thekey
andvalue
fields from[]byte
tostring
in theEventAttribute
type. (#6403)[abci/counter]
Delete counter example app (#6684)[abci]
RenamedEvidenceType
toMisbehaviorType
andEvidence
toMisbehavior
as a more accurate label of their contents. (#8216)[abci]
Added cli commands forPrepareProposal
andProcessProposal
. (#8656)[abci]
Added cli commands forPrepareProposal
andProcessProposal
. (#8901)[abci]
RenamedLastCommitInfo
toCommitInfo
in preparation for vote extensions. (#9122)- Change spelling from British English to American. Rename
Subscription.Cancelled()
toSubscription.Canceled()
inlibs/pubsub
(#9144) [abci]
Removes unused Response/RequestSetOption
from ABCI (#9145)[config]
Rename the fastsync section and the fast_sync key blocksync and block_sync respectively (#9259)[types]
Reduce the use of protobuf types in core logic.ConsensusParams
,BlockParams
,ValidatorParams
,EvidenceParams
,VersionParams
have become native types. They still utilize protobuf when being sent over the wire or written to disk. MovedValidateConsensusParams
inside (now native type)ConsensusParams
, and renamed it toValidateBasic
. (#9287)[abci/params]
DeduplicateConsensusParams
andBlockParams
so onlytypes
proto definitions are use. RemoveTimeIotaMs
and use a hard-coded 1 millisecond value to ensure monotonically increasing block times. RenameAppVersion
toApp
so as to not stutter. (#9287)[abci]
New ABCI methodsPrepareProposal
andProcessProposal
which give the app control over transactions proposed and allows for verification of proposed blocks. (#9301)
[consensus]
Fixed a busy loop that happened when sending of a block part failed by sleeping in case of error. (#4)[state/kvindexer]
Fixed the default behaviour of the kvindexer to index and query attributes by events in which they occur. In 0.34.25 this was mitigated by a separated RPC flag. @jmalicevic (#77)[state/kvindexer]
Resolved crashes when event values contained slashes, introduced after adding event sequences in #77. @jmalicevic (#382)[consensus]
(#386) Short-term fix for the case whenneedProofBlock
cannot find previous block meta by defaulting to the creation of a new proof block. (@adizere)- Special thanks to the Vega.xyz team, and in particular to Zohar (@ze97286), for reporting the problem and working with us to get to a fix.
[docker]
enable cross platform build using docker buildx (#9073)[consensus]
fix round number ofenterPropose
when handlingRoundStepNewRound
timeout. (#9229)[docker]
ensure Docker image uses consistent version of Go (#9462)[p2p]
prevent peers who have errored from being added topeer_set
(#9500)[blocksync]
handle the case when the sending queue is full: retry block request after a timeout (#9518)
[abci]
New ABCI methodsPrepareProposal
andProcessProposal
which give the app control over transactions proposed and allows for verification of proposed blocks. (#9301)
[e2e]
Add functionality for uncoordinated (minor) upgrades (#56)[tools/tm-signer-harness]
Remove the folder as it is unused (#136)[p2p]
ReactorSend
,TrySend
andReceive
renamed toSendEnvelope
,TrySendEnvelope
andReceiveEnvelope
to allow metrics to be appended to messages and measure bytes sent/received. (#230)[abci]
AddedAbciVersion
toRequestInfo
allowing applications to check ABCI version when connecting to CometBFT. (#5706)[cli]
add--hard
flag to rollback command (and a boolean to theRollbackState
method). 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. (#9171)[crypto]
Update to use btcec v2 and the latest btcutil. (#9250)[rpc]
Addedheader
andheader_by_hash
queries to the RPC client (#9276)[proto]
Migrate fromgogo/protobuf
tocosmos/gogoproto
(#9356)[rpc]
Enable caching of RPC responses (#9650)[consensus]
Save peer LastCommit correctly to achieve 50% reduction in gossiped precommits. (#9760)
CometBFT is a fork of Tendermint Core as of late December 2022.
Friendly reminder, we have a bug bounty program.
For changes released before the creation of CometBFT, please refer to the Tendermint Core CHANGELOG.md.