|
1 | 1 | use cosmwasm_schema::cw_serde;
|
2 | 2 | use cosmwasm_std::{
|
3 |
| - to_binary, Addr, CosmosMsg, CustomQuery, Querier, QuerierWrapper, StdResult, Uint128, WasmMsg, |
4 |
| - WasmQuery, |
| 3 | + to_binary, Addr, CosmosMsg, CustomQuery, QuerierWrapper, QueryRequest, StdResult, Uint128, |
| 4 | + WasmMsg, WasmQuery, |
5 | 5 | };
|
6 | 6 |
|
7 | 7 | use crate::{
|
@@ -31,89 +31,75 @@ impl Cw20Contract {
|
31 | 31 | .into())
|
32 | 32 | }
|
33 | 33 |
|
| 34 | + fn encode_smart_query<CQ: CustomQuery>( |
| 35 | + &self, |
| 36 | + msg: Cw20QueryMsg, |
| 37 | + ) -> StdResult<QueryRequest<CQ>> { |
| 38 | + Ok(WasmQuery::Smart { |
| 39 | + contract_addr: self.addr().into(), |
| 40 | + msg: to_binary(&msg)?, |
| 41 | + } |
| 42 | + .into()) |
| 43 | + } |
| 44 | + |
34 | 45 | /// Get token balance for the given address
|
35 |
| - pub fn balance<Q, T, CQ>(&self, querier: &Q, address: T) -> StdResult<Uint128> |
| 46 | + pub fn balance<T, CQ>(&self, querier: &QuerierWrapper<CQ>, address: T) -> StdResult<Uint128> |
36 | 47 | where
|
37 |
| - Q: Querier, |
38 | 48 | T: Into<String>,
|
39 | 49 | CQ: CustomQuery,
|
40 | 50 | {
|
41 |
| - let msg = Cw20QueryMsg::Balance { |
| 51 | + let query = self.encode_smart_query(Cw20QueryMsg::Balance { |
42 | 52 | address: address.into(),
|
43 |
| - }; |
44 |
| - let query = WasmQuery::Smart { |
45 |
| - contract_addr: self.addr().into(), |
46 |
| - msg: to_binary(&msg)?, |
47 |
| - } |
48 |
| - .into(); |
49 |
| - let res: BalanceResponse = QuerierWrapper::<CQ>::new(querier).query(&query)?; |
| 53 | + })?; |
| 54 | + let res: BalanceResponse = querier.query(&query)?; |
50 | 55 | Ok(res.balance)
|
51 | 56 | }
|
52 | 57 |
|
53 | 58 | /// Get metadata from the contract. This is a good check that the address
|
54 | 59 | /// is a valid Cw20 contract.
|
55 |
| - pub fn meta<Q, CQ>(&self, querier: &Q) -> StdResult<TokenInfoResponse> |
56 |
| - where |
57 |
| - Q: Querier, |
58 |
| - CQ: CustomQuery, |
59 |
| - { |
60 |
| - let msg = Cw20QueryMsg::TokenInfo {}; |
61 |
| - let query = WasmQuery::Smart { |
62 |
| - contract_addr: self.addr().into(), |
63 |
| - msg: to_binary(&msg)?, |
64 |
| - } |
65 |
| - .into(); |
66 |
| - QuerierWrapper::<CQ>::new(querier).query(&query) |
| 60 | + pub fn meta<CQ: CustomQuery>( |
| 61 | + &self, |
| 62 | + querier: &QuerierWrapper<CQ>, |
| 63 | + ) -> StdResult<TokenInfoResponse> { |
| 64 | + let query = self.encode_smart_query(Cw20QueryMsg::TokenInfo {})?; |
| 65 | + querier.query(&query) |
67 | 66 | }
|
68 | 67 |
|
69 | 68 | /// Get allowance of spender to use owner's account
|
70 |
| - pub fn allowance<Q, T, U, CQ>( |
| 69 | + pub fn allowance<T, U, CQ>( |
71 | 70 | &self,
|
72 |
| - querier: &Q, |
| 71 | + querier: &QuerierWrapper<CQ>, |
73 | 72 | owner: T,
|
74 | 73 | spender: U,
|
75 | 74 | ) -> StdResult<AllowanceResponse>
|
76 | 75 | where
|
77 |
| - Q: Querier, |
78 | 76 | T: Into<String>,
|
79 | 77 | U: Into<String>,
|
80 | 78 | CQ: CustomQuery,
|
81 | 79 | {
|
82 |
| - let msg = Cw20QueryMsg::Allowance { |
| 80 | + let query = self.encode_smart_query(Cw20QueryMsg::Allowance { |
83 | 81 | owner: owner.into(),
|
84 | 82 | spender: spender.into(),
|
85 |
| - }; |
86 |
| - let query = WasmQuery::Smart { |
87 |
| - contract_addr: self.addr().into(), |
88 |
| - msg: to_binary(&msg)?, |
89 |
| - } |
90 |
| - .into(); |
91 |
| - QuerierWrapper::<CQ>::new(querier).query(&query) |
| 83 | + })?; |
| 84 | + querier.query(&query) |
92 | 85 | }
|
93 | 86 |
|
94 | 87 | /// Find info on who can mint, and how much
|
95 |
| - pub fn minter<Q, CQ>(&self, querier: &Q) -> StdResult<Option<MinterResponse>> |
96 |
| - where |
97 |
| - Q: Querier, |
98 |
| - CQ: CustomQuery, |
99 |
| - { |
100 |
| - let msg = Cw20QueryMsg::Minter {}; |
101 |
| - let query = WasmQuery::Smart { |
102 |
| - contract_addr: self.addr().into(), |
103 |
| - msg: to_binary(&msg)?, |
104 |
| - } |
105 |
| - .into(); |
106 |
| - QuerierWrapper::<CQ>::new(querier).query(&query) |
| 88 | + pub fn minter<CQ: CustomQuery>( |
| 89 | + &self, |
| 90 | + querier: &QuerierWrapper<CQ>, |
| 91 | + ) -> StdResult<Option<MinterResponse>> { |
| 92 | + let query = self.encode_smart_query(Cw20QueryMsg::Minter {})?; |
| 93 | + querier.query(&query) |
107 | 94 | }
|
108 | 95 |
|
109 | 96 | /// returns true if the contract supports the allowance extension
|
110 |
| - pub fn has_allowance<Q: Querier, CQ: CustomQuery>(&self, querier: &Q) -> bool { |
111 |
| - self.allowance::<_, _, _, CQ>(querier, self.addr(), self.addr()) |
112 |
| - .is_ok() |
| 97 | + pub fn has_allowance<CQ: CustomQuery>(&self, querier: &QuerierWrapper<CQ>) -> bool { |
| 98 | + self.allowance(querier, self.addr(), self.addr()).is_ok() |
113 | 99 | }
|
114 | 100 |
|
115 | 101 | /// returns true if the contract supports the mintable extension
|
116 |
| - pub fn is_mintable<Q: Querier, CQ: CustomQuery>(&self, querier: &Q) -> bool { |
117 |
| - self.minter::<_, CQ>(querier).is_ok() |
| 102 | + pub fn is_mintable<CQ: CustomQuery>(&self, querier: &QuerierWrapper<CQ>) -> bool { |
| 103 | + self.minter(querier).is_ok() |
118 | 104 | }
|
119 | 105 | }
|
0 commit comments