This guide provides instructions for upgrading to specific versions of CometBFT.
- The field
Version
in the mempool section has been removed. The priority mempool (what was called versionv1
) has been removed (see below), thus there is only one implementation of the mempool available (what was calledv0
). - Config fields
TTLDuration
andTTLNumBlocks
, which were only used by the priority mempool, have been removed.
- Removed the
consensus.State.ReplayFile
andconsensus.RunReplayFile
methods, as these were exclusively used by thereplay
andreplay-console
subcommands, which were also removed (#1170)
- The priority mempool (what was referred in the code as version
v1
) has been removed. There is now only one mempool (what was called versionv0
), that is, the default implementation as a queue of transactions. - In the protobuf message
ResponseCheckTx
, fieldssender
,priority
, andmempool_error
, which were only used by the priority mempool, were removed but still kept in the message as "reserved". - The
Mempool
interface was modified on the following methods. Note that this interface is meant for internal use only, so you should be aware of these changes only if you happen to call these methods directly.CheckTx
's signature changed fromCheckTx(tx types.Tx, cb func(*abci.ResponseCheckTx), txInfo TxInfo) error
toCheckTx(tx types.Tx) (abcicli.ReqRes, error)
.- The method used to take a callback function
cb
to be applied to the ABCICheckTx
response. NowCheckTx
returns the ABCI response of typeabcicli.ReqRes
, on which the callback must be applied manually. For example:reqRes, err := CheckTx(tx) cb(reqRes.Response.GetCheckTx())
- The second parameter was
txInfo
, which essentially contained information about the sender of the transaction. Now that information is stored in the mempool reactor instead of the data structure, so it is no longer needed in this method.
- The method used to take a callback function
- Removed the
replay
andreplay-console
subcommands (#1170)
- When returning a block, all block events are displayed within the
finalize_block_events
field. For blocks generated with older versions of CometBFT, that means that block results that appeared asbegin_block_events
andend_block_events
are merged intofinalize_block_events
. For users who rely on the events to be grouped by the function they were generated by, this change is breaking.
The changes described here are internal to the implementation of the kvindexer, and they are transparent to the user. However, if you own a fork with a modified version of the indexer, you should be aware of these changes.
- Indexer key for block events will not contain information about the function that returned the event.
The events were indexed by their attributes, event type, the function that returned them, the height and
event sequence. The functions returning events in old (pre
v0.38.0
) versions of CometBFT wereBeginBlock
orEndBlock
. As events are returned now only viaFinalizeBlock
, the value of this field has no use, and has been removed. The main motivation is the reduction of the storage footprint.
Events indexed with previous CometBFT or Tendermint Core versions, will still be transparently processed. There is no need to re-index the events. This function field is not exposed to queries, and was not visible to users. However, if you forked CometBFT and changed the indexer code directly to accomodate for this, this will impact your code.
This release introduces state machine-breaking changes, and therefore requires a coordinated upgrade.
When upgrading from the v0.34 release series, please note that the Go module has
now changed to github.com/cometbft/cometbft
.
- The
ABCIVersion
is now2.0.0
. - Added new ABCI methods
ExtendVote
, andVerifyVoteExtension
. Applications upgrading to v0.38.0 must implement these methods as described here - Removed methods
BeginBlock
,DeliverTx
,EndBlock
, and replaced them by methodFinalizeBlock
. Applications upgrading to v0.38.0 must refactor the logic handling the methods removed to handleFinalizeBlock
. - The Application's hash (or any data representing the Application's current state)
is known by the time
FinalizeBlock
finishes its execution. Accordingly, theapp_hash
parameter has been moved fromResponseCommit
toResponseFinalizeBlock
. - For details, please see the updated specification
If you rely on the /tx_search
or /block_search
endpoints for event querying,
please note that the default behaviour of these endpoints has changed in a way
that might break your queries. The original behaviour was poorly specified,
which did not respect event boundaries.
Please see tendermint/tendermint#9712 for context on the bug that was addressed that resulted in this behaviour change.
This is the first official release of CometBFT, forked originally from Tendermint Core v0.34.24 and subsequently updated in Informal Systems' public fork of Tendermint Core for v0.34.25 and v0.34.26.
If you already make use of Tendermint Core (either the original Tendermint Core
v0.34.24, or Informal Systems' public fork), you can upgrade to CometBFT
v0.34.27 by replacing your dependency in your go.mod
file:
go mod edit -replace github.com/tendermint/tendermint=github.com/cometbft/[email protected]
We make use of the original module URL in order to minimize the impact of
switching to CometBFT. This is only possible in our v0.34 release series, and we
will be switching our module URL to github.com/cometbft/cometbft
in the next
major release.
CometBFT, by default, will consider its home directory in ~/.cometbft
from now
on instead of ~/.tendermint
.
The environment variable prefixes have now changed from TM
to CMT
. For
example, TMHOME
becomes CMTHOME
.
We have implemented a fallback check in case TMHOME
is still set and CMTHOME
is not, but you will start to see a warning message in the logs if the old
TMHOME
variable is set. This fallback check will be removed entirely in a
subsequent major release of CometBFT.
CometBFT must be compiled using Go 1.19 or higher. The use of Go 1.18 is not supported, since this version has reached end-of-life with the release of Go 1.20.
If you run into any trouble with this upgrade, please contact us.
For historical upgrading instructions for Tendermint Core v0.34.24 and earlier, please see the Tendermint Core upgrading instructions.