diff --git a/CHANGELOG.md b/CHANGELOG.md index b1f17505e..a3dbe07d9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,163 @@ # Changelog +## v0.33 + +Special thanks to external contributors on this release: @mrekucci, @PSalant726, @princesinha19, @greg-szabo, @dongsam, @cuonglm, @jgimeno, @yenkhoon + +Friendly reminder, we have a [bug bounty +program.](https://hackerone.com/tendermint). + +*January 14, 2020* + +This release contains breaking changes to the `Block#Header`, specifically +`NumTxs` and `TotalTxs` were removed (\#2521). Here's how this change affects +different modules: + +- apps: it breaks the ABCI header field numbering +- state: it breaks the format of `State` on disk +- RPC: all RPC requests which expose the header broke +- Go API: the `Header` broke +- P2P: since blocks go over the wire, technically the P2P protocol broke + +Also, blocks are significantly smaller 🔥 because we got rid of the redundant +information in `Block#LastCommit`. `Commit` now mainly consists of a signature +and a validator address plus a timestamp. Note we may remove the validator +address & timestamp fields in the future (see ADR-25). + +`lite2` package has been added to solve `lite` issues and introduce weak +subjectivity interface. Refer to the [spec](https://github.com/tendermint/spec/blob/master/spec/consensus/light-client.md) for complete details. +`lite` package is now deprecated and will be removed in v0.34 release. + +### BREAKING CHANGES: + +- CLI/RPC/Config + + - [rpc] [\#3471](https://github.com/tendermint/tendermint/issues/3471) Paginate `/validators` response (default: 30 vals per page) + - [rpc] [\#3188](https://github.com/tendermint/tendermint/issues/3188) Remove `BlockMeta` in `ResultBlock` in favor of `BlockId` for `/block` + - [rpc] `/block_results` response format updated (see RPC docs for details) + ``` + { + "jsonrpc": "2.0", + "id": "", + "result": { + "height": "2109", + "txs_results": null, + "begin_block_events": null, + "end_block_events": null, + "validator_updates": null, + "consensus_param_updates": null + } + } + ``` + - [rpc] [\#4141](https://github.com/tendermint/tendermint/pull/4141) Remove `#event` suffix from the ID in event responses. + `{"jsonrpc": "2.0", "id": 0, "result": ...}` + - [rpc] [\#4141](https://github.com/tendermint/tendermint/pull/4141) Switch to integer IDs instead of `json-client-XYZ` + ``` + id=0 method=/subscribe + id=0 result=... + id=1 method=/abci_query + id=1 result=... + ``` + - ID is unique for each request; + - Request.ID is now optional. Notification is a Request without an ID. Previously ID="" or ID=0 were considered as notifications. + + - [config] [\#4046](https://github.com/tendermint/tendermint/issues/4046) Rename tag(s) to CompositeKey & places where tag is still present it was renamed to event or events. Find how a compositeKey is constructed [here](https://github.com/tendermint/tendermint/blob/6d05c531f7efef6f0619155cf10ae8557dd7832f/docs/app-dev/indexing-transactions.md) + - You will have to generate a new config for your Tendermint node(s) + - [genesis] [\#2565](https://github.com/tendermint/tendermint/issues/2565) Add `consensus_params.evidence.max_age_duration`. Rename + `consensus_params.evidence.max_age` to `max_age_num_blocks`. + - [cli] [\#1771](https://github.com/tendermint/tendermint/issues/1771) `tendermint lite` now uses new light client package (`lite2`) + and has 3 more flags: `--trusting-period`, `--trusted-height` and + `--trusted-hash` + +- Apps + + - [tm-bench] Removed tm-bench in favor of [tm-load-test](https://github.com/interchainio/tm-load-test) + +- Go API + + - [rpc] [\#3953](https://github.com/tendermint/tendermint/issues/3953) Modify NewHTTP, NewXXXClient functions to return an error on invalid remote instead of panicking (@mrekucci) + - [rpc/client] [\#3471](https://github.com/tendermint/tendermint/issues/3471) `Validators` now requires two more args: `page` and `perPage` + - [libs/common] [\#3262](https://github.com/tendermint/tendermint/issues/3262) Make error the last parameter of `Task` (@PSalant726) + - [cs/types] [\#3262](https://github.com/tendermint/tendermint/issues/3262) Rename `GotVoteFromUnwantedRoundError` to `ErrGotVoteFromUnwantedRound` (@PSalant726) + - [libs/common] [\#3862](https://github.com/tendermint/tendermint/issues/3862) Remove `errors.go` from `libs/common` + - [libs/common] [\#4230](https://github.com/tendermint/tendermint/issues/4230) Move `KV` out of common to its own pkg + - [libs/common] [\#4230](https://github.com/tendermint/tendermint/issues/4230) Rename `cmn.KVPair(s)` to `kv.Pair(s)`s + - [libs/common] [\#4232](https://github.com/tendermint/tendermint/issues/4232) Move `Service` & `BaseService` from `libs/common` to `libs/service` + - [libs/common] [\#4232](https://github.com/tendermint/tendermint/issues/4232) Move `common/nil.go` to `types/utils.go` & make the functions private + - [libs/common] [\#4231](https://github.com/tendermint/tendermint/issues/4231) Move random functions from `libs/common` into pkg `rand` + - [libs/common] [\#4237](https://github.com/tendermint/tendermint/issues/4237) Move byte functions from `libs/common` into pkg `bytes` + - [libs/common] [\#4237](https://github.com/tendermint/tendermint/issues/4237) Move throttletimer functions from `libs/common` into pkg `timer` + - [libs/common] [\#4237](https://github.com/tendermint/tendermint/issues/4237) Move tempfile functions from `libs/common` into pkg `tempfile` + - [libs/common] [\#4240](https://github.com/tendermint/tendermint/issues/4240) Move os functions from `libs/common` into pkg `os` + - [libs/common] [\#4240](https://github.com/tendermint/tendermint/issues/4240) Move net functions from `libs/common` into pkg `net` + - [libs/common] [\#4240](https://github.com/tendermint/tendermint/issues/4240) Move mathematical functions and types out of `libs/common` to `math` pkg + - [libs/common] [\#4240](https://github.com/tendermint/tendermint/issues/4240) Move string functions out of `libs/common` to `strings` pkg + - [libs/common] [\#4240](https://github.com/tendermint/tendermint/issues/4240) Move async functions out of `libs/common` to `async` pkg + - [libs/common] [\#4240](https://github.com/tendermint/tendermint/issues/4240) Move bit functions out of `libs/common` to `bits` pkg + - [libs/common] [\#4240](https://github.com/tendermint/tendermint/issues/4240) Move cmap functions out of `libs/common` to `cmap` pkg + - [libs/common] [\#4258](https://github.com/tendermint/tendermint/issues/4258) Remove `Rand` from all `rand` pkg functions + - [types] [\#2565](https://github.com/tendermint/tendermint/issues/2565) Remove `MockBadEvidence` & `MockGoodEvidence` in favor of `MockEvidence` + +- Blockchain Protocol + + - [abci] [\#2521](https://github.com/tendermint/tendermint/issues/2521) Remove `TotalTxs` and `NumTxs` from `Header` + - [types] [\#4151](https://github.com/tendermint/tendermint/pull/4151) Enforce ordering of votes in DuplicateVoteEvidence to be lexicographically sorted on BlockID + - [types] [\#1648](https://github.com/tendermint/tendermint/issues/1648) Change `Commit` to consist of just signatures + +- P2P Protocol + + - [p2p] [\#3668](https://github.com/tendermint/tendermint/pull/3668) Make `SecretConnection` non-malleable + +- [proto] [\#3986](https://github.com/tendermint/tendermint/pull/3986) Prefix protobuf types to avoid name conflicts. + - ABCI becomes `tendermint.abci.types` with the new API endpoint `/tendermint.abci.types.ABCIApplication/` + - core_grpc becomes `tendermint.rpc.grpc` with the new API endpoint `/tendermint.rpc.grpc.BroadcastAPI/` + - merkle becomes `tendermint.crypto.merkle` + - libs.common becomes `tendermint.libs.common` + - proto3 becomes `tendermint.types.proto3` + +### FEATURES: + +- [p2p] [\#4053](https://github.com/tendermint/tendermint/issues/4053) Add `unconditional_peer_ids` and `persistent_peers_max_dial_period` config variables (see ADR-050) (@dongsam) +- [tools] [\#4227](https://github.com/tendermint/tendermint/pull/4227) Implement `tendermint debug kill` and + `tendermint debug dump` commands for Tendermint node debugging functionality. See `--help` in both + commands for further documentation and usage. +- [cli] [\#4234](https://github.com/tendermint/tendermint/issues/4234) Add `--db_backend and --db_dir` flags (@princesinha19) +- [cli] [\#4113](https://github.com/tendermint/tendermint/issues/4113) Add optional `--genesis_hash` flag to check genesis hash upon startup +- [config] [\#3831](https://github.com/tendermint/tendermint/issues/3831) Add support for [RocksDB](https://rocksdb.org/) (@Stumble) +- [rpc] [\#3985](https://github.com/tendermint/tendermint/issues/3985) Add new `/block_by_hash` endpoint, which allows to fetch a block by its hash (@princesinha19) +- [metrics] [\#4263](https://github.com/tendermint/tendermint/issues/4263) Add + - `consensus_validator_power`: track your validators power + - `consensus_validator_last_signed_height`: track at which height the validator last signed + - `consensus_validator_missed_blocks`: total amount of missed blocks for a validator + as gauges in prometheus for validator specific metrics +- [rpc/lib] [\#4248](https://github.com/tendermint/tendermint/issues/4248) RPC client basic authentication support (@greg-szabo) +- [lite2] [\#1771](https://github.com/tendermint/tendermint/issues/1771) Light client with weak subjectivity + +### IMPROVEMENTS: + +- [rpc] [\#3188](https://github.com/tendermint/tendermint/issues/3188) Added `block_size` to `BlockMeta` this is reflected in `/blockchain` +- [types] [\#2521](https://github.com/tendermint/tendermint/issues/2521) Add `NumTxs` to `BlockMeta` and `EventDataNewBlockHeader` +- [p2p] [\#4185](https://github.com/tendermint/tendermint/pull/4185) Simplify `SecretConnection` handshake with merlin +- [cli] [\#4065](https://github.com/tendermint/tendermint/issues/4065) Add `--consensus.create_empty_blocks_interval` flag (@jgimeno) +- [docs] [\#4065](https://github.com/tendermint/tendermint/issues/4065) Document `--consensus.create_empty_blocks_interval` flag (@jgimeno) +- [crypto] [\#4190](https://github.com/tendermint/tendermint/pull/4190) Added SR25519 signature scheme +- [abci] [\#4177] kvstore: Return `LastBlockHeight` and `LastBlockAppHash` in `Info` (@princesinha19) +- [rpc] [\#2741](https://github.com/tendermint/tendermint/issues/2741) Add `proposer` to `/consensus_state` response (@princesinha19) +- [deps] [\#4289](https://github.com/tendermint/tendermint/pull/4289) Update tm-db to 0.4.0, this includes major breaking changes in the dep that change how errors are handled. + +### BUG FIXES: + +- [rpc/lib][\#4051](https://github.com/tendermint/tendermint/pull/4131) Fix RPC client, which was previously resolving https protocol to http (@yenkhoon) +- [rpc] [\#4141](https://github.com/tendermint/tendermint/pull/4141) JSONRPCClient: validate that Response.ID matches Request.ID +- [rpc] [\#4141](https://github.com/tendermint/tendermint/pull/4141) WSClient: check for unsolicited responses +- [types] [\4164](https://github.com/tendermint/tendermint/pull/4164) Prevent temporary power overflows on validator updates +- [cs] [\#4069](https://github.com/tendermint/tendermint/issues/4069) Don't panic when block meta is not found in store (@gregzaitsev) +- [types] [\#4164](https://github.com/tendermint/tendermint/issues/4164) Prevent temporary power overflows on validator updates (joint + efforts of @gchaincl and @ancazamfir) +- [p2p] [\#4140](https://github.com/tendermint/tendermint/issues/4140) `SecretConnection`: use the transcript solely for authentication (i.e. MAC) +- [consensus/types] [\#4243](https://github.com/tendermint/tendermint/issues/4243) fix BenchmarkRoundStateDeepCopy panics (@cuonglm) +- [rpc] [\#4256](https://github.com/tendermint/tendermint/issues/4256) Pass `outCapacity` to `eventBus#Subscribe` when subscribing using a local client + ## v0.32.9 _January, 9, 2020_ @@ -9,7 +167,6 @@ Special thanks to external contributors on this release: @greg-szabo, @gregzaits Friendly reminder, we have a [bug bounty program](https://hackerone.com/tendermint). - ### FEATURES: - [rpc/lib] [\#4248](https://github.com/tendermint/tendermint/issues/4248) RPC client basic authentication support (@greg-szabo) @@ -20,7 +177,6 @@ program](https://hackerone.com/tendermint). - `consensus_validator_missed_blocks`: total amount of missed blocks for a validator as gauges in prometheus for validator specific metrics - ### BUG FIXES: - [rpc/lib] [\#4051](https://github.com/tendermint/tendermint/pull/4131) Fix RPC client, which was previously resolving https protocol to http (@yenkhoon) diff --git a/CHANGELOG_PENDING.md b/CHANGELOG_PENDING.md index f85f4ad0e..be210ae52 100644 --- a/CHANGELOG_PENDING.md +++ b/CHANGELOG_PENDING.md @@ -1,29 +1,8 @@ -## v0.32.9 +## v0.33.1 \*\* -This release contains breaking changes to the `Block#Header`, specifically -`NumTxs` and `TotalTxs` were removed (\#2521). Here's how this change affects -different modules: - -- apps: it breaks the ABCI header field numbering -- state: it breaks the format of `State` on disk -- RPC: all RPC requests which expose the header broke -- Go API: the `Header` broke -- P2P: since blocks go over the wire, technically the P2P protocol broke - -Also, blocks are significantly smaller 🔥 because we got rid of the redundant -information in `Block#LastCommit`. `Commit` now mainly consists of a signature -and a validator address plus a timestamp. Note we may remove the validator -address & timestamp fields in the future (see ADR-25). - -`lite2` package has been added to solve `lite` issues and introduce weak -subjectivity interface -https://github.com/tendermint/spec/blob/master/spec/consensus/light-client.md). -`lite` package is now deprecated and will be removed in v0.34 release. - Special thanks to external contributors on this release: -@erikgrinaker, @PSalant726, @gchaincl, @gregzaitsev, @princesinha19, @Stumble Friendly reminder, we have a [bug bounty program](https://hackerone.com/tendermint). @@ -32,130 +11,14 @@ program](https://hackerone.com/tendermint). - CLI/RPC/Config - - [rpc] \#3471 Paginate `/validators` response (default: 30 vals per page) - - [rpc] \#3188 Remove `BlockMeta` in `ResultBlock` in favor of `BlockId` for `/block` - - [rpc] `/block_results` response format updated (see RPC docs for details) - ``` - { - "jsonrpc": "2.0", - "id": "", - "result": { - "height": "2109", - "txs_results": null, - "begin_block_events": null, - "end_block_events": null, - "validator_updates": null, - "consensus_param_updates": null - } - } - ``` - - [rpc] [\#4141](https://github.com/tendermint/tendermint/pull/4141) Remove `#event` suffix from the ID in event responses. - `{"jsonrpc": "2.0", "id": 0, "result": ...}` - - [rpc] [\#4141](https://github.com/tendermint/tendermint/pull/4141) Switch to integer IDs instead of `json-client-XYZ` - ``` - id=0 method=/subscribe - id=0 result=... - id=1 method=/abci_query - id=1 result=... - ``` - - ID is unique for each request; - - Request.ID is now optional. Notification is a Request without an ID. Previously ID="" or ID=0 were considered as notifications. - - - [config] \#4046 Rename tag(s) to CompositeKey & places where tag is still present it was renamed to event or events. Find how a compositeKey is constructed [here](https://github.com/tendermint/tendermint/blob/6d05c531f7efef6f0619155cf10ae8557dd7832f/docs/app-dev/indexing-transactions.md) - - You will have to generate a new config for your Tendermint node(s) - - [genesis] \#2565 Add `consensus_params.evidence.max_age_duration`. Rename - `consensus_params.evidence.max_age` to `max_age_num_blocks`. - - [cli] \#1771 `tendermint lite` now uses new light client package (`lite2`) - and has 3 more flags: `--trusting-period`, `--trusted-height` and - `--trusted-hash` - - Apps - - [tm-bench] Removed tm-bench in favor of [tm-load-test](https://github.com/interchainio/tm-load-test) - - Go API - - [rpc] \#3953 Modify NewHTTP, NewXXXClient functions to return an error on invalid remote instead of panicking (@mrekucci) - - [rpc/client] \#3471 `Validators` now requires two more args: `page` and `perPage` - - [libs/common] \#3262 Make error the last parameter of `Task` (@PSalant726) - - [cs/types] \#3262 Rename `GotVoteFromUnwantedRoundError` to `ErrGotVoteFromUnwantedRound` (@PSalant726) - - [libs/common] \#3862 Remove `errors.go` from `libs/common` - - [libs/common] \#4230 Move `KV` out of common to its own pkg - - [libs/common] \#4230 Rename `cmn.KVPair(s)` to `kv.Pair(s)`s - - [libs/common] \#4232 Move `Service` & `BaseService` from `libs/common` to `libs/service` - - [libs/common] \#4232 Move `common/nil.go` to `types/utils.go` & make the functions private - - [libs/common] \#4231 Move random functions from `libs/common` into pkg `rand` - - [libs/common] \#4237 Move byte functions from `libs/common` into pkg `bytes` - - [libs/common] \#4237 Move throttletimer functions from `libs/common` into pkg `timer` - - [libs/common] \#4237 Move tempfile functions from `libs/common` into pkg `tempfile` - - [libs/common] \#4240 Move os functions from `libs/common` into pkg `os` - - [libs/common] \#4240 Move net functions from `libs/common` into pkg `net` - - [libs/common] \#4240 Move mathematical functions and types out of `libs/common` to `math` pkg - - [libs/common] \#4240 Move string functions out of `libs/common` to `strings` pkg - - [libs/common] \#4240 Move async functions out of `libs/common` to `async` pkg - - [libs/common] \#4240 Move bit functions out of `libs/common` to `bits` pkg - - [libs/common] \#4240 Move cmap functions out of `libs/common` to `cmap` pkg - - [libs/common] \#4258 Remove `Rand` from all `rand` pkg functions - - [types] \#2565 Remove `MockBadEvidence` & `MockGoodEvidence` in favor of `MockEvidence` - - -- Blockchain Protocol - - - [abci] \#2521 Remove `TotalTxs` and `NumTxs` from `Header` - - [types] [\#4151](https://github.com/tendermint/tendermint/pull/4151) Enforce ordering of votes in DuplicateVoteEvidence to be lexicographically sorted on BlockID - - [types] \#1648 Change `Commit` to consist of just signatures - -- P2P Protocol - - - [p2p] [\#3668](https://github.com/tendermint/tendermint/pull/3668) Make `SecretConnection` non-malleable - -- [proto] [\#3986](https://github.com/tendermint/tendermint/pull/3986) Prefix protobuf types to avoid name conflicts. - - ABCI becomes `tendermint.abci.types` with the new API endpoint `/tendermint.abci.types.ABCIApplication/` - - core_grpc becomes `tendermint.rpc.grpc` with the new API endpoint `/tendermint.rpc.grpc.BroadcastAPI/` - - merkle becomes `tendermint.crypto.merkle` - - libs.common becomes `tendermint.libs.common` - - proto3 becomes `tendermint.types.proto3` - ### FEATURES: -- [p2p] \#4053 Add `unconditional_peer_ids` and `persistent_peers_max_dial_period` config variables (see ADR-050) (@dongsam) -- [tools] [\#4227](https://github.com/tendermint/tendermint/pull/4227) Implement `tendermint debug kill` and - `tendermint debug dump` commands for Tendermint node debugging functionality. See `--help` in both - commands for further documentation and usage. -- [cli] \#4234 Add `--db_backend and --db_dir` flags (@princesinha19) -- [cli] \#4113 Add optional `--genesis_hash` flag to check genesis hash upon startup -- [config] \#3831 Add support for [RocksDB](https://rocksdb.org/) (@Stumble) -- [rpc] \#3985 Add new `/block_by_hash` endpoint, which allows to fetch a block by its hash (@princesinha19) -- [metrics] \#4263 Add - - `consensus_validator_power`: track your validators power - - `consensus_validator_last_signed_height`: track at which height the validator last signed - - `consensus_validator_missed_blocks`: total amount of missed blocks for a validator - as gauges in prometheus for validator specific metrics -- [rpc/lib] [\#4248](https://github.com/tendermint/tendermint/issues/4248) RPC client basic authentication support (@greg-szabo) -- [lite2] \#1771 Light client with weak subjectivity - ### IMPROVEMENTS: -- [rpc] \#3188 Added `block_size` to `BlockMeta` this is reflected in `/blockchain` -- [types] \#2521 Add `NumTxs` to `BlockMeta` and `EventDataNewBlockHeader` -- [docs] [\#4111](https://github.com/tendermint/tendermint/issues/4111) Replaced dead whitepaper link in README.md -- [p2p] [\#4185](https://github.com/tendermint/tendermint/pull/4185) Simplify `SecretConnection` handshake with merlin -- [cli] [\#4065](https://github.com/tendermint/tendermint/issues/4065) Add `--consensus.create_empty_blocks_interval` flag (@jgimeno) -- [docs] [\#4065](https://github.com/tendermint/tendermint/issues/4065) Document `--consensus.create_empty_blocks_interval` flag (@jgimeno) -- [crypto] [\#4190](https://github.com/tendermint/tendermint/pull/4190) Added SR25519 signature scheme -- [abci] [\#4177] kvstore: Return `LastBlockHeight` and `LastBlockAppHash` in `Info` (@princesinha19) -- [rpc] [\#2741](https://github.com/tendermint/tendermint/issues/2741) Add `proposer` to `/consensus_state` response (@princesinha19) -- [deps] [\#4289](https://github.com/tendermint/tendermint/pull/4289) Update tm-db to 0.4.0, this includes major breaking changes in the dep that change how errors are handled. - ### BUG FIXES: -- [rpc/lib][\#4051](https://github.com/tendermint/tendermint/pull/4131) Fix RPC client, which was previously resolving https protocol to http (@yenkhoon) -- [rpc] [\#4141](https://github.com/tendermint/tendermint/pull/4141) JSONRPCClient: validate that Response.ID matches Request.ID -- [rpc] [\#4141](https://github.com/tendermint/tendermint/pull/4141) WSClient: check for unsolicited responses -- [types] [\4164](https://github.com/tendermint/tendermint/pull/4164) Prevent temporary power overflows on validator updates -- [cs] \#4069 Don't panic when block meta is not found in store (@gregzaitsev) -- [types] \#4164 Prevent temporary power overflows on validator updates (joint - efforts of @gchaincl and @ancazamfir) -- [p2p] \#4140 `SecretConnection`: use the transcript solely for authentication (i.e. MAC) -- [consensus/types] \#4243 fix BenchmarkRoundStateDeepCopy panics (@cuonglm) -- [rpc] \#4256 Pass `outCapacity` to `eventBus#Subscribe` when subscribing using a local client + diff --git a/UPGRADING.md b/UPGRADING.md index 3defa8ec8..bb531d32f 100644 --- a/UPGRADING.md +++ b/UPGRADING.md @@ -3,6 +3,37 @@ This guide provides steps to be followed when you upgrade your applications to a newer version of Tendermint Core. +## v0.33.0 + +This release is not compatible with previous blockchains due to commit becoming signatures only and fields in the header have been removed. + +### Config Changes + +You will need to generate a new config if you have used a prior version of tendermint. + +- Tags have been entirely renamed throughout the codebase to events and there keys are called [compositeKeys](https://github.com/tendermint/tendermint/blob/6d05c531f7efef6f0619155cf10ae8557dd7832f/docs/app-dev/indexing-transactions.md). +- Evidence Params has been changed to include duration. + - `consensus_params.evidence.max_age_duration`. + - Renamed `consensus_params.evidence.max_age` to `max_age_num_blocks`. + +### Go API + +- `libs/common` has been removed in favor of specific pkgs. + - `async` + - `service` + - `rand` + - `net` + - `strings` + - `cmap` +- removal of `errors` pkg + +### RPC Changes + +- `/validators` is now paginated (default: 30 vals per page) +- `/block_results` response format updated [see RPC docs for details](https://docs.tendermint.com/master/rpc/#/Info/block_results) +- Event suffix has been removed from the ID in event responses +- IDs are now integers not `json-client-XYZ` + ## v0.32.0 This release is compatible with previous blockchains,