use bitcoin::{BlockHash, ScriptBuf, TxMerkleNode, Txid};
use serde::Deserialize;
#[derive(Debug, Deserialize)]
pub struct RecommendedFees {
#[serde(alias = "fastestFee")]
pub fastest_fee: u64,
#[serde(alias = "halfHourFee")]
pub half_hour_fee: u64,
#[serde(alias = "hourFee")]
pub hour_fee: u64,
#[serde(alias = "economyFee")]
pub economy_fee: u64,
#[serde(alias = "minimumFee")]
pub minimum_fee: u64,
}
#[derive(Debug, Deserialize)]
pub struct AddressTx {
pub txid: Txid,
pub version: u32,
pub locktime: u32,
pub vin: Vec<Vin>,
pub vout: Vec<Vout>,
pub size: u32,
pub weight: u32,
pub sigops: u32,
pub fee: u64,
pub status: Status,
}
#[derive(Debug, Deserialize)]
pub struct Vin {
pub txid: Txid,
pub vout: u32,
pub prevout: Vout,
pub scriptsig: ScriptBuf,
pub scriptsig_asm: String,
pub is_coinbase: bool,
pub sequence: u64,
}
#[derive(Debug, Deserialize)]
pub struct Vout {
pub scriptpubkey: ScriptBuf,
pub scriptpubkey_asm: String,
pub scriptpubkey_type: String,
#[serde(default)]
pub scriptpubkey_address: String,
pub value: u64,
}
#[derive(Debug, Clone, Deserialize)]
pub struct Status {
pub confirmed: bool,
pub block_height: Option<u32>,
pub block_hash: Option<BlockHash>,
pub block_time: Option<u64>,
}
#[derive(Debug, Deserialize)]
pub struct MempoolStats {
pub count: u64,
pub vsize: u64,
pub total_fee: u64,
pub fee_histogram: Vec<(f64, u64)>,
}
#[derive(Debug, Deserialize)]
pub struct TxInfo {
pub txid: Txid,
pub version: u32,
pub locktime: u32,
pub vin: Vec<Vin>,
pub vout: Vec<Vout>,
pub size: u32,
pub weight: u32,
pub sigops: u64,
pub fee: u64,
pub status: Status,
}
#[derive(Debug, Deserialize)]
pub struct BlockSummary {
pub id: BlockHash,
pub height: u32,
pub version: u32,
pub timestamp: u64,
pub tx_count: u32,
pub size: u32,
pub weight: u32,
pub merkle_root: TxMerkleNode,
pub previousblockhash: BlockHash,
pub mediantime: u64,
pub nonce: u64,
pub bits: u32,
pub difficulty: f64,
}
#[derive(Debug, Deserialize)]
pub struct AddressInfo {
pub address: String,
pub chain_stats: AddressStats,
pub mempool_stats: AddressStats,
}
#[derive(Debug, Deserialize)]
pub struct AddressStats {
pub funded_txo_count: u64,
pub funded_txo_sum: u64,
pub spent_txo_count: u64,
pub spent_txo_sum: u64,
pub tx_count: u64,
}
#[derive(Debug, Deserialize)]
pub struct MerkleProof {
pub block_height: u32,
pub merkle: Vec<Txid>,
pub pos: usize,
}
#[derive(Debug, Deserialize)]
pub struct AddressUtxo {
pub txid: Txid,
pub vout: u32,
pub value: u64,
pub status: Status,
}
#[derive(Debug, Clone, Deserialize)]
pub struct OutputStatus {
pub spent: bool,
pub txid: Option<Txid>,
pub vin: Option<u32>,
pub status: Option<Status>,
}
#[derive(Debug, Deserialize)]
pub struct BlockStatus {
pub in_best_chain: bool,
pub height: Option<u32>,
pub next_best: Option<BlockHash>,
}