BREAKING CHANGES:
~/.tendermint
(config.toml
, genesis.json
, and priv_validator.json
) are now in ~/.tendermint/config
. The $TMHOME/data/
directory remains unchanged.FEATURES:
IMPROVEMENTS:
BUG FIXES:
BREAKING CHANGES:
seeds
is now persistent_peers
(persistent peers to which TM will always connect to)seeds
only used for getting addresses (if addrbook is empty; not persistent)FEATURES:
/dial_persistent_peers
unsafe endpointBREAKING CHANGES:
FEATURES:
/block_results?height=X
returns the DeliverTx results for a given height.IMPROVEMENTS:
BUG FIXES:
tcp://
tendermint init
to ignore files that are there and generate files that aren't.BREAKING CHANGES:
FEATURES:
tendermint lite
command (and lite/proxy
pkg) for running a light-client RPC proxy.
NOTE it is currently insecure and its APIs are not yet covered by semverIMPROVEMENTS:
BUG FIXES:
BREAKING CHANGES:
int64
everywhere/subscribe
and /unsubscribe
take query
arg instead of event
/status
returns the LatestBlockTime in human readable form instead of in nanosecondsFEATURES:
/unsubscribe_all
WebSocket RPC endpoint/tx_search
endpoint for filtering transactions by more complex queriesIMPROVEMENTS:
tmlibs/pubsub
BUG FIXES:
BUG FIXES:
BREAKING CHANGES:
prove
FEATURES:
certifiers
pkg contains the tendermint light-client library (name subject to change)!/genesis
includes the app_options
./abci_query
takes an additional height
parameter to support historical queries.trusted
(set false to get a proof) and height
to query a historical height.IMPROVEMENTS:
/genesis
result includes app_options
RPCError
satisfies the error
interface.BUG FIXES:
IMPROVEMENTS:
BUG FIXES:
/dump_consensus_state
to have normal json output (NOTE: technically breaking, but worth a bug fix label)BREAKING:
genesis file: validator amount
is now power
abci: Info, BeginBlock, InitChain all take structs
rpc: various changes to match JSONRPC spec (http://www.jsonrpc.org/specification), including breaking ones:
rpctypes.RPCResponse
uses new RPCError
type instead of string
.cmd: if there is no genesis, exit immediately instead of waiting around for one to show.
types: Signer.Sign
returns an error.
state: every validator set change is persisted to disk, which required some changes to the State
structure.
p2p: new p2p.Peer
interface used for all reactor methods (instead of *p2p.Peer
struct).
FEATURES:
/validators?height=X
allows querying of validators at previous heights.height
param empty for /block
, /validators
, and /commit
will return the value for the latest height.IMPROVEMENTS:
.rst
, and cleaned up for presentation on tendermint.readthedocs.io
BUG FIXES:
IMPROVEMENTS:
BUG FIXES:
FEATURES:
--consensus.create_empty_blocks
; when set to false, blocks are only created when there are txs or when the AppHash changes.consensus.create_empty_blocks_interval
; an empty block is created after this many seconds.create_empty_blocks = true
and create_empty_blocks_interval = 0
, so blocks are being created all the time (as in all previous versions of tendermint). The number of empty blocks can be reduced by increasing create_empty_blocks_interval
or by setting create_empty_blocks = false
.TxsAvailable()
method added to Mempool that returns a channel which fires when txs are available.syncing
field to response returned by /status
. Is true
while in fast-sync mode.IMPROVEMENTS:
BUG FIXES:
FEATURES:
IMPROVEMENTS:
FEATURES:
--trace
to get stack traces for logged errorsIMPROVEMENTS:
megacheck
tooltcp://
. http://
is also accepted as an alias for tcp://
BUG FIXES:
Includes major updates to configuration, logging, and json serialization. Also includes the Grand Repo-Merge of 2017.
BREAKING CHANGES:
Config and Flags:
config
map is replaced with a Config
struct,
containing substructs: BaseConfig
, P2PConfig
, MempoolConfig
, ConsensusConfig
, RPCConfig
--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
config.toml
, for instance:
[p2p]
laddr="tcp://1.2.3.4:46656"
[consensus]
timeout_propose=1000
DefaultConfig() / TestConfig()
functions to handle defaults, and remove config/tendermint
and config/tendermint_test
Logger
log15
logger with a simple interface, and provide a new implementation using go-kit
.
See our new logging library and blog post for more detailswarn
and notice
are removed (you may need to change them in your config.toml
!)JSON serialization:
[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"
}
[TypeByte, {"jsonrpc": "2.0", ... }]
is now just {"jsonrpc": "2.0", ... }
[]byte
to data.Bytes
in all serialized types (for hex encoding)ValidatorSet
fieldsEventDataInner
for serializing eventsOther:
appBlockHeight == 0
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)/dial_seeds
, and all calls prefixed with unsafe
. Use the --rpc.unsafe
flag to enable.FEATURES:
state:info,*:error
, which means the state
package logs at info
level, and everything else logs at error
leveladdress
and pub_key
fields in priv_validator.json
and overwrite them with the values derrived from the priv_key
IMPROVEMENTS:
tendermint/go-p2p -> tendermint/tendermint/p2p
and tendermint/go-rpc -> tendermint/tendermint/rpc/lib
go-common -> tmlibs/common
go-data -> go-wire/data
go-
libs, except go-crypto
and go-wire
, are merged under tmlibs
/blockchain_info
call to return a maximum of 20 blocks.Wrap()
and .Unwrap()
instead of eg. PubKeyS
for go-crypto
typesjson.MarshalIndent
)cmd/tendermint/commands
and do not read config from file for testsBUG FIXES:
ResetPrivValidator
where we were using the global config and log (causing external consumers, eg. basecoin, to fail).FEATURES:
/tx?hash=X
endpoint to query for transactions and their DeliverTx result by hash. Optionally returns a proof of the tx's inclusion in the blocktendermint testnet
command initializes files for a testnetIMPROVEMENTS:
/broadcast_tx_XXX
also returns the Hash (can be used to query for the tx)/broadcast_tx_commit
also returns the height the block was committed in--seeds
, under seeds
in the config, or in /dial_seeds
are now persistent, and will be reconnected to if the connection breaksBUG FIXES:
BREAKING CHANGES:
Query(RequestQuery) ResponseQuery
, enabling precise proofs at particular heights:message RequestQuery{
bytes data = 1;
string path = 2;
uint64 height = 3;
bool prove = 4;
}
message ResponseQuery{
CodeType code = 1;
int64 index = 2;
bytes key = 3;
bytes value = 4;
bytes proof = 5;
uint64 height = 6;
string log = 7;
}
BlockMeta
data type unifies its Hash and PartSetHash under a BlockID
:type BlockMeta struct {
BlockID BlockID `json:"block_id"` // the block hash and partsethash
Header *Header `json:"header"` // The block's Header
}
ValidatorSet.Proposer
is exposed as a field and persisted with the State
. Use GetProposer()
to initialize or update after validator-set changes.
tendermint gen_validator
command output is now pure JSON
FEATURES:
/commit?height=X
returns header and commit for block at height X
IMPROVEMENTS:
Node
is now a BaseService
CONTRIBUTING.md
, Github ISSUE_TEMPLATE
, CHANGELOG.md
BUG FIXES:
/dial_seeds
with invalid addressesaccumComparable
ValidatorSet.Proposer
across restarts by persisting it in the State
BREAKING CHANGES:
BlockID
to represent blocks:type BlockID struct {
Hash []byte `json:"hash"`
PartsHeader PartSetHeader `json:"parts"`
}
Vote
data type now includes validator address and index:type Vote struct {
ValidatorAddress []byte `json:"validator_address"`
ValidatorIndex int `json:"validator_index"`
Height int `json:"height"`
Round int `json:"round"`
Type byte `json:"type"`
BlockID BlockID `json:"block_id"` // zero if vote is nil.
Signature crypto.Signature `json:"signature"`
}
FEATURES:
Maj23Msg
, for peers to alert others they've seen a Maj23,
in order to track and handle conflicting votes intelligently to prevent Byzantine faults from causing halts:type VoteSetMaj23Message struct {
Height int
Round int
Type byte
BlockID types.BlockID
}
IMPROVEMENTS:
BUG FIXES:
Maj23Msg
.FEATURES:
--pex
flag for more resilient gossip network (feature still in development, beware dragons)IMPROVEMENTS:
/dial_seeds
to enable manual network configurationIMPROVEMENTS:
BUG FIXES:
BUG FIXES:
FEATURES:
tmsp_query
tmsp_info
IMPROVEMENTS:
BUG FIXES:
priv_validator.json
for recoveryBREAKING CHANGES:
FEATURES:
cswal_light
; logs only the validator's own votes/broadcast_tx_commit
, returns when tx is included in a block, else an error/unsafe_flush_mempool
, empties the mempoolIMPROVEMENTS:
BUG FIXES:
Strict versioning only began with the release of v0.7.0, in late summer 2016. The project itself began in early summer 2014 and was workable decentralized cryptocurrency software by the end of that year. Through the course of 2015, in collaboration with Eris Industries (now Monax Indsutries), many additional features were integrated, including an implementation from scratch of the Ethereum Virtual Machine. That implementation now forms the heart of Burrow. In the later half of 2015, the consensus algorithm was upgraded with a more asynchronous design and a more deterministic and robust implementation.
By late 2015, frustration with the difficulty of forking a large monolithic stack to create alternative cryptocurrency designs led to the invention of the Application Blockchain Interface (ABCI), then called the Tendermint Socket Protocol (TMSP). The Ethereum Virtual Machine and various other transaction features were removed, and Tendermint was whittled down to a core consensus engine driving an application running in another process. The ABCI interface and implementation were iterated on and improved over the course of 2016, until versioned history kicked in with v0.7.0.