use crate::rpc::blockchain::BlockchainRpc;
use anyhow::Result;
use serde_json::{json, Value};
pub async fn get_chain_tip(blockchain: &BlockchainRpc) -> Result<Value> {
let tip_hash = blockchain.get_best_block_hash().await?;
Ok(tip_hash)
}
pub async fn get_chain_height(blockchain: &BlockchainRpc) -> Result<Value> {
let height = blockchain.get_block_count().await?;
Ok(height)
}
pub async fn get_chain_info(blockchain: &BlockchainRpc) -> Result<Value> {
let info = blockchain.get_blockchain_state().await?;
Ok(info)
}
pub async fn get_chain_difficulty(blockchain: &BlockchainRpc) -> Result<Value> {
let difficulty = blockchain.get_difficulty().await?;
Ok(difficulty)
}
pub async fn get_utxo_set_info(blockchain: &BlockchainRpc) -> Result<Value> {
let info = blockchain.get_txoutset_info().await?;
Ok(info)
}
pub async fn get_chain_tips(blockchain: &BlockchainRpc) -> Result<Value> {
let tips = blockchain.get_chain_tips().await?;
Ok(tips)
}
pub async fn get_chain_tx_stats(blockchain: &BlockchainRpc, nblocks: Option<u64>) -> Result<Value> {
let params = if let Some(n) = nblocks {
json!([n])
} else {
json!([])
};
let stats = blockchain.get_chain_tx_stats(¶ms).await?;
Ok(stats)
}
pub async fn get_prune_info(blockchain: &BlockchainRpc) -> Result<Value> {
let params = json!([]);
let info = blockchain.get_prune_info(¶ms).await?;
Ok(info)
}
pub async fn get_index_info(blockchain: &BlockchainRpc, index_name: Option<&str>) -> Result<Value> {
let params = if let Some(name) = index_name {
json!([name])
} else {
json!([])
};
let info = blockchain.get_index_info(¶ms).await?;
Ok(info)
}
pub async fn verify_chain(
blockchain: &BlockchainRpc,
checklevel: Option<u64>,
numblocks: Option<u64>,
) -> Result<Value> {
let params = json!([]);
let result = blockchain.verify_chain(checklevel, numblocks).await?;
Ok(result)
}
pub async fn prune_blockchain(blockchain: &BlockchainRpc, height: u64) -> Result<Value> {
let params = json!([height]);
let result = blockchain.prune_blockchain(¶ms).await?;
Ok(result)
}