syntax = "proto3"; package arbiter.operator.governance; message Request { oneof payload { CreateProposalRequest create = 1; CastVoteRequest vote = 2; QueryPendingRequest query = 3; } } message CreateProposalRequest { oneof kind { ApproveSdkClientPayload approve_sdk_client = 1; GrantWalletAccessPayload grant_wallet_access = 3; ApproveServerUpdatePayload approve_server_update = 4; ReplaceOperatorPayload replace_operator = 5; } optional uint32 ttl_secs = 2; } message ReplaceOperatorPayload { bytes new_pubkey = 1; } message ApproveServerUpdatePayload {} message ApproveSdkClientPayload { int32 client_id = 1; } message GrantWalletAccessPayload { int32 wallet_id = 1; int32 client_id = 2; } message CastVoteRequest { int32 proposal_id = 1; bool approve = 2; bytes signature = 3; } message QueryPendingRequest {} message Response { oneof payload { CreateProposalResponse created = 1; VoteResponse voted = 2; QueryPendingResponse pending = 3; } } message CreateProposalResponse { int32 proposal_id = 1; } message VoteResponse { VoteOutcome outcome = 1; } enum VoteOutcome { VOTE_OUTCOME_UNSPECIFIED = 0; VOTE_OUTCOME_PENDING = 1; VOTE_OUTCOME_APPROVED = 2; VOTE_OUTCOME_REJECTED = 3; } message ProposalSummary { int32 id = 1; string kind = 2; int32 initiator_id = 3; int64 expires_at = 4; int64 approve_count = 5; int64 reject_count = 6; } message QueryPendingResponse { repeated ProposalSummary proposals = 1; }