Packages

[Tendermint ABCI spec](https://github.com/tendermint/tendermint/wiki/Application-Developers) implementation. Inspired by [abci_server](https://github.com/KrzysiekJ/abci_server) and [js-abci](https://github.com/tendermint/js-abci).

Current section

Files

Jump to
ex_abci lib abci_protos vendor.proto
Raw

lib/abci_protos/vendor.proto

syntax = "proto3";
package forge_vendor;
import "google/protobuf/timestamp.proto";
// NOTE: this file is an merge with the following content from vendors folder
// ================================================================
// import "github.com/tendermint/tendermint/libs/common/proto";
// ================================================================
message KVPair {
bytes key = 1;
bytes value = 2;
}
// ================================================================
// import "github.com/tendermint/tendermint/crypto/merkle/merkle.proto";
// ================================================================
// ProofOp defines an operation used for calculating Merkle root
// The data could be arbitrary format, providing nessecary data
// for example neighbouring node hash
message ProofOp {
string type = 1;
bytes key = 2;
bytes data = 3;
}
// Proof is Merkle proof defined by the list of ProofOps
message Proof { repeated ProofOp ops = 1; }
// ================================================================
// import "github.com/tendermint/tendermint/rpc/grpc/proto";
// NOTE: gogoproto related attributes on each field is removed, since we are
// using elixir
// ================================================================
message RequestPing {}
message RequestBroadcastTx { bytes tx = 1; }
//----------------------------------------
// Response types
message ResponsePing {}
message ResponseBroadcastTx {
ResponseCheckTx check_tx = 1;
ResponseDeliverTx deliver_tx = 2;
}
// ================================================================
// import "github.com/tendermint/tendermint/abci/types/proto";
// NOTE: gogoproto related attributes on each field is removed, since we are
// using elixir
// ================================================================
//----------------------------------------
// 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;
}
}
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;
string chain_id = 2;
ConsensusParams consensus_params = 3;
repeated ValidatorUpdate validators = 4;
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;
LastCommitInfo last_commit_info = 3;
repeated Evidence byzantine_validators = 4;
}
message RequestCheckTx { bytes tx = 1; }
message RequestDeliverTx { bytes tx = 1; }
message RequestEndBlock { int64 height = 1; }
message RequestCommit {}
//----------------------------------------
// 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;
}
}
// 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;
}
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;
Proof proof = 8;
int64 height = 9;
string codespace = 10;
}
message ResponseBeginBlock {
repeated KVPair tags = 1;
}
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 KVPair tags = 7;
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 KVPair tags = 7;
string codespace = 8;
}
message ResponseEndBlock {
repeated ValidatorUpdate validator_updates = 1;
ConsensusParams consensus_param_updates = 2;
repeated KVPair tags = 3;
}
message ResponseCommit {
// reserve 1
bytes data = 2;
}
//----------------------------------------
// Misc.
// ConsensusParams contains all consensus-relevant parameters
// that can be adjusted by the abci app
message ConsensusParams {
BlockSizeParams block_size = 1;
EvidenceParams evidence = 2;
ValidatorParams validator = 3;
}
// BlockSize contains limits on the block size.
message BlockSizeParams {
// Note: must be greater than 0
int64 max_bytes = 1;
// Note: must be greater or equal to -1
int64 max_gas = 2;
}
// EvidenceParams contains limits on the evidence.
message EvidenceParams {
// Note: must be greater than 0
int64 max_age = 1;
}
// ValidatorParams contains limits on validators.
message ValidatorParams { repeated string pub_key_types = 1; }
message LastCommitInfo {
int32 round = 1;
repeated VoteInfo votes = 2;
}
//----------------------------------------
// Blockchain Types
message Header {
// basic block info
Version version = 1;
string chain_id = 2;
int64 height = 3;
google.protobuf.Timestamp time = 4;
int64 num_txs = 5;
int64 total_txs = 6;
// prev block info
BlockID last_block_id = 7;
// hashes of block data
bytes last_commit_hash = 8; // commit from validators from the last block
bytes data_hash = 9; // transactions
// hashes from the app output from the prev block
bytes validators_hash = 10; // validators for the current block
bytes next_validators_hash = 11; // validators for the next block
bytes consensus_hash = 12; // consensus params for current block
bytes app_hash = 13; // state after txs from the previous block
bytes last_results_hash =
14; // root hash of all results from the txs from the previous block
// consensus info
bytes evidence_hash = 15; // evidence included in the block
bytes proposer_address = 16; // original proposer of the block
}
message Version {
uint64 Block = 1;
uint64 App = 2;
}
message BlockID {
bytes hash = 1;
PartSetHeader parts_header = 2;
}
message PartSetHeader {
int32 total = 1;
bytes hash = 2;
}
// Validator
message Validator {
bytes address = 1;
// PubKey pub_key = 2;
int64 power = 3;
}
// ValidatorUpdate
message ValidatorUpdate {
PubKey pub_key = 1;
int64 power = 2;
}
// VoteInfo
message VoteInfo {
Validator validator = 1;
bool signed_last_block = 2;
}
message PubKey {
string type = 1;
bytes data = 2;
}
message Evidence {
string type = 1;
Validator validator = 2;
int64 height = 3;
google.protobuf.Timestamp time = 4;
int64 total_voting_power = 5;
}
//----------------------------------------
// 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);
}