- syntax = "proto3";
- package tendermint.types;
-
- option go_package = "github.com/tendermint/tendermint/proto/tendermint/types";
-
- import "gogoproto/gogo.proto";
- import "google/protobuf/duration.proto";
-
- option (gogoproto.equal_all) = true;
-
- // ConsensusParams contains consensus critical parameters that determine the
- // validity of blocks.
- message ConsensusParams {
- BlockParams block = 1;
- EvidenceParams evidence = 2;
- ValidatorParams validator = 3;
- VersionParams version = 4;
- SynchronyParams synchrony = 5;
- TimeoutParams timeout = 6;
- }
-
- // BlockParams contains limits on the block size.
- message BlockParams {
- // Max block size, in bytes.
- // Note: must be greater than 0
- int64 max_bytes = 1;
- // Max gas per block.
- // Note: must be greater or equal to -1
- int64 max_gas = 2;
- }
-
- // EvidenceParams determine how we handle evidence of malfeasance.
- message EvidenceParams {
- // Max age of evidence, in blocks.
- //
- // The basic formula for calculating this is: MaxAgeDuration / {average block
- // time}.
- int64 max_age_num_blocks = 1;
-
- // Max age of evidence, in time.
- //
- // It should correspond with an app's "unbonding period" or other similar
- // mechanism for handling [Nothing-At-Stake
- // attacks](https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed).
- google.protobuf.Duration max_age_duration = 2
- [(gogoproto.nullable) = false, (gogoproto.stdduration) = true];
-
- // This sets the maximum size of total evidence in bytes that can be committed
- // in a single block. and should fall comfortably under the max block bytes.
- // Default is 1048576 or 1MB
- int64 max_bytes = 3;
- }
-
- // ValidatorParams restrict the public key types validators can use.
- // NOTE: uses ABCI pubkey naming, not Amino names.
- message ValidatorParams {
- repeated string pub_key_types = 1;
- }
-
- // VersionParams contains the ABCI application version.
- message VersionParams {
- uint64 app_version = 1;
- }
-
- // HashedParams is a subset of ConsensusParams.
- //
- // It is hashed into the Header.ConsensusHash.
- message HashedParams {
- int64 block_max_bytes = 1;
- int64 block_max_gas = 2;
- }
-
- // SynchronyParams configure the bounds under which a proposed block's timestamp is considered valid.
- // These parameters are part of the proposer-based timestamps algorithm. For more information,
- // see the specification of proposer-based timestamps:
- // https://github.com/tendermint/tendermint/tree/master/spec/consensus/proposer-based-timestamp
- message SynchronyParams {
- // message_delay bounds how long a proposal message may take to reach all validators on a newtork
- // and still be considered valid.
- google.protobuf.Duration message_delay = 1 [(gogoproto.stdduration) = true];
- // precision bounds how skewed a proposer's clock may be from any validator
- // on the network while still producing valid proposals.
- google.protobuf.Duration precision = 2 [(gogoproto.stdduration) = true];
- }
-
- // TimeoutParams configure the timeouts for the steps of the Tendermint consensus algorithm.
- message TimeoutParams {
- // These fields configure the timeouts for the propose step of the Tendermint
- // consensus algorithm: propose is the initial timeout and propose_delta
- // determines how much the timeout grows in subsequent rounds.
- // For the first round, this propose timeout is used and for every subsequent
- // round, the timeout grows by propose_delta.
- //
- // For example:
- // With propose = 10ms, propose_delta = 5ms, the first round's propose phase
- // timeout would be 10ms, the second round's would be 15ms, the third 20ms and so on.
- //
- // If a node waiting for a proposal message does not receive one matching its
- // current height and round before this timeout, the node will issue a
- // nil prevote for the round and advance to the next step.
- google.protobuf.Duration propose = 1 [(gogoproto.stdduration) = true];
- google.protobuf.Duration propose_delta = 2 [(gogoproto.stdduration) = true];
-
- // vote along with vote_delta configure the timeout for both of the prevote and
- // precommit steps of the Tendermint consensus algorithm.
- //
- // These parameters influence the vote step timeouts in the the same way that
- // the propose and propose_delta parameters do to the proposal step.
- //
- // The vote timeout does not begin until a quorum of votes has been received. Once
- // a quorum of votes has been seen and this timeout elapses, Tendermint will
- // procced to the next step of the consensus algorithm. If Tendermint receives
- // all of the remaining votes before the end of the timeout, it will proceed
- // to the next step immediately.
- google.protobuf.Duration vote = 3 [(gogoproto.stdduration) = true];
- google.protobuf.Duration vote_delta = 4 [(gogoproto.stdduration) = true];
-
- // commit configures how long Tendermint will wait after receiving a quorum of
- // precommits before beginning consensus for the next height. This can be
- // used to allow slow precommits to arrive for inclusion in the next height before progressing.
- google.protobuf.Duration commit = 5 [(gogoproto.stdduration) = true];
-
- // bypass_commit_timeout configures the node to proceed immediately to
- // the next height once the node has received all precommits for a block, forgoing
- // the remaining commit timeout.
- // Setting bypass_commit_timeout false (the default) causes Tendermint to wait
- // for the full commit timeout.
- bool bypass_commit_timeout = 6;
- }
|