-
Notifications
You must be signed in to change notification settings - Fork 347
/
query.rs
130 lines (118 loc) · 4.02 KB
/
query.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use std::fmt;
use cosmwasm_schema::cw_serde;
use cosmwasm_std::{CosmosMsg, Empty};
use cw_utils::{Expiration, ThresholdResponse};
use crate::msg::Vote;
#[cw_serde]
pub enum Cw3QueryMsg {
/// Returns the threshold rules that would be used for a new proposal that was
/// opened right now. The threshold rules do not change often, but the `total_weight`
/// in the response may easily differ from that used in previously opened proposals.
/// Returns ThresholdResponse.
Threshold {},
/// Returns details of the proposal state. Returns ProposalResponse.
Proposal { proposal_id: u64 },
/// Iterate over details of all proposals from oldest to newest. Returns ProposalListResponse
ListProposals {
start_after: Option<u64>,
limit: Option<u32>,
},
/// Iterate reverse over details of all proposals, this is useful to easily query
/// only the most recent proposals (to get updates). Returns ProposalListResponse
ReverseProposals {
start_before: Option<u64>,
limit: Option<u32>,
},
/// Query the vote made by the given voter on `proposal_id`. This should
/// return an error if there is no such proposal. It will return a None value
/// if the proposal exists but the voter did not vote. Returns VoteResponse
Vote { proposal_id: u64, voter: String },
/// Iterate (with pagination) over all votes for this proposal. The ordering is arbitrary,
/// unlikely to be sorted by address. But ordering is consistent and pagination from the end
/// of each page will cover all votes for the proposal. Returns VoteListResponse
ListVotes {
proposal_id: u64,
start_after: Option<String>,
limit: Option<u32>,
},
/// Voter extension: Returns VoterResponse
Voter { address: String },
/// ListVoters extension: Returns VoterListResponse
ListVoters {
start_after: Option<String>,
limit: Option<u32>,
},
}
/// Note, if you are storing custom messages in the proposal,
/// the querier needs to know what possible custom message types
/// those are in order to parse the response
#[cw_serde]
pub struct ProposalResponse<T = Empty>
where
T: Clone + fmt::Debug + PartialEq + JsonSchema,
{
pub id: u64,
pub title: String,
pub description: String,
pub msgs: Vec<CosmosMsg<T>>,
pub status: Status,
pub expires: Expiration,
/// This is the threshold that is applied to this proposal. Both the rules of the voting contract,
/// as well as the total_weight of the voting group may have changed since this time. That means
/// that the generic `Threshold{}` query does not provide valid information for existing proposals.
pub threshold: ThresholdResponse,
}
#[derive(Serialize, Deserialize, Clone, Copy, PartialEq, Eq, JsonSchema, Debug)]
#[serde(rename_all = "lowercase")]
#[repr(u8)]
pub enum Status {
/// proposal was created, but voting has not yet begun for whatever reason
Pending = 1,
/// you can vote on this
Open = 2,
/// voting is over and it did not pass
Rejected = 3,
/// voting is over and it did pass, but has not yet executed
Passed = 4,
/// voting is over it passed, and the proposal was executed
Executed = 5,
}
#[cw_serde]
pub struct ProposalListResponse<T = Empty>
where
T: Clone + fmt::Debug + PartialEq + JsonSchema,
{
pub proposals: Vec<ProposalResponse<T>>,
}
#[cw_serde]
pub struct VoteListResponse {
pub votes: Vec<VoteInfo>,
}
/// Returns the vote (opinion as well as weight counted) as well as
/// the address of the voter who submitted it
#[cw_serde]
pub struct VoteInfo {
pub proposal_id: u64,
pub voter: String,
pub vote: Vote,
pub weight: u64,
}
#[cw_serde]
pub struct VoteResponse {
pub vote: Option<VoteInfo>,
}
#[cw_serde]
pub struct VoterResponse {
pub weight: Option<u64>,
}
#[cw_serde]
pub struct VoterListResponse {
pub voters: Vec<VoterDetail>,
}
#[cw_serde]
pub struct VoterDetail {
pub addr: String,
pub weight: u64,
}