tendermint v0.34.0 Release Notes
Release Date: 2020-11-19 // over 3 years ago-
November 19, 2020
Holy smokes, this is a big one! For a more reader-friendly overview of the changes in 0.34.0 โฌ๏ธ (and of the changes you need to accommodate as a user), check out [UPGRADING.md](UPGRADING.md).
๐ Special thanks to external contributors on this release: @james-ray, @fedekunze, @favadi, @alessio, @joe-bowman, @cuonglm, @SadPencil and @dongsam.
And as always, friendly reminder, that we have a bug bounty program.
๐ฅ BREAKING CHANGES
CLI/RPC/Config
- [config] #5315 Rename
prof_laddr
topprof_laddr
and move it torpc
section (@melekes) - [evidence] #4959 Add JSON tags to
DuplicateVoteEvidence
(@marbar3778) - [light] #4946
tendermint lite
command has been renamed totendermint light
(@marbar3778) - [privval] #4582
round
in private_validator_state.json is no longer JSON string; instead it is a number (@marbar3778) - [rpc] #4792
/validators
are now sorted by voting power (@melekes) - [rpc] #4947 Return an error when
page
pagination param is 0 in/validators
,tx_search
(@melekes) - [rpc] #5137 JSON tags of
gasWanted
andgasUsed
inResponseCheckTx
andResponseDeliverTx
have been made snake_case (gas_wanted
andgas_used
) (@marbar3778) - [rpc] #5315 Remove
/unsafe_start_cpu_profiler
,/unsafe_stop_cpu_profiler
and/unsafe_write_heap_profile
. Please use pprof functionality instead (@melekes) - [rpc/client, rpc/jsonrpc/client] #5347 All client methods now accept
context.Context
as 1st param (@melekes)
- [config] #5315 Rename
Apps
- [abci] #4704 Add ABCI methods
ListSnapshots
,LoadSnapshotChunk
,OfferSnapshot
, andApplySnapshotChunk
for state sync snapshots.ABCIVersion
bumped to 0.17.0. (@erikgrinaker) - [abci] #4989
Proof
withinResponseQuery
has been renamed toProofOps
(@marbar3778) - [abci] #5096
CheckTxType
Protobuf enum names are now uppercase, to follow Protobuf style guide (@erikgrinaker) - [abci] #5324 ABCI evidence type is now an enum with two types of possible evidence (@cmwaters)
- [abci] #4704 Add ABCI methods
P2P Protocol
- [blockchain] #4637 Migrate blockchain reactor(s) to Protobuf encoding (@marbar3778)
- [evidence] #4949 Migrate evidence reactor to Protobuf encoding (@marbar3778)
- [mempool] #4940 Migrate mempool from to Protobuf encoding (@marbar3778)
- [mempool] #5321 Batch transactions when broadcasting them to peers (@melekes)
MaxBatchBytes
new config setting defines the max size of one batch.
- [p2p/pex] #4973 Migrate
p2p/pex
reactor to Protobuf encoding (@marbar3778) - [statesync] #4943 Migrate state sync reactor to Protobuf encoding (@marbar3778)
Blockchain Protocol
- [evidence] #4725 Remove
Pubkey
fromDuplicateVoteEvidence
(@marbar3778) - [evidence] #5499 Cap evidence to a maximum number of bytes (supercedes #4780) (@cmwaters)
- [merkle] #5193 Header hashes are no longer empty for empty inputs, notably
DataHash
,EvidenceHash
, andLastResultsHash
(@erikgrinaker) - [state] #4845 Include
GasWanted
andGasUsed
intoLastResultsHash
(@melekes) - [types] #4792 Sort validators by voting power to enable faster commit verification (@melekes)
- [evidence] #4725 Remove
On-disk serialization
Light client, private validator
Go API
- [consensus] #4582 RoundState:
Round
,LockedRound
&CommitRound
are nowint32
(@marbar3778) - [consensus] #4582 HeightVoteSet:
round
is nowint32
(@marbar3778) - [crypto] #4721 Remove
SimpleHashFromMap()
andSimpleProofsFromMap()
(@erikgrinaker) - [crypto] #4940 All keys have become
[]byte
instead of[<size>]byte
. The byte method no longer returns the marshaled value but just the[]byte
form of the data. (@marbar3778) - [crypto] #4988 Removal of key type multisig (@marbar3778)
- The key has been moved to the Cosmos-SDK
- [crypto] #4989 Remove
Simple
prefixes fromSimpleProof
,SimpleValueOp
&SimpleProofNode
. (@marbar3778) merkle.Proof
has been renamed toProofOps
.- Protobuf messages
Proof
&ProofOp
has been moved toproto/crypto/merkle
SimpleHashFromByteSlices
has been renamed toHashFromByteSlices
SimpleHashFromByteSlicesIterative
has been renamed toHashFromByteSlicesIterative
SimpleProofsFromByteSlices
has been renamed toProofsFromByteSlices
- [crypto] #4941 Remove suffixes from all keys. (@marbar3778)
- ed25519: type
PrivKeyEd25519
is nowPrivKey
- ed25519: type
PubKeyEd25519
is nowPubKey
- secp256k1: type
PrivKeySecp256k1
is nowPrivKey
- secp256k1: type
PubKeySecp256k1
is nowPubKey
- sr25519: type
PrivKeySr25519
is nowPrivKey
- sr25519: type
PubKeySr25519
is nowPubKey
- [crypto] #5214 Change
GenPrivKeySecp256k1
toGenPrivKeyFromSecret
to be consistent with other keys (@marbar3778) - [crypto] #5236
VerifyBytes
is nowVerifySignature
on thecrypto.PubKey
interface (@marbar3778) - [evidence] #5361 Add LightClientAttackEvidence and change evidence interface (@cmwaters)
- [libs] #4831 Remove
Bech32
pkg from Tendermint. This pkg now lives in the cosmos-sdk (@marbar3778) - [light] #4946 Rename
lite2
pkg tolight
. Removelite
implementation. (@marbar3778) - [light] #5347
NewClient
,NewHTTPClient
,VerifyHeader
andVerifyLightBlockAtHeight
now acceptcontext.Context
as 1st param (@melekes) - [merkle] #5193
HashFromByteSlices
andProofsFromByteSlices
now return a hash for empty inputs, following RFC6962 (@erikgrinaker) - [proto] #5025 All proto files have been moved to
/proto
directory. (@marbar3778) - Using the recommended the file layout from buf, see here for more info
- [rpc/client] #4947
Validators
,TxSearch
page
/per_page
params become pointers (@melekes) UnconfirmedTxs
limit
param is a pointer- [rpc/jsonrpc/server] #5141 Remove
WriteRPCResponseArrayHTTP
(useWriteRPCResponseHTTP
instead) (@melekes) - [state] #4679
TxResult
is a Protobuf type defined inabci
types directory (@marbar3778) - [state] #5191 Add
State.InitialHeight
field to record initial block height, must be1
(not0
) to start from 1 (@erikgrinaker) - [state] #5231
LoadStateFromDBOrGenesisFile()
andLoadStateFromDBOrGenesisDoc()
no longer saves the state in the database if not found, the genesis state is simply returned (@erikgrinaker) - [state] #5348 Define an Interface for the state store. (@marbar3778)
- [types] #4939
SignedMsgType
has moved to a Protobuf enum types (@marbar3778) - [types] #4962
ConsensusParams
,BlockParams
,EvidenceParams
,ValidatorParams
&HashedParams
are now Protobuf types (@marbar3778) - [types] #4852 Vote & Proposal
SignBytes
is now funcVoteSignBytes
&ProposalSignBytes
(@marbar3778) - [types] #4798 Simplify
VerifyCommitTrusting
func + remove extra validation (@melekes) - [types] #4845 Remove
ABCIResult
(@melekes) - [types] #5029 Rename all values from
PartsHeader
toPartSetHeader
to have consistency (@marbar3778) - [types] #4939
Total
inParts
&PartSetHeader
has been changed from aint
to auint32
(@marbar3778) - [types] #4939 Vote:
ValidatorIndex
&Round
are nowint32
(@marbar3778) - [types] #4939 Proposal:
POLRound
&Round
are nowint32
(@marbar3778) - [types] #4939 Block:
Round
is nowint32
(@marbar3778)
- [consensus] #4582 RoundState:
๐ FEATURES
- [abci] #5031 Add
AppVersion
to consensus parameters (@james-ray)- This makes it possible to update your ABCI application version via
EndBlock
response
- This makes it possible to update your ABCI application version via
- ๐ [abci] #5174 Remove
MockEvidence
in favor of testing with actual evidence types (DuplicateVoteEvidence
&LightClientAttackEvidence
) (@cmwaters) - [abci] #5191 Add
InitChain.InitialHeight
field giving the initial block height (@erikgrinaker) - [abci] #5227 Add
ResponseInitChain.app_hash
which is recorded in genesis block (@erikgrinaker) - [config] #5147 Add
--consensus.double_sign_check_height
flag andDoubleSignCheckHeight
config variable. See ADR-51 (@dongsam) - ๐ [db] #5233 Add support for
badgerdb
database backend (@erikgrinaker) - [evidence] #4532 Handle evidence from light clients (@melekes)
- [evidence] #4821 Amnesia (light client attack) evidence can be detected, verified and committed (@cmwaters)
- 0๏ธโฃ [genesis] #5191 Add
initial_height
field to specify the initial chain height (defaults to1
) (@erikgrinaker) - [libs/math] #5665 Make fractions unsigned integers (uint64) (@cmwaters)
- [light] #5298 Morph validator set and signed header into light block (@cmwaters)
- [p2p] #4981 Expose
SaveAs
func on NodeKey (@melekes) - [privval] #5239 Add
chainID
to requests from client. (@marbar3778) - ๐ [rpc] #4532 Support
BlockByHash
query (@fedekunze) - ๐ [rpc] #4979 Support EXISTS operator in
/tx_search
query (@melekes) - [rpc] #5017 Add
/check_tx
endpoint to check transactions without executing them or adding them to the mempool (@melekes) - [rpc] #5108 Subscribe using the websocket for new evidence events (@cmwaters)
- ๐ [statesync] Add state sync support, where a new node can be rapidly bootstrapped by fetching state snapshots from peers instead of replaying blocks. See the
[statesync]
config section. - ๐จ [evidence] #5361 Add LightClientAttackEvidence and refactor evidence lifecycle - for more information see ADR-059 (@cmwaters)
๐ IMPROVEMENTS
- ๐ [blockchain] #5278 Verify only +2/3 of the signatures in a block when fast syncing. (@marbar3778)
- [consensus] #4578 Attempt to repair the consensus WAL file (
data/cs.wal/wal
) automatically in case of corruption (@alessio)- The original WAL file will be backed up to
data/cs.wal/wal.CORRUPTED
.
- The original WAL file will be backed up to
- [consensus] #5143 Only call
privValidator.GetPubKey
once per block (@melekes) - [evidence] #4722 Consolidate evidence store and pool types to improve evidence DB (@cmwaters)
- [evidence] #4839 Reject duplicate evidence from being proposed (@cmwaters)
- [evidence] #5219 Change the source of evidence time to block time (@cmwaters)
- ๐ [libs] #5126 Add a sync package which wraps sync.(RW)Mutex & deadlock.(RW)Mutex and use a build flag (deadlock) in order to enable deadlock checking (@marbar3778)
- [light] #4935 Fetch and compare a new header with witnesses in parallel (@melekes)
- [light] #4929 Compare header with witnesses only when doing bisection (@melekes)
- [light] #4916 Validate basic for inbound validator sets and headers before further processing them (@cmwaters)
- ๐ [mempool] Add RemoveTxByKey() exported function for custom mempool cleaning (@p4u)
- [p2p/conn] #4795 Return err on
signChallenge()
instead of panic - [privval] #5437
NewSignerDialerEndpoint
can now be givenSignerServiceEndpointOption
(@erikgrinaker) - [rpc] #4968 JSON encoding is now handled by
libs/json
, not Amino (@erikgrinaker) - [rpc] #5293
/dial_peers
has addedprivate
andunconditional
as parameters. (@marbar3778) - [state] #4781 Export
InitStateVersion
for the initial state version (@erikgrinaker) - [txindex] #4466 Allow to index an event at runtime (@favadi)
abci.EventAttribute
replacesKV.Pair
- [types] #4905 Add
ValidateBasic
to validator and validator set (@cmwaters) - [types] #5340 Add check in
Header.ValidateBasic()
for block protocol version (@marbar3778) - [types] #5490 Use
Commit
andCommitSig
max sizes instead of vote max size to calculate the maximum block size. (@cmwaters)
๐ BUG FIXES
- [abci/grpc] #5520 Return async responses in order, to avoid mempool panics. (@erikgrinaker)
- [blockchain/v2] #4971 Correctly set block store base in status responses (@erikgrinaker)
- [blockchain/v2] #5499 Fix "duplicate block enqueued by processor" panic (@melekes)
- [blockchain/v2] #5530 Fix out of order block processing panic (@melekes)
- ๐ [blockchain/v2] #5553 Make the removal of an already removed peer a noop (@melekes)
- [consensus] #4895 Cache the address of the validator to reduce querying a remote KMS (@joe-bowman)
- [consensus] #4970 Don't allow
LastCommitRound
to be negative (@cuonglm) - โฑ [consensus] #5329 Fix wrong proposer schedule for validators returned by
InitChain
(@erikgrinaker) - [docker] #5385 Fix incorrect
time_iota_ms
default setting causing block timestamp drift (@erikgrinaker) - [evidence] #5170 Change ABCI evidence time to the time the infraction happened not the time the evidence was committed on the block (@cmwaters)
- [evidence] #5610 Make it possible for ABCI evidence to be formed from Tendermint evidence (@cmwaters)
- [libs/rand] #5215 Fix out-of-memory error on unexpected argument of Str() (@SadPencil)
- [light] #5307 Persist correct proposer priority in light client validator sets (@cmwaters)
- [p2p] #5136 Fix error for peer with the same ID but different IPs (@valardragon)
- โฑ [privval] #5638 Increase read/write timeout to 5s and calculate ping interval based on it (@JoeKash)
- [proxy] #5078 Force Tendermint to exit when ABCI app crashes (@melekes)
- [rpc] #5660 Set
application/json
as theContent-Type
header in RPC responses. (@alexanderbez) - [store] #5382 Fix race conditions when loading/saving/pruning blocks (@erikgrinaker)