From 7d2b3e305e0b87813db6c8dd0ef8c466bc895488 Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Fri, 25 Sep 2020 11:05:56 +0400 Subject: [PATCH] docs: minor tweaks (#5404) * docs: fix /validators description Refs https://github.com/tendermint/spec/pull/169 * consensus: remove nil err from logging statement * update UPGRADING.md * note about LightBlocks --- UPGRADING.md | 114 +++++++++++++++++++-------------------- consensus/state.go | 2 +- rpc/openapi/openapi.yaml | 2 +- 3 files changed, 58 insertions(+), 60 deletions(-) diff --git a/UPGRADING.md b/UPGRADING.md index cfd713a43..b1135645b 100644 --- a/UPGRADING.md +++ b/UPGRADING.md @@ -10,63 +10,60 @@ the encoding format (see "Protocol Buffers," below) and the block header (see "B ### ABCI Changes -* New ABCI methods (`ListSnapshots`, `LoadSnapshotChunk`, `OfferSnapshot`, and `ApplySnapshotChunk`) - were added to support the new State Sync feature. - Previously, syncing a new node to a preexisting network could take days; but with State Sync, - new nodes are able to join a network in a matter of seconds. - Read [the spec](https://docs.tendermint.com/master/spec/abci/apps.html#state-sync) - if you want to learn more about State Sync, or if you'd like your application to use it. - (If you don't want to support State Sync in your application, you can just implement these new - ABCI methods as no-ops, leaving them empty.) - -* `KV.Pair` has been replaced with `abci.EventAttribute`. The `EventAttribute.Index` field +* New ABCI methods (`ListSnapshots`, `LoadSnapshotChunk`, `OfferSnapshot`, and `ApplySnapshotChunk`) + were added to support the new State Sync feature. + Previously, syncing a new node to a preexisting network could take days; but with State Sync, + new nodes are able to join a network in a matter of seconds. + Read [the spec](https://docs.tendermint.com/master/spec/abci/apps.html#state-sync) + if you want to learn more about State Sync, or if you'd like your application to use it. + (If you don't want to support State Sync in your application, you can just implement these new + ABCI methods as no-ops, leaving them empty.) + +* `KV.Pair` has been replaced with `abci.EventAttribute`. The `EventAttribute.Index` field allows ABCI applications to dictate which events should be indexed. -* The blockchain can now start from an arbitrary initial height, +* The blockchain can now start from an arbitrary initial height, provided to the application via `RequestInitChain.InitialHeight`. -* ABCI evidence type is now an enum with two recognized types of evidence: - `DUPLICATE_VOTE` and `LIGHT_CLIENT_ATTACK`. - Applications should be able to handle these evidence types +* ABCI evidence type is now an enum with two recognized types of evidence: + `DUPLICATE_VOTE` and `LIGHT_CLIENT_ATTACK`. + Applications should be able to handle these evidence types (i.e., through slashing or other accountability measures). -* The [`PublicKey` type](https://github.com/tendermint/tendermint/blob/master/proto/tendermint/crypto/keys.proto#L13-L15) - (used in ABCI as part of `ValidatorUpdate`) now uses a `oneof` protobuf type. - Note that since Tendermint only supports ed25519 validator keys, there's only one +* The [`PublicKey` type](https://github.com/tendermint/tendermint/blob/master/proto/tendermint/crypto/keys.proto#L13-L15) + (used in ABCI as part of `ValidatorUpdate`) now uses a `oneof` protobuf type. + Note that since Tendermint only supports ed25519 validator keys, there's only one option in the `oneof`. For more, see "Protocol Buffers," below. -* The field `Proof`, on the ABCI type `ResponseQuery`, is now named `ProofOps`. - For more, see "Crypto," below. +* The field `Proof`, on the ABCI type `ResponseQuery`, is now named `ProofOps`. + For more, see "Crypto," below. ### P2P Protocol The default codec is now proto3, not amino. The schema files can be found in the `/proto` -directory. For more, see "Protobuf," below. +directory. For more, see "Protobuf," below. ### Blockchain Protocol -* `Header#LastResultsHash` previously was the root hash of a Merkle tree built from `ResponseDeliverTx(Code, Data)` responses. - As of 0.34,`Header#LastResultsHash` is now the root hash of a Merkle tree built from: - * `BeginBlock#Events` - * Root hash of a Merkle tree built from `ResponseDeliverTx(Code, Data, - GasWanted, GasUsed, Events)` responses - * `BeginBlock#Events` +* `Header#LastResultsHash`, which is the root hash of a Merkle tree built from +`ResponseDeliverTx(Code, Data)` as of v0.34 also includes `GasWanted` and `GasUsed` +fields. * Merkle hashes of empty trees previously returned nothing, but now return the hash of an empty input, - to conform with [RFC-6962](https://tools.ietf.org/html/rfc6962). + to conform with [RFC-6962](https://tools.ietf.org/html/rfc6962). This mainly affects `Header#DataHash`, `Header#LastResultsHash`, and `Header#EvidenceHash`, which are often empty. Non-empty hashes can also be affected, e.g. if their inputs depend on other (empty) Merkle hashes, giving different results. ### Transaction Indexing -Tendermint now relies on the application to tell it which transactions to index. This means that -in the `config.toml`, generated by Tendermint, there is no longer a way to specify which +Tendermint now relies on the application to tell it which transactions to index. This means that +in the `config.toml`, generated by Tendermint, there is no longer a way to specify which transactions to index. `tx.height` & `tx.hash` will always be indexed when using the `kv` indexer. -Applications must now choose to either a) enable indexing for all transactions, or +Applications must now choose to either a) enable indexing for all transactions, or b) allow node operators to decide which transactions to index. -Applications can notify Tendermint to index a specific transaction by setting +Applications can notify Tendermint to index a specific transaction by setting `Index: bool` to `true` in the Event Attribute: ```go @@ -82,19 +79,19 @@ Applications can notify Tendermint to index a specific transaction by setting ### Protocol Buffers -Tendermint 0.34 replaces Amino with Protocol Buffers for encoding. -This migration is extensive and results in a number of changes, however, +Tendermint 0.34 replaces Amino with Protocol Buffers for encoding. +This migration is extensive and results in a number of changes, however, Tendermint only uses the types generated from Protocol Buffers for disk and -wire serialization. +wire serialization. **This means that these changes should not affect you as a Tendermint user.** However, Tendermint users and contributors may note the following changes: -* Directory layout changes: All proto files have been moved under one directory, `/proto`. - This is in line with the recommended file layout by [Buf](https://buf.build). +* Directory layout changes: All proto files have been moved under one directory, `/proto`. + This is in line with the recommended file layout by [Buf](https://buf.build). For more, see the [Buf documentation](https://buf.build/docs/lint-checkers#file_layout). -* ABCI Changes: As noted in the "ABCI Changes" section above, the `PublicKey` type now uses - a `oneof` type. +* ABCI Changes: As noted in the "ABCI Changes" section above, the `PublicKey` type now uses + a `oneof` type. For more on the Protobuf changes, please see our [blog post on this migration](https://medium.com/tendermint/tendermint-0-34-protocol-buffers-and-you-8c40558939ae). @@ -114,30 +111,30 @@ Tendermint 0.34 includes new and updated consensus parameters. #### Keys -* Keys no longer include a type prefix. For example, ed25519 pubkeys have been renamed from - `PubKeyEd25519` to `PubKey`. This reduces stutter (e.g., `ed25519.PubKey`). +* Keys no longer include a type prefix. For example, ed25519 pubkeys have been renamed from + `PubKeyEd25519` to `PubKey`. This reduces stutter (e.g., `ed25519.PubKey`). * Keys are now byte slices (`[]byte`) instead of byte arrays (`[]byte`). -* The multisig functionality that was previously in Tendermint now has - a new home within the Cosmos SDK: +* The multisig functionality that was previously in Tendermint now has + a new home within the Cosmos SDK: [`cosmos/cosmos-sdk/types/multisig`](https://github.com/cosmos/cosmos-sdk/blob/master/crypto/types/multisig/multisignature.go). -* Similarly, secp256k1 has been removed from the Tendermint repo. - There is still [a secp256k1 implementation in the Cosmos SDK](https://github.com/cosmos/cosmos-sdk/tree/443e0c1f89bd3730a731aea30453bd732f7efa35/crypto/keys/secp256k1), +* Similarly, secp256k1 has been removed from the Tendermint repo. + There is still [a secp256k1 implementation in the Cosmos SDK](https://github.com/cosmos/cosmos-sdk/tree/443e0c1f89bd3730a731aea30453bd732f7efa35/crypto/keys/secp256k1), and we recommend you use that package for all your secp256k1 needs. #### `merkle` Package * `SimpleHashFromMap()` and `SimpleProofsFromMap()` were removed. -* The prefix `Simple` has been removed. (For example, `SimpleProof` is now called `Proof`.) -* All protobuf messages have been moved to the `/proto` directory. -* The protobuf message `Proof` that contained multiple ProofOp's has been renamed to `ProofOps`. - As noted above, this affects the ABCI type `ResponseQuery`: +* The prefix `Simple` has been removed. (For example, `SimpleProof` is now called `Proof`.) +* All protobuf messages have been moved to the `/proto` directory. +* The protobuf message `Proof` that contained multiple ProofOp's has been renamed to `ProofOps`. + As noted above, this affects the ABCI type `ResponseQuery`: The field that was named Proof is now named `ProofOps`. * `HashFromByteSlices` and `ProofsFromByteSlices` now return a hash for empty inputs, to conform with [RFC-6962](https://tools.ietf.org/html/rfc6962). ### `libs` Package -The `bech32` package has moved to the Cosmos SDK: +The `bech32` package has moved to the Cosmos SDK: [`cosmos/cosmos-sdk/types/bech32`](https://github.com/cosmos/cosmos-sdk/tree/4173ea5ebad906dd9b45325bed69b9c655504867/types/bech32). ### CLI @@ -147,37 +144,38 @@ See [the docs](https://docs.tendermint.com/master/tendermint-core/light-client-p ### Light Client -We have a new, rewritten light client! You can +We have a new, rewritten light client! You can [read more](https://medium.com/tendermint/everything-you-need-to-know-about-the-tendermint-light-client-f80d03856f98) -about the justifications and details behind this change. +about the justifications and details behind this change. Other user-relevant changes include: * The old `lite` package was removed; the new light client uses the `light` package. -* The `Verifier` was broken up into two pieces: - * Core verification logic (pure `VerifyX` functions) +* The `Verifier` was broken up into two pieces: + * Core verification logic (pure `VerifyX` functions) * `Client` object, which represents the complete light client -* The RPC client can be found in the `/rpc` directory. +* The new light clients stores headers & validator sets as `LightBlock`s +* The RPC client can be found in the `/rpc` directory. * The HTTP(S) proxy is located in the `/proxy` directory. ### `state` Package * A new field `State.InitialHeight` has been added to record the initial chain height, which must be `1` (not `0`) if starting from height `1`. This can be configured via the genesis field `initial_height`. -* The `state` package now has a `Store` interface. All functions in - [state/store.go](https://github.com/tendermint/tendermint/blob/56911ee35298191c95ef1c7d3d5ec508237aaff4/state/store.go#L42-L42) +* The `state` package now has a `Store` interface. All functions in + [state/store.go](https://github.com/tendermint/tendermint/blob/56911ee35298191c95ef1c7d3d5ec508237aaff4/state/store.go#L42-L42) are now part of the interface. The interface returns errors on all methods and can be used by calling `state.NewStore(dbm.DB)`. ### `privval` Package All requests are now accompanied by the chain ID from the network. -This is a optional field and can be ignored by key management systems. +This is a optional field and can be ignored by key management systems. It is recommended to check the chain ID if using the same key management system for multiple chains. ### RPC `/unsafe_start_cpu_profiler`, `/unsafe_stop_cpu_profiler` and -`/unsafe_write_heap_profile` were removed. +`/unsafe_write_heap_profile` were removed. For profiling, please use the pprof server, which can be enabled through `--rpc.pprof_laddr=X` flag or `pprof_laddr=X` config setting in the rpc section. diff --git a/consensus/state.go b/consensus/state.go index fada3b222..d0d87d567 100644 --- a/consensus/state.go +++ b/consensus/state.go @@ -2127,7 +2127,7 @@ func (cs *State) signAddVote(msgType tmproto.SignedMsgType, hash []byte, header vote, err := cs.signVote(msgType, hash, header) if err == nil { cs.sendInternalMessage(msgInfo{&VoteMessage{vote}, ""}) - cs.Logger.Info("Signed and pushed vote", "height", cs.Height, "round", cs.Round, "vote", vote, "err", err) + cs.Logger.Info("Signed and pushed vote", "height", cs.Height, "round", cs.Round, "vote", vote) return vote } //if !cs.replayMode { diff --git a/rpc/openapi/openapi.yaml b/rpc/openapi/openapi.yaml index 44d40e5d8..14d354b05 100644 --- a/rpc/openapi/openapi.yaml +++ b/rpc/openapi/openapi.yaml @@ -789,7 +789,7 @@ paths: tags: - Info description: | - Get Validators. Validators are sorted by voting power. + Get Validators. Validators are sorted first by voting power (descending), then by address (ascending). responses: "200": description: Commit results.