Skip to content

Commit

Permalink
feat: add trace command
Browse files Browse the repository at this point in the history
Adds a new command for fetching transaction traces.
  • Loading branch information
xJonathanLEI committed Oct 26, 2023
1 parent 2384b57 commit b24149a
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 0 deletions.
3 changes: 3 additions & 0 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,8 @@ enum Subcommands {
StateUpdate(StateUpdate),
#[clap(alias = "receipt", about = "Get transaction receipt by hash")]
TransactionReceipt(TransactionReceipt),
#[clap(about = "Get transaction trace by hash")]
Trace(TransactionTrace),
#[clap(about = "Get Starknet network ID")]
ChainId(ChainId),
#[clap(about = "Get native gas token (currently ETH) balance")]
Expand Down Expand Up @@ -166,6 +168,7 @@ async fn run_command(cli: Cli) -> Result<()> {
Subcommands::BlockTime(cmd) => cmd.run().await,
Subcommands::StateUpdate(cmd) => cmd.run().await,
Subcommands::TransactionReceipt(cmd) => cmd.run().await,
Subcommands::Trace(cmd) => cmd.run().await,
Subcommands::ChainId(cmd) => cmd.run().await,
Subcommands::Balance(cmd) => cmd.run().await,
Subcommands::Nonce(cmd) => cmd.run().await,
Expand Down
3 changes: 3 additions & 0 deletions src/subcommands/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -81,3 +81,6 @@ pub use invoke::Invoke;

mod lab;
pub use lab::Lab;

mod transaction_trace;
pub use transaction_trace::TransactionTrace;
34 changes: 34 additions & 0 deletions src/subcommands/transaction_trace.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
use anyhow::Result;
use clap::Parser;
use colored_json::{ColorMode, Output};
use starknet::{core::types::FieldElement, providers::Provider};

use crate::{verbosity::VerbosityArgs, ProviderArgs};

#[derive(Debug, Parser)]
pub struct TransactionTrace {
#[clap(flatten)]
provider: ProviderArgs,
#[clap(help = "Transaction hash")]
hash: String,
#[clap(flatten)]
verbosity: VerbosityArgs,
}

impl TransactionTrace {
pub async fn run(self) -> Result<()> {
self.verbosity.setup_logging();

let provider = self.provider.into_provider();
let transaction_hash: FieldElement = self.hash.parse()?;

let trace = provider.trace_transaction(transaction_hash).await?;

let trace_json = serde_json::to_value(trace)?;
let trace_json =
colored_json::to_colored_json(&trace_json, ColorMode::Auto(Output::StdOut))?;
println!("{trace_json}");

Ok(())
}
}

0 comments on commit b24149a

Please sign in to comment.