This repository contains specifications for the Tendermint protocol. For the pdf, see the [latest release](https://github.com/tendermint/spec/releases).
This repository contains specifications for the Tendermint protocol.
There are currently two implementations of the Tendermint protocol,
There are currently two implementations of the Tendermint protocol,
maintained by two separate-but-collaborative entities:
maintained by two separate-but-collaborative entities:
@ -9,16 +9,40 @@ maintained by Interchain GmbH,
and one in [Rust](https://github.com/informalsystems/tendermint-rs),
and one in [Rust](https://github.com/informalsystems/tendermint-rs),
maintained by Informal Systems.
maintained by Informal Systems.
There have been inadvertent divergences in the specs followed
by the Go implementation and the Rust implementation respectively.
However, we are working toward reconverging these specs into a single unified spec.
Consequently, this repository is in a bit of a state of flux.
### Data Structures
At the moment, the spec followed by the Go implementation
(tendermint/tendermint) is in the [spec](spec) directory,
while the spec followed by the Rust implementation
(informalsystems/tendermint-rs) is in the [rust-spec](rust-spec)
directory. TLA+ specifications are also in the rust-spec directory.
- [Encoding and Digests](./spec/core/encoding.md)
- [Blockchain](./spec/core/data_structures.md)
- [State](./spec/core/state.md)
Over time, these specs will converge in the spec directory.
Once they have fully converged, we will version the spec moving forward.
- [The Base P2P Layer](./p2p/node.md): multiplex the protocols ("reactors") on authenticated and encrypted TCP connections
#### P2P Messages
- [Peer Exchange (PEX)](./p2p/messages/pex.md): gossip known peer addresses so peers can find each other
- [Block Sync](./p2p/messages/block_sync.md): gossip blocks so peers can catch up quickly
- [Consensus](./p2p/messages/consensus.md): gossip votes and block parts so new blocks can be committed
- [Mempool](./p2p/messages/mempool.md): gossip transactions so they get included in blocks
- [Evidence](./p2p/messages/evidence.md): sending invalid evidence will stop the peer
### ABCI
- [ABCI](./spec/abci/README.md): Details about interactions between the
application and consensus engine over ABCI
### RFC
- [RFC](./rfc/README.md): RFCs describe proposals to change the spec.
### ProtoBuf
- [Proto](./proto/README.md): The data structures of the Tendermint protocol are located in the `proto` directory. These specify P2P messages that each implementation should follow to be compatible.
Deprecated see [tendermint/tendermint/docs/tendermint-core/fastsync.md]([../../spec/light-client](https://github.com/tendermint/tendermint/blob/master/docs/tendermint-core/fast-sync.md))