2018-06-20 17:35:30 -07:00
|
|
|
# Tendermint
|
2017-04-08 17:07:02 -07:00
|
|
|
|
2018-06-20 17:35:30 -07:00
|
|
|
[Byzantine-Fault Tolerant](https://en.wikipedia.org/wiki/Byzantine_fault_tolerance)
|
|
|
|
[State Machine Replication](https://en.wikipedia.org/wiki/State_machine_replication).
|
|
|
|
Or [Blockchain](https://en.wikipedia.org/wiki/Blockchain_(database)) for short.
|
2017-04-08 17:07:02 -07:00
|
|
|
|
2018-06-20 17:35:30 -07:00
|
|
|
[](https://github.com/tendermint/tendermint/releases/latest)
|
|
|
|
[](https://godoc.org/github.com/tendermint/tendermint)
|
2018-09-08 08:45:12 -04:00
|
|
|
[](https://github.com/moovweb/gvm)
|
2018-06-20 17:35:30 -07:00
|
|
|
[](https://riot.im/app/#/room/#tendermint:matrix.org)
|
|
|
|
[](https://github.com/tendermint/tendermint/blob/master/LICENSE)
|
|
|
|
[](https://github.com/tendermint/tendermint)
|
2018-03-26 10:59:10 +02:00
|
|
|
|
|
|
|
|
2018-06-20 17:35:30 -07:00
|
|
|
Branch | Tests | Coverage
|
|
|
|
----------|-------|----------
|
|
|
|
master | [](https://circleci.com/gh/tendermint/tendermint/tree/master) | [](https://codecov.io/gh/tendermint/tendermint)
|
|
|
|
develop | [](https://circleci.com/gh/tendermint/tendermint/tree/develop) | [](https://codecov.io/gh/tendermint/tendermint)
|
2018-05-09 13:48:21 -07:00
|
|
|
|
2018-06-20 17:35:30 -07:00
|
|
|
Tendermint Core is Byzantine Fault Tolerant (BFT) middleware that takes a state transition machine - written in any programming language -
|
|
|
|
and securely replicates it on many machines.
|
2018-05-09 13:48:21 -07:00
|
|
|
|
2018-09-20 11:55:36 -04:00
|
|
|
For protocol details, see [the specification](/docs/spec).
|
|
|
|
|
|
|
|
For detailed analysis of the consensus protocol, including safety and liveness proofs,
|
|
|
|
see our recent paper, "[The latest gossip on BFT consensus](https://arxiv.org/abs/1807.04938)".
|
2018-03-26 10:59:10 +02:00
|
|
|
|
2018-06-20 17:35:30 -07:00
|
|
|
## A Note on Production Readiness
|
2018-03-26 10:59:10 +02:00
|
|
|
|
2018-06-20 17:35:30 -07:00
|
|
|
While Tendermint is being used in production in private, permissioned
|
|
|
|
environments, we are still working actively to harden and audit it in preparation
|
|
|
|
for use in public blockchains, such as the [Cosmos Network](https://cosmos.network/).
|
|
|
|
We are also still making breaking changes to the protocol and the APIs.
|
2018-09-08 08:45:12 -04:00
|
|
|
Thus, we tag the releases as *alpha software*.
|
2018-06-20 17:35:30 -07:00
|
|
|
|
|
|
|
In any case, if you intend to run Tendermint in production,
|
|
|
|
please [contact us](https://riot.im/app/#/room/#tendermint:matrix.org) :)
|
|
|
|
|
|
|
|
## Security
|
|
|
|
|
|
|
|
To report a security vulnerability, see our [bug bounty
|
|
|
|
program](https://tendermint.com/security).
|
|
|
|
|
|
|
|
For examples of the kinds of bugs we're looking for, see [SECURITY.md](SECURITY.md)
|
|
|
|
|
|
|
|
## Minimum requirements
|
|
|
|
|
|
|
|
Requirement|Notes
|
|
|
|
---|---
|
2018-09-08 08:45:12 -04:00
|
|
|
Go version | Go1.10 or higher
|
2018-06-20 17:35:30 -07:00
|
|
|
|
|
|
|
## Install
|
|
|
|
|
2018-07-17 15:44:59 +09:00
|
|
|
See the [install instructions](/docs/introduction/install.md)
|
2018-06-20 17:35:30 -07:00
|
|
|
|
|
|
|
## Quick Start
|
|
|
|
|
2018-09-08 08:45:12 -04:00
|
|
|
- [Single node](/docs/tendermint-core/using-tendermint.md)
|
2018-06-20 17:35:30 -07:00
|
|
|
- [Local cluster using docker-compose](/networks/local)
|
2018-07-17 15:49:38 +09:00
|
|
|
- [Remote cluster using terraform and ansible](/docs/networks/terraform-and-ansible.md)
|
2018-09-08 08:45:12 -04:00
|
|
|
- [Join the Cosmos testnet](https://cosmos.network/testnet)
|
2018-06-20 17:35:30 -07:00
|
|
|
|
|
|
|
## Resources
|
|
|
|
|
|
|
|
### Tendermint Core
|
|
|
|
|
|
|
|
For details about the blockchain data structures and the p2p protocols, see the
|
|
|
|
the [Tendermint specification](/docs/spec).
|
|
|
|
|
2018-09-08 08:45:12 -04:00
|
|
|
For details on using the software, see the [documentation](/docs/) which is also
|
|
|
|
hosted at: https://tendermint.com/docs/
|
2018-06-20 17:35:30 -07:00
|
|
|
|
2018-09-08 08:45:12 -04:00
|
|
|
### Tools
|
|
|
|
|
|
|
|
Benchmarking and monitoring is provided by `tm-bench` and `tm-monitor`, respectively.
|
|
|
|
Their code is found [here](/tools) and these binaries need to be built seperately.
|
|
|
|
Additional documentation is found [here](/docs/tools).
|
2018-06-20 17:35:30 -07:00
|
|
|
|
|
|
|
### Sub-projects
|
|
|
|
|
2018-07-02 14:20:27 -04:00
|
|
|
* [Amino](http://github.com/tendermint/go-amino), a reflection-based improvement on proto3
|
2018-06-20 17:35:30 -07:00
|
|
|
* [IAVL](http://github.com/tendermint/iavl), Merkleized IAVL+ Tree implementation
|
|
|
|
|
|
|
|
### Applications
|
|
|
|
|
|
|
|
* [Cosmos SDK](http://github.com/cosmos/cosmos-sdk); a cryptocurrency application framework
|
2018-09-08 08:45:12 -04:00
|
|
|
* [Ethermint](http://github.com/cosmos/ethermint); Ethereum on Tendermint
|
|
|
|
* [Many more](https://tendermint.com/ecosystem)
|
2018-06-20 17:35:30 -07:00
|
|
|
|
2018-09-08 08:45:12 -04:00
|
|
|
### Research
|
2018-06-20 17:35:30 -07:00
|
|
|
|
|
|
|
* [Master's Thesis on Tendermint](https://atrium.lib.uoguelph.ca/xmlui/handle/10214/9769)
|
|
|
|
* [Original Whitepaper](https://tendermint.com/static/docs/tendermint.pdf)
|
2018-09-08 08:45:12 -04:00
|
|
|
* [Blog](https://blog.cosmos.network/tendermint/home)
|
2018-06-20 17:35:30 -07:00
|
|
|
|
|
|
|
## Contributing
|
|
|
|
|
|
|
|
Yay open source! Please see our [contributing guidelines](CONTRIBUTING.md).
|
|
|
|
|
|
|
|
## Versioning
|
|
|
|
|
|
|
|
### SemVer
|
|
|
|
|
|
|
|
Tendermint uses [SemVer](http://semver.org/) to determine when and how the version changes.
|
|
|
|
According to SemVer, anything in the public API can change at any time before version 1.0.0
|
|
|
|
|
|
|
|
To provide some stability to Tendermint users in these 0.X.X days, the MINOR version is used
|
|
|
|
to signal breaking changes across a subset of the total public API. This subset includes all
|
|
|
|
interfaces exposed to other processes (cli, rpc, p2p, etc.), but does not
|
|
|
|
include the in-process Go APIs.
|
|
|
|
|
|
|
|
That said, breaking changes in the following packages will be documented in the
|
|
|
|
CHANGELOG even if they don't lead to MINOR version bumps:
|
|
|
|
|
|
|
|
- types
|
|
|
|
- rpc/client
|
|
|
|
- config
|
|
|
|
- node
|
2018-09-20 11:55:36 -04:00
|
|
|
- libs/bech32
|
|
|
|
- libs/common
|
|
|
|
- libs/db
|
|
|
|
- libs/errors
|
|
|
|
- libs/log
|
2018-06-20 17:35:30 -07:00
|
|
|
|
|
|
|
Exported objects in these packages that are not covered by the versioning scheme
|
2018-07-02 14:20:27 -04:00
|
|
|
are explicitly marked by `// UNSTABLE` in their go doc comment and may change at any
|
|
|
|
time without notice. Functions, types, and values in any other package may also change at any time.
|
2018-06-20 17:35:30 -07:00
|
|
|
|
|
|
|
### Upgrades
|
|
|
|
|
|
|
|
In an effort to avoid accumulating technical debt prior to 1.0.0,
|
|
|
|
we do not guarantee that breaking changes (ie. bumps in the MINOR version)
|
|
|
|
will work with existing tendermint blockchains. In these cases you will
|
|
|
|
have to start a new blockchain, or write something custom to get the old
|
|
|
|
data into the new chain.
|
|
|
|
|
|
|
|
However, any bump in the PATCH version should be compatible with existing histories
|
|
|
|
(if not please open an [issue](https://github.com/tendermint/tendermint/issues)).
|
|
|
|
|
2018-09-08 08:45:12 -04:00
|
|
|
For more information on upgrading, see [here](./UPGRADING.md)
|
|
|
|
|
2018-06-20 17:35:30 -07:00
|
|
|
## Code of Conduct
|
|
|
|
|
|
|
|
Please read, understand and adhere to our [code of conduct](CODE_OF_CONDUCT.md).
|