mirror of
https://github.com/tendermint/tendermint.git
synced 2026-01-07 13:55:17 +00:00
Since the light client work introduced in v0.33 it appears full nodes
are no longer fully verifying commit signatures during block execution -
they stop after +2/3. See in VerifyCommit:
0c7fd316eb/types/validator_set.go (L700-L703)
This means proposers can propose blocks that contain valid +2/3
signatures and then the rest of the signatures can be whatever they
want. They can claim that all the other validators signed just by
including a CommitSig with arbitrary signature data. While this doesn't
seem to impact safety of Tendermint per se, it means that Commits may
contain a lot of invalid data. This is already true of blocks, since
they can include invalid txs filled with garbage, but in that case the
application knows they they are invalid and can punish the proposer. But
since applications dont verify commit signatures directly (they trust
tendermint to do that), they won't be able to detect it.
This can impact incentivization logic in the application that depends on
the LastCommitInfo sent in BeginBlock, which includes which validators
signed. For instance, Gaia incentivizes proposers with a bonus for
including more than +2/3 of the signatures. But a proposer can now claim
that bonus just by including arbitrary data for the final -1/3 of
validators without actually waiting for their signatures. There may be
other tricks that can be played because of this.
In general, the full node should be a fully verifying machine. While
it's true that the light client can avoid verifying all signatures by
stopping after +2/3, the full node can not. Thus the light client and
full node should use distinct VerifyCommit functions if one is going to
stop after +2/3 or otherwise perform less validation (for instance light
clients can also skip verifying votes for nil while full nodes can not).
See a commit with a bad signature that verifies here: 56367fd. From what
I can tell, Tendermint will go on to think this commit is valid and
forward this data to the app, so the app will think the second validator
actually signed when it clearly did not.
8.4 KiB
8.4 KiB
v0.33.6
**
Special thanks to external contributors on this release:
Friendly reminder, we have a bug bounty program.
BREAKING CHANGES:
-
CLI/RPC/Config
- [consensus] #4582 RoundState:
Round,LockedRound&CommitRoundare now int32 - [consensus] #4582 HeightVoteSet:
roundis now int32 - [evidence] #4725 Remove
Pubkeyfrom DuplicateVoteEvidence - [evidence] #4959 Add json tags to
DuplicateVoteEvidence - [crypto] #4940 All keys have become
[]byteinstead of[<size>]byte. The byte method no longer returns the marshaled value but just the[]byteform of the data. - [crypto] \4988 Removal of key type multisig
- The key has been moved to the Cosmos-SDK (https://github.com/cosmos/cosmos-sdk/blob/master/crypto/types/multisig/multisignature.go)
- [crypto] #4989 Remove
Simpleprefixes fromSimpleProof,SimpleValueOp&SimpleProofNode.merkle.Proofhas been renamed toProofOps.- Protobuf messages
Proof&ProofOphas been moved toproto/crypto/merkle SimpleHashFromByteSliceshas been renamed toHashFromByteSlicesSimpleHashFromByteSlicesIterativehas been renamed toHashFromByteSlicesIterativeSimpleProofsFromByteSliceshas been renamed toProofsFromByteSlices
- [crypto] #4941 Remove suffixes from all keys.
- ed25519: type
PrivKeyEd25519is nowPrivKey - ed25519: type
PubKeyEd25519is nowPubKey - secp256k1: type
PrivKeySecp256k1is nowPrivKey - secp256k1: type
PubKeySecp256k1is nowPubKey - sr25519: type
PrivKeySr25519is nowPrivKey - sr25519: type
PubKeySr25519is nowPubKey - multisig: type
PubKeyMultisigThresholdis nowPubKey
- ed25519: type
- [light] #4946 Rename
lite2pkg tolight, the lite cmd has also been renamed tolight. Removeliteimplementation. - [rpc] #4792
/validatorsare now sorted by voting power (@melekes) - [rpc] #4937 Return an error when
pagepagination param is 0 in/validators,tx_search(@melekes) - [rpc] #4968 JSON encoding is now handled by
libs/json, not Amino - [privval] #4582
roundin private_validator_state.json is no longer a string in json it is now a number. - [proto] #5025 All proto files have been moved to
/protodirectory.- Using the recommended the file layout from buf, see here for more info
- [state] #4679
TxResultis a Protobuf type defined inabcitypes directory - [types] #4939
SignedMsgTypehas moved to a Protobuf enum types - [types] #4939
TotalinParts&PartSetHeaderhas been changed from aintto auint32 - [types] #4939 Vote:
ValidatorIndex&Roundare now int32 - [types] #4939 Proposal:
POLRound&Roundare now int32 - [types] #4939 Block:
Roundis now int32 - [types] #4962
ConsensusParams,BlockParams,EvidenceParams,ValidatorParams&HashedParamsare now Protobuf types - [types] #4852 Vote & Proposal
SignBytesis now funcVoteSignBytes&ProposalSignBytes - [types] #5029 Rename all values from
PartsHeadertoPartSetHeaderto have consistency
- [consensus] #4582 RoundState:
-
Apps
- [abci] #4704 Add ABCI methods
ListSnapshots,LoadSnapshotChunk,OfferSnapshot, andApplySnapshotChunkfor state sync snapshots.ABCIVersionbumped to 0.17.0. - [abci] #4989
ProofwithinResponseQueryhas been renamed toProofOps
- [abci] #4704 Add ABCI methods
-
P2P Protocol
-
Go API
- [crypto] #4721 Remove
SimpleHashFromMap()andSimpleProofsFromMap()(@erikgrinaker) - [libs] #4831 Remove
Bech32pkg from Tendermint. This pkg now lives in the cosmos-sdk - [rpc/client] #4947
Validators,TxSearchpage/per_pageparams become pointers (@melekes)UnconfirmedTxslimitparam is a pointer - [types] #4798 Simplify
VerifyCommitTrustingfunc + remove extra validation (@melekes) - [types] #4845 Remove
ABCIResult
- [crypto] #4721 Remove
-
Blockchain Protocol
- [blockchain] #4637 Migrate blockchain reactor(s) to Protobuf encoding
- [evidence] #4780 Cap evidence to an absolute number (@cmwaters)
Add
max_numto consensus evidence parameters (default: 50 items). - [evidence] #4949 Migrate evidence reactor to Protobuf encoding
- [mempool] #4940 Migrate mempool from to Protobuf encoding
- [light] #4964 Migrate light reactor migration to Protobuf encoding
- [p2p/pex] #4973 Migrate
p2p/pexreactor to Protobuf encoding - [privval] #4985 Migrate
privvalreactor to Protobuf encoding - [statesync] #4943 Migrate statesync reactor to Protobuf encoding
- [state] #4845 Include BeginBlock#Events, EndBlock#Events, DeliverTx#Events, GasWanted and GasUsed into
LastResultsHash(@melekes) - [state] #4679 Migrate state reactor to Protobuf encoding
BlockStoreStateJSONis nowBlockStoreStateand is encoded as binary in the database
- [store] #4778 Migrate store module to Protobuf encoding
- [types] #4792 Sort validators by voting power to enable faster commit verification (@melekes)
- [mempool] Add RemoveTxByKey() exported function for custom mempool cleaning (@p4u)
FEATURES:
- [abci] #5031 Add
AppVersionto consensus parameters (@james-ray) ... making it possible to update your ABCI application version viaEndBlockresponse - [evidence] #4532 Handle evidence from light clients (@melekes)
- [evidence] #4821 Amnesia evidence can be detected, verified and committed (@cmwaters)
- [light] #4532 Submit conflicting headers, if any, to a full node & all witnesses (@melekes)
- [p2p] #4981 Expose
SaveAsfunc on NodeKey (@melekes) - [rpc] #4532 Support
BlockByHashquery (@fedekunze) - [rpc] #4979 Support EXISTS operator in
/tx_searchquery (@melekes) - [rpc] #5017 Add
/check_txendpoint to check transactions without executing them or adding them to the mempool (@melekes) - [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.
IMPROVEMENTS:
- [consensus] #4578 Attempt to repair the consensus WAL file (
data/cs.wal/wal) automatically in case of corruption (@alessio) - [evidence] #4722 Improved evidence db (@cmwaters)
- [evidence] #4839 Reject duplicate evidence from being proposed (@cmwaters)
- [evidence] #4892 Remove redundant header from phantom validator evidence (@cmwaters)
- [light] #4935 Fetch and compare a new header with witnesses in parallel (@melekes)
- [light] #4929 compare header w/ witnesses only when doing bisection (@melekes)
- [light] #4916 validate basic for inbound validator sets and headers before further processing them (@cmwaters)
- [p2p/conn] #4795 Return err on
signChallenge()instead of panic - [state] #4781 Export
InitStateVersionfor the initial state version (@erikgrinaker) - [txindex] #4466 Allow to index an event at runtime (@favadi)
abci.EventAttributereplacesKV.Pair
- [types] #4905 Add ValidateBasic to validator and validator set (@cmwaters)
The original WAL file will be backed up to
data/cs.wal/wal.CORRUPTED.
BUG FIXES:
- [blockchain/v2] Correctly set block store base in status responses (@erikgrinaker)
- [consensus] #4895 Cache the address of the validator to reduce querying a remote KMS (@joe-bowman)
- [consensus] #4970 Stricter on
LastCommitRoundcheck (@cuonglm)