11use std:: { str:: FromStr , sync:: Arc } ;
22
33use crate :: {
4- abi:: gas_price_oracle_abi:: GasPriceOracle , calc_blob_basefee, external_sign:: ExternalSign , metrics:: ORACLE_SERVICE_METRICS , signer:: send_transaction, OracleError
4+ abi:: gas_price_oracle_abi:: GasPriceOracle , external_sign:: ExternalSign ,
5+ metrics:: ORACLE_SERVICE_METRICS , signer:: send_transaction, OracleError ,
56} ;
67use ethers:: prelude:: * ;
78use eyre:: anyhow;
@@ -210,8 +211,14 @@ async fn query_l1_base_fee(
210211 } ) ?;
211212
212213 let l1_base_fee = latest_block. base_fee_per_gas . unwrap_or_default ( ) ;
213- let excess_blob_gas = latest_block. excess_blob_gas . unwrap_or_default ( ) ;
214- let latest_blob_fee = calc_blob_basefee ( excess_blob_gas. as_u64 ( ) ) ;
214+
215+ // Use the Blob blobBaseFee provided by the L1 node.
216+ // We no longer compute it locally (e.g. via `calc_blob_basefee`) to avoid
217+ // depending on future L1 config changes.
218+ let latest_blob_fee = l1_provider
219+ . request :: < ( ) , U256 > ( "eth_blobBaseFee" , ( ) )
220+ . await
221+ . map_err ( |e| OracleError :: L1BaseFeeError ( anyhow ! ( format!( "eth_blobBaseFee: {:#?}" , e) ) ) ) ?;
215222
216223 let gas_price = match l1_provider. get_gas_price ( ) . await {
217224 Ok ( gp) => gp,
@@ -226,3 +233,15 @@ async fn query_l1_base_fee(
226233
227234 Ok ( ( l1_base_fee, U256 :: from ( latest_blob_fee) , gas_price) )
228235}
236+
237+ #[ tokio:: test]
238+ async fn test_eth_blob_base_fee ( ) -> Result < ( ) , OracleError > {
239+ let l1_provider = Provider :: < Http > :: try_from ( "https://ethereum-rpc.publicnode.com" ) . unwrap ( ) ;
240+ let blob_base_fee = l1_provider
241+ . request :: < ( ) , U256 > ( "eth_blobBaseFee" , ( ) )
242+ . await
243+ . map_err ( |e| OracleError :: L1BaseFeeError ( anyhow ! ( format!( "eth_blobBaseFee: {:#?}" , e) ) ) ) ?;
244+
245+ println ! ( "eth_blobBaseFee: {:?}" , blob_base_fee) ;
246+ Ok ( ( ) )
247+ }
0 commit comments