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