syntax = "proto3"; package consensusProto; option go_package = "consensus/consensusproto"; enum ErrCodes { Unexpected = 0; LogExists = 1; LogNotFound = 2; RecordConflict = 3; ErrorOffset = 500; } message Log { bytes id = 1; bytes payload = 2; repeated RawRecordWithId records = 3; } // RawRecord is a proto message containing the payload in bytes, signature of the account who added it and signature of the acceptor message RawRecord { bytes payload = 1; bytes signature = 2; bytes acceptorIdentity = 3; bytes acceptorSignature = 4; } // RawRecordWithId is a raw record and the id for convenience message RawRecordWithId { bytes payload = 1; string id = 2; } // Record is a record containing a data message Record { string prevId = 1; bytes identity = 2; bytes data = 3; int64 timestamp = 4; } service Consensus { // AddLog adds new log to consensus rpc LogAdd(LogAddRequest) returns (Ok); // AddRecord adds new record to log rpc RecordAdd(RecordAddRequest) returns (RawRecordWithId); // WatchLog fetches log and subscribes for a changes rpc LogWatch(stream LogWatchRequest) returns (stream LogWatchEvent); } message Ok {} message LogAddRequest { Log log = 1; } message RecordAddRequest { bytes logId = 1; RawRecord record = 2; } message LogWatchRequest { repeated bytes watchIds = 1; repeated bytes unwatchIds = 2; } message LogWatchEvent { bytes logId = 1; repeated RawRecordWithId records = 2; Err error = 3; } message Err { ErrCodes error = 1; }