cast/cmd/
da_estimate.rs
1use alloy_consensus::BlockHeader;
4use alloy_network::eip2718::Encodable2718;
5use alloy_provider::Provider;
6use alloy_rpc_types::BlockId;
7use clap::Parser;
8use foundry_cli::{
9 opts::RpcOpts,
10 utils::{self, LoadConfig},
11};
12use op_alloy_consensus::OpTxEnvelope;
13
14#[derive(Debug, Parser)]
16pub struct DAEstimateArgs {
17 pub block: BlockId,
19 #[command(flatten)]
20 pub rpc: RpcOpts,
21}
22
23impl DAEstimateArgs {
24 pub async fn run(self) -> eyre::Result<()> {
26 let Self { block, rpc } = self;
27 let config = rpc.load_config()?;
28 let provider = utils::get_provider(&config)?;
29 let block = provider
30 .get_block(block)
31 .full()
32 .await?
33 .ok_or_else(|| eyre::eyre!("Block not found"))?;
34
35 let block_number = block.header.number();
36 let tx_count = block.transactions.len();
37 let mut da_estimate = 0;
38 for tx in block.into_transactions_iter() {
39 let tx = OpTxEnvelope::try_from(tx)?;
41 da_estimate += op_alloy_flz::tx_estimated_size_fjord(&tx.encoded_2718());
42 }
43
44 sh_println!("Estimated data availability size for block {block_number} with {tx_count} transactions: {da_estimate}")?;
45
46 Ok(())
47 }
48}