use std::{
collections::HashSet,
sync::Arc,
};
use vapory_types::{H256, U256};
use account_state::State;
use common_types::{
header::Header,
receipt::Receipt,
transaction::SignedTransaction,
};
use state_db::StateDB;
use vapcore_trace::Tracing;
use tetsy_vm::{EnvInfo, LastHashes};
#[derive(Clone)]
pub struct ExecutedBlock {
pub header: Header,
pub transactions: Vec<SignedTransaction>,
pub uncles: Vec<Header>,
pub receipts: Vec<Receipt>,
pub transactions_set: HashSet<H256>,
pub state: State<StateDB>,
pub traces: Tracing,
pub last_hashes: Arc<LastHashes>,
}
impl ExecutedBlock {
pub fn new(state: State<StateDB>, last_hashes: Arc<LastHashes>, tracing: bool) -> ExecutedBlock {
ExecutedBlock {
header: Default::default(),
transactions: Default::default(),
uncles: Default::default(),
receipts: Default::default(),
transactions_set: Default::default(),
state,
traces: if tracing {
Tracing::enabled()
} else {
Tracing::Disabled
},
last_hashes,
}
}
pub fn env_info(&self) -> EnvInfo {
EnvInfo {
number: self.header.number(),
author: self.header.author().clone(),
timestamp: self.header.timestamp(),
difficulty: self.header.difficulty().clone(),
last_hashes: self.last_hashes.clone(),
gas_used: self.receipts.last().map_or(U256::zero(), |r| r.gas_used),
gas_limit: self.header.gas_limit().clone(),
}
}
pub fn state_mut(&mut self) -> &mut State<StateDB> {
&mut self.state
}
pub fn traces_mut(&mut self) -> &mut Tracing {
&mut self.traces
}
}