|
|
|
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;
|
|
|
|
}
|