Skip to content
Logo

market_queries

Runnable example from the exchange package.

Run

git clone https://github.com/throgxyz/examples.git
cd examples
cargo run -p examples-exchange --example market_queries

Source

//! Read the native TRON order-book market.
//!
//! No signer is required. `"_"` is TRON's reserved token ID for native TRX.
//!
//! Optional env:
//!   TRON_SELL_TOKEN_ID — sell-side TRC10 ID (default: 1002000)
//!   TRON_BUY_TOKEN_ID  — buy-side token ID (default: _ for TRX)
//!   TRON_ORDER_ID      — 32-byte order ID in hex
//!   TRON_ADDRESS       — account whose orders should be listed
//!   TRON_API_KEY       — TronGrid API key
//!
//! ```bash
//! cargo run -p examples-exchange --example market_queries
//! ```
 
use tronz::{
    Address, ProviderBuilder, TRONGRID_NILE, primitives::B256, providers::ext::MarketApi as _,
};
 
#[tokio::main]
async fn main() -> anyhow::Result<()> {
    let sell_token = std::env::var("TRON_SELL_TOKEN_ID").unwrap_or_else(|_| "1002000".to_owned());
    let buy_token = std::env::var("TRON_BUY_TOKEN_ID").unwrap_or_else(|_| "_".to_owned());
    let api_key = std::env::var("TRON_API_KEY").ok();
    let provider =
        ProviderBuilder::new().maybe_api_key(api_key).connect_grpc(TRONGRID_NILE).await?;
 
    let pairs = provider.get_market_pair_list().await?;
    let prices = provider.get_market_price_by_pair(&sell_token, &buy_token).await?;
    let orders = provider.get_market_order_list_by_pair(&sell_token, &buy_token).await?;
    println!("pairs={}, price_levels={}, open_orders={}", pairs.len(), prices.len(), orders.len());
 
    if let Ok(order_id) = std::env::var("TRON_ORDER_ID") {
        let order_id: B256 = order_id.parse()?;
        match provider.get_market_order_by_id(order_id).await? {
            Some(order) => println!("order: {order:?}"),
            None => println!("order not found"),
        }
    }
 
    if let Ok(address) = std::env::var("TRON_ADDRESS") {
        let address: Address = address.parse()?;
        let account_orders = provider.get_market_order_by_account(address).await?;
        println!("account orders: {}", account_orders.len());
    }
 
    Ok(())
}

View this example on GitHub.