github.com/soomindae/tendermint@v0.0.5-0.20210528140126-84a0c70c8162/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/soomindae/tendermint/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/soomindae/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/soomindae/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/soomindae/tendermint/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/soomindae/tendermint/version.TMCoreSemVer=$(go list -m github.com/soomindae/tendermint | 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/soomindae/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/soomindae/tendermint/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/soomindae/tendermint/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/soomindae/tendermint/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/soomindae/spec/blob/master/spec/blockchain/encoding.md#merkle-trees) 497 * [ConsensusParams](https://github.com/soomindae/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/soomindae/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/soomindae/tendermint/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/soomindae/tendermint/issues/3105). 557 Note the Unix socket has neither encryption nor authentication, but will 558 add a shared-secret in [#3099](https://github.com/soomindae/tendermint/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/soomindae/tendermint/blob/30519e8361c19f4bf320ef4d26288ebc621ad725/docs/architecture/adr-026-general-merkle-proof.md) 658 * [Relevant ABCI 659 documentation](https://github.com/soomindae/tendermint/blob/30519e8361c19f4bf320ef4d26288ebc621ad725/docs/spec/abci/apps.md#query-proofs) 660 * [Description of 661 keys](https://github.com/soomindae/tendermint/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/soomindae/tendermint/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.