github.com/DFWallet/tendermint-cosmos@v0.0.2/UPGRADING.md (about)

     1  # Upgrading Tendermint Core
     2  
     3  This guide provides instructions for upgrading to specific versions of Tendermint Core.
     4  
     5  ## v0.34.0
     6  
     7  **Upgrading to Tendermint 0.34 requires a blockchain restart.**
     8  This release is not compatible with previous blockchains due to changes to
     9  the encoding format (see "Protocol Buffers," below) and the block header (see "Blockchain Protocol").
    10  
    11  Note also that Tendermint 0.34 also requires Go 1.15 or higher.
    12  
    13  ### ABCI Changes
    14  
    15  * The `ABCIVersion` is now `0.17.0`.
    16  
    17  * New ABCI methods (`ListSnapshots`, `LoadSnapshotChunk`, `OfferSnapshot`, and `ApplySnapshotChunk`)
    18    were added to support the new State Sync feature.
    19    Previously, syncing a new node to a preexisting network could take days; but with State Sync,
    20    new nodes are able to join a network in a matter of seconds.
    21    Read [the spec](https://docs.tendermint.com/master/spec/abci/apps.html#state-sync)
    22    if you want to learn more about State Sync, or if you'd like your application to use it.
    23    (If you don't want to support State Sync in your application, you can just implement these new
    24    ABCI methods as no-ops, leaving them empty.)
    25  
    26  * `KV.Pair` has been replaced with `abci.EventAttribute`. The `EventAttribute.Index` field
    27    allows ABCI applications to dictate which events should be indexed.
    28  
    29  * The blockchain can now start from an arbitrary initial height,
    30    provided to the application via `RequestInitChain.InitialHeight`.
    31  
    32  * ABCI evidence type is now an enum with two recognized types of evidence:
    33    `DUPLICATE_VOTE` and `LIGHT_CLIENT_ATTACK`.
    34    Applications should be able to handle these evidence types
    35    (i.e., through slashing or other accountability measures).
    36  
    37  * The [`PublicKey` type](https://github.com/DFWallet/tendermint-cosmos/blob/master/proto/tendermint/crypto/keys.proto#L13-L15)
    38    (used in ABCI as part of `ValidatorUpdate`) now uses a `oneof` protobuf type.
    39    Note that since Tendermint only supports ed25519 validator keys, there's only one
    40    option in the `oneof`.  For more, see "Protocol Buffers," below.
    41  
    42  * The field `Proof`, on the ABCI type `ResponseQuery`, is now named `ProofOps`.
    43    For more, see "Crypto," below.
    44  
    45  ### P2P Protocol
    46  
    47  The default codec is now proto3, not amino. The schema files can be found in the `/proto`
    48  directory. For more, see "Protobuf," below.
    49  
    50  ### Blockchain Protocol
    51  
    52  * `Header#LastResultsHash` previously was the root hash of a Merkle tree built from `ResponseDeliverTx(Code, Data)` responses.
    53    As of 0.34,`Header#LastResultsHash` is now the root hash of a Merkle tree built from:
    54      * `BeginBlock#Events`
    55      * Root hash of a Merkle tree built from `ResponseDeliverTx(Code, Data,
    56        GasWanted, GasUsed, Events)` responses
    57      * `BeginBlock#Events`
    58  
    59  * Merkle hashes of empty trees previously returned nothing, but now return the hash of an empty input,
    60    to conform with [RFC-6962](https://tools.ietf.org/html/rfc6962).
    61    This mainly affects `Header#DataHash`, `Header#LastResultsHash`, and
    62    `Header#EvidenceHash`, which are often empty. Non-empty hashes can also be affected, e.g. if their
    63    inputs depend on other (empty) Merkle hashes, giving different results.
    64  
    65  ### Transaction Indexing
    66  
    67  Tendermint now relies on the application to tell it which transactions to index. This means that
    68  in the `config.toml`, generated by Tendermint, there is no longer a way to specify which
    69  transactions to index. `tx.height` and `tx.hash` will always be indexed when using the `kv` indexer.
    70  
    71  Applications must now choose to either a) enable indexing for all transactions, or
    72  b) allow node operators to decide which transactions to index.
    73  Applications can notify Tendermint to index a specific transaction by setting
    74  `Index: bool` to `true` in the Event Attribute:
    75  
    76  ```go
    77  []types.Event{
    78  	{
    79  		Type: "app",
    80  		Attributes: []types.EventAttribute{
    81  			{Key: []byte("creator"), Value: []byte("Cosmoshi Netowoko"), Index: true},
    82  		},
    83  	},
    84  }
    85  ```
    86  
    87  ### Protocol Buffers
    88  
    89  Tendermint 0.34 replaces Amino with Protocol Buffers for encoding.
    90  This migration is extensive and results in a number of changes, however,
    91  Tendermint only uses the types generated from Protocol Buffers for disk and
    92  wire serialization.
    93  **This means that these changes should not affect you as a Tendermint user.**
    94  
    95  However, Tendermint users and contributors may note the following changes:
    96  
    97  * Directory layout changes: All proto files have been moved under one directory, `/proto`.
    98    This is in line with the recommended file layout by [Buf](https://buf.build).
    99    For more, see the [Buf documentation](https://buf.build/docs/lint-checkers#file_layout).
   100  * ABCI Changes: As noted in the "ABCI Changes" section above, the `PublicKey` type now uses
   101    a `oneof` type.
   102  
   103  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).
   104  
   105  ### Consensus Parameters
   106  
   107  Tendermint 0.34 includes new and updated consensus parameters.
   108  
   109  #### Version Parameters (New)
   110  
   111  * `AppVersion`, which is the version of the ABCI application.
   112  
   113  #### Evidence Parameters
   114  
   115  * `MaxBytes`, which caps the total amount of evidence. The default is 1048576 (1 MB).
   116  
   117  ### Crypto
   118  
   119  #### Keys
   120  
   121  * Keys no longer include a type prefix. For example, ed25519 pubkeys have been renamed from
   122    `PubKeyEd25519` to `PubKey`. This reduces stutter (e.g., `ed25519.PubKey`).
   123  * Keys are now byte slices (`[]byte`) instead of byte arrays (`[<size>]byte`).
   124  * The multisig functionality that was previously in Tendermint now has
   125    a new home within the Cosmos SDK:
   126    [`cosmos/cosmos-sdk/types/multisig`](https://github.com/cosmos/cosmos-sdk/blob/master/crypto/types/multisig/multisignature.go).
   127  
   128  #### `merkle` Package
   129  
   130  * `SimpleHashFromMap()` and `SimpleProofsFromMap()` were removed.
   131  * The prefix `Simple` has been removed. (For example, `SimpleProof` is now called `Proof`.)
   132  * All protobuf messages have been moved to the `/proto` directory.
   133  * The protobuf message `Proof` that contained multiple ProofOp's has been renamed to `ProofOps`.
   134    As noted above, this affects the ABCI type `ResponseQuery`:
   135    The field that was named Proof is now named `ProofOps`.
   136  * `HashFromByteSlices` and `ProofsFromByteSlices` now return a hash for empty inputs, to conform with
   137    [RFC-6962](https://tools.ietf.org/html/rfc6962).
   138  
   139  ### `libs` Package
   140  
   141  The `bech32` package has moved to the Cosmos SDK:
   142  [`cosmos/cosmos-sdk/types/bech32`](https://github.com/cosmos/cosmos-sdk/tree/4173ea5ebad906dd9b45325bed69b9c655504867/types/bech32).
   143  
   144  ### CLI
   145  
   146  The `tendermint lite` command has been renamed to `tendermint light` and has a slightly different API.
   147  See [the docs](https://docs.tendermint.com/master/tendermint-core/light-client-protocol.html#http-proxy) for details.
   148  
   149  ### Light Client
   150  
   151  We have a new, rewritten light client! You can
   152  [read more](https://medium.com/tendermint/everything-you-need-to-know-about-the-tendermint-light-client-f80d03856f98)
   153  about the justifications and details behind this change.
   154  
   155  Other user-relevant changes include:
   156  
   157  * The old `lite` package was removed; the new light client uses the `light` package.
   158  * The `Verifier` was broken up into two pieces:
   159      * Core verification logic (pure `VerifyX` functions)
   160      * `Client` object, which represents the complete light client
   161  * The RPC client can be found in the `/rpc` directory.
   162  * The HTTP(S) proxy is located in the `/proxy` directory.
   163  
   164  ### `state` Package
   165  
   166  * A new field `State.InitialHeight` has been added to record the initial chain height, which must be `1`
   167    (not `0`) if starting from height `1`. This can be configured via the genesis field `initial_height`.
   168  * The `state` package now has a `Store` interface. All functions in
   169    [state/store.go](https://github.com/DFWallet/tendermint-cosmos/blob/56911ee35298191c95ef1c7d3d5ec508237aaff4/state/store.go#L42-L42)
   170    are now part of the interface. The interface returns errors on all methods and can be used by calling `state.NewStore(dbm.DB)`.
   171  
   172  ### `privval` Package
   173  
   174  All requests are now accompanied by the chain ID from the network.
   175  This is a optional field and can be ignored by key management systems;
   176  however, if you are using the same key management system for multiple different
   177  blockchains, we recommend that you check the chain ID.
   178  
   179  
   180  ### RPC
   181  
   182  * `/unsafe_start_cpu_profiler`, `/unsafe_stop_cpu_profiler` and
   183    `/unsafe_write_heap_profile` were removed.
   184     For profiling, please use the pprof server, which can
   185    be enabled through `--rpc.pprof_laddr=X` flag or `pprof_laddr=X` config setting
   186    in the rpc section.
   187  * The `Content-Type` header returned on RPC calls is now (correctly) set as `application/json`.
   188  
   189  ### Version
   190  
   191  Version is now set through Go linker flags `ld_flags`. Applications that are using tendermint as a library should set this at compile time.
   192  
   193  Example:
   194  
   195  ```sh
   196  go install -mod=readonly -ldflags "-X github.com/DFWallet/tendermint-cosmos/version.TMCoreSemVer=$(go list -m github.com/DFWallet/tendermint-cosmos | sed  's/ /\@/g') -s -w " -trimpath ./cmd
   197  ```
   198  
   199  Additionally, the exported constant `version.Version` is now `version.TMCoreSemVer`.
   200  
   201  ## v0.33.4
   202  
   203  ### Go API
   204  
   205  * `rpc/client` HTTP and local clients have been moved into `http` and `local`
   206    subpackages, and their constructors have been renamed to `New()`.
   207  
   208  ### Protobuf Changes
   209  
   210  When upgrading to version 0.33.4 you will have to fetch the `third_party`
   211  directory along with the updated proto files.
   212  
   213  ### Block Retention
   214  
   215  ResponseCommit added a field for block retention. The application can provide information to Tendermint on how to prune blocks.
   216  If an application would like to not prune any blocks pass a `0` in this field.
   217  
   218  ```proto
   219  message ResponseCommit {
   220    // reserve 1
   221    bytes  data          = 2; // the Merkle root hash
   222    ++ uint64 retain_height = 3; // the oldest block height to retain ++
   223  }
   224  ```
   225  
   226  ## v0.33.0
   227  
   228  This release is not compatible with previous blockchains due to commit becoming
   229  signatures only and fields in the header have been removed.
   230  
   231  ### Blockchain Protocol
   232  
   233  `TotalTxs` and `NumTxs` were removed from the header. `Commit` now consists
   234  mostly of just signatures.
   235  
   236  ```go
   237  type Commit struct {
   238  	Height     int64
   239  	Round      int
   240  	BlockID    BlockID
   241  	Signatures []CommitSig
   242  }
   243  ```
   244  
   245  ```go
   246  type BlockIDFlag byte
   247  
   248  const (
   249  	// BlockIDFlagAbsent - no vote was received from a validator.
   250  	BlockIDFlagAbsent BlockIDFlag = 0x01
   251  	// BlockIDFlagCommit - voted for the Commit.BlockID.
   252  	BlockIDFlagCommit = 0x02
   253  	// BlockIDFlagNil - voted for nil.
   254  	BlockIDFlagNil = 0x03
   255  )
   256  
   257  type CommitSig struct {
   258  	BlockIDFlag      BlockIDFlag
   259  	ValidatorAddress Address
   260  	Timestamp        time.Time
   261  	Signature        []byte
   262  }
   263  ```
   264  
   265  See [\#63](https://github.com/tendermint/spec/pull/63) for the complete spec
   266  change.
   267  
   268  ### P2P Protocol
   269  
   270  The secret connection now includes a transcript hashing. If you want to
   271  implement a handshake (or otherwise have an existing implementation), you'll
   272  need to make the same changes that were made
   273  [here](https://github.com/DFWallet/tendermint-cosmos/pull/3668).
   274  
   275  ### Config Changes
   276  
   277  You will need to generate a new config if you have used a prior version of tendermint.
   278  
   279  Tags have been entirely renamed throughout the codebase to events and there
   280  keys are called
   281  [compositeKeys](https://github.com/DFWallet/tendermint-cosmos/blob/6d05c531f7efef6f0619155cf10ae8557dd7832f/docs/app-dev/indexing-transactions.md).
   282  
   283  Evidence Params has been changed to include duration.
   284  
   285  * `consensus_params.evidence.max_age_duration`.
   286  * Renamed `consensus_params.evidence.max_age` to `max_age_num_blocks`.
   287  
   288  ### Go API
   289  
   290  * `libs/common` has been removed in favor of specific pkgs.
   291      * `async`
   292      * `service`
   293      * `rand`
   294      * `net`
   295      * `strings`
   296      * `cmap`
   297  * removal of `errors` pkg
   298  
   299  ### RPC Changes
   300  
   301  * `/validators` is now paginated (default: 30 vals per page)
   302  * `/block_results` response format updated [see RPC docs for details](https://docs.tendermint.com/master/rpc/#/Info/block_results)
   303  * Event suffix has been removed from the ID in event responses
   304  * IDs are now integers not `json-client-XYZ`
   305  
   306  ## v0.32.0
   307  
   308  This release is compatible with previous blockchains,
   309  however the new ABCI Events mechanism may create some complexity
   310  for nodes wishing to continue operation with v0.32 from a previous version.
   311  There are some minor breaking changes to the RPC.
   312  
   313  ### Config Changes
   314  
   315  If you have `db_backend` set to `leveldb` in your config file, please change it
   316  to `goleveldb` or `cleveldb`.
   317  
   318  ### RPC Changes
   319  
   320  The default listen address for the RPC is now `127.0.0.1`. If you want to expose
   321  it publicly, you have to explicitly configure it. Note exposing the RPC to the
   322  public internet may not be safe - endpoints which return a lot of data may
   323  enable resource exhaustion attacks on your node, causing the process to crash.
   324  
   325  Any consumers of `/block_results` need to be mindful of the change in all field
   326  names from CamelCase to Snake case, eg. `results.DeliverTx` is now `results.deliver_tx`.
   327  This is a fix, but it's breaking.
   328  
   329  ### ABCI Changes
   330  
   331  ABCI responses which previously had a `Tags` field now have an `Events` field
   332  instead. The original `Tags` field was simply a list of key-value pairs, where
   333  each key effectively represented some attribute of an event occuring in the
   334  blockchain, like `sender`, `receiver`, or `amount`. However, it was difficult to
   335  represent the occurence of multiple events (for instance, multiple transfers) in a single list.
   336  The new `Events` field contains a list of `Event`, where each `Event` is itself a list
   337  of key-value pairs, allowing for more natural expression of multiple events in
   338  eg. a single DeliverTx or EndBlock. Note each `Event` also includes a `Type`, which is meant to categorize the
   339  event.
   340  
   341  For transaction indexing, the index key is
   342  prefixed with the event type: `{eventType}.{attributeKey}`.
   343  If the same event type and attribute key appear multiple times, the values are
   344  appended in a list.
   345  
   346  To make queries, include the event type as a prefix. For instance if you
   347  previously queried for `recipient = 'XYZ'`, and after the upgrade you name your event `transfer`,
   348  the new query would be for `transfer.recipient = 'XYZ'`.
   349  
   350  Note that transactions indexed on a node before upgrading to v0.32 will still be indexed
   351  using the old scheme. For instance, if a node upgraded at height 100,
   352  transactions before 100 would be queried with `recipient = 'XYZ'` and
   353  transactions after 100 would be queried with `transfer.recipient = 'XYZ'`.
   354  While this presents additional complexity to clients, it avoids the need to
   355  reindex. Of course, you can reset the node and sync from scratch to re-index
   356  entirely using the new scheme.
   357  
   358  We illustrate further with a more complete example.
   359  
   360  Prior to the update, suppose your `ResponseDeliverTx` look like:
   361  
   362  ```go
   363  abci.ResponseDeliverTx{
   364    Tags: []kv.Pair{
   365      {Key: []byte("sender"), Value: []byte("foo")},
   366      {Key: []byte("recipient"), Value: []byte("bar")},
   367      {Key: []byte("amount"), Value: []byte("35")},
   368    }
   369  }
   370  ```
   371  
   372  The following queries would match this transaction:
   373  
   374  ```go
   375  query.MustParse("tm.event = 'Tx' AND sender = 'foo'")
   376  query.MustParse("tm.event = 'Tx' AND recipient = 'bar'")
   377  query.MustParse("tm.event = 'Tx' AND sender = 'foo' AND recipient = 'bar'")
   378  ```
   379  
   380  Following the upgrade, your `ResponseDeliverTx` would look something like:
   381  the following `Events`:
   382  
   383  ```go
   384  abci.ResponseDeliverTx{
   385    Events: []abci.Event{
   386      {
   387        Type: "transfer",
   388        Attributes: kv.Pairs{
   389          {Key: []byte("sender"), Value: []byte("foo")},
   390          {Key: []byte("recipient"), Value: []byte("bar")},
   391          {Key: []byte("amount"), Value: []byte("35")},
   392        },
   393      }
   394  }
   395  ```
   396  
   397  Now the following queries would match this transaction:
   398  
   399  ```go
   400  query.MustParse("tm.event = 'Tx' AND transfer.sender = 'foo'")
   401  query.MustParse("tm.event = 'Tx' AND transfer.recipient = 'bar'")
   402  query.MustParse("tm.event = 'Tx' AND transfer.sender = 'foo' AND transfer.recipient = 'bar'")
   403  ```
   404  
   405  For further documentation on `Events`, see the [docs](https://github.com/DFWallet/tendermint-cosmos/blob/60827f75623b92eff132dc0eff5b49d2025c591e/docs/spec/abci/abci.md#events).
   406  
   407  ### Go Applications
   408  
   409  The ABCI Application interface changed slightly so the CheckTx and DeliverTx
   410  methods now take Request structs. The contents of these structs are just the raw
   411  tx bytes, which were previously passed in as the argument.
   412  
   413  ## v0.31.6
   414  
   415  There are no breaking changes in this release except Go API of p2p and
   416  mempool packages. Hovewer, if you're using cleveldb, you'll need to change
   417  the compilation tag:
   418  
   419  Use `cleveldb` tag instead of `gcc` to compile Tendermint with CLevelDB or
   420  use `make build_c` / `make install_c` (full instructions can be found at
   421  <https://tendermint.com/docs/introduction/install.html#compile-with-cleveldb-support>)
   422  
   423  ## v0.31.0
   424  
   425  This release contains a breaking change to the behaviour of the pubsub system.
   426  It also contains some minor breaking changes in the Go API and ABCI.
   427  There are no changes to the block or p2p protocols, so v0.31.0 should work fine
   428  with blockchains created from the v0.30 series.
   429  
   430  ### RPC
   431  
   432  The pubsub no longer blocks on publishing. This may cause some WebSocket (WS) clients to stop working as expected.
   433  If your WS client is not consuming events fast enough, Tendermint can terminate the subscription.
   434  In this case, the WS client will receive an error with description:
   435  
   436  ```json
   437  {
   438    "jsonrpc": "2.0",
   439    "id": "{ID}#event",
   440    "error": {
   441      "code": -32000,
   442      "msg": "Server error",
   443      "data": "subscription was cancelled (reason: client is not pulling messages fast enough)" // or "subscription was cancelled (reason: Tendermint exited)"
   444    }
   445  }
   446  
   447  Additionally, there are now limits on the number of subscribers and
   448  subscriptions that can be active at once. See the new
   449  `rpc.max_subscription_clients` and `rpc.max_subscriptions_per_client` values to
   450  configure this.
   451  ```
   452  
   453  ### Applications
   454  
   455  Simple rename of `ConsensusParams.BlockSize` to `ConsensusParams.Block`.
   456  
   457  The `ConsensusParams.Block.TimeIotaMS` field was also removed. It's configured
   458  in the ConsensusParsm in genesis.
   459  
   460  ### Go API
   461  
   462  See the [CHANGELOG](CHANGELOG.md). These are relatively straight forward.
   463  
   464  ## v0.30.0
   465  
   466  This release contains a breaking change to both the block and p2p protocols,
   467  however it may be compatible with blockchains created with v0.29.0 depending on
   468  the chain history. If your blockchain has not included any pieces of evidence,
   469  or no piece of evidence has been included in more than one block,
   470  and if your application has never returned multiple updates
   471  for the same validator in a single block, then v0.30.0 will work fine with
   472  blockchains created with v0.29.0.
   473  
   474  The p2p protocol change is to fix the proposer selection algorithm again.
   475  Note that proposer selection is purely a p2p concern right
   476  now since the algorithm is only relevant during real time consensus.
   477  This change is thus compatible with v0.29.0, but
   478  all nodes must be upgraded to avoid disagreements on the proposer.
   479  
   480  ### Applications
   481  
   482  Applications must ensure they do not return duplicates in
   483  `ResponseEndBlock.ValidatorUpdates`. A pubkey must only appear once per set of
   484  updates. Duplicates will cause irrecoverable failure. If you have a very good
   485  reason why we shouldn't do this, please open an issue.
   486  
   487  ## v0.29.0
   488  
   489  This release contains some breaking changes to the block and p2p protocols,
   490  and will not be compatible with any previous versions of the software, primarily
   491  due to changes in how various data structures are hashed.
   492  
   493  Any implementations of Tendermint blockchain verification, including lite clients,
   494  will need to be updated. For specific details:
   495  
   496  * [Merkle tree](https://github.com/tendermint/spec/blob/master/spec/blockchain/encoding.md#merkle-trees)
   497  * [ConsensusParams](https://github.com/tendermint/spec/blob/master/spec/blockchain/state.md#consensusparams)
   498  
   499  There was also a small change to field ordering in the vote struct. Any
   500  implementations of an out-of-process validator (like a Key-Management Server)
   501  will need to be updated. For specific details:
   502  
   503  * [Vote](https://github.com/tendermint/spec/blob/master/spec/consensus/signing.md#votes)
   504  
   505  Finally, the proposer selection algorithm continues to evolve. See the
   506  [work-in-progress
   507  specification](https://github.com/DFWallet/tendermint-cosmos/pull/3140).
   508  
   509  For everything else, please see the [CHANGELOG](./CHANGELOG.md#v0.29.0).
   510  
   511  ## v0.28.0
   512  
   513  This release breaks the format for the `priv_validator.json` file
   514  and the protocol used for the external validator process.
   515  It is compatible with v0.27.0 blockchains (neither the BlockProtocol nor the
   516  P2PProtocol have changed).
   517  
   518  Please read carefully for details about upgrading.
   519  
   520  **Note:** Backup your `config/priv_validator.json`
   521  before proceeding.
   522  
   523  ### `priv_validator.json`
   524  
   525  The `config/priv_validator.json` is now two files:
   526  `config/priv_validator_key.json` and `data/priv_validator_state.json`.
   527  The former contains the key material, the later contains the details on the last
   528  message signed.
   529  
   530  When running v0.28.0 for the first time, it will back up any pre-existing
   531  `priv_validator.json` file and proceed to split it into the two new files.
   532  Upgrading should happen automatically without problem.
   533  
   534  To upgrade manually, use the provided `privValUpgrade.go` script, with exact paths for the old
   535  `priv_validator.json` and the locations for the two new files. It's recomended
   536  to use the default paths, of `config/priv_validator_key.json` and
   537  `data/priv_validator_state.json`, respectively:
   538  
   539  ```sh
   540  go run scripts/privValUpgrade.go <old-path> <new-key-path> <new-state-path>
   541  ```
   542  
   543  ### External validator signers
   544  
   545  The Unix and TCP implementations of the remote signing validator
   546  have been consolidated into a single implementation.
   547  Thus in both cases, the external process is expected to dial
   548  Tendermint. This is different from how Unix sockets used to work, where
   549  Tendermint dialed the external process.
   550  
   551  The `PubKeyMsg` was also split into separate `Request` and `Response` types
   552  for consistency with other messages.
   553  
   554  Note that the TCP sockets don't yet use a persistent key,
   555  so while they're encrypted, they can't yet be properly authenticated.
   556  See [#3105](https://github.com/DFWallet/tendermint-cosmos/issues/3105).
   557  Note the Unix socket has neither encryption nor authentication, but will
   558  add a shared-secret in [#3099](https://github.com/DFWallet/tendermint-cosmos/issues/3099).
   559  
   560  ## v0.27.0
   561  
   562  This release contains some breaking changes to the block and p2p protocols,
   563  but does not change any core data structures, so it should be compatible with
   564  existing blockchains from the v0.26 series that only used Ed25519 validator keys.
   565  Blockchains using Secp256k1 for validators will not be compatible. This is due
   566  to the fact that we now enforce which key types validators can use as a
   567  consensus param. The default is Ed25519, and Secp256k1 must be activated
   568  explicitly.
   569  
   570  It is recommended to upgrade all nodes at once to avoid incompatibilities at the
   571  peer layer - namely, the heartbeat consensus message has been removed (only
   572  relevant if `create_empty_blocks=false` or `create_empty_blocks_interval > 0`),
   573  and the proposer selection algorithm has changed. Since proposer information is
   574  never included in the blockchain, this change only affects the peer layer.
   575  
   576  ### Go API Changes
   577  
   578  #### libs/db
   579  
   580  The ReverseIterator API has changed the meaning of `start` and `end`.
   581  Before, iteration was from `start` to `end`, where
   582  `start > end`. Now, iteration is from `end` to `start`, where `start < end`.
   583  The iterator also excludes `end`. This change allows a simplified and more
   584  intuitive logic, aligning the semantic meaning of `start` and `end` in the
   585  `Iterator` and `ReverseIterator`.
   586  
   587  ### Applications
   588  
   589  This release enforces a new consensus parameter, the
   590  ValidatorParams.PubKeyTypes. Applications must ensure that they only return
   591  validator updates with the allowed PubKeyTypes. If a validator update includes a
   592  pubkey type that is not included in the ConsensusParams.Validator.PubKeyTypes,
   593  block execution will fail and the consensus will halt.
   594  
   595  By default, only Ed25519 pubkeys may be used for validators. Enabling
   596  Secp256k1 requires explicit modification of the ConsensusParams.
   597  Please update your application accordingly (ie. restrict validators to only be
   598  able to use Ed25519 keys, or explicitly add additional key types to the genesis
   599  file).
   600  
   601  ## v0.26.0
   602  
   603  This release contains a lot of changes to core data types and protocols. It is not
   604  compatible to the old versions and there is no straight forward way to update
   605  old data to be compatible with the new version.
   606  
   607  To reset the state do:
   608  
   609  ```sh
   610  tendermint unsafe_reset_all
   611  ```
   612  
   613  Here we summarize some other notable changes to be mindful of.
   614  
   615  ### Config Changes
   616  
   617  All timeouts must be changed from integers to strings with their duration, for
   618  instance `flush_throttle_timeout = 100` would be changed to
   619  `flush_throttle_timeout = "100ms"` and `timeout_propose = 3000` would be changed
   620  to `timeout_propose = "3s"`.
   621  
   622  ### RPC Changes
   623  
   624  The default behaviour of `/abci_query` has been changed to not return a proof,
   625  and the name of the parameter that controls this has been changed from `trusted`
   626  to `prove`. To get proofs with your queries, ensure you set `prove=true`.
   627  
   628  Various version fields like `amino_version`, `p2p_version`, `consensus_version`,
   629  and `rpc_version` have been removed from the `node_info.other` and are
   630  consolidated under the tendermint semantic version (ie. `node_info.version`) and
   631  the new `block` and `p2p` protocol versions under `node_info.protocol_version`.
   632  
   633  ### ABCI Changes
   634  
   635  Field numbers were bumped in the `Header` and `ResponseInfo` messages to make
   636  room for new `version` fields. It should be straight forward to recompile the
   637  protobuf file for these changes.
   638  
   639  #### Proofs
   640  
   641  The `ResponseQuery.Proof` field is now structured as a `[]ProofOp` to support
   642  generalized Merkle tree constructions where the leaves of one Merkle tree are
   643  the root of another. If you don't need this functionality, and you used to
   644  return `<proof bytes>` here, you should instead return a single `ProofOp` with
   645  just the `Data` field set:
   646  
   647  ```go
   648  []ProofOp{
   649      ProofOp{
   650          Data: <proof bytes>,
   651      }
   652  }
   653  ```
   654  
   655  For more information, see:
   656  
   657  * [ADR-026](https://github.com/DFWallet/tendermint-cosmos/blob/30519e8361c19f4bf320ef4d26288ebc621ad725/docs/architecture/adr-026-general-merkle-proof.md)
   658  * [Relevant ABCI
   659    documentation](https://github.com/DFWallet/tendermint-cosmos/blob/30519e8361c19f4bf320ef4d26288ebc621ad725/docs/spec/abci/apps.md#query-proofs)
   660  * [Description of
   661    keys](https://github.com/DFWallet/tendermint-cosmos/blob/30519e8361c19f4bf320ef4d26288ebc621ad725/crypto/merkle/proof_key_path.go#L14)
   662  
   663  ### Go API Changes
   664  
   665  #### crypto/merkle
   666  
   667  The `merkle.Hasher` interface was removed. Functions which used to take `Hasher`
   668  now simply take `[]byte`. This means that any objects being Merklized should be
   669  serialized before they are passed in.
   670  
   671  #### node
   672  
   673  The `node.RunForever` function was removed. Signal handling and running forever
   674  should instead be explicitly configured by the caller. See how we do it
   675  [here](https://github.com/DFWallet/tendermint-cosmos/blob/30519e8361c19f4bf320ef4d26288ebc621ad725/cmd/tendermint/commands/run_node.go#L60).
   676  
   677  ### Other
   678  
   679  All hashes, except for public key addresses, are now 32-bytes.
   680  
   681  ## v0.25.0
   682  
   683  This release has minimal impact.
   684  
   685  If you use GasWanted in ABCI and want to enforce it, set the MaxGas in the genesis file (default is no max).
   686  
   687  ## v0.24.0
   688  
   689  New 0.24.0 release contains a lot of changes to the state and types. It's not
   690  compatible to the old versions and there is no straight forward way to update
   691  old data to be compatible with the new version.
   692  
   693  To reset the state do:
   694  
   695  ```sh
   696  tendermint unsafe_reset_all
   697  ```
   698  
   699  Here we summarize some other notable changes to be mindful of.
   700  
   701  ### Config changes
   702  
   703  `p2p.max_num_peers` was removed in favor of `p2p.max_num_inbound_peers` and
   704  `p2p.max_num_outbound_peers`.
   705  
   706  ```toml
   707  # Maximum number of inbound peers
   708  max_num_inbound_peers = 40
   709  
   710  # Maximum number of outbound peers to connect to, excluding persistent peers
   711  max_num_outbound_peers = 10
   712  ```
   713  
   714  As you can see, the default ratio of inbound/outbound peers is 4/1. The reason
   715  is we want it to be easier for new nodes to connect to the network. You can
   716  tweak these parameters to alter the network topology.
   717  
   718  ### RPC Changes
   719  
   720  The result of `/commit` used to contain `header` and `commit` fields at the top level. These are now contained under the `signed_header` field.
   721  
   722  ### ABCI Changes
   723  
   724  The header has been upgraded and contains new fields, but none of the existing
   725  fields were changed, except their order.
   726  
   727  The `Validator` type was split into two, one containing an `Address` and one
   728  containing a `PubKey`. When processing `RequestBeginBlock`, use the `Validator`
   729  type, which contains just the `Address`. When returning `ResponseEndBlock`, use
   730  the `ValidatorUpdate` type, which contains just the `PubKey`.
   731  
   732  ### Validator Set Updates
   733  
   734  Validator set updates returned in ResponseEndBlock for height `H` used to take
   735  effect immediately at height `H+1`. Now they will be delayed one block, to take
   736  effect at height `H+2`. Note this means that the change will be seen by the ABCI
   737  app in the `RequestBeginBlock.LastCommitInfo` at block `H+3`. Apps were already
   738  required to maintain a map from validator addresses to pubkeys since v0.23 (when
   739  pubkeys were removed from RequestBeginBlock), but now they may need to track
   740  multiple validator sets at once to accomodate this delay.
   741  
   742  ### Block Size
   743  
   744  The `ConsensusParams.BlockSize.MaxTxs` was removed in favour of
   745  `ConsensusParams.BlockSize.MaxBytes`, which is now enforced. This means blocks
   746  are limitted only by byte-size, not by number of transactions.