[proto]Renamed the packages fromtendermint.*tocometbft.*and introduced versioned packages to distinguish between proto definitions released in 0.34.x, 0.37.x, 0.38.x, and 1.0.x versions. Prior to the 1.0 release, the versioned packages are suffixed with.v1beta1,.v1beta2, and so on; all definitions describing the protocols as per the 1.0.0 release are in packages suffixed with.v1. Relocated generated Go code into a newapifolder and changed the import paths accordingly. (#495 #1504)[crypto/merkle]The publicProof.ComputeRootHashfunction has been deleted. (#558)[rpc/grpc]Remove the deprecated gRPC broadcast API (#650)[proto]The names in thecometbft.abci.v1versioned proto package are changed to satisfy the buf guidelines (#736, #1504, #1530):- Names of request and response types used in gRPC changed by making
Request/Responsethe suffix instead of the prefix, e.g.RequestCheckTx⭢CheckTxRequest. - The
RequestandResponsemultiplex messages are redefined accordingly. CheckTxTypevalues renamed with theCHECK_TX_TYPE_prefix.MisbehaviorTypevalues renamed with theMISBEHAVIOR_TYPE_prefix.Resultenum formerly nested inResponseOfferSnapshotreplaced with the package-levelOfferSnapshotResult, its values named with theOFFER_SNAPSHOT_RESULT_prefix.Resultenum formerly nested inResponseApplyShapshotChunkreplaced with the package-levelApplySnapshotChunkResult, its values named with theAPPLY_SNAPSHOT_CHUNK_RESULT_prefix.Statusenum formerly nested inResponseProcessProposalreplaced with the package-levelProcessProposalStatus, its values named with thePROCESS_PROPOSAL_STATUS_prefix.Statusenum formerly nested inResponseVerifyVoteExtensionreplaced with the package-levelVerifyVoteExtensionStatus, its values named with theVERIFY_VOTE_EXTENSION_STATUS_prefix.- New definition of
Misbehaviorusing the changedMisbehaviorType. - The gRPC service is renamed
ABCIServiceand defined using the types listed above.
- Names of request and response types used in gRPC changed by making
[proto]In thecometbft.state.v1package, the definition forABCIResponsesInfois changed, renamingresponse_finalize_blockfield tofinalize_block.[abci]Changed the proto-derived enum type and constant aliases to the buf-recommended naming conventions adopted in theabci/v1proto package. For example,ResponseProcessProposal_ACCEPTis renamed toPROCESS_PROPOSAL_STATUS_ACCEPT(#736).[abci]TheTypeenum field is now required to be set to a value other than the defaultCHECK_TX_TYPE_UNKNOWNfor a validCheckTxRequest(#736).[rpc]The endpointsbroadcast_tx_*now return an error when the node is performing block sync or state sync. (#785)[mempool]When the node is performing block sync or state sync, the mempool reactor now discards incoming transactions from peers, and does not propagate transactions to peers. (#785)[consensus]Handshaker.Handshakenow requirescontext.Context(cometbft/cometbft#857)[node]NewNodenow requirescontext.Contextas the first parameter (cometbft/cometbft#857)[mempool]Change the signature ofCheckTxin theMempoolinterface toCheckTx(tx types.Tx) (*abcicli.ReqRes, error). Also, add new methodSetTxRemovedCallback. (#1010)[state]Thestate.Storeinterface has been expanded to accommodate the data pull companion API of ADR 101 (#1096)[proxy]ExpandClientCreatorinterface to allow for per-"connection" control of client creation (#1141)[mempool]RemovemempoolIDsfor internally storing peer ids asp2p.IDinstead ofuint16. (#1146)[cmd]Removereplayandreplay-consolesubcommands and corresponding consensus file replay code, such asconsensus.RunReplayFile, andconsensus.State.ReplayFile(#1170)[state/indexer/block]BlockIndexer now has additional methodPrune,GetRetainHeight,SetRetainHeight(#1176)[state/txindex]TxIndexer now has additional methods:Prune,GetRetainHeight,SetRetainHeight(#1176)[node]Change the signature ofGenesisDocProviderto return the checksum of JSON content alongside the parsed genesis data (#1287).[node]Go-API breaking: Change the signature ofLoadStateFromDBOrGenesisDocProviderto accept an optional operator provided hash of the genesis file (#1324).[version]Bumped the P2P version from 8 to 9, as this release contains new P2P messages. (#1411)[rpc/client]Hard-code the/websocketendpoint path such that it is no longer configurable, removing the related client constructor parameter (#1412)[libs/os]Move tointernal(#1485)[store]Move tointernal(#1485)[libs/autofile]Move tointernal(#1485)[libs/tempfile]Move tointernal(#1485)[libs/clist]Move tointernal(#1485)[libs/net]Move tointernal(#1485)[libs/strings]Move tointernal(#1485)[state]Move tointernal(#1485)[libs/rand]Move tointernal(#1485)[libs/flowrate]Move tointernal(#1485)[libs/async]Move tointernal(#1485)[libs/timer]Move tointernal(#1485)[libs/sync]Move tointernal(#1485)[statesync]Move tointernal(#1485)[libs/bits]Move tointernal(#1485)[libs/progressbar]Move tointernal(#1485)[blocksync]Move tointernal(#1485)[libs/protoio]Move tointernal(#1485)[libs/events]Move tointernal(#1485)[libs/cmap]Move tointernal(#1485)[inspect]Move tointernal(#1485)[libs/service]Move tointernal(#1485)[evidence]Move tointernal(#1485)[libs/pubsub]Move tointernal(#1485)[libs/fail]Move tointernal(#1485)[consensus]Move tointernal(#1485)[abci]Renamed the alias types for gRPC requests, responses, and service instances to follow the naming changes in the proto-derivedapi/cometbft/abci/v1package (#1533):- The prefixed naming pattern
RequestFoo,ReponseFoochanged to suffixedFooRequest,FooResponse. - Each method gets its own unique request and response type to allow for independent evolution with backward compatibility.
ABCIClientrenamed toABCIServiceClient.ABCIServerrenamed toABCIServiceServer.
- The prefixed naming pattern
[store]Make theLoadBlockmethod also return block metadata (#1556)- Made
/apia standalone Go module with its owngo.mod(#1561) [comet]Version variables, inversion/version.go, have been renamed to reflect the CometBFT rebranding. (cometbft/cometbft#1621)[state/store]go-API breaking change inPruneStates: added parameter to pass the number of pruned states and return pruned entries in current pruning iteration. (#1972)[state/store]go-API breaking change inPruneABCIResponses: added parameter to force compaction. (#1972)[proto]Remove stateful block data retrieval methods from the data companion gRPC API as per RFC 106 (#2230):GetLatestfromcometbft.services.block.v1.BlockService;GetLatestBlockResultsfromcometbft.services.block_results.v1.BlockResultsService.
[rpc/grpc]Remove support for stateful block data retrieval methods from the data companion APIs as per RFC 106GetLatestBlockmethod removed from theBlockServiceClientinterface.GetLatestBlockResultsmethod removed from theBlockResultServiceClientinterface.GetLatestendpoint is no longer served byBlockServiceServerinstances.GetLatestBlockResultsendpoint is no longer served byBlockResultServiceServerinstances.
[p2p]RenameIPeerSet#ListtoCopy, addRandom,ForEachmethods. RenamePeerSet#ListtoCopy, addRandom,ForEachmethods. (#2246)[abci]DeprecatesABCIParamsfield ofConsensusParamand introduces replacement inFeatureParamsto enable Vote Extensions. (#2322)[internal/state]Moved functionMedianTimeto packagetypes, and made it a method ofCommitso it can be used by external packages. (#2397)
[consensus] Fix for "Validation of VoteExtensionsEnableHeight can cause chain halt"
(ASA-2024-001)
[mempool]Fix data races inCListMempoolby making atomic the types ofheight,txsBytes, andnotifiedTxsAvailable. (#642)[consensus]Consensus now prevotesnilwhen the proposed value does not match the value the local validator has locked on (#1203)[consensus]Remove logic to unlock block on +2/3 prevote for nil (#1175: @BrendanChou)[state/indexer]Respect both height params while querying for events (#1529)[state/pruning]When no blocks are pruned, do not attempt to prune statestore (#1616)[mempool]The calculation method of tx size returned by calling proxyapp should be consistent with that of mempool (#1687)[evidence]WhenVerifyCommitLight&VerifyCommitLightTrustingare called as part of evidence verification, all signatures present in the evidence must be verified (#1749)[crypto]SupportsBatchVerifierreturns false if public key is nil instead of dereferencing nil. (#1825)[blocksync]wait forpoolRoutineto stop in(*Reactor).OnStop(#1879)[p2p/pex]gracefully shutdown Reactor (#2010)[privval]Retry accepting a connection (#2047)[state]Fix rollback to a specific height (#2136)
- Bump cometbft-db to v0.9.0, providing support for RocksDB v8 (#1725)
-
[rpc/grpc]Add gRPC server to the node, configurable via a new[grpc]section in the configuration file (#816) -
[rpc/grpc]Add gRPC version service to allow clients to establish the software and protocol versions of the node (#816) -
[rpc/grpc]Add gRPC client with support for version service (#816) -
[grpc]AddBlockServicewith client to facilitate fetching of blocks and streaming of the latest committed block height (#1094) -
[config]Add[grpc.block_service]section to configure gRPCBlockService(#1094) -
[grpc]AddBlockResultsServicewith client to fetch BlockResults for a given height, or latest. (#1095) -
[config]Add[grpc.block_results_service]gRPC configurationBlockResultsService(#1095) -
[proto]Add definitions and generated code for ADR-101PruningServicein thecometbft.services.pruning.v1proto package (#1097). -
[rpc/grpc]Add privileged gRPC server and client facilities, inserver/privilegedandclient/privilegedpackages respectively, to enable a separate API server within the node which serves trusted clients without authentication and should never be exposed to public internet (#1097). -
[rpc/grpc]Add a pruning service adding on the privileged gRPC server API to give an ADR-101 data companion control over block data retained by the node. TheWithPruningServiceoption method inserver/privilegedis provided to configure the pruning service (#1097). -
[rpc/grpc]AddPruningServiceClientinterface for the gRPC client inclient/privilegedalong with a configuration option to enable it (#1097). -
[config]Add[grpc.privileged]section to configure the privileged gRPC server for the node, and[grpc.privileged.pruning_service]section to control the pruning service (#1097). -
[metrics]Add metrics to monitor pruning and current available data in stores:PruningServiceBlockRetainHeight,PruningServiceBlockResultsRetainHeight,ApplicationBlockRetainHeight,BlockStoreBaseHeight,ABCIResultsBaseHeight. (#1234)[rpc/grpc]Add gRPC endpoint for pruning the block and transaction indexes (#1327) -
[state]Add TxIndexer and BlockIndexer pruning metrics (#1334) -
[metrics]Add metric for mempool size in bytesSizeBytes. (#1512) -
[mempool]Addnopmempool (#1643)If you want to use it, change mempool's
typetonop:[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"
-
[config]Add configuration parameters to tweak forced compaction. (#1972) -
[store]When pruning force compaction of the database. (#1972) -
[metrics]Added metrics to monitor state store access. (#1974) -
[metrics]Added metrics to monitor block store access. (#1974) -
[test]Added monitoring tools and dashboards for local testing withlocalnet. (#2107) -
Add
pebbledb. To use, build withpebbledbtag (go build -tags pebbledb) (#2132) -
[light/store] Added support for a different DB key representation within the light block store (#2327)
-
[store] Added support for a different DB key representation to state and block store (#2327)
-
[evidence/store] Added support for a different DB key representation within the evidence store (#2327)
-
[e2e]Addblock_max_bytesoption to the manifest file. (#2362) -
[e2e]Add new--testnet-dirparameter to set a custom directory for the generated testnet files. (#2433) -
[docs]Add report on storage improvements and findings. (#2569) -
[consensus]add a newsynchronyfield to theConsensusParameterstruct for controlling the parameters of the proposer-based timestamp algorithm. (@williambanfield) (tendermint/tendermint#7354) -
[consensus]Update the proposal logic per the Propose-based timestamps specification so that the proposer will wait for the previous block time to occur before proposing the next block. (@williambanfield) (tendermint/tendermint#7376) -
[consensus]Update block validation to no longer require the block timestamp to be the median of the timestamps of the previous commit. (@anca) (tendermint/tendermint#7382) -
[consensus]Use the proposed block timestamp as the proposal timestamp. Update the block validation logic to ensure that the proposed block's timestamp matches the timestamp in the proposal message. (@williambanfield) (tendermint/tendermint#7391) -
[consensus]Update proposal validation logic to Prevote nil if a proposal does not meet the conditions for Timeliness per the proposer-based timestamp specification. (@anca) (tendermint/tendermint#7415) -
[consensus]Use the proposer timestamp for the first height instead of the genesis time. Chains will still start consensus at the genesis time. (@anca) (tendermint/tendermint#7711)
[state/indexer]Add transaction and block index pruning (#1176)[mempool]Add a metric (a counter) to measure whether a tx was received more than once. (#634)[docs/references]Added ADR-102: RPC Companion. (#658)[consensus]New metrics (counters) to track duplicate votes and block parts. (#896)[consensus]Optimize vote and block part gossip with new messageHasProposalBlockPartMessage, which is similar toHasVoteMessage; and random sleep in the loop broadcasting those messages. The sleep can be configured with new configpeer_gossip_intraloop_sleep_duration, which is set to 0 by default as this is experimental. Our scale tests show substantial bandwidth improvement with a value of 50 ms. (#904)- Update Apalache type annotations in the light client spec (#955)
[node]Remove genesis persistence in state db, replaced by a hash (cometbft/cometbft#1017, cometbft/cometbft#1295)[consensus]Log vote validation failures at info level (#1022)[config]Added[storage.pruning]and[storage.pruning.data_companion]sections to facilitate background pruning and data companion (ADR 101) operations (#1096)[state]ABCI response pruning has been added for use by the data companion (#1096)[state]Block pruning has been moved from the block executor into a background process (#1096)[node]Thenode.Nodestruct now manages astate.Prunerservice to facilitate background pruning (#1096)[abci/client]Add fully unsynchronized local client creator, which imposes no mutexes on the application, leaving all handling of concurrency up to the application (#1141)[abci/client]Add consensus-synchronized local client creator, which only imposes a mutex on the consensus "connection", leaving the concurrency of all other "connections" up to the application (#1141)[consensus]When prevoting, avoid calling PropocessProposal when we know the proposal was already validated by correct nodes. (#1230)[node]On upgrade, after #1296, delete the genesis file existing in the DB. (cometbft/cometbft#1297[cli/node]The genesis hash provided with the--genesis-hashis now forwarded to the node, instead of reading the file. (#1324).[rpc]The RPC API is now versioned, with all existing endpoints accessible via/v1/*as well as/*(#1412)[consensus]Reduce the default MaxBytes to 4MB and increase MaxGas to 10 million (#1518)[mempool]Add experimental feature to limit the number of persistent peers and non-persistent peers to which the node gossip transactions. (#1558) (#1584)[config]Add mempool parametersexperimental_max_gossip_connections_to_persistent_peersandexperimental_max_gossip_connections_to_non_persistent_peersfor limiting the number of peers to which the node gossip transactions. (#1558) (#1584)[e2e]Allow latency emulation between nodes. (#1559)[e2e]Allow latency emulation between nodes. (#1560)[e2e]Allow disabling the PEX reactor on all nodes in the testnet (#1579)[rpc]ExportMakeHTTPDialerto allow HTTP client constructors more flexibility. (#1594)[types]ValidateValidator#AddressinValidateBasic(#1715)[abci]Increase ABCI socket message size limit to 2GB (#1730: @troykessler)[state]Save the state using a single DB batch (#1735)[store]Save block using a single DB batch if block is less than 640kB, otherwise each block part is saved individually (#1755)[rpc]Support setting proxy from env toDefaultHttpClient. (#1900)[p2p]Export p2p package errors (#1901) (contributes to #1140)[rpc]Use default port for HTTP(S) URLs when there is no explicit port (#1903)[light]Export light package errors (#1904) (contributes to #1140)[crypto/merkle]faster calculation of hashes (#1921)- Removed undesired linting from
Makefileand added dependency check forcodespell. [blocksync]Avoid double-callingtypes.BlockFromProtofor performance reasons (#2016)[state]avoid double-savingFinalizeBlockResponsefor performance reasons (#2017)[e2e]Add manifest optionVoteExtensionsUpdateHeightto test vote extension activation viaInitChainandFinalizeBlock. Also, extend the manifest generator to produce different values of this new option (#2065)[consensus]Addchain_size_bytesmetric for measuring the size of the blockchain in bytes (#2093)[e2e]Add manifest optionload_max_txsto limit the number of transactions generated by theloadcommand. (#2094)- Optimized the PSQL indexer (#2142) thanks to external contributor @k0marov !
[e2e]Add new targetsfastandcleanto Makefile. (#2192)[rpc]Export RPC package errors (#2200) (contributes to #1140)[p2p]makePeerSet.Removemore efficient (Author: @odeke-em) #2246[jsonrpc]enable HTTP basic auth in websocket client (#2434)[e2e]Introduce the possibility in the manifest for some nodes to run in a preconfigured clock skew. (#2453)[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 gettingNoBlockResponsefrom peer A #2475[blocksync]Sort peers by download rate (the fastest peer is picked first) #2475[privval]DO NOT require extension signature from privval if vote extensions are disabled. Remote signers can skip signing the extension ifskip_extension_signingflag inSignVoteRequestis true. #2496[proto]Addskip_extension_signingfield to theSignVoteRequestmessage incometbft.privval.v1(#2522). Thecometbft.privval.v1beta2package is added to capture the protocol as it was released in CometBFT 0.38.x (#2529).
- Bump minimum Go version to v1.21 (#1244)
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.
[mempool]Avoid infinite wait in transaction sending routine when using experimental parameters to limiting transaction gossiping to peers (#1654)
-
[mempool]Addnopmempool (#1643)If you want to use it, change mempool's
typetonop:[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.
[state/indexer]Respect both height params while querying for events (#1529)
[metrics]Add metric for mempool size in bytesSizeBytes. (#1512)
[mempool]Add experimental feature to limit the number of persistent peers and non-persistent peers to which the node gossip transactions. (#1558) (#1584)[config]Add mempool parametersexperimental_max_gossip_connections_to_persistent_peersandexperimental_max_gossip_connections_to_non_persistent_peersfor limiting the number of peers to which the node gossip transactions. (#1558) (#1584)
September 12, 2023
This release includes the second part of ABCI++, called ABCI 2.0.
ABCI 2.0 introduces ABCI methods ExtendVote and VerifyVoteExtension.
These new methods allow the application to add data (opaque to CometBFT),
called vote extensions to precommit votes sent by validators.
These vote extensions are made available to the proposer(s) of the next height.
Additionally, ABCI 2.0 coalesces BeginBlock, DeliverTx, and EndBlock
into one method, FinalizeBlock, whose Request* and Response*
data structures contain the sum of all data previously contained
in the respective Request* and Response* data structures in
BeginBlock, DeliverTx, and EndBlock.
See the specification for more details on ABCI 2.0.
[mempool]Remove priority mempool. (#260)[config]RemoveVersionfield fromMempoolConfig. (#260)[protobuf]Remove fieldssender,priority, andmempool_errorfromResponseCheckTx. (#260)[crypto/merkle]Do not allow verification of Merkle Proofs against empty trees (nilroot).Proof.ComputeRootHashnow panics when it encounters an error, butProof.Verifydoes not panic (#558)[state/kvindexer]Remove the function type from the event key stored in the database. This should be breaking only for people who forked CometBFT and interact directly with the indexers kvstore. (#774)[rpc]Removedbegin_block_eventsandend_block_eventsfromBlockResultsResponse. The events are merged into one field calledfinalize_block_events. (#9427)[pubsub]Added support for big integers and big floats in the pubsub event query system. Breaking changes: functionNumberin packagelibs/pubsub/query/syntaxchanged its return value. (#797)[kvindexer]Added support for big integers and big floats in the kvindexer. Breaking changes: functionNumberin packagelibs/pubsub/query/syntaxchanged its return value. (#797)[mempool]Application can now setConsensusParams.Block.MaxBytesto -1 to have visibility on all transactions in the mempool atPrepareProposaltime. This means that the total size of transactions sent viaRequestPrepareProposalmight exceedRequestPrepareProposal.max_tx_bytes. If that is the case, the application MUST make sure that the total size of transactions returned inResponsePrepareProposal.txsdoes not exceedRequestPrepareProposal.max_tx_bytes, otherwise CometBFT will panic. (#980)[node/state]Add Go API to bootstrap block store and state store to a height. Make sure block sync starts syncing from bootstrapped height. (#1057) (@yihuang)[state/store]Added Go functions to save height at which offline state sync is performed. (#1057) (@jmalicevic)[p2p]Remove UPnP functionality (#1113)[node]RemovedConsensusState()accessor fromNodestruct - all access to consensus state should go via the reactor (#1120)[state]Signature ofExtendVotechanged inBlockExecutor. It now includes the block whose precommit will be extended, an the state object. (#1270)[state]Move pruneBlocks from node/state to state/execution. (#6541)[abci]Moveapp_hashparameter fromCommittoFinalizeBlock(#8664)[abci]IntroduceFinalizeBlockwhich condensesBeginBlock,DeliverTxandEndBlockinto a single method call (#9468)[p2p]Remove unused p2p/trust package (#9625)[rpc]Remove global environment and replace with constructor (#9655)[node]Move DBContext and DBProvider from the node package to the config package. (#9655)[inspect]Add a newinspectcommand for introspecting the state and block store of a crashed tendermint node. (#9655)[metrics]Move state-syncing and block-syncing metrics to their respective packages. Move labels from block_syncing -> blocksync_syncing and state_syncing -> statesync_syncing (#9682)
[kvindexer]Forward porting the fixes done to the kvindexer in 0.37 in PR #77 (#423)[consensus]Unexpected error conditions inApplyBlockare non-recoverable, so ignoring the error and carrying on is a bug. We replaced areturnthat disregarded the error by apanic. (#496)[consensus]Rename(*PeerState).ToJSONtoMarshalJSONto 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)[abci]Restore the snake_case naming in JSON serialization ofExecTxResult(#855).[consensus]Avoid recursive call after rename to (*PeerState).MarshalJSON (#863)[mempool/clist_mempool]Prevent a transaction to appear twice in the mempool (#890: @otrack)[docker]Ensure Docker image uses consistent version of Go. (#9462)[abci-cli]Fix broken abci-cli help command. (#9717)
[rpc/grpc]Mark the gRPC broadcast API as deprecated. It will be superseded by a broader API as part of #81 (#650)
[node/state]Add Go API to bootstrap block store and state store to a height (#1057) (@yihuang)[proxy]IntroduceNewConnSyncLocalClientCreator, which allows local ABCI clients to have the same concurrency model as remote clients (i.e. one mutex per client "connection", for each of the four ABCI "connections"). (tendermint/tendermint#9830 and #1145)[proxy]IntroduceNewUnsyncLocalClientCreator, which allows local ABCI clients to have the same concurrency model as remote clients (i.e. one mutex per client "connection", for each of the four ABCI "connections"). (#9830)[abci]New ABCI methodsVerifyVoteExtensionandExtendVoteallow validators to validate the vote extension data attached to a pre-commit message and allow applications to let their validators do more than just validate within consensus (#9836)
[blocksync]Generate new metrics during BlockSync (#543)[jsonrpc/client]Improve the error message for client errors stemming from bad HTTP responses. (cometbft/cometbft#638)[rpc]Remove response data from response failure logs in order to prevent large quantities of log data from being produced (#654)[pubsub/kvindexer]Numeric query conditions and event values are represented as big floats with default precision of 125. Integers are read as "big ints" and represented with as many bits as they need when converting to floats. (#797)[node]Make handshake cancelable (cometbft/cometbft#857)[mempool]Application can now setConsensusParams.Block.MaxBytesto -1 to gain more control on the max size of transactions in a block. It also allows the application to have visibility on all transactions in the mempool atPrepareProposaltime. (#980)[node]Close evidence.db OnStop (cometbft/cometbft#1210: @chillyvee)[state]Make loggingblock_app_hashandapp_hashconsistent by logging them both as hex. (#1264)[crypto/merkle]Improve HashAlternatives performance (#6443)[p2p/pex]Improve addrBook.hash performance (#6509)[crypto/merkle]Improve HashAlternatives performance (#6513)[pubsub]Performance improvements for the event query API (#7319)
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]Addnopmempool (#1643)If you want to use it, change mempool's
typetonop:[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 go-schnorrkel@v1.0.0 (#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_peersandexperimental_max_gossip_connections_to_non_persistent_peersfor 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 killcommand (#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 (nilroot).Proof.ComputeRootHashnow panics when it encounters an error, butProof.Verifydoes not panic (#558)
[consensus]Unexpected error conditions inApplyBlockare non-recoverable, so ignoring the error and carrying on is a bug. We replaced areturnthat disregarded the error by apanic. (#496)[consensus]Rename(*PeerState).ToJSONtoMarshalJSONto 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
TMHOMEenvironment variable was renamed toCMTHOME, and all environment variables starting withTM_are instead prefixed withCMT_(#211) [p2p]ReactorSend,TrySendandReceiverenamed toSendEnvelope,TrySendEnvelopeandReceiveEnvelopeto allow metrics to be appended to messages and measure bytes sent/received. (#230)- Bump minimum Go version to 1.20 (#385)
[abci]Make length delimiter encoding consistent (uint64) between ABCI and P2P wire-level protocols (#5783)[abci]Change thekeyandvaluefields from[]bytetostringin theEventAttributetype. (#6403)[abci/counter]Delete counter example app (#6684)[abci]RenamedEvidenceTypetoMisbehaviorTypeandEvidencetoMisbehavioras a more accurate label of their contents. (#8216)[abci]Added cli commands forPrepareProposalandProcessProposal. (#8656)[abci]Added cli commands forPrepareProposalandProcessProposal. (#8901)[abci]RenamedLastCommitInfotoCommitInfoin preparation for vote extensions. (#9122)- Change spelling from British English to American. Rename
Subscription.Cancelled()toSubscription.Canceled()inlibs/pubsub(#9144) [abci]Removes unused Response/RequestSetOptionfrom 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,VersionParamshave become native types. They still utilize protobuf when being sent over the wire or written to disk. MovedValidateConsensusParamsinside (now native type)ConsensusParams, and renamed it toValidateBasic. (#9287)[abci/params]DeduplicateConsensusParamsandBlockParamsso onlytypesproto definitions are use. RemoveTimeIotaMsand use a hard-coded 1 millisecond value to ensure monotonically increasing block times. RenameAppVersiontoAppso as to not stutter. (#9287)[abci]New ABCI methodsPrepareProposalandProcessProposalwhich 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 whenneedProofBlockcannot 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 ofenterProposewhen handlingRoundStepNewRoundtimeout. (#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 methodsPrepareProposalandProcessProposalwhich 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,TrySendandReceiverenamed toSendEnvelope,TrySendEnvelopeandReceiveEnvelopeto allow metrics to be appended to messages and measure bytes sent/received. (#230)[abci]AddedAbciVersiontoRequestInfoallowing applications to check ABCI version when connecting to CometBFT. (#5706)[cli]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. (#9171)[crypto]Update to use btcec v2 and the latest btcutil. (#9250)[rpc]Addedheaderandheader_by_hashqueries to the RPC client (#9276)[proto]Migrate fromgogo/protobuftocosmos/gogoproto(#9356)[rpc]Enable caching of RPC responses (#9650)[consensus]Save peer LastCommit correctly to achieve 50% reduction in gossiped precommits. (#9760)
November 27, 2023
Fixes a small bug in the mempool for an experimental feature.
[mempool]Avoid infinite wait in transaction sending routine when using experimental parameters to limiting transaction gossiping to peers (#1654)
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.
- Bump Go version used to v1.20 since v1.19 has reached EOL (#1351)
[metrics]Add metric for mempool size in bytesSizeBytes. (#1512)
[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_peersandexperimental_max_gossip_connections_to_non_persistent_peersfor 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. (#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 (#788)[cmd/cometbft/commands/debug/kill]Low severity - Fix unsafe int cast indebug killcommand (#794)[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 (nilroot).Proof.ComputeRootHashnow panics when it encounters an error, butProof.Verifydoes not panic (#558)
[consensus]Unexpected error conditions inApplyBlockare non-recoverable, so ignoring the error and carrying on is a bug. We replaced areturnthat disregarded the error by apanic. (#496)[consensus]Rename(*PeerState).ToJSONtoMarshalJSONto 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)
[crypto/sr25519]Upgrade to go-schnorrkel@v1.0.0 (#475)[jsonrpc/client]Improve the error message for client errors stemming from bad HTTP responses. (cometbft/cometbft#638)
Feb 27, 2023
This is the first official release of CometBFT - a fork of Tendermint Core. This particular release is intended to be compatible with the Tendermint Core v0.34 release series.
For details as to how to upgrade to CometBFT from Tendermint Core, please see our upgrading guidelines.
If you have any questions, comments, concerns or feedback on this release, we
would love to hear from you! Please contact us via GitHub
Discussions,
Discord (in the #cometbft channel) or
Telegram.
Special thanks to @wcsiu, @ze97286, @faddat and @JayT106 for their contributions to this release!
- Rename binary to
cometbftand Docker image tocometbft/cometbft(#152) - The
TMHOMEenvironment variable was renamed toCMTHOME, and all environment variables starting withTM_are instead prefixed withCMT_(#211) - Use Go 1.19 to build CometBFT, since Go 1.18 has reached end-of-life. (#360)
[consensus]Fixed a busy loop that happened when sending of a block part failed by sleeping in case of error. (#4)[state/kvindexer]Resolved crashes when event values contained slashes, introduced after adding event sequences. (#383: @jmalicevic)[consensus]Short-term fix for the case whenneedProofBlockcannot find previous block meta by defaulting to the creation of a new proof block. (#386: @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.
[p2p]Correctly use non-blockingTrySendEnvelopemethod when attempting to send messages, as opposed to the blockingSendEnvelopemethod. It is unclear whether this has a meaningful impact on P2P performance, but this patch does correct the underlying behaviour to what it should be (tendermint/tendermint#9936)
- Replace tm-db with cometbft-db (#160)
- Bump tm-load-test to v1.3.0 to remove implicit dependency on Tendermint Core (#165)
[crypto]Update to use btcec v2 and the latest btcutil (tendermint/tendermint#9787: @wcsiu)
[rpc]Addmatch_eventquery parameter to indicate to the RPC that it should match events within attributes, not only within a height (tendermint/tendermint#9759)
[e2e]Add functionality for uncoordinated (minor) upgrades (#56)[tools/tm-signer-harness]Remove the folder as it is unused (#136)- Append the commit hash to the version of CometBFT being built (#204)
[mempool/v1]Suppress "rejected bad transaction" in priority mempool logs by reducing log level from info to debug (#314: @JayT106)[consensus]Addconsensus_block_gossip_parts_receivedandconsensus_step_duration_secondsmetrics in order to aid in investigating the impact of database compaction on consensus performance (tendermint/tendermint#9733)[state/kvindexer]Addmatch.eventkeyword to support condition evaluation based on the event the attributes belong to (tendermint/tendermint#9759)[p2p]Reduce log spam through reducing log level of "Dialing peer" and "Added peer" messages from info to debug (tendermint/tendermint#9764: @faddat)[consensus]Reduce bandwidth consumption of consensus votes by roughly 50% through fixing a small logic bug (tendermint/tendermint#9776)
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.