bvs_registry/
msg.rs

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        /// See [`bvs_library::ownership::transfer_ownership`] for more information on this field
42        new_owner: String,
43    },
44}
45
46/// metadata is emitted as events and not stored on-chain.
47#[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    /// QueryMsg Status: Returns the registration status of an operator to a service
57    /// The response is a StatusResponse
58    /// that contains a u8 value that maps to a RegistrationStatus:
59    ///
60    /// - 0: Inactive:
61    /// Default state when neither the Operator nor the Service has registered,
62    /// or when either has unregistered
63    ///
64    /// - 1: Active:
65    /// State when both the Operator and Service have registered with each other,
66    /// indicating a fully established relationship
67    ///
68    /// - 2: OperatorRegistered:
69    /// State when only the Operator has registered but the Service hasn't yet,
70    /// indicating a pending registration from the Service side
71    ///
72    /// - 3: ServiceRegistered:
73    /// State when only the Service has registered but the Operator hasn't yet,
74    /// indicating a pending registration from the Operator side
75    #[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}