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