Skip to content
This repository was archived by the owner on Dec 29, 2023. It is now read-only.

Commit f370675

Browse files
Feat/denom handle (#19)
* chore: handle usdc denom using assetprofile * chore: comment some of the asset entry item to read ely testnet asset profile * chore: fix omitted item in asset profile * Update Cargo.toml * chore: fix version --------- Co-authored-by: Cosmic Vagabond <121588426+cosmic-vagabond@users.noreply.github.com>
1 parent ddc0845 commit f370675

File tree

9 files changed

+118
-33
lines changed

9 files changed

+118
-33
lines changed

Cargo.lock

Lines changed: 10 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/action/query/earn/get_eden_boost_earn_program_details.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,25 @@ pub fn get_eden_boost_earn_program_details(deps: Deps<ElysQuery>, address: Optio
1111
}
1212

1313
let querier = ElysQuerier::new(&deps.querier);
14+
15+
let usdc_denom_entry = querier.get_asset_profile(ElysDenom::Usdc.as_str().to_string())?;
16+
let usdc_denom = usdc_denom_entry.entry.denom;
17+
let usdc_display_denom = usdc_denom_entry.entry.display_name;
18+
1419
let usdc_apr = querier.get_incentive_apr(EarnType::EdenBProgram as i32, ElysDenom::Usdc.as_str().to_string())?;
1520
let eden_apr = querier.get_incentive_apr(EarnType::EdenBProgram as i32, ElysDenom::Eden.as_str().to_string())?;
1621

1722
let resp = GetEdenBoostEarnProgramResp {
1823
data: match address {
1924
Some(addr) => {
20-
let usdc_rewards = querier.get_sub_bucket_rewards_balance(addr.clone(), ElysDenom::Usdc.as_str().to_string(), EarnType::EdenBProgram as i32)?;
25+
let usdc_rewards = querier.get_sub_bucket_rewards_balance(addr.clone(), usdc_denom.clone(), EarnType::EdenBProgram as i32)?;
2126
let eden_rewards = querier.get_sub_bucket_rewards_balance(addr.clone(), ElysDenom::Eden.as_str().to_string(), EarnType::EdenBProgram as i32)?;
2227

2328
let available = querier.get_balance(addr.clone(), asset.clone())?;
2429
let staked = querier.get_staked_balance(addr.clone(), asset.clone())?;
2530

2631
let discount = Decimal::from_atomics(Uint128::new(1000000), 0).unwrap();
27-
let usdc_oracle_price = querier.get_oracle_price(ElysDenom::USDC.as_str().to_string(), "elys".to_string(), 0)?;
32+
let usdc_oracle_price = querier.get_oracle_price(usdc_display_denom.clone(), ElysDenom::AnySource.as_str().to_string(), 0)?;
2833
let usdc_usd_price = usdc_oracle_price.price.price.checked_div(Decimal::from_atomics(Uint128::new(1000000), 0).unwrap()).unwrap();
2934
let elys_price_in_usd = querier.get_amm_price_by_denom(coin(Uint128::new(1000000).u128(), ElysDenom::Elys.as_str().to_string()), discount)?;
3035

src/action/query/earn/get_eden_earn_program_details.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,19 @@ pub fn get_eden_earn_program_details(deps: Deps<ElysQuery>, address: Option<Stri
1111
}
1212

1313
let querier = ElysQuerier::new(&deps.querier);
14+
15+
let usdc_denom_entry = querier.get_asset_profile(ElysDenom::Usdc.as_str().to_string())?;
16+
let usdc_denom = usdc_denom_entry.entry.denom;
17+
let usdc_display_denom = usdc_denom_entry.entry.display_name;
18+
1419
let usdc_apr = querier.get_incentive_apr(EarnType::EdenProgram as i32, ElysDenom::Usdc.as_str().to_string())?;
1520
let eden_apr = querier.get_incentive_apr(EarnType::EdenProgram as i32, ElysDenom::Eden.as_str().to_string())?;
1621
let edenb_apr = querier.get_incentive_apr(EarnType::EdenProgram as i32, ElysDenom::EdenBoost.as_str().to_string())?;
1722

1823
let resp = GetEdenEarnProgramResp {
1924
data: match address {
2025
Some(addr) => {
21-
let usdc_rewards = querier.get_sub_bucket_rewards_balance(addr.clone(), ElysDenom::Usdc.as_str().to_string(), EarnType::EdenProgram as i32)?;
26+
let usdc_rewards = querier.get_sub_bucket_rewards_balance(addr.clone(), usdc_denom.clone(), EarnType::EdenProgram as i32)?;
2227
let eden_rewards = querier.get_sub_bucket_rewards_balance(addr.clone(), ElysDenom::Eden.as_str().to_string(), EarnType::EdenProgram as i32)?;
2328
let edenb_rewards = querier.get_sub_bucket_rewards_balance(addr.clone(), ElysDenom::EdenBoost.as_str().to_string(), EarnType::EdenProgram as i32)?;
2429
let mut available = querier.get_balance(addr.clone(), asset.clone())?;
@@ -27,7 +32,7 @@ pub fn get_eden_earn_program_details(deps: Deps<ElysQuery>, address: Option<Stri
2732

2833
let discount = Decimal::from_atomics(Uint128::new(1000000), 0).unwrap();
2934

30-
let usdc_oracle_price = querier.get_oracle_price(ElysDenom::USDC.as_str().to_string(), "elys".to_string(), 0)?;
35+
let usdc_oracle_price = querier.get_oracle_price(usdc_display_denom.clone(), ElysDenom::AnySource.as_str().to_string(), 0)?;
3136
let usdc_usd_price = usdc_oracle_price.price.price.checked_div(Decimal::from_atomics(Uint128::new(1000000), 0).unwrap()).unwrap();
3237

3338
// have value in usd

src/action/query/earn/get_elys_earn_program_details.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,19 @@ pub fn get_elys_earn_program_details(deps: Deps<ElysQuery>, address: Option<Stri
1111
}
1212

1313
let querier = ElysQuerier::new(&deps.querier);
14-
14+
15+
let usdc_denom_entry = querier.get_asset_profile(ElysDenom::Usdc.as_str().to_string())?;
16+
let usdc_denom = usdc_denom_entry.entry.denom;
17+
let usdc_display_denom = usdc_denom_entry.entry.display_name;
18+
1519
let usdc_apr = querier.get_incentive_apr(EarnType::ElysProgram as i32, ElysDenom::Usdc.as_str().to_string())?;
1620
let eden_apr = querier.get_incentive_apr(EarnType::ElysProgram as i32, ElysDenom::Eden.as_str().to_string())?;
1721
let edenb_apr = querier.get_incentive_apr(EarnType::ElysProgram as i32, ElysDenom::EdenBoost.as_str().to_string())?;
1822

1923
let resp = GetElysEarnProgramResp {
2024
data: match address {
2125
Some(addr) => {
22-
let usdc_rewards = querier.get_sub_bucket_rewards_balance(addr.clone(), ElysDenom::Usdc.as_str().to_string(), EarnType::ElysProgram as i32)?;
26+
let usdc_rewards = querier.get_sub_bucket_rewards_balance(addr.clone(), usdc_denom.clone(), EarnType::ElysProgram as i32)?;
2327
let eden_rewards = querier.get_sub_bucket_rewards_balance(addr.clone(), ElysDenom::Eden.as_str().to_string(), EarnType::ElysProgram as i32)?;
2428
let edenb_rewards = querier.get_sub_bucket_rewards_balance(addr.clone(), ElysDenom::EdenBoost.as_str().to_string(), EarnType::ElysProgram as i32)?;
2529
let mut available = querier.get_balance(addr.clone(), asset.clone())?;
@@ -28,7 +32,7 @@ pub fn get_elys_earn_program_details(deps: Deps<ElysQuery>, address: Option<Stri
2832
let mut staked_positions = querier.get_staked_positions(addr.clone())?;
2933
let mut unstaked_positions = querier.get_unstaked_positions(addr.clone())?;
3034

31-
let usdc_oracle_price = querier.get_oracle_price(ElysDenom::USDC.as_str().to_string(), "elys".to_string(), 0)?;
35+
let usdc_oracle_price = querier.get_oracle_price(usdc_display_denom.clone(), ElysDenom::AnySource.as_str().to_string(), 0)?;
3236
let usdc_usd_price = usdc_oracle_price.price.price.checked_div(Decimal::from_atomics(Uint128::new(1000000), 0).unwrap()).unwrap();
3337

3438
let discount = Decimal::from_atomics(Uint128::new(1000000), 0).unwrap();

src/action/query/earn/get_usdc_earn_program_details.rs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,24 +12,29 @@ pub fn get_usdc_earn_program_details(deps: Deps<ElysQuery>, address: Option<Stri
1212
}
1313

1414
let querier = ElysQuerier::new(&deps.querier);
15+
16+
let usdc_denom_entry = querier.get_asset_profile(ElysDenom::Usdc.as_str().to_string())?;
17+
let usdc_denom = usdc_denom_entry.entry.denom;
18+
let usdc_display_denom = usdc_denom_entry.entry.display_name;
19+
1520
let usdc_apr = querier.get_incentive_apr(EarnType::UsdcProgram as i32, ElysDenom::Usdc.as_str().to_string())?;
1621
let eden_apr = querier.get_incentive_apr(EarnType::UsdcProgram as i32, ElysDenom::Eden.as_str().to_string())?;
1722

1823
let resp = GetUsdcEarnProgramResp {
1924
data: match address {
2025
Some(addr) => {
21-
let usdc_rewards = querier.get_sub_bucket_rewards_balance(addr.clone(), ElysDenom::Usdc.as_str().to_string(), EarnType::UsdcProgram as i32)?;
26+
let usdc_rewards = querier.get_sub_bucket_rewards_balance(addr.clone(), usdc_denom.clone(), EarnType::UsdcProgram as i32)?;
2227
let eden_rewards = querier.get_sub_bucket_rewards_balance(addr.clone(), ElysDenom::Eden.as_str().to_string(), EarnType::UsdcProgram as i32)?;
2328
let discount = Decimal::from_atomics(Uint128::new(1000000), 0).unwrap();
2429

25-
let usdc_oracle_price = querier.get_oracle_price(ElysDenom::USDC.as_str().to_string(), "elys".to_string(), 0)?;
30+
let usdc_oracle_price = querier.get_oracle_price(usdc_display_denom.clone(), ElysDenom::AnySource.as_str().to_string(), 0)?;
2631
let usdc_usd_price = usdc_oracle_price.price.price.checked_div(Decimal::from_atomics(Uint128::new(1000000), 0).unwrap()).unwrap();
2732
let elys_price_in_usd = querier.get_amm_price_by_denom(coin(Uint128::new(1000000).u128(), ElysDenom::Elys.as_str().to_string()), discount)?;
2833

29-
let mut available = querier.get_balance(addr.clone(), asset.clone())?;
34+
let mut available = querier.get_balance(addr.clone(), usdc_denom.clone())?;
3035
available.usd_amount = available.usd_amount.checked_mul(usdc_usd_price).unwrap();
3136

32-
let mut staked = querier.get_staked_balance(addr.clone(), asset.clone())?;
37+
let mut staked = querier.get_staked_balance(addr.clone(), usdc_denom.clone())?;
3338
staked.usd_amount = staked.usd_amount.checked_mul(usdc_usd_price).unwrap();
3439

3540
let mut borrowed = querier.get_borrowed_balance(addr.clone())?;

src/action/query/earn/get_usdc_price.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@ use crate::msg::query_resp::earn::GetUsdcPriceResp;
66

77
pub fn get_usdc_price(deps: Deps<ElysQuery>) -> Result<GetUsdcPriceResp, ContractError> {
88
let querier = ElysQuerier::new(&deps.querier);
9-
let usdc_oracle_price = querier.get_oracle_price(ElysDenom::USDC.as_str().to_string(), "".to_string(), 0)?;
9+
10+
let usdc_denom_entry = querier.get_asset_profile(ElysDenom::Usdc.as_str().to_string())?;
11+
let usdc_display_denom = usdc_denom_entry.entry.display_name;
12+
13+
let usdc_oracle_price = querier.get_oracle_price(usdc_display_denom.clone(), ElysDenom::AnySource.as_str().to_string(), 0)?;
1014
let usdc_usd_price = usdc_oracle_price.price.price.checked_div(Decimal::from_atomics(Uint128::new(1000000), 0).unwrap()).unwrap();
1115
let resp = GetUsdcPriceResp {
1216
price: usdc_usd_price,

src/bindings/querier.rs

Lines changed: 58 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,12 @@ use cosmwasm_std::{QuerierWrapper, QueryRequest, StdResult, Decimal, Coin};
22

33
use super::{
44
query::ElysQuery,
5-
query_resp::{QueryDelegatorDelegationsResponse,
6-
QueryDelegatorUnbondingDelegationsResponse,
7-
QueryDelegatorValidatorsResponse,
8-
QueryShowCommitmentsResponse,
9-
QueryStakedPositionResponse,
10-
QueryUnstakedPositionResponse,
11-
QueryVestingInfoResponse,
12-
StakedAvailable,
13-
QueryGetPriceResponse},
5+
query_resp::*,
146
};
157

168
use crate::msg::query_resp::earn::QueryEarnPoolResponse;
179
use crate::types::{BalanceBorrowed, QueryAprResponse, PageRequest};
18-
use elys_bindings::types::BalanceAvailable;
10+
use elys_bindings::{types::BalanceAvailable, query_resp::*};
1911

2012
#[allow(dead_code)]
2113
pub struct ElysQuerier<'a> {
@@ -188,4 +180,60 @@ impl<'a> ElysQuerier<'a> {
188180
let resp: QueryEarnPoolResponse = self.querier.query(&request)?;
189181
Ok(resp)
190182
}
183+
184+
pub fn get_asset_profile(&self, base_denom: String ) -> StdResult<QueryGetEntryResponse> {
185+
let asset_profile = ElysQuery::get_asset_profile(base_denom.to_owned());
186+
let request: QueryRequest<ElysQuery> = QueryRequest::Custom(asset_profile);
187+
let QueryGetEntryResponseRaw { entry: raw_entry }: QueryGetEntryResponseRaw =
188+
self.querier.query(&request)?;
189+
190+
let resp = QueryGetEntryResponse {
191+
entry: Entry {
192+
base_denom: raw_entry.base_denom,
193+
decimals: raw_entry.decimals,
194+
denom: raw_entry.denom,
195+
path: raw_entry.path.map_or("".to_string(), |path| path),
196+
ibc_channel_id: raw_entry
197+
.ibc_channel_id
198+
.map_or("".to_string(), |ibc_channel_id| ibc_channel_id),
199+
ibc_counterparty_channel_id: raw_entry
200+
.ibc_counterparty_channel_id
201+
.map_or("".to_string(), |ibc_counterparty_channel_id| {
202+
ibc_counterparty_channel_id
203+
}),
204+
display_name: raw_entry.display_name,
205+
display_symbol: raw_entry
206+
.display_symbol
207+
.map_or("".to_string(), |display_symbol| display_symbol),
208+
external_symbol: raw_entry
209+
.external_symbol
210+
.map_or("".to_string(), |external_symbol| external_symbol),
211+
unit_denom: raw_entry
212+
.unit_denom
213+
.map_or("".to_string(), |unit_denom| unit_denom),
214+
authority: raw_entry.authority,
215+
commit_enabled: raw_entry.commit_enabled,
216+
withdraw_enabled: raw_entry.withdraw_enabled,
217+
network: raw_entry.network.map_or("".to_string(), |network| network),
218+
address: raw_entry.address.map_or("".to_string(), |address| address),
219+
transfer_limit: raw_entry
220+
.transfer_limit
221+
.map_or("".to_string(), |transfer_limit| transfer_limit),
222+
ibc_counterparty_denom: raw_entry
223+
.ibc_counterparty_denom
224+
.map_or("".to_string(), |ibc_counterparty_denom| {
225+
ibc_counterparty_denom
226+
}),
227+
ibc_counterparty_chain_id: raw_entry
228+
.ibc_counterparty_chain_id
229+
.map_or("".to_string(), |ibc_counterparty_chain_id| {
230+
ibc_counterparty_chain_id
231+
}),
232+
permissions: raw_entry
233+
.permissions
234+
.map_or(vec![], |permissions| permissions),
235+
},
236+
};
237+
Ok(resp)
238+
}
191239
}

src/bindings/query.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ use cosmwasm_std::{CustomQuery, Decimal, Coin};
1313
#[allow(unused_imports)]
1414
use crate::msg::query_resp::earn::QueryEarnPoolResponse;
1515

16+
use elys_bindings::query_resp::QueryGetEntryResponse;
17+
18+
1619
#[cw_serde]
1720
#[derive(QueryResponses)]
1821
pub enum ElysQuery {
@@ -49,7 +52,9 @@ pub enum ElysQuery {
4952
#[returns(QueryGetPriceResponse)]
5053
OraclePrice{asset: String, source: String, timestamp: u64},
5154
#[returns(QueryEarnPoolResponse)]
52-
AmmEarnMiningPoolAll{pool_ids: Option<Vec<u64>>, filter_type: i32, pagination: Option<PageRequest>}
55+
AmmEarnMiningPoolAll{pool_ids: Option<Vec<u64>>, filter_type: i32, pagination: Option<PageRequest>},
56+
#[returns(QueryGetEntryResponse)]
57+
AssetProfileEntry{base_denom: String}
5358
}
5459

5560
impl CustomQuery for ElysQuery {}
@@ -105,4 +110,7 @@ impl ElysQuery {
105110
pub fn get_all_pools(pool_ids: Option<Vec<u64>>, filter_type: i32, pagination: Option<PageRequest>) -> Self {
106111
ElysQuery::AmmEarnMiningPoolAll{ pool_ids, filter_type, pagination }
107112
}
113+
pub fn get_asset_profile(base_denom: String) -> Self {
114+
ElysQuery::AssetProfileEntry{ base_denom }
115+
}
108116
}

src/types/denom.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ pub enum ElysDenom {
1212
Usdc,
1313
// USDC
1414
USDC,
15+
// ElysSource
16+
ElysSource,
17+
// AnySource
18+
AnySource,
1519
}
1620

1721
impl ElysDenom {
@@ -22,6 +26,8 @@ impl ElysDenom {
2226
ElysDenom::EdenBoost => "uedenb",
2327
ElysDenom::Usdc => "uusdc",
2428
ElysDenom::USDC => "USDC",
29+
ElysDenom::ElysSource => "elys",
30+
ElysDenom::AnySource => "",
2531
}
2632
}
2733
}

0 commit comments

Comments
 (0)