use solana_sdk::{clock::Slot, signature::Signature, transaction::Transaction};
use tokio::sync::mpsc;
use tracing::Span;
use super::transaction::TransactionStatus;
#[derive(Clone, Debug, Copy, PartialEq, Default)]
pub struct BlockMessage {
pub blockhash: solana_sdk::hash::Hash,
pub last_valid_block_height: u64,
pub block_height: u64,
}
#[derive(Clone, Debug)]
pub struct SendTransactionMessage {
pub span: Span,
pub index: usize,
pub transaction: Transaction,
pub last_valid_block_height: u64,
pub response_tx: mpsc::UnboundedSender<StatusMessage>,
}
#[derive(Clone, Debug)]
pub struct ConfirmTransactionMessage {
pub span: Span,
pub index: usize,
pub transaction: Transaction,
pub last_valid_block_height: u64,
pub response_tx: mpsc::UnboundedSender<StatusMessage>,
}
impl From<ConfirmTransactionMessage> for SendTransactionMessage {
fn from(msg: ConfirmTransactionMessage) -> Self {
Self {
span: msg.span,
index: msg.index,
transaction: msg.transaction,
last_valid_block_height: msg.last_valid_block_height,
response_tx: msg.response_tx,
}
}
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct StatusMessage {
pub index: usize,
pub landed_as: Option<(Slot, Signature)>,
pub status: TransactionStatus,
}