tendermint v0.33 Release Notes

  • ๐Ÿš€ Special thanks to external contributors on this release: @mrekucci, @PSalant726, @princesinha19, @greg-szabo, @dongsam, @cuonglm, @jgimeno, @yenkhoon

    Friendly reminder, we have a bug bounty program..

    January 14, 2020

    ๐Ÿš€ This release contains breaking changes to the Block#Header, specifically ๐Ÿšš NumTxs and TotalTxs were removed (#2521). Here's how this change affects different modules:

    • apps: it breaks the ABCI header field numbering
    • state: it breaks the format of State on disk
    • RPC: all RPC requests which expose the header broke
    • Go API: the Header broke
    • P2P: since blocks go over the wire, technically the P2P protocol broke

    Also, blocks are significantly smaller ๐Ÿ”ฅ because we got rid of the redundant information in Block#LastCommit. Commit now mainly consists of a signature ๐Ÿšš and a validator address plus a timestamp. Note we may remove the validator โž• address & timestamp fields in the future (see ADR-25).

    ๐Ÿ“ฆ lite2 package has been added to solve lite issues and introduce weak subjectivity interface. Refer to the spec for complete details. ๐Ÿš€ lite package is now deprecated and will be removed in v0.34 release.

    ๐Ÿ’ฅ BREAKING CHANGES:

    • CLI/RPC/Config

      • [rpc] #3471 Paginate /validators response (default: 30 vals per page)
      • [rpc] #3188 Remove BlockMeta in ResultBlock in favor of BlockId for /block
      • [rpc] /block_results response format updated (see RPC docs for details) { "jsonrpc": "2.0", "id": "", "result": { "height": "2109", "txs_results": null, "begin_block_events": null, "end_block_events": null, "validator_updates": null, "consensus_param_updates": null } }
      • [rpc] #4141 Remove #event suffix from the ID in event responses. {"jsonrpc": "2.0", "id": 0, "result": ...}
      • [rpc] #4141 Switch to integer IDs instead of json-client-XYZ id=0 method=/subscribe id=0 result=... id=1 method=/abci_query id=1 result=...
      • ID is unique for each request;
      • Request.ID is now optional. Notification is a Request without an ID. Previously ID="" or ID=0 were considered as notifications.
      • [config] #4046 Rename tag(s) to CompositeKey & places where tag is still present it was renamed to event or events. Find how a compositeKey is constructed here
      • You will have to generate a new config for your Tendermint node(s)
      • [genesis] #2565 Add consensus_params.evidence.max_age_duration. Rename consensus_params.evidence.max_age to max_age_num_blocks.
      • [cli] #1771 tendermint lite now uses new light client package (lite2) and has 3 more flags: --trusting-period, --trusted-height and --trusted-hash
    • Apps

    • Go API

      • [rpc] #3953 Modify NewHTTP, NewXXXClient functions to return an error on invalid remote instead of panicking (@mrekucci)
      • [rpc/client] #3471 Validators now requires two more args: page and perPage
      • [libs/common] #3262 Make error the last parameter of Task (@PSalant726)
      • [cs/types] #3262 Rename GotVoteFromUnwantedRoundError to ErrGotVoteFromUnwantedRound (@PSalant726)
      • [libs/common] #3862 Remove errors.go from libs/common
      • [libs/common] #4230 Move KV out of common to its own pkg
      • [libs/common] #4230 Rename cmn.KVPair(s) to kv.Pair(s)s
      • [libs/common] #4232 Move Service & BaseService from libs/common to libs/service
      • [libs/common] #4232 Move common/nil.go to types/utils.go & make the functions private
      • [libs/common] #4231 Move random functions from libs/common into pkg rand
      • [libs/common] #4237 Move byte functions from libs/common into pkg bytes
      • [libs/common] #4237 Move throttletimer functions from libs/common into pkg timer
      • [libs/common] #4237 Move tempfile functions from libs/common into pkg tempfile
      • [libs/common] #4240 Move os functions from libs/common into pkg os
      • [libs/common] #4240 Move net functions from libs/common into pkg net
      • [libs/common] #4240 Move mathematical functions and types out of libs/common to math pkg
      • [libs/common] #4240 Move string functions out of libs/common to strings pkg
      • [libs/common] #4240 Move async functions out of libs/common to async pkg
      • [libs/common] #4240 Move bit functions out of libs/common to bits pkg
      • [libs/common] #4240 Move cmap functions out of libs/common to cmap pkg
      • [libs/common] #4258 Remove Rand from all rand pkg functions
      • [types] #2565 Remove MockBadEvidence & MockGoodEvidence in favor of MockEvidence
    • Blockchain Protocol

      • [abci] #2521 Remove TotalTxs and NumTxs from Header
      • [types] #4151 Enforce ordering of votes in DuplicateVoteEvidence to be lexicographically sorted on BlockID
      • [types] #1648 Change Commit to consist of just signatures
    • P2P Protocol

      • [p2p] #3668 Make SecretConnection non-malleable
    • [proto] #3986 Prefix protobuf types to avoid name conflicts.

      • ABCI becomes tendermint.abci.types with the new API endpoint /tendermint.abci.types.ABCIApplication/
      • core_grpc becomes tendermint.rpc.grpc with the new API endpoint /tendermint.rpc.grpc.BroadcastAPI/
      • merkle becomes tendermint.crypto.merkle
      • libs.common becomes tendermint.libs.common
      • proto3 becomes tendermint.types.proto3

    ๐Ÿ”‹ FEATURES:

    • [p2p] #4053 Add unconditional_peer_ids and persistent_peers_max_dial_period config variables (see ADR-050) (@dongsam)
    • [tools] #4227 Implement tendermint debug kill and tendermint debug dump commands for Tendermint node debugging functionality. See --help in both commands for further documentation and usage.
    • [cli] #4234 Add --db_backend and --db_dir flags (@princesinha19)
    • [cli] #4113 Add optional --genesis_hash flag to check genesis hash upon startup
    • ๐Ÿ‘ [config] #3831 Add support for RocksDB (@Stumble)
    • [rpc] #3985 Add new /block_by_hash endpoint, which allows to fetch a block by its hash (@princesinha19)
    • [metrics] #4263 Add
      • consensus_validator_power: track your validators power
      • consensus_validator_last_signed_height: track at which height the validator last signed
      • consensus_validator_missed_blocks: total amount of missed blocks for a validator as gauges in prometheus for validator specific metrics
    • ๐Ÿ‘ [rpc/lib] #4248 RPC client basic authentication support (@greg-szabo)
    • [lite2] #1771 Light client with weak subjectivity

    ๐Ÿ‘Œ IMPROVEMENTS:

    • [rpc] #3188 Added block_size to BlockMeta this is reflected in /blockchain
    • [types] #2521 Add NumTxs to BlockMeta and EventDataNewBlockHeader
    • [p2p] #4185 Simplify SecretConnection handshake with merlin
    • [cli] #4065 Add --consensus.create_empty_blocks_interval flag (@jgimeno)
    • [docs] #4065 Document --consensus.create_empty_blocks_interval flag (@jgimeno)
    • [crypto] #4190 Added SR25519 signature scheme
    • [abci] [#4177] kvstore: Return LastBlockHeight and LastBlockAppHash in Info (@princesinha19)
    • [rpc] #2741 Add proposer to /consensus_state response (@princesinha19)
    • โšก๏ธ [deps] #4289 Update tm-db to 0.4.0, this includes major breaking changes in the dep that change how errors are handled.

    ๐Ÿ› BUG FIXES:

    • [rpc/lib]#4051 Fix RPC client, which was previously resolving https protocol to http (@yenkhoon)
    • [rpc] #4141 JSONRPCClient: validate that Response.ID matches Request.ID
    • [rpc] #4141 WSClient: check for unsolicited responses
    • โšก๏ธ [types] \4164 Prevent temporary power overflows on validator updates
    • [cs] #4069 Don't panic when block meta is not found in store (@gregzaitsev)
    • โšก๏ธ [types] #4164 Prevent temporary power overflows on validator updates (joint efforts of @gchaincl and @ancazamfir)
    • [p2p] #4140 SecretConnection: use the transcript solely for authentication (i.e. MAC)
    • [consensus/types] #4243 fix BenchmarkRoundStateDeepCopy panics (@cuonglm)
    • [rpc] #4256 Pass outCapacity to eventBus#Subscribe when subscribing using a local client