syntax = "proto3"; package message; // ReceiverType indicates who is the receiver of this message. enum ReceiverType { NEWNODE = 0; LEADER = 1; VALIDATOR = 2; CLIENT = 3; } // ServiceType indicates which service used to generate this message. enum ServiceType { CONSENSUS = 0; STAKING = 1; DRAND = 2; } // MessageType indicates what is the type of this message. enum MessageType { NEWNODE_BEACON_STAKING = 0; ANNOUNCE = 1; PREPARE = 2; PREPARED = 3; COMMIT = 4; COMMITTED = 5; DRAND_INIT = 6; DRAND_COMMIT = 7; } // This is universal message for all communication protocols. // There are different Requests for different message types. // As we introduce a new type of message just add a new MessageType and new type of request in Message. // // The request field will be either one of the structure corresponding to the MessageType type. message Message { ReceiverType receiver_type = 1; ServiceType service_type = 2; MessageType type = 3; bytes signature = 4; oneof request { StakingRequest staking = 5; ConsensusRequest consensus = 6; DrandRequest drand = 7; } } // Staking Request from new node to beacon node. message StakingRequest { bytes transaction = 1; string node_id = 2; } message ConsensusRequest { uint32 consensus_id = 1; bytes block_hash = 2; uint32 sender_id = 3; bytes payload = 4; } message DrandRequest { uint32 sender_id = 1; // TODO: make it public key bytes block_hash = 2; bytes payload = 3; }