use std::collections::HashSet;
use tokio::sync::oneshot;
use zebra_chain::{
block,
transaction::{self, UnminedTx, UnminedTxId, VerifiedUnminedTx},
transparent,
};
use crate::BoxError;
mod gossip;
mod mempool_change;
mod service_trait;
mod transaction_dependencies;
pub use self::{
gossip::Gossip,
mempool_change::{MempoolChange, MempoolChangeKind, MempoolTxSubscriber},
service_trait::MempoolService,
transaction_dependencies::TransactionDependencies,
};
#[derive(Debug, Eq, PartialEq)]
pub enum Request {
TransactionIds,
TransactionsById(HashSet<UnminedTxId>),
TransactionsByMinedId(HashSet<transaction::Hash>),
AwaitOutput(transparent::OutPoint),
TransactionWithDepsByMinedId(transaction::Hash),
FullTransactions,
RejectedTransactionIds(HashSet<UnminedTxId>),
Queue(Vec<Gossip>),
CheckForVerifiedTransactions,
QueueStats,
UnspentOutput(transparent::OutPoint),
}
#[derive(Debug)]
pub enum Response {
TransactionIds(HashSet<UnminedTxId>),
Transactions(Vec<UnminedTx>),
UnspentOutput(transparent::Output),
TransactionWithDeps {
transaction: VerifiedUnminedTx,
dependencies: HashSet<transaction::Hash>,
},
FullTransactions {
transactions: Vec<VerifiedUnminedTx>,
transaction_dependencies: TransactionDependencies,
last_seen_tip_hash: zebra_chain::block::Hash,
},
RejectedTransactionIds(HashSet<UnminedTxId>),
Queued(Vec<Result<oneshot::Receiver<Result<(), BoxError>>, BoxError>>),
CheckedForVerifiedTransactions,
QueueStats {
size: usize,
bytes: usize,
usage: usize,
fully_notified: Option<bool>,
},
TransparentOutput(Option<CreatedOrSpent>),
}
#[derive(Debug)]
pub enum CreatedOrSpent {
Created {
output: transparent::Output,
tx_version: u32,
last_seen_hash: block::Hash,
},
Spent,
}