> ## Documentation Index
> Fetch the complete documentation index at: https://cosmos-docs-sync-security-docs.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Changelog

> Release history and changelog for Cosmos CometBFT

<Update label="Release" description="v0.38.18" tags={["CometBFT", "Release"]}>
  ## IMPROVEMENTS

  * Adds metrics that emit precommit data; precommit quorum delay from proposal, and precommit vote count and stake weight within timeout commit period.
</Update>

<Update label="Release" description="v0.38.17" tags={["CometBFT", "Release"]}>
  ## BUG FIXES

  * (blocksync) Ban peer if it reports height lower than what was previously reported
  * (types) Check that `Part.Index` equals `Part.Proof.Index`

  ## DEPENDENCIES

  * (go/runtime) Bump minimum Go version to 1.22.11
</Update>

<Update label="Release" description="v0.38.16" tags={["CometBFT", "Release"]}>
  ## CHANGES

  * fixes a bug that caused a node produce errors caused by the sending of next PEX requests too soon.
  * Adds a proper description of `ExtendedVoteInfo` and `VoteInfo` in the spec.

  ## BUG FIXES

  * (mocks) Mockery `v2.49.0` broke the mocks. We had to add a `.mockery.yaml` to
</Update>

<Update label="Release" description="v0.38.14" tags={["CometBFT", "Release"]}>
  ## BUG FIXES

  * (consensus) Do not panic if the validator index of a `Vote` message is out

  ## DEPENDENCIES

  * Bump cometbft-db version to v0.15.0
  * (go/runtime) Bump Go version to 1.23

  ## IMPROVEMENTS

  * (p2p) fix exponential backoff logic to increase reconnect retries close to 24 hours
</Update>

