syntax = "proto3"; package tendermint.abci.types; option go_package = "github.com/tendermint/tendermint/abci/types"; // For more information on gogo.proto, see: // https://github.com/gogo/protobuf/blob/master/extensions.md import "crypto/merkle/merkle.proto"; import "google/protobuf/duration.proto"; import "google/protobuf/timestamp.proto"; import "third_party/proto/gogoproto/gogo.proto"; // This file is copied from http://github.com/tendermint/abci // NOTE: When using custom types, mind the warnings. // https://github.com/gogo/protobuf/blob/master/custom_types.md#warnings-and-issues option (gogoproto.marshaler_all) = true; option (gogoproto.unmarshaler_all) = true; option (gogoproto.sizer_all) = true; option (gogoproto.goproto_registration) = true; //---------------------------------------- // Request types message Request { oneof value { RequestEcho echo = 2; RequestFlush flush = 3; RequestInfo info = 4; RequestSetOption set_option = 5; RequestInitChain init_chain = 6; RequestQuery query = 7; RequestBeginBlock begin_block = 8; RequestCheckTx check_tx = 9; RequestDeliverTx deliver_tx = 19; RequestEndBlock end_block = 11; RequestCommit commit = 12; RequestListSnapshots list_snapshots = 13; RequestOfferSnapshot offer_snapshot = 14; RequestLoadSnapshotChunk load_snapshot_chunk = 15; RequestApplySnapshotChunk apply_snapshot_chunk = 16; } } message RequestEcho { string message = 1; } message RequestFlush {} message RequestInfo { string version = 1; uint64 block_version = 2; uint64 p2p_version = 3; } // nondeterministic message RequestSetOption { string key = 1; string value = 2; } message RequestInitChain { google.protobuf.Timestamp time = 1 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; string chain_id = 2; ConsensusParams consensus_params = 3; repeated ValidatorUpdate validators = 4 [(gogoproto.nullable) = false]; bytes app_state_bytes = 5; } message RequestQuery { bytes data = 1; string path = 2; int64 height = 3; bool prove = 4; } message RequestBeginBlock { bytes hash = 1; Header header = 2 [(gogoproto.nullable) = false]; LastCommitInfo last_commit_info = 3 [(gogoproto.nullable) = false]; repeated Evidence byzantine_validators = 4 [(gogoproto.nullable) = false]; } enum CheckTxType { New = 0; Recheck = 1; } message RequestCheckTx { bytes tx = 1; CheckTxType type = 2; } message RequestDeliverTx { bytes tx = 1; } message RequestEndBlock { int64 height = 1; } message RequestCommit {} // lists available snapshots message RequestListSnapshots { } // offers a snapshot to the application message RequestOfferSnapshot { Snapshot snapshot = 1; // snapshot offered by peers bytes app_hash = 2; // light client-verified app hash for snapshot height } // loads a snapshot chunk message RequestLoadSnapshotChunk { uint64 height = 1; uint32 format = 2; uint32 chunk = 3; } // Applies a snapshot chunk message RequestApplySnapshotChunk { uint32 index = 1; bytes chunk = 2; string sender = 3; } //---------------------------------------- // Response types message Response { oneof value { ResponseException exception = 1; ResponseEcho echo = 2; ResponseFlush flush = 3; ResponseInfo info = 4; ResponseSetOption set_option = 5; ResponseInitChain init_chain = 6; ResponseQuery query = 7; ResponseBeginBlock begin_block = 8; ResponseCheckTx check_tx = 9; ResponseDeliverTx deliver_tx = 10; ResponseEndBlock end_block = 11; ResponseCommit commit = 12; ResponseListSnapshots list_snapshots = 13; ResponseOfferSnapshot offer_snapshot = 14; ResponseLoadSnapshotChunk load_snapshot_chunk = 15; ResponseApplySnapshotChunk apply_snapshot_chunk = 16; } } // nondeterministic message ResponseException { string error = 1; } message ResponseEcho { string message = 1; } message ResponseFlush {} message ResponseInfo { string data = 1; string version = 2; uint64 app_version = 3; int64 last_block_height = 4; bytes last_block_app_hash = 5; } // nondeterministic message ResponseSetOption { uint32 code = 1; // bytes data = 2; string log = 3; string info = 4; } message ResponseInitChain { ConsensusParams consensus_params = 1; repeated ValidatorUpdate validators = 2 [(gogoproto.nullable) = false]; } message ResponseQuery { uint32 code = 1; // bytes data = 2; // use "value" instead. string log = 3; // nondeterministic string info = 4; // nondeterministic int64 index = 5; bytes key = 6; bytes value = 7; tendermint.crypto.merkle.Proof proof = 8; int64 height = 9; string codespace = 10; } message ResponseBeginBlock { repeated Event events = 1 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; } message ResponseCheckTx { uint32 code = 1; bytes data = 2; string log = 3; // nondeterministic string info = 4; // nondeterministic int64 gas_wanted = 5; int64 gas_used = 6; repeated Event events = 7 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; string codespace = 8; } message ResponseDeliverTx { uint32 code = 1; bytes data = 2; string log = 3; // nondeterministic string info = 4; // nondeterministic int64 gas_wanted = 5; int64 gas_used = 6; repeated Event events = 7 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; string codespace = 8; } message ResponseEndBlock { repeated ValidatorUpdate validator_updates = 1 [(gogoproto.nullable) = false]; ConsensusParams consensus_param_updates = 2; repeated Event events = 3 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; } message ResponseCommit { // reserve 1 bytes data = 2; int64 retain_height = 3; } message ResponseListSnapshots { repeated Snapshot snapshots = 1; } message ResponseOfferSnapshot { Result result = 1; enum Result { ACCEPT = 0; // Snapshot accepted, apply chunks ABORT = 1; // Abort all snapshot restoration REJECT = 2; // Reject this specific snapshot, try others REJECT_FORMAT = 3; // Reject all snapshots of this format, try others REJECT_SENDER = 4; // Reject all snapshots from the sender(s), try others } } message ResponseLoadSnapshotChunk { bytes chunk = 1; } message ResponseApplySnapshotChunk { Result result = 1; repeated uint32 refetch_chunks = 2; // Chunks to refetch and reapply repeated string reject_senders = 3; // Chunk senders to reject and ban enum Result { ACCEPT = 0; // Chunk successfully accepted ABORT = 1; // Abort all snapshot restoration RETRY = 2; // Retry chunk (combine with refetch and reject) RETRY_SNAPSHOT = 3; // Retry snapshot (combine with refetch and reject) REJECT_SNAPSHOT = 4; // Reject this snapshot, try others } } //---------------------------------------- // Misc. // ConsensusParams contains all consensus-relevant parameters // that can be adjusted by the abci app message ConsensusParams { BlockParams block = 1; EvidenceParams evidence = 2; ValidatorParams validator = 3; } // BlockParams contains limits on the block size. message BlockParams { // Note: must be greater than 0 int64 max_bytes = 1; // Note: must be greater or equal to -1 int64 max_gas = 2; } message EvidenceParams { // Note: must be greater than 0 int64 max_age_num_blocks = 1; google.protobuf.Duration max_age_duration = 2 [(gogoproto.nullable) = false, (gogoproto.stdduration) = true]; uint32 max_num = 3; } // ValidatorParams contains limits on validators. message ValidatorParams { repeated string pub_key_types = 1; } message LastCommitInfo { int32 round = 1; repeated VoteInfo votes = 2 [(gogoproto.nullable) = false]; } // EventAttribute represents an event to the indexing service. message EventAttribute { bytes key = 1; bytes value = 2; bool index = 3; } message Event { string type = 1; repeated EventAttribute attributes = 2 [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "attributes,omitempty"]; } //---------------------------------------- // Blockchain Types message Header { // basic block info Version 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]; // 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 tx results from prev block // consensus info bytes evidence_hash = 13; // evidence included in the block bytes proposer_address = 14; // original proposer of the block } message Version { uint64 Block = 1; uint64 App = 2; } message BlockID { bytes hash = 1; PartSetHeader parts_header = 2 [(gogoproto.nullable) = false]; } message PartSetHeader { int32 total = 1; bytes hash = 2; } // Validator message Validator { bytes address = 1; // PubKey pub_key = 2 [(gogoproto.nullable)=false]; int64 power = 3; } // ValidatorUpdate message ValidatorUpdate { PubKey pub_key = 1 [(gogoproto.nullable) = false]; int64 power = 2; } // VoteInfo message VoteInfo { Validator validator = 1 [(gogoproto.nullable) = false]; bool signed_last_block = 2; } message PubKey { string type = 1; bytes data = 2; } message Evidence { string type = 1; Validator validator = 2 [(gogoproto.nullable) = false]; int64 height = 3; google.protobuf.Timestamp time = 4 [ (gogoproto.nullable) = false, (gogoproto.stdtime) = true]; int64 total_voting_power = 5; } //---------------------------------------- // State Sync Types message Snapshot { uint64 height = 1; // The height at which the snapshot was taken uint32 format = 2; // The application-specific snapshot format uint32 chunks = 3; // Number of chunks in the snapshot bytes hash = 4; // Arbitrary snapshot hash, equal only if identical bytes metadata = 5; // Arbitrary application metadata } //---------------------------------------- // Service Definition service ABCIApplication { rpc Echo(RequestEcho) returns (ResponseEcho); rpc Flush(RequestFlush) returns (ResponseFlush); rpc Info(RequestInfo) returns (ResponseInfo); rpc SetOption(RequestSetOption) returns (ResponseSetOption); rpc DeliverTx(RequestDeliverTx) returns (ResponseDeliverTx); rpc CheckTx(RequestCheckTx) returns (ResponseCheckTx); rpc Query(RequestQuery) returns (ResponseQuery); rpc Commit(RequestCommit) returns (ResponseCommit); rpc InitChain(RequestInitChain) returns (ResponseInitChain); rpc BeginBlock(RequestBeginBlock) returns (ResponseBeginBlock); rpc EndBlock(RequestEndBlock) returns (ResponseEndBlock); rpc ListSnapshots(RequestListSnapshots) returns (ResponseListSnapshots); rpc OfferSnapshot(RequestOfferSnapshot) returns (ResponseOfferSnapshot); rpc LoadSnapshotChunk(RequestLoadSnapshotChunk) returns (ResponseLoadSnapshotChunk); rpc ApplySnapshotChunk(RequestApplySnapshotChunk) returns (ResponseApplySnapshotChunk); }