diff --git a/src/contract.rs b/src/contract.rs index 4840fda..6826794 100644 --- a/src/contract.rs +++ b/src/contract.rs @@ -1,5 +1,5 @@ use crate::error::ContractError; -use crate::msg::{ExecuteMsg, GetCountResponse, InstantiateMsg, QueryMsg}; +use crate::msg::{ExecuteMsg, InstantiateMsg, QueryMsg}; use crate::state::{State, STATE}; use std::collections::{BTreeMap, BTreeSet}; @@ -107,6 +107,7 @@ pub mod execute { let sender = env.contract.address.to_string(); let denom = format!("factory/{}/{}", sender, name); let token = Token { + name: name.clone(), denom: denom.clone(), settlement_chain, }; @@ -118,7 +119,7 @@ pub mod execute { let msg = MsgCreateDenom { sender, - subdenom: name.clone(), + subdenom: name, }; let cosmos_msg = CosmosMsg::Stargate { type_url: "/osmosis.tokenfactory.v1beta1.MsgCreateDenom".into(), @@ -274,14 +275,35 @@ pub mod execute { #[cfg_attr(not(feature = "library"), entry_point)] pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { match msg { - QueryMsg::GetCount {} => to_json_binary(&query::count(deps)?), + QueryMsg::GetTokenList => to_json_binary(&query::get_token_list(deps)?), + QueryMsg::GetFeeInfo => to_json_binary(&query::get_fee_info(deps)?), } } pub mod query { + use crate::{ + msg::{GetFeeResponse, GetTokenResponse}, + state::read_state, + }; + use super::*; - pub fn count(_deps: Deps) -> StdResult { - Ok(GetCountResponse { count: 1 }) + pub fn get_token_list(deps: Deps) -> StdResult { + let tokens = read_state(deps.storage, |state| { + state + .tokens + .iter() + .map(|(_, token)| token.clone()) + .collect() + }); + Ok(GetTokenResponse { tokens }) + } + + pub fn get_fee_info(deps: Deps) -> StdResult { + Ok(read_state(deps.storage, |state| GetFeeResponse { + fee_token: state.fee_token.clone(), + fee_token_factor: state.fee_token_factor.clone(), + target_chain_factor: state.target_chain_factor.clone(), + })) } } diff --git a/src/helpers.rs b/src/helpers.rs index 6d988cc..bec98ca 100644 --- a/src/helpers.rs +++ b/src/helpers.rs @@ -6,7 +6,7 @@ use cosmwasm_std::{ WasmQuery, }; -use crate::msg::{ExecuteMsg, GetCountResponse, QueryMsg}; +use crate::msg::{ExecuteMsg, GetTokenResponse, QueryMsg}; /// CwTemplateContract is a wrapper around Addr that provides a lot of helpers /// for working with this. @@ -29,19 +29,19 @@ impl CwTemplateContract { } /// Get Count - pub fn count(&self, querier: &Q) -> StdResult + pub fn count(&self, querier: &Q) -> StdResult where Q: Querier, T: Into, CQ: CustomQuery, { - let msg = QueryMsg::GetCount {}; + let msg = QueryMsg::GetTokenList; let query = WasmQuery::Smart { contract_addr: self.addr().into(), msg: to_json_binary(&msg)?, } .into(); - let res: GetCountResponse = QuerierWrapper::::new(querier).query(&query)?; + let res: GetTokenResponse = QuerierWrapper::::new(querier).query(&query)?; Ok(res) } } diff --git a/src/msg.rs b/src/msg.rs index 8067947..69f1f6f 100644 --- a/src/msg.rs +++ b/src/msg.rs @@ -1,6 +1,10 @@ +use std::collections::BTreeMap; + use cosmwasm_schema::{cw_serde, QueryResponses}; use cosmwasm_std::Addr; +use crate::state::Token; + #[cw_serde] pub struct InstantiateMsg { pub owner: Addr, @@ -54,13 +58,21 @@ pub enum Factor { #[cw_serde] #[derive(QueryResponses)] pub enum QueryMsg { - // GetCount returns the current count as a json-encoded number - #[returns(GetCountResponse)] - GetCount {}, + #[returns(GetTokenResponse)] + GetTokenList, + #[returns(GetFeeResponse)] + GetFeeInfo, } // We define a custom struct for each query response #[cw_serde] -pub struct GetCountResponse { - pub count: i32, +pub struct GetTokenResponse { + pub tokens: Vec, +} + +#[cw_serde] +pub struct GetFeeResponse { + pub fee_token: Option, + pub fee_token_factor: Option, + pub target_chain_factor: BTreeMap, } diff --git a/src/state.rs b/src/state.rs index 7a56e13..fe0f4c8 100644 --- a/src/state.rs +++ b/src/state.rs @@ -20,6 +20,7 @@ pub struct State { #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] pub struct Token { + pub name: String, pub denom: String, pub settlement_chain: String, }