Skip to content

Commit 3610110

Browse files
authored
Merge pull request #839 from CosmWasm/querier-wrapper-in-helpers
Use QuerierWrapper not Querier in cw20 helpers
2 parents 1bf0b3c + 99afad0 commit 3610110

File tree

3 files changed

+48
-58
lines changed

3 files changed

+48
-58
lines changed

contracts/cw3-flex-multisig/src/contract.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -770,7 +770,7 @@ mod tests {
770770
.unwrap();
771771

772772
// Verify contract version set properly
773-
let version = query_contract_info(&app, flex_addr.clone()).unwrap();
773+
let version = query_contract_info(&app.wrap(), flex_addr.clone()).unwrap();
774774
assert_eq!(
775775
ContractVersion {
776776
contract: CONTRACT_NAME.to_string(),

packages/cw2/src/lib.rs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ For more information on this specification, please check out the
1818
*/
1919

2020
use cosmwasm_schema::cw_serde;
21-
use cosmwasm_std::{Empty, Querier, QuerierWrapper, QueryRequest, StdResult, Storage, WasmQuery};
21+
use cosmwasm_std::{CustomQuery, QuerierWrapper, QueryRequest, StdResult, Storage, WasmQuery};
2222
use cw_storage_plus::Item;
2323

2424
pub const CONTRACT: Item<ContractVersion> = Item::new("contract_info");
@@ -59,15 +59,19 @@ pub fn set_contract_version<T: Into<String>, U: Into<String>>(
5959
/// if the other contract exists and claims to be a cw20-base contract for example.
6060
/// (Note: you usually want to require *interfaces* not *implementations* of the
6161
/// contracts you compose with, so be careful of overuse)
62-
pub fn query_contract_info<Q: Querier, T: Into<String>>(
63-
querier: &Q,
62+
pub fn query_contract_info<T, CQ>(
63+
querier: &QuerierWrapper<CQ>,
6464
contract_addr: T,
65-
) -> StdResult<ContractVersion> {
65+
) -> StdResult<ContractVersion>
66+
where
67+
T: Into<String>,
68+
CQ: CustomQuery,
69+
{
6670
let req = QueryRequest::Wasm(WasmQuery::Raw {
6771
contract_addr: contract_addr.into(),
6872
key: CONTRACT.as_slice().into(),
6973
});
70-
QuerierWrapper::<Empty>::new(querier).query(&req)
74+
querier.query(&req)
7175
}
7276

7377
#[cfg(test)]

packages/cw20/src/helpers.rs

Lines changed: 38 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use cosmwasm_schema::cw_serde;
22
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,
55
};
66

77
use crate::{
@@ -31,89 +31,75 @@ impl Cw20Contract {
3131
.into())
3232
}
3333

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+
3445
/// 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>
3647
where
37-
Q: Querier,
3848
T: Into<String>,
3949
CQ: CustomQuery,
4050
{
41-
let msg = Cw20QueryMsg::Balance {
51+
let query = self.encode_smart_query(Cw20QueryMsg::Balance {
4252
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)?;
5055
Ok(res.balance)
5156
}
5257

5358
/// Get metadata from the contract. This is a good check that the address
5459
/// 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)
6766
}
6867

6968
/// Get allowance of spender to use owner's account
70-
pub fn allowance<Q, T, U, CQ>(
69+
pub fn allowance<T, U, CQ>(
7170
&self,
72-
querier: &Q,
71+
querier: &QuerierWrapper<CQ>,
7372
owner: T,
7473
spender: U,
7574
) -> StdResult<AllowanceResponse>
7675
where
77-
Q: Querier,
7876
T: Into<String>,
7977
U: Into<String>,
8078
CQ: CustomQuery,
8179
{
82-
let msg = Cw20QueryMsg::Allowance {
80+
let query = self.encode_smart_query(Cw20QueryMsg::Allowance {
8381
owner: owner.into(),
8482
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)
9285
}
9386

9487
/// 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)
10794
}
10895

10996
/// 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()
11399
}
114100

115101
/// 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()
118104
}
119105
}

0 commit comments

Comments
 (0)