github.com/MagHErmit/tendermint@v0.282.1/UPGRADING.md (about)

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