github.com/516108736/tendermint@v0.36.0/CHANGELOG.md (about)

     1  # Changelog
     2  
     3  ## v0.34.8
     4  
     5  *February 25, 2021*
     6  
     7  This release, in conjunction with [a fix in the Cosmos SDK](https://github.com/cosmos/cosmos-sdk/pull/8641),
     8  introduces changes that should mean the logs are much, much quieter. 🎉
     9  
    10  Friendly reminder: We have a [bug bounty program](https://hackerone.com/tendermint).
    11  
    12  ### IMPROVEMENTS
    13  
    14  - [libs/log] [\#6174](https://github.com/tendermint/tendermint/issues/6174) Include timestamp (`ts` field; `time.RFC3339Nano` format) in JSON logger output (@melekes)
    15  
    16  ### BUG FIXES
    17  
    18  - [abci] [\#6124](https://github.com/tendermint/tendermint/issues/6124) Fixes a panic condition during callback execution in `ReCheckTx` during high tx load. (@alexanderbez)
    19  
    20  ## v0.34.7
    21  
    22  *February 18, 2021*
    23  
    24  This release fixes a downstream security issue which impacts Cosmos SDK
    25  users who are:
    26  
    27  * Using Cosmos SDK v0.40.0 or later, AND
    28  * Running validator nodes, AND
    29  * Using the file-based `FilePV` implementation for their consensus keys
    30  
    31  Users who fulfill all the above criteria were susceptible to leaking
    32  private key material in the logs. All other users are unaffected.
    33  
    34  The root cause was a discrepancy
    35  between the Tendermint Core (untyped) logger and the Cosmos SDK (typed) logger:
    36  Tendermint Core's logger automatically stringifies Go interfaces whenever possible;
    37  however, the Cosmos SDK's logger uses reflection to log the fields within a Go interface.
    38  
    39  The introduction of the typed logger meant that previously un-logged fields within
    40  interfaces are now sometimes logged, including the private key material inside the
    41  `FilePV` struct.
    42  
    43  Tendermint Core v0.34.7 fixes this issue; however, we strongly recommend that all validators
    44  use remote signer implementations instead of `FilePV` in production.
    45  
    46  Thank you to @joe-bowman for his assistance with this vulnerability and a particular
    47  shout-out to @marbar3778 for diagnosing it quickly.
    48  
    49  Friendly reminder: We have a [bug bounty program](https://hackerone.com/tendermint).
    50  
    51  ### BUG FIXES
    52  
    53  - [consensus] [\#6128](https://github.com/tendermint/tendermint/pull/6128) Remove privValidator from log call (@tessr)
    54  
    55  ## v0.34.6
    56  
    57  *February 18, 2021*
    58  
    59  _Tendermint Core v0.34.5 and v0.34.6 have been recalled due to build tooling problems._
    60  
    61  ## v0.34.4
    62  
    63  *February 11, 2021*
    64  
    65  This release includes a fix for a memory leak in the evidence reactor (see #6068, below).
    66  All Tendermint clients are recommended to upgrade.
    67  Thank you to our friends at Crypto.com for the initial report of this memory leak!
    68  
    69  Special thanks to other external contributors on this release: @yayajacky, @odidev, @laniehei, and @c29r3!
    70  
    71  Friendly reminder: We have a [bug bounty program](https://hackerone.com/tendermint).
    72  
    73  ### BUG FIXES
    74  
    75  - [light] [\#6022](https://github.com/tendermint/tendermint/pull/6022) Fix a bug when the number of validators equals 100 (@melekes)
    76  - [light] [\#6026](https://github.com/tendermint/tendermint/pull/6026) Fix a bug when height isn't provided for the rpc calls: `/commit` and `/validators` (@cmwaters)
    77  - [evidence] [\#6068](https://github.com/tendermint/tendermint/pull/6068) Terminate broadcastEvidenceRoutine when peer is stopped (@melekes)
    78  
    79  
    80  ## v0.34.3
    81  
    82  *January 19, 2021*
    83  
    84  This release includes a fix for a high-severity security vulnerability,
    85  a DoS-vector that impacted Tendermint Core v0.34.0-v0.34.2. For more details, see
    86  [Security Advisory Mulberry](https://github.com/tendermint/tendermint/security/advisories/GHSA-p658-8693-mhvg)
    87  or https://nvd.nist.gov/vuln/detail/CVE-2021-21271.
    88  
    89  Tendermint Core v0.34.3 also updates GoGo Protobuf to 1.3.2 in order to pick up the fix for
    90  https://nvd.nist.gov/vuln/detail/CVE-2021-3121.
    91  
    92  Friendly reminder: We have a [bug bounty program](https://hackerone.com/tendermint).
    93  
    94  ### BUG FIXES
    95  
    96  - [evidence] [[security fix]](https://github.com/tendermint/tendermint/security/advisories/GHSA-p658-8693-mhvg) Use correct source of evidence time (@cmwaters)
    97  - [proto] [\#5886](https://github.com/tendermint/tendermint/pull/5889) Bump gogoproto to 1.3.2 (@marbar3778)
    98  
    99  ## v0.34.2
   100  
   101  *January 12, 2021*
   102  
   103  This release fixes a substantial bug in evidence handling where evidence could
   104  sometimes be broadcast before the block containing that evidence was fully committed,
   105  resulting in some nodes panicking when trying to verify said evidence.
   106  
   107  Friendly reminder, we have a [bug bounty program](https://hackerone.com/tendermint).
   108  
   109  ### BREAKING CHANGES
   110  
   111  - Go API
   112    - [libs/os] [\#5871](https://github.com/tendermint/tendermint/issues/5871) `EnsureDir` now propagates IO errors and checks the file type (@erikgrinaker)
   113  
   114  ### BUG FIXES
   115  
   116  - [evidence] [\#5890](https://github.com/tendermint/tendermint/pull/5890) Add a buffer to evidence from consensus to avoid broadcasting and proposing evidence before the
   117    height of such an evidence has finished (@cmwaters)
   118  - [statesync] [\#5889](https://github.com/tendermint/tendermint/issues/5889) Set `LastHeightConsensusParamsChanged` when bootstrapping Tendermint state (@cmwaters)
   119  
   120  ## v0.34.1
   121  
   122  *January 6, 2021*
   123  
   124  Special thanks to external contributors on this release:
   125  
   126  @p4u from vocdoni.io reported that the mempool might behave incorrectly under a
   127  high load. The consequences can range from pauses between blocks to the peers
   128  disconnecting from this node. As a temporary remedy (until the mempool package
   129  is refactored), the `max-batch-bytes` was disabled. Transactions will be sent
   130  one by one without batching.
   131  
   132  Friendly reminder, we have a [bug bounty program](https://hackerone.com/tendermint).
   133  
   134  ### BREAKING CHANGES
   135  
   136  - CLI/RPC/Config
   137    - [cli] [\#5786](https://github.com/tendermint/tendermint/issues/5786) deprecate snake_case commands for hyphen-case (@cmwaters)
   138  
   139  - Go API
   140    - [libs/protoio] [\#5868](https://github.com/tendermint/tendermint/issues/5868) Return number of bytes read in `Reader.ReadMsg()` (@erikgrinaker)
   141  
   142  ### IMPROVEMENTS
   143  
   144  - [mempool] [\#5813](https://github.com/tendermint/tendermint/issues/5813) Add `keep-invalid-txs-in-cache` config option. When set to true, mempool will keep invalid transactions in the cache (@p4u)
   145  
   146  ### BUG FIXES
   147  
   148  - [crypto] [\#5707](https://github.com/tendermint/tendermint/issues/5707) Fix infinite recursion in string formatting of Secp256k1 keys (@erikgrinaker)
   149  - [mempool] [\#5800](https://github.com/tendermint/tendermint/issues/5800) Disable `max-batch-bytes` (@melekes)
   150  - [p2p] [\#5868](https://github.com/tendermint/tendermint/issues/5868) Fix inbound traffic statistics and rate limiting in `MConnection` (@erikgrinaker)
   151  
   152  ## v0.34.0
   153  
   154  *November 19, 2020*
   155  
   156  Holy smokes, this is a big one! For a more reader-friendly overview of the changes in 0.34.0
   157  (and of the changes you need to accommodate as a user), check out [UPGRADING.md](UPGRADING.md).
   158  
   159  Special thanks to external contributors on this release: @james-ray, @fedekunze, @favadi, @alessio,
   160  @joe-bowman, @cuonglm, @SadPencil and @dongsam.
   161  
   162  And as always, friendly reminder, that we have a [bug bounty program](https://hackerone.com/tendermint).
   163  
   164  ### BREAKING CHANGES
   165  
   166  - CLI/RPC/Config
   167  
   168     - [config] [\#5315](https://github.com/tendermint/tendermint/pull/5315) Rename `prof_laddr` to `pprof_laddr` and move it to `rpc` section (@melekes)
   169    - [evidence] [\#4959](https://github.com/tendermint/tendermint/pull/4959) Add JSON tags to `DuplicateVoteEvidence` (@marbar3778)
   170    - [light] [\#4946](https://github.com/tendermint/tendermint/pull/4946) `tendermint lite` command has been renamed to `tendermint light` (@marbar3778)
   171    - [privval] [\#4582](https://github.com/tendermint/tendermint/pull/4582) `round` in private_validator_state.json is no longer JSON string; instead it is a number (@marbar3778)
   172    - [rpc] [\#4792](https://github.com/tendermint/tendermint/pull/4792) `/validators` are now sorted by voting power (@melekes)
   173    - [rpc] [\#4947](https://github.com/tendermint/tendermint/pull/4947) Return an error when `page` pagination param is 0 in `/validators`, `tx_search` (@melekes)
   174    - [rpc] [\#5137](https://github.com/tendermint/tendermint/pull/5137) JSON tags of `gasWanted` and `gasUsed` in `ResponseCheckTx` and `ResponseDeliverTx` have been made snake_case (`gas_wanted` and `gas_used`) (@marbar3778)
   175    - [rpc] [\#5315](https://github.com/tendermint/tendermint/pull/5315) Remove `/unsafe_start_cpu_profiler`, `/unsafe_stop_cpu_profiler` and `/unsafe_write_heap_profile`. Please use pprof functionality instead (@melekes)
   176    - [rpc/client, rpc/jsonrpc/client] [\#5347](https://github.com/tendermint/tendermint/pull/5347) All client methods now accept `context.Context` as 1st param (@melekes)
   177  
   178  - Apps
   179  
   180    - [abci] [\#4704](https://github.com/tendermint/tendermint/pull/4704) Add ABCI methods `ListSnapshots`, `LoadSnapshotChunk`, `OfferSnapshot`, and `ApplySnapshotChunk` for state sync snapshots. `ABCIVersion` bumped to 0.17.0. (@erikgrinaker)
   181    - [abci] [\#4989](https://github.com/tendermint/tendermint/pull/4989) `Proof` within `ResponseQuery` has been renamed to `ProofOps`  (@marbar3778)
   182    - [abci] [\#5096](https://github.com/tendermint/tendermint/pull/5096) `CheckTxType` Protobuf enum names are now uppercase, to follow Protobuf style guide (@erikgrinaker)
   183    - [abci] [\#5324](https://github.com/tendermint/tendermint/pull/5324) ABCI evidence type is now an enum with two types of possible evidence (@cmwaters)
   184  
   185  - P2P Protocol
   186  
   187    - [blockchain] [\#4637](https://github.com/tendermint/tendermint/pull/4637) Migrate blockchain reactor(s) to Protobuf encoding (@marbar3778)
   188    - [evidence] [\#4949](https://github.com/tendermint/tendermint/pull/4949) Migrate evidence reactor to Protobuf encoding (@marbar3778)
   189    - [mempool] [\#4940](https://github.com/tendermint/tendermint/pull/4940) Migrate mempool from to Protobuf encoding (@marbar3778)
   190    - [mempool] [\#5321](https://github.com/tendermint/tendermint/pull/5321) Batch transactions when broadcasting them to peers (@melekes)
   191       - `MaxBatchBytes` new config setting defines the max size of one batch.
   192    - [p2p/pex] [\#4973](https://github.com/tendermint/tendermint/pull/4973) Migrate `p2p/pex` reactor to Protobuf encoding (@marbar3778)
   193    - [statesync] [\#4943](https://github.com/tendermint/tendermint/pull/4943) Migrate state sync reactor to Protobuf encoding (@marbar3778)
   194  
   195  - Blockchain Protocol
   196  
   197    - [evidence] [\#4725](https://github.com/tendermint/tendermint/pull/4725) Remove `Pubkey` from `DuplicateVoteEvidence` (@marbar3778)
   198    - [evidence] [\#5499](https://github.com/tendermint/tendermint/pull/5449) Cap evidence to a maximum number of bytes (supercedes [\#4780](https://github.com/tendermint/tendermint/pull/4780)) (@cmwaters)
   199    - [merkle] [\#5193](https://github.com/tendermint/tendermint/pull/5193) Header hashes are no longer empty for empty inputs, notably `DataHash`, `EvidenceHash`, and `LastResultsHash` (@erikgrinaker)
   200    - [state] [\#4845](https://github.com/tendermint/tendermint/pull/4845) Include `GasWanted` and `GasUsed` into `LastResultsHash` (@melekes)
   201    - [types] [\#4792](https://github.com/tendermint/tendermint/pull/4792) Sort validators by voting power to enable faster commit verification (@melekes)
   202  
   203  - On-disk serialization
   204  
   205    - [state] [\#4679](https://github.com/tendermint/tendermint/pull/4679) Migrate state module to Protobuf encoding (@marbar3778)
   206      - `BlockStoreStateJSON` is now `BlockStoreState` and is encoded as binary in the database
   207    - [store] [\#4778](https://github.com/tendermint/tendermint/pull/4778) Migrate store module to Protobuf encoding (@marbar3778)
   208  
   209  - Light client, private validator
   210  
   211    - [light] [\#4964](https://github.com/tendermint/tendermint/pull/4964) Migrate light module migration to Protobuf encoding (@marbar3778)
   212    - [privval] [\#4985](https://github.com/tendermint/tendermint/pull/4985) Migrate `privval` module to Protobuf encoding (@marbar3778)
   213  
   214  - Go API
   215  
   216    - [consensus] [\#4582](https://github.com/tendermint/tendermint/pull/4582) RoundState: `Round`, `LockedRound` & `CommitRound` are now `int32` (@marbar3778)
   217    - [consensus] [\#4582](https://github.com/tendermint/tendermint/pull/4582) HeightVoteSet: `round` is now `int32` (@marbar3778)
   218    - [crypto] [\#4721](https://github.com/tendermint/tendermint/pull/4721) Remove `SimpleHashFromMap()` and `SimpleProofsFromMap()` (@erikgrinaker)
   219    - [crypto] [\#4940](https://github.com/tendermint/tendermint/pull/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)
   220    - [crypto] [\#4988](https://github.com/tendermint/tendermint/pull/4988) Removal of key type multisig (@marbar3778)
   221      - The key has been moved to the [Cosmos-SDK](https://github.com/cosmos/cosmos-sdk/blob/master/crypto/types/multisig/multisignature.go)
   222    - [crypto] [\#4989](https://github.com/tendermint/tendermint/pull/4989) Remove `Simple` prefixes from `SimpleProof`, `SimpleValueOp` & `SimpleProofNode`. (@marbar3778)
   223      - `merkle.Proof` has been renamed to `ProofOps`.
   224      - Protobuf messages `Proof` & `ProofOp` has been moved to `proto/crypto/merkle`
   225      - `SimpleHashFromByteSlices` has been renamed to `HashFromByteSlices`
   226      - `SimpleHashFromByteSlicesIterative` has been renamed to `HashFromByteSlicesIterative`
   227      - `SimpleProofsFromByteSlices` has been renamed to `ProofsFromByteSlices`
   228    - [crypto] [\#4941](https://github.com/tendermint/tendermint/pull/4941) Remove suffixes from all keys. (@marbar3778)
   229      - ed25519: type `PrivKeyEd25519` is now `PrivKey`
   230      - ed25519: type `PubKeyEd25519` is now `PubKey`
   231      - secp256k1: type`PrivKeySecp256k1` is now `PrivKey`
   232      - secp256k1: type`PubKeySecp256k1` is now `PubKey`
   233      - sr25519: type `PrivKeySr25519` is now `PrivKey`
   234      - sr25519: type `PubKeySr25519` is now `PubKey`
   235    - [crypto] [\#5214](https://github.com/tendermint/tendermint/pull/5214) Change `GenPrivKeySecp256k1` to `GenPrivKeyFromSecret` to be consistent with other keys (@marbar3778)
   236    - [crypto] [\#5236](https://github.com/tendermint/tendermint/pull/5236) `VerifyBytes` is now `VerifySignature` on the `crypto.PubKey` interface (@marbar3778)
   237    - [evidence] [\#5361](https://github.com/tendermint/tendermint/pull/5361) Add LightClientAttackEvidence and change evidence interface (@cmwaters)
   238    - [libs] [\#4831](https://github.com/tendermint/tendermint/pull/4831) Remove `Bech32` pkg from Tendermint. This pkg now lives in the [cosmos-sdk](https://github.com/cosmos/cosmos-sdk/tree/4173ea5ebad906dd9b45325bed69b9c655504867/types/bech32) (@marbar3778)
   239    - [light] [\#4946](https://github.com/tendermint/tendermint/pull/4946) Rename `lite2` pkg to `light`. Remove `lite` implementation. (@marbar3778)
   240    - [light] [\#5347](https://github.com/tendermint/tendermint/pull/5347) `NewClient`, `NewHTTPClient`, `VerifyHeader` and `VerifyLightBlockAtHeight` now accept `context.Context` as 1st param (@melekes)
   241    - [merkle] [\#5193](https://github.com/tendermint/tendermint/pull/5193) `HashFromByteSlices` and `ProofsFromByteSlices` now return a hash for empty inputs, following RFC6962 (@erikgrinaker)
   242    - [proto] [\#5025](https://github.com/tendermint/tendermint/pull/5025) All proto files have been moved to `/proto` directory. (@marbar3778)
   243      - Using the recommended the file layout from buf, [see here for more info](https://buf.build/docs/lint-checkers#file_layout)
   244    - [rpc/client] [\#4947](https://github.com/tendermint/tendermint/pull/4947) `Validators`, `TxSearch` `page`/`per_page` params become pointers (@melekes)
   245      - `UnconfirmedTxs` `limit` param is a pointer
   246    - [rpc/jsonrpc/server] [\#5141](https://github.com/tendermint/tendermint/pull/5141) Remove `WriteRPCResponseArrayHTTP` (use `WriteRPCResponseHTTP` instead) (@melekes)
   247    - [state] [\#4679](https://github.com/tendermint/tendermint/pull/4679) `TxResult` is a Protobuf type defined in `abci` types directory (@marbar3778)
   248    - [state] [\#5191](https://github.com/tendermint/tendermint/pull/5191) Add `State.InitialHeight` field to record initial block height, must be `1` (not `0`) to start from 1 (@erikgrinaker)
   249    - [state] [\#5231](https://github.com/tendermint/tendermint/pull/5231) `LoadStateFromDBOrGenesisFile()` and `LoadStateFromDBOrGenesisDoc()` no longer saves the state in the database if not found, the genesis state is simply returned (@erikgrinaker)
   250    - [state] [\#5348](https://github.com/tendermint/tendermint/pull/5348) Define an Interface for the state store. (@marbar3778)
   251    - [types] [\#4939](https://github.com/tendermint/tendermint/pull/4939)  `SignedMsgType` has moved to a Protobuf enum types (@marbar3778)
   252    - [types] [\#4962](https://github.com/tendermint/tendermint/pull/4962) `ConsensusParams`, `BlockParams`, `EvidenceParams`, `ValidatorParams` & `HashedParams` are now Protobuf types (@marbar3778)
   253    - [types] [\#4852](https://github.com/tendermint/tendermint/pull/4852) Vote & Proposal `SignBytes` is now func `VoteSignBytes` & `ProposalSignBytes` (@marbar3778)
   254    - [types] [\#4798](https://github.com/tendermint/tendermint/pull/4798) Simplify `VerifyCommitTrusting` func + remove extra validation (@melekes)
   255    - [types] [\#4845](https://github.com/tendermint/tendermint/pull/4845) Remove `ABCIResult` (@melekes)
   256    - [types] [\#5029](https://github.com/tendermint/tendermint/pull/5029) Rename all values from `PartsHeader` to `PartSetHeader` to have consistency (@marbar3778)
   257    - [types] [\#4939](https://github.com/tendermint/tendermint/pull/4939) `Total` in `Parts` & `PartSetHeader` has been changed from a `int` to a `uint32` (@marbar3778)
   258    - [types] [\#4939](https://github.com/tendermint/tendermint/pull/4939) Vote: `ValidatorIndex` & `Round` are now `int32` (@marbar3778)
   259    - [types] [\#4939](https://github.com/tendermint/tendermint/pull/4939) Proposal: `POLRound` & `Round` are now `int32` (@marbar3778)
   260    - [types] [\#4939](https://github.com/tendermint/tendermint/pull/4939) Block: `Round` is now `int32` (@marbar3778)
   261  
   262  ### FEATURES
   263  
   264  - [abci] [\#5031](https://github.com/tendermint/tendermint/pull/5031) Add `AppVersion` to consensus parameters (@james-ray)
   265    - This makes it possible to update your ABCI application version via `EndBlock` response
   266  - [abci] [\#5174](https://github.com/tendermint/tendermint/pull/5174) Remove `MockEvidence` in favor of testing with actual evidence types (`DuplicateVoteEvidence` & `LightClientAttackEvidence`) (@cmwaters)
   267  - [abci] [\#5191](https://github.com/tendermint/tendermint/pull/5191) Add `InitChain.InitialHeight` field giving the initial block height (@erikgrinaker)
   268  - [abci] [\#5227](https://github.com/tendermint/tendermint/pull/5227) Add `ResponseInitChain.app_hash` which is recorded in genesis block (@erikgrinaker)
   269  - [config] [\#5147](https://github.com/tendermint/tendermint/pull/5147) Add `--consensus.double_sign_check_height` flag and `DoubleSignCheckHeight` config variable. See [ADR-51](https://github.com/tendermint/tendermint/blob/master/docs/architecture/adr-051-double-signing-risk-reduction.md) (@dongsam)
   270  - [db] [\#5233](https://github.com/tendermint/tendermint/pull/5233) Add support for `badgerdb` database backend (@erikgrinaker)
   271  - [evidence] [\#4532](https://github.com/tendermint/tendermint/pull/4532) Handle evidence from light clients (@melekes)
   272  - [evidence] [#4821](https://github.com/tendermint/tendermint/pull/4821) Amnesia (light client attack) evidence can be detected, verified and committed (@cmwaters)
   273  - [genesis] [\#5191](https://github.com/tendermint/tendermint/pull/5191) Add `initial_height` field to specify the initial chain height (defaults to `1`) (@erikgrinaker)
   274  - [libs/math] [\#5665](https://github.com/tendermint/tendermint/pull/5665) Make fractions unsigned integers (uint64) (@cmwaters)
   275  - [light] [\#5298](https://github.com/tendermint/tendermint/pull/5298) Morph validator set and signed header into light block (@cmwaters)
   276  - [p2p] [\#4981](https://github.com/tendermint/tendermint/pull/4981) Expose `SaveAs` func on NodeKey (@melekes)
   277  - [privval] [\#5239](https://github.com/tendermint/tendermint/pull/5239) Add `chainID` to requests from client. (@marbar3778)
   278  - [rpc] [\#4532](https://github.com/tendermint/tendermint/pull/4923) Support `BlockByHash` query (@fedekunze)
   279  - [rpc] [\#4979](https://github.com/tendermint/tendermint/pull/4979) Support EXISTS operator in `/tx_search` query (@melekes)
   280  - [rpc] [\#5017](https://github.com/tendermint/tendermint/pull/5017) Add `/check_tx` endpoint to check transactions without executing them or adding them to the mempool (@melekes)
   281  - [rpc] [\#5108](https://github.com/tendermint/tendermint/pull/5108) Subscribe using the websocket for new evidence events (@cmwaters)
   282  - [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.
   283  - [evidence] [\#5361](https://github.com/tendermint/tendermint/pull/5361) Add LightClientAttackEvidence and refactor evidence lifecycle - for more information see [ADR-059](https://github.com/tendermint/tendermint/blob/master/docs/architecture/adr-059-evidence-composition-and-lifecycle.md) (@cmwaters)
   284  
   285  ### IMPROVEMENTS
   286  
   287  - [blockchain] [\#5278](https://github.com/tendermint/tendermint/pull/5278) Verify only +2/3 of the signatures in a block when fast syncing. (@marbar3778)
   288  - [consensus] [\#4578](https://github.com/tendermint/tendermint/pull/4578) Attempt to repair the consensus WAL file (`data/cs.wal/wal`) automatically in case of corruption (@alessio)
   289    - The original WAL file will be backed up to `data/cs.wal/wal.CORRUPTED`.
   290  - [consensus] [\#5143](https://github.com/tendermint/tendermint/pull/5143) Only call `privValidator.GetPubKey` once per block (@melekes)
   291  - [evidence] [\#4722](https://github.com/tendermint/tendermint/pull/4722) Consolidate evidence store and pool types to improve evidence DB (@cmwaters)
   292  - [evidence] [\#4839](https://github.com/tendermint/tendermint/pull/4839) Reject duplicate evidence from being proposed (@cmwaters)
   293  - [evidence] [\#5219](https://github.com/tendermint/tendermint/pull/5219) Change the source of evidence time to block time (@cmwaters)
   294  - [libs] [\#5126](https://github.com/tendermint/tendermint/pull/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)
   295  - [light] [\#4935](https://github.com/tendermint/tendermint/pull/4935) Fetch and compare a new header with witnesses in parallel (@melekes)
   296  - [light] [\#4929](https://github.com/tendermint/tendermint/pull/4929) Compare header with witnesses only when doing bisection (@melekes)
   297  - [light] [\#4916](https://github.com/tendermint/tendermint/pull/4916) Validate basic for inbound validator sets and headers before further processing them (@cmwaters)
   298  - [mempool] Add RemoveTxByKey() exported function for custom mempool cleaning (@p4u)
   299  - [p2p/conn] [\#4795](https://github.com/tendermint/tendermint/pull/4795) Return err on `signChallenge()` instead of panic
   300  - [privval] [\#5437](https://github.com/tendermint/tendermint/pull/5437) `NewSignerDialerEndpoint` can now be given `SignerServiceEndpointOption` (@erikgrinaker)
   301  - [rpc] [\#4968](https://github.com/tendermint/tendermint/pull/4968) JSON encoding is now handled by `libs/json`, not Amino (@erikgrinaker)
   302  - [rpc] [\#5293](https://github.com/tendermint/tendermint/pull/5293) `/dial_peers` has added `private` and `unconditional` as parameters. (@marbar3778)
   303  - [state] [\#4781](https://github.com/tendermint/tendermint/pull/4781) Export `InitStateVersion` for the initial state version (@erikgrinaker)
   304  - [txindex] [\#4466](https://github.com/tendermint/tendermint/pull/4466) Allow to index an event at runtime (@favadi)
   305    - `abci.EventAttribute` replaces `KV.Pair`
   306  - [types] [\#4905](https://github.com/tendermint/tendermint/pull/4905) Add `ValidateBasic` to validator and validator set (@cmwaters)
   307  - [types] [\#5340](https://github.com/tendermint/tendermint/pull/5340) Add check in `Header.ValidateBasic()` for block protocol version (@marbar3778)
   308  - [types] [\#5490](https://github.com/tendermint/tendermint/pull/5490) Use `Commit` and `CommitSig` max sizes instead of vote max size to calculate the maximum block size. (@cmwaters)
   309  
   310  
   311  ### BUG FIXES
   312  
   313  - [abci/grpc] [\#5520](https://github.com/tendermint/tendermint/pull/5520) Return async responses in order, to avoid mempool panics. (@erikgrinaker)
   314  - [blockchain/v2] [\#4971](https://github.com/tendermint/tendermint/pull/4971) Correctly set block store base in status responses (@erikgrinaker)
   315  - [blockchain/v2] [\#5499](https://github.com/tendermint/tendermint/pull/5499) Fix "duplicate block enqueued by processor" panic (@melekes)
   316  - [blockchain/v2] [\#5530](https://github.com/tendermint/tendermint/pull/5530) Fix out of order block processing panic (@melekes)
   317  - [blockchain/v2] [\#5553](https://github.com/tendermint/tendermint/pull/5553) Make the removal of an already removed peer a noop (@melekes)
   318  - [consensus] [\#4895](https://github.com/tendermint/tendermint/pull/4895) Cache the address of the validator to reduce querying a remote KMS (@joe-bowman)
   319  - [consensus] [\#4970](https://github.com/tendermint/tendermint/pull/4970) Don't allow `LastCommitRound` to be negative (@cuonglm)
   320  - [consensus] [\#5329](https://github.com/tendermint/tendermint/pull/5329) Fix wrong proposer schedule for validators returned by `InitChain` (@erikgrinaker)
   321  - [docker] [\#5385](https://github.com/tendermint/tendermint/pull/5385) Fix incorrect `time_iota_ms` default setting causing block timestamp drift (@erikgrinaker)
   322  - [evidence] [\#5170](https://github.com/tendermint/tendermint/pull/5170) Change ABCI evidence time to the time the infraction happened not the time the evidence was committed on the block (@cmwaters)
   323  - [evidence] [\#5610](https://github.com/tendermint/tendermint/pull/5610) Make it possible for ABCI evidence to be formed from Tendermint evidence (@cmwaters)
   324  - [libs/rand] [\#5215](https://github.com/tendermint/tendermint/pull/5215) Fix out-of-memory error on unexpected argument of Str() (@SadPencil)
   325  - [light] [\#5307](https://github.com/tendermint/tendermint/pull/5307) Persist correct proposer priority in light client validator sets (@cmwaters)
   326  - [p2p] [\#5136](https://github.com/tendermint/tendermint/pull/5136) Fix error for peer with the same ID but different IPs (@valardragon)
   327  - [privval] [\#5638](https://github.com/tendermint/tendermint/pull/5638) Increase read/write timeout to 5s and calculate ping interval based on it (@JoeKash)
   328  - [proxy] [\#5078](https://github.com/tendermint/tendermint/pull/5078) Force Tendermint to exit when ABCI app crashes  (@melekes)
   329  - [rpc] [\#5660](https://github.com/tendermint/tendermint/pull/5660) Set `application/json` as the `Content-Type` header in RPC responses. (@alexanderbez)
   330  - [store] [\#5382](https://github.com/tendermint/tendermint/pull/5382) Fix race conditions when loading/saving/pruning blocks (@erikgrinaker)
   331  
   332  ## v0.33.8
   333  
   334  *August 11, 2020*
   335  
   336  ### Go security update
   337  
   338  Go reported a security vulnerability that affected the `encoding/binary` package. The most recent binary for tendermint is using 1.14.6, for this
   339  reason the Tendermint engineering team has opted to conduct a release to aid users in using the correct version of Go. Read more about the security issue [here](https://github.com/golang/go/issues/40618).
   340  
   341  
   342  ## v0.33.7
   343  
   344   *August 4, 2020*
   345  
   346   ### BUG FIXES:
   347  
   348   - [go] Build release binary using Go 1.14.4, to avoid halt caused by Go 1.14.1 (https://github.com/golang/go/issues/38223)
   349   - [privval] [\#5140](https://github.com/tendermint/tendermint/pull/5140) `RemoteSignerError` from remote signers are no longer retried (@melekes)
   350  
   351  
   352  ## v0.33.6
   353  
   354  *July 2, 2020*
   355  
   356  This security release fixes:
   357  
   358  ### Denial of service
   359  
   360  Tendermint 0.33.0 and above allow block proposers to include signatures for the
   361  wrong block. This may happen naturally if you start a network, have it run for
   362  some time and restart it **without changing the chainID**. (It is a
   363  [misconfiguration](https://docs.tendermint.com/master/tendermint-core/using-tendermint.html)
   364  to reuse chainIDs.) Correct block proposers will accidentally include signatures
   365  for the wrong block if they see these signatures, and then commits won't validate,
   366  making all proposed blocks invalid. A malicious validator (even with a minimal
   367  amount of stake) can use this vulnerability to completely halt the network.
   368  
   369  Tendermint 0.33.6 checks all the signatures are for the block with +2/3
   370  majority before creating a commit.
   371  
   372  ### False Witness
   373  
   374  Tendermint 0.33.1 and above are no longer fully verifying commit signatures
   375  during block execution - they stop after +2/3. This means proposers can propose
   376  blocks that contain valid +2/3 signatures and then the rest of the signatures
   377  can be whatever they want. They can claim that all the other validators signed
   378  just by including a CommitSig with arbitrary signature data. While this doesn't
   379  seem to impact safety of Tendermint per se, it means that Commits may contain a
   380  lot of invalid data.
   381  
   382  _This was already true of blocks, since they could include invalid txs filled
   383  with garbage, but in that case the application knew that they are invalid and
   384  could punish the proposer. But since applications didn't--and don't--
   385  verify commit signatures directly (they trust Tendermint to do that),
   386  they won't be able to detect it._
   387  
   388  This can impact incentivization logic in the application that depends on the
   389  LastCommitInfo sent in BeginBlock, which includes which validators signed. For
   390  instance, Gaia incentivizes proposers with a bonus for including more than +2/3
   391  of the signatures. But a proposer can now claim that bonus just by including
   392  arbitrary data for the final -1/3 of validators without actually waiting for
   393  their signatures. There may be other tricks that can be played because of this.
   394  
   395  Tendermint 0.33.6 verifies all the signatures during block execution.
   396  
   397  _Please note that the light client does not check nil votes and exits as soon
   398  as 2/3+ of the signatures are checked._
   399  
   400  **All clients are recommended to upgrade.**
   401  
   402  Special thanks to @njmurarka at Bluzelle Networks for reporting this.
   403  
   404  Friendly reminder, we have a [bug bounty
   405  program](https://hackerone.com/tendermint).
   406  
   407  ### SECURITY:
   408  
   409  - [consensus] Do not allow signatures for a wrong block in commits (@ebuchman)
   410  - [consensus] Verify all the signatures during block execution (@melekes)
   411  
   412  **Please note that the fix for the False Witness issue renames the `VerifyCommitTrusting`
   413  function to `VerifyCommitLightTrusting`. If you were relying on the light client, you may
   414  need to update your code.**
   415  
   416  ## v0.33.5
   417  
   418  *May 28, 2020*
   419  
   420  Special thanks to external contributors on this release: @tau3,
   421  
   422  Friendly reminder, we have a [bug bounty program](https://hackerone.com/tendermint).
   423  
   424  ### BREAKING CHANGES:
   425  
   426  - Go API
   427  
   428    - [privval] [\#4744](https://github.com/tendermint/tendermint/pull/4744) Remove deprecated `OldFilePV` (@melekes)
   429    - [mempool] [\#4759](https://github.com/tendermint/tendermint/pull/4759) Modify `Mempool#InitWAL` to return an error (@melekes)
   430    - [node] [\#4832](https://github.com/tendermint/tendermint/pull/4832) `ConfigureRPC` returns an error (@melekes)
   431    - [rpc] [\#4836](https://github.com/tendermint/tendermint/pull/4836) Overhaul `lib` folder (@melekes)
   432      Move lib/ folder to jsonrpc/.
   433      Rename:
   434        rpc package -> jsonrpc package
   435        rpcclient package -> client package
   436        rpcserver package -> server package
   437        JSONRPCClient to Client
   438        JSONRPCRequestBatch to RequestBatch
   439        JSONRPCCaller to Caller
   440        StartHTTPServer to Serve
   441        StartHTTPAndTLSServer to ServeTLS
   442        NewURIClient to NewURI
   443        NewJSONRPCClient to New
   444        NewJSONRPCClientWithHTTPClient to NewWithHTTPClient
   445        NewWSClient to NewWS
   446      Unexpose ResponseWriterWrapper
   447      Remove unused http_params.go
   448  
   449  
   450  ### FEATURES:
   451  
   452  - [pex] [\#4439](https://github.com/tendermint/tendermint/pull/4439) Use highwayhash for pex buckets (@tau3)
   453  
   454  ### IMPROVEMENTS:
   455  
   456  - [abci/server] [\#4719](https://github.com/tendermint/tendermint/pull/4719) Print panic & stack trace to STDERR if logger is not set (@melekes)
   457  - [types] [\#4638](https://github.com/tendermint/tendermint/pull/4638) Implement `Header#ValidateBasic` (@alexanderbez)
   458  - [buildsystem] [\#4378](https://github.com/tendermint/tendermint/pull/4738) Replace build_c and install_c with TENDERMINT_BUILD_OPTIONS parsing. The following options are available:
   459    - nostrip: don't strip debugging symbols nor DWARF tables.
   460    - cleveldb: use cleveldb as db backend instead of goleveldb.
   461    - race: pass -race to go build and enable data race detection.
   462  - [mempool] [\#4759](https://github.com/tendermint/tendermint/pull/4759) Allow ReapX and CheckTx functions to run in parallel (@melekes)
   463  - [rpc/core] [\#4844](https://github.com/tendermint/tendermint/pull/4844) Do not lock consensus state in `/validators`, `/consensus_params` and `/status` (@melekes)
   464  
   465  ### BUG FIXES:
   466  
   467  - [blockchain/v2] [\#4761](https://github.com/tendermint/tendermint/pull/4761) Fix excessive CPU usage caused by spinning on closed channels (@erikgrinaker)
   468  - [blockchain/v2] Respect `fast_sync` option (@erikgrinaker)
   469  - [light] [\#4741](https://github.com/tendermint/tendermint/pull/4741) Correctly return  `ErrSignedHeaderNotFound` and `ErrValidatorSetNotFound` on corresponding RPC errors (@erikgrinaker)
   470  - [rpc] [\#4805](https://github.com/tendermint/tendermint/issues/4805) Attempt to handle panics during panic recovery (@erikgrinaker)
   471  - [types] [\#4764](https://github.com/tendermint/tendermint/pull/4764) Return an error if voting power overflows in `VerifyCommitTrusting` (@melekes)
   472  - [privval] [\#4812](https://github.com/tendermint/tendermint/pull/4812) Retry `GetPubKey/SignVote/SignProposal` a few times before returning an error (@melekes)
   473  - [p2p] [\#4847](https://github.com/tendermint/tendermint/pull/4847) Return masked IP (not the actual IP) in addrbook#groupKey (@melekes)
   474  
   475  ## v0.33.4
   476  
   477  - Nodes are no longer guaranteed to contain all blocks up to the latest height. The ABCI app can now control which blocks to retain through the ABCI field `ResponseCommit.retain_height`, all blocks and associated data below this height will be removed.
   478  
   479  *April 21, 2020*
   480  
   481  Special thanks to external contributors on this release: @whylee259, @greg-szabo
   482  
   483  Friendly reminder, we have a [bug bounty program](https://hackerone.com/tendermint).
   484  
   485  ### BREAKING CHANGES:
   486  
   487  - Go API
   488  
   489    - [lite2] [\#4616](https://github.com/tendermint/tendermint/pull/4616) Make `maxClockDrift` an option `Verify/VerifyAdjacent/VerifyNonAdjacent` now accept `maxClockDrift time.Duration` (@melekes).
   490    - [rpc/client] [\#4628](https://github.com/tendermint/tendermint/pull/4628) Split out HTTP and local clients into `http` and `local` packages (@erikgrinaker).
   491  
   492  ### FEATURES:
   493  
   494  - [abci] [\#4588](https://github.com/tendermint/tendermint/issues/4588) Add `ResponseCommit.retain_height` field, which will automatically remove blocks below this height. This bumps the ABCI version to 0.16.2 (@erikgrinaker).
   495  - [cmd] [\#4665](https://github.com/tendermint/tendermint/pull/4665) New `tendermint completion` command to generate Bash/Zsh completion scripts (@alessio).
   496  - [rpc] [\#4588](https://github.com/tendermint/tendermint/issues/4588) Add `/status` response fields for the earliest block available on the node (@erikgrinaker).
   497  - [rpc] [\#4611](https://github.com/tendermint/tendermint/pull/4611) Add `codespace` to `ResultBroadcastTx` (@whylee259).
   498  
   499  ### IMPROVEMENTS:
   500  
   501  - [all] [\#4608](https://github.com/tendermint/tendermint/pull/4608) Give reactors descriptive names when they're initialized (@tessr).
   502  - [blockchain] [\#4588](https://github.com/tendermint/tendermint/issues/4588) Add `Base` to blockchain reactor P2P messages `StatusRequest` and `StatusResponse` (@erikgrinaker).
   503  - [Docker] [\#4569](https://github.com/tendermint/tendermint/issues/4569) Default configuration added to docker image (you can still mount your own config the same way) (@greg-szabo).
   504  - [example/kvstore] [\#4588](https://github.com/tendermint/tendermint/issues/4588) Add `RetainBlocks` option to control block retention (@erikgrinaker).
   505  - [evidence] [\#4632](https://github.com/tendermint/tendermint/pull/4632) Inbound evidence checked if already existing (@cmwaters).
   506  - [lite2] [\#4575](https://github.com/tendermint/tendermint/pull/4575) Use bisection for within-range verification (@cmwaters).
   507  - [lite2] [\#4562](https://github.com/tendermint/tendermint/pull/4562) Cache headers when using bisection (@cmwaters).
   508  - [p2p] [\#4548](https://github.com/tendermint/tendermint/pull/4548) Add ban list to address book (@cmwaters).
   509  - [privval] [\#4534](https://github.com/tendermint/tendermint/issues/4534) Add `error` as a return value on`GetPubKey()` (@marbar3778).
   510  - [p2p] [\#4621](https://github.com/tendermint/tendermint/issues/4621) Ban peers when messages are unsolicited or too frequent (@cmwaters).
   511  - [rpc] [\#4703](https://github.com/tendermint/tendermint/pull/4703) Add `count` and `total` to `/validators` response (@melekes).
   512  - [tools] [\#4615](https://github.com/tendermint/tendermint/issues/4615) Allow developers to use Docker to generate proto stubs, via `make proto-gen-docker` (@erikgrinaker).
   513  
   514  ### BUG FIXES:
   515  
   516  - [rpc] [\#4568](https://github.com/tendermint/tendermint/issues/4568) Fix panic when `Subscribe` is called, but HTTP client is not running. `Subscribe`, `Unsubscribe(All)` methods return an error now (@melekes).
   517  
   518  ## v0.33.3
   519  
   520  *April 6, 2020*
   521  
   522  This security release fixes:
   523  
   524  ### Denial of service 1
   525  
   526  Tendermint 0.33.2 and earlier does not limit P2P connection requests number.
   527  For each p2p connection, Tendermint allocates ~0.5MB. Even though this
   528  memory is garbage collected once the connection is terminated (due to duplicate
   529  IP or reaching a maximum number of inbound peers), temporary memory spikes can
   530  lead to OOM (Out-Of-Memory) exceptions.
   531  
   532  Tendermint 0.33.3 (and 0.32.10) limits the total number of P2P incoming
   533  connection requests to to `p2p.max_num_inbound_peers +
   534  len(p2p.unconditional_peer_ids)`.
   535  
   536  Notes:
   537  
   538  - Tendermint does not rate limit P2P connection requests per IP (an attacker
   539    can saturate all the inbound slots);
   540  - Tendermint does not rate limit HTTP(S) requests. If you expose any RPC
   541    endpoints to the public, please make sure to put in place some protection
   542    (https://www.nginx.com/blog/rate-limiting-nginx/). We may implement this in
   543    the future ([\#1696](https://github.com/tendermint/tendermint/issues/1696)).
   544  
   545  ### Denial of service 2
   546  
   547  Tendermint 0.33.2 and earlier does not reclaim `activeID` of a peer after it's
   548  removed in `Mempool` reactor. This does not happen all the time. It only
   549  happens when a connection fails (for any reason) before the Peer is created and
   550  added to all reactors. `RemovePeer` is therefore called before `AddPeer`, which
   551  leads to always growing memory (`activeIDs` map). The `activeIDs` map has a
   552  maximum size of 65535 and the node will panic if this map reaches the maximum.
   553  An attacker can create a lot of connection attempts (exploiting Denial of
   554  service 1), which ultimately will lead to the node panicking.
   555  
   556  Tendermint 0.33.3 (and 0.32.10) claims `activeID` for a peer in `InitPeer`,
   557  which is executed before `MConnection` is started.
   558  
   559  Notes:
   560  
   561  - `InitPeer` function was added to all reactors to combat a similar issue -
   562    [\#3338](https://github.com/tendermint/tendermint/issues/3338);
   563  - Denial of service 2 is independent of Denial of service 1 and can be executed
   564    without it.
   565  
   566  **All clients are recommended to upgrade**
   567  
   568  Special thanks to [fudongbai](https://hackerone.com/fudongbai) for finding
   569  and reporting this.
   570  
   571  Friendly reminder, we have a [bug bounty
   572  program](https://hackerone.com/tendermint).
   573  
   574  ### SECURITY:
   575  
   576  - [mempool] Reserve IDs in InitPeer instead of AddPeer (@tessr)
   577  - [p2p] Limit the number of incoming connections (@melekes)
   578  
   579  ## v0.33.2
   580  
   581  *March 11, 2020*
   582  
   583  Special thanks to external contributors on this release:
   584  @antho1404, @michaelfig, @gterzian, @tau3, @Shivani912
   585  
   586  Friendly reminder, we have a [bug bounty program](https://hackerone.com/tendermint).
   587  
   588  ### BREAKING CHANGES:
   589  
   590  - CLI/RPC/Config
   591    - [cli] [\#4505](https://github.com/tendermint/tendermint/pull/4505) `tendermint lite` sub-command new syntax (@melekes):
   592      `lite cosmoshub-3 -p 52.57.29.196:26657 -w public-seed-node.cosmoshub.certus.one:26657
   593      --height 962118 --hash 28B97BE9F6DE51AC69F70E0B7BFD7E5C9CD1A595B7DC31AFF27C50D4948`
   594  
   595  - Go API
   596    - [lite2] [\#4535](https://github.com/tendermint/tendermint/pull/4535) Remove `Start/Stop` (@melekes)
   597    - [lite2] [\#4469](https://github.com/tendermint/tendermint/issues/4469) Remove `RemoveNoLongerTrustedHeaders` and `RemoveNoLongerTrustedHeadersPeriod` option (@cmwaters)
   598    - [lite2] [\#4473](https://github.com/tendermint/tendermint/issues/4473) Return height as a 2nd param in `TrustedValidatorSet` (@melekes)
   599    - [lite2] [\#4536](https://github.com/tendermint/tendermint/pull/4536) `Update` returns a signed header (1st param) (@melekes)
   600  
   601  
   602  ### IMPROVEMENTS:
   603  
   604  - [blockchain/v2] [\#4361](https://github.com/tendermint/tendermint/pull/4361) Add reactor (@brapse)
   605  - [cmd] [\#4515](https://github.com/tendermint/tendermint/issues/4515) Change `tendermint debug dump` sub-command archives filename's format (@melekes)
   606  - [consensus] [\#3583](https://github.com/tendermint/tendermint/issues/3583) Reduce `non-deterministic signature` log noise (@tau3)
   607  - [examples/kvstore] [\#4507](https://github.com/tendermint/tendermint/issues/4507) ABCI query now returns the proper height (@erikgrinaker)
   608  - [lite2] [\#4462](https://github.com/tendermint/tendermint/issues/4462) Add `NewHTTPClient` and `NewHTTPClientFromTrustedStore` (@cmwaters)
   609  - [lite2] [\#4329](https://github.com/tendermint/tendermint/issues/4329) modified bisection to loop (@cmwaters)
   610  - [lite2] [\#4385](https://github.com/tendermint/tendermint/issues/4385) Disconnect from bad nodes (@melekes)
   611  - [lite2] [\#4398](https://github.com/tendermint/tendermint/issues/4398) Add `VerifyAdjacent` and `VerifyNonAdjacent` funcs (@cmwaters)
   612  - [lite2] [\#4426](https://github.com/tendermint/tendermint/issues/4426) Don't save intermediate headers (@cmwaters)
   613  - [lite2] [\#4464](https://github.com/tendermint/tendermint/issues/4464) Cross-check first header (@cmwaters)
   614  - [lite2] [\#4470](https://github.com/tendermint/tendermint/issues/4470) Fix inconsistent header-validatorset pairing (@melekes)
   615  - [lite2] [\#4488](https://github.com/tendermint/tendermint/issues/4488) Allow local clock drift -10 sec. (@melekes)
   616  - [p2p] [\#4449](https://github.com/tendermint/tendermint/pull/4449) Use `curve25519.X25519()` instead of `ScalarMult` (@erikgrinaker)
   617  - [types] [\#4417](https://github.com/tendermint/tendermint/issues/4417) **VerifyCommitX() functions should return as soon as +2/3 threshold is reached** (@alessio).
   618  - [libs/kv] [\#4542](https://github.com/tendermint/tendermint/pull/4542) remove unused type KI64Pair (@tessr)
   619  
   620  ### BUG FIXES:
   621  
   622  - [cmd] [\#4303](https://github.com/tendermint/tendermint/issues/4303) Show useful error when Tendermint is not initialized (@melekes)
   623  - [cmd] [\#4515](https://github.com/tendermint/tendermint/issues/4515) **Fix `tendermint debug kill` sub-command** (@melekes)
   624  - [rpc] [\#3935](https://github.com/tendermint/tendermint/issues/3935) **Create buffered subscriptions on `/subscribe`** (@melekes)
   625  - [rpc] [\#4375](https://github.com/tendermint/tendermint/issues/4375) Stop searching for txs in `/tx_search` upon client timeout (@gterzian)
   626  - [rpc] [\#4406](https://github.com/tendermint/tendermint/pull/4406) Fix issue with multiple subscriptions on the websocket (@antho1404)
   627  - [rpc] [\#4432](https://github.com/tendermint/tendermint/issues/4432) Fix `/tx_search` pagination with ordered results (@erikgrinaker)
   628  - [rpc] [\#4492](https://github.com/tendermint/tendermint/issues/4492) Keep the original subscription "id" field when new RPCs come in (@michaelfig)
   629  
   630  
   631  ## v0.33.1
   632  
   633  *Feburary 13, 2020*
   634  
   635  Special thanks to external contributors on this release:
   636  @princesinha19
   637  
   638  Friendly reminder, we have a [bug bounty
   639  program](https://hackerone.com/tendermint).
   640  
   641  ### FEATURES:
   642  
   643  - [rpc] [\#3333](https://github.com/tendermint/tendermint/issues/3333) Add `order_by` to `/tx_search` endpoint, allowing to change default ordering from asc to desc (@princesinha19)
   644  
   645  ### IMPROVEMENTS:
   646  
   647  - [proto] [\#4369](https://github.com/tendermint/tendermint/issues/4369) Add [buf](https://buf.build/) for usage with linting and checking if there are breaking changes with the master branch.
   648  - [proto] [\#4369](https://github.com/tendermint/tendermint/issues/4369) Add `make proto-gen` cmd to generate proto stubs outside of GOPATH.
   649  
   650  ### BUG FIXES:
   651  
   652  - [node] [\#4311](https://github.com/tendermint/tendermint/issues/4311) Use `GRPCMaxOpenConnections` when creating the gRPC server, not `MaxOpenConnections`
   653  - [rpc] [\#4319](https://github.com/tendermint/tendermint/issues/4319) Check `BlockMeta` is not nil in `/block` & `/block_by_hash`
   654  
   655  ## v0.33
   656  
   657  Special thanks to external contributors on this release: @mrekucci, @PSalant726, @princesinha19, @greg-szabo, @dongsam, @cuonglm, @jgimeno, @yenkhoon
   658  
   659  Friendly reminder, we have a [bug bounty
   660  program.](https://hackerone.com/tendermint).
   661  
   662  *January 14, 2020*
   663  
   664  This release contains breaking changes to the `Block#Header`, specifically
   665  `NumTxs` and `TotalTxs` were removed (\#2521). Here's how this change affects
   666  different modules:
   667  
   668  - apps: it breaks the ABCI header field numbering
   669  - state: it breaks the format of `State` on disk
   670  - RPC: all RPC requests which expose the header broke
   671  - Go API: the `Header` broke
   672  - P2P: since blocks go over the wire, technically the P2P protocol broke
   673  
   674  Also, blocks are significantly smaller 🔥 because we got rid of the redundant
   675  information in `Block#LastCommit`. `Commit` now mainly consists of a signature
   676  and a validator address plus a timestamp. Note we may remove the validator
   677  address & timestamp fields in the future (see ADR-25).
   678  
   679  `lite2` package has been added to solve `lite` issues and introduce weak
   680  subjectivity interface. Refer to the [spec](https://github.com/tendermint/spec/blob/master/spec/consensus/light-client.md) for complete details.
   681  `lite` package is now deprecated and will be removed in v0.34 release.
   682  
   683  ### BREAKING CHANGES:
   684  
   685  - CLI/RPC/Config
   686  
   687    - [rpc] [\#3471](https://github.com/tendermint/tendermint/issues/3471) Paginate `/validators` response (default: 30 vals per page)
   688    - [rpc] [\#3188](https://github.com/tendermint/tendermint/issues/3188) Remove `BlockMeta` in `ResultBlock` in favor of `BlockId` for `/block`
   689    - [rpc] `/block_results` response format updated (see RPC docs for details)
   690      ```
   691      {
   692        "jsonrpc": "2.0",
   693        "id": "",
   694        "result": {
   695          "height": "2109",
   696          "txs_results": null,
   697          "begin_block_events": null,
   698          "end_block_events": null,
   699          "validator_updates": null,
   700          "consensus_param_updates": null
   701        }
   702      }
   703      ```
   704    - [rpc] [\#4141](https://github.com/tendermint/tendermint/pull/4141) Remove `#event` suffix from the ID in event responses.
   705      `{"jsonrpc": "2.0", "id": 0, "result": ...}`
   706    - [rpc] [\#4141](https://github.com/tendermint/tendermint/pull/4141) Switch to integer IDs instead of `json-client-XYZ`
   707      ```
   708      id=0 method=/subscribe
   709      id=0 result=...
   710      id=1 method=/abci_query
   711      id=1 result=...
   712      ```
   713      - ID is unique for each request;
   714      - Request.ID is now optional. Notification is a Request without an ID. Previously ID="" or ID=0 were considered as notifications.
   715  
   716    - [config] [\#4046](https://github.com/tendermint/tendermint/issues/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](https://github.com/tendermint/tendermint/blob/6d05c531f7efef6f0619155cf10ae8557dd7832f/docs/app-dev/indexing-transactions.md)
   717      - You will have to generate a new config for your Tendermint node(s)
   718    - [genesis] [\#2565](https://github.com/tendermint/tendermint/issues/2565) Add `consensus_params.evidence.max_age_duration`. Rename
   719      `consensus_params.evidence.max_age` to `max_age_num_blocks`.
   720    - [cli] [\#1771](https://github.com/tendermint/tendermint/issues/1771) `tendermint lite` now uses new light client package (`lite2`)
   721      and has 3 more flags: `--trusting-period`, `--trusted-height` and
   722      `--trusted-hash`
   723  
   724  - Apps
   725  
   726    - [tm-bench] Removed tm-bench in favor of [tm-load-test](https://github.com/informalsystems/tm-load-test)
   727  
   728  - Go API
   729  
   730    - [rpc] [\#3953](https://github.com/tendermint/tendermint/issues/3953) Modify NewHTTP, NewXXXClient functions to return an error on invalid remote instead of panicking (@mrekucci)
   731    - [rpc/client] [\#3471](https://github.com/tendermint/tendermint/issues/3471) `Validators` now requires two more args: `page` and `perPage`
   732    - [libs/common] [\#3262](https://github.com/tendermint/tendermint/issues/3262) Make error the last parameter of `Task` (@PSalant726)
   733    - [cs/types] [\#3262](https://github.com/tendermint/tendermint/issues/3262) Rename `GotVoteFromUnwantedRoundError` to `ErrGotVoteFromUnwantedRound` (@PSalant726)
   734    - [libs/common] [\#3862](https://github.com/tendermint/tendermint/issues/3862) Remove `errors.go` from `libs/common`
   735    - [libs/common] [\#4230](https://github.com/tendermint/tendermint/issues/4230) Move `KV` out of common to its own pkg
   736    - [libs/common] [\#4230](https://github.com/tendermint/tendermint/issues/4230) Rename `cmn.KVPair(s)` to `kv.Pair(s)`s
   737    - [libs/common] [\#4232](https://github.com/tendermint/tendermint/issues/4232) Move `Service` & `BaseService` from `libs/common` to `libs/service`
   738    - [libs/common] [\#4232](https://github.com/tendermint/tendermint/issues/4232) Move `common/nil.go` to `types/utils.go` & make the functions private
   739    - [libs/common] [\#4231](https://github.com/tendermint/tendermint/issues/4231) Move random functions from `libs/common` into pkg `rand`
   740    - [libs/common] [\#4237](https://github.com/tendermint/tendermint/issues/4237) Move byte functions from `libs/common` into pkg `bytes`
   741    - [libs/common] [\#4237](https://github.com/tendermint/tendermint/issues/4237) Move throttletimer functions from `libs/common` into pkg `timer`
   742    - [libs/common] [\#4237](https://github.com/tendermint/tendermint/issues/4237) Move tempfile functions from `libs/common` into pkg `tempfile`
   743    - [libs/common] [\#4240](https://github.com/tendermint/tendermint/issues/4240) Move os functions from `libs/common` into pkg `os`
   744    - [libs/common] [\#4240](https://github.com/tendermint/tendermint/issues/4240) Move net functions from `libs/common` into pkg `net`
   745    - [libs/common] [\#4240](https://github.com/tendermint/tendermint/issues/4240) Move mathematical functions and types out of `libs/common` to `math` pkg
   746    - [libs/common] [\#4240](https://github.com/tendermint/tendermint/issues/4240) Move string functions out of `libs/common` to `strings` pkg
   747    - [libs/common] [\#4240](https://github.com/tendermint/tendermint/issues/4240) Move async functions out of `libs/common` to `async` pkg
   748    - [libs/common] [\#4240](https://github.com/tendermint/tendermint/issues/4240) Move bit functions out of `libs/common` to `bits` pkg
   749    - [libs/common] [\#4240](https://github.com/tendermint/tendermint/issues/4240) Move cmap functions out of `libs/common` to `cmap` pkg
   750    - [libs/common] [\#4258](https://github.com/tendermint/tendermint/issues/4258) Remove `Rand` from all `rand` pkg functions
   751    - [types] [\#2565](https://github.com/tendermint/tendermint/issues/2565) Remove `MockBadEvidence` & `MockGoodEvidence` in favor of `MockEvidence`
   752  
   753  - Blockchain Protocol
   754  
   755    - [abci] [\#2521](https://github.com/tendermint/tendermint/issues/2521) Remove `TotalTxs` and `NumTxs` from `Header`
   756    - [types] [\#4151](https://github.com/tendermint/tendermint/pull/4151) Enforce ordering of votes in DuplicateVoteEvidence to be lexicographically sorted on BlockID
   757    - [types] [\#1648](https://github.com/tendermint/tendermint/issues/1648) Change `Commit` to consist of just signatures
   758  
   759  - P2P Protocol
   760  
   761    - [p2p] [\#3668](https://github.com/tendermint/tendermint/pull/3668) Make `SecretConnection` non-malleable
   762  
   763  - [proto] [\#3986](https://github.com/tendermint/tendermint/pull/3986) Prefix protobuf types to avoid name conflicts.
   764    - ABCI becomes `tendermint.abci.types` with the new API endpoint `/tendermint.abci.types.ABCIApplication/`
   765    - core_grpc becomes `tendermint.rpc.grpc` with the new API endpoint `/tendermint.rpc.grpc.BroadcastAPI/`
   766    - merkle becomes `tendermint.crypto.merkle`
   767    - libs.common becomes `tendermint.libs.common`
   768    - proto3 becomes `tendermint.types.proto3`
   769  
   770  ### FEATURES:
   771  
   772  - [p2p] [\#4053](https://github.com/tendermint/tendermint/issues/4053) Add `unconditional_peer_ids` and `persistent_peers_max_dial_period` config variables (see ADR-050) (@dongsam)
   773  - [tools] [\#4227](https://github.com/tendermint/tendermint/pull/4227) Implement `tendermint debug kill` and
   774    `tendermint debug dump` commands for Tendermint node debugging functionality. See `--help` in both
   775    commands for further documentation and usage.
   776  - [cli] [\#4234](https://github.com/tendermint/tendermint/issues/4234) Add `--db_backend and --db_dir` flags (@princesinha19)
   777  - [cli] [\#4113](https://github.com/tendermint/tendermint/issues/4113) Add optional `--genesis_hash` flag to check genesis hash upon startup
   778  - [config] [\#3831](https://github.com/tendermint/tendermint/issues/3831) Add support for [RocksDB](https://rocksdb.org/) (@Stumble)
   779  - [rpc] [\#3985](https://github.com/tendermint/tendermint/issues/3985) Add new `/block_by_hash` endpoint, which allows to fetch a block by its hash (@princesinha19)
   780  - [metrics] [\#4263](https://github.com/tendermint/tendermint/issues/4263) Add
   781    - `consensus_validator_power`: track your validators power
   782    - `consensus_validator_last_signed_height`: track at which height the validator last signed
   783    - `consensus_validator_missed_blocks`: total amount of missed blocks for a validator
   784    as gauges in prometheus for validator specific metrics
   785  - [rpc/lib] [\#4248](https://github.com/tendermint/tendermint/issues/4248) RPC client basic authentication support (@greg-szabo)
   786  - [lite2] [\#1771](https://github.com/tendermint/tendermint/issues/1771) Light client with weak subjectivity
   787  
   788  ### IMPROVEMENTS:
   789  
   790  - [rpc] [\#3188](https://github.com/tendermint/tendermint/issues/3188) Added `block_size` to `BlockMeta` this is reflected in `/blockchain`
   791  - [types] [\#2521](https://github.com/tendermint/tendermint/issues/2521) Add `NumTxs` to `BlockMeta` and `EventDataNewBlockHeader`
   792  - [p2p] [\#4185](https://github.com/tendermint/tendermint/pull/4185) Simplify `SecretConnection` handshake with merlin
   793  - [cli] [\#4065](https://github.com/tendermint/tendermint/issues/4065) Add `--consensus.create_empty_blocks_interval` flag (@jgimeno)
   794  - [docs] [\#4065](https://github.com/tendermint/tendermint/issues/4065) Document `--consensus.create_empty_blocks_interval` flag (@jgimeno)
   795  - [crypto] [\#4190](https://github.com/tendermint/tendermint/pull/4190) Added SR25519 signature scheme
   796  - [abci] [\#4177] kvstore: Return `LastBlockHeight` and `LastBlockAppHash` in `Info` (@princesinha19)
   797  - [rpc] [\#2741](https://github.com/tendermint/tendermint/issues/2741) Add `proposer` to `/consensus_state` response (@princesinha19)
   798  - [deps] [\#4289](https://github.com/tendermint/tendermint/pull/4289) Update tm-db to 0.4.0, this includes major breaking changes in the dep that change how errors are handled.
   799  
   800  ### BUG FIXES:
   801  
   802  - [rpc/lib][\#4051](https://github.com/tendermint/tendermint/pull/4131) Fix RPC client, which was previously resolving https protocol to http (@yenkhoon)
   803  - [rpc] [\#4141](https://github.com/tendermint/tendermint/pull/4141) JSONRPCClient: validate that Response.ID matches Request.ID
   804  - [rpc] [\#4141](https://github.com/tendermint/tendermint/pull/4141) WSClient: check for unsolicited responses
   805  - [types] [\4164](https://github.com/tendermint/tendermint/pull/4164) Prevent temporary power overflows on validator updates
   806  - [cs] [\#4069](https://github.com/tendermint/tendermint/issues/4069) Don't panic when block meta is not found in store (@gregzaitsev)
   807  - [types] [\#4164](https://github.com/tendermint/tendermint/issues/4164) Prevent temporary power overflows on validator updates (joint
   808    efforts of @gchaincl and @ancazamfir)
   809  - [p2p] [\#4140](https://github.com/tendermint/tendermint/issues/4140) `SecretConnection`: use the transcript solely for authentication (i.e. MAC)
   810  - [consensus/types] [\#4243](https://github.com/tendermint/tendermint/issues/4243) fix BenchmarkRoundStateDeepCopy panics (@cuonglm)
   811  - [rpc] [\#4256](https://github.com/tendermint/tendermint/issues/4256) Pass `outCapacity` to `eventBus#Subscribe` when subscribing using a local client
   812  
   813  ## v0.32.13
   814  
   815  *August 5, 2020*
   816  
   817   ### BUG FIXES
   818  
   819   - [privval] [\#5112](https://github.com/tendermint/tendermint/issues/5112) If remote signer errors, don't retry (@melekes)
   820  
   821  ## v0.32.12
   822  
   823  *May 19, 2020*
   824  
   825  ### BUG FIXES
   826  
   827  - [p2p] [\#4847](https://github.com/tendermint/tendermint/pull/4847) Return masked IP (not the actual IP) in addrbook#groupKey (@melekes)
   828  
   829  ## v0.32.11
   830  
   831  *April 29, 2020*
   832  
   833  ### BUG FIXES:
   834  
   835  - [privval] [\#4275](https://github.com/tendermint/tendermint/issues/4275) Fix consensus failure when remote signer drops (@melekes)
   836  
   837  ## v0.32.10
   838  
   839  *April 6, 2020*
   840  
   841  This security release fixes:
   842  
   843  ### Denial of Service 1
   844  
   845  Tendermint 0.33.2 and earlier does not limit the number of P2P connection
   846  requests. For each p2p connection, Tendermint allocates ~0.5MB. Even though
   847  this memory is garbage collected once the connection is terminated (due to
   848  duplicate IP or reaching a maximum number of inbound peers), temporary memory
   849  spikes can lead to OOM (Out-Of-Memory) exceptions.
   850  
   851  Tendermint 0.33.3 (and 0.32.10) limits the total number of P2P incoming
   852  connection requests to to `p2p.max_num_inbound_peers +
   853  len(p2p.unconditional_peer_ids)`.
   854  
   855  Notes:
   856  
   857  - Tendermint does not rate limit P2P connection requests per IP (an attacker
   858    can saturate all the inbound slots);
   859  - Tendermint does not rate limit HTTP(S) requests. If you expose any RPC
   860    endpoints to the public, please make sure to put in place some protection
   861    (https://www.nginx.com/blog/rate-limiting-nginx/). We may implement this in
   862    the future ([\#1696](https://github.com/tendermint/tendermint/issues/1696)).
   863  
   864  ### Denial of Service 2
   865  
   866  Tendermint 0.33.2 and earlier does not reclaim `activeID` of a peer after it's
   867  removed in `Mempool` reactor. This does not happen all the time. It only
   868  happens when a connection fails (for any reason) before the Peer is created and
   869  added to all reactors. `RemovePeer` is therefore called before `AddPeer`, which
   870  leads to always growing memory (`activeIDs` map). The `activeIDs` map has a
   871  maximum size of 65535 and the node will panic if this map reaches the maximum.
   872  An attacker can create a lot of connection attempts (exploiting Denial of
   873  Service 1), which ultimately will lead to the node panicking.
   874  
   875  Tendermint 0.33.3 (and 0.32.10) claims `activeID` for a peer in `InitPeer`,
   876  which is executed before `MConnection` is started.
   877  
   878  Notes:
   879  
   880  - `InitPeer` function was added to all reactors to combat a similar issue -
   881    [\#3338](https://github.com/tendermint/tendermint/issues/3338);
   882  - Denial of Service 2 is independent of Denial of Service 1 and can be executed
   883    without it.
   884  
   885  **All clients are recommended to upgrade**
   886  
   887  Special thanks to [fudongbai](https://hackerone.com/fudongbai) for finding
   888  and reporting this.
   889  
   890  Friendly reminder, we have a [bug bounty
   891  program](https://hackerone.com/tendermint).
   892  
   893  ### SECURITY:
   894  
   895  - [mempool] Reserve IDs in InitPeer instead of AddPeer (@tessr)
   896  - [p2p] Limit the number of incoming connections (@melekes)
   897  
   898  ## v0.32.9
   899  
   900  _January, 9, 2020_
   901  
   902  Special thanks to external contributors on this release: @greg-szabo, @gregzaitsev, @yenkhoon
   903  
   904  Friendly reminder, we have a [bug bounty
   905  program](https://hackerone.com/tendermint).
   906  
   907  ### FEATURES:
   908  
   909  - [rpc/lib] [\#4248](https://github.com/tendermint/tendermint/issues/4248) RPC client basic authentication support (@greg-szabo)
   910  
   911  - [metrics] [\#4294](https://github.com/tendermint/tendermint/pull/4294) Add
   912    - `consensus_validator_power`: track your validators power
   913    - `consensus_validator_last_signed_height`: track at which height the validator last signed
   914    - `consensus_validator_missed_blocks`: total amount of missed blocks for a validator
   915      as gauges in prometheus for validator specific metrics
   916  
   917  ### BUG FIXES:
   918  
   919  - [rpc/lib] [\#4131](https://github.com/tendermint/tendermint/pull/4131) Fix RPC client, which was previously resolving https protocol to http (@yenkhoon)
   920  - [cs] [\#4069](https://github.com/tendermint/tendermint/issues/4069) Don't panic when block meta is not found in store (@gregzaitsev)
   921  
   922  ## v0.32.8
   923  
   924  *November 19, 2019*
   925  
   926  Special thanks to external contributors on this release: @erikgrinaker, @guagualvcha, @hsyis, @cosmostuba, @whunmr, @austinabell
   927  
   928  Friendly reminder, we have a [bug bounty
   929  program.](https://hackerone.com/tendermint).
   930  
   931  
   932  ### BREAKING CHANGES:
   933  
   934  - Go API
   935  
   936    - [libs/pubsub] [\#4070](https://github.com/tendermint/tendermint/pull/4070) `Query#(Matches|Conditions)` returns an error.
   937  
   938  ### IMPROVEMENTS:
   939  
   940  - [mempool] [\#4083](https://github.com/tendermint/tendermint/pull/4083) Added TxInfo parameter to CheckTx(), and removed CheckTxWithInfo() (@erikgrinaker)
   941  - [mempool] [\#4057](https://github.com/tendermint/tendermint/issues/4057) Include peer ID when logging rejected txns (@erikgrinaker)
   942  - [tools] [\#4023](https://github.com/tendermint/tendermint/issues/4023) Improved `tm-monitor` formatting of start time and avg tx throughput (@erikgrinaker)
   943  - [p2p] [\#3991](https://github.com/tendermint/tendermint/issues/3991) Log "has been established or dialed" as debug log instead of Error for connected peers (@whunmr)
   944  - [rpc] [\#4077](https://github.com/tendermint/tendermint/pull/4077) Added support for `EXISTS` clause to the Websocket query interface.
   945  - [privval] Add `SignerDialerEndpointRetryWaitInterval` option (@cosmostuba)
   946  - [crypto] Add `RegisterKeyType` to amino to allow external key types registration (@austinabell)
   947  
   948  ### BUG FIXES:
   949  
   950  - [libs/pubsub] [\#4070](https://github.com/tendermint/tendermint/pull/4070) Strip out non-numeric characters when attempting to match numeric values.
   951  - [libs/pubsub] [\#4070](https://github.com/tendermint/tendermint/pull/4070) No longer panic in Query#(Matches|Conditions) preferring to return an error instead.
   952  - [tools] [\#4023](https://github.com/tendermint/tendermint/issues/4023) Refresh `tm-monitor` health when validator count is updated (@erikgrinaker)
   953  - [state] [\#4104](https://github.com/tendermint/tendermint/pull/4104) txindex/kv: Fsync data to disk immediately after receiving it (@guagualvcha)
   954  - [state] [\#4095](https://github.com/tendermint/tendermint/pull/4095) txindex/kv: Return an error if there's one when the user searches for a tx (hash=X) (@hsyis)
   955  
   956  ## v0.32.7
   957  
   958  *October 18, 2019*
   959  
   960  This security release fixes a vulnerability found in the `consensus` package,
   961  where an attacker could construct a `BlockPartMessage` message in such a way
   962  that it will lead to consensus failure. A few similar issues have been
   963  identified and fixed here.
   964  
   965  **All clients are recommended to upgrade**
   966  
   967  Special thanks to [elvishacker](https://hackerone.com/elvishacker) for finding
   968  and reporting this.
   969  
   970  Friendly reminder, we have a [bug bounty
   971  program](https://hackerone.com/tendermint).
   972  
   973  ### BREAKING CHANGES:
   974  
   975  - Go API
   976    - [consensus] Modify `WAL#Write` and `WAL#WriteSync` to return an error if
   977      they fail to write a message
   978  
   979  ### SECURITY:
   980  
   981  - [consensus] Validate incoming messages more throughly
   982  
   983  ## v0.32.6
   984  
   985  *October 8, 2019*
   986  
   987  The previous patch was insufficient because the attacker could still find a way
   988  to submit a `nil` pubkey by constructing a `PubKeyMultisigThreshold` pubkey
   989  with `nil` subpubkeys for example.
   990  
   991  This release provides multiple fixes, which include recovering from panics when
   992  accepting new peers and only allowing `ed25519` pubkeys.
   993  
   994  **All clients are recommended to upgrade**
   995  
   996  Special thanks to [fudongbai](https://hackerone.com/fudongbai) for pointing
   997  this out.
   998  
   999  Friendly reminder, we have a [bug bounty
  1000  program](https://hackerone.com/tendermint).
  1001  
  1002  ### SECURITY:
  1003  
  1004  - [p2p] [\#4030](https://github.com/tendermint/tendermint/issues/4030) Only allow ed25519 pubkeys when connecting
  1005  
  1006  ## v0.32.5
  1007  
  1008  *October 1, 2019*
  1009  
  1010  This release fixes a major security vulnerability found in the `p2p` package.
  1011  All clients are recommended to upgrade. See
  1012  [\#4030](https://github.com/tendermint/tendermint/issues/4030) for details.
  1013  
  1014  Special thanks to [fudongbai](https://hackerone.com/fudongbai) for discovering
  1015  and reporting this issue.
  1016  
  1017  Friendly reminder, we have a [bug bounty
  1018  program](https://hackerone.com/tendermint).
  1019  
  1020  ### SECURITY:
  1021  
  1022  - [p2p] [\#4030](https://github.com/tendermint/tendermint/issues/4030) Fix for panic on nil public key send to a peer
  1023  
  1024  ## v0.32.4
  1025  
  1026  *September 19, 2019*
  1027  
  1028  Special thanks to external contributors on this release: @jon-certik, @gracenoah, @PSalant726, @gchaincl
  1029  
  1030  Friendly reminder, we have a [bug bounty
  1031  program](https://hackerone.com/tendermint).
  1032  
  1033  ### BREAKING CHANGES:
  1034  
  1035  - CLI/RPC/Config
  1036    - [rpc] [\#3984](https://github.com/tendermint/tendermint/issues/3984) Add `MempoolClient` interface to `Client` interface
  1037  
  1038  ### IMPROVEMENTS:
  1039  
  1040  - [rpc] [\#2010](https://github.com/tendermint/tendermint/issues/2010) Add NewHTTPWithClient and NewJSONRPCClientWithHTTPClient (note these and NewHTTP, NewJSONRPCClient functions panic if remote is invalid) (@gracenoah)
  1041  - [rpc] [\#3882](https://github.com/tendermint/tendermint/issues/3882) Add custom marshalers to proto messages to disable `omitempty`
  1042  - [deps] [\#3952](https://github.com/tendermint/tendermint/pull/3952) bump github.com/go-kit/kit from 0.6.0 to 0.9.0
  1043  - [deps] [\#3951](https://github.com/tendermint/tendermint/pull/3951) bump github.com/stretchr/testify from 1.3.0 to 1.4.0
  1044  - [deps] [\#3945](https://github.com/tendermint/tendermint/pull/3945) bump github.com/gorilla/websocket from 1.2.0 to 1.4.1
  1045  - [deps] [\#3948](https://github.com/tendermint/tendermint/pull/3948) bump github.com/libp2p/go-buffer-pool from 0.0.1 to 0.0.2
  1046  - [deps] [\#3943](https://github.com/tendermint/tendermint/pull/3943) bump github.com/fortytw2/leaktest from 1.2.0 to 1.3.0
  1047  - [deps] [\#3939](https://github.com/tendermint/tendermint/pull/3939) bump github.com/rs/cors from 1.6.0 to 1.7.0
  1048  - [deps] [\#3937](https://github.com/tendermint/tendermint/pull/3937) bump github.com/magiconair/properties from 1.8.0 to 1.8.1
  1049  - [deps] [\#3947](https://github.com/tendermint/tendermint/pull/3947) update gogo/protobuf version from v1.2.1 to v1.3.0
  1050  - [deps] [\#4001](https://github.com/tendermint/tendermint/pull/4001) bump github.com/tendermint/tm-db from 0.1.1 to 0.2.0
  1051  
  1052  ### BUG FIXES:
  1053  
  1054  - [consensus] [\#3908](https://github.com/tendermint/tendermint/issues/3908) Wait `timeout_commit` to pass even if `create_empty_blocks` is `false`
  1055  - [mempool] [\#3968](https://github.com/tendermint/tendermint/issues/3968) Fix memory loading error on 32-bit machines (@jon-certik)
  1056  
  1057  ## v0.32.3
  1058  
  1059  *August 28, 2019*
  1060  
  1061  @climber73 wrote the [Writing a Tendermint Core application in Java
  1062  (gRPC)](https://github.com/tendermint/tendermint/blob/master/docs/guides/java.md)
  1063  guide.
  1064  
  1065  Special thanks to external contributors on this release:
  1066  @gchaincl, @bluele, @climber73
  1067  
  1068  Friendly reminder, we have a [bug bounty
  1069  program](https://hackerone.com/tendermint).
  1070  
  1071  ### IMPROVEMENTS:
  1072  
  1073  - [consensus] [\#3839](https://github.com/tendermint/tendermint/issues/3839) Reduce "Error attempting to add vote" message severity (Error -> Info)
  1074  - [mempool] [\#3877](https://github.com/tendermint/tendermint/pull/3877) Make `max_tx_bytes` configurable instead of `max_msg_bytes` (@bluele)
  1075  - [privval] [\#3370](https://github.com/tendermint/tendermint/issues/3370) Refactor and simplify validator/kms connection handling. Please refer to [this comment](https://github.com/tendermint/tendermint/pull/3370#issue-257360971) for details
  1076  - [rpc] [\#3880](https://github.com/tendermint/tendermint/issues/3880) Document endpoints with `swagger`, introduce contract tests of implementation against documentation
  1077  
  1078  ### BUG FIXES:
  1079  
  1080  - [config] [\#3868](https://github.com/tendermint/tendermint/issues/3868) Move misplaced `max_msg_bytes` into mempool section (@bluele)
  1081  - [rpc] [\#3910](https://github.com/tendermint/tendermint/pull/3910) Fix DATA RACE in HTTP client (@gchaincl)
  1082  - [store] [\#3893](https://github.com/tendermint/tendermint/issues/3893) Fix "Unregistered interface types.Evidence" panic
  1083  
  1084  ## v0.32.2
  1085  
  1086  *July 31, 2019*
  1087  
  1088  Special thanks to external contributors on this release:
  1089  @ruseinov, @bluele, @guagualvcha
  1090  
  1091  Friendly reminder, we have a [bug bounty
  1092  program](https://hackerone.com/tendermint).
  1093  
  1094  ### BREAKING CHANGES:
  1095  
  1096  - Go API
  1097    - [libs] [\#3811](https://github.com/tendermint/tendermint/issues/3811) Remove `db` from libs in favor of `https://github.com/tendermint/tm-db`
  1098  
  1099  ### FEATURES:
  1100  
  1101  - [blockchain] [\#3561](https://github.com/tendermint/tendermint/issues/3561) Add early version of the new blockchain reactor, which is supposed to be more modular and testable compared to the old version. To try it, you'll have to change `version` in the config file, [here](https://github.com/tendermint/tendermint/blob/master/config/toml.go#L303) NOTE: It's not ready for a production yet. For further information, see [ADR-40](https://github.com/tendermint/tendermint/blob/master/docs/architecture/adr-040-blockchain-reactor-refactor.md) & [ADR-43](https://github.com/tendermint/tendermint/blob/master/docs/architecture/adr-043-blockchain-riri-org.md)
  1102  - [mempool] [\#3826](https://github.com/tendermint/tendermint/issues/3826) Make `max_msg_bytes` configurable(@bluele)
  1103  - [node] [\#3846](https://github.com/tendermint/tendermint/pull/3846) Allow replacing existing p2p.Reactor(s) using [`CustomReactors`
  1104    option](https://godoc.org/github.com/tendermint/tendermint/node#CustomReactors).
  1105    Warning: beware of accidental name clashes. Here is the list of existing
  1106    reactors: MEMPOOL, BLOCKCHAIN, CONSENSUS, EVIDENCE, PEX.
  1107  - [rpc] [\#3818](https://github.com/tendermint/tendermint/issues/3818) Make `max_body_bytes` and `max_header_bytes` configurable(@bluele)
  1108  - [rpc] [\#2252](https://github.com/tendermint/tendermint/issues/2252) Add `/broadcast_evidence` endpoint to submit double signing and other types of evidence
  1109  
  1110  ### IMPROVEMENTS:
  1111  
  1112  - [abci] [\#3809](https://github.com/tendermint/tendermint/issues/3809) Recover from application panics in `server/socket_server.go` to allow socket cleanup (@ruseinov)
  1113  - [p2p] [\#3664](https://github.com/tendermint/tendermint/issues/3664) p2p/conn: reuse buffer when write/read from secret connection(@guagualvcha)
  1114  - [p2p] [\#3834](https://github.com/tendermint/tendermint/issues/3834) Do not write 'Couldn't connect to any seeds' error log if there are no seeds in config file
  1115  - [rpc] [\#3076](https://github.com/tendermint/tendermint/issues/3076) Improve transaction search performance
  1116  
  1117  ### BUG FIXES:
  1118  
  1119  - [p2p] [\#3644](https://github.com/tendermint/tendermint/issues/3644) Fix error logging for connection stop (@defunctzombie)
  1120  - [rpc] [\#3813](https://github.com/tendermint/tendermint/issues/3813) Return err if page is incorrect (less than 0 or greater than total pages)
  1121  
  1122  ## v0.32.1
  1123  
  1124  *July 15, 2019*
  1125  
  1126  Special thanks to external contributors on this release:
  1127  @ParthDesai, @climber73, @jim380, @ashleyvega
  1128  
  1129  This release contains a minor enhancement to the ABCI and some breaking changes to our libs folder, namely:
  1130  - CheckTx requests include a `CheckTxType` enum that can be set to `Recheck` to indicate to the application that this transaction was already checked/validated and certain expensive operations (like checking signatures) can be skipped
  1131  - Removed various functions from `libs` pkgs
  1132  
  1133  Friendly reminder, we have a [bug bounty
  1134  program](https://hackerone.com/tendermint).
  1135  
  1136  ### BREAKING CHANGES:
  1137  
  1138  - Go API
  1139  
  1140    -  [abci] [\#2127](https://github.com/tendermint/tendermint/issues/2127) The CheckTx and DeliverTx methods in the ABCI `Application` interface now take structs  as arguments (RequestCheckTx and RequestDeliverTx, respectively), instead of just the raw tx bytes. This allows more information to be passed to these methods, for instance, indicating whether a tx has already been checked.
  1141    - [libs] Remove unused `db/debugDB` and `common/colors.go` & `errors/errors.go` files (@marbar3778)
  1142    - [libs] [\#2432](https://github.com/tendermint/tendermint/issues/2432) Remove unused `common/heap.go` file (@marbar3778)
  1143    - [libs] Remove unused `date.go`, `io.go`. Remove `GoPath()`, `Prompt()` and `IsDirEmpty()` functions from `os.go` (@marbar3778)
  1144    - [libs] Remove unused `FailRand()` func and minor clean up to `fail.go`(@marbar3778)
  1145  
  1146  ### FEATURES:
  1147  
  1148  - [node] Add variadic argument to `NewNode` to support functional options, allowing the Node to be more easily customized.
  1149  - [node][\#3730](https://github.com/tendermint/tendermint/pull/3730) Add `CustomReactors` option to `NewNode` allowing caller to pass
  1150    custom reactors to run inside Tendermint node (@ParthDesai)
  1151  - [abci] [\#2127](https://github.com/tendermint/tendermint/issues/2127)RequestCheckTx has a new field, `CheckTxType`, which can take values of `CheckTxType_New` and `CheckTxType_Recheck`, indicating whether this is a new tx being checked for the first time or whether this tx is being rechecked after a block commit. This allows applications to skip certain expensive operations, like signature checking, if they've already been done once. see [docs](https://github.com/tendermint/tendermint/blob/eddb433d7c082efbeaf8974413a36641519ee895/docs/spec/abci/apps.md#mempool-connection)
  1152  
  1153  ### IMPROVEMENTS:
  1154  
  1155  - [rpc] [\#3700](https://github.com/tendermint/tendermint/issues/3700) Make possible to set absolute paths for TLS cert and key (@climber73)
  1156  - [abci] [\#3513](https://github.com/tendermint/tendermint/issues/3513) Call the reqRes callback after the resCb so they always happen in the same order
  1157  
  1158  ### BUG FIXES:
  1159  
  1160  - [p2p] [\#3338](https://github.com/tendermint/tendermint/issues/3338) Prevent "sent next PEX request too soon" errors by not calling
  1161    ensurePeers outside of ensurePeersRoutine
  1162  - [behaviour] [\3772](https://github.com/tendermint/tendermint/pull/3772) Return correct reason in MessageOutOfOrder (@jim380)
  1163  - [config] [\#3723](https://github.com/tendermint/tendermint/issues/3723) Add consensus_params to testnet config generation; document time_iota_ms (@ashleyvega)
  1164  
  1165  
  1166  ## v0.32.0
  1167  
  1168  *June 25, 2019*
  1169  
  1170  Special thanks to external contributors on this release:
  1171  @needkane, @SebastianElvis, @andynog, @Yawning, @wooparadog
  1172  
  1173  This release contains breaking changes to our build and release processes, ABCI,
  1174  and the RPC, namely:
  1175  - Use Go modules instead of dep
  1176  - Bring active development to the `master` Github branch
  1177  - ABCI Tags are now Events - see
  1178    [docs](https://github.com/tendermint/tendermint/blob/60827f75623b92eff132dc0eff5b49d2025c591e/docs/spec/abci/abci.md#events)
  1179  - Bind RPC to localhost by default, not to the public interface [UPGRADING/RPC_Changes](./UPGRADING.md#rpc_changes)
  1180  
  1181  Friendly reminder, we have a [bug bounty
  1182  program](https://hackerone.com/tendermint).
  1183  
  1184  ### BREAKING CHANGES:
  1185  
  1186  * CLI/RPC/Config
  1187    - [cli] [\#3613](https://github.com/tendermint/tendermint/issues/3613) Switch from golang/dep to Go Modules to resolve dependencies:
  1188      It is recommended to switch to Go Modules if your project has tendermint as
  1189      a dependency. Read more on Modules here:
  1190      https://github.com/golang/go/wiki/Modules
  1191    - [config] [\#3632](https://github.com/tendermint/tendermint/pull/3632) Removed `leveldb` as generic
  1192      option for `db_backend`. Must be `goleveldb` or `cleveldb`.
  1193    - [rpc] [\#3616](https://github.com/tendermint/tendermint/issues/3616) Fix field names for `/block_results` response (eg. `results.DeliverTx`
  1194      -> `results.deliver_tx`). See docs for details.
  1195    - [rpc] [\#3724](https://github.com/tendermint/tendermint/issues/3724) RPC now binds to `127.0.0.1` by default instead of `0.0.0.0`
  1196  
  1197  * Apps
  1198    - [abci] [\#1859](https://github.com/tendermint/tendermint/issues/1859) `ResponseCheckTx`, `ResponseDeliverTx`, `ResponseBeginBlock`,
  1199      and `ResponseEndBlock` now include `Events` instead of `Tags`. Each `Event`
  1200      contains a `type` and a list of `attributes` (list of key-value pairs)
  1201      allowing for inclusion of multiple distinct events in each response.
  1202  
  1203  * Go API
  1204    - [abci] [\#3193](https://github.com/tendermint/tendermint/issues/3193) Use RequestDeliverTx and RequestCheckTx in the ABCI
  1205      Application interface
  1206    - [libs/db] [\#3632](https://github.com/tendermint/tendermint/pull/3632) Removed deprecated `LevelDBBackend` const
  1207      If you have `db_backend` set to `leveldb` in your config file, please
  1208      change it to `goleveldb` or `cleveldb`.
  1209    - [p2p] [\#3521](https://github.com/tendermint/tendermint/issues/3521) Remove NewNetAddressStringWithOptionalID
  1210  
  1211  * Blockchain Protocol
  1212  
  1213  * P2P Protocol
  1214  
  1215  ### FEATURES:
  1216  
  1217  ### IMPROVEMENTS:
  1218  - [abci/examples] [\#3659](https://github.com/tendermint/tendermint/issues/3659) Change validator update tx format in the `persistent_kvstore` to use base64 for pubkeys instead of hex (@needkane)
  1219  - [consensus] [\#3656](https://github.com/tendermint/tendermint/issues/3656) Exit if SwitchToConsensus fails
  1220  - [p2p] [\#3666](https://github.com/tendermint/tendermint/issues/3666) Add per channel telemetry to improve reactor observability
  1221  - [rpc] [\#3686](https://github.com/tendermint/tendermint/pull/3686) `HTTPClient#Call` returns wrapped errors, so a caller could use `errors.Cause` to retrieve an error code. (@wooparadog)
  1222  
  1223  ### BUG FIXES:
  1224  - [libs/db] [\#3717](https://github.com/tendermint/tendermint/issues/3717) Fixed the BoltDB backend's Batch.Delete implementation (@Yawning)
  1225  - [libs/db] [\#3718](https://github.com/tendermint/tendermint/issues/3718) Fixed the BoltDB backend's Get and Iterator implementation (@Yawning)
  1226  - [node] [\#3716](https://github.com/tendermint/tendermint/issues/3716) Fix a bug where `nil` is recorded as node's address
  1227  - [node] [\#3741](https://github.com/tendermint/tendermint/issues/3741) Fix profiler blocking the entire node
  1228  
  1229  *Tendermint 0.31 release series has reached End-Of-Life and is no longer supported.*
  1230  
  1231  ## v0.31.12
  1232  
  1233  *April 6, 2020*
  1234  
  1235  This security release fixes:
  1236  
  1237  ### Denial of Service 1
  1238  
  1239  Tendermint 0.33.2 and earlier does not limit the number of P2P connection requests.
  1240  For each p2p connection, Tendermint allocates ~0.5MB. Even though this
  1241  memory is garbage collected once the connection is terminated (due to duplicate
  1242  IP or reaching a maximum number of inbound peers), temporary memory spikes can
  1243  lead to OOM (Out-Of-Memory) exceptions.
  1244  
  1245  Tendermint 0.33.3, 0.32.10, and 0.31.12 limit the total number of P2P incoming
  1246  connection requests to to `p2p.max_num_inbound_peers +
  1247  len(p2p.unconditional_peer_ids)`.
  1248  
  1249  Notes:
  1250  
  1251  - Tendermint does not rate limit P2P connection requests per IP (an attacker
  1252    can saturate all the inbound slots);
  1253  - Tendermint does not rate limit HTTP(S) requests. If you expose any RPC
  1254    endpoints to the public, please make sure to put in place some protection
  1255    (https://www.nginx.com/blog/rate-limiting-nginx/). We may implement this in
  1256    the future ([\#1696](https://github.com/tendermint/tendermint/issues/1696)).
  1257  
  1258  ### Denial of Service 2
  1259  
  1260  Tendermint 0.33.2 and earlier does not reclaim `activeID` of a peer after it's
  1261  removed in `Mempool` reactor. This does not happen all the time. It only
  1262  happens when a connection fails (for any reason) before the Peer is created and
  1263  added to all reactors. `RemovePeer` is therefore called before `AddPeer`, which
  1264  leads to always growing memory (`activeIDs` map). The `activeIDs` map has a
  1265  maximum size of 65535 and the node will panic if this map reaches the maximum.
  1266  An attacker can create a lot of connection attempts (exploiting Denial of
  1267  Service 1), which ultimately will lead to the node panicking.
  1268  
  1269  Tendermint 0.33.3, 0.32.10, and 0.31.12 claim `activeID` for a peer in `InitPeer`,
  1270  which is executed before `MConnection` is started.
  1271  
  1272  Notes:
  1273  
  1274  - `InitPeer` function was added to all reactors to combat a similar issue -
  1275    [\#3338](https://github.com/tendermint/tendermint/issues/3338);
  1276  - Denial of Service 2 is independent of Denial of Service 1 and can be executed
  1277    without it.
  1278  
  1279  **All clients are recommended to upgrade**
  1280  
  1281  Special thanks to [fudongbai](https://hackerone.com/fudongbai) for finding
  1282  and reporting this.
  1283  
  1284  Friendly reminder, we have a [bug bounty
  1285  program](https://hackerone.com/tendermint).
  1286  
  1287  ### SECURITY:
  1288  
  1289  - [mempool] Reserve IDs in InitPeer instead of AddPeer (@tessr)
  1290  - [p2p] Limit the number of incoming connections (@melekes)
  1291  
  1292  ## v0.31.11
  1293  
  1294  *October 18, 2019*
  1295  
  1296  This security release fixes a vulnerability found in the `consensus` package,
  1297  where an attacker could construct a `BlockPartMessage` message in such a way
  1298  that it will lead to consensus failure. A few similar issues have been
  1299  identified and fixed here.
  1300  
  1301  **All clients are recommended to upgrade**
  1302  
  1303  Special thanks to [elvishacker](https://hackerone.com/elvishacker) for finding
  1304  and reporting this.
  1305  
  1306  Friendly reminder, we have a [bug bounty
  1307  program](https://hackerone.com/tendermint).
  1308  
  1309  ### BREAKING CHANGES:
  1310  
  1311  - Go API
  1312    - [consensus] Modify `WAL#Write` and `WAL#WriteSync` to return an error if
  1313      they fail to write a message
  1314  
  1315  ### SECURITY:
  1316  
  1317  - [consensus] Validate incoming messages more throughly
  1318  
  1319  ## v0.31.10
  1320  
  1321  *October 8, 2019*
  1322  
  1323  The previous patch was insufficient because the attacker could still find a way
  1324  to submit a `nil` pubkey by constructing a `PubKeyMultisigThreshold` pubkey
  1325  with `nil` subpubkeys for example.
  1326  
  1327  This release provides multiple fixes, which include recovering from panics when
  1328  accepting new peers and only allowing `ed25519` pubkeys.
  1329  
  1330  **All clients are recommended to upgrade**
  1331  
  1332  Special thanks to [fudongbai](https://hackerone.com/fudongbai) for pointing
  1333  this out.
  1334  
  1335  Friendly reminder, we have a [bug bounty
  1336  program](https://hackerone.com/tendermint).
  1337  
  1338  ### SECURITY:
  1339  
  1340  - [p2p] [\#4030](https://github.com/tendermint/tendermint/issues/4030) Only allow ed25519 pubkeys when connecting
  1341  
  1342  ## v0.31.9
  1343  
  1344  *October 1, 2019*
  1345  
  1346  This release fixes a major security vulnerability found in the `p2p` package.
  1347  All clients are recommended to upgrade. See
  1348  [\#4030](https://github.com/tendermint/tendermint/issues/4030) for details.
  1349  
  1350  Special thanks to [fudongbai](https://hackerone.com/fudongbai) for discovering
  1351  and reporting this issue.
  1352  
  1353  Friendly reminder, we have a [bug bounty
  1354  program](https://hackerone.com/tendermint).
  1355  
  1356  ### SECURITY:
  1357  
  1358  - [p2p] [\#4030](https://github.com/tendermint/tendermint/issues/4030) Fix for panic on nil public key send to a peer
  1359  
  1360  ### BUG FIXES:
  1361  
  1362  - [node] [\#3716](https://github.com/tendermint/tendermint/issues/3716) Fix a bug where `nil` is recorded as node's address
  1363  - [node] [\#3741](https://github.com/tendermint/tendermint/issues/3741) Fix profiler blocking the entire node
  1364  
  1365  ## v0.31.8
  1366  
  1367  *July 29, 2019*
  1368  
  1369  This releases fixes one bug in the PEX reactor and adds a `recover` to the Go's
  1370  ABCI server, which allows it to properly cleanup.
  1371  
  1372  ### IMPROVEMENTS:
  1373  - [abci] [\#3809](https://github.com/tendermint/tendermint/issues/3809) Recover from application panics in `server/socket_server.go` to allow socket cleanup (@ruseinov)
  1374  
  1375  ### BUG FIXES:
  1376  - [p2p] [\#3338](https://github.com/tendermint/tendermint/issues/3338) Prevent "sent next PEX request too soon" errors by not calling
  1377    ensurePeers outside of ensurePeersRoutine
  1378  
  1379  ## v0.31.7
  1380  
  1381  *June 3, 2019*
  1382  
  1383  This releases fixes a regression in the mempool introduced in v0.31.6.
  1384  The regression caused the invalid committed txs to be proposed in blocks over and
  1385  over again.
  1386  
  1387  ### BUG FIXES:
  1388  - [mempool] [\#3699](https://github.com/tendermint/tendermint/issues/3699) Remove all committed txs from the mempool.
  1389      This reverts the change from v0.31.6 where we only remove valid txs from the mempool.
  1390      Note this means malicious proposals can cause txs to be dropped from the
  1391      mempools of other nodes by including them in blocks before they are valid.
  1392      See [\#3322](https://github.com/tendermint/tendermint/issues/3322).
  1393  
  1394  ## v0.31.6
  1395  
  1396  *May 31st, 2019*
  1397  
  1398  This release contains many fixes and improvements, primarily for p2p functionality.
  1399  It also fixes a security issue in the mempool package.
  1400  
  1401  With this release, Tendermint now supports [boltdb](https://github.com/etcd-io/bbolt), although
  1402  in experimental mode. Feel free to try and report to us any findings/issues.
  1403  Note also that the build tags for compiling CLevelDB have changed.
  1404  
  1405  Special thanks to external contributors on this release:
  1406  @guagualvcha, @james-ray, @gregdhill, @climber73, @yutianwu,
  1407  @carlosflrs, @defunctzombie, @leoluk, @needkane, @CrocdileChan
  1408  
  1409  ### BREAKING CHANGES:
  1410  
  1411  * Go API
  1412    - [libs/common] Removed deprecated `PanicSanity`, `PanicCrisis`,
  1413      `PanicConsensus` and `PanicQ`
  1414    - [mempool, state] [\#2659](https://github.com/tendermint/tendermint/issues/2659) `Mempool` now an interface that lives in the mempool package.
  1415      See issue and PR for more details.
  1416    - [p2p] [\#3346](https://github.com/tendermint/tendermint/issues/3346) `Reactor#InitPeer` method is added to `Reactor` interface
  1417    - [types] [\#1648](https://github.com/tendermint/tendermint/issues/1648) `Commit#VoteSignBytes` signature was changed
  1418  
  1419  ### FEATURES:
  1420  - [node] [\#2659](https://github.com/tendermint/tendermint/issues/2659) Add `node.Mempool()` method, which allows you to access mempool
  1421  - [libs/db] [\#3604](https://github.com/tendermint/tendermint/pull/3604) Add experimental support for bolt db (etcd's fork of bolt) (@CrocdileChan)
  1422  
  1423  ### IMPROVEMENTS:
  1424  - [cli] [\#3585](https://github.com/tendermint/tendermint/issues/3585) Add `--keep-addr-book` option to `unsafe_reset_all` cmd to not
  1425    clear the address book (@climber73)
  1426  - [cli] [\#3160](https://github.com/tendermint/tendermint/issues/3160) Add
  1427    `--config=<path-to-config>` option to `testnet` cmd (@gregdhill)
  1428  - [cli] [\#3661](https://github.com/tendermint/tendermint/pull/3661) Add
  1429    `--hostname-suffix`, `--hostname` and `--random-monikers` options to `testnet`
  1430    cmd for greater peer address/identity generation flexibility.
  1431  - [crypto] [\#3672](https://github.com/tendermint/tendermint/issues/3672) Return more info in the `AddSignatureFromPubKey` error
  1432  - [cs/replay] [\#3460](https://github.com/tendermint/tendermint/issues/3460) Check appHash for each block
  1433  - [libs/db] [\#3611](https://github.com/tendermint/tendermint/issues/3611) Conditional compilation
  1434    * Use `cleveldb` tag instead of `gcc` to compile Tendermint with CLevelDB or
  1435      use `make build_c` / `make install_c` (full instructions can be found at
  1436      https://docs.tendermint.com/master/introduction/install.html#compile-with-cleveldb-support)
  1437    * Use `boltdb` tag to compile Tendermint with bolt db
  1438  - [node] [\#3362](https://github.com/tendermint/tendermint/issues/3362) Return an error if `persistent_peers` list is invalid (except
  1439    when IP lookup fails)
  1440  - [p2p] [\#3463](https://github.com/tendermint/tendermint/pull/3463) Do not log "Can't add peer's address to addrbook" error for a private peer (@guagualvcha)
  1441  - [p2p] [\#3531](https://github.com/tendermint/tendermint/issues/3531) Terminate session on nonce wrapping (@climber73)
  1442  - [pex] [\#3647](https://github.com/tendermint/tendermint/pull/3647) Dial seeds, if any, instead of crawling peers first (@defunctzombie)
  1443  - [rpc] [\#3534](https://github.com/tendermint/tendermint/pull/3534) Add support for batched requests/responses in JSON RPC
  1444  - [rpc] [\#3362](https://github.com/tendermint/tendermint/issues/3362) `/dial_seeds` & `/dial_peers` return errors if addresses are
  1445    incorrect (except when IP lookup fails)
  1446  
  1447  ### BUG FIXES:
  1448  - [consensus] [\#3067](https://github.com/tendermint/tendermint/issues/3067) Fix replay from appHeight==0 with validator set changes (@james-ray)
  1449  - [consensus] [\#3304](https://github.com/tendermint/tendermint/issues/3304) Create a peer state in consensus reactor before the peer
  1450    is started (@guagualvcha)
  1451  - [lite] [\#3669](https://github.com/tendermint/tendermint/issues/3669) Add context parameter to RPC Handlers in proxy routes (@yutianwu)
  1452  - [mempool] [\#3322](https://github.com/tendermint/tendermint/issues/3322) When a block is committed, only remove committed txs from the mempool
  1453  that were valid (ie. `ResponseDeliverTx.Code == 0`)
  1454  - [p2p] [\#3338](https://github.com/tendermint/tendermint/issues/3338) Ensure `RemovePeer` is always called before `InitPeer` (upon a peer
  1455    reconnecting to our node)
  1456  - [p2p] [\#3532](https://github.com/tendermint/tendermint/issues/3532) Limit the number of attempts to connect to a peer in seed mode
  1457    to 16 (as a result, the node will stop retrying after a 35 hours time window)
  1458  - [p2p] [\#3362](https://github.com/tendermint/tendermint/issues/3362) Allow inbound peers to be persistent, including for seed nodes.
  1459  - [pex] [\#3603](https://github.com/tendermint/tendermint/pull/3603) Dial seeds when addrbook needs more addresses (@defunctzombie)
  1460  
  1461  ### OTHERS:
  1462  - [networks] fixes ansible integration script (@carlosflrs)
  1463  
  1464  ## v0.31.5
  1465  
  1466  *April 16th, 2019*
  1467  
  1468  This release fixes a regression from v0.31.4 where, in existing chains that
  1469  were upgraded, `/validators` could return an empty validator set. This is true
  1470  for almost all heights, given the validator set remains the same.
  1471  
  1472  Special thanks to external contributors on this release:
  1473  @brapse, @guagualvcha, @dongsam, @phucc
  1474  
  1475  ### IMPROVEMENTS:
  1476  
  1477  - [libs/common] `CMap`: slight optimization in `Keys()` and `Values()` (@phucc)
  1478  - [gitignore] gitignore: add .vendor-new (@dongsam)
  1479  
  1480  ### BUG FIXES:
  1481  
  1482  - [state] [\#3537](https://github.com/tendermint/tendermint/pull/3537#issuecomment-482711833)
  1483    `LoadValidators`: do not return an empty validator set
  1484  - [blockchain] [\#3457](https://github.com/tendermint/tendermint/issues/3457)
  1485    Fix "peer did not send us anything" in `fast_sync` mode when under high pressure
  1486  
  1487  ## v0.31.4
  1488  
  1489  *April 12th, 2019*
  1490  
  1491  This release fixes a regression from v0.31.3 which used the peer's `SocketAddr` to add the peer to
  1492  the address book. This swallowed the peer's self-reported port which is important in case of reconnect.
  1493  It brings back `NetAddress()` to `NodeInfo` and uses it instead of `SocketAddr` for adding peers.
  1494  Additionally, it improves response time on the `/validators` or `/status` RPC endpoints.
  1495  As a side-effect it makes these RPC endpoint more difficult to DoS and fixes a performance degradation in `ExecCommitBlock`.
  1496  Also, it contains an [ADR](https://github.com/tendermint/tendermint/pull/3539) that proposes decoupling the
  1497  responsibility for peer behaviour from the `p2p.Switch` (by @brapse).
  1498  
  1499  Special thanks to external contributors on this release:
  1500  @brapse, @guagualvcha, @mydring
  1501  
  1502  ### IMPROVEMENTS:
  1503  
  1504  - [p2p] [\#3463](https://github.com/tendermint/tendermint/pull/3463) Do not log "Can't add peer's address to addrbook" error for a private peer
  1505  - [p2p] [\#3547](https://github.com/tendermint/tendermint/pull/3547) Fix a couple of annoying typos (@mdyring)
  1506  
  1507  ### BUG FIXES:
  1508  
  1509  - [docs] [\#3514](https://github.com/tendermint/tendermint/issues/3514) Fix block.Header.Time description (@melekes)
  1510  - [p2p] [\#2716](https://github.com/tendermint/tendermint/issues/2716) Check if we're already connected to peer right before dialing it (@melekes)
  1511  - [p2p] [\#3545](https://github.com/tendermint/tendermint/issues/3545) Add back `NetAddress()` to `NodeInfo` and use it instead of peer's `SocketAddr()` when adding a peer to the `PEXReactor` (potential fix for [\#3532](https://github.com/tendermint/tendermint/issues/3532))
  1512  - [state] [\#3438](https://github.com/tendermint/tendermint/pull/3438)
  1513    Persist validators every 100000 blocks even if no changes to the set
  1514    occurred (@guagualvcha). This
  1515    1) Prevents possible DoS attack using `/validators` or `/status` RPC
  1516    endpoints. Before response time was growing linearly with height if no
  1517    changes were made to the validator set.
  1518    2) Fixes performance degradation in `ExecCommitBlock` where we call
  1519    `LoadValidators` for each `Evidence` in the block.
  1520  
  1521  ## v0.31.3
  1522  
  1523  *April 1st, 2019*
  1524  
  1525  This release includes two security sensitive fixes: it ensures generated private
  1526  keys are valid, and it prevents certain DNS lookups that would cause the node to
  1527  panic if the lookup failed.
  1528  
  1529  ### BREAKING CHANGES:
  1530  * Go API
  1531    - [crypto/secp256k1] [\#3439](https://github.com/tendermint/tendermint/issues/3439)
  1532      The `secp256k1.GenPrivKeySecp256k1` function has changed to guarantee that it returns a valid key, which means it
  1533      will return a different private key than in previous versions for the same secret.
  1534  
  1535  ### BUG FIXES:
  1536  
  1537  - [crypto/secp256k1] [\#3439](https://github.com/tendermint/tendermint/issues/3439)
  1538      Ensure generated private keys are valid by randomly sampling until a valid key is found.
  1539      Previously, it was possible (though rare!) to generate keys that exceeded the curve order.
  1540      Such keys would lead to invalid signatures.
  1541  - [p2p] [\#3522](https://github.com/tendermint/tendermint/issues/3522) Memoize
  1542    socket address in peer connections to avoid DNS lookups. Previously, failed
  1543    DNS lookups could cause the node to panic.
  1544  
  1545  ## v0.31.2
  1546  
  1547  *March 30th, 2019*
  1548  
  1549  This release fixes a regression from v0.31.1 where Tendermint panics under
  1550  mempool load for external ABCI apps.
  1551  
  1552  Special thanks to external contributors on this release:
  1553  @guagualvcha
  1554  
  1555  ### BREAKING CHANGES:
  1556  
  1557  * CLI/RPC/Config
  1558  
  1559  * Apps
  1560  
  1561  * Go API
  1562    - [libs/autofile] [\#3504](https://github.com/tendermint/tendermint/issues/3504) Remove unused code in autofile package. Deleted functions: `Group.Search`, `Group.FindLast`, `GroupReader.ReadLine`, `GroupReader.PushLine`, `MakeSimpleSearchFunc` (@guagualvcha)
  1563  
  1564  * Blockchain Protocol
  1565  
  1566  * P2P Protocol
  1567  
  1568  ### FEATURES:
  1569  
  1570  ### IMPROVEMENTS:
  1571  
  1572  - [circle] [\#3497](https://github.com/tendermint/tendermint/issues/3497) Move release management to CircleCI
  1573  
  1574  ### BUG FIXES:
  1575  
  1576  - [mempool] [\#3512](https://github.com/tendermint/tendermint/issues/3512) Fix panic from concurrent access to txsMap, a regression for external ABCI apps introduced in v0.31.1
  1577  
  1578  ## v0.31.1
  1579  
  1580  *March 27th, 2019*
  1581  
  1582  This release contains a major improvement for the mempool that reduce the amount of sent data by about 30%
  1583  (see some numbers below).
  1584  It also fixes a memory leak in the mempool and adds TLS support to the RPC server by providing a certificate and key in the config.
  1585  
  1586  Special thanks to external contributors on this release:
  1587  @brapse, @guagualvcha, @HaoyangLiu, @needkane, @TraceBundy
  1588  
  1589  ### BREAKING CHANGES:
  1590  
  1591  * CLI/RPC/Config
  1592  
  1593  * Apps
  1594  
  1595  * Go API
  1596    - [crypto] [\#3426](https://github.com/tendermint/tendermint/pull/3426) Remove `Ripemd160` helper method (@needkane)
  1597    - [libs/common] [\#3429](https://github.com/tendermint/tendermint/pull/3429) Remove `RepeatTimer` (also `TimerMaker` and `Ticker` interface)
  1598    - [rpc/client] [\#3458](https://github.com/tendermint/tendermint/issues/3458) Include `NetworkClient` interface into `Client` interface
  1599    - [types] [\#3448](https://github.com/tendermint/tendermint/issues/3448) Remove method `PB2TM.ConsensusParams`
  1600  
  1601  * Blockchain Protocol
  1602  
  1603  * P2P Protocol
  1604  
  1605  ### FEATURES:
  1606  
  1607   - [rpc] [\#3419](https://github.com/tendermint/tendermint/issues/3419) Start HTTPS server if `rpc.tls_cert_file` and `rpc.tls_key_file` are provided in the config (@guagualvcha)
  1608  
  1609  ### IMPROVEMENTS:
  1610  
  1611  - [docs] [\#3140](https://github.com/tendermint/tendermint/issues/3140) Formalize proposer election algorithm properties
  1612  - [docs] [\#3482](https://github.com/tendermint/tendermint/issues/3482) Fix broken links (@brapse)
  1613  - [mempool] [\#2778](https://github.com/tendermint/tendermint/issues/2778) No longer send txs back to peers who sent it to you.
  1614  Also, limit to 65536 active peers.
  1615  This vastly improves the bandwidth consumption of nodes.
  1616  For instance, for a 4 node localnet, in a test sending 250byte txs for 120 sec. at 500 txs/sec (total of 15MB):
  1617    - total bytes received from 1st node:
  1618       - before: 42793967 (43MB)
  1619       - after: 30003256 (30MB)
  1620    - total bytes sent to 1st node:
  1621       - before: 30569339 (30MB)
  1622       - after: 19304964 (19MB)
  1623  - [p2p] [\#3475](https://github.com/tendermint/tendermint/issues/3475) Simplify `GetSelectionWithBias` for addressbook (@guagualvcha)
  1624  - [rpc/lib/client] [\#3430](https://github.com/tendermint/tendermint/issues/3430) Disable compression for HTTP client to prevent GZIP-bomb DoS attacks (@guagualvcha)
  1625  
  1626  ### BUG FIXES:
  1627  
  1628  - [blockchain] [\#2699](https://github.com/tendermint/tendermint/issues/2699) Update the maxHeight when a peer is removed
  1629  - [mempool] [\#3478](https://github.com/tendermint/tendermint/issues/3478) Fix memory-leak related to `broadcastTxRoutine` (@HaoyangLiu)
  1630  
  1631  
  1632  ## v0.31.0
  1633  
  1634  *March 16th, 2019*
  1635  
  1636  Special thanks to external contributors on this release:
  1637  @danil-lashin, @guagualvcha, @siburu, @silasdavis, @srmo, @Stumble, @svenstaro
  1638  
  1639  This release is primarily about the new pubsub implementation, dubbed `pubsub 2.0`, and related changes,
  1640  like configurable limits on the number of active RPC subscriptions at a time (`max_subscription_clients`).
  1641  Pubsub 2.0 is an improved version of the older pubsub that is non-blocking and has a nicer API.
  1642  Note the improved pubsub API also resulted in some improvements to the HTTPClient interface and the API for WebSocket subscriptions.
  1643  This release also adds a configurable limit to the mempool size (`max_txs_bytes`, default 1GB)
  1644  and a configurable timeout for the `/broadcast_tx_commit` endpoint.
  1645  
  1646  See the [v0.31.0
  1647  Milestone](https://github.com/tendermint/tendermint/milestone/19?closed=1) for
  1648  more details.
  1649  
  1650  Friendly reminder, we have a [bug bounty
  1651  program](https://hackerone.com/tendermint).
  1652  
  1653  ### BREAKING CHANGES:
  1654  
  1655  * CLI/RPC/Config
  1656    - [config] [\#2920](https://github.com/tendermint/tendermint/issues/2920) Remove `consensus.blocktime_iota` parameter
  1657    - [rpc] [\#3227](https://github.com/tendermint/tendermint/issues/3227) New PubSub design does not block on clients when publishing
  1658      messages. Slow clients may miss messages and receive an error, terminating
  1659      the subscription.
  1660    - [rpc] [\#3269](https://github.com/tendermint/tendermint/issues/2826) Limit number of unique clientIDs with open subscriptions. Configurable via `rpc.max_subscription_clients`
  1661    - [rpc] [\#3269](https://github.com/tendermint/tendermint/issues/2826) Limit number of unique queries a given client can subscribe to at once. Configurable via `rpc.max_subscriptions_per_client`.
  1662    - [rpc] [\#3435](https://github.com/tendermint/tendermint/issues/3435) Default ReadTimeout and WriteTimeout changed to 10s. WriteTimeout can increased by setting `rpc.timeout_broadcast_tx_commit` in the config.
  1663    - [rpc/client] [\#3269](https://github.com/tendermint/tendermint/issues/3269) Update `EventsClient` interface to reflect new pubsub/eventBus API [ADR-33](https://github.com/tendermint/tendermint/blob/develop/docs/architecture/adr-033-pubsub.md). This includes `Subscribe`, `Unsubscribe`, and `UnsubscribeAll` methods.
  1664  
  1665  * Apps
  1666    - [abci] [\#3403](https://github.com/tendermint/tendermint/issues/3403) Remove `time_iota_ms` from BlockParams. This is a
  1667      ConsensusParam but need not be exposed to the app for now.
  1668    - [abci] [\#2920](https://github.com/tendermint/tendermint/issues/2920) Rename `consensus_params.block_size` to `consensus_params.block` in ABCI ConsensusParams
  1669  
  1670  * Go API
  1671    - [libs/common] TrapSignal accepts logger as a first parameter and does not block anymore
  1672      * previously it was dumping "captured ..." msg to os.Stdout
  1673      * TrapSignal should not be responsible for blocking thread of execution
  1674    - [libs/db] [\#3397](https://github.com/tendermint/tendermint/pull/3397) Add possibility to `Close()` `Batch` to prevent memory leak when using ClevelDB. (@Stumble)
  1675    - [types] [\#3354](https://github.com/tendermint/tendermint/issues/3354) Remove RoundState from EventDataRoundState
  1676    - [rpc] [\#3435](https://github.com/tendermint/tendermint/issues/3435) `StartHTTPServer` / `StartHTTPAndTLSServer` now require a Config (use `rpcserver.DefaultConfig`)
  1677  
  1678  * Blockchain Protocol
  1679  
  1680  * P2P Protocol
  1681  
  1682  ### FEATURES:
  1683  - [config] [\#3269](https://github.com/tendermint/tendermint/issues/2826) New configuration values for controlling RPC subscriptions:
  1684      - `rpc.max_subscription_clients` sets the maximum number of unique clients
  1685        with open subscriptions
  1686      - `rpc.max_subscriptions_per_client`sets the maximum number of unique
  1687        subscriptions from a given client
  1688      - `rpc.timeout_broadcast_tx_commit` sets the time to wait for a tx to be committed during `/broadcast_tx_commit`
  1689  - [types] [\#2920](https://github.com/tendermint/tendermint/issues/2920) Add `time_iota_ms` to block's consensus parameters (not exposed to the application)
  1690  - [lite] [\#3269](https://github.com/tendermint/tendermint/issues/3269) Add `/unsubscribe_all` endpoint to unsubscribe from all events
  1691  - [mempool] [\#3079](https://github.com/tendermint/tendermint/issues/3079) Bound mempool memory usage via the `mempool.max_txs_bytes` configuration value. Set to 1GB by default. The mempool's current `txs_total_bytes` is exposed via `total_bytes` field in
  1692    `/num_unconfirmed_txs` and `/unconfirmed_txs` RPC endpoints.
  1693  
  1694  ### IMPROVEMENTS:
  1695  - [all] [\#3385](https://github.com/tendermint/tendermint/issues/3385), [\#3386](https://github.com/tendermint/tendermint/issues/3386) Various linting improvements
  1696  - [crypto] [\#3371](https://github.com/tendermint/tendermint/issues/3371) Copy in secp256k1 package from go-ethereum instead of importing
  1697    go-ethereum (@silasdavis)
  1698  - [deps] [\#3382](https://github.com/tendermint/tendermint/issues/3382) Don't pin repos without releases
  1699  - [deps] [\#3357](https://github.com/tendermint/tendermint/issues/3357), [\#3389](https://github.com/tendermint/tendermint/issues/3389), [\#3392](https://github.com/tendermint/tendermint/issues/3392) Update gogo/protobuf, golang/protobuf, levigo, golang.org/x/crypto
  1700  - [libs/common] [\#3238](https://github.com/tendermint/tendermint/issues/3238) exit with zero (0) code upon receiving SIGTERM/SIGINT
  1701  - [libs/db] [\#3378](https://github.com/tendermint/tendermint/issues/3378) CLevelDB#Stats now returns the following properties:
  1702    - leveldb.num-files-at-level{n}
  1703    - leveldb.stats
  1704    - leveldb.sstables
  1705    - leveldb.blockpool
  1706    - leveldb.cachedblock
  1707    - leveldb.openedtables
  1708    - leveldb.alivesnaps
  1709    - leveldb.aliveiters
  1710  - [privval] [\#3351](https://github.com/tendermint/tendermint/pull/3351) First part of larger refactoring that clarifies and separates concerns in the privval package.
  1711  
  1712  ### BUG FIXES:
  1713  - [blockchain] [\#3358](https://github.com/tendermint/tendermint/pull/3358) Fix timer leak in `BlockPool` (@guagualvcha)
  1714  - [cmd] [\#3408](https://github.com/tendermint/tendermint/issues/3408) Fix `testnet` command's panic when creating non-validator configs (using `--n` flag) (@srmo)
  1715  - [libs/db/remotedb/grpcdb] [\#3402](https://github.com/tendermint/tendermint/issues/3402) Close Iterator/ReverseIterator after use
  1716  - [libs/pubsub] [\#951](https://github.com/tendermint/tendermint/issues/951), [\#1880](https://github.com/tendermint/tendermint/issues/1880) Use non-blocking send when dispatching messages [ADR-33](https://github.com/tendermint/tendermint/blob/develop/docs/architecture/adr-033-pubsub.md)
  1717  - [lite] [\#3364](https://github.com/tendermint/tendermint/issues/3364) Fix `/validators` and `/abci_query` proxy endpoints
  1718    (@guagualvcha)
  1719  - [p2p/conn] [\#3347](https://github.com/tendermint/tendermint/issues/3347) Reject all-zero shared secrets in the Diffie-Hellman step of secret-connection
  1720  - [p2p] [\#3369](https://github.com/tendermint/tendermint/issues/3369) Do not panic when filter times out
  1721  - [p2p] [\#3359](https://github.com/tendermint/tendermint/pull/3359) Fix reconnecting report duplicate ID error due to race condition between adding peer to peerSet and starting it (@guagualvcha)
  1722  
  1723  ## v0.30.2
  1724  
  1725  *March 10th, 2019*
  1726  
  1727  This release fixes a CLevelDB memory leak. It was happening because we were not
  1728  closing the WriteBatch object after use. See [levigo's
  1729  godoc](https://godoc.org/github.com/jmhodges/levigo#WriteBatch.Close) for the
  1730  Close method. Special thanks goes to @Stumble who both reported an issue in
  1731  [cosmos-sdk](https://github.com/cosmos/cosmos-sdk/issues/3842) and provided a
  1732  fix here.
  1733  
  1734  ### BREAKING CHANGES:
  1735  
  1736  * Go API
  1737    - [libs/db] [\#3842](https://github.com/cosmos/cosmos-sdk/issues/3842) Add Close() method to Batch interface (@Stumble)
  1738  
  1739  ### BUG FIXES:
  1740  - [libs/db] [\#3842](https://github.com/cosmos/cosmos-sdk/issues/3842) Fix CLevelDB memory leak (@Stumble)
  1741  
  1742  ## v0.30.1
  1743  
  1744  *February 20th, 2019*
  1745  
  1746  This release fixes a consensus halt and a DataCorruptionError after restart
  1747  discovered in `game_of_stakes_6`. It also fixes a security issue in the p2p
  1748  handshake by authenticating the NetAddress.ID of the peer we're dialing.
  1749  
  1750  ### IMPROVEMENTS:
  1751  
  1752  * [config] [\#3291](https://github.com/tendermint/tendermint/issues/3291) Make
  1753    config.ResetTestRootWithChainID() create concurrency-safe test directories.
  1754  
  1755  ### BUG FIXES:
  1756  
  1757  * [consensus] [\#3295](https://github.com/tendermint/tendermint/issues/3295)
  1758    Flush WAL on stop to prevent data corruption during graceful shutdown.
  1759  * [consensus] [\#3302](https://github.com/tendermint/tendermint/issues/3302)
  1760    Fix possible halt by resetting TriggeredTimeoutPrecommit before starting next height.
  1761  * [rpc] [\#3251](https://github.com/tendermint/tendermint/issues/3251) Fix
  1762    `/net_info#peers#remote_ip` format. New format spec:
  1763    * dotted decimal ("192.0.2.1"), if ip is an IPv4 or IP4-mapped IPv6 address
  1764    * IPv6 ("2001:db8::1"), if ip is a valid IPv6 address
  1765  * [cmd] [\#3314](https://github.com/tendermint/tendermint/issues/3314) Return
  1766    an error on `show_validator` when the private validator file does not exist.
  1767  * [p2p] [\#3010](https://github.com/tendermint/tendermint/issues/3010#issuecomment-464287627)
  1768    Authenticate a peer against its NetAddress.ID when dialing.
  1769  
  1770  ## v0.30.0
  1771  
  1772  *February 8th, 2019*
  1773  
  1774  This release fixes yet another issue with the proposer selection algorithm.
  1775  We hope it's the last one, but we won't be surprised if it's not.
  1776  We plan to one day expose the selection algorithm more directly to
  1777  the application ([\#3285](https://github.com/tendermint/tendermint/issues/3285)), and even to support randomness ([\#763](https://github.com/tendermint/tendermint/issues/763)).
  1778  For more, see issues marked
  1779  [proposer-selection](https://github.com/tendermint/tendermint/labels/proposer-selection).
  1780  
  1781  This release also includes a fix to prevent Tendermint from including the same
  1782  piece of evidence in more than one block. This issue was reported by @chengwenxi in our
  1783  [bug bounty program](https://hackerone.com/tendermint).
  1784  
  1785  ### BREAKING CHANGES:
  1786  
  1787  * Apps
  1788    - [state] [\#3222](https://github.com/tendermint/tendermint/issues/3222)
  1789      Duplicate updates for the same validator are forbidden. Apps must ensure
  1790      that a given `ResponseEndBlock.ValidatorUpdates` contains only one entry per pubkey.
  1791  
  1792  * Go API
  1793    - [types] [\#3222](https://github.com/tendermint/tendermint/issues/3222)
  1794      Remove `Add` and `Update` methods from `ValidatorSet` in favor of new
  1795      `UpdateWithChangeSet`. This allows updates to be applied as a set, instead of
  1796      one at a time.
  1797  
  1798  * Block Protocol
  1799    - [state] [\#3286](https://github.com/tendermint/tendermint/issues/3286) Blocks that include already committed evidence are invalid.
  1800  
  1801  * P2P Protocol
  1802    - [consensus] [\#3222](https://github.com/tendermint/tendermint/issues/3222)
  1803      Validator updates are applied as a set, instead of one at a time, thus
  1804      impacting the proposer priority calculation. This ensures that the proposer
  1805      selection algorithm does not depend on the order of updates in
  1806      `ResponseEndBlock.ValidatorUpdates`.
  1807  
  1808  ### IMPROVEMENTS:
  1809  - [crypto] [\#3279](https://github.com/tendermint/tendermint/issues/3279) Use `btcec.S256().N` directly instead of hard coding a copy.
  1810  
  1811  ### BUG FIXES:
  1812  - [state] [\#3222](https://github.com/tendermint/tendermint/issues/3222) Fix validator set updates so they are applied as a set, rather
  1813    than one at a time. This makes the proposer selection algorithm independent of
  1814    the order of updates in `ResponseEndBlock.ValidatorUpdates`.
  1815  - [evidence] [\#3286](https://github.com/tendermint/tendermint/issues/3286) Don't add committed evidence to evidence pool.
  1816  
  1817  ## v0.29.2
  1818  
  1819  *February 7th, 2019*
  1820  
  1821  Special thanks to external contributors on this release:
  1822  @ackratos, @rickyyangz
  1823  
  1824  **Note**: This release contains security sensitive patches in the `p2p` and
  1825  `crypto` packages:
  1826  - p2p:
  1827    - Partial fix for MITM attacks on the p2p connection. MITM conditions may
  1828      still exist. See [\#3010](https://github.com/tendermint/tendermint/issues/3010).
  1829  - crypto:
  1830    - Eliminate our fork of `btcd` and use the `btcd/btcec` library directly for
  1831      native secp256k1 signing. Note we still modify the signature encoding to
  1832      prevent malleability.
  1833    - Support the libsecp256k1 library via CGo through the `go-ethereum/crypto/secp256k1` package.
  1834    - Eliminate MixEntropy functions
  1835  
  1836  ### BREAKING CHANGES:
  1837  
  1838  * Go API
  1839    - [crypto] [\#3278](https://github.com/tendermint/tendermint/issues/3278) Remove
  1840      MixEntropy functions
  1841    - [types] [\#3245](https://github.com/tendermint/tendermint/issues/3245) Commit uses `type CommitSig Vote` instead of `Vote` directly.
  1842      In preparation for removing redundant fields from the commit [\#1648](https://github.com/tendermint/tendermint/issues/1648)
  1843  
  1844  ### IMPROVEMENTS:
  1845  - [consensus] [\#3246](https://github.com/tendermint/tendermint/issues/3246) Better logging and notes on recovery for corrupted WAL file
  1846  - [crypto] [\#3163](https://github.com/tendermint/tendermint/issues/3163) Use ethereum's libsecp256k1 go-wrapper for signatures when cgo is available
  1847  - [crypto] [\#3162](https://github.com/tendermint/tendermint/issues/3162) Wrap btcd instead of forking it to keep up with fixes (used if cgo is not available)
  1848  - [makefile] [\#3233](https://github.com/tendermint/tendermint/issues/3233) Use golangci-lint instead of go-metalinter
  1849  - [tools] [\#3218](https://github.com/tendermint/tendermint/issues/3218) Add go-deadlock tool to help detect deadlocks
  1850  - [tools] [\#3106](https://github.com/tendermint/tendermint/issues/3106) Add tm-signer-harness test harness for remote signers
  1851  - [tests] [\#3258](https://github.com/tendermint/tendermint/issues/3258) Fixed a bunch of non-deterministic test failures
  1852  
  1853  ### BUG FIXES:
  1854  - [node] [\#3186](https://github.com/tendermint/tendermint/issues/3186) EventBus and indexerService should be started before first block (for replay last block on handshake) execution (@ackratos)
  1855  - [p2p] [\#3232](https://github.com/tendermint/tendermint/issues/3232) Fix infinite loop leading to addrbook deadlock for seed nodes
  1856  - [p2p] [\#3247](https://github.com/tendermint/tendermint/issues/3247) Fix panic in SeedMode when calling FlushStop and OnStop
  1857    concurrently
  1858  - [p2p] [\#3040](https://github.com/tendermint/tendermint/issues/3040) Fix MITM on secret connection by checking low-order points
  1859  - [privval] [\#3258](https://github.com/tendermint/tendermint/issues/3258) Fix race between sign requests and ping requests in socket that was causing messages to be corrupted
  1860  
  1861  ## v0.29.1
  1862  
  1863  *January 24, 2019*
  1864  
  1865  Special thanks to external contributors on this release:
  1866  @infinytum, @gauthamzz
  1867  
  1868  This release contains two important fixes: one for p2p layer where we sometimes
  1869  were not closing connections and one for consensus layer where consensus with
  1870  no empty blocks (`create_empty_blocks = false`) could halt.
  1871  
  1872  Friendly reminder, we have a [bug bounty
  1873  program](https://hackerone.com/tendermint).
  1874  
  1875  ### IMPROVEMENTS:
  1876  - [pex] [\#3037](https://github.com/tendermint/tendermint/issues/3037) Only log "Reached max attempts to dial" once
  1877  - [rpc] [\#3159](https://github.com/tendermint/tendermint/issues/3159) Expose
  1878    `triggered_timeout_commit` in the `/dump_consensus_state`
  1879  
  1880  ### BUG FIXES:
  1881  - [consensus] [\#3199](https://github.com/tendermint/tendermint/issues/3199) Fix consensus halt with no empty blocks from not resetting triggeredTimeoutCommit
  1882  - [p2p] [\#2967](https://github.com/tendermint/tendermint/issues/2967) Fix file descriptor leak
  1883  
  1884  ## v0.29.0
  1885  
  1886  *January 21, 2019*
  1887  
  1888  Special thanks to external contributors on this release:
  1889  @bradyjoestar, @kunaldhariwal, @gauthamzz, @hrharder
  1890  
  1891  This release is primarily about making some breaking changes to
  1892  the Block protocol version before Cosmos launch, and to fixing more issues
  1893  in the proposer selection algorithm discovered on Cosmos testnets.
  1894  
  1895  The Block protocol changes include using a standard Merkle tree format (RFC 6962),
  1896  fixing some inconsistencies between field orders in Vote and Proposal structs,
  1897  and constraining the hash of the ConsensusParams to include only a few fields.
  1898  
  1899  The proposer selection algorithm saw significant progress,
  1900  including a [formal proof by @cwgoes for the base-case in Idris](https://github.com/cwgoes/tm-proposer-idris)
  1901  and a [much more detailed specification (still in progress) by
  1902  @ancazamfir](https://github.com/tendermint/tendermint/pull/3140).
  1903  
  1904  Fixes to the proposer selection algorithm include normalizing the proposer
  1905  priorities to mitigate the effects of large changes to the validator set.
  1906  That said, we just discovered [another bug](https://github.com/tendermint/tendermint/issues/3181),
  1907  which will be fixed in the next breaking release.
  1908  
  1909  While we are trying to stabilize the Block protocol to preserve compatibility
  1910  with old chains, there may be some final changes yet to come before Cosmos
  1911  launch as we continue to audit and test the software.
  1912  
  1913  Friendly reminder, we have a [bug bounty
  1914  program](https://hackerone.com/tendermint).
  1915  
  1916  ### BREAKING CHANGES:
  1917  
  1918  * CLI/RPC/Config
  1919  
  1920  * Apps
  1921    - [state] [\#3049](https://github.com/tendermint/tendermint/issues/3049) Total voting power of the validator set is upper bounded by
  1922      `MaxInt64 / 8`. Apps must ensure they do not return changes to the validator
  1923      set that cause this maximum to be exceeded.
  1924  
  1925  * Go API
  1926    - [node] [\#3082](https://github.com/tendermint/tendermint/issues/3082) MetricsProvider now requires you to pass a chain ID
  1927    - [types] [\#2713](https://github.com/tendermint/tendermint/issues/2713) Rename `TxProof.LeafHash` to `TxProof.Leaf`
  1928    - [crypto/merkle] [\#2713](https://github.com/tendermint/tendermint/issues/2713) `SimpleProof.Verify` takes a `leaf` instead of a
  1929      `leafHash` and performs the hashing itself
  1930  
  1931  * Blockchain Protocol
  1932    * [crypto/merkle] [\#2713](https://github.com/tendermint/tendermint/issues/2713) Merkle trees now match the RFC 6962 specification
  1933    * [types] [\#3078](https://github.com/tendermint/tendermint/issues/3078) Re-order Timestamp and BlockID in CanonicalVote so it's
  1934      consistent with CanonicalProposal (BlockID comes
  1935      first)
  1936    * [types] [\#3165](https://github.com/tendermint/tendermint/issues/3165) Hash of ConsensusParams only includes BlockSize.MaxBytes and
  1937      BlockSize.MaxGas
  1938  
  1939  * P2P Protocol
  1940    - [consensus] [\#3049](https://github.com/tendermint/tendermint/issues/3049) Normalize priorities to not exceed `2*TotalVotingPower` to mitigate unfair proposer selection
  1941      heavily preferring earlier joined validators in the case of an early bonded large validator unbonding
  1942  
  1943  ### FEATURES:
  1944  
  1945  ### IMPROVEMENTS:
  1946  - [rpc] [\#3065](https://github.com/tendermint/tendermint/issues/3065) Return maxPerPage (100), not defaultPerPage (30) if `per_page` is greater than the max 100.
  1947  - [instrumentation] [\#3082](https://github.com/tendermint/tendermint/issues/3082) Add `chain_id` label for all metrics
  1948  
  1949  ### BUG FIXES:
  1950  - [crypto] [\#3164](https://github.com/tendermint/tendermint/issues/3164) Update `btcd` fork for rare signRFC6979 bug
  1951  - [lite] [\#3171](https://github.com/tendermint/tendermint/issues/3171) Fix verifying large validator set changes
  1952  - [log] [\#3125](https://github.com/tendermint/tendermint/issues/3125) Fix year format
  1953  - [mempool] [\#3168](https://github.com/tendermint/tendermint/issues/3168) Limit tx size to fit in the max reactor msg size
  1954  - [scripts] [\#3147](https://github.com/tendermint/tendermint/issues/3147) Fix json2wal for large block parts (@bradyjoestar)
  1955  
  1956  ## v0.28.1
  1957  
  1958  *January 18th, 2019*
  1959  
  1960  Special thanks to external contributors on this release:
  1961  @HaoyangLiu
  1962  
  1963  Friendly reminder, we have a [bug bounty
  1964  program](https://hackerone.com/tendermint).
  1965  
  1966  ### BUG FIXES:
  1967  - [consensus] Fix consensus halt from proposing blocks with too much evidence
  1968  
  1969  ## v0.28.0
  1970  
  1971  *January 16th, 2019*
  1972  
  1973  Special thanks to external contributors on this release:
  1974  @fmauricios, @gianfelipe93, @husio, @needkane, @srmo, @yutianwu
  1975  
  1976  This release is primarily about upgrades to the `privval` system -
  1977  separating the `priv_validator.json` into distinct config and data files, and
  1978  refactoring the socket validator to support reconnections.
  1979  
  1980  **Note:** Please backup your existing `priv_validator.json` before using this
  1981  version.
  1982  
  1983  See [UPGRADING.md](UPGRADING.md) for more details.
  1984  
  1985  ### BREAKING CHANGES:
  1986  
  1987  * CLI/RPC/Config
  1988    - [cli] Removed `--proxy_app=dummy` option. Use `kvstore` (`persistent_kvstore`) instead.
  1989    - [cli] Renamed `--proxy_app=nilapp` to `--proxy_app=noop`.
  1990    - [config] [\#2992](https://github.com/tendermint/tendermint/issues/2992) `allow_duplicate_ip` is now set to false
  1991    - [privval] [\#1181](https://github.com/tendermint/tendermint/issues/1181) Split `priv_validator.json` into immutable (`config/priv_validator_key.json`) and mutable (`data/priv_validator_state.json`) parts (@yutianwu)
  1992    - [privval] [\#2926](https://github.com/tendermint/tendermint/issues/2926) Split up `PubKeyMsg` into `PubKeyRequest` and `PubKeyResponse` to be consistent with other message types
  1993    - [privval] [\#2923](https://github.com/tendermint/tendermint/issues/2923) Listen for unix socket connections instead of dialing them
  1994  
  1995  * Apps
  1996  
  1997  * Go API
  1998    - [types] [\#2981](https://github.com/tendermint/tendermint/issues/2981) Remove `PrivValidator.GetAddress()`
  1999  
  2000  * Blockchain Protocol
  2001  
  2002  * P2P Protocol
  2003  
  2004  ### FEATURES:
  2005  - [rpc] [\#3052](https://github.com/tendermint/tendermint/issues/3052) Include peer's remote IP in `/net_info`
  2006  
  2007  ### IMPROVEMENTS:
  2008  - [consensus] [\#3086](https://github.com/tendermint/tendermint/issues/3086) Log peerID on ignored votes (@srmo)
  2009  - [docs] [\#3061](https://github.com/tendermint/tendermint/issues/3061) Added specification for signing consensus msgs at
  2010    ./docs/spec/consensus/signing.md
  2011  - [privval] [\#2948](https://github.com/tendermint/tendermint/issues/2948) Memoize pubkey so it's only requested once on startup
  2012  - [privval] [\#2923](https://github.com/tendermint/tendermint/issues/2923) Retry RemoteSigner connections on error
  2013  
  2014  ### BUG FIXES:
  2015  
  2016  - [build] [\#3085](https://github.com/tendermint/tendermint/issues/3085) Fix `Version` field in build scripts (@husio)
  2017  - [crypto/multisig] [\#3102](https://github.com/tendermint/tendermint/issues/3102) Fix multisig keys address length
  2018  - [crypto/encoding] [\#3101](https://github.com/tendermint/tendermint/issues/3101) Fix `PubKeyMultisigThreshold` unmarshalling into `crypto.PubKey` interface
  2019  - [p2p/conn] [\#3111](https://github.com/tendermint/tendermint/issues/3111) Make SecretConnection thread safe
  2020  - [rpc] [\#3053](https://github.com/tendermint/tendermint/issues/3053) Fix internal error in `/tx_search` when results are empty
  2021    (@gianfelipe93)
  2022  - [types] [\#2926](https://github.com/tendermint/tendermint/issues/2926) Do not panic if retrieving the privval's public key fails
  2023  
  2024  ## v0.27.4
  2025  
  2026  *December 21st, 2018*
  2027  
  2028  ### BUG FIXES:
  2029  
  2030  - [mempool] [\#3036](https://github.com/tendermint/tendermint/issues/3036) Fix
  2031    LRU cache by popping the least recently used item when the cache is full,
  2032    not the most recently used one!
  2033  
  2034  ## v0.27.3
  2035  
  2036  *December 16th, 2018*
  2037  
  2038  ### BREAKING CHANGES:
  2039  
  2040  * Go API
  2041    - [dep] [\#3027](https://github.com/tendermint/tendermint/issues/3027) Revert to mainline Go crypto library, eliminating the modified
  2042      `bcrypt.GenerateFromPassword`
  2043  
  2044  ## v0.27.2
  2045  
  2046  *December 16th, 2018*
  2047  
  2048  ### IMPROVEMENTS:
  2049  
  2050  - [node] [\#3025](https://github.com/tendermint/tendermint/issues/3025) Validate NodeInfo addresses on startup.
  2051  
  2052  ### BUG FIXES:
  2053  
  2054  - [p2p] [\#3025](https://github.com/tendermint/tendermint/pull/3025) Revert to using defers in addrbook.  Fixes deadlocks in pex and consensus upon invalid ExternalAddr/ListenAddr configuration.
  2055  
  2056  ## v0.27.1
  2057  
  2058  *December 15th, 2018*
  2059  
  2060  Special thanks to external contributors on this release:
  2061  @danil-lashin, @hleb-albau, @james-ray, @leo-xinwang
  2062  
  2063  ### FEATURES:
  2064  - [rpc] [\#2964](https://github.com/tendermint/tendermint/issues/2964) Add `UnconfirmedTxs(limit)` and `NumUnconfirmedTxs()` methods to HTTP/Local clients (@danil-lashin)
  2065  - [docs] [\#3004](https://github.com/tendermint/tendermint/issues/3004) Enable full-text search on docs pages
  2066  
  2067  ### IMPROVEMENTS:
  2068  - [consensus] [\#2971](https://github.com/tendermint/tendermint/issues/2971) Return error if ValidatorSet is empty after InitChain
  2069    (@leo-xinwang)
  2070  - [ci/cd] [\#3005](https://github.com/tendermint/tendermint/issues/3005) Updated CircleCI job to trigger website build when docs are updated
  2071  - [docs] Various updates
  2072  
  2073  ### BUG FIXES:
  2074  - [cmd] [\#2983](https://github.com/tendermint/tendermint/issues/2983) `testnet` command always sets `addr_book_strict = false`
  2075  - [config] [\#2980](https://github.com/tendermint/tendermint/issues/2980) Fix CORS options formatting
  2076  - [kv indexer] [\#2912](https://github.com/tendermint/tendermint/issues/2912) Don't ignore key when executing CONTAINS
  2077  - [mempool] [\#2961](https://github.com/tendermint/tendermint/issues/2961) Call `notifyTxsAvailable` if there're txs left after committing a block, but recheck=false
  2078  - [mempool] [\#2994](https://github.com/tendermint/tendermint/issues/2994) Reject txs with negative GasWanted
  2079  - [p2p] [\#2990](https://github.com/tendermint/tendermint/issues/2990) Fix a bug where seeds don't disconnect from a peer after 3h
  2080  - [consensus] [\#3006](https://github.com/tendermint/tendermint/issues/3006) Save state after InitChain only when stateHeight is also 0 (@james-ray)
  2081  
  2082  ## v0.27.0
  2083  
  2084  *December 5th, 2018*
  2085  
  2086  Special thanks to external contributors on this release:
  2087  @danil-lashin, @srmo
  2088  
  2089  Special thanks to @dlguddus for discovering a [major
  2090  issue](https://github.com/tendermint/tendermint/issues/2718#issuecomment-440888677)
  2091  in the proposer selection algorithm.
  2092  
  2093  Friendly reminder, we have a [bug bounty
  2094  program](https://hackerone.com/tendermint).
  2095  
  2096  This release is primarily about fixes to the proposer selection algorithm
  2097  in preparation for the [Cosmos Game of
  2098  Stakes](https://blog.cosmos.network/the-game-of-stakes-is-open-for-registration-83a404746ee6).
  2099  It also makes use of the `ConsensusParams.Validator.PubKeyTypes` to restrict the
  2100  key types that can be used by validators, and removes the `Heartbeat` consensus
  2101  message.
  2102  
  2103  ### BREAKING CHANGES:
  2104  
  2105  * CLI/RPC/Config
  2106    - [rpc] [\#2932](https://github.com/tendermint/tendermint/issues/2932) Rename `accum` to `proposer_priority`
  2107  
  2108  * Go API
  2109    - [db] [\#2913](https://github.com/tendermint/tendermint/pull/2913)
  2110      ReverseIterator API change: start < end, and end is exclusive.
  2111    - [types] [\#2932](https://github.com/tendermint/tendermint/issues/2932) Rename `Validator.Accum` to `Validator.ProposerPriority`
  2112  
  2113  * Blockchain Protocol
  2114    - [state] [\#2714](https://github.com/tendermint/tendermint/issues/2714) Validators can now only use pubkeys allowed within
  2115      ConsensusParams.Validator.PubKeyTypes
  2116  
  2117  * P2P Protocol
  2118    - [consensus] [\#2871](https://github.com/tendermint/tendermint/issues/2871)
  2119      Remove *ProposalHeartbeat* message as it serves no real purpose (@srmo)
  2120    - [state] Fixes for proposer selection:
  2121      - [\#2785](https://github.com/tendermint/tendermint/issues/2785) Accum for new validators is `-1.125*totalVotingPower` instead of 0
  2122      - [\#2941](https://github.com/tendermint/tendermint/issues/2941) val.Accum is preserved during ValidatorSet.Update to avoid being
  2123        reset to 0
  2124  
  2125  ### IMPROVEMENTS:
  2126  
  2127  - [state] [\#2929](https://github.com/tendermint/tendermint/issues/2929) Minor refactor of updateState logic (@danil-lashin)
  2128  - [node] [\#2959](https://github.com/tendermint/tendermint/issues/2959) Allow node to start even if software's BlockProtocol is
  2129    different from state's BlockProtocol
  2130  - [pex] [\#2959](https://github.com/tendermint/tendermint/issues/2959) Pex reactor logger uses `module=pex`
  2131  
  2132  ### BUG FIXES:
  2133  
  2134  - [p2p] [\#2968](https://github.com/tendermint/tendermint/issues/2968) Panic on transport error rather than continuing to run but not
  2135    accept new connections
  2136  - [p2p] [\#2969](https://github.com/tendermint/tendermint/issues/2969) Fix mismatch in peer count between `/net_info` and the prometheus
  2137    metrics
  2138  - [rpc] [\#2408](https://github.com/tendermint/tendermint/issues/2408) `/broadcast_tx_commit`: Fix "interface conversion: interface {} in nil, not EventDataTx" panic (could happen if somebody sent a tx using `/broadcast_tx_commit` while Tendermint was being stopped)
  2139  - [state] [\#2785](https://github.com/tendermint/tendermint/issues/2785) Fix accum for new validators to be `-1.125*totalVotingPower`
  2140    instead of 0, forcing them to wait before becoming the proposer. Also:
  2141      - do not batch clip
  2142      - keep accums averaged near 0
  2143  - [txindex/kv] [\#2925](https://github.com/tendermint/tendermint/issues/2925) Don't return false positives when range searching for a prefix of a tag value
  2144  - [types] [\#2938](https://github.com/tendermint/tendermint/issues/2938) Fix regression in v0.26.4 where we panic on empty
  2145    genDoc.Validators
  2146  - [types] [\#2941](https://github.com/tendermint/tendermint/issues/2941) Preserve val.Accum during ValidatorSet.Update to avoid it being
  2147    reset to 0 every time a validator is updated
  2148  
  2149  ## v0.26.4
  2150  
  2151  *November 27th, 2018*
  2152  
  2153  Special thanks to external contributors on this release:
  2154  @ackratos, @goolAdapter, @james-ray, @joe-bowman, @kostko,
  2155  @nagarajmanjunath, @tomtau
  2156  
  2157  Friendly reminder, we have a [bug bounty
  2158  program](https://hackerone.com/tendermint).
  2159  
  2160  ### FEATURES:
  2161  
  2162  - [rpc] [\#2747](https://github.com/tendermint/tendermint/issues/2747) Enable subscription to tags emitted from `BeginBlock`/`EndBlock` (@kostko)
  2163  - [types] [\#2747](https://github.com/tendermint/tendermint/issues/2747) Add `ResultBeginBlock` and `ResultEndBlock` fields to `EventDataNewBlock`
  2164      and `EventDataNewBlockHeader` to support subscriptions (@kostko)
  2165  - [types] [\#2918](https://github.com/tendermint/tendermint/issues/2918) Add Marshal, MarshalTo, Unmarshal methods to various structs
  2166    to support Protobuf compatibility (@nagarajmanjunath)
  2167  
  2168  ### IMPROVEMENTS:
  2169  
  2170  - [config] [\#2877](https://github.com/tendermint/tendermint/issues/2877) Add `blocktime_iota` to the config.toml (@ackratos)
  2171      - NOTE: this should be a ConsensusParam, not part of the config, and will be
  2172        removed from the config at a later date
  2173        ([\#2920](https://github.com/tendermint/tendermint/issues/2920).
  2174  - [mempool] [\#2882](https://github.com/tendermint/tendermint/issues/2882) Add txs from Update to cache
  2175  - [mempool] [\#2891](https://github.com/tendermint/tendermint/issues/2891) Remove local int64 counter from being stored in every tx
  2176  - [node] [\#2866](https://github.com/tendermint/tendermint/issues/2866) Add ability to instantiate IPCVal (@joe-bowman)
  2177  
  2178  ### BUG FIXES:
  2179  
  2180  - [blockchain] [\#2731](https://github.com/tendermint/tendermint/issues/2731) Retry both blocks if either is bad to avoid getting stuck during fast sync (@goolAdapter)
  2181  - [consensus] [\#2893](https://github.com/tendermint/tendermint/issues/2893) Use genDoc.Validators instead of state.NextValidators on replay when appHeight==0 (@james-ray)
  2182  - [log] [\#2868](https://github.com/tendermint/tendermint/issues/2868) Fix `module=main` setting overriding all others
  2183      - NOTE: this changes the default logging behaviour to be much less verbose.
  2184        Set `log_level="info"` to restore the previous behaviour.
  2185  - [rpc] [\#2808](https://github.com/tendermint/tendermint/issues/2808) Fix `accum` field in `/validators` by calling `IncrementAccum` if necessary
  2186  - [rpc] [\#2811](https://github.com/tendermint/tendermint/issues/2811) Allow integer IDs in JSON-RPC requests (@tomtau)
  2187  - [txindex/kv] [\#2759](https://github.com/tendermint/tendermint/issues/2759) Fix tx.height range queries
  2188  - [txindex/kv] [\#2775](https://github.com/tendermint/tendermint/issues/2775) Order tx results by index if height is the same
  2189  - [txindex/kv] [\#2908](https://github.com/tendermint/tendermint/issues/2908) Don't return false positives when searching for a prefix of a tag value
  2190  
  2191  ## v0.26.3
  2192  
  2193  *November 17th, 2018*
  2194  
  2195  Special thanks to external contributors on this release:
  2196  @danil-lashin, @kevlubkcm, @krhubert, @srmo
  2197  
  2198  Friendly reminder, we have a [bug bounty
  2199  program](https://hackerone.com/tendermint).
  2200  
  2201  ### BREAKING CHANGES:
  2202  
  2203  * Go API
  2204    - [rpc] [\#2791](https://github.com/tendermint/tendermint/issues/2791) Functions that start HTTP servers are now blocking:
  2205      - Impacts `StartHTTPServer`, `StartHTTPAndTLSServer`, and `StartGRPCServer`
  2206      - These functions now take a `net.Listener` instead of an address
  2207    - [rpc] [\#2767](https://github.com/tendermint/tendermint/issues/2767) Subscribing to events
  2208    `NewRound` and `CompleteProposal` return new types `EventDataNewRound` and
  2209    `EventDataCompleteProposal`, respectively, instead of the generic `EventDataRoundState`. (@kevlubkcm)
  2210  
  2211  ### FEATURES:
  2212  
  2213  - [log] [\#2843](https://github.com/tendermint/tendermint/issues/2843) New `log_format` config option, which can be set to 'plain' for colored
  2214    text or 'json' for JSON output
  2215  - [types] [\#2767](https://github.com/tendermint/tendermint/issues/2767) New event types EventDataNewRound (with ProposerInfo) and EventDataCompleteProposal (with BlockID). (@kevlubkcm)
  2216  
  2217  ### IMPROVEMENTS:
  2218  
  2219  - [dep] [\#2844](https://github.com/tendermint/tendermint/issues/2844) Dependencies are no longer pinned to an exact version in the
  2220    Gopkg.toml:
  2221    - Serialization libs are allowed to vary by patch release
  2222    - Other libs are allowed to vary by minor release
  2223  - [p2p] [\#2857](https://github.com/tendermint/tendermint/issues/2857) "Send failed" is logged at debug level instead of error.
  2224  - [rpc] [\#2780](https://github.com/tendermint/tendermint/issues/2780) Add read and write timeouts to HTTP servers
  2225  - [state] [\#2848](https://github.com/tendermint/tendermint/issues/2848) Make "Update to validators" msg value pretty (@danil-lashin)
  2226  
  2227  ### BUG FIXES:
  2228  - [consensus] [\#2819](https://github.com/tendermint/tendermint/issues/2819) Don't send proposalHearbeat if not a validator
  2229  - [docs] [\#2859](https://github.com/tendermint/tendermint/issues/2859) Fix ConsensusParams details in spec
  2230  - [libs/autofile] [\#2760](https://github.com/tendermint/tendermint/issues/2760) Comment out autofile permissions check - should fix
  2231    running Tendermint on Windows
  2232  - [p2p] [\#2869](https://github.com/tendermint/tendermint/issues/2869) Set connection config properly instead of always using default
  2233  - [p2p/pex] [\#2802](https://github.com/tendermint/tendermint/issues/2802) Seed mode fixes:
  2234    - Only disconnect from inbound peers
  2235    - Use FlushStop instead of Sleep to ensure all messages are sent before
  2236      disconnecting
  2237  
  2238  ## v0.26.2
  2239  
  2240  *November 15th, 2018*
  2241  
  2242  Special thanks to external contributors on this release: @hleb-albau, @zhuzeyu
  2243  
  2244  Friendly reminder, we have a [bug bounty program](https://hackerone.com/tendermint).
  2245  
  2246  ### FEATURES:
  2247  
  2248  - [rpc] [\#2582](https://github.com/tendermint/tendermint/issues/2582) Enable CORS on RPC API (@hleb-albau)
  2249  
  2250  ### BUG FIXES:
  2251  
  2252  - [abci] [\#2748](https://github.com/tendermint/tendermint/issues/2748) Unlock mutex in localClient so even when app panics (e.g. during CheckTx), consensus continue working
  2253  - [abci] [\#2748](https://github.com/tendermint/tendermint/issues/2748) Fix DATA RACE in localClient
  2254  - [amino] [\#2822](https://github.com/tendermint/tendermint/issues/2822) Update to v0.14.1 to support compiling on 32-bit platforms
  2255  - [rpc] [\#2748](https://github.com/tendermint/tendermint/issues/2748) Drain channel before calling Unsubscribe(All) in `/broadcast_tx_commit`
  2256  
  2257  ## v0.26.1
  2258  
  2259  *November 11, 2018*
  2260  
  2261  Special thanks to external contributors on this release: @katakonst
  2262  
  2263  Friendly reminder, we have a [bug bounty program](https://hackerone.com/tendermint).
  2264  
  2265  ### IMPROVEMENTS:
  2266  
  2267  - [consensus] [\#2704](https://github.com/tendermint/tendermint/issues/2704) Simplify valid POL round logic
  2268  - [docs] [\#2749](https://github.com/tendermint/tendermint/issues/2749) Deduplicate some ABCI docs
  2269  - [mempool] More detailed log messages
  2270      - [\#2724](https://github.com/tendermint/tendermint/issues/2724)
  2271      - [\#2762](https://github.com/tendermint/tendermint/issues/2762)
  2272  
  2273  ### BUG FIXES:
  2274  
  2275  - [autofile] [\#2703](https://github.com/tendermint/tendermint/issues/2703) Do not panic when checking Head size
  2276  - [crypto/merkle] [\#2756](https://github.com/tendermint/tendermint/issues/2756) Fix crypto/merkle ProofOperators.Verify to check bounds on keypath parts.
  2277  - [mempool] fix a bug where we create a WAL despite `wal_dir` being empty
  2278  - [p2p] [\#2771](https://github.com/tendermint/tendermint/issues/2771) Fix `peer-id` label name to `peer_id` in prometheus metrics
  2279  - [p2p] [\#2797](https://github.com/tendermint/tendermint/pull/2797) Fix IDs in peer NodeInfo and require them for addresses
  2280    in AddressBook
  2281  - [p2p] [\#2797](https://github.com/tendermint/tendermint/pull/2797) Do not close conn immediately after sending pex addrs in seed mode. Partial fix for [\#2092](https://github.com/tendermint/tendermint/issues/2092).
  2282  
  2283  ## v0.26.0
  2284  
  2285  *November 2, 2018*
  2286  
  2287  Special thanks to external contributors on this release:
  2288  @bradyjoestar, @connorwstein, @goolAdapter, @HaoyangLiu,
  2289  @james-ray, @overbool, @phymbert, @Slamper, @Uzair1995, @yutianwu.
  2290  
  2291  Special thanks to @Slamper for a series of bug reports in our [bug bounty
  2292  program](https://hackerone.com/tendermint) which are fixed in this release.
  2293  
  2294  This release is primarily about adding Version fields to various data structures,
  2295  optimizing consensus messages for signing and verification in
  2296  restricted environments (like HSMs and the Ethereum Virtual Machine), and
  2297  aligning the consensus code with the [specification](https://arxiv.org/abs/1807.04938).
  2298  It also includes our first take at a generalized merkle proof system, and
  2299  changes the length of hashes used for hashing data structures from 20 to 32
  2300  bytes.
  2301  
  2302  See the [UPGRADING.md](UPGRADING.md#v0.26.0) for details on upgrading to the new
  2303  version.
  2304  
  2305  Please note that we are still making breaking changes to the protocols.
  2306  While the new Version fields should help us to keep the software backwards compatible
  2307  even while upgrading the protocols, we cannot guarantee that new releases will
  2308  be compatible with old chains just yet. We expect there will be another breaking
  2309  release or two before the Cosmos Hub launch, but we will otherwise be paying
  2310  increasing attention to backwards compatibility. Thanks for bearing with us!
  2311  
  2312  ### BREAKING CHANGES:
  2313  
  2314  * CLI/RPC/Config
  2315    * [config] [\#2232](https://github.com/tendermint/tendermint/issues/2232) Timeouts are now strings like "3s" and "100ms", not ints
  2316    * [config] [\#2505](https://github.com/tendermint/tendermint/issues/2505) Remove Mempool.RecheckEmpty (it was effectively useless anyways)
  2317    * [config] [\#2490](https://github.com/tendermint/tendermint/issues/2490) `mempool.wal` is disabled by default
  2318    * [privval] [\#2459](https://github.com/tendermint/tendermint/issues/2459) Split `SocketPVMsg`s implementations into Request and Response, where the Response may contain a error message (returned by the remote signer)
  2319    * [state] [\#2644](https://github.com/tendermint/tendermint/issues/2644) Add Version field to State, breaking the format of State as
  2320      encoded on disk.
  2321    * [rpc] [\#2298](https://github.com/tendermint/tendermint/issues/2298) `/abci_query` takes `prove` argument instead of `trusted` and switches the default
  2322      behaviour to `prove=false`
  2323    * [rpc] [\#2654](https://github.com/tendermint/tendermint/issues/2654) Remove all `node_info.other.*_version` fields in `/status` and
  2324      `/net_info`
  2325    * [rpc] [\#2636](https://github.com/tendermint/tendermint/issues/2636) Remove
  2326      `_params` suffix from fields in `consensus_params`.
  2327  
  2328  * Apps
  2329    * [abci] [\#2298](https://github.com/tendermint/tendermint/issues/2298) ResponseQuery.Proof is now a structured merkle.Proof, not just
  2330      arbitrary bytes
  2331    * [abci] [\#2644](https://github.com/tendermint/tendermint/issues/2644) Add Version to Header and shift all fields by one
  2332    * [abci] [\#2662](https://github.com/tendermint/tendermint/issues/2662) Bump the field numbers for some `ResponseInfo` fields to make room for
  2333        `AppVersion`
  2334    * [abci] [\#2636](https://github.com/tendermint/tendermint/issues/2636) Updates to ConsensusParams
  2335      * Remove `Params` suffix from field names
  2336      * Add `Params` suffix to message types
  2337      * Add new field and type, `Validator ValidatorParams`, to control what types of validator keys are allowed.
  2338  
  2339  * Go API
  2340    * [config] [\#2232](https://github.com/tendermint/tendermint/issues/2232) Timeouts are time.Duration, not ints
  2341    * [crypto/merkle & lite] [\#2298](https://github.com/tendermint/tendermint/issues/2298) Various changes to accomodate General Merkle trees
  2342    * [crypto/merkle] [\#2595](https://github.com/tendermint/tendermint/issues/2595) Remove all Hasher objects in favor of byte slices
  2343    * [crypto/merkle] [\#2635](https://github.com/tendermint/tendermint/issues/2635) merkle.SimpleHashFromTwoHashes is no longer exported
  2344    * [node] [\#2479](https://github.com/tendermint/tendermint/issues/2479) Remove node.RunForever
  2345    * [rpc/client] [\#2298](https://github.com/tendermint/tendermint/issues/2298) `ABCIQueryOptions.Trusted` -> `ABCIQueryOptions.Prove`
  2346    * [types] [\#2298](https://github.com/tendermint/tendermint/issues/2298) Remove `Index` and `Total` fields from `TxProof`.
  2347    * [types] [\#2598](https://github.com/tendermint/tendermint/issues/2598)
  2348      `VoteTypeXxx` are now of type `SignedMsgType byte` and named `XxxType`, eg.
  2349      `PrevoteType`, `PrecommitType`.
  2350    * [types] [\#2636](https://github.com/tendermint/tendermint/issues/2636) Rename fields in ConsensusParams to remove `Params` suffixes
  2351    * [types] [\#2735](https://github.com/tendermint/tendermint/issues/2735) Simplify Proposal message to align with spec
  2352  
  2353  * Blockchain Protocol
  2354    * [crypto/tmhash] [\#2732](https://github.com/tendermint/tendermint/issues/2732) TMHASH is now full 32-byte SHA256
  2355      * All hashes in the block header and Merkle trees are now 32-bytes
  2356      * PubKey Addresses are still only 20-bytes
  2357    * [state] [\#2587](https://github.com/tendermint/tendermint/issues/2587) Require block.Time of the fist block to be genesis time
  2358    * [state] [\#2644](https://github.com/tendermint/tendermint/issues/2644) Require block.Version to match state.Version
  2359    * [types] Update SignBytes for `Vote`/`Proposal`/`Heartbeat`:
  2360      * [\#2459](https://github.com/tendermint/tendermint/issues/2459) Use amino encoding instead of JSON in `SignBytes`.
  2361      * [\#2598](https://github.com/tendermint/tendermint/issues/2598) Reorder fields and use fixed sized encoding.
  2362      * [\#2598](https://github.com/tendermint/tendermint/issues/2598) Change `Type` field from `string` to `byte` and use new
  2363        `SignedMsgType` to enumerate.
  2364    * [types] [\#2730](https://github.com/tendermint/tendermint/issues/2730) Use
  2365      same order for fields in `Vote` as in the SignBytes
  2366    * [types] [\#2732](https://github.com/tendermint/tendermint/issues/2732) Remove the address field from the validator hash
  2367    * [types] [\#2644](https://github.com/tendermint/tendermint/issues/2644) Add Version struct to Header
  2368    * [types] [\#2609](https://github.com/tendermint/tendermint/issues/2609) ConsensusParams.Hash() is the hash of the amino encoded
  2369      struct instead of the Merkle tree of the fields
  2370    * [types] [\#2670](https://github.com/tendermint/tendermint/issues/2670) Header.Hash() builds Merkle tree out of fields in the same
  2371      order they appear in the header, instead of sorting by field name
  2372    * [types] [\#2682](https://github.com/tendermint/tendermint/issues/2682) Use proto3 `varint` encoding for ints that are usually unsigned (instead of zigzag encoding).
  2373    * [types] [\#2636](https://github.com/tendermint/tendermint/issues/2636) Add Validator field to ConsensusParams
  2374        (Used to control which pubkey types validators can use, by abci type).
  2375  
  2376  * P2P Protocol
  2377    * [consensus] [\#2652](https://github.com/tendermint/tendermint/issues/2652)
  2378      Replace `CommitStepMessage` with `NewValidBlockMessage`
  2379    * [consensus] [\#2735](https://github.com/tendermint/tendermint/issues/2735) Simplify `Proposal` message to align with spec
  2380    * [consensus] [\#2730](https://github.com/tendermint/tendermint/issues/2730)
  2381      Add `Type` field to `Proposal` and use same order of fields as in the
  2382      SignBytes for both `Proposal` and `Vote`
  2383    * [p2p] [\#2654](https://github.com/tendermint/tendermint/issues/2654) Add `ProtocolVersion` struct with protocol versions to top of
  2384      DefaultNodeInfo and require `ProtocolVersion.Block` to match during peer handshake
  2385  
  2386  
  2387  ### FEATURES:
  2388  - [abci] [\#2557](https://github.com/tendermint/tendermint/issues/2557) Add `Codespace` field to `Response{CheckTx, DeliverTx, Query}`
  2389  - [abci] [\#2662](https://github.com/tendermint/tendermint/issues/2662) Add `BlockVersion` and `P2PVersion` to `RequestInfo`
  2390  - [crypto/merkle] [\#2298](https://github.com/tendermint/tendermint/issues/2298) General Merkle Proof scheme for chaining various types of Merkle trees together
  2391  - [docs/architecture] [\#1181](https://github.com/tendermint/tendermint/issues/1181) S
  2392  plit immutable and mutable parts of priv_validator.json
  2393  
  2394  ### IMPROVEMENTS:
  2395  - Additional Metrics
  2396      - [consensus] [\#2169](https://github.com/cosmos/cosmos-sdk/issues/2169)
  2397      - [p2p] [\#2169](https://github.com/cosmos/cosmos-sdk/issues/2169)
  2398  - [config] [\#2232](https://github.com/tendermint/tendermint/issues/2232) Added ValidateBasic method, which performs basic checks
  2399  - [crypto/ed25519] [\#2558](https://github.com/tendermint/tendermint/issues/2558) Switch to use latest `golang.org/x/crypto` through our fork at
  2400    github.com/tendermint/crypto
  2401  - [libs/log] [\#2707](https://github.com/tendermint/tendermint/issues/2707) Add year to log format (@yutianwu)
  2402  - [tools] [\#2238](https://github.com/tendermint/tendermint/issues/2238) Binary dependencies are now locked to a specific git commit
  2403  
  2404  ### BUG FIXES:
  2405  - [\#2711](https://github.com/tendermint/tendermint/issues/2711) Validate all incoming reactor messages. Fixes various bugs due to negative ints.
  2406  - [autofile] [\#2428](https://github.com/tendermint/tendermint/issues/2428) Group.RotateFile need call Flush() before rename (@goolAdapter)
  2407  - [common] [\#2533](https://github.com/tendermint/tendermint/issues/2533) Fixed a bug in the `BitArray.Or` method
  2408  - [common] [\#2506](https://github.com/tendermint/tendermint/issues/2506) Fixed a bug in the `BitArray.Sub` method (@james-ray)
  2409  - [common] [\#2534](https://github.com/tendermint/tendermint/issues/2534) Fix `BitArray.PickRandom` to choose uniformly from true bits
  2410  - [consensus] [\#1690](https://github.com/tendermint/tendermint/issues/1690) Wait for
  2411    timeoutPrecommit before starting next round
  2412  - [consensus] [\#1745](https://github.com/tendermint/tendermint/issues/1745) Wait for
  2413    Proposal or timeoutProposal before entering prevote
  2414  - [consensus] [\#2642](https://github.com/tendermint/tendermint/issues/2642) Only propose ValidBlock, not LockedBlock
  2415  - [consensus] [\#2642](https://github.com/tendermint/tendermint/issues/2642) Initialized ValidRound and LockedRound to -1
  2416  - [consensus] [\#1637](https://github.com/tendermint/tendermint/issues/1637) Limit the amount of evidence that can be included in a
  2417    block
  2418  - [consensus] [\#2652](https://github.com/tendermint/tendermint/issues/2652) Ensure valid block property with faulty proposer
  2419  - [evidence] [\#2515](https://github.com/tendermint/tendermint/issues/2515) Fix db iter leak (@goolAdapter)
  2420  - [libs/event] [\#2518](https://github.com/tendermint/tendermint/issues/2518) Fix event concurrency flaw (@goolAdapter)
  2421  - [node] [\#2434](https://github.com/tendermint/tendermint/issues/2434) Make node respond to signal interrupts while sleeping for genesis time
  2422  - [state] [\#2616](https://github.com/tendermint/tendermint/issues/2616) Pass nil to NewValidatorSet() when genesis file's Validators field is nil
  2423  - [p2p] [\#2555](https://github.com/tendermint/tendermint/issues/2555) Fix p2p switch FlushThrottle value (@goolAdapter)
  2424  - [p2p] [\#2668](https://github.com/tendermint/tendermint/issues/2668) Reconnect to originally dialed address (not self-reported address) for persistent peers
  2425  
  2426  ## v0.25.0
  2427  
  2428  *September 22, 2018*
  2429  
  2430  Special thanks to external contributors on this release:
  2431  @scriptionist, @bradyjoestar, @WALL-E
  2432  
  2433  This release is mostly about the ConsensusParams - removing fields and enforcing MaxGas.
  2434  It also addresses some issues found via security audit, removes various unused
  2435  functions from `libs/common`, and implements
  2436  [ADR-012](https://github.com/tendermint/tendermint/blob/develop/docs/architecture/adr-012-peer-transport.md).
  2437  
  2438  Friendly reminder, we have a [bug bounty program](https://hackerone.com/tendermint).
  2439  
  2440  BREAKING CHANGES:
  2441  
  2442  * CLI/RPC/Config
  2443    * [rpc] [\#2391](https://github.com/tendermint/tendermint/issues/2391) /status `result.node_info.other` became a map
  2444    * [types] [\#2364](https://github.com/tendermint/tendermint/issues/2364) Remove `TxSize` and `BlockGossip` from `ConsensusParams`
  2445      * Maximum tx size is now set implicitly via the `BlockSize.MaxBytes`
  2446      * The size of block parts in the consensus is now fixed to 64kB
  2447  
  2448  * Apps
  2449    * [mempool] [\#2360](https://github.com/tendermint/tendermint/issues/2360) Mempool tracks the `ResponseCheckTx.GasWanted` and
  2450      `ConsensusParams.BlockSize.MaxGas` and enforces:
  2451      - `GasWanted <= MaxGas` for every tx
  2452      - `(sum of GasWanted in block) <= MaxGas` for block proposal
  2453  
  2454  * Go API
  2455    * [libs/common] [\#2431](https://github.com/tendermint/tendermint/issues/2431) Remove Word256 due to lack of use
  2456    * [libs/common] [\#2452](https://github.com/tendermint/tendermint/issues/2452) Remove the following functions due to lack of use:
  2457      * byteslice.go: cmn.IsZeros, cmn.RightPadBytes, cmn.LeftPadBytes, cmn.PrefixEndBytes
  2458      * strings.go: cmn.IsHex, cmn.StripHex
  2459      * int.go: Uint64Slice, all put/get int64 methods
  2460  
  2461  FEATURES:
  2462  - [rpc] [\#2415](https://github.com/tendermint/tendermint/issues/2415) New `/consensus_params?height=X` endpoint to query the consensus
  2463    params at any height (@scriptonist)
  2464  - [types] [\#1714](https://github.com/tendermint/tendermint/issues/1714) Add Address to GenesisValidator
  2465  - [metrics] [\#2337](https://github.com/tendermint/tendermint/issues/2337) `consensus.block_interval_metrics` is now gauge, not histogram (you will be able to see spikes, if any)
  2466  - [libs] [\#2286](https://github.com/tendermint/tendermint/issues/2286) Panic if `autofile` or `db/fsdb` permissions change from 0600.
  2467  
  2468  IMPROVEMENTS:
  2469  - [libs/db] [\#2371](https://github.com/tendermint/tendermint/issues/2371) Output error instead of panic when the given `db_backend` is not initialised (@bradyjoestar)
  2470  - [mempool] [\#2399](https://github.com/tendermint/tendermint/issues/2399) Make mempool cache a proper LRU (@bradyjoestar)
  2471  - [p2p] [\#2126](https://github.com/tendermint/tendermint/issues/2126) Introduce PeerTransport interface to improve isolation of concerns
  2472  - [libs/common] [\#2326](https://github.com/tendermint/tendermint/issues/2326) Service returns ErrNotStarted
  2473  
  2474  BUG FIXES:
  2475  - [node] [\#2294](https://github.com/tendermint/tendermint/issues/2294) Delay starting node until Genesis time
  2476  - [consensus] [\#2048](https://github.com/tendermint/tendermint/issues/2048) Correct peer statistics for marking peer as good
  2477  - [rpc] [\#2460](https://github.com/tendermint/tendermint/issues/2460) StartHTTPAndTLSServer() now passes StartTLS() errors back to the caller rather than hanging forever.
  2478  - [p2p] [\#2047](https://github.com/tendermint/tendermint/issues/2047) Accept new connections asynchronously
  2479  - [tm-bench] [\#2410](https://github.com/tendermint/tendermint/issues/2410) Enforce minimum transaction size (@WALL-E)
  2480  
  2481  ## 0.24.0
  2482  
  2483  *September 6th, 2018*
  2484  
  2485  Special thanks to external contributors with PRs included in this release: ackratos, james-ray, bradyjoestar,
  2486  peerlink, Ahmah2009, bluele, b00f.
  2487  
  2488  This release includes breaking upgrades in the block header,
  2489  including the long awaited changes for delaying validator set updates by one
  2490  block to better support light clients.
  2491  It also fixes enforcement on the maximum size of blocks, and includes a BFT
  2492  timestamp in each block that can be safely used by applications.
  2493  There are also some minor breaking changes to the rpc, config, and ABCI.
  2494  
  2495  See the [UPGRADING.md](UPGRADING.md#v0.24.0) for details on upgrading to the new
  2496  version.
  2497  
  2498  From here on, breaking changes will be broken down to better reflect how users
  2499  are affected by a change.
  2500  
  2501  A few more breaking changes are in the works - each will come with a clear
  2502  Architecture Decision Record (ADR) explaining the change. You can review ADRs
  2503  [here](https://github.com/tendermint/tendermint/tree/develop/docs/architecture)
  2504  or in the [open Pull Requests](https://github.com/tendermint/tendermint/pulls).
  2505  You can also check in on the [issues marked as
  2506  breaking](https://github.com/tendermint/tendermint/issues?q=is%3Aopen+is%3Aissue+label%3Abreaking).
  2507  
  2508  BREAKING CHANGES:
  2509  
  2510  * CLI/RPC/Config
  2511    - [config] [\#2169](https://github.com/tendermint/tendermint/issues/2169) Replace MaxNumPeers with MaxNumInboundPeers and MaxNumOutboundPeers
  2512    - [config] [\#2300](https://github.com/tendermint/tendermint/issues/2300) Reduce default mempool size from 100k to 5k, until ABCI rechecking is implemented.
  2513    - [rpc] [\#1815](https://github.com/tendermint/tendermint/issues/1815) `/commit` returns a `signed_header` field instead of everything being top-level
  2514  
  2515  * Apps
  2516    - [abci] Added address of the original proposer of the block to Header
  2517    - [abci] Change ABCI Header to match Tendermint exactly
  2518    - [abci] [\#2159](https://github.com/tendermint/tendermint/issues/2159) Update use of `Validator` (see
  2519      [ADR-018](https://github.com/tendermint/tendermint/blob/develop/docs/architecture/adr-018-ABCI-Validators.md)):
  2520      - Remove PubKey from `Validator` (so it's just Address and Power)
  2521      - Introduce `ValidatorUpdate` (with just PubKey and Power)
  2522      - InitChain and EndBlock use ValidatorUpdate
  2523      - Update field names and types in BeginBlock
  2524    - [state] [\#1815](https://github.com/tendermint/tendermint/issues/1815) Validator set changes are now delayed by one block
  2525      - updates returned in ResponseEndBlock for block H will be included in RequestBeginBlock for block H+2
  2526  
  2527  * Go API
  2528    - [lite] [\#1815](https://github.com/tendermint/tendermint/issues/1815) Complete refactor of the package
  2529    - [node] [\#2212](https://github.com/tendermint/tendermint/issues/2212) NewNode now accepts a `*p2p.NodeKey` (@bradyjoestar)
  2530    - [libs/common] [\#2199](https://github.com/tendermint/tendermint/issues/2199) Remove Fmt, in favor of fmt.Sprintf
  2531    - [libs/common] SplitAndTrim was deleted
  2532    - [libs/common] [\#2274](https://github.com/tendermint/tendermint/issues/2274) Remove unused Math functions like MaxInt, MaxInt64,
  2533      MinInt, MinInt64 (@Ahmah2009)
  2534    - [libs/clist] Panics if list extends beyond MaxLength
  2535    - [crypto] [\#2205](https://github.com/tendermint/tendermint/issues/2205) Rename AminoRoute variables to no longer be prefixed by signature type.
  2536  
  2537  * Blockchain Protocol
  2538    - [state] [\#1815](https://github.com/tendermint/tendermint/issues/1815) Validator set changes are now delayed by one block (!)
  2539      - Add NextValidatorSet to State, changes on-disk representation of state
  2540    - [state] [\#2184](https://github.com/tendermint/tendermint/issues/2184) Enforce ConsensusParams.BlockSize.MaxBytes (See
  2541      [ADR-020](https://github.com/tendermint/tendermint/blob/develop/docs/architecture/adr-020-block-size.md)).
  2542      - Remove ConsensusParams.BlockSize.MaxTxs
  2543      - Introduce maximum sizes for all components of a block, including ChainID
  2544    - [types] Updates to the block Header:
  2545      - [\#1815](https://github.com/tendermint/tendermint/issues/1815) NextValidatorsHash - hash of the validator set for the next block,
  2546        so the current validators actually sign over the hash for the new
  2547        validators
  2548      - [\#2106](https://github.com/tendermint/tendermint/issues/2106) ProposerAddress - address of the block's original proposer
  2549    - [consensus] [\#2203](https://github.com/tendermint/tendermint/issues/2203) Implement BFT time
  2550      - Timestamp in block must be monotonic and equal the median of timestamps in block's LastCommit
  2551    - [crypto] [\#2239](https://github.com/tendermint/tendermint/issues/2239) Secp256k1 signature changes (See
  2552      [ADR-014](https://github.com/tendermint/tendermint/blob/develop/docs/architecture/adr-014-secp-malleability.md)):
  2553      - format changed from DER to `r || s`, both little endian encoded as 32 bytes.
  2554      - malleability removed by requiring `s` to be in canonical form.
  2555  
  2556  * P2P Protocol
  2557    - [p2p] [\#2263](https://github.com/tendermint/tendermint/issues/2263) Update secret connection to use a little endian encoded nonce
  2558    - [blockchain] [\#2213](https://github.com/tendermint/tendermint/issues/2213) Fix Amino routes for blockchain reactor messages
  2559      (@peerlink)
  2560  
  2561  
  2562  FEATURES:
  2563  - [types] [\#2015](https://github.com/tendermint/tendermint/issues/2015) Allow genesis file to have 0 validators (@b00f)
  2564    - Initial validator set can be determined by the app in ResponseInitChain
  2565  - [rpc] [\#2161](https://github.com/tendermint/tendermint/issues/2161) New event `ValidatorSetUpdates` for when the validator set changes
  2566  - [crypto/multisig] [\#2164](https://github.com/tendermint/tendermint/issues/2164) Introduce multisig pubkey and signature format
  2567  - [libs/db] [\#2293](https://github.com/tendermint/tendermint/issues/2293) Allow passing options through when creating instances of leveldb dbs
  2568  
  2569  IMPROVEMENTS:
  2570  - [docs] Lint documentation with `write-good` and `stop-words`.
  2571  - [docs] [\#2249](https://github.com/tendermint/tendermint/issues/2249) Refactor, deduplicate, and improve the ABCI docs and spec (with thanks to @ttmc).
  2572  - [scripts] [\#2196](https://github.com/tendermint/tendermint/issues/2196) Added json2wal tool, which is supposed to help our users restore (@bradyjoestar)
  2573    corrupted WAL files and compose test WAL files (@bradyjoestar)
  2574  - [mempool] [\#2234](https://github.com/tendermint/tendermint/issues/2234) Now stores txs by hash inside of the cache, to mitigate memory leakage
  2575  - [mempool] [\#2166](https://github.com/tendermint/tendermint/issues/2166) Set explicit capacity for map when updating txs (@bluele)
  2576  
  2577  BUG FIXES:
  2578  - [config] [\#2284](https://github.com/tendermint/tendermint/issues/2284) Replace `db_path` with `db_dir` from automatically generated configuration files.
  2579  - [mempool] [\#2188](https://github.com/tendermint/tendermint/issues/2188) Fix OOM issue from cache map and list getting out of sync
  2580  - [state] [\#2051](https://github.com/tendermint/tendermint/issues/2051) KV store index supports searching by `tx.height` (@ackratos)
  2581  - [rpc] [\#2327](https://github.com/tendermint/tendermint/issues/2327) `/dial_peers` does not try to dial existing peers
  2582  - [node] [\#2323](https://github.com/tendermint/tendermint/issues/2323) Filter empty strings from config lists (@james-ray)
  2583  - [abci/client] [\#2236](https://github.com/tendermint/tendermint/issues/2236) Fix closing GRPC connection (@bradyjoestar)
  2584  
  2585  ## 0.23.1
  2586  
  2587  *August 22nd, 2018*
  2588  
  2589  BUG FIXES:
  2590  - [libs/autofile] [\#2261](https://github.com/tendermint/tendermint/issues/2261) Fix log rotation so it actually happens.
  2591      - Fixes issues with consensus WAL growing unbounded ala [\#2259](https://github.com/tendermint/tendermint/issues/2259)
  2592  
  2593  ## 0.23.0
  2594  
  2595  *August 5th, 2018*
  2596  
  2597  This release includes breaking upgrades in our P2P encryption,
  2598  some ABCI messages, and how we encode time and signatures.
  2599  
  2600  A few more changes are still coming to the Header, ABCI,
  2601  and validator set handling to better support light clients, BFT time, and
  2602  upgrades. Most notably, validator set changes will be delayed by one block (see
  2603  [#1815][i1815]).
  2604  
  2605  We also removed `make ensure_deps` in favour of `make get_vendor_deps`.
  2606  
  2607  BREAKING CHANGES:
  2608  - [abci] Changed time format from int64 to google.protobuf.Timestamp
  2609  - [abci] Changed Validators to LastCommitInfo in RequestBeginBlock
  2610  - [abci] Removed Fee from ResponseDeliverTx and ResponseCheckTx
  2611  - [crypto] Switch crypto.Signature from interface to []byte for space efficiency
  2612    [#2128](https://github.com/tendermint/tendermint/pull/2128)
  2613      - NOTE: this means signatures no longer have the prefix bytes in Amino
  2614        binary nor the `type` field in Amino JSON. They're just bytes.
  2615  - [p2p] Remove salsa and ripemd primitives, in favor of using chacha as a stream cipher, and hkdf [#2054](https://github.com/tendermint/tendermint/pull/2054)
  2616  - [tools] Removed `make ensure_deps` in favor of `make get_vendor_deps`
  2617  - [types] CanonicalTime uses nanoseconds instead of clipping to ms
  2618      - breaks serialization/signing of all messages with a timestamp
  2619  
  2620  FEATURES:
  2621  - [tools] Added `make check_dep`
  2622      - ensures gopkg.lock is synced with gopkg.toml
  2623      - ensures no branches are used in the gopkg.toml
  2624  
  2625  IMPROVEMENTS:
  2626  - [blockchain] Improve fast-sync logic
  2627    [#1805](https://github.com/tendermint/tendermint/pull/1805)
  2628      - tweak params
  2629      - only process one block at a time to avoid starving
  2630  - [common] bit array functions which take in another parameter are now thread safe
  2631  - [crypto] Switch hkdfchachapoly1305 to xchachapoly1305
  2632  - [p2p] begin connecting to peers as soon a seed node provides them to you ([#2093](https://github.com/tendermint/tendermint/issues/2093))
  2633  
  2634  BUG FIXES:
  2635  - [common] Safely handle cases where atomic write files already exist [#2109](https://github.com/tendermint/tendermint/issues/2109)
  2636  - [privval] fix a deadline for accepting new connections in socket private
  2637    validator.
  2638  - [p2p] Allow startup if a configured seed node's IP can't be resolved ([#1716](https://github.com/tendermint/tendermint/issues/1716))
  2639  - [node] Fully exit when CTRL-C is pressed even if consensus state panics [#2072](https://github.com/tendermint/tendermint/issues/2072)
  2640  
  2641  [i1815]: https://github.com/tendermint/tendermint/pull/1815
  2642  
  2643  ## 0.22.8
  2644  
  2645  *July 26th, 2018*
  2646  
  2647  BUG FIXES
  2648  
  2649  - [consensus, blockchain] Fix 0.22.7 below.
  2650  
  2651  ## 0.22.7
  2652  
  2653  *July 26th, 2018*
  2654  
  2655  BUG FIXES
  2656  
  2657  - [consensus, blockchain] Register the Evidence interface so it can be
  2658    marshalled/unmarshalled by the blockchain and consensus reactors
  2659  
  2660  ## 0.22.6
  2661  
  2662  *July 24th, 2018*
  2663  
  2664  BUG FIXES
  2665  
  2666  - [rpc] Fix `/blockchain` endpoint
  2667      - (#2049) Fix OOM attack by returning error on negative input
  2668      - Fix result length to have max 20 (instead of 21) block metas
  2669  - [rpc] Validate height is non-negative in `/abci_query`
  2670  - [consensus] (#2050) Include evidence in proposal block parts (previously evidence was
  2671    not being included in blocks!)
  2672  - [p2p] (#2046) Close rejected inbound connections so file descriptor doesn't
  2673    leak
  2674  - [Gopkg] (#2053) Fix versions in the toml
  2675  
  2676  ## 0.22.5
  2677  
  2678  *July 23th, 2018*
  2679  
  2680  BREAKING CHANGES:
  2681  - [crypto] Refactor `tendermint/crypto` into many subpackages
  2682  - [libs/common] remove exponentially distributed random numbers
  2683  
  2684  IMPROVEMENTS:
  2685  - [abci, libs/common] Generated gogoproto static marshaller methods
  2686  - [config] Increase default send/recv rates to 5 mB/s
  2687  - [p2p] reject addresses coming from private peers
  2688  - [p2p] allow persistent peers to be private
  2689  
  2690  BUG FIXES:
  2691  - [mempool] fixed a race condition when `create_empty_blocks=false` where a
  2692    transaction is published at an old height.
  2693  - [p2p] dial external IP setup by `persistent_peers`, not internal NAT IP
  2694  - [rpc] make `/status` RPC endpoint resistant to consensus halt
  2695  
  2696  ## 0.22.4
  2697  
  2698  *July 14th, 2018*
  2699  
  2700  BREAKING CHANGES:
  2701  - [genesis] removed deprecated `app_options` field.
  2702  - [types] Genesis.AppStateJSON -> Genesis.AppState
  2703  
  2704  FEATURES:
  2705  - [tools] Merged in from github.com/tendermint/tools
  2706  
  2707  BUG FIXES:
  2708  - [tools/tm-bench] Various fixes
  2709  - [consensus] Wait for WAL to stop on shutdown
  2710  - [abci] Fix #1891, pending requests cannot hang when abci server dies.
  2711    Previously a crash in BeginBlock could leave tendermint in broken state.
  2712  
  2713  ## 0.22.3
  2714  
  2715  *July 10th, 2018*
  2716  
  2717  IMPROVEMENTS
  2718  - Update dependencies
  2719      * pin all values in Gopkg.toml to version or commit
  2720      * update golang/protobuf to v1.1.0
  2721  
  2722  ## 0.22.2
  2723  
  2724  *July 10th, 2018*
  2725  
  2726  IMPROVEMENTS
  2727  - More cleanup post repo merge!
  2728  - [docs] Include `ecosystem.json` and `tendermint-bft.md` from deprecated `aib-data` repository.
  2729  - [config] Add `instrumentation.max_open_connections`, which limits the number
  2730    of requests in flight to Prometheus server (if enabled). Default: 3.
  2731  
  2732  
  2733  BUG FIXES
  2734  - [rpc] Allow unquoted integers in requests
  2735      - NOTE: this is only for URI requests. JSONRPC requests and all responses
  2736        will use quoted integers (the proto3 JSON standard).
  2737  - [consensus] Fix halt on shutdown
  2738  
  2739  ## 0.22.1
  2740  
  2741  *July 5th, 2018*
  2742  
  2743  IMPROVEMENTS
  2744  
  2745  * Cleanup post repo-merge.
  2746  * [docs] Various improvements.
  2747  
  2748  BUG FIXES
  2749  
  2750  * [state] Return error when EndBlock returns a 0-power validator that isn't
  2751    already in the validator set.
  2752  * [consensus] Shut down WAL properly.
  2753  
  2754  
  2755  ## 0.22.0
  2756  
  2757  *July 2nd, 2018*
  2758  
  2759  BREAKING CHANGES:
  2760  - [config]
  2761      * Remove `max_block_size_txs` and `max_block_size_bytes` in favor of
  2762          consensus params from the genesis file.
  2763      * Rename `skip_upnp` to `upnp`, and turn it off by default.
  2764      * Change `max_packet_msg_size` back to `max_packet_msg_payload_size`
  2765  - [rpc]
  2766      * All integers are encoded as strings (part of the update for Amino v0.10.1)
  2767      * `syncing` is now called `catching_up`
  2768  - [types] Update Amino to v0.10.1
  2769      * Amino is now fully proto3 compatible for the basic types
  2770      * JSON-encoded types now use the type name instead of the prefix bytes
  2771      * Integers are encoded as strings
  2772  - [crypto] Update go-crypto to v0.10.0 and merge into `crypto`
  2773      * privKey.Sign returns error.
  2774      * ed25519 address changed to the first 20-bytes of the SHA256 of the raw pubkey bytes
  2775      * `tmlibs/merkle` -> `crypto/merkle`. Uses SHA256 instead of RIPEMD160
  2776  - [tmlibs] Update to v0.9.0 and merge into `libs`
  2777      * remove `merkle` package (moved to `crypto/merkle`)
  2778  
  2779  FEATURES
  2780  - [cmd] Added metrics (served under `/metrics` using a Prometheus client;
  2781    disabled by default). See the new `instrumentation` section in the config and
  2782    [metrics](https://tendermint.readthedocs.io/projects/tools/en/develop/metrics.html)
  2783    guide.
  2784  - [p2p] Add IPv6 support to peering.
  2785  - [p2p] Add `external_address` to config to allow specifying the address for
  2786    peers to dial
  2787  
  2788  IMPROVEMENT
  2789  - [rpc/client] Supports https and wss now.
  2790  - [crypto] Make public key size into public constants
  2791  - [mempool] Log tx hash, not entire tx
  2792  - [abci] Merged in github.com/tendermint/abci
  2793  - [crypto] Merged in github.com/tendermint/go-crypto
  2794  - [libs] Merged in github.com/tendermint/tmlibs
  2795  - [docs] Move from .rst to .md
  2796  
  2797  BUG FIXES:
  2798  - [rpc] Limit maximum number of HTTP/WebSocket connections
  2799    (`rpc.max_open_connections`) and gRPC connections
  2800    (`rpc.grpc_max_open_connections`). Check out "Running In Production" guide if
  2801    you want to increase them.
  2802  - [rpc] Limit maximum request body size to 1MB (header is limited to 1MB).
  2803  - [consensus] Fix a halting bug where `create_empty_blocks=false`
  2804  - [p2p] Fix panic in seed mode
  2805  
  2806  ## 0.21.0
  2807  
  2808  *June 21th, 2018*
  2809  
  2810  BREAKING CHANGES
  2811  
  2812  - [config] Change default ports from 4665X to 2665X. Ports over 32768 are
  2813    ephemeral and reserved for use by the kernel.
  2814  - [cmd] `unsafe_reset_all` removes the addrbook.json
  2815  
  2816  IMPROVEMENT
  2817  
  2818  - [pubsub] Set default capacity to 0
  2819  - [docs] Various improvements
  2820  
  2821  BUG FIXES
  2822  
  2823  - [consensus] Fix an issue where we don't make blocks after `fast_sync` when `create_empty_blocks=false`
  2824  - [mempool] Fix #1761 where we don't process txs if `cache_size=0`
  2825  - [rpc] Fix memory leak in Websocket (when using `/subscribe` method)
  2826  - [config] Escape paths in config - fixes config paths on Windows
  2827  
  2828  ## 0.20.0
  2829  
  2830  *June 6th, 2018*
  2831  
  2832  This is the first in a series of breaking releases coming to Tendermint after
  2833  soliciting developer feedback and conducting security audits.
  2834  
  2835  This release does not break any blockchain data structures or
  2836  protocols other than the ABCI messages between Tendermint and the application.
  2837  
  2838  Applications that upgrade for ABCI v0.11.0 should be able to continue running Tendermint
  2839  v0.20.0 on blockchains created with v0.19.X
  2840  
  2841  BREAKING CHANGES
  2842  
  2843  - [abci] Upgrade to
  2844    [v0.11.0](https://github.com/tendermint/abci/blob/master/CHANGELOG.md#0110)
  2845  - [abci] Change Query path for filtering peers by node ID from
  2846    `p2p/filter/pubkey/<id>` to `p2p/filter/id/<id>`
  2847  
  2848  ## 0.19.9
  2849  
  2850  *June 5th, 2018*
  2851  
  2852  BREAKING CHANGES
  2853  
  2854  - [types/priv_validator] Moved to top level `privval` package
  2855  
  2856  FEATURES
  2857  
  2858  - [config] Collapse PeerConfig into P2PConfig
  2859  - [docs] Add quick-install script
  2860  - [docs/spec] Add table of Amino prefixes
  2861  
  2862  BUG FIXES
  2863  
  2864  - [rpc] Return 404 for unknown endpoints
  2865  - [consensus] Flush WAL on stop
  2866  - [evidence] Don't send evidence to peers that are behind
  2867  - [p2p] Fix memory leak on peer disconnects
  2868  - [rpc] Fix panic when `per_page=0`
  2869  
  2870  ## 0.19.8
  2871  
  2872  *June 4th, 2018*
  2873  
  2874  BREAKING:
  2875  
  2876  - [p2p] Remove `auth_enc` config option, peer connections are always auth
  2877    encrypted. Technically a breaking change but seems no one was using it and
  2878    arguably a bug fix :)
  2879  
  2880  BUG FIXES
  2881  
  2882  - [mempool] Fix deadlock under high load when `skip_timeout_commit=true` and
  2883    `create_empty_blocks=false`
  2884  
  2885  ## 0.19.7
  2886  
  2887  *May 31st, 2018*
  2888  
  2889  BREAKING:
  2890  
  2891  - [libs/pubsub] TagMap#Get returns a string value
  2892  - [libs/pubsub] NewTagMap accepts a map of strings
  2893  
  2894  FEATURES
  2895  
  2896  - [rpc] the RPC documentation is now published to https://tendermint.github.io/slate
  2897  - [p2p] AllowDuplicateIP config option to refuse connections from same IP.
  2898      - true by default for now, false by default in next breaking release
  2899  - [docs] Add docs for query, tx indexing, events, pubsub
  2900  - [docs] Add some notes about running Tendermint in production
  2901  
  2902  IMPROVEMENTS:
  2903  
  2904  - [consensus] Consensus reactor now receives events from a separate synchronous event bus,
  2905    which is not dependant on external RPC load
  2906  - [consensus/wal] do not look for height in older files if we've seen height - 1
  2907  - [docs] Various cleanup and link fixes
  2908  
  2909  ## 0.19.6
  2910  
  2911  *May 29th, 2018*
  2912  
  2913  BUG FIXES
  2914  
  2915  - [blockchain] Fix fast-sync deadlock during high peer turnover
  2916  
  2917  BUG FIX:
  2918  
  2919  - [evidence] Dont send peers evidence from heights they haven't synced to yet
  2920  - [p2p] Refuse connections to more than one peer with the same IP
  2921  - [docs] Various fixes
  2922  
  2923  ## 0.19.5
  2924  
  2925  *May 20th, 2018*
  2926  
  2927  BREAKING CHANGES
  2928  
  2929  - [rpc/client] TxSearch and UnconfirmedTxs have new arguments (see below)
  2930  - [rpc/client] TxSearch returns ResultTxSearch
  2931  - [version] Breaking changes to Go APIs will not be reflected in breaking
  2932    version change, but will be included in changelog.
  2933  
  2934  FEATURES
  2935  
  2936  - [rpc] `/tx_search` takes `page` (starts at 1) and `per_page` (max 100, default 30) args to paginate results
  2937  - [rpc] `/unconfirmed_txs` takes `limit` (max 100, default 30) arg to limit the output
  2938  - [config] `mempool.size` and `mempool.cache_size` options
  2939  
  2940  IMPROVEMENTS
  2941  
  2942  - [docs] Lots of updates
  2943  - [consensus] Only Fsync() the WAL before executing msgs from ourselves
  2944  
  2945  BUG FIXES
  2946  
  2947  - [mempool] Enforce upper bound on number of transactions
  2948  
  2949  ## 0.19.4 (May 17th, 2018)
  2950  
  2951  IMPROVEMENTS
  2952  
  2953  - [state] Improve tx indexing by using batches
  2954  - [consensus, state] Improve logging (more consensus logs, fewer tx logs)
  2955  - [spec] Moved to `docs/spec` (TODO cleanup the rest of the docs ...)
  2956  
  2957  BUG FIXES
  2958  
  2959  - [consensus] Fix issue #1575 where a late proposer can get stuck
  2960  
  2961  ## 0.19.3 (May 14th, 2018)
  2962  
  2963  FEATURES
  2964  
  2965  - [rpc] New `/consensus_state` returns just the votes seen at the current height
  2966  
  2967  IMPROVEMENTS
  2968  
  2969  - [rpc] Add stringified votes and fraction of power voted to `/dump_consensus_state`
  2970  - [rpc] Add PeerStateStats to `/dump_consensus_state`
  2971  
  2972  BUG FIXES
  2973  
  2974  - [cmd] Set GenesisTime during `tendermint init`
  2975  - [consensus] fix ValidBlock rules
  2976  
  2977  ## 0.19.2 (April 30th, 2018)
  2978  
  2979  FEATURES:
  2980  
  2981  - [p2p] Allow peers with different Minor versions to connect
  2982  - [rpc] `/net_info` includes `n_peers`
  2983  
  2984  IMPROVEMENTS:
  2985  
  2986  - [p2p] Various code comments, cleanup, error types
  2987  - [p2p] Change some Error logs to Debug
  2988  
  2989  BUG FIXES:
  2990  
  2991  - [p2p] Fix reconnect to persistent peer when first dial fails
  2992  - [p2p] Validate NodeInfo.ListenAddr
  2993  - [p2p] Only allow (MaxNumPeers - MaxNumOutboundPeers) inbound peers
  2994  - [p2p/pex] Limit max msg size to 64kB
  2995  - [p2p] Fix panic when pex=false
  2996  - [p2p] Allow multiple IPs per ID in AddrBook
  2997  - [p2p] Fix before/after bugs in addrbook isBad()
  2998  
  2999  ## 0.19.1 (April 27th, 2018)
  3000  
  3001  Note this release includes some small breaking changes in the RPC and one in the
  3002  config that are really bug fixes. v0.19.1 will work with existing chains, and make Tendermint
  3003  easier to use and debug. With <3
  3004  
  3005  BREAKING (MINOR)
  3006  
  3007  - [config] Removed `wal_light` setting. If you really needed this, let us know
  3008  
  3009  FEATURES:
  3010  
  3011  - [networks] moved in tooling from devops repo: terraform and ansible scripts for deploying testnets !
  3012  - [cmd] Added `gen_node_key` command
  3013  
  3014  BUG FIXES
  3015  
  3016  Some of these are breaking in the RPC response, but they're really bugs!
  3017  
  3018  - [spec] Document address format and pubkey encoding pre and post Amino
  3019  - [rpc] Lower case JSON field names
  3020  - [rpc] Fix missing entries, improve, and lower case the fields in `/dump_consensus_state`
  3021  - [rpc] Fix NodeInfo.Channels format to hex
  3022  - [rpc] Add Validator address to `/status`
  3023  - [rpc] Fix `prove` in ABCIQuery
  3024  - [cmd] MarshalJSONIndent on init
  3025  
  3026  ## 0.19.0 (April 13th, 2018)
  3027  
  3028  BREAKING:
  3029  - [cmd] improved `testnet` command; now it can fill in `persistent_peers` for you in the config file and much more (see `tendermint testnet --help` for details)
  3030  - [cmd] `show_node_id` now returns an error if there is no node key
  3031  - [rpc]: changed the output format for the `/status` endpoint (see https://godoc.org/github.com/tendermint/tendermint/rpc/core#Status)
  3032  
  3033  Upgrade from go-wire to go-amino. This is a sweeping change that breaks everything that is
  3034  serialized to disk or over the network.
  3035  
  3036  See github.com/tendermint/go-amino for details on the new format.
  3037  
  3038  See `scripts/wire2amino.go` for a tool to upgrade
  3039  genesis/priv_validator/node_key JSON files.
  3040  
  3041  FEATURES
  3042  
  3043  - [test] docker-compose for local testnet setup (thanks Greg!)
  3044  
  3045  ## 0.18.0 (April 6th, 2018)
  3046  
  3047  BREAKING:
  3048  
  3049  - [types] Merkle tree uses different encoding for varints (see tmlibs v0.8.0)
  3050  - [types] ValidtorSet.GetByAddress returns -1 if no validator found
  3051  - [p2p] require all addresses come with an ID no matter what
  3052  - [rpc] Listening address must contain tcp:// or unix:// prefix
  3053  
  3054  FEATURES:
  3055  
  3056  - [rpc] StartHTTPAndTLSServer (not used yet)
  3057  - [rpc] Include validator's voting power in `/status`
  3058  - [rpc] `/tx` and `/tx_search` responses now include the transaction hash
  3059  - [rpc] Include peer NodeIDs in `/net_info`
  3060  
  3061  IMPROVEMENTS:
  3062  - [config] trim whitespace from elements of lists (like `persistent_peers`)
  3063  - [rpc] `/tx_search` results are sorted by height
  3064  - [p2p] do not try to connect to ourselves (ok, maybe only once)
  3065  - [p2p] seeds respond with a bias towards good peers
  3066  
  3067  BUG FIXES:
  3068  - [rpc] fix subscribing using an abci.ResponseDeliverTx tag
  3069  - [rpc] fix tx_indexers matchRange
  3070  - [rpc] fix unsubscribing (see tmlibs v0.8.0)
  3071  
  3072  ## 0.17.1 (March 27th, 2018)
  3073  
  3074  BUG FIXES:
  3075  - [types] Actually support `app_state` in genesis as `AppStateJSON`
  3076  
  3077  ## 0.17.0 (March 27th, 2018)
  3078  
  3079  BREAKING:
  3080  - [types] WriteSignBytes -> SignBytes
  3081  
  3082  IMPROVEMENTS:
  3083  - [all] renamed `dummy` (`persistent_dummy`) to `kvstore` (`persistent_kvstore`) (name "dummy" is deprecated and will not work in the next breaking release)
  3084  - [docs] note on determinism (docs/determinism.rst)
  3085  - [genesis] `app_options` field is deprecated. please rename it to `app_state` in your genesis file(s). `app_options` will not work in the next breaking release
  3086  - [p2p] dial seeds directly without potential peers
  3087  - [p2p] exponential backoff for addrs in the address book
  3088  - [p2p] mark peer as good if it contributed enough votes or block parts
  3089  - [p2p] stop peer if it sends incorrect data, msg to unknown channel, msg we did not expect
  3090  - [p2p] when `auth_enc` is true, all dialed peers must have a node ID in their address
  3091  - [spec] various improvements
  3092  - switched from glide to dep internally for package management
  3093  - [wire] prep work for upgrading to new go-wire (which is now called go-amino)
  3094  
  3095  FEATURES:
  3096  - [config] exposed `auth_enc` flag to enable/disable encryption
  3097  - [config] added the `--p2p.private_peer_ids` flag and `PrivatePeerIDs` config variable (see config for description)
  3098  - [rpc] added `/health` endpoint, which returns empty result for now
  3099  - [types/priv_validator] new format and socket client, allowing for remote signing
  3100  
  3101  BUG FIXES:
  3102  - [consensus] fix liveness bug by introducing ValidBlock mechanism
  3103  
  3104  ## 0.16.0 (February 20th, 2018)
  3105  
  3106  BREAKING CHANGES:
  3107  - [config] use $TMHOME/config for all config and json files
  3108  - [p2p] old `--p2p.seeds` is now `--p2p.persistent_peers` (persistent peers to which TM will always connect to)
  3109  - [p2p] now `--p2p.seeds` only used for getting addresses (if addrbook is empty; not persistent)
  3110  - [p2p] NodeInfo: remove RemoteAddr and add Channels
  3111      - we must have at least one overlapping channel with peer
  3112      - we only send msgs for channels the peer advertised
  3113  - [p2p/conn] pong timeout
  3114  - [lite] comment out IAVL related code
  3115  
  3116  FEATURES:
  3117  - [p2p] added new `/dial_peers&persistent=_` **unsafe** endpoint
  3118  - [p2p] persistent node key in `$THMHOME/config/node_key.json`
  3119  - [p2p] introduce peer ID and authenticate peers by ID using addresses like `ID@IP:PORT`
  3120  - [p2p/pex] new seed mode crawls the network and serves as a seed.
  3121  - [config] MempoolConfig.CacheSize
  3122  - [config] P2P.SeedMode (`--p2p.seed_mode`)
  3123  
  3124  IMPROVEMENT:
  3125  - [p2p/pex] stricter rules in the PEX reactor for better handling of abuse
  3126  - [p2p] various improvements to code structure including subpackages for `pex` and `conn`
  3127  - [docs] new spec!
  3128  - [all] speed up the tests!
  3129  
  3130  BUG FIX:
  3131  - [blockchain] StopPeerForError on timeout
  3132  - [consensus] StopPeerForError on a bad Maj23 message
  3133  - [state] flush mempool conn before calling commit
  3134  - [types] fix priv val signing things that only differ by timestamp
  3135  - [mempool] fix memory leak causing zombie peers
  3136  - [p2p/conn] fix potential deadlock
  3137  
  3138  ## 0.15.0 (December 29, 2017)
  3139  
  3140  BREAKING CHANGES:
  3141  - [p2p] enable the Peer Exchange reactor by default
  3142  - [types] add Timestamp field to Proposal/Vote
  3143  - [types] add new fields to Header: TotalTxs, ConsensusParamsHash, LastResultsHash, EvidenceHash
  3144  - [types] add Evidence to Block
  3145  - [types] simplify ValidateBasic
  3146  - [state] updates to support changes to the header
  3147  - [state] Enforce <1/3 of validator set can change at a time
  3148  
  3149  FEATURES:
  3150  - [state] Send indices of absent validators and addresses of byzantine validators in BeginBlock
  3151  - [state] Historical ConsensusParams and ABCIResponses
  3152  - [docs] Specification for the base Tendermint data structures.
  3153  - [evidence] New evidence reactor for gossiping and managing evidence
  3154  - [rpc] `/block_results?height=X` returns the DeliverTx results for a given height.
  3155  
  3156  IMPROVEMENTS:
  3157  - [consensus] Better handling of corrupt WAL file
  3158  
  3159  BUG FIXES:
  3160  - [lite] fix race
  3161  - [state] validate block.Header.ValidatorsHash
  3162  - [p2p] allow seed addresses to be prefixed with eg. `tcp://`
  3163  - [p2p] use consistent key to refer to peers so we dont try to connect to existing peers
  3164  - [cmd] fix `tendermint init` to ignore files that are there and generate files that aren't.
  3165  
  3166  ## 0.14.0 (December 11, 2017)
  3167  
  3168  BREAKING CHANGES:
  3169  - consensus/wal: removed separator
  3170  - rpc/client: changed Subscribe/Unsubscribe/UnsubscribeAll funcs signatures to be identical to event bus.
  3171  
  3172  FEATURES:
  3173  - new `tendermint lite` command (and `lite/proxy` pkg) for running a light-client RPC proxy.
  3174      NOTE it is currently insecure and its APIs are not yet covered by semver
  3175  
  3176  IMPROVEMENTS:
  3177  - rpc/client: can act as event bus subscriber (See https://github.com/tendermint/tendermint/issues/945).
  3178  - p2p: use exponential backoff from seconds to hours when attempting to reconnect to persistent peer
  3179  - config: moniker defaults to the machine's hostname instead of "anonymous"
  3180  
  3181  BUG FIXES:
  3182  - p2p: no longer exit if one of the seed addresses is incorrect
  3183  
  3184  ## 0.13.0 (December 6, 2017)
  3185  
  3186  BREAKING CHANGES:
  3187  - abci: update to v0.8 using gogo/protobuf; includes tx tags, vote info in RequestBeginBlock, data.Bytes everywhere, use int64, etc.
  3188  - types: block heights are now `int64` everywhere
  3189  - types & node: EventSwitch and EventCache have been replaced by EventBus and EventBuffer; event types have been overhauled
  3190  - node: EventSwitch methods now refer to EventBus
  3191  - rpc/lib/types: RPCResponse is no longer a pointer; WSRPCConnection interface has been modified
  3192  - rpc/client: WaitForOneEvent takes an EventsClient instead of types.EventSwitch
  3193  - rpc/client: Add/RemoveListenerForEvent are now Subscribe/Unsubscribe
  3194  - rpc/core/types: ResultABCIQuery wraps an abci.ResponseQuery
  3195  - rpc: `/subscribe` and `/unsubscribe` take `query` arg instead of `event`
  3196  - rpc: `/status` returns the LatestBlockTime in human readable form instead of in nanoseconds
  3197  - mempool: cached transactions return an error instead of an ABCI response with BadNonce
  3198  
  3199  FEATURES:
  3200  - rpc: new `/unsubscribe_all` WebSocket RPC endpoint
  3201  - rpc: new `/tx_search` endpoint for filtering transactions by more complex queries
  3202  - p2p/trust: new trust metric for tracking peers. See ADR-006
  3203  - config: TxIndexConfig allows to set what DeliverTx tags to index
  3204  
  3205  IMPROVEMENTS:
  3206  - New asynchronous events system using `tmlibs/pubsub`
  3207  - logging: Various small improvements
  3208  - consensus: Graceful shutdown when app crashes
  3209  - tests: Fix various non-deterministic errors
  3210  - p2p: more defensive programming
  3211  
  3212  BUG FIXES:
  3213  - consensus: fix panic where prs.ProposalBlockParts is not initialized
  3214  - p2p: fix panic on bad channel
  3215  
  3216  ## 0.12.1 (November 27, 2017)
  3217  
  3218  BUG FIXES:
  3219  - upgrade tmlibs dependency to enable Windows builds for Tendermint
  3220  
  3221  ## 0.12.0 (October 27, 2017)
  3222  
  3223  BREAKING CHANGES:
  3224   - rpc/client: websocket ResultsCh and ErrorsCh unified in ResponsesCh.
  3225   - rpc/client: ABCIQuery no longer takes `prove`
  3226   - state: remove GenesisDoc from state.
  3227   - consensus: new binary WAL format provides efficiency and uses checksums to detect corruption
  3228      - use scripts/wal2json to convert to json for debugging
  3229  
  3230  FEATURES:
  3231   - new `Verifiers` pkg contains the tendermint light-client library (name subject to change)!
  3232   - rpc: `/genesis` includes the `app_options` .
  3233   - rpc: `/abci_query` takes an additional `height` parameter to support historical queries.
  3234   - rpc/client: new ABCIQueryWithOptions supports options like `trusted` (set false to get a proof) and `height` to query a historical height.
  3235  
  3236  IMPROVEMENTS:
  3237   - rpc: `/genesis` result includes `app_options`
  3238   - rpc/lib/client: add jitter to reconnects.
  3239   - rpc/lib/types: `RPCError` satisfies the `error` interface.
  3240  
  3241  BUG FIXES:
  3242   - rpc/client: fix ws deadlock after stopping
  3243   - blockchain: fix panic on AddBlock when peer is nil
  3244   - mempool: fix sending on TxsAvailable when a tx has been invalidated
  3245   - consensus: dont run WAL catchup if we fast synced
  3246  
  3247  ## 0.11.1 (October 10, 2017)
  3248  
  3249  IMPROVEMENTS:
  3250   - blockchain/reactor: respondWithNoResponseMessage for missing height
  3251  
  3252  BUG FIXES:
  3253   - rpc: fixed client WebSocket timeout
  3254   - rpc: client now resubscribes on reconnection
  3255   - rpc: fix panics on missing params
  3256   - rpc: fix `/dump_consensus_state` to have normal json output (NOTE: technically breaking, but worth a bug fix label)
  3257   - types: fixed out of range error in VoteSet.addVote
  3258   - consensus: fix wal autofile via https://github.com/tendermint/tmlibs/blob/master/CHANGELOG.md#032-october-2-2017
  3259  
  3260  ## 0.11.0 (September 22, 2017)
  3261  
  3262  BREAKING:
  3263   - genesis file: validator `amount` is now `power`
  3264   - abci: Info, BeginBlock, InitChain all take structs
  3265   - rpc: various changes to match JSONRPC spec (http://www.jsonrpc.org/specification), including breaking ones:
  3266      - requests that previously returned HTTP code 4XX now return 200 with an error code in the JSONRPC.
  3267      - `rpctypes.RPCResponse` uses new `RPCError` type instead of `string`.
  3268  
  3269   - cmd: if there is no genesis, exit immediately instead of waiting around for one to show.
  3270   - types: `Signer.Sign` returns an error.
  3271   - state: every validator set change is persisted to disk, which required some changes to the `State` structure.
  3272   - p2p: new `p2p.Peer` interface used for all reactor methods (instead of `*p2p.Peer` struct).
  3273  
  3274  FEATURES:
  3275   - rpc: `/validators?height=X` allows querying of validators at previous heights.
  3276   - rpc: Leaving the `height` param empty for `/block`, `/validators`, and `/commit` will return the value for the latest height.
  3277  
  3278  IMPROVEMENTS:
  3279   - docs: Moved all docs from the website and tools repo in, converted to `.rst`, and cleaned up for presentation on `tendermint.readthedocs.io`
  3280  
  3281  BUG FIXES:
  3282   - fix WAL openning issue on Windows
  3283  
  3284  ## 0.10.4 (September 5, 2017)
  3285  
  3286  IMPROVEMENTS:
  3287  - docs: Added Slate docs to each rpc function (see rpc/core)
  3288  - docs: Ported all website docs to Read The Docs
  3289  - config: expose some p2p params to tweak performance: RecvRate, SendRate, and MaxMsgPacketPayloadSize
  3290  - rpc: Upgrade the websocket client and server, including improved auto reconnect, and proper ping/pong
  3291  
  3292  BUG FIXES:
  3293  - consensus: fix panic on getVoteBitArray
  3294  - consensus: hang instead of panicking on byzantine consensus failures
  3295  - cmd: dont load config for version command
  3296  
  3297  ## 0.10.3 (August 10, 2017)
  3298  
  3299  FEATURES:
  3300  - control over empty block production:
  3301    - new flag, `--consensus.create_empty_blocks`; when set to false, blocks are only created when there are txs or when the AppHash changes.
  3302    - new config option, `consensus.create_empty_blocks_interval`; an empty block is created after this many seconds.
  3303    - in normal operation, `create_empty_blocks = true` and `create_empty_blocks_interval = 0`, so blocks are being created all the time (as in all previous versions of tendermint). The number of empty blocks can be reduced by increasing `create_empty_blocks_interval` or by setting `create_empty_blocks = false`.
  3304    - new `TxsAvailable()` method added to Mempool that returns a channel which fires when txs are available.
  3305    - new heartbeat message added to consensus reactor to notify peers that a node is waiting for txs before entering propose step.
  3306  - rpc: Add `syncing` field to response returned by `/status`. Is `true` while in fast-sync mode.
  3307  
  3308  IMPROVEMENTS:
  3309  - various improvements to documentation and code comments
  3310  
  3311  BUG FIXES:
  3312  - mempool: pass height into constructor so it doesn't always start at 0
  3313  
  3314  ## 0.10.2 (July 10, 2017)
  3315  
  3316  FEATURES:
  3317  - Enable lower latency block commits by adding consensus reactor sleep durations and p2p flush throttle timeout to the config
  3318  
  3319  IMPROVEMENTS:
  3320  - More detailed logging in the consensus reactor and state machine
  3321  - More in-code documentation for many exposed functions, especially in consensus/reactor.go and p2p/switch.go
  3322  - Improved readability for some function definitions and code blocks with long lines
  3323  
  3324  ## 0.10.1 (June 28, 2017)
  3325  
  3326  FEATURES:
  3327  - Use `--trace` to get stack traces for logged errors
  3328  - types: GenesisDoc.ValidatorHash returns the hash of the genesis validator set
  3329  - types: GenesisDocFromFile parses a GenesiDoc from a JSON file
  3330  
  3331  IMPROVEMENTS:
  3332  - Add a Code of Conduct
  3333  - Variety of improvements as suggested by `megacheck` tool
  3334  - rpc: deduplicate tests between rpc/client and rpc/tests
  3335  - rpc: addresses without a protocol prefix default to `tcp://`. `http://` is also accepted as an alias for `tcp://`
  3336  - cmd: commands are more easily reuseable from other tools
  3337  - DOCKER: automate build/push
  3338  
  3339  BUG FIXES:
  3340  - Fix log statements using keys with spaces (logger does not currently support spaces)
  3341  - rpc: set logger on websocket connection
  3342  - rpc: fix ws connection stability by setting write deadline on pings
  3343  
  3344  ## 0.10.0 (June 2, 2017)
  3345  
  3346  Includes major updates to configuration, logging, and json serialization.
  3347  Also includes the Grand Repo-Merge of 2017.
  3348  
  3349  BREAKING CHANGES:
  3350  
  3351  - Config and Flags:
  3352    - The `config` map is replaced with a [`Config` struct](https://github.com/tendermint/tendermint/blob/master/config/config.go#L11),
  3353  containing substructs: `BaseConfig`, `P2PConfig`, `MempoolConfig`, `ConsensusConfig`, `RPCConfig`
  3354    - This affects the following flags:
  3355      - `--seeds` is now `--p2p.seeds`
  3356      - `--node_laddr` is now `--p2p.laddr`
  3357      - `--pex` is now `--p2p.pex`
  3358      - `--skip_upnp` is now `--p2p.skip_upnp`
  3359      - `--rpc_laddr` is now `--rpc.laddr`
  3360      - `--grpc_laddr` is now `--rpc.grpc_laddr`
  3361    - Any configuration option now within a substract must come under that heading in the `config.toml`, for instance:
  3362      ```
  3363      [p2p]
  3364      laddr="tcp://1.2.3.4:46656"
  3365  
  3366      [consensus]
  3367      timeout_propose=1000
  3368      ```
  3369    - Use viper and `DefaultConfig() / TestConfig()` functions to handle defaults, and remove `config/tendermint` and `config/tendermint_test`
  3370    - Change some function and method signatures to
  3371    - Change some [function and method signatures](https://gist.github.com/ebuchman/640d5fc6c2605f73497992fe107ebe0b) accomodate new config
  3372  
  3373  - Logger
  3374    - Replace static `log15` logger with a simple interface, and provide a new implementation using `go-kit`.
  3375  See our new [logging library](https://github.com/tendermint/tmlibs/log) and [blog post](https://tendermint.com/blog/abstracting-the-logger-interface-in-go) for more details
  3376    - Levels `warn` and `notice` are removed (you may need to change them in your `config.toml`!)
  3377    - Change some [function and method signatures](https://gist.github.com/ebuchman/640d5fc6c2605f73497992fe107ebe0b) to accept a logger
  3378  
  3379  - JSON serialization:
  3380    - Replace `[TypeByte, Xxx]` with `{"type": "some-type", "data": Xxx}` in RPC and all `.json` files by using `go-wire/data`. For instance, a public key is now:
  3381      ```
  3382      "pub_key": {
  3383        "type": "ed25519",
  3384        "data": "83DDF8775937A4A12A2704269E2729FCFCD491B933C4B0A7FFE37FE41D7760D0"
  3385      }
  3386      ```
  3387    - Remove type information about RPC responses, so `[TypeByte, {"jsonrpc": "2.0", ... }]` is now just `{"jsonrpc": "2.0", ... }`
  3388    - Change `[]byte` to `data.Bytes` in all serialized types (for hex encoding)
  3389    - Lowercase the JSON tags in `ValidatorSet` fields
  3390    - Introduce `EventDataInner` for serializing events
  3391  
  3392  - Other:
  3393    - Send InitChain message in handshake if `appBlockHeight == 0`
  3394    - Do not include the `Accum` field when computing the validator hash. This makes the ValidatorSetHash unique for a given validator set, rather than changing with every block (as the Accum changes)
  3395    - Unsafe RPC calls are not enabled by default. This includes `/dial_seeds`, and all calls prefixed with `unsafe`. Use the `--rpc.unsafe` flag to enable.
  3396  
  3397  
  3398  FEATURES:
  3399  
  3400  - Per-module log levels. For instance, the new default is `state:info,*:error`, which means the `state` package logs at `info` level, and everything else logs at `error` level
  3401  - Log if a node is validator or not in every consensus round
  3402  - Use ldflags to set git hash as part of the version
  3403  - Ignore `address` and `pub_key` fields in `priv_validator.json` and overwrite them with the values derrived from the `priv_key`
  3404  
  3405  IMPROVEMENTS:
  3406  
  3407  - Merge `tendermint/go-p2p -> tendermint/tendermint/p2p` and `tendermint/go-rpc -> tendermint/tendermint/rpc/lib`
  3408  - Update paths for grand repo merge:
  3409    - `go-common -> tmlibs/common`
  3410    - `go-data -> go-wire/data`
  3411    - All other `go-` libs, except `go-crypto` and `go-wire`, are merged under `tmlibs`
  3412  - No global loggers (loggers are passed into constructors, or preferably set with a SetLogger method)
  3413  - Return HTTP status codes with errors for RPC responses
  3414  - Limit `/blockchain_info` call to return a maximum of 20 blocks
  3415  - Use `.Wrap()` and `.Unwrap()` instead of eg. `PubKeyS` for `go-crypto` types
  3416  - RPC JSON responses use pretty printing (via `json.MarshalIndent`)
  3417  - Color code different instances of the consensus for tests
  3418  - Isolate viper to `cmd/tendermint/commands` and do not read config from file for tests
  3419  
  3420  
  3421  ## 0.9.2 (April 26, 2017)
  3422  
  3423  BUG FIXES:
  3424  
  3425  - Fix bug in `ResetPrivValidator` where we were using the global config and log (causing external consumers, eg. basecoin, to fail).
  3426  
  3427  ## 0.9.1 (April 21, 2017)
  3428  
  3429  FEATURES:
  3430  
  3431  - Transaction indexing - txs are indexed by their hash using a simple key-value store; easily extended to more advanced indexers
  3432  - New `/tx?hash=X` endpoint to query for transactions and their DeliverTx result by hash. Optionally returns a proof of the tx's inclusion in the block
  3433  - `tendermint testnet` command initializes files for a testnet
  3434  
  3435  IMPROVEMENTS:
  3436  
  3437  - CLI now uses Cobra framework
  3438  - TMROOT is now TMHOME (TMROOT will stop working in 0.10.0)
  3439  - `/broadcast_tx_XXX` also returns the Hash (can be used to query for the tx)
  3440  - `/broadcast_tx_commit` also returns the height the block was committed in
  3441  - ABCIResponses struct persisted to disk before calling Commit; makes handshake replay much cleaner
  3442  - WAL uses #ENDHEIGHT instead of #HEIGHT (#HEIGHT will stop working in 0.10.0)
  3443  - Peers included via `--seeds`, under `seeds` in the config, or in `/dial_seeds` are now persistent, and will be reconnected to if the connection breaks
  3444  
  3445  BUG FIXES:
  3446  
  3447  - Fix bug in fast-sync where we stop syncing after a peer is removed, even if they're re-added later
  3448  - Fix handshake replay to handle validator set changes and results of DeliverTx when we crash after app.Commit but before state.Save()
  3449  
  3450  ## 0.9.0 (March 6, 2017)
  3451  
  3452  BREAKING CHANGES:
  3453  
  3454  - Update ABCI to v0.4.0, where Query is now `Query(RequestQuery) ResponseQuery`, enabling precise proofs at particular heights:
  3455  
  3456  ```
  3457  message RequestQuery{
  3458  	bytes data = 1;
  3459  	string path = 2;
  3460  	uint64 height = 3;
  3461  	bool prove = 4;
  3462  }
  3463  
  3464  message ResponseQuery{
  3465  	CodeType          code        = 1;
  3466  	int64             index       = 2;
  3467  	bytes             key         = 3;
  3468  	bytes             value       = 4;
  3469  	bytes             proof       = 5;
  3470  	uint64            height      = 6;
  3471  	string            log         = 7;
  3472  }
  3473  ```
  3474  
  3475  
  3476  - `BlockMeta` data type unifies its Hash and PartSetHash under a `BlockID`:
  3477  
  3478  ```
  3479  type BlockMeta struct {
  3480  	BlockID BlockID `json:"block_id"` // the block hash and partsethash
  3481  	Header  *Header `json:"header"`   // The block's Header
  3482  }
  3483  ```
  3484  
  3485  - `ValidatorSet.Proposer` is exposed as a field and persisted with the `State`. Use `GetProposer()` to initialize or update after validator-set changes.
  3486  
  3487  - `tendermint gen_validator` command output is now pure JSON
  3488  
  3489  FEATURES:
  3490  
  3491  - New RPC endpoint `/commit?height=X` returns header and commit for block at height `X`
  3492  - Client API for each endpoint, including mocks for testing
  3493  
  3494  IMPROVEMENTS:
  3495  
  3496  - `Node` is now a `BaseService`
  3497  - Simplified starting Tendermint in-process from another application
  3498  - Better organized Makefile
  3499  - Scripts for auto-building binaries across platforms
  3500  - Docker image improved, slimmed down (using Alpine), and changed from tendermint/tmbase to tendermint/tendermint
  3501  - New repo files: `CONTRIBUTING.md`, Github `ISSUE_TEMPLATE`, `CHANGELOG.md`
  3502  - Improvements on CircleCI for managing build/test artifacts
  3503  - Handshake replay is doen through the consensus package, possibly using a mockApp
  3504  - Graceful shutdown of RPC listeners
  3505  - Tests for the PEX reactor and DialSeeds
  3506  
  3507  BUG FIXES:
  3508  
  3509  - Check peer.Send for failure before updating PeerState in consensus
  3510  - Fix panic in `/dial_seeds` with invalid addresses
  3511  - Fix proposer selection logic in ValidatorSet by taking the address into account in the `accumComparable`
  3512  - Fix inconcistencies with `ValidatorSet.Proposer` across restarts by persisting it in the `State`
  3513  
  3514  
  3515  ## 0.8.0 (January 13, 2017)
  3516  
  3517  BREAKING CHANGES:
  3518  
  3519  - New data type `BlockID` to represent blocks:
  3520  
  3521  ```
  3522  type BlockID struct {
  3523  	Hash        []byte        `json:"hash"`
  3524  	PartsHeader PartSetHeader `json:"parts"`
  3525  }
  3526  ```
  3527  
  3528  - `Vote` data type now includes validator address and index:
  3529  
  3530  ```
  3531  type Vote struct {
  3532  	ValidatorAddress []byte           `json:"validator_address"`
  3533  	ValidatorIndex   int              `json:"validator_index"`
  3534  	Height           int              `json:"height"`
  3535  	Round            int              `json:"round"`
  3536  	Type             byte             `json:"type"`
  3537  	BlockID          BlockID          `json:"block_id"` // zero if vote is nil.
  3538  	Signature        crypto.Signature `json:"signature"`
  3539  }
  3540  ```
  3541  
  3542  - Update TMSP to v0.3.0, where it is now called ABCI and AppendTx is DeliverTx
  3543  - Hex strings in the RPC are now "0x" prefixed
  3544  
  3545  
  3546  FEATURES:
  3547  
  3548  - New message type on the ConsensusReactor, `Maj23Msg`, for peers to alert others they've seen a Maj23,
  3549  in order to track and handle conflicting votes intelligently to prevent Byzantine faults from causing halts:
  3550  
  3551  ```
  3552  type VoteSetMaj23Message struct {
  3553  	Height  int
  3554  	Round   int
  3555  	Type    byte
  3556  	BlockID types.BlockID
  3557  }
  3558  ```
  3559  
  3560  - Configurable block part set size
  3561  - Validator set changes
  3562  - Optionally skip TimeoutCommit if we have all the votes
  3563  - Handshake between Tendermint and App on startup to sync latest state and ensure consistent recovery from crashes
  3564  - GRPC server for BroadcastTx endpoint
  3565  
  3566  IMPROVEMENTS:
  3567  
  3568  - Less verbose logging
  3569  - Better test coverage (37% -> 49%)
  3570  - Canonical SignBytes for signable types
  3571  - Write-Ahead Log for Mempool and Consensus via tmlibs/autofile
  3572  - Better in-process testing for the consensus reactor and byzantine faults
  3573  - Better crash/restart testing for individual nodes at preset failure points, and of networks at arbitrary points
  3574  - Better abstraction over timeout mechanics
  3575  
  3576  BUG FIXES:
  3577  
  3578  - Fix memory leak in mempool peer
  3579  - Fix panic on POLRound=-1
  3580  - Actually set the CommitTime
  3581  - Actually send BeginBlock message
  3582  - Fix a liveness issues caused by Byzantine proposals/votes. Uses the new `Maj23Msg`.
  3583  
  3584  
  3585  ## 0.7.4 (December 14, 2016)
  3586  
  3587  FEATURES:
  3588  
  3589  - Enable the Peer Exchange reactor with the `--pex` flag for more resilient gossip network (feature still in development, beware dragons)
  3590  
  3591  IMPROVEMENTS:
  3592  
  3593  - Remove restrictions on RPC endpoint `/dial_seeds` to enable manual network configuration
  3594  
  3595  ## 0.7.3 (October 20, 2016)
  3596  
  3597  IMPROVEMENTS:
  3598  
  3599  - Type safe FireEvent
  3600  - More WAL/replay tests
  3601  - Cleanup some docs
  3602  
  3603  BUG FIXES:
  3604  
  3605  - Fix deadlock in mempool for synchronous apps
  3606  - Replay handles non-empty blocks
  3607  - Fix race condition in HeightVoteSet
  3608  
  3609  ## 0.7.2 (September 11, 2016)
  3610  
  3611  BUG FIXES:
  3612  
  3613  - Set mustConnect=false so tendermint will retry connecting to the app
  3614  
  3615  ## 0.7.1 (September 10, 2016)
  3616  
  3617  FEATURES:
  3618  
  3619  - New TMSP connection for Query/Info
  3620  - New RPC endpoints:
  3621  	- `tmsp_query`
  3622  	- `tmsp_info`
  3623  - Allow application to filter peers through Query (off by default)
  3624  
  3625  IMPROVEMENTS:
  3626  
  3627  - TMSP connection type enforced at compile time
  3628  - All listen/client urls use a "tcp://" or "unix://" prefix
  3629  
  3630  BUG FIXES:
  3631  
  3632  - Save LastSignature/LastSignBytes to `priv_validator.json` for recovery
  3633  - Fix event unsubscribe
  3634  - Fix fastsync/blockchain reactor
  3635  
  3636  ## 0.7.0 (August 7, 2016)
  3637  
  3638  BREAKING CHANGES:
  3639  
  3640  - Strict SemVer starting now!
  3641  - Update to ABCI v0.2.0
  3642  - Validation types now called Commit
  3643  - NewBlock event only returns the block header
  3644  
  3645  
  3646  FEATURES:
  3647  
  3648  - TMSP and RPC support TCP and UNIX sockets
  3649  - Addition config options including block size and consensus parameters
  3650  - New WAL mode `cswal_light`; logs only the validator's own votes
  3651  - New RPC endpoints:
  3652  	- for starting/stopping profilers, and for updating config
  3653  	- `/broadcast_tx_commit`, returns when tx is included in a block, else an error
  3654  	- `/unsafe_flush_mempool`, empties the mempool
  3655  
  3656  
  3657  IMPROVEMENTS:
  3658  
  3659  - Various optimizations
  3660  - Remove bad or invalidated transactions from the mempool cache (allows later duplicates)
  3661  - More elaborate testing using CircleCI including benchmarking throughput on 4 digitalocean droplets
  3662  
  3663  BUG FIXES:
  3664  
  3665  - Various fixes to WAL and replay logic
  3666  - Various race conditions
  3667  
  3668  ## PreHistory
  3669  
  3670  Strict versioning only began with the release of v0.7.0, in late summer 2016.
  3671  The project itself began in early summer 2014 and was workable decentralized cryptocurrency software by the end of that year.
  3672  Through the course of 2015, in collaboration with Eris Industries (now Monax Industries),
  3673  many additional features were integrated, including an implementation from scratch of the Ethereum Virtual Machine.
  3674  That implementation now forms the heart of [Burrow](https://github.com/hyperledger/burrow).
  3675  In the later half of 2015, the consensus algorithm was upgraded with a more asynchronous design and a more deterministic and robust implementation.
  3676  
  3677  By late 2015, frustration with the difficulty of forking a large monolithic stack to create alternative cryptocurrency designs led to the
  3678  invention of the Application Blockchain Interface (ABCI), then called the Tendermint Socket Protocol (TMSP).
  3679  The Ethereum Virtual Machine and various other transaction features were removed, and Tendermint was whittled down to a core consensus engine
  3680  driving an application running in another process.
  3681  The ABCI interface and implementation were iterated on and improved over the course of 2016,
  3682  until versioned history kicked in with v0.7.0.