syntax = "proto3";

package consensus.v1;
// Proposal represents a consensus proposal that needs voting
message Proposal {
    string name = 10;                   // Proposal name
    bytes payload = 11;                // Payload with the proposal data
    uint32 proposal_id = 12;            // Unique identifier of the proposal
    bytes proposal_owner = 13;          // Public key of the creator 
    repeated Vote votes = 14;           // Vote list in the proposal
    uint32 expected_voters_count = 15;  // Maximum number of distinct voters
    uint32 round = 16;                  // Number of Votes 
    uint64 timestamp = 17;              // Creation time of proposal
    uint64 expiration_timestamp = 18;   // The timestamp at which the proposal becomes outdated 
    bool liveness_criteria_yes = 19;    // Shows how managing the silent peers vote
  }
  
  // Vote represents a single vote in a consensus proposal
  message Vote {
    uint32 vote_id = 20;            // Unique identifier of the vote
    bytes vote_owner = 21;          // Voter's public key
    uint32 proposal_id = 22;        // Proposal ID (for the vote)
    uint64 timestamp = 23;          // Time when the vote was cast
    bool vote = 24;                 // Vote bool value (true/false)
    bytes parent_hash = 25;         // Hash of previous owner's Vote
    bytes received_hash = 26;       // Hash of previous received Vote
    bytes vote_hash = 27;           // Hash of all previously defined fields in Vote
    bytes signature = 28;           // Signature of vote_hash
  }
  