1 Commits

Author SHA1 Message Date
05fc0df236 Merge bcdf4d933d into 92759f04db 2025-10-06 06:24:17 +00:00
30 changed files with 338 additions and 1151 deletions

218
Cargo.lock generated
View File

@ -6744,7 +6744,7 @@ checksum = "95325155c684b1c89f7765e30bc1c42e4a6da51ca513615660cb8a62ef9a88e3"
[[package]]
name = "reth"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-rpc-types",
"aquamarine",
@ -6790,7 +6790,7 @@ dependencies = [
[[package]]
name = "reth-basic-payload-builder"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-eips",
@ -6814,7 +6814,7 @@ dependencies = [
[[package]]
name = "reth-chain-state"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-eips",
@ -6845,7 +6845,7 @@ dependencies = [
[[package]]
name = "reth-chainspec"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-chains",
"alloy-consensus",
@ -6865,7 +6865,7 @@ dependencies = [
[[package]]
name = "reth-cli"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-genesis",
"clap",
@ -6879,7 +6879,7 @@ dependencies = [
[[package]]
name = "reth-cli-commands"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-chains",
"alloy-consensus",
@ -6960,7 +6960,7 @@ dependencies = [
[[package]]
name = "reth-cli-runner"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"reth-tasks",
"tokio",
@ -6970,7 +6970,7 @@ dependencies = [
[[package]]
name = "reth-cli-util"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-eips",
"alloy-primitives",
@ -6988,7 +6988,7 @@ dependencies = [
[[package]]
name = "reth-codecs"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-eips",
@ -7008,7 +7008,7 @@ dependencies = [
[[package]]
name = "reth-codecs-derive"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"convert_case",
"proc-macro2",
@ -7019,7 +7019,7 @@ dependencies = [
[[package]]
name = "reth-config"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"eyre",
"humantime-serde",
@ -7034,7 +7034,7 @@ dependencies = [
[[package]]
name = "reth-consensus"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-primitives",
@ -7047,7 +7047,7 @@ dependencies = [
[[package]]
name = "reth-consensus-common"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-eips",
@ -7059,7 +7059,7 @@ dependencies = [
[[package]]
name = "reth-consensus-debug-client"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-eips",
@ -7085,7 +7085,7 @@ dependencies = [
[[package]]
name = "reth-db"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-primitives",
"derive_more",
@ -7111,7 +7111,7 @@ dependencies = [
[[package]]
name = "reth-db-api"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-genesis",
@ -7139,7 +7139,7 @@ dependencies = [
[[package]]
name = "reth-db-common"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-genesis",
@ -7169,7 +7169,7 @@ dependencies = [
[[package]]
name = "reth-db-models"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-eips",
"alloy-primitives",
@ -7184,7 +7184,7 @@ dependencies = [
[[package]]
name = "reth-discv4"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-primitives",
"alloy-rlp",
@ -7210,7 +7210,7 @@ dependencies = [
[[package]]
name = "reth-discv5"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-primitives",
"alloy-rlp",
@ -7234,7 +7234,7 @@ dependencies = [
[[package]]
name = "reth-dns-discovery"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-primitives",
"data-encoding",
@ -7258,7 +7258,7 @@ dependencies = [
[[package]]
name = "reth-downloaders"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-eips",
@ -7288,7 +7288,7 @@ dependencies = [
[[package]]
name = "reth-ecies"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"aes",
"alloy-primitives",
@ -7319,7 +7319,7 @@ dependencies = [
[[package]]
name = "reth-engine-local"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-primitives",
@ -7341,7 +7341,7 @@ dependencies = [
[[package]]
name = "reth-engine-primitives"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-eips",
@ -7366,7 +7366,7 @@ dependencies = [
[[package]]
name = "reth-engine-service"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"futures",
"pin-project",
@ -7389,7 +7389,7 @@ dependencies = [
[[package]]
name = "reth-engine-tree"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-eips",
@ -7438,7 +7438,7 @@ dependencies = [
[[package]]
name = "reth-engine-util"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-rpc-types-engine",
@ -7466,7 +7466,7 @@ dependencies = [
[[package]]
name = "reth-era"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-eips",
@ -7482,7 +7482,7 @@ dependencies = [
[[package]]
name = "reth-era-downloader"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-primitives",
"bytes",
@ -7497,7 +7497,7 @@ dependencies = [
[[package]]
name = "reth-era-utils"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-primitives",
@ -7519,7 +7519,7 @@ dependencies = [
[[package]]
name = "reth-errors"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"reth-consensus",
"reth-execution-errors",
@ -7530,7 +7530,7 @@ dependencies = [
[[package]]
name = "reth-eth-wire"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-chains",
"alloy-primitives",
@ -7559,7 +7559,7 @@ dependencies = [
[[package]]
name = "reth-eth-wire-types"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-chains",
"alloy-consensus",
@ -7583,7 +7583,7 @@ dependencies = [
[[package]]
name = "reth-ethereum-cli"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"clap",
"eyre",
@ -7605,7 +7605,7 @@ dependencies = [
[[package]]
name = "reth-ethereum-consensus"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-eips",
@ -7621,7 +7621,7 @@ dependencies = [
[[package]]
name = "reth-ethereum-engine-primitives"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-eips",
"alloy-primitives",
@ -7639,7 +7639,7 @@ dependencies = [
[[package]]
name = "reth-ethereum-forks"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-eip2124",
"alloy-hardforks",
@ -7653,7 +7653,7 @@ dependencies = [
[[package]]
name = "reth-ethereum-payload-builder"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-eips",
@ -7682,7 +7682,7 @@ dependencies = [
[[package]]
name = "reth-ethereum-primitives"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-eips",
@ -7702,7 +7702,7 @@ dependencies = [
[[package]]
name = "reth-etl"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"rayon",
"reth-db-api",
@ -7712,7 +7712,7 @@ dependencies = [
[[package]]
name = "reth-evm"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-eips",
@ -7735,7 +7735,7 @@ dependencies = [
[[package]]
name = "reth-evm-ethereum"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-eips",
@ -7756,7 +7756,7 @@ dependencies = [
[[package]]
name = "reth-execution-errors"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-evm",
"alloy-primitives",
@ -7769,7 +7769,7 @@ dependencies = [
[[package]]
name = "reth-execution-types"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-eips",
@ -7787,7 +7787,7 @@ dependencies = [
[[package]]
name = "reth-exex"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-eips",
@ -7825,7 +7825,7 @@ dependencies = [
[[package]]
name = "reth-exex-types"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-eips",
"alloy-primitives",
@ -7839,7 +7839,7 @@ dependencies = [
[[package]]
name = "reth-fs-util"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"serde",
"serde_json",
@ -7849,7 +7849,7 @@ dependencies = [
[[package]]
name = "reth-invalid-block-hooks"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-primitives",
@ -7876,7 +7876,7 @@ dependencies = [
[[package]]
name = "reth-ipc"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"bytes",
"futures",
@ -7896,7 +7896,7 @@ dependencies = [
[[package]]
name = "reth-libmdbx"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"bitflags 2.9.2",
"byteorder",
@ -7912,7 +7912,7 @@ dependencies = [
[[package]]
name = "reth-mdbx-sys"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"bindgen 0.71.1",
"cc",
@ -7921,7 +7921,7 @@ dependencies = [
[[package]]
name = "reth-metrics"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"futures",
"metrics",
@ -7933,7 +7933,7 @@ dependencies = [
[[package]]
name = "reth-net-banlist"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-primitives",
]
@ -7941,7 +7941,7 @@ dependencies = [
[[package]]
name = "reth-net-nat"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"futures-util",
"if-addrs",
@ -7955,7 +7955,7 @@ dependencies = [
[[package]]
name = "reth-network"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-eips",
@ -8010,7 +8010,7 @@ dependencies = [
[[package]]
name = "reth-network-api"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-primitives",
@ -8035,7 +8035,7 @@ dependencies = [
[[package]]
name = "reth-network-p2p"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-eips",
@ -8057,7 +8057,7 @@ dependencies = [
[[package]]
name = "reth-network-peers"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-primitives",
"alloy-rlp",
@ -8072,7 +8072,7 @@ dependencies = [
[[package]]
name = "reth-network-types"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-eip2124",
"humantime-serde",
@ -8086,7 +8086,7 @@ dependencies = [
[[package]]
name = "reth-nippy-jar"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"anyhow",
"bincode",
@ -8103,7 +8103,7 @@ dependencies = [
[[package]]
name = "reth-node-api"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-rpc-types-engine",
"eyre",
@ -8127,7 +8127,7 @@ dependencies = [
[[package]]
name = "reth-node-builder"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-eips",
@ -8195,7 +8195,7 @@ dependencies = [
[[package]]
name = "reth-node-core"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-eips",
@ -8247,7 +8247,7 @@ dependencies = [
[[package]]
name = "reth-node-ethereum"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-eips",
"alloy-network",
@ -8285,7 +8285,7 @@ dependencies = [
[[package]]
name = "reth-node-ethstats"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-primitives",
@ -8309,7 +8309,7 @@ dependencies = [
[[package]]
name = "reth-node-events"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-eips",
@ -8333,7 +8333,7 @@ dependencies = [
[[package]]
name = "reth-node-metrics"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"eyre",
"http 1.3.1",
@ -8354,7 +8354,7 @@ dependencies = [
[[package]]
name = "reth-node-types"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"reth-chainspec",
"reth-db-api",
@ -8366,7 +8366,7 @@ dependencies = [
[[package]]
name = "reth-optimism-primitives"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-eips",
@ -8385,7 +8385,7 @@ dependencies = [
[[package]]
name = "reth-payload-builder"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-primitives",
@ -8406,7 +8406,7 @@ dependencies = [
[[package]]
name = "reth-payload-builder-primitives"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"pin-project",
"reth-payload-primitives",
@ -8418,7 +8418,7 @@ dependencies = [
[[package]]
name = "reth-payload-primitives"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-eips",
"alloy-primitives",
@ -8438,7 +8438,7 @@ dependencies = [
[[package]]
name = "reth-payload-validator"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-rpc-types-engine",
@ -8448,7 +8448,7 @@ dependencies = [
[[package]]
name = "reth-primitives"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"c-kzg",
@ -8462,7 +8462,7 @@ dependencies = [
[[package]]
name = "reth-primitives-traits"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-eips",
@ -8495,7 +8495,7 @@ dependencies = [
[[package]]
name = "reth-provider"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-eips",
@ -8540,7 +8540,7 @@ dependencies = [
[[package]]
name = "reth-prune"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-eips",
@ -8568,7 +8568,7 @@ dependencies = [
[[package]]
name = "reth-prune-types"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-primitives",
"arbitrary",
@ -8582,7 +8582,7 @@ dependencies = [
[[package]]
name = "reth-ress-protocol"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-primitives",
@ -8601,7 +8601,7 @@ dependencies = [
[[package]]
name = "reth-ress-provider"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-primitives",
@ -8628,7 +8628,7 @@ dependencies = [
[[package]]
name = "reth-revm"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-primitives",
"reth-primitives-traits",
@ -8641,7 +8641,7 @@ dependencies = [
[[package]]
name = "reth-rpc"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-dyn-abi",
@ -8720,7 +8720,7 @@ dependencies = [
[[package]]
name = "reth-rpc-api"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-eips",
"alloy-genesis",
@ -8748,7 +8748,7 @@ dependencies = [
[[package]]
name = "reth-rpc-builder"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-network",
"alloy-provider",
@ -8787,7 +8787,7 @@ dependencies = [
[[package]]
name = "reth-rpc-convert"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-json-rpc",
@ -8808,7 +8808,7 @@ dependencies = [
[[package]]
name = "reth-rpc-engine-api"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-eips",
"alloy-primitives",
@ -8838,7 +8838,7 @@ dependencies = [
[[package]]
name = "reth-rpc-eth-api"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-dyn-abi",
@ -8882,7 +8882,7 @@ dependencies = [
[[package]]
name = "reth-rpc-eth-types"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-eips",
@ -8929,7 +8929,7 @@ dependencies = [
[[package]]
name = "reth-rpc-layer"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-rpc-types-engine",
"http 1.3.1",
@ -8943,7 +8943,7 @@ dependencies = [
[[package]]
name = "reth-rpc-server-types"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-eips",
"alloy-primitives",
@ -8959,7 +8959,7 @@ dependencies = [
[[package]]
name = "reth-stages"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-eips",
@ -9003,7 +9003,7 @@ dependencies = [
[[package]]
name = "reth-stages-api"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-eips",
"alloy-primitives",
@ -9030,7 +9030,7 @@ dependencies = [
[[package]]
name = "reth-stages-types"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-primitives",
"arbitrary",
@ -9044,7 +9044,7 @@ dependencies = [
[[package]]
name = "reth-static-file"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-primitives",
"parking_lot",
@ -9064,7 +9064,7 @@ dependencies = [
[[package]]
name = "reth-static-file-types"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-primitives",
"clap",
@ -9076,7 +9076,7 @@ dependencies = [
[[package]]
name = "reth-storage-api"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-eips",
@ -9099,7 +9099,7 @@ dependencies = [
[[package]]
name = "reth-storage-errors"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-eips",
"alloy-primitives",
@ -9115,7 +9115,7 @@ dependencies = [
[[package]]
name = "reth-tasks"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"auto_impl",
"dyn-clone",
@ -9133,7 +9133,7 @@ dependencies = [
[[package]]
name = "reth-tokio-util"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"tokio",
"tokio-stream",
@ -9143,7 +9143,7 @@ dependencies = [
[[package]]
name = "reth-tracing"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"clap",
"eyre",
@ -9158,7 +9158,7 @@ dependencies = [
[[package]]
name = "reth-transaction-pool"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-eips",
@ -9198,7 +9198,7 @@ dependencies = [
[[package]]
name = "reth-trie"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-eips",
@ -9223,7 +9223,7 @@ dependencies = [
[[package]]
name = "reth-trie-common"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-consensus",
"alloy-primitives",
@ -9249,7 +9249,7 @@ dependencies = [
[[package]]
name = "reth-trie-db"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-primitives",
"reth-db-api",
@ -9262,7 +9262,7 @@ dependencies = [
[[package]]
name = "reth-trie-parallel"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-primitives",
"alloy-rlp",
@ -9287,7 +9287,7 @@ dependencies = [
[[package]]
name = "reth-trie-sparse"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-primitives",
"alloy-rlp",
@ -9306,7 +9306,7 @@ dependencies = [
[[package]]
name = "reth-trie-sparse-parallel"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"alloy-primitives",
"alloy-rlp",
@ -9324,7 +9324,7 @@ dependencies = [
[[package]]
name = "reth-zstd-compressors"
version = "1.8.2"
source = "git+https://github.com/hl-archive-node/reth?rev=416c2e26756f1c8ee86e6b8e4081f434952b3a1a#416c2e26756f1c8ee86e6b8e4081f434952b3a1a"
source = "git+https://github.com/hl-archive-node/reth?rev=83baf84bcb6d88081fc1b39f97733b8ec345cb88#83baf84bcb6d88081fc1b39f97733b8ec345cb88"
dependencies = [
"zstd",
]

View File

@ -26,49 +26,49 @@ lto = "fat"
codegen-units = 1
[dependencies]
reth = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-cli = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-cli-commands = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-basic-payload-builder = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-db = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-db-api = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-chainspec = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-cli-util = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-discv4 = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-engine-primitives = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-ethereum-forks = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-ethereum-payload-builder = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-ethereum-primitives = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-eth-wire = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-eth-wire-types = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-evm = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-evm-ethereum = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-node-core = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-revm = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-network = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-network-p2p = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-network-api = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-node-ethereum = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-network-peers = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-payload-primitives = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-primitives = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-primitives-traits = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-provider = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a", features = ["test-utils"] }
reth-rpc = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-rpc-eth-api = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-rpc-engine-api = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-tracing = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-trie-common = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-trie-db = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-codecs = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-transaction-pool = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-stages-types = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-storage-api = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-errors = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-rpc-convert = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-rpc-eth-types = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-rpc-server-types = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth-metrics = { git = "https://github.com/hl-archive-node/reth", rev = "416c2e26756f1c8ee86e6b8e4081f434952b3a1a" }
reth = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-cli = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-cli-commands = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-basic-payload-builder = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-db = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-db-api = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-chainspec = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-cli-util = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-discv4 = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-engine-primitives = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-ethereum-forks = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-ethereum-payload-builder = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-ethereum-primitives = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-eth-wire = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-eth-wire-types = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-evm = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-evm-ethereum = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-node-core = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-revm = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-network = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-network-p2p = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-network-api = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-node-ethereum = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-network-peers = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-payload-primitives = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-primitives = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-primitives-traits = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-provider = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88", features = ["test-utils"] }
reth-rpc = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-rpc-eth-api = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-rpc-engine-api = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-tracing = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-trie-common = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-trie-db = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-codecs = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-transaction-pool = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-stages-types = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-storage-api = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-errors = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-rpc-convert = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-rpc-eth-types = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-rpc-server-types = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
reth-metrics = { git = "https://github.com/hl-archive-node/reth", rev = "83baf84bcb6d88081fc1b39f97733b8ec345cb88" }
revm = { version = "29.0.1", default-features = false }
# alloy dependencies

View File

@ -60,19 +60,19 @@ $ reth-hl node --http --http.addr 0.0.0.0 --http.api eth,ots,net,web3 \
## How to run (testnet)
Testnet is supported since block 34112653.
Testnet is supported since block 30281484.
```sh
# Get testnet genesis at block 34112653
# Get testnet genesis at block 30281484
$ cd ~
$ git clone https://github.com/sprites0/hl-testnet-genesis
$ zstd --rm -d ~/hl-testnet-genesis/*.zst
# Init node
$ make install
$ reth-hl init-state --without-evm --chain testnet --header ~/hl-testnet-genesis/34112653.rlp \
--header-hash 0xeb79aca618ab9fda6d463fddd3ad439045deada1f539cbab1c62d7e6a0f5859a \
~/hl-testnet-genesis/34112653.jsonl --total-difficulty 0
$ reth-hl init-state --without-evm --chain testnet --header ~/hl-testnet-genesis/30281484.rlp \
--header-hash 0x147cc3c09e9ddbb11799c826758db284f77099478ab5f528d3a57a6105516c21 \
~/hl-testnet-genesis/30281484.jsonl --total-difficulty 0
# Run node
$ reth-hl node --chain testnet --http --http.addr 0.0.0.0 --http.api eth,ots,net,web3 \

View File

@ -19,23 +19,62 @@ use alloy_rpc_types::{
TransactionInfo,
pubsub::{Params, SubscriptionKind},
};
use jsonrpsee::{PendingSubscriptionSink, proc_macros::rpc};
use jsonrpsee::{PendingSubscriptionSink, SubscriptionMessage, SubscriptionSink, proc_macros::rpc};
use jsonrpsee_core::{RpcResult, async_trait};
use jsonrpsee_types::{ErrorObject, error::INTERNAL_ERROR_CODE};
use reth::{api::FullNodeComponents, builder::rpc::RpcContext, tasks::TaskSpawner};
use reth_primitives_traits::SignedTransaction;
use reth_provider::{BlockIdReader, BlockReader, BlockReaderIdExt, ReceiptProvider};
use reth_rpc::{EthFilter, EthPubSub};
use reth_rpc::{EthFilter, EthPubSub, RpcTypes, eth::pubsub::SubscriptionSerializeError};
use reth_rpc_eth_api::{
EthApiTypes, EthFilterApiServer, EthPubSubApiServer, RpcBlock, RpcConvert, RpcReceipt,
RpcTransaction, helpers::EthBlocks, transaction::ConvertReceiptInput,
EthApiServer, EthApiTypes, EthFilterApiServer, EthPubSubApiServer, FullEthApiTypes, RpcBlock,
RpcConvert, RpcHeader, RpcNodeCoreExt, RpcReceipt, RpcTransaction, RpcTxReq,
helpers::{EthBlocks, EthTransactions, LoadReceipt},
transaction::ConvertReceiptInput,
};
use reth_rpc_eth_types::EthApiError;
use serde::Serialize;
use std::{marker::PhantomData, sync::Arc};
use tokio_stream::StreamExt;
use tokio_stream::{Stream, StreamExt};
use tracing::{Instrument, trace};
use crate::addons::utils::{EthWrapper, new_headers_stream, pipe_from_stream};
use crate::{HlBlock, node::primitives::HlPrimitives};
pub trait EthWrapper:
EthApiServer<
RpcTxReq<Self::NetworkTypes>,
RpcTransaction<Self::NetworkTypes>,
RpcBlock<Self::NetworkTypes>,
RpcReceipt<Self::NetworkTypes>,
RpcHeader<Self::NetworkTypes>,
> + FullEthApiTypes<
Primitives = HlPrimitives,
NetworkTypes: RpcTypes<TransactionResponse = alloy_rpc_types_eth::Transaction>,
> + RpcNodeCoreExt<Provider: BlockReader<Block = HlBlock>>
+ EthBlocks
+ EthTransactions
+ LoadReceipt
+ 'static
{
}
impl<T> EthWrapper for T where
T: EthApiServer<
RpcTxReq<Self::NetworkTypes>,
RpcTransaction<Self::NetworkTypes>,
RpcBlock<Self::NetworkTypes>,
RpcReceipt<Self::NetworkTypes>,
RpcHeader<Self::NetworkTypes>,
> + FullEthApiTypes<
Primitives = HlPrimitives,
NetworkTypes: RpcTypes<TransactionResponse = alloy_rpc_types_eth::Transaction>,
> + RpcNodeCoreExt<Provider: BlockReader<Block = HlBlock>>
+ EthBlocks
+ EthTransactions
+ LoadReceipt
+ 'static
{
}
#[rpc(server, namespace = "eth")]
#[async_trait]
@ -347,8 +386,6 @@ where
pubsub.log_stream(filter).filter_map(|log| adjust_log::<Eth>(log, &provider)),
)
.await;
} else if kind == SubscriptionKind::NewHeads {
let _ = pipe_from_stream(sink, new_headers_stream::<Eth>(&provider)).await;
} else {
let _ = pubsub.handle_accepted(sink, kind, params).await;
}
@ -375,6 +412,23 @@ fn adjust_log<Eth: EthWrapper>(mut log: Log, provider: &Eth::Provider) -> Option
Some(log)
}
async fn pipe_from_stream<T: Serialize, St: Stream<Item = T> + Unpin>(
sink: SubscriptionSink,
mut stream: St,
) -> Result<(), ErrorObject<'static>> {
loop {
tokio::select! {
_ = sink.closed() => break Ok(()),
maybe_item = stream.next() => {
let Some(item) = maybe_item else { break Ok(()) };
let msg = SubscriptionMessage::new(sink.method_name(), sink.subscription_id(), &item)
.map_err(SubscriptionSerializeError::from)?;
if sink.send(msg).await.is_err() { break Ok(()); }
}
}
}
}
pub struct HlNodeBlockFilterHttp<Eth: EthWrapper> {
eth_api: Arc<Eth>,
_marker: PhantomData<Eth>,

View File

@ -1,5 +1,3 @@
pub mod call_forwarder;
pub mod hl_node_compliance;
pub mod subscribe_fixup;
pub mod tx_forwarder;
mod utils;

View File

@ -1,54 +0,0 @@
use crate::addons::utils::{EthWrapper, new_headers_stream, pipe_from_stream};
use alloy_rpc_types::pubsub::{Params, SubscriptionKind};
use async_trait::async_trait;
use jsonrpsee::PendingSubscriptionSink;
use jsonrpsee_types::ErrorObject;
use reth::tasks::TaskSpawner;
use reth_rpc::EthPubSub;
use reth_rpc_convert::RpcTransaction;
use reth_rpc_eth_api::{EthApiTypes, EthPubSubApiServer};
use std::sync::Arc;
pub struct SubscribeFixup<Eth: EthWrapper> {
pubsub: Arc<EthPubSub<Eth>>,
provider: Arc<Eth::Provider>,
subscription_task_spawner: Box<dyn TaskSpawner + 'static>,
}
#[async_trait]
impl<Eth: EthWrapper> EthPubSubApiServer<RpcTransaction<Eth::NetworkTypes>> for SubscribeFixup<Eth>
where
ErrorObject<'static>: From<<Eth as EthApiTypes>::Error>,
{
async fn subscribe(
&self,
pending: PendingSubscriptionSink,
kind: SubscriptionKind,
params: Option<Params>,
) -> jsonrpsee::core::SubscriptionResult {
let sink = pending.accept().await?;
let (pubsub, provider) = (self.pubsub.clone(), self.provider.clone());
self.subscription_task_spawner.spawn(Box::pin(async move {
if kind == SubscriptionKind::NewHeads {
let _ = pipe_from_stream(sink, new_headers_stream::<Eth>(&provider)).await;
} else {
let _ = pubsub.handle_accepted(sink, kind, params).await;
}
}));
Ok(())
}
}
impl<Eth: EthWrapper> SubscribeFixup<Eth> {
pub fn new(
pubsub: Arc<EthPubSub<Eth>>,
provider: Arc<Eth::Provider>,
subscription_task_spawner: Box<dyn TaskSpawner + 'static>,
) -> Self
where
Eth: EthWrapper,
ErrorObject<'static>: From<Eth::Error>,
{
Self { pubsub, provider, subscription_task_spawner }
}
}

View File

@ -1,90 +0,0 @@
use std::sync::Arc;
use crate::{HlBlock, HlPrimitives};
use alloy_primitives::U256;
use alloy_rpc_types::Header;
use futures::StreamExt;
use jsonrpsee::{SubscriptionMessage, SubscriptionSink};
use jsonrpsee_types::ErrorObject;
use reth_primitives::SealedHeader;
use reth_provider::{BlockReader, CanonStateSubscriptions};
use reth_rpc::{RpcTypes, eth::pubsub::SubscriptionSerializeError};
use reth_rpc_convert::{RpcBlock, RpcHeader, RpcReceipt, RpcTransaction, RpcTxReq};
use reth_rpc_eth_api::{
EthApiServer, FullEthApiTypes, RpcNodeCoreExt,
helpers::{EthBlocks, EthTransactions, LoadReceipt},
};
use serde::Serialize;
use tokio_stream::Stream;
pub trait EthWrapper:
EthApiServer<
RpcTxReq<Self::NetworkTypes>,
RpcTransaction<Self::NetworkTypes>,
RpcBlock<Self::NetworkTypes>,
RpcReceipt<Self::NetworkTypes>,
RpcHeader<Self::NetworkTypes>,
> + FullEthApiTypes<
Primitives = HlPrimitives,
NetworkTypes: RpcTypes<TransactionResponse = alloy_rpc_types_eth::Transaction>,
> + RpcNodeCoreExt<Provider: BlockReader<Block = HlBlock>>
+ EthBlocks
+ EthTransactions
+ LoadReceipt
+ 'static
{
}
impl<T> EthWrapper for T where
T: EthApiServer<
RpcTxReq<Self::NetworkTypes>,
RpcTransaction<Self::NetworkTypes>,
RpcBlock<Self::NetworkTypes>,
RpcReceipt<Self::NetworkTypes>,
RpcHeader<Self::NetworkTypes>,
> + FullEthApiTypes<
Primitives = HlPrimitives,
NetworkTypes: RpcTypes<TransactionResponse = alloy_rpc_types_eth::Transaction>,
> + RpcNodeCoreExt<Provider: BlockReader<Block = HlBlock>>
+ EthBlocks
+ EthTransactions
+ LoadReceipt
+ 'static
{
}
pub(super) async fn pipe_from_stream<T: Serialize, St: Stream<Item = T> + Unpin>(
sink: SubscriptionSink,
mut stream: St,
) -> Result<(), ErrorObject<'static>> {
loop {
tokio::select! {
_ = sink.closed() => break Ok(()),
maybe_item = stream.next() => {
let Some(item) = maybe_item else { break Ok(()) };
let msg = SubscriptionMessage::new(sink.method_name(), sink.subscription_id(), &item)
.map_err(SubscriptionSerializeError::from)?;
if sink.send(msg).await.is_err() { break Ok(()); }
}
}
}
}
pub(super) fn new_headers_stream<Eth: EthWrapper>(
provider: &Arc<Eth::Provider>,
) -> impl Stream<Item = Header<alloy_consensus::Header>> {
provider.canonical_state_stream().flat_map(|new_chain| {
let headers = new_chain
.committed()
.blocks_iter()
.map(|block| {
Header::from_consensus(
SealedHeader::new(block.header().inner.clone(), block.hash()).into(),
None,
Some(U256::from(block.rlp_length())),
)
})
.collect::<Vec<_>>();
futures::stream::iter(headers)
})
}

View File

@ -1,10 +1,7 @@
pub mod hl;
pub mod parser;
use crate::{
hardforks::HlHardforks,
node::primitives::{HlHeader, header::HlHeaderExtras},
};
use crate::{hardforks::HlHardforks, node::primitives::{header::HlHeaderExtras, HlHeader}};
use alloy_eips::eip7840::BlobParams;
use alloy_genesis::Genesis;
use alloy_primitives::{Address, B256, U256};

View File

@ -1,16 +1,12 @@
use std::sync::Arc;
use clap::Parser;
use reth::{
builder::{NodeBuilder, NodeHandle, WithLaunchContext},
rpc::{api::EthPubSubApiServer, eth::RpcNodeCore},
};
use reth::builder::{NodeBuilder, NodeHandle, WithLaunchContext};
use reth_db::DatabaseEnv;
use reth_hl::{
addons::{
call_forwarder::{self, CallForwarderApiServer},
hl_node_compliance::install_hl_node_compliance,
subscribe_fixup::SubscribeFixup,
tx_forwarder::{self, EthForwarderApiServer},
},
chainspec::{HlChainSpec, parser::HlChainSpecParser},
@ -18,9 +14,7 @@ use reth_hl::{
HlNode,
cli::{Cli, HlNodeArgs},
rpc::precompile::{HlBlockPrecompileApiServer, HlBlockPrecompileExt},
spot_meta::init as spot_meta_init,
storage::tables::Tables,
types::set_spot_metadata_db,
},
};
use tracing::info;
@ -41,11 +35,8 @@ fn main() -> eyre::Result<()> {
ext: HlNodeArgs| async move {
let default_upstream_rpc_url = builder.config().chain.official_rpc_url();
let (node, engine_handle_tx) = HlNode::new(
ext.block_source_args.parse().await?,
ext.debug_cutoff_height,
ext.allow_network_overrides,
);
let (node, engine_handle_tx) =
HlNode::new(ext.block_source_args.parse().await?, ext.debug_cutoff_height);
let NodeHandle { node, node_exit_future: exit_future } = builder
.node(node)
.extend_rpc_modules(move |mut ctx| {
@ -68,17 +59,6 @@ fn main() -> eyre::Result<()> {
info!("Call/gas estimation will be forwarded to {}", upstream_rpc_url);
}
// This is a temporary workaround to fix the issue with custom headers
// affects `eth_subscribe[type=newHeads]`
ctx.modules.replace_configured(
SubscribeFixup::new(
Arc::new(ctx.registry.eth_handlers().pubsub.clone()),
Arc::new(ctx.registry.eth_api().provider().clone()),
Box::new(ctx.node().task_executor.clone()),
)
.into_rpc(),
)?;
if ext.hl_node_compliant {
install_hl_node_compliance(&mut ctx)?;
info!("hl-node compliant mode enabled");
@ -97,16 +77,6 @@ fn main() -> eyre::Result<()> {
})
.apply(|mut builder| {
builder.db_mut().create_tables_for::<Tables>().expect("create tables");
let chain_id = builder.config().chain.inner.chain().id();
let db = builder.db_mut().clone();
// Set database handle for on-demand persistence
set_spot_metadata_db(db.clone());
// Load spot metadata from database and initialize cache
spot_meta_init::load_spot_metadata_cache(&db, chain_id);
builder
})
.launch()

View File

@ -1,15 +1,12 @@
use crate::{
chainspec::{HlChainSpec, parser::HlChainSpecParser},
node::{
HlNode, consensus::HlConsensus, evm::config::HlEvmConfig, migrate::Migrator,
spot_meta::init as spot_meta_init, storage::tables::Tables,
},
node::{HlNode, consensus::HlConsensus, evm::config::HlEvmConfig, storage::tables::Tables},
pseudo_peer::BlockSourceArgs,
};
use clap::{Args, Parser};
use reth::{
CliRunner,
args::{DatabaseArgs, DatadirArgs, LogArgs},
args::LogArgs,
builder::{NodeBuilder, WithLaunchContext},
cli::Commands,
prometheus_exporter::install_prometheus_recorder,
@ -82,13 +79,6 @@ pub struct HlNodeArgs {
/// * Refers to the Merkle trie used for eth_getProof and state root, not actual state values.
#[arg(long, env = "EXPERIMENTAL_ETH_GET_PROOF")]
pub experimental_eth_get_proof: bool,
/// Allow network configuration overrides from CLI.
///
/// When enabled, network settings (discovery_addr, listener_addr, dns_discovery, nat)
/// will be taken from CLI arguments instead of being hardcoded to localhost-only defaults.
#[arg(long, env = "ALLOW_NETWORK_OVERRIDES")]
pub allow_network_overrides: bool,
}
/// The main reth_hl cli interface.
@ -152,12 +142,6 @@ where
match self.command {
Commands::Node(command) => runner.run_command_until_exit(|ctx| {
// NOTE: This is for one time migration around Oct 10 upgrade:
// It's not necessary anymore, an environment variable gate is added here.
if std::env::var("CHECK_DB_MIGRATION").is_ok() {
Self::migrate_db(&command.chain, &command.datadir, &command.db)
.expect("Failed to migrate database");
}
command.execute(ctx, FnLauncher::new::<C, Ext>(launcher))
}),
Commands::Init(command) => {
@ -201,21 +185,7 @@ where
let data_dir = env.datadir.clone().resolve_datadir(env.chain.chain());
let db_path = data_dir.db();
init_db(db_path.clone(), env.db.database_args())?;
init_db_for::<_, Tables>(db_path.clone(), env.db.database_args())?;
// Initialize spot metadata in database
let chain_id = env.chain.chain().id();
spot_meta_init::init_spot_metadata(db_path, env.db.database_args(), chain_id)?;
Ok(())
}
fn migrate_db(
chain: &HlChainSpec,
datadir: &DatadirArgs,
db: &DatabaseArgs,
) -> eyre::Result<()> {
Migrator::<HlNode>::new(chain.clone(), datadir.clone(), *db)?.migrate_db()?;
init_db_for::<_, Tables>(db_path, env.db.database_args())?;
Ok(())
}
}

View File

@ -1,8 +1,4 @@
use crate::{
HlBlock, HlBlockBody, HlPrimitives,
hardforks::HlHardforks,
node::{HlNode, primitives::HlHeader},
};
use crate::{hardforks::HlHardforks, node::{primitives::HlHeader, HlNode}, HlBlock, HlBlockBody, HlPrimitives};
use reth::{
api::{FullNodeTypes, NodeTypes},
beacon_consensus::EthBeaconConsensus,

View File

@ -1,6 +1,5 @@
use crate::{
HlBlock, HlHeader,
node::evm::config::{HlBlockExecutorFactory, HlEvmConfig},
node::evm::config::{HlBlockExecutorFactory, HlEvmConfig}, HlBlock, HlHeader
};
use reth_evm::{
block::BlockExecutionError,

View File

@ -1,429 +0,0 @@
use alloy_consensus::Header;
use alloy_primitives::{B256, BlockHash, Bytes, U256, b256, hex::ToHexExt};
use reth::{
api::NodeTypesWithDBAdapter,
args::{DatabaseArgs, DatadirArgs},
dirs::{ChainPath, DataDirPath},
};
use reth_chainspec::EthChainSpec;
use reth_db::{
DatabaseEnv,
mdbx::{RO, tx::Tx},
models::CompactU256,
static_file::iter_static_files,
table::Decompress,
tables,
};
use reth_db_api::{
cursor::{DbCursorRO, DbCursorRW},
transaction::{DbTx, DbTxMut},
};
use reth_errors::ProviderResult;
use reth_ethereum_primitives::EthereumReceipt;
use reth_provider::{
DatabaseProvider, ProviderFactory, ReceiptProvider, StaticFileProviderFactory,
StaticFileSegment, StaticFileWriter,
providers::{NodeTypesForProvider, StaticFileProvider},
static_file::SegmentRangeInclusive,
};
use std::{fs::File, io::Write, path::PathBuf, sync::Arc};
use tracing::{info, warn};
use crate::{HlHeader, HlPrimitives, chainspec::HlChainSpec};
pub(crate) trait HlNodeType:
NodeTypesForProvider<ChainSpec = HlChainSpec, Primitives = HlPrimitives>
{
}
impl<N: NodeTypesForProvider<ChainSpec = HlChainSpec, Primitives = HlPrimitives>> HlNodeType for N {}
pub(super) struct Migrator<N: HlNodeType> {
data_dir: ChainPath<DataDirPath>,
provider_factory: ProviderFactory<NodeTypesWithDBAdapter<N, Arc<DatabaseEnv>>>,
}
impl<N: HlNodeType> Migrator<N> {
const MIGRATION_PATH_SUFFIX: &'static str = "migration-tmp";
pub fn new(
chain_spec: HlChainSpec,
datadir: DatadirArgs,
database_args: DatabaseArgs,
) -> eyre::Result<Self> {
let data_dir = datadir.clone().resolve_datadir(chain_spec.chain());
let provider_factory = Self::provider_factory(chain_spec, datadir, database_args)?;
Ok(Self { data_dir, provider_factory })
}
pub fn sf_provider(&self) -> StaticFileProvider<HlPrimitives> {
self.provider_factory.static_file_provider()
}
pub fn migrate_db(&self) -> eyre::Result<()> {
let is_empty = Self::highest_block_number(&self.sf_provider()).is_none();
if is_empty {
return Ok(());
}
self.migrate_db_inner()
}
fn highest_block_number(sf_provider: &StaticFileProvider<HlPrimitives>) -> Option<u64> {
sf_provider.get_highest_static_file_block(StaticFileSegment::Headers)
}
fn migrate_db_inner(&self) -> eyre::Result<()> {
let migrated_mdbx = MigratorMdbx::<N>(self).migrate_mdbx()?;
let migrated_static_files = MigrateStaticFiles::<N>(self).migrate_static_files()?;
if migrated_mdbx || migrated_static_files {
info!("Database migrated successfully");
}
Ok(())
}
fn conversion_tmp_dir(&self) -> PathBuf {
self.data_dir.data_dir().join(Self::MIGRATION_PATH_SUFFIX)
}
fn provider_factory(
chain_spec: HlChainSpec,
datadir: DatadirArgs,
database_args: DatabaseArgs,
) -> eyre::Result<ProviderFactory<NodeTypesWithDBAdapter<N, Arc<DatabaseEnv>>>> {
let data_dir = datadir.clone().resolve_datadir(chain_spec.chain());
let db_env = reth_db::init_db(data_dir.db(), database_args.database_args())?;
let static_file_provider = StaticFileProvider::read_only(data_dir.static_files(), false)?;
let db = Arc::new(db_env);
Ok(ProviderFactory::new(db, Arc::new(chain_spec), static_file_provider))
}
}
struct MigratorMdbx<'a, N: HlNodeType>(&'a Migrator<N>);
impl<'a, N: HlNodeType> MigratorMdbx<'a, N> {
fn migrate_mdbx(&self) -> eyre::Result<bool> {
// if any header is in old format, we need to migrate it, so we pick the first and last one
let db_env = self.0.provider_factory.provider()?;
let mut cursor = db_env.tx_ref().cursor_read::<tables::Headers<Bytes>>()?;
let migration_needed = {
let first_is_old = match cursor.first()? {
Some((number, header)) => using_old_header(number, &header),
None => false,
};
let last_is_old = match cursor.last()? {
Some((number, header)) => using_old_header(number, &header),
None => false,
};
first_is_old || last_is_old
};
if !migration_needed {
return Ok(false);
}
check_if_migration_enabled()?;
self.migrate_mdbx_inner()?;
Ok(true)
}
fn migrate_mdbx_inner(&self) -> eyre::Result<()> {
// There shouldn't be many headers in mdbx, but using file for safety
info!("Old database detected, migrating mdbx...");
let conversion_tmp = self.0.conversion_tmp_dir();
let tmp_path = conversion_tmp.join("headers.rmp");
if conversion_tmp.exists() {
std::fs::remove_dir_all(&conversion_tmp)?;
}
std::fs::create_dir_all(&conversion_tmp)?;
let count = self.export_old_headers(&tmp_path)?;
self.import_new_headers(tmp_path, count)?;
Ok(())
}
fn export_old_headers(&self, tmp_path: &PathBuf) -> Result<i32, eyre::Error> {
let db_env = self.0.provider_factory.provider()?;
let mut cursor_read = db_env.tx_ref().cursor_read::<tables::Headers<Bytes>>()?;
let mut tmp_writer = File::create(tmp_path)?;
let mut count = 0;
let old_headers = cursor_read.walk(None)?.filter_map(|row| {
let (block_number, header) = row.ok()?;
if !using_old_header(block_number, &header) {
None
} else {
Some((block_number, Header::decompress(&header).ok()?))
}
});
for (block_number, header) in old_headers {
let receipt =
db_env.receipts_by_block(block_number.into())?.expect("Receipt not found");
let new_header = to_hl_header(receipt, header);
tmp_writer.write_all(&rmp_serde::to_vec(&(block_number, new_header))?)?;
count += 1;
}
Ok(count)
}
fn import_new_headers(&self, tmp_path: PathBuf, count: i32) -> Result<(), eyre::Error> {
let mut tmp_reader = File::open(tmp_path)?;
let db_env = self.0.provider_factory.provider_rw()?;
let mut cursor_write = db_env.tx_ref().cursor_write::<tables::Headers<Bytes>>()?;
for _ in 0..count {
let (number, header) = rmp_serde::from_read::<_, (u64, HlHeader)>(&mut tmp_reader)?;
cursor_write.upsert(number, &rmp_serde::to_vec(&header)?.into())?;
}
db_env.commit()?;
Ok(())
}
}
fn check_if_migration_enabled() -> Result<(), eyre::Error> {
if std::env::var("EXPERIMENTAL_MIGRATE_DB").is_err() {
let err_msg = concat!(
"Detected an old database format but experimental database migration is currently disabled. ",
"To enable migration, set EXPERIMENTAL_MIGRATE_DB=1, or alternatively, resync your node (safest option)."
);
warn!("{}", err_msg);
return Err(eyre::eyre!("{}", err_msg));
}
Ok(())
}
struct MigrateStaticFiles<'a, N: HlNodeType>(&'a Migrator<N>);
impl<'a, N: HlNodeType> MigrateStaticFiles<'a, N> {
fn iterate_files_for_segment(
&self,
block_range: SegmentRangeInclusive,
dir: &PathBuf,
) -> eyre::Result<Vec<(PathBuf, String)>> {
let prefix = StaticFileSegment::Headers.filename(&block_range);
let entries = std::fs::read_dir(dir)?
.map(|res| res.map(|e| e.path()))
.collect::<Result<Vec<_>, _>>()?;
Ok(entries
.into_iter()
.filter_map(|path| {
let file_name = path.file_name().and_then(|f| f.to_str())?;
if file_name.starts_with(&prefix) {
Some((path.clone(), file_name.to_string()))
} else {
None
}
})
.collect())
}
fn create_placeholder(&self, block_range: SegmentRangeInclusive) -> eyre::Result<()> {
// The direction is opposite here
let src = self.0.data_dir.static_files();
let dst = self.0.conversion_tmp_dir();
for (src_path, file_name) in self.iterate_files_for_segment(block_range, &src)? {
let dst_path = dst.join(file_name);
if dst_path.exists() {
std::fs::remove_file(&dst_path)?;
}
std::os::unix::fs::symlink(src_path, dst_path)?;
}
Ok(())
}
fn move_static_files_for_segment(
&self,
block_range: SegmentRangeInclusive,
) -> eyre::Result<()> {
let src = self.0.conversion_tmp_dir();
let dst = self.0.data_dir.static_files();
for (src_path, file_name) in self.iterate_files_for_segment(block_range, &src)? {
let dst_path = dst.join(file_name);
std::fs::remove_file(&dst_path)?;
std::fs::rename(&src_path, &dst_path)?;
}
// Still StaticFileProvider needs the file to exist, so we create a symlink
self.create_placeholder(block_range)
}
fn migrate_static_files(&self) -> eyre::Result<bool> {
let conversion_tmp = self.0.conversion_tmp_dir();
let old_path = self.0.data_dir.static_files();
if conversion_tmp.exists() {
std::fs::remove_dir_all(&conversion_tmp)?;
}
std::fs::create_dir_all(&conversion_tmp)?;
let mut all_static_files = iter_static_files(&old_path)?;
let all_static_files =
all_static_files.remove(&StaticFileSegment::Headers).unwrap_or_default();
let mut first = true;
for (block_range, _tx_ranges) in all_static_files {
let migration_needed = self.using_old_header(block_range.start())? ||
self.using_old_header(block_range.end())?;
if !migration_needed {
// Create a placeholder symlink
self.create_placeholder(block_range)?;
continue;
}
if first {
check_if_migration_enabled()?;
info!("Old database detected, migrating static files...");
first = false;
}
let sf_provider = self.0.sf_provider();
let sf_tmp_provider = StaticFileProvider::<HlPrimitives>::read_write(&conversion_tmp)?;
let provider = self.0.provider_factory.provider()?;
let block_range_for_filename = sf_provider.find_fixed_range(block_range.start());
migrate_single_static_file(&sf_tmp_provider, &sf_provider, &provider, block_range)?;
self.move_static_files_for_segment(block_range_for_filename)?;
}
Ok(!first)
}
fn using_old_header(&self, number: u64) -> eyre::Result<bool> {
let sf_provider = self.0.sf_provider();
let content = old_headers_range(&sf_provider, number..=number)?;
let &[row] = &content.as_slice() else {
warn!("No header found for block {}", number);
return Ok(false);
};
Ok(using_old_header(number, &row[0]))
}
}
// Problem is that decompress just panics when the header is not valid
// So we need heuristics...
fn is_old_header(header: &[u8]) -> bool {
const SHA3_UNCLE_OFFSET: usize = 0x24;
const SHA3_UNCLE_HASH: B256 =
b256!("1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347");
const GENESIS_PREFIX: [u8; 4] = [0x01, 0x20, 0x00, 0xf8];
let Some(sha3_uncle_hash) = header.get(SHA3_UNCLE_OFFSET..SHA3_UNCLE_OFFSET + 32) else {
return false;
};
if sha3_uncle_hash == SHA3_UNCLE_HASH {
return true;
}
// genesis block might be different
if header.starts_with(&GENESIS_PREFIX) {
return true;
}
false
}
fn is_new_header(header: &[u8]) -> bool {
rmp_serde::from_slice::<HlHeader>(header).is_ok()
}
fn migrate_single_static_file<N: HlNodeType>(
sf_out: &StaticFileProvider<HlPrimitives>,
sf_in: &StaticFileProvider<HlPrimitives>,
provider: &DatabaseProvider<Tx<RO>, NodeTypesWithDBAdapter<N, Arc<DatabaseEnv>>>,
block_range: SegmentRangeInclusive,
) -> Result<(), eyre::Error> {
info!("Migrating block range {}...", block_range);
// block_ranges into chunks of 50000 blocks
const CHUNK_SIZE: u64 = 50000;
for chunk in (block_range.start()..=block_range.end()).step_by(CHUNK_SIZE as usize) {
let end = std::cmp::min(chunk + CHUNK_SIZE - 1, block_range.end());
let block_range = chunk..=end;
let headers = old_headers_range(sf_in, block_range.clone())?;
let receipts = provider.receipts_by_block_range(block_range.clone())?;
assert_eq!(headers.len(), receipts.len());
let mut writer = sf_out.get_writer(*block_range.start(), StaticFileSegment::Headers)?;
let new_headers = std::iter::zip(headers, receipts)
.map(|(header, receipts)| {
let eth_header = Header::decompress(&header[0]).unwrap();
let hl_header = to_hl_header(receipts, eth_header);
let difficulty: U256 = CompactU256::decompress(&header[1]).unwrap().into();
let hash = BlockHash::decompress(&header[2]).unwrap();
(hl_header, difficulty, hash)
})
.collect::<Vec<_>>();
for header in new_headers {
writer.append_header(&header.0, header.1, &header.2)?;
}
writer.commit().unwrap();
info!("Migrated block range {:?}...", block_range);
}
Ok(())
}
fn to_hl_header(receipts: Vec<EthereumReceipt>, eth_header: Header) -> HlHeader {
let system_tx_count = receipts.iter().filter(|r| r.cumulative_gas_used == 0).count();
HlHeader::from_ethereum_header(eth_header, &receipts, system_tx_count as u64)
}
fn old_headers_range(
provider: &StaticFileProvider<HlPrimitives>,
block_range: impl std::ops::RangeBounds<u64>,
) -> ProviderResult<Vec<Vec<Vec<u8>>>> {
Ok(provider
.fetch_range_with_predicate(
StaticFileSegment::Headers,
to_range(block_range),
|cursor, number| {
cursor.get(number.into(), 0b111).map(|rows| {
rows.map(|columns| columns.into_iter().map(|column| column.to_vec()).collect())
})
},
|_| true,
)?
.into_iter()
.collect())
}
// Copied from reth
fn to_range<R: std::ops::RangeBounds<u64>>(bounds: R) -> std::ops::Range<u64> {
let start = match bounds.start_bound() {
std::ops::Bound::Included(&v) => v,
std::ops::Bound::Excluded(&v) => v + 1,
std::ops::Bound::Unbounded => 0,
};
let end = match bounds.end_bound() {
std::ops::Bound::Included(&v) => v + 1,
std::ops::Bound::Excluded(&v) => v,
std::ops::Bound::Unbounded => u64::MAX,
};
start..end
}
fn using_old_header(number: u64, header: &[u8]) -> bool {
let deserialized_old = is_old_header(header);
let deserialized_new = is_new_header(header);
assert!(
deserialized_old ^ deserialized_new,
"Header is not valid: {} {}\ndeserialized_old: {}\ndeserialized_new: {}",
number,
header.encode_hex(),
deserialized_old,
deserialized_new
);
deserialized_old && !deserialized_new
}

View File

@ -33,7 +33,6 @@ pub mod cli;
pub mod consensus;
pub mod engine;
pub mod evm;
pub mod migrate;
pub mod network;
pub mod primitives;
pub mod rpc;
@ -51,14 +50,12 @@ pub struct HlNode {
engine_handle_rx: Arc<Mutex<Option<oneshot::Receiver<ConsensusEngineHandle<HlPayloadTypes>>>>>,
block_source_config: BlockSourceConfig,
debug_cutoff_height: Option<u64>,
allow_network_overrides: bool,
}
impl HlNode {
pub fn new(
block_source_config: BlockSourceConfig,
debug_cutoff_height: Option<u64>,
allow_network_overrides: bool,
) -> (Self, oneshot::Sender<ConsensusEngineHandle<HlPayloadTypes>>) {
let (tx, rx) = oneshot::channel();
(
@ -66,7 +63,6 @@ impl HlNode {
engine_handle_rx: Arc::new(Mutex::new(Some(rx))),
block_source_config,
debug_cutoff_height,
allow_network_overrides,
},
tx,
)
@ -98,7 +94,6 @@ impl HlNode {
engine_handle_rx: self.engine_handle_rx.clone(),
block_source_config: self.block_source_config.clone(),
debug_cutoff_height: self.debug_cutoff_height,
allow_network_overrides: self.allow_network_overrides,
})
.consensus(HlConsensusBuilder::default())
}

View File

@ -179,7 +179,7 @@ where
#[cfg(test)]
mod tests {
use crate::{HlHeader, chainspec::hl::hl_mainnet};
use crate::{chainspec::hl::hl_mainnet, HlHeader};
use super::*;
use alloy_primitives::{B256, U128};

View File

@ -25,10 +25,7 @@ use reth_network::{NetworkConfig, NetworkHandle, NetworkManager};
use reth_network_api::PeersInfo;
use reth_provider::StageCheckpointReader;
use reth_stages_types::StageId;
use std::{
net::{Ipv4Addr, SocketAddr},
sync::Arc,
};
use std::sync::Arc;
use tokio::sync::{Mutex, mpsc, oneshot};
use tracing::info;
@ -147,8 +144,6 @@ pub struct HlNetworkBuilder {
pub(crate) block_source_config: BlockSourceConfig,
pub(crate) debug_cutoff_height: Option<u64>,
pub(crate) allow_network_overrides: bool,
}
impl HlNetworkBuilder {
@ -179,24 +174,15 @@ impl HlNetworkBuilder {
ImportService::new(consensus, handle, from_network, to_network).await.unwrap();
});
let mut config_builder = ctx.network_config_builder()?;
// Only apply localhost-only network settings if network overrides are NOT allowed
if !self.allow_network_overrides {
config_builder = config_builder
.discovery_addr(SocketAddr::new(Ipv4Addr::LOCALHOST.into(), 0))
.listener_addr(SocketAddr::new(Ipv4Addr::LOCALHOST.into(), 0))
Ok(ctx.build_network_config(
ctx.network_config_builder()?
.disable_dns_discovery()
.disable_nat();
}
config_builder = config_builder
.boot_nodes(boot_nodes())
.set_head(ctx.head())
.with_pow()
.block_import(Box::new(HlBlockImport::new(handle)));
Ok(ctx.build_network_config(config_builder))
.disable_nat()
.boot_nodes(boot_nodes())
.set_head(ctx.head())
.with_pow()
.block_import(Box::new(HlBlockImport::new(handle))),
))
}
}

View File

@ -3,13 +3,8 @@ use alloy_primitives::Address;
use reth_primitives_traits::{BlockBody as BlockBodyTrait, InMemorySize};
use serde::{Deserialize, Serialize};
use crate::{
HlHeader,
node::{
primitives::TransactionSigned,
types::{ReadPrecompileCall, ReadPrecompileCalls},
},
};
use crate::node::primitives::{BlockBody, TransactionSigned};
pub use crate::node::types::{ReadPrecompileCall, ReadPrecompileCalls};
/// Block body for HL. It is equivalent to Ethereum [`BlockBody`] but additionally stores sidecars
/// for blob transactions.
@ -34,8 +29,6 @@ pub struct HlBlockBody {
pub highest_precompile_address: Option<Address>,
}
pub type BlockBody = alloy_consensus::BlockBody<TransactionSigned, HlHeader>;
impl InMemorySize for HlBlockBody {
fn size(&self) -> usize {
self.inner.size() +

View File

@ -45,11 +45,7 @@ pub struct HlHeaderExtras {
}
impl HlHeader {
pub(crate) fn from_ethereum_header(
header: Header,
receipts: &[EthereumReceipt],
system_tx_count: u64,
) -> HlHeader {
pub(crate) fn from_ethereum_header(header: Header, receipts: &[EthereumReceipt], system_tx_count: u64) -> HlHeader {
let logs_bloom = logs_bloom(receipts.iter().flat_map(|r| &r.logs));
HlHeader {
inner: header,
@ -187,9 +183,8 @@ impl reth_codecs::Compact for HlHeader {
// because Compact trait requires the Bytes field to be placed at the end of the struct.
// Bytes::from_compact just reads all trailing data as the Bytes field.
//
// Hence we need to use other form of serialization, since extra headers are not
// Compact-compatible. We just treat all header fields as rmp-serialized one `Bytes`
// field.
// Hence we need to use other form of serialization, since extra headers are not Compact-compatible.
// We just treat all header fields as rmp-serialized one `Bytes` field.
let result: Bytes = rmp_serde::to_vec(&self).unwrap().into();
result.to_compact(buf)
}

View File

@ -2,12 +2,12 @@ use reth_ethereum_primitives::Receipt;
use reth_primitives::NodePrimitives;
pub mod transaction;
pub use transaction::TransactionSigned;
pub use transaction::{BlockBody, TransactionSigned};
pub mod block;
pub use block::HlBlock;
pub mod body;
pub use body::{BlockBody, HlBlockBody};
pub use body::HlBlockBody;
pub mod header;
pub use header::HlHeader;

View File

@ -1,6 +1,6 @@
#![allow(clippy::owned_cow)]
use super::{HlBlock, HlBlockBody, TransactionSigned};
use crate::{HlHeader, node::types::ReadPrecompileCalls};
use crate::{node::types::ReadPrecompileCalls, HlHeader};
use alloy_consensus::{BlobTransactionSidecar, BlockBody};
use alloy_eips::eip4895::Withdrawals;
use alloy_primitives::Address;
@ -95,7 +95,7 @@ impl Decodable for HlBlockBody {
Ok(Self {
inner: BlockBody {
transactions: transactions.into_owned(),
ommers: ommers.into_owned(),
ommers: ommers.into_owned().into_iter().map(Into::into).collect(),
withdrawals: withdrawals.map(|w| w.into_owned()),
},
sidecars: sidecars.map(|s| s.into_owned()),

View File

@ -6,10 +6,7 @@ use serde::{Deserialize, Serialize};
use std::borrow::Cow;
use super::{HlBlock, HlBlockBody};
use crate::{
HlHeader,
node::{primitives::BlockBody, types::ReadPrecompileCalls},
};
use crate::{node::{primitives::BlockBody, types::ReadPrecompileCalls}, HlHeader};
#[derive(Debug, Serialize, Deserialize)]
pub struct HlBlockBodyBincode<'a> {

View File

@ -2,7 +2,7 @@
//! except that it supports pseudo signer for system transactions.
use std::convert::Infallible;
use crate::evm::transaction::HlTxEnv;
use crate::{evm::transaction::HlTxEnv, HlHeader};
use alloy_consensus::{
SignableTransaction, Signed, Transaction as TransactionTrait, TransactionEnvelope, TxEip1559,
TxEip2930, TxEip4844, TxEip7702, TxLegacy, TxType, TypedTransaction, crypto::RecoveryError,
@ -181,6 +181,8 @@ impl SerdeBincodeCompat for TransactionSigned {
}
}
pub type BlockBody = alloy_consensus::BlockBody<TransactionSigned, HlHeader>;
impl TryFrom<TransactionSigned> for PooledTransactionVariant {
type Error = <InnerType as TryInto<PooledTransactionVariant>>::Error;
@ -209,6 +211,22 @@ impl Decompress for TransactionSigned {
}
}
pub fn convert_to_eth_block_body(value: BlockBody) -> alloy_consensus::BlockBody<InnerType, HlHeader> {
alloy_consensus::BlockBody {
transactions: value.transactions.into_iter().map(|tx| tx.into_inner()).collect(),
ommers: value.ommers.into_iter().map(|ommer| ommer.into()).collect(),
withdrawals: value.withdrawals,
}
}
pub fn convert_to_hl_block_body(value: alloy_consensus::BlockBody<InnerType, HlHeader>) -> BlockBody {
BlockBody {
transactions: value.transactions.into_iter().map(TransactionSigned::Default).collect(),
ommers: value.ommers,
withdrawals: value.withdrawals,
}
}
impl TryIntoSimTx<TransactionSigned> for TransactionRequest {
fn try_into_sim_tx(self) -> Result<TransactionSigned, ValueError<Self>> {
let tx = self

View File

@ -1,103 +0,0 @@
use crate::node::{
spot_meta::{SpotId, erc20_contract_to_spot_token},
storage::tables::{self, SPOT_METADATA_KEY},
types::reth_compat,
};
use alloy_primitives::Address;
use reth_db::{
DatabaseEnv,
cursor::DbCursorRO,
};
use reth_db_api::{
Database,
transaction::DbTx,
};
use std::{collections::BTreeMap, sync::Arc};
use tracing::info;
/// Load spot metadata from database and initialize cache
pub fn load_spot_metadata_cache(db: &Arc<DatabaseEnv>, chain_id: u64) {
// Try to read from database
let data = match db.view(|tx| -> Result<Option<Vec<u8>>, reth_db::DatabaseError> {
let mut cursor = tx.cursor_read::<tables::SpotMetadata>()?;
Ok(cursor.seek_exact(SPOT_METADATA_KEY)?.map(|(_, data)| data.to_vec()))
}) {
Ok(Ok(data)) => data,
Ok(Err(e)) => {
info!(
"Failed to read spot metadata from database: {}. Will fetch on-demand from API.",
e
);
return;
}
Err(e) => {
info!(
"Database view error while loading spot metadata: {}. Will fetch on-demand from API.",
e
);
return;
}
};
// Check if data exists
let Some(data) = data else {
info!(
"No spot metadata found in database for chain {}. Run 'init-state' to populate, or it will be fetched on-demand from API.",
chain_id
);
return;
};
// Deserialize metadata
let serializable_map = match rmp_serde::from_slice::<BTreeMap<Address, u64>>(&data) {
Ok(map) => map,
Err(e) => {
info!("Failed to deserialize spot metadata: {}. Will fetch on-demand from API.", e);
return;
}
};
// Convert and initialize cache
let metadata: BTreeMap<Address, SpotId> =
serializable_map.into_iter().map(|(addr, index)| (addr, SpotId { index })).collect();
info!("Loaded spot metadata from database ({} entries)", metadata.len());
reth_compat::initialize_spot_metadata_cache(metadata);
}
/// Initialize spot metadata in database from API
pub fn init_spot_metadata(
db_path: impl AsRef<std::path::Path>,
db_args: reth_db::mdbx::DatabaseArguments,
chain_id: u64,
) -> eyre::Result<()> {
info!("Initializing spot metadata for chain {}", chain_id);
let db = Arc::new(reth_db::open_db(db_path.as_ref(), db_args)?);
// Check if spot metadata already exists
let exists = db.view(|tx| -> Result<bool, reth_db::DatabaseError> {
let mut cursor = tx.cursor_read::<tables::SpotMetadata>()?;
Ok(cursor.seek_exact(SPOT_METADATA_KEY)?.is_some())
})??;
if exists {
info!("Spot metadata already exists in database");
return Ok(());
}
// Fetch from API
let metadata = match erc20_contract_to_spot_token(chain_id) {
Ok(m) => m,
Err(e) => {
info!("Failed to fetch spot metadata from API: {}. Will be fetched on-demand.", e);
return Ok(());
}
};
// Store to database
reth_compat::store_spot_metadata(&db, &metadata)?;
info!("Successfully fetched and stored spot metadata for chain {}", chain_id);
Ok(())
}

View File

@ -5,7 +5,6 @@ use std::collections::BTreeMap;
use crate::chainspec::{MAINNET_CHAIN_ID, TESTNET_CHAIN_ID};
pub mod init;
mod patch;
#[derive(Debug, Clone, Serialize, Deserialize)]
@ -26,7 +25,7 @@ pub struct SpotMeta {
}
#[derive(Debug, Clone)]
pub struct SpotId {
pub(crate) struct SpotId {
pub index: u64,
}

View File

@ -1,6 +1,9 @@
use crate::{
HlBlock, HlBlockBody, HlHeader, HlPrimitives,
node::{primitives::TransactionSigned, types::HlExtras},
node::{
primitives::transaction::{convert_to_eth_block_body, convert_to_hl_block_body},
types::HlExtras,
},
};
use alloy_consensus::BlockHeader;
use alloy_primitives::Bytes;
@ -10,6 +13,7 @@ use reth_db::{
cursor::{DbCursorRO, DbCursorRW},
transaction::{DbTx, DbTxMut},
};
use reth_primitives::TransactionSigned;
use reth_primitives_traits::Block;
use reth_provider::{
BlockBodyReader, BlockBodyWriter, ChainSpecProvider, ChainStorageReader, ChainStorageWriter,
@ -87,17 +91,30 @@ where
let mut read_precompile_calls = Vec::with_capacity(bodies.len());
for (block_number, body) in bodies {
let (inner_opt, extras) = match body {
match body {
Some(HlBlockBody {
inner,
sidecars: _,
read_precompile_calls,
read_precompile_calls: rpc,
highest_precompile_address,
}) => (Some(inner), HlExtras { read_precompile_calls, highest_precompile_address }),
None => Default::default(),
};
eth_bodies.push((block_number, inner_opt));
read_precompile_calls.push((block_number, extras));
}) => {
eth_bodies.push((block_number, Some(convert_to_eth_block_body(inner))));
read_precompile_calls.push((
block_number,
HlExtras { read_precompile_calls: rpc, highest_precompile_address },
));
}
None => {
eth_bodies.push((block_number, None));
read_precompile_calls.push((
block_number,
HlExtras {
read_precompile_calls: Default::default(),
highest_precompile_address: None,
},
));
}
}
}
self.0.write_block_bodies(provider, eth_bodies, write_to)?;
@ -131,6 +148,12 @@ where
inputs: Vec<ReadBodyInput<'_, Self::Block>>,
) -> ProviderResult<Vec<HlBlockBody>> {
let read_precompile_calls = self.read_precompile_calls(provider, &inputs)?;
let inputs: Vec<(&HlHeader, _)> = inputs
.into_iter()
.map(|(header, transactions)| {
(header, transactions.into_iter().map(|tx| tx.into_inner()).collect())
})
.collect();
let inputs: Vec<(&<Self::Block as Block>::Header, _)> = inputs;
let eth_bodies = self.0.read_block_bodies(provider, inputs)?;
let eth_bodies: Vec<alloy_consensus::BlockBody<_, HlHeader>> = eth_bodies;
@ -140,7 +163,7 @@ where
.into_iter()
.zip(read_precompile_calls)
.map(|(inner, extra)| HlBlockBody {
inner,
inner: convert_to_hl_block_body(inner),
sidecars: None,
read_precompile_calls: extra.read_precompile_calls,
highest_precompile_address: extra.highest_precompile_address,

View File

@ -2,21 +2,10 @@ use alloy_primitives::{BlockNumber, Bytes};
use reth_db::{TableSet, TableType, TableViewer, table::TableInfo, tables};
use std::fmt;
/// Static key used for spot metadata, as the database is unique to each chain.
/// This may later serve as a versioning key to assist with future database migrations.
pub const SPOT_METADATA_KEY: u64 = 0;
tables! {
/// Read precompile calls for each block.
table BlockReadPrecompileCalls {
type Key = BlockNumber;
type Value = Bytes;
}
/// Spot metadata mapping (EVM address to spot token index).
/// Uses a constant key since the database is chain-specific.
table SpotMetadata {
type Key = u64;
type Value = Bytes;
}
}

View File

@ -19,10 +19,10 @@ pub struct ReadPrecompileCalls(pub Vec<ReadPrecompileCall>);
pub(crate) mod reth_compat;
// Re-export spot metadata functions
pub use reth_compat::{initialize_spot_metadata_cache, set_spot_metadata_db};
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[derive(
Debug, Clone, Serialize, Deserialize, Default, RlpEncodable, RlpDecodable, Eq, PartialEq, Hash,
)]
#[rlp(trailing)]
pub struct HlExtras {
pub read_precompile_calls: Option<ReadPrecompileCalls>,
pub highest_precompile_address: Option<Address>,
@ -30,8 +30,8 @@ pub struct HlExtras {
impl InMemorySize for HlExtras {
fn size(&self) -> usize {
self.read_precompile_calls.as_ref().map_or(0, |s| s.0.len()) +
self.highest_precompile_address.as_ref().map_or(0, |_| 20)
self.read_precompile_calls.as_ref().map_or(0, |s| s.0.len())
+ self.highest_precompile_address.as_ref().map_or(0, |_| 20)
}
}
@ -130,19 +130,6 @@ pub struct SystemTx {
pub receipt: Option<LegacyReceipt>,
}
impl SystemTx {
pub fn gas_limit(&self) -> u64 {
use reth_compat::Transaction;
match &self.tx {
Transaction::Legacy(tx) => tx.gas_limit,
Transaction::Eip2930(tx) => tx.gas_limit,
Transaction::Eip1559(tx) => tx.gas_limit,
Transaction::Eip4844(tx) => tx.gas_limit,
Transaction::Eip7702(tx) => tx.gas_limit,
}
}
}
#[derive(
Debug,
Clone,

View File

@ -1,14 +1,11 @@
//! Copy of reth codebase to preserve serialization compatibility
use crate::node::storage::tables::{SPOT_METADATA_KEY, SpotMetadata};
use alloy_consensus::{Header, Signed, TxEip1559, TxEip2930, TxEip4844, TxEip7702, TxLegacy};
use alloy_primitives::{Address, BlockHash, Bytes, Signature, TxKind, U256};
use reth_db::{DatabaseEnv, DatabaseError, cursor::DbCursorRW};
use reth_db_api::{Database, transaction::DbTxMut};
use alloy_primitives::{Address, BlockHash, Signature, TxKind, U256};
use reth_primitives::TransactionSigned as RethTxSigned;
use serde::{Deserialize, Serialize};
use std::{
collections::BTreeMap,
sync::{Arc, LazyLock, Mutex, RwLock},
sync::{Arc, LazyLock, RwLock},
};
use tracing::info;
@ -84,79 +81,31 @@ pub struct SealedBlock {
pub body: BlockBody,
}
static SPOT_EVM_MAP: LazyLock<Arc<RwLock<BTreeMap<Address, SpotId>>>> =
LazyLock::new(|| Arc::new(RwLock::new(BTreeMap::new())));
// Optional database handle for persisting on-demand fetches
static DB_HANDLE: LazyLock<Mutex<Option<Arc<DatabaseEnv>>>> = LazyLock::new(|| Mutex::new(None));
/// Set the database handle for persisting spot metadata
pub fn set_spot_metadata_db(db: Arc<DatabaseEnv>) {
*DB_HANDLE.lock().unwrap() = Some(db);
}
/// Initialize the spot metadata cache with data loaded from database.
/// This should be called during node initialization.
pub fn initialize_spot_metadata_cache(metadata: BTreeMap<Address, SpotId>) {
*SPOT_EVM_MAP.write().unwrap() = metadata;
}
/// Helper function to serialize and store spot metadata to database
pub fn store_spot_metadata(
db: &Arc<DatabaseEnv>,
metadata: &BTreeMap<Address, SpotId>,
) -> Result<(), DatabaseError> {
db.update(|tx| {
let mut cursor = tx.cursor_write::<SpotMetadata>()?;
// Serialize to BTreeMap<Address, u64>
let serializable_map: BTreeMap<Address, u64> =
metadata.iter().map(|(addr, spot)| (*addr, spot.index)).collect();
cursor.upsert(
SPOT_METADATA_KEY,
&Bytes::from(
rmp_serde::to_vec(&serializable_map).expect("Failed to serialize spot metadata"),
),
)?;
Ok(())
})?
}
/// Persist spot metadata to database if handle is available
fn persist_spot_metadata_to_db(metadata: &BTreeMap<Address, SpotId>) {
if let Some(db) = DB_HANDLE.lock().unwrap().as_ref() {
match store_spot_metadata(db, metadata) {
Ok(_) => info!("Persisted spot metadata to database"),
Err(e) => info!("Failed to persist spot metadata to database: {}", e),
}
}
}
fn system_tx_to_reth_transaction(transaction: &SystemTx, chain_id: u64) -> TxSigned {
let Transaction::Legacy(tx) = &transaction.tx else {
panic!("Unexpected transaction type");
};
let TxKind::Call(to) = tx.to else {
panic!("Unexpected contract creation");
};
let s = if tx.input.is_empty() {
U256::from(0x1)
} else {
loop {
if let Some(spot) = SPOT_EVM_MAP.read().unwrap().get(&to) {
break spot.to_s();
}
static EVM_MAP: LazyLock<Arc<RwLock<BTreeMap<Address, SpotId>>>> =
LazyLock::new(|| Arc::new(RwLock::new(BTreeMap::new())));
{
let Transaction::Legacy(tx) = &transaction.tx else {
panic!("Unexpected transaction type");
};
let TxKind::Call(to) = tx.to else {
panic!("Unexpected contract creation");
};
let s = if tx.input.is_empty() {
U256::from(0x1)
} else {
loop {
if let Some(spot) = EVM_MAP.read().unwrap().get(&to) {
break spot.to_s();
}
// Cache miss - fetch from API, update cache, and persist to database
info!("Contract not found: {to:?} from spot mapping, fetching from API...");
let metadata = erc20_contract_to_spot_token(chain_id).unwrap();
*SPOT_EVM_MAP.write().unwrap() = metadata.clone();
persist_spot_metadata_to_db(&metadata);
}
};
let signature = Signature::new(U256::from(0x1), s, true);
TxSigned::Default(RethTxSigned::Legacy(Signed::new_unhashed(tx.clone(), signature)))
info!("Contract not found: {to:?} from spot mapping, fetching again...");
*EVM_MAP.write().unwrap() = erc20_contract_to_spot_token(chain_id).unwrap();
}
};
let signature = Signature::new(U256::from(0x1), s, true);
TxSigned::Default(RethTxSigned::Legacy(Signed::new_unhashed(tx.clone(), signature)))
}
}
impl SealedBlock {
@ -164,13 +113,10 @@ impl SealedBlock {
&self,
read_precompile_calls: ReadPrecompileCalls,
highest_precompile_address: Option<Address>,
mut system_txs: Vec<super::SystemTx>,
system_txs: Vec<super::SystemTx>,
receipts: Vec<LegacyReceipt>,
chain_id: u64,
) -> HlBlock {
// NOTE: These types of transactions are tracked at #97.
system_txs.retain(|tx| tx.receipt.is_some());
let mut merged_txs = vec![];
merged_txs.extend(system_txs.iter().map(|tx| system_tx_to_reth_transaction(tx, chain_id)));
merged_txs.extend(self.body.transactions.iter().map(|tx| tx.to_reth_transaction()));

View File

@ -81,13 +81,13 @@ impl BlockPoller {
.await
.ok_or(eyre::eyre!("Failed to find latest block number"))?;
loop {
if let Some(debug_cutoff_height) = debug_cutoff_height &&
next_block_number > debug_cutoff_height
{
next_block_number = debug_cutoff_height;
}
if let Some(debug_cutoff_height) = debug_cutoff_height &&
next_block_number > debug_cutoff_height
{
next_block_number = debug_cutoff_height;
}
loop {
match block_source.collect_block(next_block_number).await {
Ok(block) => {
block_tx.send((next_block_number, block)).await?;

View File

@ -1,49 +0,0 @@
#!/bin/bash
set -e
export ETH_RPC_URL="${ETH_RPC_URL:-wss://hl-archive-node.xyz}"
success() {
echo "Success: $1"
}
fail() {
echo "Failed: $1"
exit 1
}
ensure_cmd() {
command -v "$1" > /dev/null 2>&1 || fail "$1 is required"
}
ensure_cmd jq
ensure_cmd cast
ensure_cmd wscat
if [[ ! "$ETH_RPC_URL" =~ ^wss?:// ]]; then
fail "ETH_RPC_URL must be a websocket url"
fi
TITLE="Issue #78 - eth_getLogs should return system transactions"
cast logs \
--rpc-url "$ETH_RPC_URL" \
--from-block 15312567 \
--to-block 15312570 \
--address 0x9fdbda0a5e284c32744d2f17ee5c74b284993463 \
0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef \
| grep -q "0x00000000000000000000000020000000000000000000000000000000000000c5" \
&& success "$TITLE" || fail "$TITLE"
TITLE="Issue #78 - eth_getBlockByNumber should return the same logsBloom as official RPC"
OFFICIAL_RPC="https://rpc.hyperliquid.xyz/evm"
A=$(cast block 1394092 --rpc-url "$ETH_RPC_URL" -f logsBloom | md5sum)
B=$(cast block 1394092 --rpc-url "$OFFICIAL_RPC" -f logsBloom | md5sum)
echo node "$A"
echo rpc\ "$B"
[[ "$A" == "$B" ]] && success "$TITLE" || fail "$TITLE"
TITLE="eth_subscribe newHeads via wscat"
CMD='{"jsonrpc":"2.0","id":1,"method":"eth_subscribe","params":["newHeads"]}'
wscat -w 2 -c "$ETH_RPC_URL" -x "$CMD" | tail -1 | jq -r .params.result.nonce | grep 0x \
&& success "$TITLE" || fail "$TITLE"