Learn how to work with tokens and retrieve token information using the Ember SDK.
Token Information
Retrieve detailed information about a specific token:
use ember_sdk::{GetTokenDataParams};
async fn get_token_info(client: &EmberClient) -> Result<(), EmberError> {
let params = GetTokenDataParams {
chain_id: 1,
address: "0xTokenAddress...".to_string(),
};
let token_data = client.get_token_data(params).await?;
println!("Token name: {}", token_data.token.name);
println!("Symbol: {}", token_data.token.symbol);
println!("Decimals: {}", token_data.token.decimals);
println!("Market cap: {}", token_data.token.market_data.market_cap);
println!("24h volume: {}", token_data.token.market_data.volume_24h);
Ok(())
}
Supported Tokens
Get a list of all supported tokens:
use ember_sdk::{GetAllSupportedTokensParams};
async fn list_supported_tokens(client: &EmberClient) -> Result<(), EmberError> {
let params = GetAllSupportedTokensParams {
chain_id: Some(1),
include_metadata: Some(true),
};
let tokens = client.get_all_supported_tokens(params).await?;
for token in tokens.tokens {
println!("Token: {} ({})", token.name, token.symbol);
println!("Address: {}", token.address);
println!("Chain ID: {}", token.chain_id);
if let Some(metadata) = token.metadata {
println!("Website: {}", metadata.website);
println!("Twitter: {}", metadata.twitter);
}
}
Ok(())
}
Chain Information
Get information about supported blockchain networks:
async fn get_chain_info(client: &EmberClient) -> Result<(), EmberError> {
let chains = client.get_all_supported_chains().await?;
for chain in chains.chains {
println!("Chain: {} (ID: {})", chain.name, chain.chain_id);
println!("Native currency: {} ({} decimals)",
chain.native_currency.symbol,
chain.native_currency.decimals
);
println!("Block explorer: {}", chain.block_explorer);
println!("Features: {:?}", chain.features);
println!("Status: {}", chain.status);
}
Ok(())
}
Token Transfers
Create a token transfer transaction:
use ember_sdk::{CreateTransferParams};
async fn transfer_tokens(client: &EmberClient) -> Result<(), EmberError> {
let params = CreateTransferParams {
chain_id: 1,
from_address: "0xSenderAddress...".to_string(),
to_address: "0xRecipientAddress...".to_string(),
token: "0xTokenAddress...".to_string(),
amount: "100".to_string(),
max_fee: "5".to_string(),
};
let transfer_plan = client.create_transfer(params).await?;
println!("Transfer plan created: {:?}", transfer_plan);
println!("Fee breakdown: {:?}", transfer_plan.fee_breakdown);
Ok(())
}
Token Validation
Validate token addresses and amounts:
async fn validate_token(client: &EmberClient, token: &str) -> Result<(), EmberError> {
// Check if token is supported
let params = GetTokenDataParams {
chain_id: 1,
address: token.to_string(),
};
match client.get_token_data(params).await {
Ok(data) => {
println!("Token is valid:");
println!("Name: {}", data.token.name);
println!("Decimals: {}", data.token.decimals);
},
Err(EmberError::UnsupportedToken(_)) => {
println!("Token is not supported");
},
Err(e) => {
println!("Error validating token: {:?}", e);
}
}
Ok(())
}
Best Practices
Cache token information for frequently used tokens
Validate token addresses before creating transactions
Handle token decimals correctly when displaying amounts
Check token support on target chains before operations
Monitor token allowances for contract interactions
Keep track of token metadata updates