use super::types::{BlockTrace, CallFrame, TraceCallObject, TraceCallOptions, TracerOptions};
use crate::client::Client;
use crate::error::Result;
pub struct DebugApi<'a> {
client: &'a Client,
}
impl<'a> DebugApi<'a> {
pub(crate) fn new(client: &'a Client) -> Self {
Self { client }
}
pub async fn trace_transaction(&self, tx_hash: &str) -> Result<CallFrame> {
self.trace_transaction_with_options(tx_hash, TracerOptions::call_tracer())
.await
}
pub async fn trace_transaction_with_options(
&self,
tx_hash: &str,
options: TracerOptions,
) -> Result<CallFrame> {
self.client
.rpc("debug_traceTransaction", (tx_hash, options))
.await
}
pub async fn trace_call(&self, call: &TraceCallObject, block: &str) -> Result<CallFrame> {
self.trace_call_with_options(call, block, TraceCallOptions::default())
.await
}
pub async fn trace_call_with_options(
&self,
call: &TraceCallObject,
block: &str,
options: TraceCallOptions,
) -> Result<CallFrame> {
self.client
.rpc("debug_traceCall", (call, block, options))
.await
}
pub async fn trace_block_by_hash(&self, block_hash: &str) -> Result<Vec<BlockTrace>> {
self.trace_block_by_hash_with_options(block_hash, TracerOptions::call_tracer())
.await
}
pub async fn trace_block_by_hash_with_options(
&self,
block_hash: &str,
options: TracerOptions,
) -> Result<Vec<BlockTrace>> {
self.client
.rpc("debug_traceBlockByHash", (block_hash, options))
.await
}
pub async fn trace_block_by_number(&self, block_number: &str) -> Result<Vec<BlockTrace>> {
self.trace_block_by_number_with_options(block_number, TracerOptions::call_tracer())
.await
}
pub async fn trace_block_by_number_with_options(
&self,
block_number: &str,
options: TracerOptions,
) -> Result<Vec<BlockTrace>> {
self.client
.rpc("debug_traceBlockByNumber", (block_number, options))
.await
}
pub async fn get_raw_block(&self, block: &str) -> Result<String> {
self.client.rpc("debug_getRawBlock", vec![block]).await
}
pub async fn get_raw_header(&self, block: &str) -> Result<String> {
self.client.rpc("debug_getRawHeader", vec![block]).await
}
pub async fn get_raw_receipts(&self, block: &str) -> Result<Vec<String>> {
self.client.rpc("debug_getRawReceipts", vec![block]).await
}
}