syntax = "proto3"; package message; // Client is the service used for any client-facing requests. service ClientService { rpc Process(Message) returns (Response) {} } // ServiceType indicates which service used to generate this message. enum ServiceType { CONSENSUS = 0; STAKING = 1; DRAND = 2; CLIENT_SUPPORT = 3; } // 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; VIEWCHANGE = 6; NEWVIEW = 7; DRAND_INIT = 10; DRAND_COMMIT = 11; LOTTERY_REQUEST = 12; // it should be either ENTER or GETPLAYERS but it will be removed later. } // 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 { ServiceType service_type = 1; MessageType type = 2; bytes signature = 3; oneof request { StakingRequest staking = 4; ConsensusRequest consensus = 5; DrandRequest drand = 6; ViewChangeRequest viewchange = 7; // Refactor this later after demo. LotteryRequest lottery_request = 8; } } message Response { ServiceType service_type = 1; MessageType type = 2; oneof response { LotteryResponse lottery_response = 3; } } message LotteryResponse { repeated string players = 2; repeated string balances = 3; } message LotteryRequest { enum Type { ENTER = 0; RESULT = 1; PICK_WINNER = 2; } Type type = 1; string private_key = 2; int64 amount = 3; } // Staking Request from new node to beacon node. message StakingRequest { bytes transaction = 1; string node_id = 2; } message ConsensusRequest { uint32 view_id = 1; uint64 block_num = 2; bytes block_hash = 3; bytes sender_pubkey = 4; bytes payload = 5; } message DrandRequest { bytes sender_pubkey = 1; bytes block_hash = 2; bytes payload = 3; } message ViewChangeRequest { uint32 view_id = 1; uint64 block_num = 2; bytes sender_pubkey = 3; bytes leader_pubkey = 4; bytes payload = 5; // message payload: either m1 type or m2 type bytes viewchange_sig = 6; // signature on payload // below is for newview message only bytes m1_aggsigs = 7; // m1: |block_hash|bhp_sigs|bhp_bitmap| bytes m1_bitmap = 8; bytes m2_aggsigs = 9; // m2: |nil| bytes m2_bitmap = 10; }