diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 481621f76..000000000 --- a/.editorconfig +++ /dev/null @@ -1,16 +0,0 @@ -# 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 diff --git a/.gitignore b/.gitignore deleted file mode 100644 index bcfd36db1..000000000 --- a/.gitignore +++ /dev/null @@ -1,29 +0,0 @@ -*.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 diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index d73c949a2..000000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,919 +0,0 @@ -# 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/` to `p2p/filter/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. diff --git a/Gopkg.lock b/Gopkg.lock deleted file mode 100644 index e2fadfadc..000000000 --- a/Gopkg.lock +++ /dev/null @@ -1,429 +0,0 @@ -# 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 diff --git a/Gopkg.toml b/Gopkg.toml deleted file mode 100644 index 18e2767a9..000000000 --- a/Gopkg.toml +++ /dev/null @@ -1,99 +0,0 @@ -# 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" diff --git a/LICENSE b/LICENSE deleted file mode 100644 index bb66bb350..000000000 --- a/LICENSE +++ /dev/null @@ -1,204 +0,0 @@ -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. diff --git a/Makefile b/Makefile deleted file mode 100644 index 079c58f90..000000000 --- a/Makefile +++ /dev/null @@ -1,236 +0,0 @@ -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 diff --git a/README.md b/README.md deleted file mode 100644 index daba4f59a..000000000 --- a/README.md +++ /dev/null @@ -1,138 +0,0 @@ -# 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). diff --git a/version/version.go b/version/version.go deleted file mode 100644 index 9be4c9d82..000000000 --- a/version/version.go +++ /dev/null @@ -1,23 +0,0 @@ -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 - } -}