diff --git a/Cargo.toml b/Cargo.toml index 212133c..c26d8d8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,9 +17,10 @@ cw-utils = "0.13" elys-bindings = { version = "0.1.0", git = "https://github.com/elys-network/bindings", branch = "main" } [dev-dependencies] + cw-multi-test = "0.13.4" serde_json = "1.0.107" -elys-bindings = { version = "0.1.0", git = "https://github.com/elys-network/bindings", features = [ +elys-bindings = { version = "0.1.0", git = "https://github.com/elys-network/bindings", branch = "main", features = [ "testing", -], branch = "main" } +] } elys-bindings-test = { version = "0.1.0", git = "https://github.com/elys-network/bindings", branch = "main" } diff --git a/src/action/mod.rs b/src/action/mod.rs index eb2beaa..ac2df9b 100644 --- a/src/action/mod.rs +++ b/src/action/mod.rs @@ -5,6 +5,8 @@ use elys_bindings::*; pub mod query { mod asset_info; mod get_all_price; + mod get_margin_order; + mod get_margin_orders; mod get_spot_order; mod get_spot_orders; @@ -16,6 +18,8 @@ pub mod query { pub use asset_info::asset_info; pub use get_all_price::get_all_prices; + pub use get_margin_order::get_margin_order; + pub use get_margin_orders::get_margin_orders; pub use get_spot_order::get_spot_order; pub use get_spot_orders::get_spot_orders; } diff --git a/src/action/query/get_margin_order.rs b/src/action/query/get_margin_order.rs new file mode 100644 index 0000000..960840b --- /dev/null +++ b/src/action/query/get_margin_order.rs @@ -0,0 +1,19 @@ +use cosmwasm_std::StdError; + +use super::*; + +pub fn get_margin_order( + deps: Deps, + address: String, + id: u64, +) -> Result { + let querier = ElysQuerier::new(&deps.querier); + + let resp: MarginMtpResponse = querier.mtp(address, id)?; + + if let Some(mtp) = resp.mtp { + Ok(mtp) + } else { + Err(StdError::not_found("margin trading prosition").into()) + } +} diff --git a/src/action/query/get_margin_orders.rs b/src/action/query/get_margin_orders.rs new file mode 100644 index 0000000..9764298 --- /dev/null +++ b/src/action/query/get_margin_orders.rs @@ -0,0 +1,12 @@ +use super::*; + +pub fn get_margin_orders( + deps: Deps, + pagination: PageRequest, +) -> Result { + let querier = ElysQuerier::new(&deps.querier); + + let resp: MarginQueryPositionsResponse = querier.positions(pagination)?; + + Ok(resp) +} diff --git a/src/entry_point/query.rs b/src/entry_point/query.rs index 16f6960..01562fb 100644 --- a/src/entry_point/query.rs +++ b/src/entry_point/query.rs @@ -10,6 +10,12 @@ pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> Result Ok(to_json_binary(&query::get_spot_order(deps, order_id)?)?), GetAllPrices {} => Ok(to_json_binary(&query::get_all_prices(deps)?)?), AssetInfo { denom } => Ok(to_json_binary(&query::asset_info(deps, denom)?)?), + GetMarginOrder { address, id } => Ok(to_json_binary(&query::get_margin_order( + deps, address, id, + )?)?), + GetMarginOrders { pagination } => Ok(to_json_binary(&query::get_margin_orders( + deps, pagination, + )?)?), GetSpotOrders { pagination, order_owner, diff --git a/src/msg/query_msg.rs b/src/msg/query_msg.rs index 4dc671f..e7231ba 100644 --- a/src/msg/query_msg.rs +++ b/src/msg/query_msg.rs @@ -1,9 +1,10 @@ #[allow(unused_imports)] use super::query_resp::*; -use crate::types::{PageRequest, SpotOrderType}; +use crate::types::{SpotOrderType}; use cosmwasm_schema::{cw_serde, QueryResponses}; #[allow(unused_imports)] use elys_bindings::query_resp::*; +use elys_bindings::types::PageRequest; #[cw_serde] #[derive(QueryResponses)] @@ -14,6 +15,10 @@ pub enum QueryMsg { GetAllPrices {}, #[returns(OracleAssetInfoResponse)] AssetInfo { denom: String }, + #[returns(MarginMtpResponse)] + GetMarginOrder { address: String, id: u64 }, + #[returns(MarginQueryPositionsResponse)] + GetMarginOrders { pagination: PageRequest }, #[returns(GetSpotOrdersResp)] GetSpotOrders { pagination: PageRequest,