use stratum_core::{
bitcoin::{BlockHash, CompactTarget, Transaction, Txid, Wtxid, block::Version},
job_declaration_sv2::PushSolution,
};
use tokio::sync::oneshot;
#[derive(Debug, Clone, Copy)]
pub struct ValidationContext {
pub prev_hash: BlockHash,
pub nbits: CompactTarget,
pub min_ntime: u32,
}
pub enum JdRequest {
DeclareMiningJob {
version: Version,
coinbase_tx: Transaction,
wtxid_list: Vec<Wtxid>,
missing_txs: Vec<Transaction>,
response_tx: oneshot::Sender<JdResponse>,
},
PushSolution {
push_solution: PushSolution<'static>,
},
}
#[derive(Debug, Clone)]
pub enum JdResponse {
Success {
prev_hash: BlockHash,
nbits: CompactTarget,
min_ntime: u32,
txid_list: Vec<Txid>,
},
Error {
error_code: String,
validation_context: ValidationContext,
},
MissingTransactions {
missing_wtxids: Vec<Wtxid>,
validation_context: ValidationContext,
},
}