use crate::{BlockHeader, Hash, Transaction};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct GetUTXOSetMessage {
pub height: u64,
pub block_hash: Hash,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct UTXOCommitment {
pub merkle_root: Hash,
pub total_supply: u64,
pub utxo_count: u64,
pub block_height: u64,
pub block_hash: Hash,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct UTXOSetMessage {
pub request_id: u64,
pub commitment: UTXOCommitment,
pub utxo_count: u64,
pub is_complete: bool,
pub chunk_id: Option<u32>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct FilterPreferences {
pub filter_ordinals: bool,
pub filter_dust: bool,
pub filter_brc20: bool,
pub min_output_value: u64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SpamSummary {
pub filtered_count: u32,
pub filtered_value: u64,
pub filter_reasons: u32,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct GetFilteredBlockMessage {
pub request_id: u64,
pub block_hash: Hash,
pub filter_preferences: FilterPreferences,
pub include_bip158_filter: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct FilteredBlockMessage {
pub request_id: u64,
pub header: BlockHeader,
pub commitment: UTXOCommitment,
pub transactions: Vec<Transaction>,
pub transaction_indices: Vec<u32>,
pub spam_summary: SpamSummary,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct GetBanListMessage {
pub request_id: u64,
pub min_score: Option<u32>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct BanEntry {
pub ip: [u8; 16],
pub score: u32,
pub reason: u8,
pub timestamp: u64,
pub signature: Option<Vec<u8>>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct BanListMessage {
pub request_id: u64,
pub entries: Vec<BanEntry>,
pub list_signature: Option<Vec<u8>>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct EconomicNodeRegistrationMessage {
pub node_type: String,
pub entity_name: String,
pub public_key: String,
pub qualification_data: serde_json::Value,
pub timestamp: i64,
pub signature: String,
pub message_id: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct EconomicNodeVetoMessage {
pub node_id: Option<i32>,
pub public_key: String,
pub pr_id: i32,
pub signal_type: String,
pub timestamp: i64,
pub signature: String,
pub message_id: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct EconomicNodeStatusMessage {
pub request_id: u64,
pub node_identifier: String,
pub query_type: String,
pub status: Option<NodeStatusResponse>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct NodeStatusResponse {
pub node_id: i32,
pub node_type: String,
pub entity_name: String,
pub status: String,
pub weight: f64,
pub registered_at: i64,
pub last_verified_at: Option<i64>,
}