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.