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 ErisDB. 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.