use crate::rpc::blockchain::BlockchainRpc;
use anyhow::Result;
use serde_json::{json, Value};
pub async fn get_block_by_hash(blockchain: &BlockchainRpc, hash: &str) -> Result<Value> {
let block = blockchain.get_block(hash).await?;
Ok(block)
}
pub async fn get_block_by_height(blockchain: &BlockchainRpc, height: u64) -> Result<Value> {
let block_hash = blockchain.get_block_hash(height).await?;
let hash_str = block_hash.as_str().unwrap_or("");
let block = blockchain.get_block(hash_str).await?;
Ok(block)
}
pub async fn get_block_transactions(blockchain: &BlockchainRpc, hash: &str) -> Result<Value> {
let block = blockchain.get_block(hash).await?;
if let Some(tx_array) = block.get("tx") {
Ok(tx_array.clone())
} else {
Ok(Value::Array(vec![]))
}
}
pub async fn get_block_header(
blockchain: &BlockchainRpc,
hash: &str,
verbose: bool,
) -> Result<Value> {
let header = blockchain.get_block_header(hash, verbose).await?;
Ok(header)
}
pub async fn get_block_stats(blockchain: &BlockchainRpc, hash_or_height: &str) -> Result<Value> {
let params = json!([hash_or_height]);
let stats = blockchain.get_block_stats(¶ms).await?;
Ok(stats)
}
pub async fn get_block_filter(
blockchain: &BlockchainRpc,
hash: &str,
filtertype: Option<&str>,
) -> Result<Value> {
let params = if let Some(ft) = filtertype {
json!([hash, ft])
} else {
json!([hash])
};
let filter = blockchain.get_block_filter(¶ms).await?;
Ok(filter)
}
pub async fn invalidate_block(blockchain: &BlockchainRpc, hash: &str) -> Result<Value> {
let params = json!([hash]);
let result = blockchain.invalidate_block(¶ms).await?;
Ok(result)
}
pub async fn reconsider_block(blockchain: &BlockchainRpc, hash: &str) -> Result<Value> {
let params = json!([hash]);
let result = blockchain.reconsider_block(¶ms).await?;
Ok(result)
}