diff --git a/protobufs/operator.proto b/protobufs/operator.proto index f780ae3..46509d2 100644 --- a/protobufs/operator.proto +++ b/protobufs/operator.proto @@ -4,25 +4,28 @@ package arbiter.operator; import "operator/auth.proto"; import "operator/evm.proto"; +import "operator/governance.proto"; import "operator/sdk_client.proto"; import "operator/vault/vault.proto"; message OperatorRequest { int32 id = 16; oneof payload { - auth.Request auth = 1; - vault.Request vault = 2; - evm.Request evm = 3; - sdk_client.Request sdk_client = 4; + auth.Request auth = 1; + vault.Request vault = 2; + evm.Request evm = 3; + sdk_client.Request sdk_client = 4; + governance.Request governance = 5; } } message OperatorResponse { optional int32 id = 16; oneof payload { - auth.Response auth = 1; - vault.Response vault = 2; - evm.Response evm = 3; - sdk_client.Response sdk_client = 4; + auth.Response auth = 1; + vault.Response vault = 2; + evm.Response evm = 3; + sdk_client.Response sdk_client = 4; + governance.Response governance = 5; } } diff --git a/protobufs/operator/governance.proto b/protobufs/operator/governance.proto new file mode 100644 index 0000000..8e48eac --- /dev/null +++ b/protobufs/operator/governance.proto @@ -0,0 +1,66 @@ +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; + } + optional uint32 ttl_secs = 2; +} + +message ApproveSdkClientPayload { + int32 client_id = 1; +} + +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; +} diff --git a/server/crates/arbiter-proto/src/lib.rs b/server/crates/arbiter-proto/src/lib.rs index 0b91e11..802285e 100644 --- a/server/crates/arbiter-proto/src/lib.rs +++ b/server/crates/arbiter-proto/src/lib.rs @@ -23,6 +23,10 @@ pub mod proto { tonic::include_proto!("arbiter.operator.evm"); } + pub mod governance { + tonic::include_proto!("arbiter.operator.governance"); + } + pub mod sdk_client { tonic::include_proto!("arbiter.operator.sdk_client"); }