1use cosmwasm_schema::{cw_serde, QueryResponses};
2use cosmwasm_std::{Coin, CosmosMsg, Empty, Timestamp};
3
4#[cw_serde]
5pub struct Member {
6 pub address: String,
7 pub mint_count: u32,
8}
9
10#[cw_serde]
11pub struct InstantiateMsg {
12 pub merkle_root: String,
13 pub merkle_tree_uri: Option<String>,
14
15 pub start_time: Timestamp,
16 pub end_time: Timestamp,
17 pub mint_price: Coin,
18 pub per_address_limit: u32,
19
20 pub admins: Vec<String>,
21 pub admins_mutable: bool,
22}
23
24#[cw_serde]
25pub enum ExecuteMsg {
26 UpdateStartTime(Timestamp),
27 UpdateEndTime(Timestamp),
28 UpdateAdmins { admins: Vec<String> },
29 Freeze {},
30}
31
32#[cw_serde]
33pub struct AdminListResponse {
34 pub admins: Vec<String>,
35 pub mutable: bool,
36}
37
38#[cw_serde]
39pub struct AddMembersMsg {
40 pub to_add: Vec<Member>,
41}
42
43#[cw_serde]
44pub struct RemoveMembersMsg {
45 pub to_remove: Vec<String>,
46}
47
48#[cw_serde]
49#[derive(QueryResponses)]
50pub enum QueryMsg {
51 #[returns(HasStartedResponse)]
52 HasStarted {},
53 #[returns(HasEndedResponse)]
54 HasEnded {},
55 #[returns(IsActiveResponse)]
56 IsActive {},
57 #[returns(HasMemberResponse)]
58 HasMember {
59 member: String,
60 proof_hashes: Vec<String>,
61 },
62 #[returns(ConfigResponse)]
63 Config {},
64 #[returns(AdminListResponse)]
65 AdminList {},
66 #[returns(CanExecuteResponse)]
67 CanExecute {
68 sender: String,
69 msg: CosmosMsg<Empty>,
70 },
71 #[returns(MerkleRootResponse)]
72 MerkleRoot {},
73 #[returns(MerkleTreeURIResponse)]
74 MerkleTreeURI {},
75}
76
77#[cw_serde]
78pub struct HasMemberResponse {
79 pub has_member: bool,
80}
81
82#[cw_serde]
83pub struct HasEndedResponse {
84 pub has_ended: bool,
85}
86
87#[cw_serde]
88pub struct HasStartedResponse {
89 pub has_started: bool,
90}
91
92#[cw_serde]
93pub struct IsActiveResponse {
94 pub is_active: bool,
95}
96
97#[cw_serde]
98pub struct MintPriceResponse {
99 pub mint_price: Coin,
100}
101
102#[cw_serde]
103pub struct ConfigResponse {
104 pub num_members: u32,
105 pub per_address_limit: u32,
106 pub member_limit: u32,
107 pub start_time: Timestamp,
108 pub end_time: Timestamp,
109 pub mint_price: Coin,
110 pub is_active: bool,
111}
112
113#[cw_serde]
114pub struct MerkleRootResponse {
115 pub merkle_root: String,
116}
117
118#[cw_serde]
119pub struct MerkleTreeURIResponse {
120 pub merkle_tree_uri: Option<String>,
121}
122
123#[cw_serde]
124pub enum SudoMsg {
125 AddOperator { operator: String },
127 RemoveOperator { operator: String },
129}
130
131#[cw_serde]
132pub struct CanExecuteResponse {
133 pub can_execute: bool,
134}