This reverts commit 2902ab1a14
.
pull/1842/head
@ -0,0 +1,16 @@ | |||
# top-most EditorConfig file | |||
root = true | |||
# Unix-style newlines with a newline ending every file | |||
[*] | |||
charset = utf-8 | |||
end_of_line = lf | |||
insert_final_newline = true | |||
trim_trailing_whitespace = true | |||
[*.{sh,Makefile}] | |||
indent_style = tab | |||
[*.proto] | |||
indent_style = space | |||
indent_size = 2 |
@ -0,0 +1,29 @@ | |||
*.swp | |||
*.swo | |||
.bak | |||
*.bak | |||
.DS_Store | |||
build/* | |||
rpc/test/.tendermint | |||
.tendermint | |||
remote_dump | |||
.revision | |||
vendor | |||
.vagrant | |||
test/p2p/data/ | |||
test/logs | |||
coverage.txt | |||
docs/_build | |||
docs/tools | |||
*.log | |||
abci-cli | |||
abci/types/types.pb.go | |||
scripts/wal2json/wal2json | |||
scripts/cutWALUntil/cutWALUntil | |||
.idea/ | |||
*.iml | |||
libs/pubsub/query/fuzz_test/output | |||
shunit2 |
@ -0,0 +1,919 @@ | |||
# Changelog | |||
## 0.22.0 | |||
*July 1st, 2018* | |||
BREAKING CHANGES: | |||
- [config] Rename `skip_upnp` to `upnp`, and turn it off by default. | |||
- [types] Update Amino to v0.10.1 | |||
* Amino is now fully proto3 compatible for the basic types | |||
* JSON-encoded types now use the type name instead of the prefix bytes | |||
* Integers are encoded as strings | |||
- [crypto] Update go-crypto to v0.10.0 and merge into `crypto` | |||
* privKey.Sign returns error. | |||
* ed25519 address is the first 20-bytes of the SHA256 of the pubkey | |||
* `tmlibs/merkle` -> `crypto/merkle`. Uses SHA256 instead of RIPEMD160 | |||
- [rpc] `syncing` is now called `catching_up`. | |||
FEATURES | |||
- [cmd] Added metrics (served under `/metrics` using a Prometheus client; | |||
disabled by default). See the new `instrumentation` section in the config and | |||
[metrics](https://tendermint.readthedocs.io/projects/tools/en/develop/metrics.html) | |||
guide. | |||
- [p2p] Add IPv6 support to peering. | |||
IMPROVEMENT | |||
- [rpc/client] Supports https and wss now. | |||
- [crypto] Make public key size into public constants | |||
- [mempool] Log tx hash, not entire tx | |||
- [abci] Merged in github.com/tendermint/abci and | |||
github.com/tendermint/go-crypto | |||
- [docs] Move from .rst to .md | |||
BUG FIXES: | |||
- [rpc] Limit maximum number of HTTP/WebSocket connections | |||
(`rpc.max_open_connections`) and gRPC connections | |||
(`rpc.grpc_max_open_connections`). Check out "Running In Production" guide if | |||
you want to increase them. | |||
- [rpc] Limit maximum request body size to 1MB (header is limited to 1MB). | |||
- [consensus] Fix a halting bug where `create_empty_blocks=false` | |||
- [p2p] Fix panic in seed mode | |||
## 0.21.0 | |||
*June 21th, 2018* | |||
BREAKING CHANGES | |||
- [config] Change default ports from 4665X to 2665X. Ports over 32768 are | |||
ephemeral and reserved for use by the kernel. | |||
- [cmd] `unsafe_reset_all` removes the addrbook.json | |||
IMPROVEMENT | |||
- [pubsub] Set default capacity to 0 | |||
- [docs] Various improvements | |||
BUG FIXES | |||
- [consensus] Fix an issue where we don't make blocks after `fast_sync` when `create_empty_blocks=false` | |||
- [mempool] Fix #1761 where we don't process txs if `cache_size=0` | |||
- [rpc] Fix memory leak in Websocket (when using `/subscribe` method) | |||
- [config] Escape paths in config - fixes config paths on Windows | |||
## 0.20.0 | |||
*June 6th, 2018* | |||
This is the first in a series of breaking releases coming to Tendermint after | |||
soliciting developer feedback and conducting security audits. | |||
This release does not break any blockchain data structures or | |||
protocols other than the ABCI messages between Tendermint and the application. | |||
Applications that upgrade for ABCI v0.11.0 should be able to continue running Tendermint | |||
v0.20.0 on blockchains created with v0.19.X | |||
BREAKING CHANGES | |||
- [abci] Upgrade to | |||
[v0.11.0](https://github.com/tendermint/abci/blob/master/CHANGELOG.md#0110) | |||
- [abci] Change Query path for filtering peers by node ID from | |||
`p2p/filter/pubkey/<id>` to `p2p/filter/id/<id>` | |||
## 0.19.9 | |||
*June 5th, 2018* | |||
BREAKING CHANGES | |||
- [types/priv_validator] Moved to top level `privval` package | |||
FEATURES | |||
- [config] Collapse PeerConfig into P2PConfig | |||
- [docs] Add quick-install script | |||
- [docs/spec] Add table of Amino prefixes | |||
BUG FIXES | |||
- [rpc] Return 404 for unknown endpoints | |||
- [consensus] Flush WAL on stop | |||
- [evidence] Don't send evidence to peers that are behind | |||
- [p2p] Fix memory leak on peer disconnects | |||
- [rpc] Fix panic when `per_page=0` | |||
## 0.19.8 | |||
*June 4th, 2018* | |||
BREAKING: | |||
- [p2p] Remove `auth_enc` config option, peer connections are always auth | |||
encrypted. Technically a breaking change but seems no one was using it and | |||
arguably a bug fix :) | |||
BUG FIXES | |||
- [mempool] Fix deadlock under high load when `skip_timeout_commit=true` and | |||
`create_empty_blocks=false` | |||
## 0.19.7 | |||
*May 31st, 2018* | |||
BREAKING: | |||
- [libs/pubsub] TagMap#Get returns a string value | |||
- [libs/pubsub] NewTagMap accepts a map of strings | |||
FEATURES | |||
- [rpc] the RPC documentation is now published to https://tendermint.github.io/slate | |||
- [p2p] AllowDuplicateIP config option to refuse connections from same IP. | |||
- true by default for now, false by default in next breaking release | |||
- [docs] Add docs for query, tx indexing, events, pubsub | |||
- [docs] Add some notes about running Tendermint in production | |||
IMPROVEMENTS: | |||
- [consensus] Consensus reactor now receives events from a separate synchronous event bus, | |||
which is not dependant on external RPC load | |||
- [consensus/wal] do not look for height in older files if we've seen height - 1 | |||
- [docs] Various cleanup and link fixes | |||
## 0.19.6 | |||
*May 29th, 2018* | |||
BUG FIXES | |||
- [blockchain] Fix fast-sync deadlock during high peer turnover | |||
BUG FIX: | |||
- [evidence] Dont send peers evidence from heights they haven't synced to yet | |||
- [p2p] Refuse connections to more than one peer with the same IP | |||
- [docs] Various fixes | |||
## 0.19.5 | |||
*May 20th, 2018* | |||
BREAKING CHANGES | |||
- [rpc/client] TxSearch and UnconfirmedTxs have new arguments (see below) | |||
- [rpc/client] TxSearch returns ResultTxSearch | |||
- [version] Breaking changes to Go APIs will not be reflected in breaking | |||
version change, but will be included in changelog. | |||
FEATURES | |||
- [rpc] `/tx_search` takes `page` (starts at 1) and `per_page` (max 100, default 30) args to paginate results | |||
- [rpc] `/unconfirmed_txs` takes `limit` (max 100, default 30) arg to limit the output | |||
- [config] `mempool.size` and `mempool.cache_size` options | |||
IMPROVEMENTS | |||
- [docs] Lots of updates | |||
- [consensus] Only Fsync() the WAL before executing msgs from ourselves | |||
BUG FIXES | |||
- [mempool] Enforce upper bound on number of transactions | |||
## 0.19.4 (May 17th, 2018) | |||
IMPROVEMENTS | |||
- [state] Improve tx indexing by using batches | |||
- [consensus, state] Improve logging (more consensus logs, fewer tx logs) | |||
- [spec] Moved to `docs/spec` (TODO cleanup the rest of the docs ...) | |||
BUG FIXES | |||
- [consensus] Fix issue #1575 where a late proposer can get stuck | |||
## 0.19.3 (May 14th, 2018) | |||
FEATURES | |||
- [rpc] New `/consensus_state` returns just the votes seen at the current height | |||
IMPROVEMENTS | |||
- [rpc] Add stringified votes and fraction of power voted to `/dump_consensus_state` | |||
- [rpc] Add PeerStateStats to `/dump_consensus_state` | |||
BUG FIXES | |||
- [cmd] Set GenesisTime during `tendermint init` | |||
- [consensus] fix ValidBlock rules | |||
## 0.19.2 (April 30th, 2018) | |||
FEATURES: | |||
- [p2p] Allow peers with different Minor versions to connect | |||
- [rpc] `/net_info` includes `n_peers` | |||
IMPROVEMENTS: | |||
- [p2p] Various code comments, cleanup, error types | |||
- [p2p] Change some Error logs to Debug | |||
BUG FIXES: | |||
- [p2p] Fix reconnect to persistent peer when first dial fails | |||
- [p2p] Validate NodeInfo.ListenAddr | |||
- [p2p] Only allow (MaxNumPeers - MaxNumOutboundPeers) inbound peers | |||
- [p2p/pex] Limit max msg size to 64kB | |||
- [p2p] Fix panic when pex=false | |||
- [p2p] Allow multiple IPs per ID in AddrBook | |||
- [p2p] Fix before/after bugs in addrbook isBad() | |||
## 0.19.1 (April 27th, 2018) | |||
Note this release includes some small breaking changes in the RPC and one in the | |||
config that are really bug fixes. v0.19.1 will work with existing chains, and make Tendermint | |||
easier to use and debug. With <3 | |||
BREAKING (MINOR) | |||
- [config] Removed `wal_light` setting. If you really needed this, let us know | |||
FEATURES: | |||
- [networks] moved in tooling from devops repo: terraform and ansible scripts for deploying testnets ! | |||
- [cmd] Added `gen_node_key` command | |||
BUG FIXES | |||
Some of these are breaking in the RPC response, but they're really bugs! | |||
- [spec] Document address format and pubkey encoding pre and post Amino | |||
- [rpc] Lower case JSON field names | |||
- [rpc] Fix missing entries, improve, and lower case the fields in `/dump_consensus_state` | |||
- [rpc] Fix NodeInfo.Channels format to hex | |||
- [rpc] Add Validator address to `/status` | |||
- [rpc] Fix `prove` in ABCIQuery | |||
- [cmd] MarshalJSONIndent on init | |||
## 0.19.0 (April 13th, 2018) | |||
BREAKING: | |||
- [cmd] improved `testnet` command; now it can fill in `persistent_peers` for you in the config file and much more (see `tendermint testnet --help` for details) | |||
- [cmd] `show_node_id` now returns an error if there is no node key | |||
- [rpc]: changed the output format for the `/status` endpoint (see https://godoc.org/github.com/tendermint/tendermint/rpc/core#Status) | |||
Upgrade from go-wire to go-amino. This is a sweeping change that breaks everything that is | |||
serialized to disk or over the network. | |||
See github.com/tendermint/go-amino for details on the new format. | |||
See `scripts/wire2amino.go` for a tool to upgrade | |||
genesis/priv_validator/node_key JSON files. | |||
FEATURES | |||
- [test] docker-compose for local testnet setup (thanks Greg!) | |||
## 0.18.0 (April 6th, 2018) | |||
BREAKING: | |||
- [types] Merkle tree uses different encoding for varints (see tmlibs v0.8.0) | |||
- [types] ValidtorSet.GetByAddress returns -1 if no validator found | |||
- [p2p] require all addresses come with an ID no matter what | |||
- [rpc] Listening address must contain tcp:// or unix:// prefix | |||
FEATURES: | |||
- [rpc] StartHTTPAndTLSServer (not used yet) | |||
- [rpc] Include validator's voting power in `/status` | |||
- [rpc] `/tx` and `/tx_search` responses now include the transaction hash | |||
- [rpc] Include peer NodeIDs in `/net_info` | |||
IMPROVEMENTS: | |||
- [config] trim whitespace from elements of lists (like `persistent_peers`) | |||
- [rpc] `/tx_search` results are sorted by height | |||
- [p2p] do not try to connect to ourselves (ok, maybe only once) | |||
- [p2p] seeds respond with a bias towards good peers | |||
BUG FIXES: | |||
- [rpc] fix subscribing using an abci.ResponseDeliverTx tag | |||
- [rpc] fix tx_indexers matchRange | |||
- [rpc] fix unsubscribing (see tmlibs v0.8.0) | |||
## 0.17.1 (March 27th, 2018) | |||
BUG FIXES: | |||
- [types] Actually support `app_state` in genesis as `AppStateJSON` | |||
## 0.17.0 (March 27th, 2018) | |||
BREAKING: | |||
- [types] WriteSignBytes -> SignBytes | |||
IMPROVEMENTS: | |||
- [all] renamed `dummy` (`persistent_dummy`) to `kvstore` (`persistent_kvstore`) (name "dummy" is deprecated and will not work in the next breaking release) | |||
- [docs] note on determinism (docs/determinism.rst) | |||
- [genesis] `app_options` field is deprecated. please rename it to `app_state` in your genesis file(s). `app_options` will not work in the next breaking release | |||
- [p2p] dial seeds directly without potential peers | |||
- [p2p] exponential backoff for addrs in the address book | |||
- [p2p] mark peer as good if it contributed enough votes or block parts | |||
- [p2p] stop peer if it sends incorrect data, msg to unknown channel, msg we did not expect | |||
- [p2p] when `auth_enc` is true, all dialed peers must have a node ID in their address | |||
- [spec] various improvements | |||
- switched from glide to dep internally for package management | |||
- [wire] prep work for upgrading to new go-wire (which is now called go-amino) | |||
FEATURES: | |||
- [config] exposed `auth_enc` flag to enable/disable encryption | |||
- [config] added the `--p2p.private_peer_ids` flag and `PrivatePeerIDs` config variable (see config for description) | |||
- [rpc] added `/health` endpoint, which returns empty result for now | |||
- [types/priv_validator] new format and socket client, allowing for remote signing | |||
BUG FIXES: | |||
- [consensus] fix liveness bug by introducing ValidBlock mechanism | |||
## 0.16.0 (February 20th, 2018) | |||
BREAKING CHANGES: | |||
- [config] use $TMHOME/config for all config and json files | |||
- [p2p] old `--p2p.seeds` is now `--p2p.persistent_peers` (persistent peers to which TM will always connect to) | |||
- [p2p] now `--p2p.seeds` only used for getting addresses (if addrbook is empty; not persistent) | |||
- [p2p] NodeInfo: remove RemoteAddr and add Channels | |||
- we must have at least one overlapping channel with peer | |||
- we only send msgs for channels the peer advertised | |||
- [p2p/conn] pong timeout | |||
- [lite] comment out IAVL related code | |||
FEATURES: | |||
- [p2p] added new `/dial_peers&persistent=_` **unsafe** endpoint | |||
- [p2p] persistent node key in `$THMHOME/config/node_key.json` | |||
- [p2p] introduce peer ID and authenticate peers by ID using addresses like `ID@IP:PORT` | |||
- [p2p/pex] new seed mode crawls the network and serves as a seed. | |||
- [config] MempoolConfig.CacheSize | |||
- [config] P2P.SeedMode (`--p2p.seed_mode`) | |||
IMPROVEMENT: | |||
- [p2p/pex] stricter rules in the PEX reactor for better handling of abuse | |||
- [p2p] various improvements to code structure including subpackages for `pex` and `conn` | |||
- [docs] new spec! | |||
- [all] speed up the tests! | |||
BUG FIX: | |||
- [blockchain] StopPeerForError on timeout | |||
- [consensus] StopPeerForError on a bad Maj23 message | |||
- [state] flush mempool conn before calling commit | |||
- [types] fix priv val signing things that only differ by timestamp | |||
- [mempool] fix memory leak causing zombie peers | |||
- [p2p/conn] fix potential deadlock | |||
## 0.15.0 (December 29, 2017) | |||
BREAKING CHANGES: | |||
- [p2p] enable the Peer Exchange reactor by default | |||
- [types] add Timestamp field to Proposal/Vote | |||
- [types] add new fields to Header: TotalTxs, ConsensusParamsHash, LastResultsHash, EvidenceHash | |||
- [types] add Evidence to Block | |||
- [types] simplify ValidateBasic | |||
- [state] updates to support changes to the header | |||
- [state] Enforce <1/3 of validator set can change at a time | |||
FEATURES: | |||
- [state] Send indices of absent validators and addresses of byzantine validators in BeginBlock | |||
- [state] Historical ConsensusParams and ABCIResponses | |||
- [docs] Specification for the base Tendermint data structures. | |||
- [evidence] New evidence reactor for gossiping and managing evidence | |||
- [rpc] `/block_results?height=X` returns the DeliverTx results for a given height. | |||
IMPROVEMENTS: | |||
- [consensus] Better handling of corrupt WAL file | |||
BUG FIXES: | |||
- [lite] fix race | |||
- [state] validate block.Header.ValidatorsHash | |||
- [p2p] allow seed addresses to be prefixed with eg. `tcp://` | |||
- [p2p] use consistent key to refer to peers so we dont try to connect to existing peers | |||
- [cmd] fix `tendermint init` to ignore files that are there and generate files that aren't. | |||
## 0.14.0 (December 11, 2017) | |||
BREAKING CHANGES: | |||
- consensus/wal: removed separator | |||
- rpc/client: changed Subscribe/Unsubscribe/UnsubscribeAll funcs signatures to be identical to event bus. | |||
FEATURES: | |||
- new `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 semver | |||
IMPROVEMENTS: | |||
- rpc/client: can act as event bus subscriber (See https://github.com/tendermint/tendermint/issues/945). | |||
- p2p: use exponential backoff from seconds to hours when attempting to reconnect to persistent peer | |||
- config: moniker defaults to the machine's hostname instead of "anonymous" | |||
BUG FIXES: | |||
- p2p: no longer exit if one of the seed addresses is incorrect | |||
## 0.13.0 (December 6, 2017) | |||
BREAKING CHANGES: | |||
- abci: update to v0.8 using gogo/protobuf; includes tx tags, vote info in RequestBeginBlock, data.Bytes everywhere, use int64, etc. | |||
- types: block heights are now `int64` everywhere | |||
- types & node: EventSwitch and EventCache have been replaced by EventBus and EventBuffer; event types have been overhauled | |||
- node: EventSwitch methods now refer to EventBus | |||
- rpc/lib/types: RPCResponse is no longer a pointer; WSRPCConnection interface has been modified | |||
- rpc/client: WaitForOneEvent takes an EventsClient instead of types.EventSwitch | |||
- rpc/client: Add/RemoveListenerForEvent are now Subscribe/Unsubscribe | |||
- rpc/core/types: ResultABCIQuery wraps an abci.ResponseQuery | |||
- rpc: `/subscribe` and `/unsubscribe` take `query` arg instead of `event` | |||
- rpc: `/status` returns the LatestBlockTime in human readable form instead of in nanoseconds | |||
- mempool: cached transactions return an error instead of an ABCI response with BadNonce | |||
FEATURES: | |||
- rpc: new `/unsubscribe_all` WebSocket RPC endpoint | |||
- rpc: new `/tx_search` endpoint for filtering transactions by more complex queries | |||
- p2p/trust: new trust metric for tracking peers. See ADR-006 | |||
- config: TxIndexConfig allows to set what DeliverTx tags to index | |||
IMPROVEMENTS: | |||
- New asynchronous events system using `tmlibs/pubsub` | |||
- logging: Various small improvements | |||
- consensus: Graceful shutdown when app crashes | |||
- tests: Fix various non-deterministic errors | |||
- p2p: more defensive programming | |||
BUG FIXES: | |||
- consensus: fix panic where prs.ProposalBlockParts is not initialized | |||
- p2p: fix panic on bad channel | |||
## 0.12.1 (November 27, 2017) | |||
BUG FIXES: | |||
- upgrade tmlibs dependency to enable Windows builds for Tendermint | |||
## 0.12.0 (October 27, 2017) | |||
BREAKING CHANGES: | |||
- rpc/client: websocket ResultsCh and ErrorsCh unified in ResponsesCh. | |||
- rpc/client: ABCIQuery no longer takes `prove` | |||
- state: remove GenesisDoc from state. | |||
- consensus: new binary WAL format provides efficiency and uses checksums to detect corruption | |||
- use scripts/wal2json to convert to json for debugging | |||
FEATURES: | |||
- new `certifiers` pkg contains the tendermint light-client library (name subject to change)! | |||
- rpc: `/genesis` includes the `app_options` . | |||
- rpc: `/abci_query` takes an additional `height` parameter to support historical queries. | |||
- rpc/client: new ABCIQueryWithOptions supports options like `trusted` (set false to get a proof) and `height` to query a historical height. | |||
IMPROVEMENTS: | |||
- rpc: `/genesis` result includes `app_options` | |||
- rpc/lib/client: add jitter to reconnects. | |||
- rpc/lib/types: `RPCError` satisfies the `error` interface. | |||
BUG FIXES: | |||
- rpc/client: fix ws deadlock after stopping | |||
- blockchain: fix panic on AddBlock when peer is nil | |||
- mempool: fix sending on TxsAvailable when a tx has been invalidated | |||
- consensus: dont run WAL catchup if we fast synced | |||
## 0.11.1 (October 10, 2017) | |||
IMPROVEMENTS: | |||
- blockchain/reactor: respondWithNoResponseMessage for missing height | |||
BUG FIXES: | |||
- rpc: fixed client WebSocket timeout | |||
- rpc: client now resubscribes on reconnection | |||
- rpc: fix panics on missing params | |||
- rpc: fix `/dump_consensus_state` to have normal json output (NOTE: technically breaking, but worth a bug fix label) | |||
- types: fixed out of range error in VoteSet.addVote | |||
- consensus: fix wal autofile via https://github.com/tendermint/tmlibs/blob/master/CHANGELOG.md#032-october-2-2017 | |||
## 0.11.0 (September 22, 2017) | |||
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: | |||
- requests that previously returned HTTP code 4XX now return 200 with an error code in the JSONRPC. | |||
- `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: | |||
- rpc: `/validators?height=X` allows querying of validators at previous heights. | |||
- rpc: Leaving the `height` param empty for `/block`, `/validators`, and `/commit` will return the value for the latest height. | |||
IMPROVEMENTS: | |||
- docs: Moved all docs from the website and tools repo in, converted to `.rst`, and cleaned up for presentation on `tendermint.readthedocs.io` | |||
BUG FIXES: | |||
- fix WAL openning issue on Windows | |||
## 0.10.4 (September 5, 2017) | |||
IMPROVEMENTS: | |||
- docs: Added Slate docs to each rpc function (see rpc/core) | |||
- docs: Ported all website docs to Read The Docs | |||
- config: expose some p2p params to tweak performance: RecvRate, SendRate, and MaxMsgPacketPayloadSize | |||
- rpc: Upgrade the websocket client and server, including improved auto reconnect, and proper ping/pong | |||
BUG FIXES: | |||
- consensus: fix panic on getVoteBitArray | |||
- consensus: hang instead of panicking on byzantine consensus failures | |||
- cmd: dont load config for version command | |||
## 0.10.3 (August 10, 2017) | |||
FEATURES: | |||
- control over empty block production: | |||
- new flag, `--consensus.create_empty_blocks`; when set to false, blocks are only created when there are txs or when the AppHash changes. | |||
- new config option, `consensus.create_empty_blocks_interval`; an empty block is created after this many seconds. | |||
- in normal operation, `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`. | |||
- new `TxsAvailable()` method added to Mempool that returns a channel which fires when txs are available. | |||
- new heartbeat message added to consensus reactor to notify peers that a node is waiting for txs before entering propose step. | |||
- rpc: Add `syncing` field to response returned by `/status`. Is `true` while in fast-sync mode. | |||
IMPROVEMENTS: | |||
- various improvements to documentation and code comments | |||
BUG FIXES: | |||
- mempool: pass height into constructor so it doesn't always start at 0 | |||
## 0.10.2 (July 10, 2017) | |||
FEATURES: | |||
- Enable lower latency block commits by adding consensus reactor sleep durations and p2p flush throttle timeout to the config | |||
IMPROVEMENTS: | |||
- More detailed logging in the consensus reactor and state machine | |||
- More in-code documentation for many exposed functions, especially in consensus/reactor.go and p2p/switch.go | |||
- Improved readability for some function definitions and code blocks with long lines | |||
## 0.10.1 (June 28, 2017) | |||
FEATURES: | |||
- Use `--trace` to get stack traces for logged errors | |||
- types: GenesisDoc.ValidatorHash returns the hash of the genesis validator set | |||
- types: GenesisDocFromFile parses a GenesiDoc from a JSON file | |||
IMPROVEMENTS: | |||
- Add a Code of Conduct | |||
- Variety of improvements as suggested by `megacheck` tool | |||
- rpc: deduplicate tests between rpc/client and rpc/tests | |||
- rpc: addresses without a protocol prefix default to `tcp://`. `http://` is also accepted as an alias for `tcp://` | |||
- cmd: commands are more easily reuseable from other tools | |||
- DOCKER: automate build/push | |||
BUG FIXES: | |||
- Fix log statements using keys with spaces (logger does not currently support spaces) | |||
- rpc: set logger on websocket connection | |||
- rpc: fix ws connection stability by setting write deadline on pings | |||
## 0.10.0 (June 2, 2017) | |||
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](https://github.com/tendermint/tendermint/blob/master/config/config.go#L11), | |||
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`. | |||
See our new [logging library](https://github.com/tendermint/tmlibs/log) and [blog post](https://tendermint.com/blog/abstracting-the-logger-interface-in-go) 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](https://gist.github.com/ebuchman/640d5fc6c2605f73497992fe107ebe0b) 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 | |||
## 0.9.2 (April 26, 2017) | |||
BUG FIXES: | |||
- Fix bug in `ResetPrivValidator` where we were using the global config and log (causing external consumers, eg. basecoin, to fail). | |||
## 0.9.1 (April 21, 2017) | |||
FEATURES: | |||
- Transaction indexing - txs are indexed by their hash using a simple key-value store; easily extended to more advanced indexers | |||
- New `/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 block | |||
- `tendermint testnet` command initializes files for a testnet | |||
IMPROVEMENTS: | |||
- CLI now uses Cobra framework | |||
- TMROOT is now TMHOME (TMROOT will stop working in 0.10.0) | |||
- `/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 | |||
- ABCIResponses struct persisted to disk before calling Commit; makes handshake replay much cleaner | |||
- WAL uses #ENDHEIGHT instead of #HEIGHT (#HEIGHT will stop working in 0.10.0) | |||
- Peers included via `--seeds`, under `seeds` in the config, or in `/dial_seeds` are now persistent, and will be reconnected to if the connection breaks | |||
BUG FIXES: | |||
- Fix bug in fast-sync where we stop syncing after a peer is removed, even if they're re-added later | |||
- Fix handshake replay to handle validator set changes and results of DeliverTx when we crash after app.Commit but before state.Save() | |||
## 0.9.0 (March 6, 2017) | |||
BREAKING CHANGES: | |||
- Update ABCI to v0.4.0, where Query is now `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: | |||
- New RPC endpoint `/commit?height=X` returns header and commit for block at height `X` | |||
- Client API for each endpoint, including mocks for testing | |||
IMPROVEMENTS: | |||
- `Node` is now a `BaseService` | |||
- Simplified starting Tendermint in-process from another application | |||
- Better organized Makefile | |||
- Scripts for auto-building binaries across platforms | |||
- Docker image improved, slimmed down (using Alpine), and changed from tendermint/tmbase to tendermint/tendermint | |||
- New repo files: `CONTRIBUTING.md`, Github `ISSUE_TEMPLATE`, `CHANGELOG.md` | |||
- Improvements on CircleCI for managing build/test artifacts | |||
- Handshake replay is doen through the consensus package, possibly using a mockApp | |||
- Graceful shutdown of RPC listeners | |||
- Tests for the PEX reactor and DialSeeds | |||
BUG FIXES: | |||
- Check peer.Send for failure before updating PeerState in consensus | |||
- Fix panic in `/dial_seeds` with invalid addresses | |||
- Fix proposer selection logic in ValidatorSet by taking the address into account in the `accumComparable` | |||
- Fix inconcistencies with `ValidatorSet.Proposer` across restarts by persisting it in the `State` | |||
## 0.8.0 (January 13, 2017) | |||
BREAKING CHANGES: | |||
- New data type `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"` | |||
} | |||
``` | |||
- Update TMSP to v0.3.0, where it is now called ABCI and AppendTx is DeliverTx | |||
- Hex strings in the RPC are now "0x" prefixed | |||
FEATURES: | |||
- New message type on the ConsensusReactor, `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 | |||
} | |||
``` | |||
- Configurable block part set size | |||
- Validator set changes | |||
- Optionally skip TimeoutCommit if we have all the votes | |||
- Handshake between Tendermint and App on startup to sync latest state and ensure consistent recovery from crashes | |||
- GRPC server for BroadcastTx endpoint | |||
IMPROVEMENTS: | |||
- Less verbose logging | |||
- Better test coverage (37% -> 49%) | |||
- Canonical SignBytes for signable types | |||
- Write-Ahead Log for Mempool and Consensus via tmlibs/autofile | |||
- Better in-process testing for the consensus reactor and byzantine faults | |||
- Better crash/restart testing for individual nodes at preset failure points, and of networks at arbitrary points | |||
- Better abstraction over timeout mechanics | |||
BUG FIXES: | |||
- Fix memory leak in mempool peer | |||
- Fix panic on POLRound=-1 | |||
- Actually set the CommitTime | |||
- Actually send BeginBlock message | |||
- Fix a liveness issues caused by Byzantine proposals/votes. Uses the new `Maj23Msg`. | |||
## 0.7.4 (December 14, 2016) | |||
FEATURES: | |||
- Enable the Peer Exchange reactor with the `--pex` flag for more resilient gossip network (feature still in development, beware dragons) | |||
IMPROVEMENTS: | |||
- Remove restrictions on RPC endpoint `/dial_seeds` to enable manual network configuration | |||
## 0.7.3 (October 20, 2016) | |||
IMPROVEMENTS: | |||
- Type safe FireEvent | |||
- More WAL/replay tests | |||
- Cleanup some docs | |||
BUG FIXES: | |||
- Fix deadlock in mempool for synchronous apps | |||
- Replay handles non-empty blocks | |||
- Fix race condition in HeightVoteSet | |||
## 0.7.2 (September 11, 2016) | |||
BUG FIXES: | |||
- Set mustConnect=false so tendermint will retry connecting to the app | |||
## 0.7.1 (September 10, 2016) | |||
FEATURES: | |||
- New TMSP connection for Query/Info | |||
- New RPC endpoints: | |||
- `tmsp_query` | |||
- `tmsp_info` | |||
- Allow application to filter peers through Query (off by default) | |||
IMPROVEMENTS: | |||
- TMSP connection type enforced at compile time | |||
- All listen/client urls use a "tcp://" or "unix://" prefix | |||
BUG FIXES: | |||
- Save LastSignature/LastSignBytes to `priv_validator.json` for recovery | |||
- Fix event unsubscribe | |||
- Fix fastsync/blockchain reactor | |||
## 0.7.0 (August 7, 2016) | |||
BREAKING CHANGES: | |||
- Strict SemVer starting now! | |||
- Update to ABCI v0.2.0 | |||
- Validation types now called Commit | |||
- NewBlock event only returns the block header | |||
FEATURES: | |||
- TMSP and RPC support TCP and UNIX sockets | |||
- Addition config options including block size and consensus parameters | |||
- New WAL mode `cswal_light`; logs only the validator's own votes | |||
- New RPC endpoints: | |||
- for starting/stopping profilers, and for updating config | |||
- `/broadcast_tx_commit`, returns when tx is included in a block, else an error | |||
- `/unsafe_flush_mempool`, empties the mempool | |||
IMPROVEMENTS: | |||
- Various optimizations | |||
- Remove bad or invalidated transactions from the mempool cache (allows later duplicates) | |||
- More elaborate testing using CircleCI including benchmarking throughput on 4 digitalocean droplets | |||
BUG FIXES: | |||
- Various fixes to WAL and replay logic | |||
- Various race conditions | |||
## PreHistory | |||
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](https://github.com/hyperledger/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. |
@ -0,0 +1,429 @@ | |||
# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. | |||
[[projects]] | |||
branch = "master" | |||
name = "github.com/beorn7/perks" | |||
packages = ["quantile"] | |||
revision = "3a771d992973f24aa725d07868b467d1ddfceafb" | |||
[[projects]] | |||
branch = "master" | |||
name = "github.com/btcsuite/btcd" | |||
packages = ["btcec"] | |||
revision = "86fed781132ac890ee03e906e4ecd5d6fa180c64" | |||
[[projects]] | |||
branch = "master" | |||
name = "github.com/btcsuite/btcutil" | |||
packages = ["base58"] | |||
revision = "d4cc87b860166d00d6b5b9e0d3b3d71d6088d4d4" | |||
[[projects]] | |||
name = "github.com/davecgh/go-spew" | |||
packages = ["spew"] | |||
revision = "346938d642f2ec3594ed81d874461961cd0faa76" | |||
version = "v1.1.0" | |||
[[projects]] | |||
branch = "master" | |||
name = "github.com/ebuchman/fail-test" | |||
packages = ["."] | |||
revision = "95f809107225be108efcf10a3509e4ea6ceef3c4" | |||
[[projects]] | |||
branch = "master" | |||
name = "github.com/fortytw2/leaktest" | |||
packages = ["."] | |||
revision = "b008db64ef8daabb22ff6daa557f33b41d8f6ccd" | |||
[[projects]] | |||
name = "github.com/fsnotify/fsnotify" | |||
packages = ["."] | |||
revision = "c2828203cd70a50dcccfb2761f8b1f8ceef9a8e9" | |||
version = "v1.4.7" | |||
[[projects]] | |||
name = "github.com/go-kit/kit" | |||
packages = [ | |||
"log", | |||
"log/level", | |||
"log/term", | |||
"metrics", | |||
"metrics/discard", | |||
"metrics/internal/lv", | |||
"metrics/prometheus" | |||
] | |||
revision = "4dc7be5d2d12881735283bcab7352178e190fc71" | |||
version = "v0.6.0" | |||
[[projects]] | |||
name = "github.com/go-logfmt/logfmt" | |||
packages = ["."] | |||
revision = "390ab7935ee28ec6b286364bba9b4dd6410cb3d5" | |||
version = "v0.3.0" | |||
[[projects]] | |||
name = "github.com/go-stack/stack" | |||
packages = ["."] | |||
revision = "259ab82a6cad3992b4e21ff5cac294ccb06474bc" | |||
version = "v1.7.0" | |||
[[projects]] | |||
name = "github.com/gogo/protobuf" | |||
packages = [ | |||
"gogoproto", | |||
"jsonpb", | |||
"proto", | |||
"protoc-gen-gogo/descriptor", | |||
"sortkeys", | |||
"types" | |||
] | |||
revision = "1adfc126b41513cc696b209667c8656ea7aac67c" | |||
version = "v1.0.0" | |||
[[projects]] | |||
name = "github.com/golang/protobuf" | |||
packages = [ | |||
"proto", | |||
"ptypes", | |||
"ptypes/any", | |||
"ptypes/duration", | |||
"ptypes/timestamp" | |||
] | |||
revision = "925541529c1fa6821df4e44ce2723319eb2be768" | |||
version = "v1.0.0" | |||
[[projects]] | |||
branch = "master" | |||
name = "github.com/golang/snappy" | |||
packages = ["."] | |||
revision = "2e65f85255dbc3072edf28d6b5b8efc472979f5a" | |||
[[projects]] | |||
name = "github.com/gorilla/websocket" | |||
packages = ["."] | |||
revision = "ea4d1f681babbce9545c9c5f3d5194a789c89f5b" | |||
version = "v1.2.0" | |||
[[projects]] | |||
branch = "master" | |||
name = "github.com/hashicorp/hcl" | |||
packages = [ | |||
".", | |||
"hcl/ast", | |||
"hcl/parser", | |||
"hcl/printer", | |||
"hcl/scanner", | |||
"hcl/strconv", | |||
"hcl/token", | |||
"json/parser", | |||
"json/scanner", | |||
"json/token" | |||
] | |||
revision = "ef8a98b0bbce4a65b5aa4c368430a80ddc533168" | |||
[[projects]] | |||
name = "github.com/inconshreveable/mousetrap" | |||
packages = ["."] | |||
revision = "76626ae9c91c4f2a10f34cad8ce83ea42c93bb75" | |||
version = "v1.0" | |||
[[projects]] | |||
branch = "master" | |||
name = "github.com/jmhodges/levigo" | |||
packages = ["."] | |||
revision = "c42d9e0ca023e2198120196f842701bb4c55d7b9" | |||
[[projects]] | |||
branch = "master" | |||
name = "github.com/kr/logfmt" | |||
packages = ["."] | |||
revision = "b84e30acd515aadc4b783ad4ff83aff3299bdfe0" | |||
[[projects]] | |||
name = "github.com/magiconair/properties" | |||
packages = ["."] | |||
revision = "c2353362d570a7bfa228149c62842019201cfb71" | |||
version = "v1.8.0" | |||
[[projects]] | |||
name = "github.com/matttproud/golang_protobuf_extensions" | |||
packages = ["pbutil"] | |||
revision = "c12348ce28de40eed0136aa2b644d0ee0650e56c" | |||
version = "v1.0.1" | |||
[[projects]] | |||
branch = "master" | |||
name = "github.com/mitchellh/mapstructure" | |||
packages = ["."] | |||
revision = "bb74f1db0675b241733089d5a1faa5dd8b0ef57b" | |||
[[projects]] | |||
name = "github.com/pelletier/go-toml" | |||
packages = ["."] | |||
revision = "c01d1270ff3e442a8a57cddc1c92dc1138598194" | |||
version = "v1.2.0" | |||
[[projects]] | |||
name = "github.com/pkg/errors" | |||
packages = ["."] | |||
revision = "645ef00459ed84a119197bfb8d8205042c6df63d" | |||
version = "v0.8.0" | |||
[[projects]] | |||
name = "github.com/pmezard/go-difflib" | |||
packages = ["difflib"] | |||
revision = "792786c7400a136282c1664665ae0a8db921c6c2" | |||
version = "v1.0.0" | |||
[[projects]] | |||
name = "github.com/prometheus/client_golang" | |||
packages = [ | |||
"prometheus", | |||
"prometheus/promhttp" | |||
] | |||
revision = "c5b7fccd204277076155f10851dad72b76a49317" | |||
version = "v0.8.0" | |||
[[projects]] | |||
branch = "master" | |||
name = "github.com/prometheus/client_model" | |||
packages = ["go"] | |||
revision = "99fa1f4be8e564e8a6b613da7fa6f46c9edafc6c" | |||
[[projects]] | |||
branch = "master" | |||
name = "github.com/prometheus/common" | |||
packages = [ | |||
"expfmt", | |||
"internal/bitbucket.org/ww/goautoneg", | |||
"model" | |||
] | |||
revision = "7600349dcfe1abd18d72d3a1770870d9800a7801" | |||
[[projects]] | |||
branch = "master" | |||
name = "github.com/prometheus/procfs" | |||
packages = [ | |||
".", | |||
"internal/util", | |||
"nfs", | |||
"xfs" | |||
] | |||
revision = "40f013a808ec4fa79def444a1a56de4d1727efcb" | |||
[[projects]] | |||
branch = "master" | |||
name = "github.com/rcrowley/go-metrics" | |||
packages = ["."] | |||
revision = "e2704e165165ec55d062f5919b4b29494e9fa790" | |||
[[projects]] | |||
name = "github.com/spf13/afero" | |||
packages = [ | |||
".", | |||
"mem" | |||
] | |||
revision = "787d034dfe70e44075ccc060d346146ef53270ad" | |||
version = "v1.1.1" | |||
[[projects]] | |||
name = "github.com/spf13/cast" | |||
packages = ["."] | |||
revision = "8965335b8c7107321228e3e3702cab9832751bac" | |||
version = "v1.2.0" | |||
[[projects]] | |||
name = "github.com/spf13/cobra" | |||
packages = ["."] | |||
revision = "ef82de70bb3f60c65fb8eebacbb2d122ef517385" | |||
version = "v0.0.3" | |||
[[projects]] | |||
branch = "master" | |||
name = "github.com/spf13/jwalterweatherman" | |||
packages = ["."] | |||
revision = "7c0cea34c8ece3fbeb2b27ab9b59511d360fb394" | |||
[[projects]] | |||
name = "github.com/spf13/pflag" | |||
packages = ["."] | |||
revision = "583c0c0531f06d5278b7d917446061adc344b5cd" | |||
version = "v1.0.1" | |||
[[projects]] | |||
name = "github.com/spf13/viper" | |||
packages = ["."] | |||
revision = "b5e8006cbee93ec955a89ab31e0e3ce3204f3736" | |||
version = "v1.0.2" | |||
[[projects]] | |||
name = "github.com/stretchr/testify" | |||
packages = [ | |||
"assert", | |||
"require" | |||
] | |||
revision = "f35b8ab0b5a2cef36673838d662e249dd9c94686" | |||
version = "v1.2.2" | |||
[[projects]] | |||
branch = "master" | |||
name = "github.com/syndtr/goleveldb" | |||
packages = [ | |||
"leveldb", | |||
"leveldb/cache", | |||
"leveldb/comparer", | |||
"leveldb/errors", | |||
"leveldb/filter", | |||
"leveldb/iterator", | |||
"leveldb/journal", | |||
"leveldb/memdb", | |||
"leveldb/opt", | |||
"leveldb/storage", | |||
"leveldb/table", | |||
"leveldb/util" | |||
] | |||
revision = "0d5a0ceb10cf9ab89fdd744cc8c50a83134f6697" | |||
[[projects]] | |||
branch = "master" | |||
name = "github.com/tendermint/ed25519" | |||
packages = [ | |||
".", | |||
"edwards25519", | |||
"extra25519" | |||
] | |||
revision = "d8387025d2b9d158cf4efb07e7ebf814bcce2057" | |||
[[projects]] | |||
name = "github.com/tendermint/go-amino" | |||
packages = ["."] | |||
revision = "2106ca61d91029c931fd54968c2bb02dc96b1412" | |||
version = "0.10.1" | |||
[[projects]] | |||
name = "github.com/tendermint/tmlibs" | |||
packages = [ | |||
"autofile", | |||
"cli", | |||
"cli/flags", | |||
"clist", | |||
"common", | |||
"db", | |||
"flowrate", | |||
"log", | |||
"merkle", | |||
"merkle/tmhash", | |||
"test" | |||
] | |||
revision = "49596e0a1f48866603813df843c9409fc19805c6" | |||
version = "v0.9.0" | |||
[[projects]] | |||
branch = "master" | |||
name = "golang.org/x/crypto" | |||
packages = [ | |||
"bcrypt", | |||
"blowfish", | |||
"chacha20poly1305", | |||
"curve25519", | |||
"hkdf", | |||
"internal/chacha20", | |||
"internal/subtle", | |||
"nacl/box", | |||
"nacl/secretbox", | |||
"openpgp/armor", | |||
"openpgp/errors", | |||
"poly1305", | |||
"ripemd160", | |||
"salsa20/salsa" | |||
] | |||
revision = "a49355c7e3f8fe157a85be2f77e6e269a0f89602" | |||
[[projects]] | |||
branch = "master" | |||
name = "golang.org/x/net" | |||
packages = [ | |||
"context", | |||
"http/httpguts", | |||
"http2", | |||
"http2/hpack", | |||
"idna", | |||
"internal/timeseries", | |||
"netutil", | |||
"trace" | |||
] | |||
revision = "4cb1c02c05b0e749b0365f61ae859a8e0cfceed9" | |||
[[projects]] | |||
branch = "master" | |||
name = "golang.org/x/sys" | |||
packages = [ | |||
"cpu", | |||
"unix" | |||
] | |||
revision = "7138fd3d9dc8335c567ca206f4333fb75eb05d56" | |||
[[projects]] | |||
name = "golang.org/x/text" | |||
packages = [ | |||
"collate", | |||
"collate/build", | |||
"internal/colltab", | |||
"internal/gen", | |||
"internal/tag", | |||
"internal/triegen", | |||
"internal/ucd", | |||
"language", | |||
"secure/bidirule", | |||
"transform", | |||
"unicode/bidi", | |||
"unicode/cldr", | |||
"unicode/norm", | |||
"unicode/rangetable" | |||
] | |||
revision = "f21a4dfb5e38f5895301dc265a8def02365cc3d0" | |||
version = "v0.3.0" | |||
[[projects]] | |||
name = "google.golang.org/genproto" | |||
packages = ["googleapis/rpc/status"] | |||
revision = "7fd901a49ba6a7f87732eb344f6e3c5b19d1b200" | |||
[[projects]] | |||
name = "google.golang.org/grpc" | |||
packages = [ | |||
".", | |||
"balancer", | |||
"codes", | |||
"connectivity", | |||
"credentials", | |||
"grpclb/grpc_lb_v1/messages", | |||
"grpclog", | |||
"internal", | |||
"keepalive", | |||
"metadata", | |||
"naming", | |||
"peer", | |||
"resolver", | |||
"stats", | |||
"status", | |||
"tap", | |||
"transport" | |||
] | |||
revision = "5b3c4e850e90a4cf6a20ebd46c8b32a0a3afcb9e" | |||
version = "v1.7.5" | |||
[[projects]] | |||
name = "gopkg.in/yaml.v2" | |||
packages = ["."] | |||
revision = "5420a8b6744d3b0345ab293f6fcba19c978f1183" | |||
version = "v2.2.1" | |||
[solve-meta] | |||
analyzer-name = "dep" | |||
analyzer-version = 1 | |||
inputs-digest = "c25289282b94abc7f0c390e592e5e1636b7f26cb4773863ac39cde7fdc7b5bdf" | |||
solver-name = "gps-cdcl" | |||
solver-version = 1 |
@ -0,0 +1,99 @@ | |||
# Gopkg.toml example | |||
# | |||
# Refer to https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md | |||
# for detailed Gopkg.toml documentation. | |||
# | |||
# required = ["github.com/user/thing/cmd/thing"] | |||
# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"] | |||
# | |||
# [[constraint]] | |||
# name = "github.com/user/project" | |||
# version = "1.0.0" | |||
# | |||
# [[constraint]] | |||
# name = "github.com/user/project2" | |||
# branch = "dev" | |||
# source = "github.com/myfork/project2" | |||
# | |||
# [[override]] | |||
# name = "github.com/x/y" | |||
# version = "2.4.0" | |||
# | |||
# [prune] | |||
# non-go = false | |||
# go-tests = true | |||
# unused-packages = true | |||
[[constraint]] | |||
name = "github.com/ebuchman/fail-test" | |||
branch = "master" | |||
[[constraint]] | |||
name = "github.com/fortytw2/leaktest" | |||
branch = "master" | |||
[[constraint]] | |||
name = "github.com/go-kit/kit" | |||
version = "~0.6.0" | |||
[[constraint]] | |||
name = "github.com/gogo/protobuf" | |||
version = "~1.0.0" | |||
[[constraint]] | |||
name = "github.com/golang/protobuf" | |||
version = "~1.0.0" | |||
[[constraint]] | |||
name = "github.com/gorilla/websocket" | |||
version = "~1.2.0" | |||
[[constraint]] | |||
name = "github.com/pkg/errors" | |||
version = "~0.8.0" | |||
[[constraint]] | |||
name = "github.com/rcrowley/go-metrics" | |||
branch = "master" | |||
[[constraint]] | |||
name = "github.com/spf13/cobra" | |||
version = "~0.0.1" | |||
[[constraint]] | |||
name = "github.com/spf13/viper" | |||
version = "~1.0.0" | |||
[[constraint]] | |||
name = "github.com/stretchr/testify" | |||
version = "~1.2.1" | |||
[[constraint]] | |||
name = "github.com/tendermint/go-amino" | |||
version = "~0.10.1" | |||
[[override]] | |||
name = "github.com/tendermint/tmlibs" | |||
version = "~0.9.0" | |||
[[constraint]] | |||
name = "google.golang.org/grpc" | |||
version = "~1.7.3" | |||
# this got updated and broke, so locked to an old working commit ... | |||
[[override]] | |||
name = "google.golang.org/genproto" | |||
revision = "7fd901a49ba6a7f87732eb344f6e3c5b19d1b200" | |||
[prune] | |||
go-tests = true | |||
unused-packages = true | |||
[[constraint]] | |||
name = "github.com/prometheus/client_golang" | |||
version = "0.8.0" | |||
[[constraint]] | |||
branch = "master" | |||
name = "golang.org/x/net" |
@ -0,0 +1,204 @@ | |||
Tendermint Core | |||
License: Apache2.0 | |||
Apache License | |||
Version 2.0, January 2004 | |||
http://www.apache.org/licenses/ | |||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION | |||
1. Definitions. | |||
"License" shall mean the terms and conditions for use, reproduction, | |||
and distribution as defined by Sections 1 through 9 of this document. | |||
"Licensor" shall mean the copyright owner or entity authorized by | |||
the copyright owner that is granting the License. | |||
"Legal Entity" shall mean the union of the acting entity and all | |||
other entities that control, are controlled by, or are under common | |||
control with that entity. For the purposes of this definition, | |||
"control" means (i) the power, direct or indirect, to cause the | |||
direction or management of such entity, whether by contract or | |||
otherwise, or (ii) ownership of fifty percent (50%) or more of the | |||
outstanding shares, or (iii) beneficial ownership of such entity. | |||
"You" (or "Your") shall mean an individual or Legal Entity | |||
exercising permissions granted by this License. | |||
"Source" form shall mean the preferred form for making modifications, | |||
including but not limited to software source code, documentation | |||
source, and configuration files. | |||
"Object" form shall mean any form resulting from mechanical | |||
transformation or translation of a Source form, including but | |||
not limited to compiled object code, generated documentation, | |||
and conversions to other media types. | |||
"Work" shall mean the work of authorship, whether in Source or | |||
Object form, made available under the License, as indicated by a | |||
copyright notice that is included in or attached to the work | |||
(an example is provided in the Appendix below). | |||
"Derivative Works" shall mean any work, whether in Source or Object | |||
form, that is based on (or derived from) the Work and for which the | |||
editorial revisions, annotations, elaborations, or other modifications | |||
represent, as a whole, an original work of authorship. For the purposes | |||
of this License, Derivative Works shall not include works that remain | |||
separable from, or merely link (or bind by name) to the interfaces of, | |||
the Work and Derivative Works thereof. | |||
"Contribution" shall mean any work of authorship, including | |||
the original version of the Work and any modifications or additions | |||
to that Work or Derivative Works thereof, that is intentionally | |||
submitted to Licensor for inclusion in the Work by the copyright owner | |||
or by an individual or Legal Entity authorized to submit on behalf of | |||
the copyright owner. For the purposes of this definition, "submitted" | |||
means any form of electronic, verbal, or written communication sent | |||
to the Licensor or its representatives, including but not limited to | |||
communication on electronic mailing lists, source code control systems, | |||
and issue tracking systems that are managed by, or on behalf of, the | |||
Licensor for the purpose of discussing and improving the Work, but | |||
excluding communication that is conspicuously marked or otherwise | |||
designated in writing by the copyright owner as "Not a Contribution." | |||
"Contributor" shall mean Licensor and any individual or Legal Entity | |||
on behalf of whom a Contribution has been received by Licensor and | |||
subsequently incorporated within the Work. | |||
2. Grant of Copyright License. Subject to the terms and conditions of | |||
this License, each Contributor hereby grants to You a perpetual, | |||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable | |||
copyright license to reproduce, prepare Derivative Works of, | |||
publicly display, publicly perform, sublicense, and distribute the | |||
Work and such Derivative Works in Source or Object form. | |||
3. Grant of Patent License. Subject to the terms and conditions of | |||
this License, each Contributor hereby grants to You a perpetual, | |||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable | |||
(except as stated in this section) patent license to make, have made, | |||
use, offer to sell, sell, import, and otherwise transfer the Work, | |||
where such license applies only to those patent claims licensable | |||
by such Contributor that are necessarily infringed by their | |||
Contribution(s) alone or by combination of their Contribution(s) | |||
with the Work to which such Contribution(s) was submitted. If You | |||
institute patent litigation against any entity (including a | |||
cross-claim or counterclaim in a lawsuit) alleging that the Work | |||
or a Contribution incorporated within the Work constitutes direct | |||
or contributory patent infringement, then any patent licenses | |||
granted to You under this License for that Work shall terminate | |||
as of the date such litigation is filed. | |||
4. Redistribution. You may reproduce and distribute copies of the | |||
Work or Derivative Works thereof in any medium, with or without | |||
modifications, and in Source or Object form, provided that You | |||
meet the following conditions: | |||
(a) You must give any other recipients of the Work or | |||
Derivative Works a copy of this License; and | |||
(b) You must cause any modified files to carry prominent notices | |||
stating that You changed the files; and | |||
(c) You must retain, in the Source form of any Derivative Works | |||
that You distribute, all copyright, patent, trademark, and | |||
attribution notices from the Source form of the Work, | |||
excluding those notices that do not pertain to any part of | |||
the Derivative Works; and | |||
(d) If the Work includes a "NOTICE" text file as part of its | |||
distribution, then any Derivative Works that You distribute must | |||
include a readable copy of the attribution notices contained | |||
within such NOTICE file, excluding those notices that do not | |||
pertain to any part of the Derivative Works, in at least one | |||
of the following places: within a NOTICE text file distributed | |||
as part of the Derivative Works; within the Source form or | |||
documentation, if provided along with the Derivative Works; or, | |||
within a display generated by the Derivative Works, if and | |||
wherever such third-party notices normally appear. The contents | |||
of the NOTICE file are for informational purposes only and | |||
do not modify the License. You may add Your own attribution | |||
notices within Derivative Works that You distribute, alongside | |||
or as an addendum to the NOTICE text from the Work, provided | |||
that such additional attribution notices cannot be construed | |||
as modifying the License. | |||
You may add Your own copyright statement to Your modifications and | |||
may provide additional or different license terms and conditions | |||
for use, reproduction, or distribution of Your modifications, or | |||
for any such Derivative Works as a whole, provided Your use, | |||
reproduction, and distribution of the Work otherwise complies with | |||
the conditions stated in this License. | |||
5. Submission of Contributions. Unless You explicitly state otherwise, | |||
any Contribution intentionally submitted for inclusion in the Work | |||
by You to the Licensor shall be under the terms and conditions of | |||
this License, without any additional terms or conditions. | |||
Notwithstanding the above, nothing herein shall supersede or modify | |||
the terms of any separate license agreement you may have executed | |||
with Licensor regarding such Contributions. | |||
6. Trademarks. This License does not grant permission to use the trade | |||
names, trademarks, service marks, or product names of the Licensor, | |||
except as required for reasonable and customary use in describing the | |||
origin of the Work and reproducing the content of the NOTICE file. | |||
7. Disclaimer of Warranty. Unless required by applicable law or | |||
agreed to in writing, Licensor provides the Work (and each | |||
Contributor provides its Contributions) on an "AS IS" BASIS, | |||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or | |||
implied, including, without limitation, any warranties or conditions | |||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A | |||
PARTICULAR PURPOSE. You are solely responsible for determining the | |||
appropriateness of using or redistributing the Work and assume any | |||
risks associated with Your exercise of permissions under this License. | |||
8. Limitation of Liability. In no event and under no legal theory, | |||
whether in tort (including negligence), contract, or otherwise, | |||
unless required by applicable law (such as deliberate and grossly | |||
negligent acts) or agreed to in writing, shall any Contributor be | |||
liable to You for damages, including any direct, indirect, special, | |||
incidental, or consequential damages of any character arising as a | |||
result of this License or out of the use or inability to use the | |||
Work (including but not limited to damages for loss of goodwill, | |||
work stoppage, computer failure or malfunction, or any and all | |||
other commercial damages or losses), even if such Contributor | |||
has been advised of the possibility of such damages. | |||
9. Accepting Warranty or Additional Liability. While redistributing | |||
the Work or Derivative Works thereof, You may choose to offer, | |||
and charge a fee for, acceptance of support, warranty, indemnity, | |||
or other liability obligations and/or rights consistent with this | |||
License. However, in accepting such obligations, You may act only | |||
on Your own behalf and on Your sole responsibility, not on behalf | |||
of any other Contributor, and only if You agree to indemnify, | |||
defend, and hold each Contributor harmless for any liability | |||
incurred by, or claims asserted against, such Contributor by reason | |||
of your accepting any such warranty or additional liability. | |||
END OF TERMS AND CONDITIONS | |||
APPENDIX: How to apply the Apache License to your work. | |||
To apply the Apache License to your work, attach the following | |||
boilerplate notice, with the fields enclosed by brackets "{}" | |||
replaced with your own identifying information. (Don't include | |||
the brackets!) The text should be enclosed in the appropriate | |||
comment syntax for the file format. We also recommend that a | |||
file or class name and description of purpose be included on the | |||
same "printed page" as the copyright notice for easier | |||
identification within third-party archives. | |||
Copyright 2016 All in Bits, Inc | |||
Licensed under the Apache License, Version 2.0 (the "License"); | |||
you may not use this file except in compliance with the License. | |||
You may obtain a copy of the License at | |||
http://www.apache.org/licenses/LICENSE-2.0 | |||
Unless required by applicable law or agreed to in writing, software | |||
distributed under the License is distributed on an "AS IS" BASIS, | |||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
See the License for the specific language governing permissions and | |||
limitations under the License. |
@ -0,0 +1,236 @@ | |||
GOTOOLS = \ | |||
github.com/golang/dep/cmd/dep \ | |||
gopkg.in/alecthomas/gometalinter.v2 | |||
PACKAGES=$(shell go list ./... | grep -v '/vendor/') | |||
BUILD_TAGS?=tendermint | |||
BUILD_FLAGS = -ldflags "-X github.com/tendermint/tendermint/version.GitCommit=`git rev-parse --short=8 HEAD`" | |||
all: check build test install | |||
check: check_tools ensure_deps | |||
######################################## | |||
### Build | |||
build: | |||
CGO_ENABLED=0 go build $(BUILD_FLAGS) -tags '$(BUILD_TAGS)' -o build/tendermint ./cmd/tendermint/ | |||
build_race: | |||
CGO_ENABLED=0 go build -race $(BUILD_FLAGS) -tags '$(BUILD_TAGS)' -o build/tendermint ./cmd/tendermint | |||
install: | |||
CGO_ENABLED=0 go install $(BUILD_FLAGS) -tags '$(BUILD_TAGS)' ./cmd/tendermint | |||
######################################## | |||
### Distribution | |||
# dist builds binaries for all platforms and packages them for distribution | |||
dist: | |||
@BUILD_TAGS='$(BUILD_TAGS)' sh -c "'$(CURDIR)/scripts/dist.sh'" | |||
######################################## | |||
### Tools & dependencies | |||
check_tools: | |||
@# https://stackoverflow.com/a/25668869 | |||
@echo "Found tools: $(foreach tool,$(notdir $(GOTOOLS)),\ | |||
$(if $(shell which $(tool)),$(tool),$(error "No $(tool) in PATH")))" | |||
get_tools: | |||
@echo "--> Installing tools" | |||
go get -u -v $(GOTOOLS) | |||
@gometalinter.v2 --install | |||
update_tools: | |||
@echo "--> Updating tools" | |||
@go get -u $(GOTOOLS) | |||
#Run this from CI | |||
get_vendor_deps: | |||
@rm -rf vendor/ | |||
@echo "--> Running dep" | |||
@dep ensure -vendor-only | |||
#Run this locally. | |||
ensure_deps: | |||
@rm -rf vendor/ | |||
@echo "--> Running dep" | |||
@dep ensure | |||
draw_deps: | |||
@# requires brew install graphviz or apt-get install graphviz | |||
go get github.com/RobotsAndPencils/goviz | |||
@goviz -i github.com/tendermint/tendermint/cmd/tendermint -d 3 | dot -Tpng -o dependency-graph.png | |||
get_deps_bin_size: | |||
@# Copy of build recipe with additional flags to perform binary size analysis | |||
$(eval $(shell go build -work -a $(BUILD_FLAGS) -tags '$(BUILD_TAGS)' -o build/tendermint ./cmd/tendermint/ 2>&1)) | |||
@find $(WORK) -type f -name "*.a" | xargs -I{} du -hxs "{}" | sort -rh | sed -e s:${WORK}/::g > deps_bin_size.log | |||
@echo "Results can be found here: $(CURDIR)/deps_bin_size.log" | |||
######################################## | |||
### Testing | |||
## required to be run first by most tests | |||
build_docker_test_image: | |||
docker build -t tester -f ./test/docker/Dockerfile . | |||
### coverage, app, persistence, and libs tests | |||
test_cover: | |||
# run the go unit tests with coverage | |||
bash test/test_cover.sh | |||
test_apps: | |||
# run the app tests using bash | |||
# requires `abci-cli` and `tendermint` binaries installed | |||
bash test/app/test.sh | |||
test_persistence: | |||
# run the persistence tests using bash | |||
# requires `abci-cli` installed | |||
docker run --name run_persistence -t tester bash test/persist/test_failure_indices.sh | |||
# TODO undockerize | |||
# bash test/persist/test_failure_indices.sh | |||
test_p2p: | |||
docker rm -f rsyslog || true | |||
rm -rf test/logs || true | |||
mkdir test/logs | |||
cd test/ | |||
docker run -d -v "logs:/var/log/" -p 127.0.0.1:5514:514/udp --name rsyslog voxxit/rsyslog | |||
cd .. | |||
# requires 'tester' the image from above | |||
bash test/p2p/test.sh tester | |||
need_abci: | |||
bash scripts/install_abci_apps.sh | |||
test_integrations: | |||
make build_docker_test_image | |||
make get_tools | |||
make get_vendor_deps | |||
make install | |||
make need_abci | |||
make test_cover | |||
make test_apps | |||
make test_persistence | |||
make test_p2p | |||
test_release: | |||
@go test -tags release $(PACKAGES) | |||
test100: | |||
@for i in {1..100}; do make test; done | |||
vagrant_test: | |||
vagrant up | |||
vagrant ssh -c 'make test_integrations' | |||
### go tests | |||
test: | |||
@echo "--> Running go test" | |||
@go test $(PACKAGES) | |||
test_race: | |||
@echo "--> Running go test --race" | |||
@go test -v -race $(PACKAGES) | |||
######################################## | |||
### Formatting, linting, and vetting | |||
fmt: | |||
@go fmt ./... | |||
metalinter: | |||
@echo "--> Running linter" | |||
@gometalinter.v2 --vendor --deadline=600s --disable-all \ | |||
--enable=deadcode \ | |||
--enable=gosimple \ | |||
--enable=misspell \ | |||
--enable=safesql \ | |||
./... | |||
#--enable=gas \ | |||
#--enable=maligned \ | |||
#--enable=dupl \ | |||
#--enable=errcheck \ | |||
#--enable=goconst \ | |||
#--enable=gocyclo \ | |||
#--enable=goimports \ | |||
#--enable=golint \ <== comments on anything exported | |||
#--enable=gotype \ | |||
#--enable=ineffassign \ | |||
#--enable=interfacer \ | |||
#--enable=megacheck \ | |||
#--enable=staticcheck \ | |||
#--enable=structcheck \ | |||
#--enable=unconvert \ | |||
#--enable=unparam \ | |||
#--enable=unused \ | |||
#--enable=varcheck \ | |||
#--enable=vet \ | |||
#--enable=vetshadow \ | |||
metalinter_all: | |||
@echo "--> Running linter (all)" | |||
gometalinter.v2 --vendor --deadline=600s --enable-all --disable=lll ./... | |||
########################################################### | |||
### Docker image | |||
build-docker: | |||
cp build/tendermint DOCKER/tendermint | |||
docker build --label=tendermint --tag="tendermint/tendermint" DOCKER | |||
rm -rf DOCKER/tendermint | |||
########################################################### | |||
### Local testnet using docker | |||
# Build linux binary on other platforms | |||
build-linux: | |||
GOOS=linux GOARCH=amd64 $(MAKE) build | |||
build-docker-localnode: | |||
cd networks/local | |||
make | |||
# Run a 4-node testnet locally | |||
localnet-start: localnet-stop | |||
@if ! [ -f build/node0/config/genesis.json ]; then docker run --rm -v $(CURDIR)/build:/tendermint:Z tendermint/localnode testnet --v 4 --o . --populate-persistent-peers --starting-ip-address 192.167.10.2 ; fi | |||
docker-compose up | |||
# Stop testnet | |||
localnet-stop: | |||
docker-compose down | |||
########################################################### | |||
### Remote full-nodes (sentry) using terraform and ansible | |||
# Server management | |||
sentry-start: | |||
@if [ -z "$(DO_API_TOKEN)" ]; then echo "DO_API_TOKEN environment variable not set." ; false ; fi | |||
@if ! [ -f $(HOME)/.ssh/id_rsa.pub ]; then ssh-keygen ; fi | |||
cd networks/remote/terraform && terraform init && terraform apply -var DO_API_TOKEN="$(DO_API_TOKEN)" -var SSH_KEY_FILE="$(HOME)/.ssh/id_rsa.pub" | |||
@if ! [ -f $(CURDIR)/build/node0/config/genesis.json ]; then docker run --rm -v $(CURDIR)/build:/tendermint:Z tendermint/localnode testnet --v 0 --n 4 --o . ; fi | |||
cd networks/remote/ansible && ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook -i inventory/digital_ocean.py -l sentrynet install.yml | |||
@echo "Next step: Add your validator setup in the genesis.json and config.tml files and run \"make sentry-config\". (Public key of validator, chain ID, peer IP and node ID.)" | |||
# Configuration management | |||
sentry-config: | |||
cd networks/remote/ansible && ansible-playbook -i inventory/digital_ocean.py -l sentrynet config.yml -e BINARY=$(CURDIR)/build/tendermint -e CONFIGDIR=$(CURDIR)/build | |||
sentry-stop: | |||
@if [ -z "$(DO_API_TOKEN)" ]; then echo "DO_API_TOKEN environment variable not set." ; false ; fi | |||
cd networks/remote/terraform && terraform destroy -var DO_API_TOKEN="$(DO_API_TOKEN)" -var SSH_KEY_FILE="$(HOME)/.ssh/id_rsa.pub" | |||
# meant for the CI, inspect script & adapt accordingly | |||
build-slate: | |||
bash scripts/slate.sh | |||
# To avoid unintended conflicts with file names, always add to .PHONY | |||
# unless there is a reason not to. | |||
# https://www.gnu.org/software/make/manual/html_node/Phony-Targets.html | |||
.PHONY: check build build_race dist install check_tools get_tools update_tools get_vendor_deps draw_deps test_cover test_apps test_persistence test_p2p test test_race test_integrations test_release test100 vagrant_test fmt build-linux localnet-start localnet-stop build-docker build-docker-localnode sentry-start sentry-config sentry-stop build-slate |
@ -0,0 +1,138 @@ | |||
# Tendermint | |||
[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. | |||
[![version](https://img.shields.io/github/tag/tendermint/tendermint.svg)](https://github.com/tendermint/tendermint/releases/latest) | |||
[![API Reference]( | |||
https://camo.githubusercontent.com/915b7be44ada53c290eb157634330494ebe3e30a/68747470733a2f2f676f646f632e6f72672f6769746875622e636f6d2f676f6c616e672f6764646f3f7374617475732e737667 | |||
)](https://godoc.org/github.com/tendermint/tendermint) | |||
[![Go version](https://img.shields.io/badge/go-1.9.2-blue.svg)](https://github.com/moovweb/gvm) | |||
[![riot.im](https://img.shields.io/badge/riot.im-JOIN%20CHAT-green.svg)](https://riot.im/app/#/room/#tendermint:matrix.org) | |||
[![license](https://img.shields.io/github/license/tendermint/tendermint.svg)](https://github.com/tendermint/tendermint/blob/master/LICENSE) | |||
[![](https://tokei.rs/b1/github/tendermint/tendermint?category=lines)](https://github.com/tendermint/tendermint) | |||
Branch | Tests | Coverage | |||
----------|-------|---------- | |||
master | [![CircleCI](https://circleci.com/gh/tendermint/tendermint/tree/master.svg?style=shield)](https://circleci.com/gh/tendermint/tendermint/tree/master) | [![codecov](https://codecov.io/gh/tendermint/tendermint/branch/master/graph/badge.svg)](https://codecov.io/gh/tendermint/tendermint) | |||
develop | [![CircleCI](https://circleci.com/gh/tendermint/tendermint/tree/develop.svg?style=shield)](https://circleci.com/gh/tendermint/tendermint/tree/develop) | [![codecov](https://codecov.io/gh/tendermint/tendermint/branch/develop/graph/badge.svg)](https://codecov.io/gh/tendermint/tendermint) | |||
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. | |||
For protocol details, see [the specification](/docs/spec). | |||
## A Note on Production Readiness | |||
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. | |||
Thus we tag the releases as *alpha software*. | |||
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 | |||
---|--- | |||
Go version | Go1.9 or higher | |||
## Install | |||
See the [install instructions](/docs/install.rst) | |||
## Quick Start | |||
- [Single node](/docs/using-tendermint.rst) | |||
- [Local cluster using docker-compose](/networks/local) | |||
- [Remote cluster using terraform and ansible](/docs/terraform-and-ansible.md) | |||
- [Join the public testnet](https://cosmos.network/testnet) | |||
## Resources | |||
### Tendermint Core | |||
For details about the blockchain data structures and the p2p protocols, see the | |||
the [Tendermint specification](/docs/spec). | |||
For details on using the software, [Read The Docs](https://tendermint.readthedocs.io/en/master/). | |||
Additional information about some - and eventually all - of the sub-projects below, can be found at Read The Docs. | |||
### Sub-projects | |||
* [ABCI](http://github.com/tendermint/abci), the Application Blockchain Interface | |||
* [Go-Wire](http://github.com/tendermint/go-wire), a deterministic serialization library | |||
* [Go-Crypto](http://github.com/tendermint/tendermint/crypto), an elliptic curve cryptography library | |||
* [TmLibs](http://github.com/tendermint/tmlibs), an assortment of Go libraries used internally | |||
* [IAVL](http://github.com/tendermint/iavl), Merkleized IAVL+ Tree implementation | |||
### Tools | |||
* [Deployment, Benchmarking, and Monitoring](http://tendermint.readthedocs.io/projects/tools/en/develop/index.html#tendermint-tools) | |||
### Applications | |||
* [Cosmos SDK](http://github.com/cosmos/cosmos-sdk); a cryptocurrency application framework | |||
* [Ethermint](http://github.com/tendermint/ethermint); Ethereum on Tendermint | |||
* [Many more](https://tendermint.readthedocs.io/en/master/ecosystem.html#abci-applications) | |||
### More | |||
* [Master's Thesis on Tendermint](https://atrium.lib.uoguelph.ca/xmlui/handle/10214/9769) | |||
* [Original Whitepaper](https://tendermint.com/static/docs/tendermint.pdf) | |||
* [Tendermint Blog](https://blog.cosmos.network/tendermint/home) | |||
* [Cosmos Blog](https://blog.cosmos.network) | |||
## 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 | |||
Exported objects in these packages that are not covered by the versioning scheme | |||
are explicitly marked by `// UNSTABLE` in their go doc comment and may change at any time. | |||
Functions, types, and values in any other package may also change at any time. | |||
### 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)). | |||
## Code of Conduct | |||
Please read, understand and adhere to our [code of conduct](CODE_OF_CONDUCT.md). |
@ -0,0 +1,23 @@ | |||
package version | |||
// Version components | |||
const ( | |||
Maj = "0" | |||
Min = "22" | |||
Fix = "0" | |||
) | |||
var ( | |||
// Version is the current version of Tendermint | |||
// Must be a string because scripts like dist.sh read this file. | |||
Version = "0.22.0" | |||
// GitCommit is the current HEAD set using ldflags. | |||
GitCommit string | |||
) | |||
func init() { | |||
if GitCommit != "" { | |||
Version += "-" + GitCommit | |||
} | |||
} |