From 4889c35675f9150fe11ed63cd7be7bfae94e6976 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien?= <3535019+leruaa@users.noreply.github.com> Date: Mon, 10 Feb 2025 18:04:28 +0100 Subject: [PATCH] feat: add operator fee params on RPC L1BlockInfo (#14269) Co-authored-by: Matthias Seitz --- Cargo.lock | 26 +++++++++++---------- Cargo.toml | 12 +++++----- crates/optimism/evm/src/l1.rs | 27 ++++++++++++++++++++++ crates/optimism/rpc/src/eth/receipt.rs | 32 ++++++++++++++++++++++++++ 4 files changed, 79 insertions(+), 18 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9409d042850c8..c8480799141e7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5481,9 +5481,9 @@ checksum = "b410bbe7e14ab526a0e86877eb47c6996a2bd7746f027ba551028c925390e4e9" [[package]] name = "op-alloy-consensus" -version = "0.10.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1363dd2454f473e2a2a6ee5eda585ecf94209319e35529bd703ddc5072798eb4" +checksum = "23f7ff02e5f3ba62c8dd5d9a630c818f50147bca7b0d78e89de59ed46b5d02e1" dependencies = [ "alloy-consensus", "alloy-eips", @@ -5499,15 +5499,15 @@ dependencies = [ [[package]] name = "op-alloy-flz" -version = "0.10.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3419796a04a6bcc4752b9ba26b89d6ba4d46d7b69476ddcac3692aa44a558574" +checksum = "740324977f089db5b2cd96975260308c3f52daeaa103570995211748d282e560" [[package]] name = "op-alloy-network" -version = "0.10.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc2e8a7501b1e9c0e83bde80b5b9866bf4418caceaf64d919bd608b66ecaa16" +checksum = "eab4dd4e260be40a7ab8debf5300baf1f02f1d2a6e0c1ab5741732d612de7d6e" dependencies = [ "alloy-consensus", "alloy-network", @@ -5520,9 +5520,9 @@ dependencies = [ [[package]] name = "op-alloy-rpc-jsonrpsee" -version = "0.10.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd3f3b1b0decc0be5d766144df2b8297b22fada5b4a1bcbafa76f0aec7ac5d24" +checksum = "725e79490887d768e5f22badf93d8c8d12349aca6db63a050acb3472f2535e6c" dependencies = [ "alloy-primitives", "jsonrpsee", @@ -5530,9 +5530,9 @@ dependencies = [ [[package]] name = "op-alloy-rpc-types" -version = "0.10.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77979abf2b8b2be8996da3b434b09d770edbcceccd59251c3373ef553e743cf0" +checksum = "9ed9af4583c4b3ea93f54092ebfe41172974de2042672e9850500f4d1f99844e" dependencies = [ "alloy-consensus", "alloy-eips", @@ -5548,14 +5548,16 @@ dependencies = [ [[package]] name = "op-alloy-rpc-types-engine" -version = "0.10.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2e4fe1929b0e39130da37cb975c98d70418904ba7991a061799ad971dbd09fe" +checksum = "20120c629465e52e5cdb0ac8df0ba45e184b456fcd55d17ea9ec1247d6968bb4" dependencies = [ + "alloy-consensus", "alloy-eips", "alloy-primitives", "alloy-rpc-types-engine", "alloy-serde", + "derive_more", "ethereum_ssz", "op-alloy-consensus", "serde", diff --git a/Cargo.toml b/Cargo.toml index f0c7ef2b8bb21..d2a4268590f1a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -468,12 +468,12 @@ alloy-transport-ipc = { version = "0.11.0", default-features = false } alloy-transport-ws = { version = "0.11.0", default-features = false } # op -op-alloy-rpc-types = { version = "0.10.0", default-features = false } -op-alloy-rpc-types-engine = { version = "0.10.0", default-features = false } -op-alloy-network = { version = "0.10.0", default-features = false } -op-alloy-consensus = { version = "0.10.0", default-features = false } -op-alloy-flz = { version = "0.10.0", default-features = false } -op-alloy-rpc-jsonrpsee = { version = "0.10.0", default-features = false } +op-alloy-rpc-types = { version = "0.10.3", default-features = false } +op-alloy-rpc-types-engine = { version = "0.10.3", default-features = false } +op-alloy-network = { version = "0.10.3", default-features = false } +op-alloy-consensus = { version = "0.10.3", default-features = false } +op-alloy-flz = { version = "0.10.3", default-features = false } +op-alloy-rpc-jsonrpsee = { version = "0.10.3", default-features = false } # misc aquamarine = "0.6" diff --git a/crates/optimism/evm/src/l1.rs b/crates/optimism/evm/src/l1.rs index d2c482640c099..6da2422dee4b8 100644 --- a/crates/optimism/evm/src/l1.rs +++ b/crates/optimism/evm/src/l1.rs @@ -445,4 +445,31 @@ mod tests { assert_eq!(l1_block_info.l1_blob_base_fee, l1_blob_base_fee); assert_eq!(l1_block_info.l1_blob_base_fee_scalar, l1_blob_base_fee_scalar); } + + #[test] + fn parse_l1_info_isthmus() { + // rig + + // L1 block info from a devnet with Isthmus activated + const DATA: &[u8] = &hex!("098999be00000558000c5fc500000000000000030000000067a9f765000000000000002900000000000000000000000000000000000000000000000000000000006a6d09000000000000000000000000000000000000000000000000000000000000000172fcc8e8886636bdbe96ba0e4baab67ea7e7811633f52b52e8cf7a5123213b6f000000000000000000000000d3f2c5afb2d76f5579f326b0cd7da5f5a4126c3500004e2000000000000001f4"); + + // expected l1 block info verified against expected l1 fee and operator fee for tx. + let l1_base_fee = U256::from(6974729); + let l1_base_fee_scalar = U256::from(1368); + let l1_blob_base_fee = Some(U256::from(1)); + let l1_blob_base_fee_scalar = Some(U256::from(810949)); + let operator_fee_scalar = Some(U256::from(20000)); + let operator_fee_constant = Some(U256::from(500)); + + // test + + let l1_block_info = parse_l1_info(DATA).unwrap(); + + assert_eq!(l1_block_info.l1_base_fee, l1_base_fee); + assert_eq!(l1_block_info.l1_base_fee_scalar, l1_base_fee_scalar); + assert_eq!(l1_block_info.l1_blob_base_fee, l1_blob_base_fee); + assert_eq!(l1_block_info.l1_blob_base_fee_scalar, l1_blob_base_fee_scalar); + assert_eq!(l1_block_info.operator_fee_scalar, operator_fee_scalar); + assert_eq!(l1_block_info.operator_fee_constant, operator_fee_constant); + } } diff --git a/crates/optimism/rpc/src/eth/receipt.rs b/crates/optimism/rpc/src/eth/receipt.rs index 7f12d25951845..064fcf0eef58c 100644 --- a/crates/optimism/rpc/src/eth/receipt.rs +++ b/crates/optimism/rpc/src/eth/receipt.rs @@ -85,6 +85,10 @@ pub struct OpReceiptFieldsBuilder { pub l1_blob_base_fee: Option, /// The current L1 blob base fee scalar. pub l1_blob_base_fee_scalar: Option, + /// The current operator fee scalar. + pub operator_fee_scalar: Option, + /// The current L1 blob base fee scalar. + pub operator_fee_constant: Option, } impl OpReceiptFieldsBuilder { @@ -102,6 +106,8 @@ impl OpReceiptFieldsBuilder { l1_base_fee_scalar: None, l1_blob_base_fee: None, l1_blob_base_fee_scalar: None, + operator_fee_scalar: None, + operator_fee_constant: None, } } @@ -139,6 +145,10 @@ impl OpReceiptFieldsBuilder { self.l1_blob_base_fee = l1_block_info.l1_blob_base_fee.map(|fee| fee.saturating_to()); self.l1_blob_base_fee_scalar = l1_block_info.l1_blob_base_fee_scalar.map(|scalar| scalar.saturating_to()); + self.operator_fee_scalar = + l1_block_info.operator_fee_scalar.map(|scalar| scalar.saturating_to()); + self.operator_fee_constant = + l1_block_info.operator_fee_constant.map(|constant| constant.saturating_to()); Ok(self) } @@ -169,6 +179,8 @@ impl OpReceiptFieldsBuilder { l1_base_fee_scalar, l1_blob_base_fee, l1_blob_base_fee_scalar, + operator_fee_scalar, + operator_fee_constant, } = self; OpTransactionReceiptFields { @@ -180,6 +192,8 @@ impl OpReceiptFieldsBuilder { l1_base_fee_scalar, l1_blob_base_fee, l1_blob_base_fee_scalar, + operator_fee_scalar, + operator_fee_constant, }, deposit_nonce, deposit_receipt_version, @@ -282,6 +296,8 @@ mod test { l1_base_fee_scalar: Some(5227), l1_blob_base_fee: Some(1), l1_blob_base_fee_scalar: Some(1014213), + operator_fee_scalar: None, + operator_fee_constant: None, }, deposit_nonce: None, deposit_receipt_version: None, @@ -323,6 +339,8 @@ mod test { l1_base_fee_scalar, l1_blob_base_fee, l1_blob_base_fee_scalar, + operator_fee_scalar, + operator_fee_constant, } = receipt_meta.l1_block_info; assert_eq!( @@ -356,6 +374,16 @@ mod test { TX_META_TX_1_OP_MAINNET_BLOCK_124665056.l1_block_info.l1_blob_base_fee_scalar, "incorrect l1 blob base fee scalar" ); + assert_eq!( + operator_fee_scalar, + TX_META_TX_1_OP_MAINNET_BLOCK_124665056.l1_block_info.operator_fee_scalar, + "incorrect operator fee scalar" + ); + assert_eq!( + operator_fee_constant, + TX_META_TX_1_OP_MAINNET_BLOCK_124665056.l1_block_info.operator_fee_constant, + "incorrect operator fee constant" + ); } // @@ -389,6 +417,8 @@ mod test { l1_base_fee_scalar, l1_blob_base_fee, l1_blob_base_fee_scalar, + operator_fee_scalar, + operator_fee_constant, } = receipt_meta.l1_block_info; assert_eq!(l1_gas_price, Some(14121491676), "incorrect l1 base fee (former gas price)"); @@ -398,5 +428,7 @@ mod test { assert_eq!(l1_base_fee_scalar, Some(2269), "incorrect l1 base fee scalar"); assert_eq!(l1_blob_base_fee, Some(1324954204), "incorrect l1 blob base fee"); assert_eq!(l1_blob_base_fee_scalar, Some(1055762), "incorrect l1 blob base fee scalar"); + assert_eq!(operator_fee_scalar, None, "incorrect operator fee scalar"); + assert_eq!(operator_fee_constant, None, "incorrect operator fee constant"); } }