<Update label="Release" description="v0.38.13" tags={["CometBFT", "Release"]}>
  ## BUG FIXES

  * (metrics) Call unused `rejected_txs` metric in mempool
  * (state/indexer) Fix the tx\_search results not returning all results by changing the logic in the indexer to copy the key and values instead of reusing an iterator. This issue only arises when upgrading to cometbft-db v0.13 or later.

  ## DEPENDENCIES

  * (go/runtime) Bump Go version to 1.22
  * Bump cometbft-db version to v0.14.1

  ## FEATURES

  * [#4294](https://github.com/cometbft/cometbft/pull/4294) (crypto) use decred secp256k1 directly ()

  ## IMPROVEMENTS

  * (metrics) Add `evicted_txs` metric to mempool
  * (log) Change "mempool is full" log to debug level
</Update>

<Update label="Release" description="v0.38.12" tags={["CometBFT", "Release"]}>
  ## BUG FIXES

  * (light) Cross-check proposer priorities in retrieved validator sets
  * (privval) Ignore duplicate privval listen when already connected ([#3828](https://github.com/cometbft/cometbft/issues/3828)

  ## DEPENDENCIES

  * (crypto/secp256k1) Adjust to breaking interface changes in
  * pinned mockery's version to v2.49.2 to prevent potential

  ## IMPROVEMENTS

  * (types) Check that proposer is one of the validators in `ValidateBasic`
  * (e2e) Add `log_level` option to manifest file
  * (e2e) Add `log_format` option to manifest file
</Update>

<Update label="Release" description="v0.38.11" tags={["CometBFT", "Release"]}>
  ## BUG FIXES

  * (types) Only check IFF vote is a non-nil Precommit if extensionsEnabled

  ## IMPROVEMENTS

  * (indexer) Fixed ineffective select break statements; they now
</Update>

<Update label="Release" description="v0.38.10" tags={["CometBFT", "Release"]}>
  ## BUG FIXES

  * (p2p) Node respects configured `max_num_outbound_peers` limit when dialing
  * (rpc) Fix an issue where a legacy ABCI response, created on `v0.37` or before, is not returned properly in `v0.38` and up
  * (blocksync) Do not stay in blocksync if the node's validator voting power

  ## IMPROVEMENTS

  * (p2p/conn) Update send monitor, used for sending rate limiting, once per batch of packets sent
  * (libs/pubsub) Allow dash (`-`) in event tags
  * (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.
</Update>

<Update label="Release" description="v0.38.9" tags={["CometBFT", "Release"]}>
  ## BREAKING CHANGES

  * (mempool) Revert adding the method `PreUpdate()` to the `Mempool` interface, recently introduced

  ## BUG FIXES

  * (rpc) Fix nil pointer error in `/tx` and `/tx_search` when block is
</Update>

<Update label="Release" description="v0.38.8" tags={["CometBFT", "Release"]}>
  ## BREAKING CHANGES

  * (mempool) Add to the `Mempool` interface a new method `PreUpdate()`. This method should be

  ## BUG FIXES

  * (blockstore) Added peer banning in blockstore
  * (blockstore) Send correct error message when vote extensions do not align with received packet
  * \[`mempool`] Fix data race when rechecking with async ABCI client
  * (consensus) Fix a race condition in the consensus timeout ticker. Race is caused by two timeouts being scheduled at the same time.
  * (types) Do not batch verify a commit if the validator set keys have different

  ## IMPROVEMENTS

  * (config) Added `recheck_timeout` mempool parameter to set how much time to wait for recheck
  * (rpc) Add a configurable maximum batch size for RPC requests.
  * (event-bus) Remove the debug logs in PublishEventTx, which were noticed production slowdowns.
  * (state/execution) Cache the block hash computation inside of the Block Type, so we only compute it once.
  * (consensus/state) Remove a redundant `VerifyBlock` call in `FinalizeCommit`
  * (p2p/channel) Speedup `ProtoIO` writer creation time, and thereby speedup channel writing by 5%.
  * (p2p/conn) Minor speedup (3%) to connection.WritePacketMsgTo, by removing MinInt calls.
  * (internal/bits) 10x speedup creating initialized bitArrays, which speedsup extendedCommit.BitArray(). This is used in consensus vote gossip.
  * (blockstore) Remove a redundant `Header.ValidateBasic` call in `LoadBlockMeta`, 75% reducing this time.
  * (p2p/conn) Speedup connection.WritePacketMsgTo, by reusing internal buffers rather than re-allocating.
  * \[`blockstore`] Use LRU caches in blockstore, significiantly improving consensus gossip routine performance
  * \[`consensus`] Improve performance of consensus metrics by lowering string operations
  * \[`protoio`] Remove one allocation and new object call from `ReadMsg`,
  * (mempool) Before updating the mempool, consider it as full if rechecking is still in progress.
</Update>

<Update label="Release" description="v0.38.7" tags={["CometBFT", "Release"]}>
  ## BUG FIXES

  * \[`mempool`] Panic when a CheckTx request to the app returns an error
  * \[`bits`] prevent `BitArray.UnmarshalJSON` from crashing on 0 bits

  ## FEATURES

  * \[`node`] Add `BootstrapStateWithGenProvider` to boostrap state using a custom

  ## IMPROVEMENTS

  * (state/indexer) Lower the heap allocation of transaction searches
  * (internal/bits) 10x speedup and remove heap overhead of bitArray.PickRandom (used extensively in consensus gossip)
  * (libs/json) Lower the memory overhead of JSON encoding by using JSON encoders internally
</Update>

<Update label="Release" description="v0.38.6" tags={["CometBFT", "Release"]}>
  ## BUG FIXES

  * (privval) Retry accepting a connection ([#2047](https://github.com/cometbft/cometbft/pull/2047))
  * (state) Fix rollback to a specific height

  ## FEATURES

  * (e2e) Add `block_max_bytes` option to the manifest file.

  ## IMPROVEMENTS

  * (blocksync) Avoid double-calling `types.BlockFromProto` for performance
  * (e2e) Add manifest option `load_max_txs` to limit the number of transactions generated by the
  * [#2434](https://github.com/cometbft/cometbft/pull/2434) (jsonrpc) enable HTTP basic auth in websocket client ()
  * (blocksync) make the max number of downloaded blocks dynamic.
  * (blocksync) Request a block from peer B if we are approaching pool's height
  * (blocksync) Request the block N from peer B immediately after getting
  * (blocksync) Sort peers by download rate (the fastest peer is picked first)
</Update>

<Update label="Release" description="v0.38.5" tags={["CometBFT", "Release"]}>
  ## IMPROVEMENTS

  * (consensus) Add `chain_size_bytes` metric for measuring the size of the blockchain in bytes
</Update>

<Update label="Release" description="v0.38.4" tags={["CometBFT", "Release"]}>
  ## IMPROVEMENTS

  * (e2e) Add manifest option `VoteExtensionsUpdateHeight` to test
</Update>

<Update label="Release" description="v0.38.3" tags={["CometBFT", "Release"]}>
  ## BUG FIXES

  * (consensus) Fix for "Validation of `VoteExtensionsEnableHeight` can cause chain halt"
  * (mempool) Fix data races in `CListMempool` by making atomic the types of `height`, `txsBytes`, and
  * (mempool) The calculation method of tx size returned by calling proxyapp should be consistent with that of mempool
  * (evidence) When `VerifyCommitLight` & `VerifyCommitLightTrusting` are called as part
  * (crypto) `SupportsBatchVerifier` returns false
  * (blocksync) wait for `poolRoutine` to stop in `(*Reactor).OnStop`

  ## IMPROVEMENTS

  * (types) Validate `Validator#Address` in `ValidateBasic` ([#1715](https://github.com/cometbft/cometbft/pull/1715))
  * (abci) Increase ABCI socket message size limit to 2GB ([#1730](https://github.com/cometbft/cometbft/pull/1730): @troykessler)
  * (state) Save the state using a single DB batch ([#1735](https://github.com/cometbft/cometbft/pull/1735))
  * (store) Save block using a single DB batch if block is less than 640kB, otherwise each block part is saved individually
  * (rpc) Support setting proxy from env to `DefaultHttpClient`.
  * (rpc) Use default port for HTTP(S) URLs when there is no explicit port ([#1903](https://github.com/cometbft/cometbft/pull/1903))
  * [#1921](https://github.com/cometbft/cometbft/pull/1921) (crypto/merkle) faster calculation of hashes ()
</Update>

<Update label="Release" description="v0.38.2" tags={["CometBFT", "Release"]}>
  ## BUG FIXES

  * (mempool) Avoid infinite wait in transaction sending routine when

  ## FEATURES

  * (mempool) Add `nop` mempool ([#1643](https://github.com/cometbft/cometbft/pull/1643))
</Update>

<Update label="Release" description="v0.38.1" tags={["CometBFT", "Release"]}>
  ## BUG FIXES

  * (state/indexer) Respect both height params while querying for events

  ## FEATURES

  * (metrics) Add metric for mempool size in bytes `SizeBytes`.

  ## IMPROVEMENTS

  * (mempool) Add experimental feature to limit the number of persistent peers and non-persistent
  * (config) Add mempool parameters `experimental_max_gossip_connections_to_persistent_peers` and
</Update>

<Update label="Release" description="v0.38.0" tags={["CometBFT", "Release"]}>
  ## BREAKING CHANGES

  * (mempool) Remove priority mempool.
  * (config) Remove `Version` field from `MempoolConfig`.
  * (protobuf) Remove fields `sender`, `priority`, and `mempool_error` from
  * (crypto/merkle) Do not allow verification of Merkle Proofs against empty trees (`nil` root). `Proof.ComputeRootHash` now panics when it encounters an error, but `Proof.Verify` does not panic
  * (state/kvindexer) Remove the function type from the event key stored in the database. This should be breaking only
  * (rpc) Removed `begin_block_events` and `end_block_events` from `BlockResultsResponse`.
  * (pubsub) Added support for big integers and big floats in the pubsub event query system.
  * (kvindexer) Added support for big integers and big floats in the kvindexer.
  * (mempool) Application can now set `ConsensusParams.Block.MaxBytes` to -1
  * (node/state) Add Go API to bootstrap block store and state store to a height. Make sure block sync starts syncing from bootstrapped height.
  * (state/store) Added Go functions to save height at which offline state sync is performed.
  * (p2p) Remove UPnP functionality
  * (node) Removed `ConsensusState()` accessor from `Node`
  * (state) Signature of `ExtendVote` changed in `BlockExecutor`.
  * (state) Move pruneBlocks from node/state to state/execution.
  * (abci) Move `app_hash` parameter from `Commit` to `FinalizeBlock`
  * (abci) Introduce `FinalizeBlock` which condenses `BeginBlock`, `DeliverTx`
  * (p2p) Remove unused p2p/trust package
  * (rpc) Remove global environment and replace with constructor
  * (node) Move DBContext and DBProvider from the node package to the config
  * (inspect) Add a new `inspect` command for introspecting
  * (metrics) Move state-syncing and block-syncing metrics to

  ## BUG FIXES

  * (kvindexer) Forward porting the fixes done to the kvindexer in 0.37 in PR #77
  * (consensus) Unexpected error conditions in `ApplyBlock` are non-recoverable, so ignoring the error and carrying on is a bug. We replaced a `return` that disregarded the error by a `panic`.
  * (consensus) Rename `(*PeerState).ToJSON` to `MarshalJSON` to fix a logging data race
  * (light) Fixed an edge case where a light client would panic when attempting
  * and\* keep the node in its list of providers in the same way it would if
  * (abci) Restore the snake\_case naming in JSON serialization of
  * (consensus) Avoid recursive call after rename to (\*PeerState).MarshalJSON
  * (mempool/clist\_mempool) Prevent a transaction to appear twice in the mempool
  * (docker) Ensure Docker image uses consistent version of Go.
  * (abci-cli) Fix broken abci-cli help command.

  ## DEPRECATIONS

  * (rpc/grpc) Mark the gRPC broadcast API as deprecated.

  ## FEATURES

  * (node/state) Add Go API to bootstrap block store and state store to a height
  * (proxy) Introduce `NewConnSyncLocalClientCreator`, which allows local ABCI
  * (proxy) Introduce `NewUnsyncLocalClientCreator`, which allows local ABCI
  * (abci) New ABCI methods `VerifyVoteExtension` and `ExtendVote` allow 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](https://github.com/tendermint/tendermint/pull/9836))

  ## IMPROVEMENTS

  * (blocksync) Generate new metrics during BlockSync
  * (jsonrpc/client) Improve the error message for client errors stemming from
  * (rpc) Remove response data from response failure logs in order
  * (pubsub/kvindexer) Numeric query conditions and event values are represented as big floats with default precision of 125.
  * (node) Make handshake cancelable ([cometbft/cometbft#857](https://github.com/cometbft/cometbft/pull/857))
  * (consensus) New metrics (counters) to track duplicate votes and block parts.
  * (mempool) Application can now set `ConsensusParams.Block.MaxBytes` to -1
  * (node) Close evidence.db OnStop ([cometbft/cometbft#1210](https://github.com/cometbft/cometbft/pull/1210): @chillyvee)
  * (state) Make logging `block_app_hash` and `app_hash` consistent by logging them both as hex.
  * (crypto/merkle) Improve HashAlternatives performance
  * (p2p/pex) Improve addrBook.hash performance
  * (crypto/merkle) Improve HashAlternatives performance
  * (pubsub) Performance improvements for the event query API
</Update>
