feat: add operator fee params on RPC L1BlockInfo (#14269)

Co-authored-by: Matthias Seitz <matthias.seitz@outlook.de>
This commit is contained in:
Aurélien
2025-02-10 18:04:28 +01:00
committed by GitHub
parent b9b519344f
commit d4e37ce4b6
4 changed files with 79 additions and 18 deletions

26
Cargo.lock generated
View File

@ -5481,9 +5481,9 @@ checksum = "b410bbe7e14ab526a0e86877eb47c6996a2bd7746f027ba551028c925390e4e9"
[[package]] [[package]]
name = "op-alloy-consensus" name = "op-alloy-consensus"
version = "0.10.2" version = "0.10.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1363dd2454f473e2a2a6ee5eda585ecf94209319e35529bd703ddc5072798eb4" checksum = "23f7ff02e5f3ba62c8dd5d9a630c818f50147bca7b0d78e89de59ed46b5d02e1"
dependencies = [ dependencies = [
"alloy-consensus", "alloy-consensus",
"alloy-eips", "alloy-eips",
@ -5499,15 +5499,15 @@ dependencies = [
[[package]] [[package]]
name = "op-alloy-flz" name = "op-alloy-flz"
version = "0.10.2" version = "0.10.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3419796a04a6bcc4752b9ba26b89d6ba4d46d7b69476ddcac3692aa44a558574" checksum = "740324977f089db5b2cd96975260308c3f52daeaa103570995211748d282e560"
[[package]] [[package]]
name = "op-alloy-network" name = "op-alloy-network"
version = "0.10.2" version = "0.10.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9fc2e8a7501b1e9c0e83bde80b5b9866bf4418caceaf64d919bd608b66ecaa16" checksum = "eab4dd4e260be40a7ab8debf5300baf1f02f1d2a6e0c1ab5741732d612de7d6e"
dependencies = [ dependencies = [
"alloy-consensus", "alloy-consensus",
"alloy-network", "alloy-network",
@ -5520,9 +5520,9 @@ dependencies = [
[[package]] [[package]]
name = "op-alloy-rpc-jsonrpsee" name = "op-alloy-rpc-jsonrpsee"
version = "0.10.2" version = "0.10.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cd3f3b1b0decc0be5d766144df2b8297b22fada5b4a1bcbafa76f0aec7ac5d24" checksum = "725e79490887d768e5f22badf93d8c8d12349aca6db63a050acb3472f2535e6c"
dependencies = [ dependencies = [
"alloy-primitives", "alloy-primitives",
"jsonrpsee", "jsonrpsee",
@ -5530,9 +5530,9 @@ dependencies = [
[[package]] [[package]]
name = "op-alloy-rpc-types" name = "op-alloy-rpc-types"
version = "0.10.2" version = "0.10.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77979abf2b8b2be8996da3b434b09d770edbcceccd59251c3373ef553e743cf0" checksum = "9ed9af4583c4b3ea93f54092ebfe41172974de2042672e9850500f4d1f99844e"
dependencies = [ dependencies = [
"alloy-consensus", "alloy-consensus",
"alloy-eips", "alloy-eips",
@ -5548,14 +5548,16 @@ dependencies = [
[[package]] [[package]]
name = "op-alloy-rpc-types-engine" name = "op-alloy-rpc-types-engine"
version = "0.10.2" version = "0.10.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b2e4fe1929b0e39130da37cb975c98d70418904ba7991a061799ad971dbd09fe" checksum = "20120c629465e52e5cdb0ac8df0ba45e184b456fcd55d17ea9ec1247d6968bb4"
dependencies = [ dependencies = [
"alloy-consensus",
"alloy-eips", "alloy-eips",
"alloy-primitives", "alloy-primitives",
"alloy-rpc-types-engine", "alloy-rpc-types-engine",
"alloy-serde", "alloy-serde",
"derive_more",
"ethereum_ssz", "ethereum_ssz",
"op-alloy-consensus", "op-alloy-consensus",
"serde", "serde",

View File

@ -468,12 +468,12 @@ alloy-transport-ipc = { version = "0.11.0", default-features = false }
alloy-transport-ws = { version = "0.11.0", default-features = false } alloy-transport-ws = { version = "0.11.0", default-features = false }
# op # op
op-alloy-rpc-types = { 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.0", default-features = false } op-alloy-rpc-types-engine = { version = "0.10.3", default-features = false }
op-alloy-network = { version = "0.10.0", default-features = false } op-alloy-network = { version = "0.10.3", default-features = false }
op-alloy-consensus = { version = "0.10.0", default-features = false } op-alloy-consensus = { version = "0.10.3", default-features = false }
op-alloy-flz = { version = "0.10.0", default-features = false } op-alloy-flz = { version = "0.10.3", default-features = false }
op-alloy-rpc-jsonrpsee = { version = "0.10.0", default-features = false } op-alloy-rpc-jsonrpsee = { version = "0.10.3", default-features = false }
# misc # misc
aquamarine = "0.6" aquamarine = "0.6"

View File

@ -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, l1_blob_base_fee);
assert_eq!(l1_block_info.l1_blob_base_fee_scalar, l1_blob_base_fee_scalar); 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);
}
} }

View File

@ -85,6 +85,10 @@ pub struct OpReceiptFieldsBuilder {
pub l1_blob_base_fee: Option<u128>, pub l1_blob_base_fee: Option<u128>,
/// The current L1 blob base fee scalar. /// The current L1 blob base fee scalar.
pub l1_blob_base_fee_scalar: Option<u128>, pub l1_blob_base_fee_scalar: Option<u128>,
/// The current operator fee scalar.
pub operator_fee_scalar: Option<u128>,
/// The current L1 blob base fee scalar.
pub operator_fee_constant: Option<u128>,
} }
impl OpReceiptFieldsBuilder { impl OpReceiptFieldsBuilder {
@ -102,6 +106,8 @@ impl OpReceiptFieldsBuilder {
l1_base_fee_scalar: None, l1_base_fee_scalar: None,
l1_blob_base_fee: None, l1_blob_base_fee: None,
l1_blob_base_fee_scalar: 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 = l1_block_info.l1_blob_base_fee.map(|fee| fee.saturating_to());
self.l1_blob_base_fee_scalar = self.l1_blob_base_fee_scalar =
l1_block_info.l1_blob_base_fee_scalar.map(|scalar| scalar.saturating_to()); 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) Ok(self)
} }
@ -169,6 +179,8 @@ impl OpReceiptFieldsBuilder {
l1_base_fee_scalar, l1_base_fee_scalar,
l1_blob_base_fee, l1_blob_base_fee,
l1_blob_base_fee_scalar, l1_blob_base_fee_scalar,
operator_fee_scalar,
operator_fee_constant,
} = self; } = self;
OpTransactionReceiptFields { OpTransactionReceiptFields {
@ -180,6 +192,8 @@ impl OpReceiptFieldsBuilder {
l1_base_fee_scalar, l1_base_fee_scalar,
l1_blob_base_fee, l1_blob_base_fee,
l1_blob_base_fee_scalar, l1_blob_base_fee_scalar,
operator_fee_scalar,
operator_fee_constant,
}, },
deposit_nonce, deposit_nonce,
deposit_receipt_version, deposit_receipt_version,
@ -282,6 +296,8 @@ mod test {
l1_base_fee_scalar: Some(5227), l1_base_fee_scalar: Some(5227),
l1_blob_base_fee: Some(1), l1_blob_base_fee: Some(1),
l1_blob_base_fee_scalar: Some(1014213), l1_blob_base_fee_scalar: Some(1014213),
operator_fee_scalar: None,
operator_fee_constant: None,
}, },
deposit_nonce: None, deposit_nonce: None,
deposit_receipt_version: None, deposit_receipt_version: None,
@ -323,6 +339,8 @@ mod test {
l1_base_fee_scalar, l1_base_fee_scalar,
l1_blob_base_fee, l1_blob_base_fee,
l1_blob_base_fee_scalar, l1_blob_base_fee_scalar,
operator_fee_scalar,
operator_fee_constant,
} = receipt_meta.l1_block_info; } = receipt_meta.l1_block_info;
assert_eq!( assert_eq!(
@ -356,6 +374,16 @@ mod test {
TX_META_TX_1_OP_MAINNET_BLOCK_124665056.l1_block_info.l1_blob_base_fee_scalar, TX_META_TX_1_OP_MAINNET_BLOCK_124665056.l1_block_info.l1_blob_base_fee_scalar,
"incorrect 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"
);
} }
// <https://github.com/paradigmxyz/reth/issues/12177> // <https://github.com/paradigmxyz/reth/issues/12177>
@ -389,6 +417,8 @@ mod test {
l1_base_fee_scalar, l1_base_fee_scalar,
l1_blob_base_fee, l1_blob_base_fee,
l1_blob_base_fee_scalar, l1_blob_base_fee_scalar,
operator_fee_scalar,
operator_fee_constant,
} = receipt_meta.l1_block_info; } = receipt_meta.l1_block_info;
assert_eq!(l1_gas_price, Some(14121491676), "incorrect l1 base fee (former gas price)"); 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_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, Some(1324954204), "incorrect l1 blob base fee");
assert_eq!(l1_blob_base_fee_scalar, Some(1055762), "incorrect l1 blob base fee scalar"); 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");
} }
} }