syntax = "proto3"; package tendermint.proto.types; option go_package = "github.com/tendermint/tendermint/proto/types"; import "third_party/proto/gogoproto/gogo.proto"; import "google/protobuf/timestamp.proto"; import "proto/libs/bits/types.proto"; import "proto/version/version.proto"; // BlockIdFlag indicates which BlcokID the signature is for enum BlockIDFlag { option (gogoproto.goproto_enum_stringer) = false; option (gogoproto.goproto_enum_prefix) = false; BLOCKD_ID_FLAG_UNKNOWN = 0; BLOCK_ID_FLAG_ABSENT = 1 [(gogoproto.enumvalue_customname) = "BlockIDFlagAbsent"]; BLOCK_ID_FLAG_COMMIT = 2 [(gogoproto.enumvalue_customname) = "BlockIDFlagCommit"]; BLOCK_ID_FLAG_NIL = 3 [(gogoproto.enumvalue_customname) = "BlockIDFlagNil"]; } // SignedMsgType is a type of signed message in the consensus. enum SignedMsgType { option (gogoproto.goproto_enum_stringer) = false; option (gogoproto.goproto_enum_prefix) = false; SIGNED_MSG_TYPE_UNKNOWN = 0; PREVOTE_TYPE = 1 [(gogoproto.enumvalue_customname) = "PrevoteType"]; PRECOMMIT_TYPE = 2 [(gogoproto.enumvalue_customname) = "PrecommitType"]; PROPOSAL_TYPE = 3 [(gogoproto.enumvalue_customname) = "ProposalType"]; } // PartsetHeader message PartSetHeader { option (gogoproto.populate) = true; option (gogoproto.equal) = true; uint32 total = 1; bytes hash = 2; } // BlockID message BlockID { option (gogoproto.populate) = true; option (gogoproto.equal) = true; bytes hash = 1; PartSetHeader parts_header = 2 [(gogoproto.nullable) = false]; } // -------------------------------- // Header defines the structure of a Tendermint block header. message Header { option (gogoproto.populate) = true; option (gogoproto.equal) = true; // basic block info tendermint.proto.version.Consensus version = 1 [(gogoproto.nullable) = false]; string chain_id = 2 [(gogoproto.customname) = "ChainID"]; int64 height = 3; google.protobuf.Timestamp time = 4 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; // prev block info BlockID last_block_id = 5 [(gogoproto.nullable) = false, (gogoproto.customname) = "LastBlockID"]; // hashes of block data bytes last_commit_hash = 6; // commit from validators from the last block bytes data_hash = 7; // transactions // hashes from the app output from the prev block bytes validators_hash = 8; // validators for the current block bytes next_validators_hash = 9; // validators for the next block bytes consensus_hash = 10; // consensus params for current block bytes app_hash = 11; // state after txs from the previous block bytes last_results_hash = 12; // root hash of all results from the txs from the previous block // consensus info bytes evidence_hash = 13; // evidence included in the block bytes proposer_address = 14; // original proposer of the block } // Data contains the set of transactions included in the block message Data { // Txs that will be applied by state @ block.Height+1. // NOTE: not all txs here are valid. We're just agreeing on the order first. // This means that block.AppHash does not include these txs. repeated bytes txs = 1; // Volatile bytes hash = 2; } // Vote represents a prevote, precommit, or commit vote from validators for // consensus. message Vote { SignedMsgType type = 1; int64 height = 2; int32 round = 3; BlockID block_id = 4 [(gogoproto.nullable) = false, (gogoproto.customname) = "BlockID"]; // zero if vote is nil. google.protobuf.Timestamp timestamp = 5 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; bytes validator_address = 6; uint32 validator_index = 7; bytes signature = 8; } // Commit contains the evidence that a block was committed by a set of validators. message Commit { int64 height = 1; int32 round = 2; BlockID block_id = 3 [(gogoproto.nullable) = false, (gogoproto.customname) = "BlockID"]; repeated CommitSig signatures = 4 [(gogoproto.nullable) = false]; bytes hash = 5; tendermint.proto.libs.bits.BitArray bit_array = 6; } // CommitSig is a part of the Vote included in a Commit. message CommitSig { BlockIDFlag block_id_flag = 1; bytes validator_address = 2; google.protobuf.Timestamp timestamp = 3 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; bytes signature = 4; } message Proposal { SignedMsgType type = 1; int64 height = 2; int32 round = 3; int32 pol_round = 4; BlockID block_id = 5 [(gogoproto.customname) = "BlockID", (gogoproto.nullable) = false]; google.protobuf.Timestamp timestamp = 6 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; bytes signature = 7; } message SignedHeader { Header header = 1; Commit commit = 2; }