From b6c79ce968060a8eb953986edf772f5c3102aef8 Mon Sep 17 00:00:00 2001 From: Solar Mithril Date: Thu, 22 May 2025 15:19:02 +0600 Subject: [PATCH] Custom Engine API support + engine call propagation --- Cargo.lock | 246 +++---- Cargo.toml | 97 +-- Makefile | 6 +- crates/op-rbuilder/Cargo.toml | 13 +- crates/op-rbuilder/src/args/op.rs | 169 ++++- crates/op-rbuilder/src/lib.rs | 3 + crates/op-rbuilder/src/main.rs | 13 +- .../src/primitives/reth/engine_api_builder.rs | 630 ++++++++++++++++++ crates/op-rbuilder/src/primitives/reth/mod.rs | 1 + crates/op-rbuilder/src/traits.rs | 20 +- engine-peers.example.toml | 15 + 11 files changed, 1035 insertions(+), 178 deletions(-) create mode 100644 crates/op-rbuilder/src/primitives/reth/engine_api_builder.rs create mode 100644 engine-peers.example.toml diff --git a/Cargo.lock b/Cargo.lock index 23614dfb..21b87e22 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -417,6 +417,7 @@ dependencies = [ "alloy-primitives", "alloy-pubsub", "alloy-rpc-client", + "alloy-rpc-types-engine", "alloy-rpc-types-eth", "alloy-rpc-types-txpool", "alloy-signer", @@ -5503,6 +5504,7 @@ dependencies = [ "alloy-serde", "alloy-transport", "alloy-transport-http", + "anyhow", "async-trait", "chrono", "clap", @@ -5513,6 +5515,7 @@ dependencies = [ "futures-util", "http", "jsonrpsee 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", + "jsonrpsee-core 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", "jsonrpsee-types 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", "metrics", "moka", @@ -5537,6 +5540,7 @@ dependencies = [ "reth-network-peers", "reth-node-api", "reth-node-builder", + "reth-node-core", "reth-node-ethereum", "reth-optimism-chainspec", "reth-optimism-cli", @@ -5556,8 +5560,12 @@ dependencies = [ "reth-primitives-traits", "reth-provider", "reth-revm", + "reth-rpc-api", + "reth-rpc-engine-api", "reth-rpc-eth-types", "reth-rpc-layer", + "reth-storage-api", + "reth-tasks", "reth-testing-utils", "reth-transaction-pool", "reth-trie", @@ -5569,12 +5577,14 @@ dependencies = [ "serde_with", "serde_yaml", "shellexpand", + "tempfile", "thiserror 1.0.69", "tikv-jemallocator", "time", "tokio", "tokio-tungstenite", "tokio-util", + "toml", "tower 0.5.2", "tracing", "tracing-subscriber 0.3.19", @@ -6595,7 +6605,7 @@ dependencies = [ [[package]] name = "reth" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-rpc-types", "aquamarine", @@ -6641,7 +6651,7 @@ dependencies = [ [[package]] name = "reth-basic-payload-builder" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-eips", @@ -6665,7 +6675,7 @@ dependencies = [ [[package]] name = "reth-chain-state" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-eips", @@ -6696,7 +6706,7 @@ dependencies = [ [[package]] name = "reth-chainspec" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-chains", "alloy-consensus", @@ -6716,7 +6726,7 @@ dependencies = [ [[package]] name = "reth-cli" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-genesis", "clap", @@ -6730,7 +6740,7 @@ dependencies = [ [[package]] name = "reth-cli-commands" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "ahash", "alloy-chains", @@ -6801,7 +6811,7 @@ dependencies = [ [[package]] name = "reth-cli-runner" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "reth-tasks", "tokio", @@ -6811,7 +6821,7 @@ dependencies = [ [[package]] name = "reth-cli-util" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-eips", "alloy-primitives", @@ -6829,7 +6839,7 @@ dependencies = [ [[package]] name = "reth-codecs" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-eips", @@ -6849,7 +6859,7 @@ dependencies = [ [[package]] name = "reth-codecs-derive" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "convert_case", "proc-macro2", @@ -6860,7 +6870,7 @@ dependencies = [ [[package]] name = "reth-config" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "eyre", "humantime-serde", @@ -6874,7 +6884,7 @@ dependencies = [ [[package]] name = "reth-consensus" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -6887,7 +6897,7 @@ dependencies = [ [[package]] name = "reth-consensus-common" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-eips", @@ -6899,7 +6909,7 @@ dependencies = [ [[package]] name = "reth-consensus-debug-client" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-eips", @@ -6923,7 +6933,7 @@ dependencies = [ [[package]] name = "reth-db" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-primitives", "derive_more", @@ -6949,7 +6959,7 @@ dependencies = [ [[package]] name = "reth-db-api" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-genesis", @@ -6977,7 +6987,7 @@ dependencies = [ [[package]] name = "reth-db-common" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-genesis", @@ -7006,7 +7016,7 @@ dependencies = [ [[package]] name = "reth-db-models" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-eips", "alloy-primitives", @@ -7021,7 +7031,7 @@ dependencies = [ [[package]] name = "reth-discv4" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -7047,7 +7057,7 @@ dependencies = [ [[package]] name = "reth-discv5" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -7071,7 +7081,7 @@ dependencies = [ [[package]] name = "reth-dns-discovery" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-primitives", "data-encoding", @@ -7095,7 +7105,7 @@ dependencies = [ [[package]] name = "reth-downloaders" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7125,7 +7135,7 @@ dependencies = [ [[package]] name = "reth-ecies" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "aes", "alloy-primitives", @@ -7156,7 +7166,7 @@ dependencies = [ [[package]] name = "reth-engine-local" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -7187,7 +7197,7 @@ dependencies = [ [[package]] name = "reth-engine-primitives" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -7211,7 +7221,7 @@ dependencies = [ [[package]] name = "reth-engine-service" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "futures", "pin-project", @@ -7234,7 +7244,7 @@ dependencies = [ [[package]] name = "reth-engine-tree" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7281,7 +7291,7 @@ dependencies = [ [[package]] name = "reth-engine-util" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-rpc-types-engine", @@ -7308,7 +7318,7 @@ dependencies = [ [[package]] name = "reth-era" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7324,7 +7334,7 @@ dependencies = [ [[package]] name = "reth-era-downloader" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-primitives", "bytes", @@ -7339,7 +7349,7 @@ dependencies = [ [[package]] name = "reth-era-utils" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-primitives", "eyre", @@ -7359,7 +7369,7 @@ dependencies = [ [[package]] name = "reth-errors" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "reth-consensus", "reth-execution-errors", @@ -7370,7 +7380,7 @@ dependencies = [ [[package]] name = "reth-eth-wire" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-chains", "alloy-primitives", @@ -7398,7 +7408,7 @@ dependencies = [ [[package]] name = "reth-eth-wire-types" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-chains", "alloy-consensus", @@ -7419,7 +7429,7 @@ dependencies = [ [[package]] name = "reth-ethereum-cli" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7478,7 +7488,7 @@ dependencies = [ [[package]] name = "reth-ethereum-consensus" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7494,7 +7504,7 @@ dependencies = [ [[package]] name = "reth-ethereum-engine-primitives" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-eips", "alloy-primitives", @@ -7512,7 +7522,7 @@ dependencies = [ [[package]] name = "reth-ethereum-forks" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-eip2124", "alloy-hardforks", @@ -7525,7 +7535,7 @@ dependencies = [ [[package]] name = "reth-ethereum-payload-builder" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7552,7 +7562,7 @@ dependencies = [ [[package]] name = "reth-ethereum-primitives" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7570,7 +7580,7 @@ dependencies = [ [[package]] name = "reth-etl" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "rayon", "reth-db-api", @@ -7580,7 +7590,7 @@ dependencies = [ [[package]] name = "reth-evm" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7603,7 +7613,7 @@ dependencies = [ [[package]] name = "reth-evm-ethereum" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7621,7 +7631,7 @@ dependencies = [ [[package]] name = "reth-execution-errors" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-evm", "alloy-primitives", @@ -7634,7 +7644,7 @@ dependencies = [ [[package]] name = "reth-execution-types" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7652,7 +7662,7 @@ dependencies = [ [[package]] name = "reth-exex" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7690,7 +7700,7 @@ dependencies = [ [[package]] name = "reth-exex-types" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-eips", "alloy-primitives", @@ -7704,7 +7714,7 @@ dependencies = [ [[package]] name = "reth-fs-util" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "serde", "serde_json", @@ -7714,7 +7724,7 @@ dependencies = [ [[package]] name = "reth-invalid-block-hooks" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -7742,7 +7752,7 @@ dependencies = [ [[package]] name = "reth-ipc" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "bytes", "futures", @@ -7762,7 +7772,7 @@ dependencies = [ [[package]] name = "reth-libmdbx" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "bitflags 2.9.0", "byteorder", @@ -7779,7 +7789,7 @@ dependencies = [ [[package]] name = "reth-mdbx-sys" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "bindgen 0.70.1", "cc", @@ -7788,7 +7798,7 @@ dependencies = [ [[package]] name = "reth-metrics" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "futures", "metrics", @@ -7800,7 +7810,7 @@ dependencies = [ [[package]] name = "reth-net-banlist" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-primitives", ] @@ -7808,7 +7818,7 @@ dependencies = [ [[package]] name = "reth-net-nat" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "futures-util", "if-addrs", @@ -7822,7 +7832,7 @@ dependencies = [ [[package]] name = "reth-network" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7877,7 +7887,7 @@ dependencies = [ [[package]] name = "reth-network-api" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-primitives", "alloy-rpc-types-admin", @@ -7900,7 +7910,7 @@ dependencies = [ [[package]] name = "reth-network-p2p" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7922,7 +7932,7 @@ dependencies = [ [[package]] name = "reth-network-peers" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -7937,7 +7947,7 @@ dependencies = [ [[package]] name = "reth-network-types" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-eip2124", "humantime-serde", @@ -7951,7 +7961,7 @@ dependencies = [ [[package]] name = "reth-nippy-jar" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "anyhow", "bincode", @@ -7968,7 +7978,7 @@ dependencies = [ [[package]] name = "reth-node-api" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-rpc-types-engine", "eyre", @@ -7992,7 +8002,7 @@ dependencies = [ [[package]] name = "reth-node-builder" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8057,7 +8067,7 @@ dependencies = [ [[package]] name = "reth-node-core" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8107,7 +8117,7 @@ dependencies = [ [[package]] name = "reth-node-ethereum" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-eips", "alloy-rpc-types-engine", @@ -8143,7 +8153,7 @@ dependencies = [ [[package]] name = "reth-node-events" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8167,7 +8177,7 @@ dependencies = [ [[package]] name = "reth-node-metrics" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "eyre", "http", @@ -8188,7 +8198,7 @@ dependencies = [ [[package]] name = "reth-node-types" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "reth-chainspec", "reth-db-api", @@ -8201,7 +8211,7 @@ dependencies = [ [[package]] name = "reth-optimism-chainspec" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-chains", "alloy-consensus", @@ -8228,7 +8238,7 @@ dependencies = [ [[package]] name = "reth-optimism-cli" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8275,7 +8285,7 @@ dependencies = [ [[package]] name = "reth-optimism-consensus" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8300,7 +8310,7 @@ dependencies = [ [[package]] name = "reth-optimism-evm" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8325,7 +8335,7 @@ dependencies = [ [[package]] name = "reth-optimism-forks" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-op-hardforks", "alloy-primitives", @@ -8336,7 +8346,7 @@ dependencies = [ [[package]] name = "reth-optimism-node" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -8382,7 +8392,7 @@ dependencies = [ [[package]] name = "reth-optimism-payload-builder" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8421,7 +8431,7 @@ dependencies = [ [[package]] name = "reth-optimism-primitives" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8441,7 +8451,7 @@ dependencies = [ [[package]] name = "reth-optimism-rpc" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8499,7 +8509,7 @@ dependencies = [ [[package]] name = "reth-optimism-txpool" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8535,7 +8545,7 @@ dependencies = [ [[package]] name = "reth-payload-builder" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-rpc-types", @@ -8555,7 +8565,7 @@ dependencies = [ [[package]] name = "reth-payload-builder-primitives" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "pin-project", "reth-payload-primitives", @@ -8567,7 +8577,7 @@ dependencies = [ [[package]] name = "reth-payload-primitives" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-eips", "alloy-primitives", @@ -8586,7 +8596,7 @@ dependencies = [ [[package]] name = "reth-payload-util" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -8596,7 +8606,7 @@ dependencies = [ [[package]] name = "reth-payload-validator" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-rpc-types-engine", @@ -8606,7 +8616,7 @@ dependencies = [ [[package]] name = "reth-primitives" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "c-kzg", @@ -8620,7 +8630,7 @@ dependencies = [ [[package]] name = "reth-primitives-traits" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8652,7 +8662,7 @@ dependencies = [ [[package]] name = "reth-provider" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8697,7 +8707,7 @@ dependencies = [ [[package]] name = "reth-prune" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8725,7 +8735,7 @@ dependencies = [ [[package]] name = "reth-prune-types" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-primitives", "arbitrary", @@ -8739,7 +8749,7 @@ dependencies = [ [[package]] name = "reth-ress-protocol" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -8758,7 +8768,7 @@ dependencies = [ [[package]] name = "reth-ress-provider" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -8785,7 +8795,7 @@ dependencies = [ [[package]] name = "reth-revm" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-primitives", "reth-primitives-traits", @@ -8798,7 +8808,7 @@ dependencies = [ [[package]] name = "reth-rpc" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-dyn-abi", @@ -8873,7 +8883,7 @@ dependencies = [ [[package]] name = "reth-rpc-api" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-eips", "alloy-genesis", @@ -8900,7 +8910,7 @@ dependencies = [ [[package]] name = "reth-rpc-builder" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-network", "alloy-provider", @@ -8938,7 +8948,7 @@ dependencies = [ [[package]] name = "reth-rpc-engine-api" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-eips", "alloy-primitives", @@ -8968,7 +8978,7 @@ dependencies = [ [[package]] name = "reth-rpc-eth-api" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-dyn-abi", @@ -9011,7 +9021,7 @@ dependencies = [ [[package]] name = "reth-rpc-eth-types" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-eips", @@ -9053,7 +9063,7 @@ dependencies = [ [[package]] name = "reth-rpc-layer" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-rpc-types-engine", "http", @@ -9067,7 +9077,7 @@ dependencies = [ [[package]] name = "reth-rpc-server-types" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-eips", "alloy-primitives", @@ -9083,7 +9093,7 @@ dependencies = [ [[package]] name = "reth-rpc-types-compat" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -9096,7 +9106,7 @@ dependencies = [ [[package]] name = "reth-stages" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-eips", @@ -9138,7 +9148,7 @@ dependencies = [ [[package]] name = "reth-stages-api" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-eips", "alloy-primitives", @@ -9165,7 +9175,7 @@ dependencies = [ [[package]] name = "reth-stages-types" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-primitives", "arbitrary", @@ -9179,7 +9189,7 @@ dependencies = [ [[package]] name = "reth-static-file" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-primitives", "parking_lot", @@ -9199,7 +9209,7 @@ dependencies = [ [[package]] name = "reth-static-file-types" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-primitives", "clap", @@ -9211,7 +9221,7 @@ dependencies = [ [[package]] name = "reth-storage-api" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-eips", @@ -9235,7 +9245,7 @@ dependencies = [ [[package]] name = "reth-storage-errors" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-eips", "alloy-primitives", @@ -9251,7 +9261,7 @@ dependencies = [ [[package]] name = "reth-tasks" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "auto_impl", "dyn-clone", @@ -9269,7 +9279,7 @@ dependencies = [ [[package]] name = "reth-testing-utils" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-eips", @@ -9285,7 +9295,7 @@ dependencies = [ [[package]] name = "reth-tokio-util" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "tokio", "tokio-stream", @@ -9295,7 +9305,7 @@ dependencies = [ [[package]] name = "reth-tracing" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "clap", "eyre", @@ -9310,7 +9320,7 @@ dependencies = [ [[package]] name = "reth-transaction-pool" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-eips", @@ -9348,7 +9358,7 @@ dependencies = [ [[package]] name = "reth-trie" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-eips", @@ -9373,7 +9383,7 @@ dependencies = [ [[package]] name = "reth-trie-common" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -9399,7 +9409,7 @@ dependencies = [ [[package]] name = "reth-trie-db" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-primitives", "reth-db-api", @@ -9412,7 +9422,7 @@ dependencies = [ [[package]] name = "reth-trie-parallel" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -9437,7 +9447,7 @@ dependencies = [ [[package]] name = "reth-trie-sparse" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -9455,7 +9465,7 @@ dependencies = [ [[package]] name = "reth-zstd-compressors" version = "1.4.7" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.4.7#dc7cb6e6670b0da294a0e5010e02855f5aaf6b49" +source = "git+https://github.com/paradigmxyz/reth?rev=ca9f94cc7b024e8772b048578fcbc7542af2fada#ca9f94cc7b024e8772b048578fcbc7542af2fada" dependencies = [ "zstd", ] diff --git a/Cargo.toml b/Cargo.toml index 3376461f..3a2f4356 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -40,55 +40,59 @@ codegen-units = 1 incremental = false [workspace.dependencies] -reth = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-chain-state = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-cli = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-cli-util = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-db = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-db-common = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-errors = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-payload-builder = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-node-api = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-node-ethereum = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-trie = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-trie-parallel = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-basic-payload-builder = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-node-core = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-primitives = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-primitives-traits = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-provider = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7", features = [ +reth = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-chain-state = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-cli = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-cli-util = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-db = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-db-common = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-errors = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-payload-builder = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-node-api = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-rpc-engine-api = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-node-ethereum = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-trie = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-trie-parallel = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-basic-payload-builder = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-node-core = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-primitives = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-primitives-traits = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-provider = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada", features = [ "test-utils", ] } -reth-chainspec = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-evm = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-evm-ethereum = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-execution-errors = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-exex = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-metrics = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-trie-db = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-payload-primitives = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-transaction-pool = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-execution-types = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-revm = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-payload-builder-primitives = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-payload-util = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-rpc-layer = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-network-peers = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-testing-utils = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-node-builder = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-rpc-eth-types = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } +reth-chainspec = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-storage-api = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-rpc-api = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-evm = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-evm-ethereum = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-execution-errors = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-exex = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-tasks = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-metrics = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-trie-db = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-payload-primitives = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-transaction-pool = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-execution-types = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-revm = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-payload-builder-primitives = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-payload-util = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-rpc-layer = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-network-peers = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-testing-utils = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-node-builder = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-rpc-eth-types = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } # reth optimism -reth-optimism-primitives = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-optimism-consensus = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-optimism-cli = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-optimism-forks = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-optimism-evm = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-optimism-node = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-optimism-payload-builder = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-optimism-chainspec = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-optimism-txpool = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7" } -reth-optimism-rpc = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.7", features = [ +reth-optimism-primitives = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-optimism-consensus = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-optimism-cli = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-optimism-forks = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-optimism-evm = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-optimism-node = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-optimism-payload-builder = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-optimism-chainspec = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-optimism-txpool = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada" } +reth-optimism-rpc = { git = "https://github.com/paradigmxyz/reth", rev = "ca9f94cc7b024e8772b048578fcbc7542af2fada", features = [ "client", ] } @@ -112,6 +116,7 @@ alloy-provider = { version = "1.0.9", features = [ "ipc", "pubsub", "txpool-api", + "engine-api", ] } alloy-pubsub = { version = "1.0.9" } alloy-eips = { version = "1.0.9" } @@ -148,6 +153,7 @@ thiserror = { version = "1.0.64" } eyre = { version = "0.6.12" } jsonrpsee = { version = "0.25.1" } jsonrpsee-types = { version = "0.25.1" } +jsonrpsee-core = { version = "0.25.1" } parking_lot = { version = "0.12.3" } tokio = { version = "1.40.0" } auto_impl = { version = "1.2.0" } @@ -155,6 +161,7 @@ reqwest = { version = "0.12.8" } serde = { version = "1.0.210" } serde_json = { version = "1.0.128" } serde_with = { version = "3.8.1" } +toml = { version = "0.8" } secp256k1 = { version = "0.30" } derive_more = { version = "2" } tokio-stream = "0.1.16" diff --git a/Makefile b/Makefile index 00c53c92..9f275770 100644 --- a/Makefile +++ b/Makefile @@ -58,9 +58,9 @@ lt: lint test ## Run "lint" and "test" .PHONY: fmt fmt: ## Format the code cargo +nightly fmt - cargo +nightly fix --allow-staged - cargo +nightly clippy --features "$(FEATURES)" --fix --allow-staged - cargo +nightly clippy -p op-rbuilder --features "$(FEATURES)" --fix --allow-staged + cargo +nightly clippy --features "$(FEATURES)" --fix --allow-staged --allow-dirty + cargo +nightly clippy -p op-rbuilder --features "$(FEATURES)" --fix --allow-staged --allow-dirty + cargo +nightly fix --allow-staged --allow-dirty .PHONY: bench bench: ## Run benchmarks diff --git a/crates/op-rbuilder/Cargo.toml b/crates/op-rbuilder/Cargo.toml index 1326c6be..25102e81 100644 --- a/crates/op-rbuilder/Cargo.toml +++ b/crates/op-rbuilder/Cargo.toml @@ -11,6 +11,7 @@ repository.workspace = true reth.workspace = true reth-optimism-node.workspace = true reth-optimism-cli.workspace = true +reth-optimism-rpc.workspace = true reth-optimism-chainspec.workspace = true reth-optimism-payload-builder.workspace = true reth-optimism-evm.workspace = true @@ -26,6 +27,8 @@ reth-chainspec.workspace = true reth-primitives.workspace = true reth-primitives-traits.workspace = true reth-node-api.workspace = true +reth-rpc-engine-api.workspace = true +reth-node-core.workspace = true reth-basic-payload-builder.workspace = true reth-payload-builder.workspace = true reth-node-ethereum.workspace = true @@ -43,8 +46,10 @@ reth-network-peers.workspace = true reth-testing-utils.workspace = true reth-optimism-forks.workspace = true reth-node-builder.workspace = true +reth-storage-api.workspace = true +reth-rpc-api.workspace = true reth-rpc-eth-types.workspace = true -reth-optimism-rpc.workspace = true +reth-tasks.workspace = true alloy-primitives.workspace = true alloy-consensus.workspace = true @@ -75,10 +80,12 @@ tracing.workspace = true eyre.workspace = true serde_with.workspace = true serde.workspace = true +toml.workspace = true secp256k1.workspace = true tokio.workspace = true jsonrpsee = { workspace = true } -jsonrpsee-types.workspace = true +jsonrpsee-core = { workspace = true } +jsonrpsee-types = { workspace = true } async-trait = { workspace = true } clap_builder = { workspace = true } clap.workspace = true @@ -89,6 +96,7 @@ tokio-util.workspace = true thiserror.workspace = true parking_lot.workspace = true url.workspace = true +anyhow = "1" tower = "0.5" futures = "0.3" @@ -117,6 +125,7 @@ vergen-git2.workspace = true alloy-provider = { workspace = true, default-features = true, features = [ "txpool-api", ] } +tempfile = "3.8" [features] default = ["jemalloc"] diff --git a/crates/op-rbuilder/src/args/op.rs b/crates/op-rbuilder/src/args/op.rs index d4b92e58..380e12ec 100644 --- a/crates/op-rbuilder/src/args/op.rs +++ b/crates/op-rbuilder/src/args/op.rs @@ -3,13 +3,34 @@ //! Copied from OptimismNode to allow easy extension. //! clap [Args](clap::Args) for optimism rollup configuration +use crate::{primitives::reth::engine_api_builder::EnginePeer, tx_signer::Signer}; +use alloy_rpc_types_engine::JwtSecret; +use anyhow::{anyhow, Result}; +use reth_optimism_node::args::RollupArgs; +use serde::Deserialize; use std::path::PathBuf; +use url::Url; -use crate::tx_signer::Signer; -use reth_optimism_node::args::RollupArgs; +/// Configuration structure for engine peers loaded from TOML +#[derive(Debug, Clone, Deserialize)] +pub struct EnginePeersConfig { + /// Default JWT file path used by all peers unless overridden + pub default_jwt_path: PathBuf, + /// List of engine peers + pub peers: Vec, +} + +/// Configuration for a single engine peer +#[derive(Debug, Clone, Deserialize)] +pub struct EnginePeerConfig { + /// URL of the engine peer + pub url: Url, + /// Optional JWT path override for this peer + pub jwt_path: Option, +} /// Parameters for rollup configuration -#[derive(Debug, Clone, Default, PartialEq, Eq, clap::Args)] +#[derive(Debug, Clone, Default, clap::Args)] #[command(next_help_heading = "Rollup")] pub struct OpRbuilderArgs { /// Rollup configuration @@ -38,6 +59,7 @@ pub struct OpRbuilderArgs { #[arg(long = "builder.enable-revert-protection", default_value = "false")] pub enable_revert_protection: bool, + /// Path to builder playgorund to automatically start up the node connected to it #[arg( long = "builder.playground", num_args = 0..=1, @@ -46,17 +68,19 @@ pub struct OpRbuilderArgs { env = "PLAYGROUND_DIR", )] pub playground: Option, - #[command(flatten)] pub flashblocks: FlashblocksArgs, + /// Path to TOML configuration file for engine peers + #[arg(long = "builder.engine-peers-config", env = "ENGINE_PEERS_CONFIG", value_parser = parse_engine_peers_config)] + pub engine_peers: Vec, } -fn expand_path(s: &str) -> Result { +fn expand_path(s: &str) -> Result { shellexpand::full(s) - .map_err(|e| format!("expansion error for `{s}`: {e}"))? + .map_err(|e| anyhow!("expansion error for `{s}`: {e}"))? .into_owned() .parse() - .map_err(|e| format!("invalid path after expansion: {e}")) + .map_err(|e| anyhow!("invalid path after expansion: {e}")) } /// Parameters for Flashblocks configuration @@ -101,3 +125,134 @@ pub struct FlashblocksArgs { )] pub flashblocks_block_time: u64, } + +impl EnginePeersConfig { + /// Load configuration from a TOML file + pub fn from_file(path: &PathBuf) -> Result { + let content = std::fs::read_to_string(path).map_err(|e| { + anyhow!( + "Failed to read engine peers config file {}: {}", + path.display(), + e + ) + })?; + + let config: Self = toml::from_str(&content).map_err(|e| { + anyhow!( + "Failed to parse engine peers config file {}: {}", + path.display(), + e + ) + })?; + + Ok(config) + } + + /// Convert to vector of EnginePeer instances + pub fn to_engine_peers(&self) -> Result> { + let mut engine_peers = Vec::new(); + + for peer in &self.peers { + let jwt_path = peer.jwt_path.as_ref().unwrap_or(&self.default_jwt_path); + let jwt_secret = JwtSecret::from_file(jwt_path) + .map_err(|e| anyhow!("Failed to load JWT from {}: {}", jwt_path.display(), e))?; + + engine_peers.push(EnginePeer::new(peer.url.clone(), jwt_secret)); + } + + Ok(engine_peers) + } +} + +/// Parse engine peers configuration from TOML file for clap +fn parse_engine_peers_config(s: &str) -> Result> { + let path = PathBuf::from(s); + let config = EnginePeersConfig::from_file(&path)?; + config.to_engine_peers() +} + +#[cfg(test)] +mod tests { + use super::*; + use std::io::Write; + use tempfile::NamedTempFile; + + #[test] + fn test_engine_peers_config_parsing() -> Result<()> { + // Create temporary JWT files for testing + let mut temp_default_jwt = NamedTempFile::new()?; + let mut temp_custom_jwt = NamedTempFile::new()?; + + // Write dummy JWT content (for testing purposes) + temp_default_jwt.write_all(b"dummy.jwt.token")?; + temp_custom_jwt.write_all(b"custom.jwt.token")?; + temp_default_jwt.flush()?; + temp_custom_jwt.flush()?; + + let toml_content = format!( + r#" +default_jwt_path = "{}" + +[[peers]] +url = "http://builder1.example.com:8551" + +[[peers]] +url = "http://builder2.example.com:8551" +jwt_path = "{}" +"#, + temp_default_jwt.path().display(), + temp_custom_jwt.path().display() + ); + + let config: EnginePeersConfig = toml::from_str(&toml_content)?; + + assert_eq!(config.peers.len(), 2); + + // First peer should use default JWT + assert_eq!( + config.peers[0].url.as_str(), + "http://builder1.example.com:8551" + ); + + // Second peer should have custom JWT + assert_eq!( + config.peers[1].url.as_str(), + "http://builder2.example.com:8551" + ); + + // Test that we can convert to engine peers successfully + let engine_peers = config.to_engine_peers()?; + assert_eq!(engine_peers.len(), 2); + + Ok(()) + } + + #[test] + fn test_engine_peers_config_from_file() -> Result<()> { + // Create temporary JWT file + let mut temp_jwt = NamedTempFile::new()?; + temp_jwt.write_all(b"test.jwt.token")?; + temp_jwt.flush()?; + + let toml_content = format!( + r#" +default_jwt_path = "{}" + +[[peers]] +url = "http://test.example.com:8551" +"#, + temp_jwt.path().display() + ); + + let mut temp_file = NamedTempFile::new()?; + temp_file.write_all(toml_content.as_bytes())?; + temp_file.flush()?; + + let config = EnginePeersConfig::from_file(&temp_file.path().to_path_buf())?; + + assert_eq!(config.peers.len(), 1); + assert_eq!(config.peers[0].url.as_str(), "http://test.example.com:8551"); + + Ok(()) + } +} diff --git a/crates/op-rbuilder/src/lib.rs b/crates/op-rbuilder/src/lib.rs index f377643f..2abc3a32 100644 --- a/crates/op-rbuilder/src/lib.rs +++ b/crates/op-rbuilder/src/lib.rs @@ -3,3 +3,6 @@ pub mod tx_signer; #[cfg(any(test, feature = "testing"))] pub mod tests; + +pub mod traits; +pub mod tx; diff --git a/crates/op-rbuilder/src/main.rs b/crates/op-rbuilder/src/main.rs index 969c0871..f81b6f34 100644 --- a/crates/op-rbuilder/src/main.rs +++ b/crates/op-rbuilder/src/main.rs @@ -2,9 +2,10 @@ use args::*; use builders::{BuilderConfig, BuilderMode, FlashblocksBuilder, StandardBuilder}; use core::fmt::Debug; use reth_optimism_node::{ - node::{OpAddOnsBuilder, OpPoolBuilder}, + node::{OpAddOnsBuilder, OpEngineValidatorBuilder, OpPoolBuilder}, OpNode, }; + use reth_transaction_pool::TransactionPool; /// CLI argument parsing. @@ -21,6 +22,7 @@ mod tx_signer; use metrics::VERSION; use moka::future::Cache; use monitor_tx_pool::monitor_tx_pool; +use primitives::reth::engine_api_builder::OpEngineApiBuilder; use revert_protection::{EthApiExtServer, EthApiOverrideServer, RevertProtectionExt}; use tx::FBPooledTransaction; @@ -57,6 +59,12 @@ where cli.run(|builder, builder_args| async move { let builder_config = BuilderConfig::::try_from(builder_args.clone()) .expect("Failed to convert rollup args to builder config"); + + // Engine peers from configuration + let engine_peers = builder_args.engine_peers; + + let engine_builder: OpEngineApiBuilder = + OpEngineApiBuilder::default().with_engine_peers(engine_peers); let da_config = builder_config.da_config.clone(); let rollup_args = builder_args.rollup_args; let op_node = OpNode::new(rollup_args.clone()); @@ -88,7 +96,8 @@ where .with_sequencer(rollup_args.sequencer.clone()) .with_enable_tx_conditional(rollup_args.enable_tx_conditional) .with_da_config(da_config) - .build(), + .build() + .with_engine_api(engine_builder), ) .extend_rpc_modules(move |ctx| { if builder_args.enable_revert_protection { diff --git a/crates/op-rbuilder/src/primitives/reth/engine_api_builder.rs b/crates/op-rbuilder/src/primitives/reth/engine_api_builder.rs new file mode 100644 index 00000000..bcb0b932 --- /dev/null +++ b/crates/op-rbuilder/src/primitives/reth/engine_api_builder.rs @@ -0,0 +1,630 @@ +//! RPC component builder + +use jsonrpsee_core::client::ClientT; +use reth_node_api::AddOnsContext; +use reth_node_builder::rpc::{EngineApiBuilder, EngineValidatorBuilder}; +use reth_node_core::version::{CARGO_PKG_VERSION, CLIENT_CODE, VERGEN_GIT_SHA}; +use reth_optimism_node::{OpEngineTypes, OP_NAME_CLIENT}; +use reth_optimism_rpc::engine::OP_ENGINE_CAPABILITIES; +pub use reth_optimism_rpc::OpEngineApi; +use reth_payload_builder::PayloadStore; +use reth_rpc_engine_api::EngineCapabilities; + +use crate::traits::NodeComponents; +use alloy_eips::eip7685::Requests; +use alloy_primitives::{BlockHash, B256, U64}; +use alloy_rpc_types_engine::{ + ClientVersionV1, ExecutionPayloadBodiesV1, ExecutionPayloadInputV2, ExecutionPayloadV3, + ForkchoiceState, ForkchoiceUpdated, JwtSecret, PayloadId, PayloadStatus, +}; +use jsonrpsee::proc_macros::rpc; +use jsonrpsee_core::{ + client::SubscriptionClientT, server::RpcModule, traits::ToRpcParams, RpcResult, +}; +use op_alloy_rpc_types_engine::{ + OpExecutionPayloadEnvelopeV3, OpExecutionPayloadEnvelopeV4, OpExecutionPayloadV4, + OpPayloadAttributes, ProtocolVersion, SuperchainSignal, +}; +use reth_node_api::{EngineTypes, EngineValidator}; +use reth_optimism_chainspec::OpChainSpec; +use reth_optimism_rpc::OpEngineApiServer; +use reth_rpc_api::IntoEngineApiRpcModule; +use reth_rpc_layer::AuthClientLayer; +use reth_storage_api::{BlockReader, HeaderProvider, StateProviderFactory}; +use reth_tasks::TaskExecutor; +use reth_transaction_pool::TransactionPool; +use serde::de::DeserializeOwned; +use tracing::{self, log::warn}; +use url::Url; + +/// Configuration for an engine peer with JWT authentication +#[derive(Debug, Clone)] +pub struct EnginePeer { + pub url: Url, + pub jwt: JwtSecret, +} + +impl EnginePeer { + pub fn new(url: Url, jwt_path: JwtSecret) -> Self { + Self { url, jwt: jwt_path } + } + + pub fn http_client(&self) -> impl SubscriptionClientT + Clone + Send + Sync + Unpin + 'static { + // Create a middleware that adds a new JWT token to every request. + let secret_layer = AuthClientLayer::new(self.jwt); + let middleware = tower::ServiceBuilder::default().layer(secret_layer); + jsonrpsee::http_client::HttpClientBuilder::default() + .set_http_middleware(middleware) + .build(self.url.clone()) + .expect("Failed to create http client") + } +} + +/// Builder for basic [`OpEngineApi`] implementation. +#[derive(Debug)] +pub struct OpEngineApiBuilder { + engine_validator_builder: EV, + engine_peers: Vec, +} + +impl OpEngineApiBuilder { + /// Create a new builder with engine peers configuration + pub fn with_engine_peers(mut self, engine_peers: Vec) -> Self { + self.engine_peers = engine_peers; + self + } +} + +impl Default for OpEngineApiBuilder +where + EV: Default, +{ + fn default() -> Self { + Self { + engine_validator_builder: EV::default(), + engine_peers: Vec::new(), + } + } +} + +impl EngineApiBuilder for OpEngineApiBuilder +where + N: NodeComponents, + EV: EngineValidatorBuilder, +{ + type EngineApi = OpEngineApiExt; + + async fn build_engine_api(self, ctx: &AddOnsContext<'_, N>) -> eyre::Result { + let Self { + engine_validator_builder, + engine_peers, + } = self; + + let engine_validator = engine_validator_builder.build(ctx).await?; + let client = ClientVersionV1 { + code: CLIENT_CODE, + name: OP_NAME_CLIENT.to_string(), + version: CARGO_PKG_VERSION.to_string(), + commit: VERGEN_GIT_SHA.to_string(), + }; + let inner = reth_rpc_engine_api::EngineApi::new( + ctx.node.provider().clone(), + ctx.config.chain.clone(), + ctx.beacon_engine_handle.clone(), + PayloadStore::new(ctx.node.payload_builder_handle().clone()), + ctx.node.pool().clone(), + Box::new(ctx.node.task_executor().clone()), + client, + EngineCapabilities::new(OP_ENGINE_CAPABILITIES.iter().copied()), + engine_validator, + ctx.config.engine.accept_execution_requests_hash, + ); + + Ok(OpEngineApiExt::new( + OpEngineApi::new(inner), + engine_peers, + ctx.node.task_executor().clone(), + )) + } +} + +pub struct OpEngineApiExt { + inner: OpEngineApi, + engine_peers: Vec, + task_executor: TaskExecutor, +} + +impl OpEngineApiExt +where + Provider: HeaderProvider + BlockReader + StateProviderFactory + 'static, + Pool: TransactionPool + 'static, + Validator: EngineValidator, +{ + pub fn new( + engine: OpEngineApi, + engine_peers: Vec, + task_executor: TaskExecutor, + ) -> Self { + Self { + inner: engine, + engine_peers, + task_executor, + } + } + + /// Multiplexes the given engine API call to all configured peers + async fn multiplex_engine_call< + R: DeserializeOwned, + Params: ToRpcParams + Send + Clone + 'static, + >( + &self, + method: &str, + params: Params, + ) { + let task_executor = &self.task_executor; + for peer in &self.engine_peers { + let client = peer.http_client(); + // used in log msg + let url = peer.url.clone(); + let method = method.to_string(); + let params = params.clone(); + task_executor.spawn(Box::pin(async move { + // For now, just log the multiplexing until we implement proper Alloy provider calls + let res: Result = + client.request(method.as_str(), params).await; + if let Err(err) = res { + warn!("Failed to multiplex {method} to peer {url}, error: {err}"); + } + })); + } + } +} + +#[async_trait::async_trait] +impl OpRbuilderEngineApiServer + for OpEngineApiExt +where + Provider: HeaderProvider + BlockReader + StateProviderFactory + 'static, + Pool: TransactionPool + 'static, + Validator: EngineValidator, +{ + async fn new_payload_v2(&self, payload: ExecutionPayloadInputV2) -> RpcResult { + self.inner.new_payload_v2(payload).await + } + + async fn new_payload_v3( + &self, + payload: ExecutionPayloadV3, + versioned_hashes: Vec, + parent_beacon_block_root: B256, + ) -> RpcResult { + self.inner + .new_payload_v3(payload, versioned_hashes, parent_beacon_block_root) + .await + } + + async fn new_payload_v4( + &self, + payload: OpExecutionPayloadV4, + versioned_hashes: Vec, + parent_beacon_block_root: B256, + execution_requests: Requests, + ) -> RpcResult { + self.inner + .new_payload_v4( + payload, + versioned_hashes, + parent_beacon_block_root, + execution_requests, + ) + .await + } + + async fn fork_choice_updated_v1( + &self, + fork_choice_state: ForkchoiceState, + payload_attributes: Option, + ) -> RpcResult { + self.inner + .fork_choice_updated_v1(fork_choice_state, payload_attributes) + .await + } + + async fn fork_choice_updated_v2( + &self, + fork_choice_state: ForkchoiceState, + payload_attributes: Option, + ) -> RpcResult { + // Multiplex to peers + self.multiplex_engine_call::( + "engine_rbuilder_forkchoiceUpdatedV2", + (fork_choice_state, payload_attributes.clone()), + ) + .await; + + self.inner + .fork_choice_updated_v2(fork_choice_state, payload_attributes) + .await + } + + async fn fork_choice_updated_v3( + &self, + fork_choice_state: ForkchoiceState, + payload_attributes: Option, + ) -> RpcResult { + // Multiplex to peers + self.multiplex_engine_call::( + "engine_rbuilder_forkchoiceUpdatedV3", + (fork_choice_state, payload_attributes.clone()), + ) + .await; + + self.inner + .fork_choice_updated_v3(fork_choice_state, payload_attributes) + .await + } + + async fn rbuilder_fork_choice_updated_v2( + &self, + fork_choice_state: ForkchoiceState, + payload_attributes: Option, + ) -> RpcResult { + self.inner + .fork_choice_updated_v2(fork_choice_state, payload_attributes) + .await + } + + async fn rbuilder_fork_choice_updated_v3( + &self, + fork_choice_state: ForkchoiceState, + payload_attributes: Option, + ) -> RpcResult { + self.inner + .fork_choice_updated_v3(fork_choice_state, payload_attributes) + .await + } + + async fn get_payload_v2( + &self, + payload_id: PayloadId, + ) -> RpcResult<::ExecutionPayloadEnvelopeV2> { + self.inner.get_payload_v2(payload_id).await + } + + async fn get_payload_v3( + &self, + payload_id: PayloadId, + ) -> RpcResult { + // Multiplex to peers + self.multiplex_engine_call::( + "engine_rbuilder_getPayloadV3", + (payload_id,), + ) + .await; + self.inner.get_payload_v3(payload_id).await + } + + async fn get_payload_v4( + &self, + payload_id: PayloadId, + ) -> RpcResult { + // Multiplex to peers + self.multiplex_engine_call::( + "engine_rbuilder_getPayloadV4", + (payload_id,), + ) + .await; + self.inner.get_payload_v4(payload_id).await + } + + async fn rbuilder_get_payload_v3( + &self, + payload_id: PayloadId, + ) -> RpcResult { + self.inner.get_payload_v3(payload_id).await + } + + async fn rbuilder_get_payload_v4( + &self, + payload_id: PayloadId, + ) -> RpcResult { + self.inner.get_payload_v4(payload_id).await + } + async fn get_payload_bodies_by_hash_v1( + &self, + block_hashes: Vec, + ) -> RpcResult { + self.inner.get_payload_bodies_by_hash_v1(block_hashes).await + } + + async fn get_payload_bodies_by_range_v1( + &self, + start: U64, + count: U64, + ) -> RpcResult { + self.inner + .get_payload_bodies_by_range_v1(start, count) + .await + } + + async fn signal_superchain_v1(&self, signal: SuperchainSignal) -> RpcResult { + self.inner.signal_superchain_v1(signal).await + } + + async fn get_client_version_v1( + &self, + client: ClientVersionV1, + ) -> RpcResult> { + self.inner.get_client_version_v1(client).await + } + + async fn exchange_capabilities(&self, capabilities: Vec) -> RpcResult> { + self.inner.exchange_capabilities(capabilities).await + } +} + +impl IntoEngineApiRpcModule for OpEngineApiExt +where + Self: OpRbuilderEngineApiServer, +{ + fn into_rpc_module(self) -> RpcModule<()> { + self.into_rpc().remove_context() + } +} + +/// Extension trait that gives access to Optimism engine API RPC methods. +/// +/// Note: +/// > The provider should use a JWT authentication layer. +/// +/// This follows the Optimism specs that can be found at: +/// +#[rpc(server, namespace = "engine", server_bounds(Engine::PayloadAttributes: jsonrpsee::core::DeserializeOwned))] +pub trait OpRbuilderEngineApi { + /// Sends the given payload to the execution layer client, as specified for the Shanghai fork. + /// + /// See also + /// + /// No modifications needed for OP compatibility. + #[method(name = "newPayloadV2")] + async fn new_payload_v2(&self, payload: ExecutionPayloadInputV2) -> RpcResult; + + /// Sends the given payload to the execution layer client, as specified for the Cancun fork. + /// + /// See also + /// + /// OP modifications: + /// - expected versioned hashes MUST be an empty array: therefore the `versioned_hashes` + /// parameter is removed. + /// - parent beacon block root MUST be the parent beacon block root from the L1 origin block of + /// the L2 block. + /// - blob versioned hashes MUST be empty list. + #[method(name = "newPayloadV3")] + async fn new_payload_v3( + &self, + payload: ExecutionPayloadV3, + versioned_hashes: Vec, + parent_beacon_block_root: B256, + ) -> RpcResult; + + /// Sends the given payload to the execution layer client, as specified for the Prague fork. + /// + /// See also + /// + /// - blob versioned hashes MUST be empty list. + /// - execution layer requests MUST be empty list. + #[method(name = "newPayloadV4")] + async fn new_payload_v4( + &self, + payload: OpExecutionPayloadV4, + versioned_hashes: Vec, + parent_beacon_block_root: B256, + execution_requests: Requests, + ) -> RpcResult; + + /// See also + /// + /// This exists because it is used by op-node: + /// + /// Caution: This should not accept the `withdrawals` field in the payload attributes. + #[method(name = "forkchoiceUpdatedV1")] + async fn fork_choice_updated_v1( + &self, + fork_choice_state: ForkchoiceState, + payload_attributes: Option, + ) -> RpcResult; + + /// Updates the execution layer client with the given fork choice, as specified for the Shanghai + /// fork. + /// + /// Caution: This should not accept the `parentBeaconBlockRoot` field in the payload attributes. + /// + /// See also + /// + /// OP modifications: + /// - The `payload_attributes` parameter is extended with the [`EngineTypes::PayloadAttributes`](EngineTypes) type as described in + #[method(name = "forkchoiceUpdatedV2")] + async fn fork_choice_updated_v2( + &self, + fork_choice_state: ForkchoiceState, + payload_attributes: Option, + ) -> RpcResult; + + /// Updates the execution layer client with the given fork choice, as specified for the Cancun + /// fork. + /// + /// See also + /// + /// OP modifications: + /// - Must be called with an Ecotone payload + /// - Attributes must contain the parent beacon block root field + /// - The `payload_attributes` parameter is extended with the [`EngineTypes::PayloadAttributes`](EngineTypes) type as described in + #[method(name = "forkchoiceUpdatedV3")] + async fn fork_choice_updated_v3( + &self, + fork_choice_state: ForkchoiceState, + payload_attributes: Option, + ) -> RpcResult; + + /// Updates the execution layer client with the given fork choice, as specified for the Shanghai + /// fork. + /// + /// Caution: This should not accept the `parentBeaconBlockRoot` field in the payload attributes. + /// + /// See also + /// + /// OP modifications: + /// - The `payload_attributes` parameter is extended with the [`EngineTypes::PayloadAttributes`](EngineTypes) type as described in + #[method(name = "rbuilder_forkchoiceUpdatedV2")] + async fn rbuilder_fork_choice_updated_v2( + &self, + fork_choice_state: ForkchoiceState, + payload_attributes: Option, + ) -> RpcResult; + + /// Updates the execution layer client with the given fork choice, as specified for the Cancun + /// fork. + /// + /// See also + /// + /// OP modifications: + /// - Must be called with an Ecotone payload + /// - Attributes must contain the parent beacon block root field + /// - The `payload_attributes` parameter is extended with the [`EngineTypes::PayloadAttributes`](EngineTypes) type as described in + #[method(name = "rbuilder_forkchoiceUpdatedV3")] + async fn rbuilder_fork_choice_updated_v3( + &self, + fork_choice_state: ForkchoiceState, + payload_attributes: Option, + ) -> RpcResult; + /// Retrieves an execution payload from a previously started build process, as specified for the + /// Shanghai fork. + /// + /// See also + /// + /// Note: + /// > Provider software MAY stop the corresponding build process after serving this call. + /// + /// No modifications needed for OP compatibility. + #[method(name = "getPayloadV2")] + async fn get_payload_v2( + &self, + payload_id: PayloadId, + ) -> RpcResult; + + /// Retrieves an execution payload from a previously started build process, as specified for the + /// Cancun fork. + /// + /// See also + /// + /// Note: + /// > Provider software MAY stop the corresponding build process after serving this call. + /// + /// OP modifications: + /// - the response type is extended to [`EngineTypes::ExecutionPayloadEnvelopeV3`]. + #[method(name = "getPayloadV3")] + async fn get_payload_v3( + &self, + payload_id: PayloadId, + ) -> RpcResult; + + /// Returns the most recent version of the payload that is available in the corresponding + /// payload build process at the time of receiving this call. + /// + /// See also + /// + /// Note: + /// > Provider software MAY stop the corresponding build process after serving this call. + /// + /// OP modifications: + /// - the response type is extended to [`EngineTypes::ExecutionPayloadEnvelopeV4`]. + #[method(name = "getPayloadV4")] + async fn get_payload_v4( + &self, + payload_id: PayloadId, + ) -> RpcResult; + + /// Retrieves an execution payload from a previously started build process, as specified for the + /// Cancun fork. + /// + /// See also + /// + /// Note: + /// > Provider software MAY stop the corresponding build process after serving this call. + /// + /// OP modifications: + /// - the response type is extended to [`EngineTypes::ExecutionPayloadEnvelopeV3`]. + #[method(name = "rbuilder_getPayloadV3")] + async fn rbuilder_get_payload_v3( + &self, + payload_id: PayloadId, + ) -> RpcResult; + + /// Returns the most recent version of the payload that is available in the corresponding + /// payload build process at the time of receiving this call. + /// + /// See also + /// + /// Note: + /// > Provider software MAY stop the corresponding build process after serving this call. + /// + /// OP modifications: + /// - the response type is extended to [`EngineTypes::ExecutionPayloadEnvelopeV4`]. + #[method(name = "rbuilder_getPayloadV4")] + async fn rbuilder_get_payload_v4( + &self, + payload_id: PayloadId, + ) -> RpcResult; + + /// Returns the execution payload bodies by the given hash. + /// + /// See also + #[method(name = "getPayloadBodiesByHashV1")] + async fn get_payload_bodies_by_hash_v1( + &self, + block_hashes: Vec, + ) -> RpcResult; + + /// Returns the execution payload bodies by the range starting at `start`, containing `count` + /// blocks. + /// + /// WARNING: This method is associated with the BeaconBlocksByRange message in the consensus + /// layer p2p specification, meaning the input should be treated as untrusted or potentially + /// adversarial. + /// + /// Implementers should take care when acting on the input to this method, specifically + /// ensuring that the range is limited properly, and that the range boundaries are computed + /// correctly and without panics. + /// + /// See also + #[method(name = "getPayloadBodiesByRangeV1")] + async fn get_payload_bodies_by_range_v1( + &self, + start: U64, + count: U64, + ) -> RpcResult; + + /// Signals superchain information to the Engine. + /// Returns the latest supported OP-Stack protocol version of the execution engine. + /// See also + #[method(name = "engine_signalSuperchainV1")] + async fn signal_superchain_v1(&self, _signal: SuperchainSignal) -> RpcResult; + + /// Returns the execution client version information. + /// + /// Note: + /// > The `client_version` parameter identifies the consensus client. + /// + /// See also + #[method(name = "getClientVersionV1")] + async fn get_client_version_v1( + &self, + client_version: ClientVersionV1, + ) -> RpcResult>; + + /// Returns the list of Engine API methods supported by the execution layer client software. + /// + /// See also + #[method(name = "exchangeCapabilities")] + async fn exchange_capabilities(&self, capabilities: Vec) -> RpcResult>; +} diff --git a/crates/op-rbuilder/src/primitives/reth/mod.rs b/crates/op-rbuilder/src/primitives/reth/mod.rs index 3aa4812a..ed2b38b9 100644 --- a/crates/op-rbuilder/src/primitives/reth/mod.rs +++ b/crates/op-rbuilder/src/primitives/reth/mod.rs @@ -1,2 +1,3 @@ +pub mod engine_api_builder; mod execution; pub use execution::{ExecutionInfo, TxnExecutionResult}; diff --git a/crates/op-rbuilder/src/traits.rs b/crates/op-rbuilder/src/traits.rs index 3c924353..ef9dde45 100644 --- a/crates/op-rbuilder/src/traits.rs +++ b/crates/op-rbuilder/src/traits.rs @@ -1,5 +1,5 @@ use alloy_consensus::Header; -use reth_node_api::{FullNodeTypes, NodeTypes}; +use reth_node_api::{FullNodeComponents, FullNodeTypes, NodeTypes}; use reth_optimism_chainspec::OpChainSpec; use reth_optimism_node::OpEngineTypes; use reth_optimism_primitives::{OpPrimitives, OpTransactionSigned}; @@ -27,6 +27,24 @@ impl NodeBounds for T where { } +pub trait NodeComponents: + FullNodeComponents< + Types: NodeTypes, +> +{ +} + +impl NodeComponents for T where + T: FullNodeComponents< + Types: NodeTypes< + Payload = OpEngineTypes, + ChainSpec = OpChainSpec, + Primitives = OpPrimitives, + >, + > +{ +} + pub trait PoolBounds: TransactionPool> + Unpin + 'static where diff --git a/engine-peers.example.toml b/engine-peers.example.toml new file mode 100644 index 00000000..4f5ccf77 --- /dev/null +++ b/engine-peers.example.toml @@ -0,0 +1,15 @@ +# Default JWT file path used by all peers unless overridden +default_jwt_path = "/path/to/default.jwt" + +# List of engine peers +[[peers]] +url = "http://builder1.example.com:8551" +# This peer will use the default JWT + +[[peers]] +url = "http://builder2.example.com:8551" +jwt_path = "/path/to/custom.jwt" # Override default JWT for this peer + +[[peers]] +url = "https://builder3.example.com:8551" +jwt_path = "/path/to/another.jwt" # Another custom JWT \ No newline at end of file