hpl_interface/ism/
multisig.rs

1use cosmwasm_schema::{cw_serde, QueryResponses};
2use cosmwasm_std::HexBinary;
3
4use crate::ownable::{OwnableMsg, OwnableQueryMsg};
5
6use super::IsmQueryMsg;
7#[allow(unused_imports)]
8use super::{ModuleTypeResponse, VerifyInfoResponse, VerifyResponse};
9
10#[cw_serde]
11pub struct InstantiateMsg {
12    pub owner: String,
13}
14
15#[cw_serde]
16pub struct ValidatorSet {
17    pub domain: u32,
18    pub validator: HexBinary,
19}
20
21#[cw_serde]
22pub enum ExecuteMsg {
23    Ownable(OwnableMsg),
24
25    SetValidators {
26        domain: u32,
27        threshold: u8,
28        validators: Vec<HexBinary>, // should be 20 lenghted
29    },
30    UnsetDomain {
31        domain: u32,
32    },
33}
34
35#[cw_serde]
36#[derive(QueryResponses)]
37#[query_responses(nested)]
38pub enum QueryMsg {
39    Ownable(OwnableQueryMsg),
40    Ism(IsmQueryMsg),
41    MultisigIsm(MultisigIsmQueryMsg),
42}
43
44#[cw_serde]
45#[derive(QueryResponses)]
46pub enum MultisigIsmQueryMsg {
47    #[returns(EnrolledValidatorsResponse)]
48    EnrolledValidators { domain: u32 },
49}
50
51#[cw_serde]
52pub struct EnrolledValidatorsResponse {
53    pub validators: Vec<HexBinary>,
54    pub threshold: u8,
55}
56
57#[cfg(test)]
58mod test {
59    use super::*;
60    use crate::msg_checker;
61
62    #[test]
63    fn test_ism_interface() {
64        let _checked: QueryMsg = msg_checker(IsmQueryMsg::ModuleType {}.wrap());
65        let _checked: QueryMsg = msg_checker(
66            IsmQueryMsg::Verify {
67                metadata: HexBinary::default(),
68                message: HexBinary::default(),
69            }
70            .wrap(),
71        );
72        let _checked: QueryMsg = msg_checker(
73            IsmQueryMsg::VerifyInfo {
74                message: HexBinary::default(),
75            }
76            .wrap(),
77        );
78    }
79}