use anyhow::Error;
use async_trait::async_trait;
use clap::Parser;
use tari_utilities::hex::Hex;
use super::{CommandContext, HandleCommand};
use crate::table::Table;
#[derive(Debug, Parser)]
pub struct Args {}
#[async_trait]
impl HandleCommand<Args> for CommandContext {
async fn handle_command(&mut self, _: Args) -> Result<(), Error> {
self.list_reorgs()
}
}
impl CommandContext {
pub fn list_reorgs(&self) -> Result<(), Error> {
if self.config.base_node.storage.track_reorgs {
let reorgs = self.blockchain_db.inner().fetch_all_reorgs()?;
let mut table = Table::new();
table.set_titles(vec!["#", "New Tip", "Prev Tip", "Depth", "Timestamp"]);
for (i, reorg) in reorgs.iter().enumerate() {
table.add_row(row![
i + 1,
format!("#{} ({})", reorg.new_height, reorg.new_hash.to_hex()),
format!("#{} ({})", reorg.prev_height, reorg.prev_hash.to_hex()),
format!("{} added, {} removed", reorg.num_blocks_added, reorg.num_blocks_removed),
reorg.local_time
]);
}
table.enable_row_count().print_stdout();
} else {
println!(
"Reorg tracking is turned off. Add `track_reorgs = true` to the [base_node] section of your config to \
turn it on."
);
}
Ok(())
}
}