tendermint v0.10.0 Release Notes

Release Date: 2017-06-02 // almost 7 years ago
  • โšก๏ธ Includes major updates to configuration, logging, and json serialization. ๐Ÿ”€ Also includes the Grand Repo-Merge of 2017.

    ๐Ÿ’ฅ BREAKING CHANGES:

    • Config and Flags:

      • The config map is replaced with a Config struct, containing substructs: BaseConfig, P2PConfig, MempoolConfig, ConsensusConfig, RPCConfig
      • This affects the following flags:
      • --seeds is now --p2p.seeds
      • --node_laddr is now --p2p.laddr
      • --pex is now --p2p.pex
      • --skip_upnp is now --p2p.skip_upnp
      • --rpc_laddr is now --rpc.laddr
      • --grpc_laddr is now --rpc.grpc_laddr
      • Any configuration option now within a substract must come under that heading in the config.toml, for instance: ``` [p2p] laddr="tcp://1.2.3.4:46656"

      [consensus] timeout_propose=1000

      - Use viper and `DefaultConfig() / TestConfig()` functions to handle defaults, and remove `config/tendermint` and `config/tendermint_test`
      - Change some function and method signatures to
      - Change some [function and method signatures](https://gist.github.com/ebuchman/640d5fc6c2605f73497992fe107ebe0b) accomodate new config
      
    • Logger

      • Replace static log15 logger with a simple interface, and provide a new implementation using go-kit. <!-- markdown-link-check-disable-next-line --> ๐Ÿ‘€ See our new logging library and blog post for more details
      • Levels warn and notice are removed (you may need to change them in your config.toml!)
      • Change some function and method signatures to accept a logger
    • JSON serialization:

      • Replace [TypeByte, Xxx] with {"type": "some-type", "data": Xxx} in RPC and all .json files by using go-wire/data. For instance, a public key is now: "pub_key": { "type": "ed25519", "data": "83DDF8775937A4A12A2704269E2729FCFCD491B933C4B0A7FFE37FE41D7760D0" }
      • Remove type information about RPC responses, so [TypeByte, {"jsonrpc": "2.0", ... }] is now just {"jsonrpc": "2.0", ... }
      • Change []byte to data.Bytes in all serialized types (for hex encoding)
      • Lowercase the JSON tags in ValidatorSet fields
      • Introduce EventDataInner for serializing events
    • Other:

      • Send InitChain message in handshake if appBlockHeight == 0
      • Do not include the Accum field when computing the validator hash. This makes the ValidatorSetHash unique for a given validator set, rather than changing with every block (as the Accum changes)
      • Unsafe RPC calls are not enabled by default. This includes /dial_seeds, and all calls prefixed with unsafe. Use the --rpc.unsafe flag to enable.

    ๐Ÿ”‹ FEATURES:

    • ๐Ÿ“ฆ Per-module log levels. For instance, the new default is state:info,*:error, which means the state package logs at info level, and everything else logs at error level
    • ๐ŸŒฒ Log if a node is validator or not in every consensus round
    • ๐Ÿ‘‰ Use ldflags to set git hash as part of the version
    • Ignore address and pub_key fields in priv_validator.json and overwrite them with the values derrived from the priv_key

    ๐Ÿ‘Œ IMPROVEMENTS:

    • ๐Ÿ”€ Merge tendermint/go-p2p -> tendermint/tendermint/p2p and tendermint/go-rpc -> tendermint/tendermint/rpc/lib
    • โšก๏ธ Update paths for grand repo merge:
      • go-common -> tmlibs/common
      • go-data -> go-wire/data
      • All other go- libs, except go-crypto and go-wire, are merged under tmlibs
    • No global loggers (loggers are passed into constructors, or preferably set with a SetLogger method)
    • Return HTTP status codes with errors for RPC responses
    • Limit /blockchain_info call to return a maximum of 20 blocks
    • ๐Ÿ‘‰ Use .Wrap() and .Unwrap() instead of eg. PubKeyS for go-crypto types
    • ๐Ÿ–จ RPC JSON responses use pretty printing (via json.MarshalIndent)
    • โœ… Color code different instances of the consensus for tests
    • โœ… Isolate viper to cmd/tendermint/commands and do not read config from file for tests