1use crate::state::{RegistrationStatus, SlashingParameters};
2use cosmwasm_schema::{cw_serde, QueryResponses};
3
4#[cw_serde]
5pub struct InstantiateMsg {
6 pub owner: String,
7 pub pauser: String,
8}
9
10#[cw_serde]
11#[derive(bvs_pauser::api::Display)]
12pub enum ExecuteMsg {
13 RegisterAsService {
14 metadata: Metadata,
15 },
16 UpdateServiceMetadata(Metadata),
17 RegisterAsOperator {
18 metadata: Metadata,
19 },
20 UpdateOperatorMetadata(Metadata),
21 RegisterOperatorToService {
22 operator: String,
23 },
24 DeregisterOperatorFromService {
25 operator: String,
26 },
27 RegisterServiceToOperator {
28 service: String,
29 },
30 DeregisterServiceFromOperator {
31 service: String,
32 },
33 EnableSlashing {
34 slashing_parameters: SlashingParameters,
35 },
36 DisableSlashing {},
37 OperatorOptInToSlashing {
38 service: String,
39 },
40 TransferOwnership {
41 new_owner: String,
43 },
44}
45
46#[cw_serde]
48pub struct Metadata {
49 pub name: Option<String>,
50 pub uri: Option<String>,
51}
52
53#[cw_serde]
54#[derive(QueryResponses)]
55pub enum QueryMsg {
56 #[returns(StatusResponse)]
76 Status {
77 service: String,
78 operator: String,
79 timestamp: Option<u64>,
80 },
81
82 #[returns(IsServiceResponse)]
83 IsService(String),
84
85 #[returns(IsOperatorResponse)]
86 IsOperator(String),
87
88 #[returns(IsOperatorActiveResponse)]
89 IsOperatorActive(String),
90
91 #[returns(SlashingParametersResponse)]
92 SlashingParameters {
93 service: String,
94 timestamp: Option<u64>,
95 },
96
97 #[returns(IsOperatorOptedInToSlashingResponse)]
98 IsOperatorOptedInToSlashing {
99 service: String,
100 operator: String,
101 timestamp: Option<u64>,
102 },
103}
104
105#[cw_serde]
106pub struct StatusResponse(pub u8);
107
108impl From<RegistrationStatus> for StatusResponse {
109 fn from(value: RegistrationStatus) -> Self {
110 StatusResponse(value as u8)
111 }
112}
113
114#[cw_serde]
115pub struct IsServiceResponse(pub bool);
116
117#[cw_serde]
118pub struct IsOperatorResponse(pub bool);
119
120#[cw_serde]
121pub struct IsOperatorActiveResponse(pub bool);
122
123#[cw_serde]
124pub struct SlashingParametersResponse(pub Option<SlashingParameters>);
125
126#[cw_serde]
127pub struct IsOperatorOptedInToSlashingResponse(pub bool);
128
129#[cw_serde]
130pub struct MigrateMsg {}
131
132#[cfg(test)]
133mod tests {
134 use crate::msg::{ExecuteMsg, Metadata};
135
136 #[test]
137 fn test_method_name() {
138 let msg = ExecuteMsg::RegisterOperatorToService {
139 operator: "operator".to_string(),
140 };
141 assert_eq!(msg.to_string(), "RegisterOperatorToService");
142
143 let msg = ExecuteMsg::UpdateServiceMetadata(Metadata {
144 name: Some("name".to_string()),
145 uri: Some("uri".to_string()),
146 });
147 assert_eq!(msg.to_string(), "UpdateServiceMetadata");
148 }
149}