From d4d452aba45d1997dcedc3916c7ae679778ddf62 Mon Sep 17 00:00:00 2001 From: Clyde Date: Fri, 8 Aug 2025 16:39:57 +0800 Subject: [PATCH 01/11] fix: debug --- Cargo.toml | 4 + debug_seal_43132201.rs | 118 +++++ debug_seal_recovery.rs | 38 ++ .../parlia_getSnapshot/43132201/our_ec2.json | 1 + .../43132201/public_rpc.json | 460 ++++++++++++++++++ scripts/start_testnet.sh | 3 +- src/consensus/parlia/validation.rs | 36 +- tests/seal_recovery_test.rs | 109 +++++ 8 files changed, 765 insertions(+), 4 deletions(-) create mode 100644 debug_seal_43132201.rs create mode 100644 debug_seal_recovery.rs create mode 100644 examples/parlia_api/parlia_getSnapshot/43132201/our_ec2.json create mode 100644 examples/parlia_api/parlia_getSnapshot/43132201/public_rpc.json create mode 100644 tests/seal_recovery_test.rs diff --git a/Cargo.toml b/Cargo.toml index 21186c6..51eeede 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,6 +16,10 @@ path = "src/main.rs" name = "snapshot-checker" path = "src/bin/snapshot_checker.rs" +[[bin]] +name = "debug_seal_43132201" +path = "debug_seal_43132201.rs" + [dependencies] reth = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b" } reth-cli = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b" } diff --git a/debug_seal_43132201.rs b/debug_seal_43132201.rs new file mode 100644 index 0000000..530532d --- /dev/null +++ b/debug_seal_43132201.rs @@ -0,0 +1,118 @@ +#!/usr/bin/env cargo-script + +//! Simple debug script for block 43132201 seal recovery issue +//! Run with: cargo run --bin debug_seal_43132201 + +use alloy_consensus::{Header, BlockHeader}; +use alloy_primitives::{Address, B256, U256, Bytes, hex, Bloom}; +use std::str::FromStr; +use std::sync::Arc; + +fn main() { + println!("๐Ÿ” Debugging seal recovery for block 43132201"); + + // Actual block data from BSC testnet for block 43132201 + test_block_43132201(); +} + +fn test_block_43132201() { + println!("=== TESTING BLOCK 43132201 WITH REAL BSC CONSENSUS VALIDATOR ==="); + + // Real block data from BSC testnet block 43132201 + let expected_miner = Address::from_str("0x1a3d9d7a717d64e6088ac937d5aacdd3e20ca963").unwrap(); + let wrong_recovered = Address::from_str("0x95A216f51940259C488A686f5145dA1b1a82afD6").unwrap(); + + println!("Expected miner: {}", expected_miner); + println!("Wrong recovered: {}", wrong_recovered); + + // Create the exact header data from your EC2 node + let header = Header { + parent_hash: B256::from_str("0xf337513acca19fa58981201bcb8cb2c56cf3afece07c25e85b2cbbb2a1d23312").unwrap(), + ommers_hash: B256::from_str("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347").unwrap(), + beneficiary: expected_miner, + state_root: B256::from_str("0xd9382782278ef90f5e4ecd54434c4382a792ba9fb470636528c16e4f4720e09b").unwrap(), + transactions_root: B256::from_str("0xce21b4817bb3e7d57449fd327c5fb3081585b7be8212c65cee93bd033b38fac5").unwrap(), + receipts_root: B256::from_str("0x4fda1f67ddcd586290f023346407e46fe2cffd5c4e7360100dbcb084d862d6dc").unwrap(), + logs_bloom: Bloom::from_str("0x06000000000000000000004000000000000000000000000000000000000000000000180000220000000000000000000000080080000000000000000000000000000028000000000000000000000000002010000000000000000000000080000000080020800200000000100008000000080000000000000002000000000008000000000000000000008000000000000000000400000000000008040000000220000000000000002008001000028000000000010000000000000000000000000000040000001000000000000000100000200000000004000000104002000000000008000000000000010100040000110000009000000000004000000000080000").unwrap(), + difficulty: U256::from(2), + number: 43132201, + gas_limit: 70000000, // 0x42c1d80 + gas_used: 321004, // 0x4e5ec + timestamp: 1724395524, // 0x66c3f004 + extra_data: Bytes::from(hex::decode("d98301040d846765746889676f312e32312e3132856c696e757800000299d9bcf8b381fbb86084e92b477453ef7a021ebec2fe433dfb431ecf6fd1b5386e208a3055e3c0b5cc651852bb4c75a9c68c073c324dad308d018f3e6119415c54f47c6e6c1b603f311c29e8eadd6b55870f2ada055be8b3a776650ad6241bb7a763a66508e6563faaf84c8402922527a05a0a26c82e1d42ca0918957533e1ac5a97bf2d53837ce122944e7bd3189643508402922528a0f337513acca19fa58981201bcb8cb2c56cf3afece07c25e85b2cbbb2a1d2331280a021739230c7e8e9793d6a254992d1ac0401ff68da7a820398fc94a7a8667cdd4ba5b068b15acb1a33353779111ce635afb5eff4acef9a0b9eb5cf3d58b4a63600").unwrap()), + mix_hash: B256::ZERO, // From your data: 0x0000... + nonce: 0u64.into(), // From your data: 0x0000... + base_fee_per_gas: Some(0), + withdrawals_root: Some(B256::from_str("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421").unwrap()), + blob_gas_used: Some(0), + excess_blob_gas: Some(0), + parent_beacon_block_root: Some(B256::ZERO), + requests_hash: None, + }; + + let block_hash = B256::from_str("0x42e36cb84f8101382ac947a453e1cacade3966a8b4a5353ca76a389c5b28772c").unwrap(); + let sealed_header = reth_primitives_traits::SealedHeader::new(header, block_hash); + + // Test with real BSC consensus validator + test_with_real_bsc_validator(sealed_header, expected_miner, wrong_recovered); +} + +fn test_with_real_bsc_validator( + sealed_header: reth_primitives_traits::SealedHeader
, + expected_miner: Address, + wrong_recovered: Address +) { + use reth_bsc::consensus::parlia::validation::BscConsensusValidator; + use reth_bsc::chainspec::{BscChainSpec, bsc_testnet}; + + println!("\n๐Ÿ” Testing with real BscConsensusValidator..."); + + // Create the exact same validator your node uses + let chain_spec = Arc::new(BscChainSpec { + inner: bsc_testnet() + }); + let validator = BscConsensusValidator::new(chain_spec); + + // Debug the seal hash calculation details + println!("๐Ÿ”ง Debugging seal hash calculation..."); + println!("Block number: {}", sealed_header.number()); + println!("Chain ID: 97 (BSC testnet)"); + println!("ExtraData length: {}", sealed_header.extra_data().len()); + + // Call the exact same function that's failing in your node + match validator.recover_proposer_from_seal(&sealed_header) { + Ok(recovered_address) => { + println!("โœ… Recovered address: {}", recovered_address); + + if recovered_address == expected_miner { + println!("๐ŸŽ‰ SUCCESS: Recovered address matches expected miner!"); + } else if recovered_address == wrong_recovered { + println!("โŒ REPRODUCED: Got the wrong recovered address! This confirms the bug."); + println!(" Expected: {}", expected_miner); + println!(" Got: {}", recovered_address); + println!(" This proves the seal hash calculation is incorrect."); + } else { + println!("โ“ UNEXPECTED: Got a completely different address: {}", recovered_address); + println!(" Expected: {}", expected_miner); + println!(" Node got: {}", wrong_recovered); + println!(" Test got: {}", recovered_address); + println!(" All three are different! This suggests a data construction issue."); + } + } + Err(e) => { + println!("๐Ÿ’ฅ ERROR: Failed to recover proposer: {:?}", e); + } + } + + // Let's also manually inspect the signature data + println!("\n๐Ÿ” Manual signature inspection:"); + let extra_data = sealed_header.extra_data(); + let signature_start = extra_data.len() - 65; + let signature = &extra_data[signature_start..]; + println!("Signature bytes: {}", hex::encode(signature)); + println!("Recovery ID: {}", signature[64]); + + // Show beneficiary vs recovered + println!("Header beneficiary: {}", sealed_header.beneficiary()); + println!("BSC official miner: {}", expected_miner); +} diff --git a/debug_seal_recovery.rs b/debug_seal_recovery.rs new file mode 100644 index 0000000..1d06b44 --- /dev/null +++ b/debug_seal_recovery.rs @@ -0,0 +1,38 @@ +#!/usr/bin/env rust-script + +//! Debug script to test seal recovery for block 43132201 +//! Run with: cargo run --bin debug_seal_recovery + +use alloy_consensus::Header; +use alloy_primitives::{Address, B256, U256}; +use reth_primitives_traits::SealedHeader; +use std::str::FromStr; + +// Simulate the BscConsensusValidator seal recovery +fn debug_seal_recovery() { + // Block 43132201 data from the BSC testnet + let extra_data = "0xd98301040d846765746889676f312e32312e3132856c696e757800000299d9bcf8b381fbb86084e92b477453ef7a021ebec2fe433dfb431ecf6fd1b5386e208a3055e3c0b5cc651852bb4c75a9c68c073c324dad308d018f3e6119415c54f47c6e6c1b603f311c29e8eadd6b55870f2ada055be8b3a776650ad6241bb7a763a66508e6563faaf84c8402922527a05a0a26c82e1d42ca0918957533e1ac5a97bf2d53837ce122944e7bd3189643508402922528a0f337513acca19fa58981201bcb8cb2c56cf3afece07c25e85b2cbbb2a1d2331280a021739230c7e8e9793d6a254992d1ac0401ff68da7a820398fc94a7a8667cdd4ba5b068b15acb1a33353779111ce635afb5eff4acef9a0b9eb5cf3d58b4a63600"; + + let expected_miner = Address::from_str("0x1a3d9d7a717d64e6088ac937d5aacdd3e20ca963").unwrap(); + let recovered_miner = Address::from_str("0x95A216f51940259C488A686f5145dA1b1a82afD6").unwrap(); + + println!("๐Ÿ” Block 43132201 Seal Recovery Debug"); + println!("Expected miner: {}", expected_miner); + println!("Your recovered: {}", recovered_miner); + println!("ExtraData: {}", extra_data); + + // Parse extraData + let extra_bytes = hex::decode(&extra_data[2..]).expect("Invalid hex"); + let signature_start = extra_bytes.len() - 65; + let signature = &extra_bytes[signature_start..]; + + println!("๐Ÿ” Signature bytes (last 65): {}", hex::encode(signature)); + println!("Recovery ID: {}", signature[64]); + + // TODO: Add actual seal hash calculation and recovery here + // This would require implementing the same logic as your BscConsensusValidator +} + +fn main() { + debug_seal_recovery(); +} diff --git a/examples/parlia_api/parlia_getSnapshot/43132201/our_ec2.json b/examples/parlia_api/parlia_getSnapshot/43132201/our_ec2.json new file mode 100644 index 0000000..c9c94d9 --- /dev/null +++ b/examples/parlia_api/parlia_getSnapshot/43132201/our_ec2.json @@ -0,0 +1 @@ +{"jsonrpc":"2.0","id":3,"result":{"number":43132201,"hash":"0x6a0ea8d0d8a8d5f3a9288c02f6475104407199850b661a2fc26b01b914920145","epoch_length":200,"block_interval":3000,"turn_length":1,"validators":{"0x40d3256eb0babe89f0ea54edaa398513136612f5":{"index:omitempty":0,"vote_address":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},"0x7f5f2cf1aec83bf0c74df566a41aa7ed65ea84ea":{"index:omitempty":0,"vote_address":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},"0xf9a1db0d6f22bd78ffaeccbc8f47c83df9fbdbcf":{"index:omitempty":0,"vote_address":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},"0x1a3d9d7a717d64e6088ac937d5aacdd3e20ca963":{"index:omitempty":0,"vote_address":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},"0x53387f3321fd69d1e030bb921230dfb188826aff":{"index:omitempty":0,"vote_address":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},"0x76d76ee8823de52a1a431884c2ca930c5e72bff3":{"index:omitempty":0,"vote_address":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},"0x08265da01e1a65d62b903c7b34c08cb389bf3d99":{"index:omitempty":0,"vote_address":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},"0xd447b49cd040d20bc21e49ffea6487f5638e4346":{"index:omitempty":0,"vote_address":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},"recents":{"43132201":"0x1a3d9d7a717d64e6088ac937d5aacdd3e20ca963","43132200":"0x08265da01e1a65d62b903c7b34c08cb389bf3d99","43132198":"0xd447b49cd040d20bc21e49ffea6487f5638e4346","43132197":"0x7f5f2cf1aec83bf0c74df566a41aa7ed65ea84ea","43132199":"0xf9a1db0d6f22bd78ffaeccbc8f47c83df9fbdbcf"},"recent_fork_hashes":{"43132198":"00000000","43132199":"00000000","43132201":"00000000","43132200":"00000000","43132197":"00000000"},"attestation:omitempty":null}} \ No newline at end of file diff --git a/examples/parlia_api/parlia_getSnapshot/43132201/public_rpc.json b/examples/parlia_api/parlia_getSnapshot/43132201/public_rpc.json new file mode 100644 index 0000000..ede75a3 --- /dev/null +++ b/examples/parlia_api/parlia_getSnapshot/43132201/public_rpc.json @@ -0,0 +1,460 @@ +{ + "jsonrpc": "2.0", + "id": 3, + "result": { + "number": 43132201, + "hash": "0x42e36cb84f8101382ac947a453e1cacade3966a8b4a5353ca76a389c5b28772c", + "epoch_length": 200, + "block_interval": 3000, + "turn_length": 1, + "validators": { + "0x08265da01e1a65d62b903c7b34c08cb389bf3d99": { + "index:omitempty": 1, + "vote_address": [ + 150, + 247, + 99, + 240, + 48, + 177, + 173, + 207, + 179, + 105, + 197, + 165, + 223, + 74, + 24, + 225, + 82, + 155, + 175, + 254, + 127, + 234, + 236, + 102, + 219, + 61, + 189, + 27, + 192, + 104, + 16, + 247, + 246, + 248, + 139, + 123, + 230, + 100, + 84, + 24, + 167, + 226, + 162, + 163, + 244, + 5, + 20, + 194 + ] + }, + "0x1a3d9d7a717d64e6088ac937d5aacdd3e20ca963": { + "index:omitempty": 2, + "vote_address": [ + 151, + 153, + 116, + 205, + 143, + 249, + 12, + 191, + 9, + 112, + 35, + 220, + 140, + 68, + 130, + 69, + 206, + 255, + 103, + 30, + 150, + 93, + 87, + 216, + 46, + 175, + 155, + 233, + 20, + 120, + 207, + 160, + 242, + 77, + 41, + 147, + 224, + 197, + 244, + 58, + 108, + 90, + 76, + 217, + 152, + 80, + 2, + 48 + ] + }, + "0x40d3256eb0babe89f0ea54edaa398513136612f5": { + "index:omitempty": 3, + "vote_address": [ + 163, + 52, + 180, + 157, + 118, + 110, + 190, + 62, + 185, + 246, + 189, + 193, + 99, + 189, + 44, + 25, + 170, + 126, + 140, + 238, + 22, + 103, + 133, + 26, + 224, + 193, + 101, + 31, + 1, + 196, + 207, + 124, + 242, + 207, + 207, + 132, + 117, + 191, + 243, + 233, + 156, + 171, + 37, + 176, + 86, + 49, + 71, + 45 + ] + }, + "0x53387f3321fd69d1e030bb921230dfb188826aff": { + "index:omitempty": 4, + "vote_address": [ + 170, + 57, + 235, + 241, + 195, + 139, + 25, + 8, + 81, + 228, + 219, + 5, + 136, + 163, + 233, + 1, + 66, + 197, + 41, + 144, + 65, + 251, + 138, + 13, + 179, + 187, + 154, + 31, + 164, + 189, + 240, + 218, + 232, + 76, + 163, + 126, + 225, + 42, + 107, + 140, + 38, + 202, + 171, + 119, + 95, + 14, + 0, + 123 + ] + }, + "0x76d76ee8823de52a1a431884c2ca930c5e72bff3": { + "index:omitempty": 5, + "vote_address": [ + 128, + 58, + 247, + 150, + 65, + 207, + 150, + 76, + 192, + 1, + 103, + 16, + 23, + 240, + 182, + 128, + 249, + 59, + 125, + 222, + 8, + 91, + 36, + 187, + 198, + 123, + 42, + 86, + 42, + 33, + 111, + 144, + 58, + 200, + 120, + 197, + 71, + 118, + 65, + 50, + 129, + 114, + 163, + 83, + 241, + 228, + 147, + 207 + ] + }, + "0x7f5f2cf1aec83bf0c74df566a41aa7ed65ea84ea": { + "index:omitempty": 6, + "vote_address": [ + 153, + 227, + 132, + 158, + 243, + 24, + 135, + 192, + 248, + 128, + 160, + 254, + 185, + 47, + 53, + 111, + 88, + 251, + 208, + 35, + 168, + 47, + 83, + 17, + 252, + 135, + 165, + 136, + 58, + 102, + 46, + 158, + 187, + 190, + 252, + 144, + 191, + 19, + 170, + 83, + 60, + 36, + 56, + 164, + 17, + 56, + 4, + 191 + ] + }, + "0xd447b49cd040d20bc21e49ffea6487f5638e4346": { + "index:omitempty": 7, + "vote_address": [ + 173, + 159, + 198, + 209, + 236, + 48, + 226, + 128, + 22, + 211, + 137, + 43, + 81, + 167, + 137, + 139, + 211, + 84, + 207, + 231, + 134, + 67, + 69, + 63, + 211, + 134, + 132, + 16, + 218, + 65, + 45, + 231, + 242, + 136, + 49, + 128, + 208, + 162, + 132, + 1, + 17, + 173, + 46, + 4, + 63, + 164, + 3, + 235 + ] + }, + "0xf9a1db0d6f22bd78ffaeccbc8f47c83df9fbdbcf": { + "index:omitempty": 8, + "vote_address": [ + 170, + 222, + 15, + 120, + 166, + 185, + 43, + 56, + 201, + 246, + 212, + 92, + 232, + 251, + 1, + 218, + 43, + 128, + 1, + 0, + 32, + 28, + 240, + 147, + 107, + 107, + 75, + 20, + 201, + 138, + 242, + 46, + 219, + 226, + 125, + 248, + 170, + 25, + 127, + 202, + 115, + 56, + 145, + 181, + 182, + 202, + 149, + 219 + ] + } + }, + "recents": { + "43132197": "0x7f5f2cf1aec83bf0c74df566a41aa7ed65ea84ea", + "43132198": "0xd447b49cd040d20bc21e49ffea6487f5638e4346", + "43132199": "0xf9a1db0d6f22bd78ffaeccbc8f47c83df9fbdbcf", + "43132200": "0x08265da01e1a65d62b903c7b34c08cb389bf3d99", + "43132201": "0x1a3d9d7a717d64e6088ac937d5aacdd3e20ca963" + }, + "recent_fork_hashes": { + "43132194": "0299d9bc", + "43132195": "0299d9bc", + "43132196": "0299d9bc", + "43132197": "0299d9bc", + "43132198": "0299d9bc", + "43132199": "631f83a6", + "43132200": "0299d9bc", + "43132201": "0299d9bc" + }, + "attestation:omitempty": { + "SourceNumber": 43132199, + "SourceHash": "0x5a0a26c82e1d42ca0918957533e1ac5a97bf2d53837ce122944e7bd318964350", + "TargetNumber": 43132200, + "TargetHash": "0xf337513acca19fa58981201bcb8cb2c56cf3afece07c25e85b2cbbb2a1d23312" + } + } +} \ No newline at end of file diff --git a/scripts/start_testnet.sh b/scripts/start_testnet.sh index 7036733..1cb7088 100755 --- a/scripts/start_testnet.sh +++ b/scripts/start_testnet.sh @@ -26,10 +26,11 @@ fi # tip_block=0xb230ec6bfd3348dff7ae9af62d8d2fb25a2ff3781c770b3fcf75a186e6ddc1bd # 25M # tip_block=0x1253e0b2342239c7e042d87d75974e7824c5503cd2ec34bfc7f5a8b25a1c36b1 # 35M +# tip_block=0xb74e00072b7aa7720f547c4ec3075b1f7310f98a2d8b3323289ad66927010dfa # 47M +tip_block=0xb74e00072b7aa7720f547c4ec3075b1f7310f98a2d8b3323289ad66927010dfa # 45M -tip_block=0x1253e0b2342239c7e042d87d75974e7824c5503cd2ec34bfc7f5a8b25a1c36b1 # 35M RUST_LOG=INFO ./target/release/reth-bsc node \ --chain=bsc-testnet \ --http --http.api="eth, net, txpool, web3, rpc" \ diff --git a/src/consensus/parlia/validation.rs b/src/consensus/parlia/validation.rs index 3d3e7b4..e588892 100644 --- a/src/consensus/parlia/validation.rs +++ b/src/consensus/parlia/validation.rs @@ -158,6 +158,17 @@ where let sig_bytes = &signature[..64]; let recovery_id = signature[64]; + // DEBUG: Add detailed logging for signature recovery + tracing::debug!( + "๐Ÿ” [BSC] Seal recovery for block {}: extra_data_len={}, seal_hash={:?}, recovery_id={}, sig_bytes_len={}, expected_miner={}", + header.number(), + extra_data.len(), + seal_hash, + recovery_id, + sig_bytes.len(), + header.beneficiary() + ); + // Handle recovery ID (bsc-erigon compatible) let recovery_id = RecoveryId::from_i32(recovery_id as i32) .map_err(|_| ConsensusError::Other("Invalid recovery ID".into()))?; @@ -175,7 +186,13 @@ where let hash = keccak256(&public_key_bytes[1..]); // Skip 0x04 prefix let address = Address::from_slice(&hash[12..]); - + tracing::debug!( + "๐Ÿ” [BSC] Seal recovery result for block {}: recovered_address={}, expected_miner={}, match={}", + header.number(), + address, + header.beneficiary(), + address == header.beneficiary() + ); Ok(address) } @@ -198,7 +215,6 @@ where }; // Create SealContent exactly like double_sign precompile - let seal_content = crate::evm::precompiles::double_sign::SealContent { chain_id, parent_hash: header.parent_hash().0, @@ -218,11 +234,25 @@ where nonce: header.nonce().unwrap_or_default().0, }; + // Debug logging for seal hash calculation + tracing::debug!( + "๐Ÿ” [BSC] Seal hash calculation for block {}: chain_id={}, extra_len={}, extra_without_seal_len={}", + header.number(), + chain_id, + extra_data.len(), + extra_without_seal.len() + ); + // Use automatic RLP encoding like double_sign precompile let encoded = alloy_rlp::encode(seal_content); let result = keccak256(&encoded); - + tracing::debug!( + "๐Ÿ” [BSC] Seal hash result for block {}: hash={:?}, encoded_len={}", + header.number(), + result, + encoded.len() + ); result } diff --git a/tests/seal_recovery_test.rs b/tests/seal_recovery_test.rs new file mode 100644 index 0000000..aec8281 --- /dev/null +++ b/tests/seal_recovery_test.rs @@ -0,0 +1,109 @@ +//! Unit test to reproduce the seal recovery issue for block 43132201 + +use alloy_consensus::Header; +use alloy_primitives::{Address, B256, U256, Bytes, hex}; +use reth_bsc::consensus::parlia::validation::BscConsensusValidator; +use reth_bsc::chainspec::{BscChainSpec, bsc_testnet}; +use reth_primitives_traits::SealedHeader; +use reth_chainspec::EthChainSpec; +use std::str::FromStr; +use std::sync::Arc; + +/// Test to reproduce the seal recovery issue for block 43132201 +#[test] +fn test_seal_recovery_block_43132201() { + // Block 43132201 data from BSC testnet + let block_number = 43132201u64; + let expected_miner = Address::from_str("0x1a3d9d7a717d64e6088ac937d5aacdd3e20ca963").unwrap(); + let wrong_recovered = Address::from_str("0x95A216f51940259C488A686f5145dA1b1a82afD6").unwrap(); + + // Actual extraData from block 43132201 + let extra_data_hex = "0xd98301040d846765746889676f312e32312e3132856c696e757800000299d9bcf8b381fbb86084e92b477453ef7a021ebec2fe433dfb431ecf6fd1b5386e208a3055e3c0b5cc651852bb4c75a9c68c073c324dad308d018f3e6119415c54f47c6e6c1b603f311c29e8eadd6b55870f2ada055be8b3a776650ad6241bb7a763a66508e6563faaf84c8402922527a05a0a26c82e1d42ca0918957533e1ac5a97bf2d53837ce122944e7bd3189643508402922528a0f337513acca19fa58981201bcb8cb2c56cf3afece07c25e85b2cbbb2a1d2331280a021739230c7e8e9793d6a254992d1ac0401ff68da7a820398fc94a7a8667cdd4ba5b068b15acb1a33353779111ce635afb5eff4acef9a0b9eb5cf3d58b4a63600"; + let extra_data = Bytes::from(hex::decode(&extra_data_hex[2..]).unwrap()); + + // Create a mock header with the actual block data + let header = Header { + parent_hash: B256::from_str("0xf337513acca19fa58981201bcb8cb2c56cf3afece07c25e85b2cbbb2a1d23312").unwrap(), + ommers_hash: B256::from_str("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347").unwrap(), // Standard empty uncle hash + beneficiary: expected_miner, // This should be the miner + state_root: B256::from_str("0x2e9793d6a254992d1ac0401ff68da7a820398fc94a7a8667cdd4ba5b068b15acb").unwrap(), // Mock state root + transactions_root: B256::from_str("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421").unwrap(), // Empty tx root + receipts_root: B256::from_str("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421").unwrap(), // Empty receipt root + logs_bloom: Default::default(), + difficulty: U256::from(2), // Should be 2 for in-turn + number: block_number, + gas_limit: 30000000, + gas_used: 0, + timestamp: 1705554750, // Mock timestamp + extra_data, + mix_hash: B256::ZERO, + nonce: 0u64.into(), + base_fee_per_gas: Some(1000000000), + withdrawals_root: None, + blob_gas_used: None, + excess_blob_gas: None, + parent_beacon_block_root: None, + requests_hash: None, + }; + + let block_hash = B256::from_str("0x42e36cb84f8101382ac947a453e1cacade3966a8b4a5353ca76a389c5b28772c").unwrap(); + let sealed_header = SealedHeader::new(header, block_hash); + + // Create BSC consensus validator + let chain_spec = Arc::new(BscChainSpec { + inner: bsc_testnet() + }); + let validator = BscConsensusValidator::new(chain_spec); + + // Test seal recovery + println!("๐Ÿ” Testing seal recovery for block {}", block_number); + println!("Expected miner: {}", expected_miner); + println!("Wrong recovered: {}", wrong_recovered); + + match validator.recover_proposer_from_seal(&sealed_header) { + Ok(recovered_address) => { + println!("โœ… Recovered address: {}", recovered_address); + + if recovered_address == expected_miner { + println!("๐ŸŽ‰ SUCCESS: Recovered address matches expected miner!"); + } else if recovered_address == wrong_recovered { + println!("โŒ REPRODUCED: Got the wrong recovered address!"); + panic!("Seal recovery returned wrong address: expected {}, got {}", expected_miner, recovered_address); + } else { + println!("โ“ UNEXPECTED: Got a different address entirely: {}", recovered_address); + panic!("Unexpected recovered address: {}", recovered_address); + } + } + Err(e) => { + println!("๐Ÿ’ฅ ERROR: Failed to recover proposer: {:?}", e); + panic!("Seal recovery failed: {:?}", e); + } + } +} + +#[test] +fn test_debug_seal_hash_calculation() { + // Same setup as above but focus on seal hash calculation + let block_number = 43132201u64; + let expected_miner = Address::from_str("0x1a3d9d7a717d64e6088ac937d5aacdd3e20ca963").unwrap(); + + let extra_data_hex = "0xd98301040d846765746889676f312e32312e3132856c696e757800000299d9bcf8b381fbb86084e92b477453ef7a021ebec2fe433dfb431ecf6fd1b5386e208a3055e3c0b5cc651852bb4c75a9c68c073c324dad308d018f3e6119415c54f47c6e6c1b603f311c29e8eadd6b55870f2ada055be8b3a776650ad6241bb7a763a66508e6563faaf84c8402922527a05a0a26c82e1d42ca0918957533e1ac5a97bf2d53837ce122944e7bd3189643508402922528a0f337513acca19fa58981201bcb8cb2c56cf3afece07c25e85b2cbbb2a1d2331280a021739230c7e8e9793d6a254992d1ac0401ff68da7a820398fc94a7a8667cdd4ba5b068b15acb1a33353779111ce635afb5eff4acef9a0b9eb5cf3d58b4a63600"; + let extra_data = Bytes::from(hex::decode(&extra_data_hex[2..]).unwrap()); + + // Print signature details + let signature_start = extra_data.len() - 65; + let signature = &extra_data[signature_start..]; + + println!("๐Ÿ” Block {} signature analysis:", block_number); + println!("ExtraData length: {}", extra_data.len()); + println!("Signature (last 65 bytes): {}", hex::encode(signature)); + println!("Recovery ID: {}", signature[64]); + + // Test chain ID + let chain_spec = Arc::new(BscChainSpec { + inner: bsc_testnet() + }); + println!("Chain ID: {}", chain_spec.chain().id()); + + // TODO: Add actual seal hash calculation and compare with expected +} From d4515db02d0f45b565ca7c50ae3438d9232ae913 Mon Sep 17 00:00:00 2001 From: Clyde Date: Fri, 8 Aug 2025 17:02:35 +0800 Subject: [PATCH 02/11] fix: debug --- debug_seal_43132201.rs | 201 +++++++++++++++++++++++++++++ scripts/start_testnet.sh | 6 + src/consensus/parlia/validation.rs | 61 +++++---- 3 files changed, 244 insertions(+), 24 deletions(-) diff --git a/debug_seal_43132201.rs b/debug_seal_43132201.rs index 530532d..0217782 100644 --- a/debug_seal_43132201.rs +++ b/debug_seal_43132201.rs @@ -79,6 +79,9 @@ fn test_with_real_bsc_validator( println!("Chain ID: 97 (BSC testnet)"); println!("ExtraData length: {}", sealed_header.extra_data().len()); + // DETAILED SEAL CONTENT ANALYSIS + detailed_seal_content_analysis(&sealed_header); + // Call the exact same function that's failing in your node match validator.recover_proposer_from_seal(&sealed_header) { Ok(recovered_address) => { @@ -116,3 +119,201 @@ fn test_with_real_bsc_validator( println!("Header beneficiary: {}", sealed_header.beneficiary()); println!("BSC official miner: {}", expected_miner); } + +fn detailed_seal_content_analysis(sealed_header: &reth_primitives_traits::SealedHeader
) { + use alloy_primitives::keccak256; + + println!("\n=========================================="); + println!("๐Ÿ”ฌ DETAILED SEAL CONTENT ANALYSIS"); + println!("=========================================="); + + // Recreate exact same logic as validation.rs calculate_seal_hash + const EXTRA_SEAL: usize = 65; + let chain_id = 97u64; // BSC testnet + let extra_data = sealed_header.extra_data(); + + // Extract extra data without the seal + let extra_without_seal = if extra_data.len() >= EXTRA_SEAL { + &extra_data[..extra_data.len() - EXTRA_SEAL] + } else { + extra_data + }; + + // Create SealContent exactly like validation.rs does + let seal_content = reth_bsc::evm::precompiles::double_sign::SealContent { + chain_id, + parent_hash: sealed_header.parent_hash().0, + uncle_hash: sealed_header.ommers_hash().0, + coinbase: sealed_header.beneficiary().0 .0, + root: sealed_header.state_root().0, + tx_hash: sealed_header.transactions_root().0, + receipt_hash: sealed_header.receipts_root().0, + bloom: sealed_header.logs_bloom().0 .0, + difficulty: sealed_header.difficulty().clone(), + number: sealed_header.number(), + gas_limit: sealed_header.gas_limit(), + gas_used: sealed_header.gas_used(), + time: sealed_header.timestamp(), + extra: alloy_primitives::Bytes::from(extra_without_seal.to_vec()), + mix_digest: sealed_header.mix_hash().unwrap_or_default().0, + nonce: sealed_header.nonce().unwrap_or_default().0, + }; + + // Show each field in detail + println!("๐Ÿ” SealContent fields constructed by our code:"); + println!(" chain_id: {}", seal_content.chain_id); + println!(" parent_hash: 0x{}", hex::encode(seal_content.parent_hash)); + println!(" uncle_hash: 0x{}", hex::encode(seal_content.uncle_hash)); + println!(" coinbase: 0x{}", hex::encode(seal_content.coinbase)); + println!(" root: 0x{}", hex::encode(seal_content.root)); + println!(" tx_hash: 0x{}", hex::encode(seal_content.tx_hash)); + println!(" receipt_hash: 0x{}", hex::encode(seal_content.receipt_hash)); + println!(" bloom: 0x{}", hex::encode(&seal_content.bloom[..32])); // Show first 32 bytes + println!(" difficulty: {}", seal_content.difficulty); + println!(" number: {}", seal_content.number); + println!(" gas_limit: {}", seal_content.gas_limit); + println!(" gas_used: {}", seal_content.gas_used); + println!(" time: {}", seal_content.time); + println!(" extra: 0x{} (len={})", hex::encode(&seal_content.extra), seal_content.extra.len()); + println!(" mix_digest: 0x{}", hex::encode(seal_content.mix_digest)); + println!(" nonce: 0x{}", hex::encode(seal_content.nonce)); + + // Calculate the seal hash + let encoded = alloy_rlp::encode(&seal_content); + let seal_hash = keccak256(&encoded); + + println!("\n๐Ÿงฎ Seal hash calculation:"); + println!(" Encoded length: {} bytes", encoded.len()); + println!(" Encoded (first 64 bytes): 0x{}", hex::encode(&encoded[..64.min(encoded.len())])); + println!(" Seal hash: 0x{}", hex::encode(seal_hash)); + + // Show what BSC network expects + println!("\n๐ŸŽฏ Expected BSC values (from your EC2 node RPC):"); + println!(" parent_hash: 0xf337513acca19fa58981201bcb8cb2c56cf3afece07c25e85b2cbbb2a1d23312"); + println!(" uncle_hash: 0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"); + println!(" coinbase: 0x1a3d9d7a717d64e6088ac937d5aacdd3e20ca963"); + println!(" root: 0xd9382782278ef90f5e4ecd54434c4382a792ba9fb470636528c16e4f4720e09b"); + println!(" tx_hash: 0xce21b4817bb3e7d57449fd327c5fb3081585b7be8212c65cee93bd033b38fac5"); + println!(" receipt_hash: 0x4fda1f67ddcd586290f023346407e46fe2cffd5c4e7360100dbcb084d862d6dc"); + println!(" difficulty: 0x2 (should be 2)"); + println!(" number: 0x2922529 (should be 43132201)"); + println!(" gas_limit: 0x42c1d80 (should be 70000000)"); + println!(" gas_used: 0x4e5ec (should be 321004)"); + println!(" time: 0x66c3f004 (should be 1724395524)"); + println!(" mix_hash: 0x0000000000000000000000000000000000000000000000000000000000000000"); + println!(" nonce: 0x0000000000000000"); + + println!("\n๐Ÿ’ก All fields match! So the issue is NOT in field values."); + println!(" The problem must be in RLP encoding or signature recovery logic."); + + // Let's try to reverse-engineer what seal hash BSC actually used + test_signature_recovery_variants(seal_hash); + + println!("=========================================="); +} + +fn test_signature_recovery_variants(our_seal_hash: alloy_primitives::B256) { + use alloy_primitives::{keccak256, B256}; + use secp256k1::{ecdsa::RecoverableSignature, Message, Secp256k1, SECP256K1}; + + println!("\n๐Ÿ”ฌ TESTING SIGNATURE RECOVERY VARIANTS"); + println!("=========================================="); + + // The signature from block 43132201 + let signature_hex = "a021739230c7e8e9793d6a254992d1ac0401ff68da7a820398fc94a7a8667cdd4ba5b068b15acb1a33353779111ce635afb5eff4acef9a0b9eb5cf3d58b4a63600"; + let signature_bytes = hex::decode(signature_hex).unwrap(); + let recovery_id = signature_bytes[64]; + + let expected_miner = Address::from_str("0x1a3d9d7a717d64e6088ac937d5aacdd3e20ca963").unwrap(); + + println!("Expected miner: {}", expected_miner); + println!("Our calculated seal hash: 0x{}", hex::encode(our_seal_hash)); + + // Test our seal hash + let result_ours = test_recovery_with_hash(our_seal_hash, &signature_bytes, recovery_id); + println!("Recovery with our hash: {:?}", result_ours); + + // Maybe BSC uses a different message format? Let's test some variants: + + // Variant 1: Maybe BSC doesn't include chain_id in the message? + println!("\n๐Ÿงช Testing variant: Message without Ethereum prefix"); + let plain_hash = our_seal_hash; + let result_plain = test_recovery_with_hash(plain_hash, &signature_bytes, recovery_id); + println!("Recovery with plain hash: {:?}", result_plain); + + // Variant 2: Maybe BSC uses Ethereum's message prefix? + println!("\n๐Ÿงช Testing variant: Ethereum message prefix"); + let eth_message = format!("\x19Ethereum Signed Message:\n32{}", hex::encode(our_seal_hash)); + let eth_hash = keccak256(eth_message.as_bytes()); + let result_eth = test_recovery_with_hash(eth_hash, &signature_bytes, recovery_id); + println!("Recovery with Ethereum prefix: {:?}", result_eth); + + // Let's also test if we can find what hash would actually give us the expected result + println!("\n๐Ÿ” Testing if BSC uses standard Ethereum header hash instead of SealContent..."); + + // Maybe BSC just uses the header hash without the custom SealContent structure? + // Let's test with a standard header hash + test_ethereum_header_hash_variant(); + + println!("โœ… This confirms our seal hash calculation is wrong."); + println!(" The actual BSC seal hash must be different from what we calculated."); +} + +fn test_recovery_with_hash(hash: B256, signature_bytes: &[u8], recovery_id: u8) -> Result { + use secp256k1::{ecdsa::RecoverableSignature, Message, Secp256k1, SECP256K1}; + + // Convert hash to message + let message = Message::from_slice(&hash[..]) + .map_err(|e| format!("Invalid message: {}", e))?; + + // Create recoverable signature + let recovery_id = secp256k1::ecdsa::RecoveryId::from_i32(recovery_id as i32) + .map_err(|e| format!("Invalid recovery ID: {}", e))?; + + let sig_bytes = &signature_bytes[..64]; + let signature = secp256k1::ecdsa::Signature::from_compact(sig_bytes) + .map_err(|e| format!("Invalid signature: {}", e))?; + + let recoverable_sig = RecoverableSignature::from_compact(sig_bytes, recovery_id) + .map_err(|e| format!("Invalid recoverable signature: {}", e))?; + + // Recover public key + let public_key = SECP256K1.recover_ecdsa(&message, &recoverable_sig) + .map_err(|e| format!("Recovery failed: {}", e))?; + + // Convert to address + let public_key_bytes = public_key.serialize_uncompressed(); + let hash = alloy_primitives::keccak256(&public_key_bytes[1..]); // Skip 0x04 prefix + let address = Address::from_slice(&hash[12..]); + + Ok(address) +} + +fn test_ethereum_header_hash_variant() { + use alloy_primitives::keccak256; + + println!("\n๐Ÿงช Testing Ethereum-style header hash (no custom SealContent)"); + + // Create a header hash using standard Ethereum RLP encoding + // This would be: RLP([parent_hash, uncle_hash, coinbase, root, tx_hash, receipt_hash, bloom, difficulty, number, gas_limit, gas_used, time, extra_without_seal, mix_hash, nonce]) + + let header_fields = [ + // parent_hash + hex::decode("f337513acca19fa58981201bcb8cb2c56cf3afece07c25e85b2cbbb2a1d23312").unwrap(), + // uncle_hash + hex::decode("1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347").unwrap(), + // coinbase + hex::decode("1a3d9d7a717d64e6088ac937d5aacdd3e20ca963").unwrap(), + // Add other fields... + ]; + + println!("๐Ÿ”ง Standard Ethereum header RLP would look different..."); + println!(" This is a simplified test - full implementation would need proper RLP of all fields"); + + // The key insight: BSC might NOT use the custom SealContent at all! + // BSC might just use the header hash like Ethereum does + + println!("๐Ÿ’ก HYPOTHESIS: BSC doesn't use SealContent for seal hash calculation!"); + println!(" BSC might use standard Ethereum header hash instead."); + println!(" This would explain why all our SealContent field values are correct but hash is wrong."); +} diff --git a/scripts/start_testnet.sh b/scripts/start_testnet.sh index 1cb7088..7bf1c69 100755 --- a/scripts/start_testnet.sh +++ b/scripts/start_testnet.sh @@ -31,6 +31,12 @@ fi tip_block=0xb74e00072b7aa7720f547c4ec3075b1f7310f98a2d8b3323289ad66927010dfa # 45M + + + +tip_block=0xb5ddf3dcb55cf5013110acd3c6c8eaffe5c996e7d3c9d4803e36e9efccdbce47 # 43150000 + + RUST_LOG=INFO ./target/release/reth-bsc node \ --chain=bsc-testnet \ --http --http.api="eth, net, txpool, web3, rpc" \ diff --git a/src/consensus/parlia/validation.rs b/src/consensus/parlia/validation.rs index e588892..5c5fd6b 100644 --- a/src/consensus/parlia/validation.rs +++ b/src/consensus/parlia/validation.rs @@ -12,6 +12,7 @@ use reth_chainspec::EthChainSpec; use reth_primitives_traits::SealedHeader; use std::collections::HashMap; use std::sync::Arc; +use alloy_primitives::hex; /// BSC consensus validator that implements the missing pre/post execution logic #[derive(Debug, Clone)] @@ -154,6 +155,15 @@ where let seal_hash = self.calculate_seal_hash(header); let message = Message::from_digest(seal_hash.0); + // DEBUG: Add detailed logging for signature extraction + tracing::debug!( + "๐Ÿ” [BSC] Signature extraction for block {}: extra_data_len={}, signature_len={}, signature_hex={}", + header.number(), + extra_data.len(), + signature.len(), + hex::encode(signature) + ); + // Parse signature: 64 bytes + 1 recovery byte let sig_bytes = &signature[..64]; let recovery_id = signature[64]; @@ -197,42 +207,45 @@ where Ok(address) } - /// Calculate seal hash for BSC headers (using SealContent struct like double_sign precompile) + /// Calculate seal hash for BSC headers (matching bsc-erigon's EncodeSigHeader exactly) fn calculate_seal_hash(&self, header: &SealedHeader) -> alloy_primitives::B256 { use alloy_primitives::keccak256; - // Use the same approach as the double_sign precompile + // Use the exact same approach as bsc-erigon's EncodeSigHeader const EXTRA_SEAL: usize = 65; let chain_id = self.chain_spec.chain().id(); let extra_data = &header.extra_data(); - // Extract extra data without the seal + // Extract extra data without the seal (matching bsc-erigon line 1761) let extra_without_seal = if extra_data.len() >= EXTRA_SEAL { &extra_data[..extra_data.len() - EXTRA_SEAL] } else { extra_data }; - // Create SealContent exactly like double_sign precompile - let seal_content = crate::evm::precompiles::double_sign::SealContent { - chain_id, - parent_hash: header.parent_hash().0, - uncle_hash: header.ommers_hash().0, - coinbase: header.beneficiary().0 .0, - root: header.state_root().0, - tx_hash: header.transactions_root().0, - receipt_hash: header.receipts_root().0, - bloom: header.logs_bloom().0 .0, - difficulty: header.difficulty().clone(), - number: header.number(), - gas_limit: header.gas_limit(), - gas_used: header.gas_used(), - time: header.timestamp(), - extra: alloy_primitives::Bytes::from(extra_without_seal.to_vec()), - mix_digest: header.mix_hash().unwrap_or_default().0, - nonce: header.nonce().unwrap_or_default().0, - }; + // Encode directly as slice like bsc-erigon does (NOT using SealContent struct) + // This matches bsc-erigon's EncodeSigHeader function exactly + + // Create a vector of all the fields to encode (matching Go's []interface{}) + let fields = vec![ + alloy_rlp::encode(&chain_id), + alloy_rlp::encode(&header.parent_hash()), + alloy_rlp::encode(&header.ommers_hash()), + alloy_rlp::encode(&header.beneficiary()), + alloy_rlp::encode(&header.state_root()), + alloy_rlp::encode(&header.transactions_root()), + alloy_rlp::encode(&header.receipts_root()), + alloy_rlp::encode(&header.logs_bloom()), + alloy_rlp::encode(&header.difficulty()), + alloy_rlp::encode(&header.number()), + alloy_rlp::encode(&header.gas_limit()), + alloy_rlp::encode(&header.gas_used()), + alloy_rlp::encode(&header.timestamp()), + alloy_rlp::encode(&alloy_primitives::Bytes::from(extra_without_seal.to_vec())), + alloy_rlp::encode(&header.mix_hash().unwrap_or_default()), + alloy_rlp::encode(&header.nonce().unwrap_or_default()), + ]; // Debug logging for seal hash calculation tracing::debug!( @@ -243,8 +256,8 @@ where extra_without_seal.len() ); - // Use automatic RLP encoding like double_sign precompile - let encoded = alloy_rlp::encode(seal_content); + // Encode the list of fields (matching bsc-erigon's []interface{} encoding) + let encoded = alloy_rlp::encode(&fields); let result = keccak256(&encoded); tracing::debug!( From 461b0252d3cb0d73ef4c4ebc6a1f9c56e15acf25 Mon Sep 17 00:00:00 2001 From: Clyde Date: Fri, 8 Aug 2025 17:14:26 +0800 Subject: [PATCH 03/11] fix: debug --- src/consensus/parlia/validation.rs | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/consensus/parlia/validation.rs b/src/consensus/parlia/validation.rs index 5c5fd6b..ba57f44 100644 --- a/src/consensus/parlia/validation.rs +++ b/src/consensus/parlia/validation.rs @@ -164,21 +164,35 @@ where hex::encode(signature) ); + // DEBUG: Extra verification of slice bounds + let expected_signature_start = extra_data.len() - 65; + tracing::debug!( + "๐Ÿ” [BSC] Signature slice bounds for block {}: expected_start={}, actual_slice_len={}, extra_last_10_bytes={}", + header.number(), + expected_signature_start, + signature.len(), + hex::encode(&extra_data[extra_data.len().saturating_sub(10)..]) + ); + // Parse signature: 64 bytes + 1 recovery byte + if signature.len() != 65 { + return Err(ConsensusError::Other(format!("Invalid signature length: expected 65, got {}", signature.len()).into())); + } + let sig_bytes = &signature[..64]; let recovery_id = signature[64]; - // DEBUG: Add detailed logging for signature recovery + // DEBUG: Verify the slicing worked correctly tracing::debug!( - "๐Ÿ” [BSC] Seal recovery for block {}: extra_data_len={}, seal_hash={:?}, recovery_id={}, sig_bytes_len={}, expected_miner={}", + "๐Ÿ” [BSC] Signature parsing for block {}: sig_bytes_len={}, recovery_id={}, sig_bytes_hex={}", header.number(), - extra_data.len(), - seal_hash, - recovery_id, sig_bytes.len(), - header.beneficiary() + recovery_id, + hex::encode(sig_bytes) ); + // (Removed duplicate debug line - using the new one above instead) + // Handle recovery ID (bsc-erigon compatible) let recovery_id = RecoveryId::from_i32(recovery_id as i32) .map_err(|_| ConsensusError::Other("Invalid recovery ID".into()))?; From aeb0517c2b7343424970fb213c837e57e2a17fa8 Mon Sep 17 00:00:00 2001 From: Clyde Date: Fri, 8 Aug 2025 17:25:58 +0800 Subject: [PATCH 04/11] fix: debug --- src/consensus/parlia/validation.rs | 61 ++++++++++++++++++++---------- 1 file changed, 40 insertions(+), 21 deletions(-) diff --git a/src/consensus/parlia/validation.rs b/src/consensus/parlia/validation.rs index ba57f44..95e42fc 100644 --- a/src/consensus/parlia/validation.rs +++ b/src/consensus/parlia/validation.rs @@ -241,25 +241,45 @@ where // Encode directly as slice like bsc-erigon does (NOT using SealContent struct) // This matches bsc-erigon's EncodeSigHeader function exactly - // Create a vector of all the fields to encode (matching Go's []interface{}) - let fields = vec![ - alloy_rlp::encode(&chain_id), - alloy_rlp::encode(&header.parent_hash()), - alloy_rlp::encode(&header.ommers_hash()), - alloy_rlp::encode(&header.beneficiary()), - alloy_rlp::encode(&header.state_root()), - alloy_rlp::encode(&header.transactions_root()), - alloy_rlp::encode(&header.receipts_root()), - alloy_rlp::encode(&header.logs_bloom()), - alloy_rlp::encode(&header.difficulty()), - alloy_rlp::encode(&header.number()), - alloy_rlp::encode(&header.gas_limit()), - alloy_rlp::encode(&header.gas_used()), - alloy_rlp::encode(&header.timestamp()), - alloy_rlp::encode(&alloy_primitives::Bytes::from(extra_without_seal.to_vec())), - alloy_rlp::encode(&header.mix_hash().unwrap_or_default()), - alloy_rlp::encode(&header.nonce().unwrap_or_default()), - ]; + // Create a custom struct that exactly matches bsc-erigon's field ordering + #[derive(alloy_rlp::RlpEncodable)] + struct HeaderForSeal { + chain_id: u64, + parent_hash: alloy_primitives::B256, + ommers_hash: alloy_primitives::B256, + beneficiary: alloy_primitives::Address, + state_root: alloy_primitives::B256, + transactions_root: alloy_primitives::B256, + receipts_root: alloy_primitives::B256, + logs_bloom: alloy_primitives::Bloom, + difficulty: alloy_primitives::U256, + number: u64, + gas_limit: u64, + gas_used: u64, + timestamp: u64, + extra_data: alloy_primitives::Bytes, + mix_hash: alloy_primitives::B256, + nonce: u64, + } + + let header_for_seal = HeaderForSeal { + chain_id, + parent_hash: header.parent_hash(), + ommers_hash: header.ommers_hash(), + beneficiary: header.beneficiary(), + state_root: header.state_root(), + transactions_root: header.transactions_root(), + receipts_root: header.receipts_root(), + logs_bloom: header.logs_bloom(), + difficulty: header.difficulty(), + number: header.number(), + gas_limit: header.gas_limit(), + gas_used: header.gas_used(), + timestamp: header.timestamp(), + extra_data: alloy_primitives::Bytes::from(extra_without_seal.to_vec()), + mix_hash: header.mix_hash().unwrap_or_default(), + nonce: header.nonce().unwrap_or_default().into(), + }; // Debug logging for seal hash calculation tracing::debug!( @@ -270,8 +290,7 @@ where extra_without_seal.len() ); - // Encode the list of fields (matching bsc-erigon's []interface{} encoding) - let encoded = alloy_rlp::encode(&fields); + let encoded = alloy_rlp::encode(&header_for_seal); let result = keccak256(&encoded); tracing::debug!( From 54ca2490a592ab3a6a1ba2db2460d34c25bd3607 Mon Sep 17 00:00:00 2001 From: Clyde Date: Fri, 8 Aug 2025 17:52:26 +0800 Subject: [PATCH 05/11] fix: debug --- src/consensus/parlia/validation.rs | 89 ++++++++++++++++-------------- 1 file changed, 49 insertions(+), 40 deletions(-) diff --git a/src/consensus/parlia/validation.rs b/src/consensus/parlia/validation.rs index 95e42fc..cf0e4d4 100644 --- a/src/consensus/parlia/validation.rs +++ b/src/consensus/parlia/validation.rs @@ -241,45 +241,54 @@ where // Encode directly as slice like bsc-erigon does (NOT using SealContent struct) // This matches bsc-erigon's EncodeSigHeader function exactly - // Create a custom struct that exactly matches bsc-erigon's field ordering - #[derive(alloy_rlp::RlpEncodable)] - struct HeaderForSeal { - chain_id: u64, - parent_hash: alloy_primitives::B256, - ommers_hash: alloy_primitives::B256, - beneficiary: alloy_primitives::Address, - state_root: alloy_primitives::B256, - transactions_root: alloy_primitives::B256, - receipts_root: alloy_primitives::B256, - logs_bloom: alloy_primitives::Bloom, - difficulty: alloy_primitives::U256, - number: u64, - gas_limit: u64, - gas_used: u64, - timestamp: u64, - extra_data: alloy_primitives::Bytes, - mix_hash: alloy_primitives::B256, - nonce: u64, - } - - let header_for_seal = HeaderForSeal { - chain_id, - parent_hash: header.parent_hash(), - ommers_hash: header.ommers_hash(), - beneficiary: header.beneficiary(), - state_root: header.state_root(), - transactions_root: header.transactions_root(), - receipts_root: header.receipts_root(), - logs_bloom: header.logs_bloom(), - difficulty: header.difficulty(), - number: header.number(), - gas_limit: header.gas_limit(), - gas_used: header.gas_used(), - timestamp: header.timestamp(), - extra_data: alloy_primitives::Bytes::from(extra_without_seal.to_vec()), - mix_hash: header.mix_hash().unwrap_or_default(), - nonce: header.nonce().unwrap_or_default().into(), - }; + // Copy zoro_reth's exact approach: manual field-by-field encoding + // This matches zoro_reth's encode_header_with_chain_id function exactly + use alloy_rlp::Encodable; + use alloy_primitives::{bytes::BytesMut, U256}; + + let mut out = BytesMut::new(); + + // First encode the RLP list header (like zoro_reth's rlp_header function) + let mut rlp_head = alloy_rlp::Header { list: true, payload_length: 0 }; + + // Calculate payload length for all fields + rlp_head.payload_length += U256::from(chain_id).length(); + rlp_head.payload_length += header.parent_hash().length(); + rlp_head.payload_length += header.ommers_hash().length(); + rlp_head.payload_length += header.beneficiary().length(); + rlp_head.payload_length += header.state_root().length(); + rlp_head.payload_length += header.transactions_root().length(); + rlp_head.payload_length += header.receipts_root().length(); + rlp_head.payload_length += header.logs_bloom().length(); + rlp_head.payload_length += header.difficulty().length(); + rlp_head.payload_length += U256::from(header.number()).length(); + rlp_head.payload_length += header.gas_limit().length(); + rlp_head.payload_length += header.gas_used().length(); + rlp_head.payload_length += header.timestamp().length(); + rlp_head.payload_length += extra_without_seal.length(); + rlp_head.payload_length += header.mix_hash().unwrap_or_default().length(); + rlp_head.payload_length += header.nonce().unwrap_or_default().length(); + + // Encode the RLP list header first + rlp_head.encode(&mut out); + + // Then encode each field individually (exactly like zoro_reth) + Encodable::encode(&U256::from(chain_id), &mut out); + Encodable::encode(&header.parent_hash(), &mut out); + Encodable::encode(&header.ommers_hash(), &mut out); + Encodable::encode(&header.beneficiary(), &mut out); + Encodable::encode(&header.state_root(), &mut out); + Encodable::encode(&header.transactions_root(), &mut out); + Encodable::encode(&header.receipts_root(), &mut out); + Encodable::encode(&header.logs_bloom(), &mut out); + Encodable::encode(&header.difficulty(), &mut out); + Encodable::encode(&U256::from(header.number()), &mut out); + Encodable::encode(&header.gas_limit(), &mut out); + Encodable::encode(&header.gas_used(), &mut out); + Encodable::encode(&header.timestamp(), &mut out); + Encodable::encode(&extra_without_seal, &mut out); + Encodable::encode(&header.mix_hash().unwrap_or_default(), &mut out); + Encodable::encode(&header.nonce().unwrap_or_default(), &mut out); // Debug logging for seal hash calculation tracing::debug!( @@ -290,7 +299,7 @@ where extra_without_seal.len() ); - let encoded = alloy_rlp::encode(&header_for_seal); + let encoded = out.to_vec(); let result = keccak256(&encoded); tracing::debug!( From d85f3004d169178ee8148e3653b4f8c6aa59bbf0 Mon Sep 17 00:00:00 2001 From: Clyde Date: Fri, 8 Aug 2025 18:07:38 +0800 Subject: [PATCH 06/11] fix: debug --- src/consensus/parlia/validation.rs | 31 ++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/consensus/parlia/validation.rs b/src/consensus/parlia/validation.rs index cf0e4d4..0d8b896 100644 --- a/src/consensus/parlia/validation.rs +++ b/src/consensus/parlia/validation.rs @@ -269,6 +269,17 @@ where rlp_head.payload_length += header.mix_hash().unwrap_or_default().length(); rlp_head.payload_length += header.nonce().unwrap_or_default().length(); + // Add conditional field lengths for post-4844 blocks (exactly like zoro_reth) + if header.parent_beacon_block_root().is_some() && + header.parent_beacon_block_root().unwrap() == alloy_primitives::B256::ZERO + { + rlp_head.payload_length += U256::from(header.base_fee_per_gas().unwrap_or_default()).length(); + rlp_head.payload_length += header.withdrawals_root().unwrap_or_default().length(); + rlp_head.payload_length += header.blob_gas_used().unwrap_or_default().length(); + rlp_head.payload_length += header.excess_blob_gas().unwrap_or_default().length(); + rlp_head.payload_length += header.parent_beacon_block_root().unwrap().length(); + } + // Encode the RLP list header first rlp_head.encode(&mut out); @@ -290,6 +301,26 @@ where Encodable::encode(&header.mix_hash().unwrap_or_default(), &mut out); Encodable::encode(&header.nonce().unwrap_or_default(), &mut out); + // Add conditional fields for post-4844 blocks (exactly like zoro_reth) + if header.parent_beacon_block_root().is_some() && + header.parent_beacon_block_root().unwrap() == alloy_primitives::B256::ZERO + { + Encodable::encode(&U256::from(header.base_fee_per_gas().unwrap_or_default()), &mut out); + Encodable::encode(&header.withdrawals_root().unwrap_or_default(), &mut out); + Encodable::encode(&header.blob_gas_used().unwrap_or_default(), &mut out); + Encodable::encode(&header.excess_blob_gas().unwrap_or_default(), &mut out); + Encodable::encode(&header.parent_beacon_block_root().unwrap(), &mut out); + + tracing::debug!( + "๐Ÿ” [BSC] Added post-4844 fields for block {}: base_fee={:?}, withdrawals_root={:?}, blob_gas_used={:?}, excess_blob_gas={:?}", + header.number(), + header.base_fee_per_gas(), + header.withdrawals_root(), + header.blob_gas_used(), + header.excess_blob_gas() + ); + } + // Debug logging for seal hash calculation tracing::debug!( "๐Ÿ” [BSC] Seal hash calculation for block {}: chain_id={}, extra_len={}, extra_without_seal_len={}", From b073426b723b6daf284c80b662c395393109f6ba Mon Sep 17 00:00:00 2001 From: Clyde Date: Fri, 8 Aug 2025 18:53:57 +0800 Subject: [PATCH 07/11] fix: debug --- Cargo.toml | 4 +- debug_seal_43132201.rs | 319 ----------------------------- src/consensus/parlia/validation.rs | 64 ------ 3 files changed, 1 insertion(+), 386 deletions(-) delete mode 100644 debug_seal_43132201.rs diff --git a/Cargo.toml b/Cargo.toml index 51eeede..016fcf1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,9 +16,7 @@ path = "src/main.rs" name = "snapshot-checker" path = "src/bin/snapshot_checker.rs" -[[bin]] -name = "debug_seal_43132201" -path = "debug_seal_43132201.rs" + [dependencies] reth = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b" } diff --git a/debug_seal_43132201.rs b/debug_seal_43132201.rs deleted file mode 100644 index 0217782..0000000 --- a/debug_seal_43132201.rs +++ /dev/null @@ -1,319 +0,0 @@ -#!/usr/bin/env cargo-script - -//! Simple debug script for block 43132201 seal recovery issue -//! Run with: cargo run --bin debug_seal_43132201 - -use alloy_consensus::{Header, BlockHeader}; -use alloy_primitives::{Address, B256, U256, Bytes, hex, Bloom}; -use std::str::FromStr; -use std::sync::Arc; - -fn main() { - println!("๐Ÿ” Debugging seal recovery for block 43132201"); - - // Actual block data from BSC testnet for block 43132201 - test_block_43132201(); -} - -fn test_block_43132201() { - println!("=== TESTING BLOCK 43132201 WITH REAL BSC CONSENSUS VALIDATOR ==="); - - // Real block data from BSC testnet block 43132201 - let expected_miner = Address::from_str("0x1a3d9d7a717d64e6088ac937d5aacdd3e20ca963").unwrap(); - let wrong_recovered = Address::from_str("0x95A216f51940259C488A686f5145dA1b1a82afD6").unwrap(); - - println!("Expected miner: {}", expected_miner); - println!("Wrong recovered: {}", wrong_recovered); - - // Create the exact header data from your EC2 node - let header = Header { - parent_hash: B256::from_str("0xf337513acca19fa58981201bcb8cb2c56cf3afece07c25e85b2cbbb2a1d23312").unwrap(), - ommers_hash: B256::from_str("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347").unwrap(), - beneficiary: expected_miner, - state_root: B256::from_str("0xd9382782278ef90f5e4ecd54434c4382a792ba9fb470636528c16e4f4720e09b").unwrap(), - transactions_root: B256::from_str("0xce21b4817bb3e7d57449fd327c5fb3081585b7be8212c65cee93bd033b38fac5").unwrap(), - receipts_root: B256::from_str("0x4fda1f67ddcd586290f023346407e46fe2cffd5c4e7360100dbcb084d862d6dc").unwrap(), - logs_bloom: Bloom::from_str("0x06000000000000000000004000000000000000000000000000000000000000000000180000220000000000000000000000080080000000000000000000000000000028000000000000000000000000002010000000000000000000000080000000080020800200000000100008000000080000000000000002000000000008000000000000000000008000000000000000000400000000000008040000000220000000000000002008001000028000000000010000000000000000000000000000040000001000000000000000100000200000000004000000104002000000000008000000000000010100040000110000009000000000004000000000080000").unwrap(), - difficulty: U256::from(2), - number: 43132201, - gas_limit: 70000000, // 0x42c1d80 - gas_used: 321004, // 0x4e5ec - timestamp: 1724395524, // 0x66c3f004 - extra_data: Bytes::from(hex::decode("d98301040d846765746889676f312e32312e3132856c696e757800000299d9bcf8b381fbb86084e92b477453ef7a021ebec2fe433dfb431ecf6fd1b5386e208a3055e3c0b5cc651852bb4c75a9c68c073c324dad308d018f3e6119415c54f47c6e6c1b603f311c29e8eadd6b55870f2ada055be8b3a776650ad6241bb7a763a66508e6563faaf84c8402922527a05a0a26c82e1d42ca0918957533e1ac5a97bf2d53837ce122944e7bd3189643508402922528a0f337513acca19fa58981201bcb8cb2c56cf3afece07c25e85b2cbbb2a1d2331280a021739230c7e8e9793d6a254992d1ac0401ff68da7a820398fc94a7a8667cdd4ba5b068b15acb1a33353779111ce635afb5eff4acef9a0b9eb5cf3d58b4a63600").unwrap()), - mix_hash: B256::ZERO, // From your data: 0x0000... - nonce: 0u64.into(), // From your data: 0x0000... - base_fee_per_gas: Some(0), - withdrawals_root: Some(B256::from_str("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421").unwrap()), - blob_gas_used: Some(0), - excess_blob_gas: Some(0), - parent_beacon_block_root: Some(B256::ZERO), - requests_hash: None, - }; - - let block_hash = B256::from_str("0x42e36cb84f8101382ac947a453e1cacade3966a8b4a5353ca76a389c5b28772c").unwrap(); - let sealed_header = reth_primitives_traits::SealedHeader::new(header, block_hash); - - // Test with real BSC consensus validator - test_with_real_bsc_validator(sealed_header, expected_miner, wrong_recovered); -} - -fn test_with_real_bsc_validator( - sealed_header: reth_primitives_traits::SealedHeader
, - expected_miner: Address, - wrong_recovered: Address -) { - use reth_bsc::consensus::parlia::validation::BscConsensusValidator; - use reth_bsc::chainspec::{BscChainSpec, bsc_testnet}; - - println!("\n๐Ÿ” Testing with real BscConsensusValidator..."); - - // Create the exact same validator your node uses - let chain_spec = Arc::new(BscChainSpec { - inner: bsc_testnet() - }); - let validator = BscConsensusValidator::new(chain_spec); - - // Debug the seal hash calculation details - println!("๐Ÿ”ง Debugging seal hash calculation..."); - println!("Block number: {}", sealed_header.number()); - println!("Chain ID: 97 (BSC testnet)"); - println!("ExtraData length: {}", sealed_header.extra_data().len()); - - // DETAILED SEAL CONTENT ANALYSIS - detailed_seal_content_analysis(&sealed_header); - - // Call the exact same function that's failing in your node - match validator.recover_proposer_from_seal(&sealed_header) { - Ok(recovered_address) => { - println!("โœ… Recovered address: {}", recovered_address); - - if recovered_address == expected_miner { - println!("๐ŸŽ‰ SUCCESS: Recovered address matches expected miner!"); - } else if recovered_address == wrong_recovered { - println!("โŒ REPRODUCED: Got the wrong recovered address! This confirms the bug."); - println!(" Expected: {}", expected_miner); - println!(" Got: {}", recovered_address); - println!(" This proves the seal hash calculation is incorrect."); - } else { - println!("โ“ UNEXPECTED: Got a completely different address: {}", recovered_address); - println!(" Expected: {}", expected_miner); - println!(" Node got: {}", wrong_recovered); - println!(" Test got: {}", recovered_address); - println!(" All three are different! This suggests a data construction issue."); - } - } - Err(e) => { - println!("๐Ÿ’ฅ ERROR: Failed to recover proposer: {:?}", e); - } - } - - // Let's also manually inspect the signature data - println!("\n๐Ÿ” Manual signature inspection:"); - let extra_data = sealed_header.extra_data(); - let signature_start = extra_data.len() - 65; - let signature = &extra_data[signature_start..]; - println!("Signature bytes: {}", hex::encode(signature)); - println!("Recovery ID: {}", signature[64]); - - // Show beneficiary vs recovered - println!("Header beneficiary: {}", sealed_header.beneficiary()); - println!("BSC official miner: {}", expected_miner); -} - -fn detailed_seal_content_analysis(sealed_header: &reth_primitives_traits::SealedHeader
) { - use alloy_primitives::keccak256; - - println!("\n=========================================="); - println!("๐Ÿ”ฌ DETAILED SEAL CONTENT ANALYSIS"); - println!("=========================================="); - - // Recreate exact same logic as validation.rs calculate_seal_hash - const EXTRA_SEAL: usize = 65; - let chain_id = 97u64; // BSC testnet - let extra_data = sealed_header.extra_data(); - - // Extract extra data without the seal - let extra_without_seal = if extra_data.len() >= EXTRA_SEAL { - &extra_data[..extra_data.len() - EXTRA_SEAL] - } else { - extra_data - }; - - // Create SealContent exactly like validation.rs does - let seal_content = reth_bsc::evm::precompiles::double_sign::SealContent { - chain_id, - parent_hash: sealed_header.parent_hash().0, - uncle_hash: sealed_header.ommers_hash().0, - coinbase: sealed_header.beneficiary().0 .0, - root: sealed_header.state_root().0, - tx_hash: sealed_header.transactions_root().0, - receipt_hash: sealed_header.receipts_root().0, - bloom: sealed_header.logs_bloom().0 .0, - difficulty: sealed_header.difficulty().clone(), - number: sealed_header.number(), - gas_limit: sealed_header.gas_limit(), - gas_used: sealed_header.gas_used(), - time: sealed_header.timestamp(), - extra: alloy_primitives::Bytes::from(extra_without_seal.to_vec()), - mix_digest: sealed_header.mix_hash().unwrap_or_default().0, - nonce: sealed_header.nonce().unwrap_or_default().0, - }; - - // Show each field in detail - println!("๐Ÿ” SealContent fields constructed by our code:"); - println!(" chain_id: {}", seal_content.chain_id); - println!(" parent_hash: 0x{}", hex::encode(seal_content.parent_hash)); - println!(" uncle_hash: 0x{}", hex::encode(seal_content.uncle_hash)); - println!(" coinbase: 0x{}", hex::encode(seal_content.coinbase)); - println!(" root: 0x{}", hex::encode(seal_content.root)); - println!(" tx_hash: 0x{}", hex::encode(seal_content.tx_hash)); - println!(" receipt_hash: 0x{}", hex::encode(seal_content.receipt_hash)); - println!(" bloom: 0x{}", hex::encode(&seal_content.bloom[..32])); // Show first 32 bytes - println!(" difficulty: {}", seal_content.difficulty); - println!(" number: {}", seal_content.number); - println!(" gas_limit: {}", seal_content.gas_limit); - println!(" gas_used: {}", seal_content.gas_used); - println!(" time: {}", seal_content.time); - println!(" extra: 0x{} (len={})", hex::encode(&seal_content.extra), seal_content.extra.len()); - println!(" mix_digest: 0x{}", hex::encode(seal_content.mix_digest)); - println!(" nonce: 0x{}", hex::encode(seal_content.nonce)); - - // Calculate the seal hash - let encoded = alloy_rlp::encode(&seal_content); - let seal_hash = keccak256(&encoded); - - println!("\n๐Ÿงฎ Seal hash calculation:"); - println!(" Encoded length: {} bytes", encoded.len()); - println!(" Encoded (first 64 bytes): 0x{}", hex::encode(&encoded[..64.min(encoded.len())])); - println!(" Seal hash: 0x{}", hex::encode(seal_hash)); - - // Show what BSC network expects - println!("\n๐ŸŽฏ Expected BSC values (from your EC2 node RPC):"); - println!(" parent_hash: 0xf337513acca19fa58981201bcb8cb2c56cf3afece07c25e85b2cbbb2a1d23312"); - println!(" uncle_hash: 0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"); - println!(" coinbase: 0x1a3d9d7a717d64e6088ac937d5aacdd3e20ca963"); - println!(" root: 0xd9382782278ef90f5e4ecd54434c4382a792ba9fb470636528c16e4f4720e09b"); - println!(" tx_hash: 0xce21b4817bb3e7d57449fd327c5fb3081585b7be8212c65cee93bd033b38fac5"); - println!(" receipt_hash: 0x4fda1f67ddcd586290f023346407e46fe2cffd5c4e7360100dbcb084d862d6dc"); - println!(" difficulty: 0x2 (should be 2)"); - println!(" number: 0x2922529 (should be 43132201)"); - println!(" gas_limit: 0x42c1d80 (should be 70000000)"); - println!(" gas_used: 0x4e5ec (should be 321004)"); - println!(" time: 0x66c3f004 (should be 1724395524)"); - println!(" mix_hash: 0x0000000000000000000000000000000000000000000000000000000000000000"); - println!(" nonce: 0x0000000000000000"); - - println!("\n๐Ÿ’ก All fields match! So the issue is NOT in field values."); - println!(" The problem must be in RLP encoding or signature recovery logic."); - - // Let's try to reverse-engineer what seal hash BSC actually used - test_signature_recovery_variants(seal_hash); - - println!("=========================================="); -} - -fn test_signature_recovery_variants(our_seal_hash: alloy_primitives::B256) { - use alloy_primitives::{keccak256, B256}; - use secp256k1::{ecdsa::RecoverableSignature, Message, Secp256k1, SECP256K1}; - - println!("\n๐Ÿ”ฌ TESTING SIGNATURE RECOVERY VARIANTS"); - println!("=========================================="); - - // The signature from block 43132201 - let signature_hex = "a021739230c7e8e9793d6a254992d1ac0401ff68da7a820398fc94a7a8667cdd4ba5b068b15acb1a33353779111ce635afb5eff4acef9a0b9eb5cf3d58b4a63600"; - let signature_bytes = hex::decode(signature_hex).unwrap(); - let recovery_id = signature_bytes[64]; - - let expected_miner = Address::from_str("0x1a3d9d7a717d64e6088ac937d5aacdd3e20ca963").unwrap(); - - println!("Expected miner: {}", expected_miner); - println!("Our calculated seal hash: 0x{}", hex::encode(our_seal_hash)); - - // Test our seal hash - let result_ours = test_recovery_with_hash(our_seal_hash, &signature_bytes, recovery_id); - println!("Recovery with our hash: {:?}", result_ours); - - // Maybe BSC uses a different message format? Let's test some variants: - - // Variant 1: Maybe BSC doesn't include chain_id in the message? - println!("\n๐Ÿงช Testing variant: Message without Ethereum prefix"); - let plain_hash = our_seal_hash; - let result_plain = test_recovery_with_hash(plain_hash, &signature_bytes, recovery_id); - println!("Recovery with plain hash: {:?}", result_plain); - - // Variant 2: Maybe BSC uses Ethereum's message prefix? - println!("\n๐Ÿงช Testing variant: Ethereum message prefix"); - let eth_message = format!("\x19Ethereum Signed Message:\n32{}", hex::encode(our_seal_hash)); - let eth_hash = keccak256(eth_message.as_bytes()); - let result_eth = test_recovery_with_hash(eth_hash, &signature_bytes, recovery_id); - println!("Recovery with Ethereum prefix: {:?}", result_eth); - - // Let's also test if we can find what hash would actually give us the expected result - println!("\n๐Ÿ” Testing if BSC uses standard Ethereum header hash instead of SealContent..."); - - // Maybe BSC just uses the header hash without the custom SealContent structure? - // Let's test with a standard header hash - test_ethereum_header_hash_variant(); - - println!("โœ… This confirms our seal hash calculation is wrong."); - println!(" The actual BSC seal hash must be different from what we calculated."); -} - -fn test_recovery_with_hash(hash: B256, signature_bytes: &[u8], recovery_id: u8) -> Result { - use secp256k1::{ecdsa::RecoverableSignature, Message, Secp256k1, SECP256K1}; - - // Convert hash to message - let message = Message::from_slice(&hash[..]) - .map_err(|e| format!("Invalid message: {}", e))?; - - // Create recoverable signature - let recovery_id = secp256k1::ecdsa::RecoveryId::from_i32(recovery_id as i32) - .map_err(|e| format!("Invalid recovery ID: {}", e))?; - - let sig_bytes = &signature_bytes[..64]; - let signature = secp256k1::ecdsa::Signature::from_compact(sig_bytes) - .map_err(|e| format!("Invalid signature: {}", e))?; - - let recoverable_sig = RecoverableSignature::from_compact(sig_bytes, recovery_id) - .map_err(|e| format!("Invalid recoverable signature: {}", e))?; - - // Recover public key - let public_key = SECP256K1.recover_ecdsa(&message, &recoverable_sig) - .map_err(|e| format!("Recovery failed: {}", e))?; - - // Convert to address - let public_key_bytes = public_key.serialize_uncompressed(); - let hash = alloy_primitives::keccak256(&public_key_bytes[1..]); // Skip 0x04 prefix - let address = Address::from_slice(&hash[12..]); - - Ok(address) -} - -fn test_ethereum_header_hash_variant() { - use alloy_primitives::keccak256; - - println!("\n๐Ÿงช Testing Ethereum-style header hash (no custom SealContent)"); - - // Create a header hash using standard Ethereum RLP encoding - // This would be: RLP([parent_hash, uncle_hash, coinbase, root, tx_hash, receipt_hash, bloom, difficulty, number, gas_limit, gas_used, time, extra_without_seal, mix_hash, nonce]) - - let header_fields = [ - // parent_hash - hex::decode("f337513acca19fa58981201bcb8cb2c56cf3afece07c25e85b2cbbb2a1d23312").unwrap(), - // uncle_hash - hex::decode("1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347").unwrap(), - // coinbase - hex::decode("1a3d9d7a717d64e6088ac937d5aacdd3e20ca963").unwrap(), - // Add other fields... - ]; - - println!("๐Ÿ”ง Standard Ethereum header RLP would look different..."); - println!(" This is a simplified test - full implementation would need proper RLP of all fields"); - - // The key insight: BSC might NOT use the custom SealContent at all! - // BSC might just use the header hash like Ethereum does - - println!("๐Ÿ’ก HYPOTHESIS: BSC doesn't use SealContent for seal hash calculation!"); - println!(" BSC might use standard Ethereum header hash instead."); - println!(" This would explain why all our SealContent field values are correct but hash is wrong."); -} diff --git a/src/consensus/parlia/validation.rs b/src/consensus/parlia/validation.rs index 0d8b896..4a263ca 100644 --- a/src/consensus/parlia/validation.rs +++ b/src/consensus/parlia/validation.rs @@ -12,7 +12,6 @@ use reth_chainspec::EthChainSpec; use reth_primitives_traits::SealedHeader; use std::collections::HashMap; use std::sync::Arc; -use alloy_primitives::hex; /// BSC consensus validator that implements the missing pre/post execution logic #[derive(Debug, Clone)] @@ -155,25 +154,6 @@ where let seal_hash = self.calculate_seal_hash(header); let message = Message::from_digest(seal_hash.0); - // DEBUG: Add detailed logging for signature extraction - tracing::debug!( - "๐Ÿ” [BSC] Signature extraction for block {}: extra_data_len={}, signature_len={}, signature_hex={}", - header.number(), - extra_data.len(), - signature.len(), - hex::encode(signature) - ); - - // DEBUG: Extra verification of slice bounds - let expected_signature_start = extra_data.len() - 65; - tracing::debug!( - "๐Ÿ” [BSC] Signature slice bounds for block {}: expected_start={}, actual_slice_len={}, extra_last_10_bytes={}", - header.number(), - expected_signature_start, - signature.len(), - hex::encode(&extra_data[extra_data.len().saturating_sub(10)..]) - ); - // Parse signature: 64 bytes + 1 recovery byte if signature.len() != 65 { return Err(ConsensusError::Other(format!("Invalid signature length: expected 65, got {}", signature.len()).into())); @@ -182,17 +162,6 @@ where let sig_bytes = &signature[..64]; let recovery_id = signature[64]; - // DEBUG: Verify the slicing worked correctly - tracing::debug!( - "๐Ÿ” [BSC] Signature parsing for block {}: sig_bytes_len={}, recovery_id={}, sig_bytes_hex={}", - header.number(), - sig_bytes.len(), - recovery_id, - hex::encode(sig_bytes) - ); - - // (Removed duplicate debug line - using the new one above instead) - // Handle recovery ID (bsc-erigon compatible) let recovery_id = RecoveryId::from_i32(recovery_id as i32) .map_err(|_| ConsensusError::Other("Invalid recovery ID".into()))?; @@ -210,14 +179,6 @@ where let hash = keccak256(&public_key_bytes[1..]); // Skip 0x04 prefix let address = Address::from_slice(&hash[12..]); - tracing::debug!( - "๐Ÿ” [BSC] Seal recovery result for block {}: recovered_address={}, expected_miner={}, match={}", - header.number(), - address, - header.beneficiary(), - address == header.beneficiary() - ); - Ok(address) } @@ -310,36 +271,11 @@ where Encodable::encode(&header.blob_gas_used().unwrap_or_default(), &mut out); Encodable::encode(&header.excess_blob_gas().unwrap_or_default(), &mut out); Encodable::encode(&header.parent_beacon_block_root().unwrap(), &mut out); - - tracing::debug!( - "๐Ÿ” [BSC] Added post-4844 fields for block {}: base_fee={:?}, withdrawals_root={:?}, blob_gas_used={:?}, excess_blob_gas={:?}", - header.number(), - header.base_fee_per_gas(), - header.withdrawals_root(), - header.blob_gas_used(), - header.excess_blob_gas() - ); } - // Debug logging for seal hash calculation - tracing::debug!( - "๐Ÿ” [BSC] Seal hash calculation for block {}: chain_id={}, extra_len={}, extra_without_seal_len={}", - header.number(), - chain_id, - extra_data.len(), - extra_without_seal.len() - ); - let encoded = out.to_vec(); let result = keccak256(&encoded); - tracing::debug!( - "๐Ÿ” [BSC] Seal hash result for block {}: hash={:?}, encoded_len={}", - header.number(), - result, - encoded.len() - ); - result } } From 713a693fd28d50a891f83f0cb92b6a5a29d710b4 Mon Sep 17 00:00:00 2001 From: Clyde Date: Fri, 8 Aug 2025 18:59:10 +0800 Subject: [PATCH 08/11] fix: clean up code --- debug_seal_recovery.rs | 38 ------------- tests/seal_recovery_test.rs | 109 ------------------------------------ 2 files changed, 147 deletions(-) delete mode 100644 debug_seal_recovery.rs delete mode 100644 tests/seal_recovery_test.rs diff --git a/debug_seal_recovery.rs b/debug_seal_recovery.rs deleted file mode 100644 index 1d06b44..0000000 --- a/debug_seal_recovery.rs +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env rust-script - -//! Debug script to test seal recovery for block 43132201 -//! Run with: cargo run --bin debug_seal_recovery - -use alloy_consensus::Header; -use alloy_primitives::{Address, B256, U256}; -use reth_primitives_traits::SealedHeader; -use std::str::FromStr; - -// Simulate the BscConsensusValidator seal recovery -fn debug_seal_recovery() { - // Block 43132201 data from the BSC testnet - let extra_data = "0xd98301040d846765746889676f312e32312e3132856c696e757800000299d9bcf8b381fbb86084e92b477453ef7a021ebec2fe433dfb431ecf6fd1b5386e208a3055e3c0b5cc651852bb4c75a9c68c073c324dad308d018f3e6119415c54f47c6e6c1b603f311c29e8eadd6b55870f2ada055be8b3a776650ad6241bb7a763a66508e6563faaf84c8402922527a05a0a26c82e1d42ca0918957533e1ac5a97bf2d53837ce122944e7bd3189643508402922528a0f337513acca19fa58981201bcb8cb2c56cf3afece07c25e85b2cbbb2a1d2331280a021739230c7e8e9793d6a254992d1ac0401ff68da7a820398fc94a7a8667cdd4ba5b068b15acb1a33353779111ce635afb5eff4acef9a0b9eb5cf3d58b4a63600"; - - let expected_miner = Address::from_str("0x1a3d9d7a717d64e6088ac937d5aacdd3e20ca963").unwrap(); - let recovered_miner = Address::from_str("0x95A216f51940259C488A686f5145dA1b1a82afD6").unwrap(); - - println!("๐Ÿ” Block 43132201 Seal Recovery Debug"); - println!("Expected miner: {}", expected_miner); - println!("Your recovered: {}", recovered_miner); - println!("ExtraData: {}", extra_data); - - // Parse extraData - let extra_bytes = hex::decode(&extra_data[2..]).expect("Invalid hex"); - let signature_start = extra_bytes.len() - 65; - let signature = &extra_bytes[signature_start..]; - - println!("๐Ÿ” Signature bytes (last 65): {}", hex::encode(signature)); - println!("Recovery ID: {}", signature[64]); - - // TODO: Add actual seal hash calculation and recovery here - // This would require implementing the same logic as your BscConsensusValidator -} - -fn main() { - debug_seal_recovery(); -} diff --git a/tests/seal_recovery_test.rs b/tests/seal_recovery_test.rs deleted file mode 100644 index aec8281..0000000 --- a/tests/seal_recovery_test.rs +++ /dev/null @@ -1,109 +0,0 @@ -//! Unit test to reproduce the seal recovery issue for block 43132201 - -use alloy_consensus::Header; -use alloy_primitives::{Address, B256, U256, Bytes, hex}; -use reth_bsc::consensus::parlia::validation::BscConsensusValidator; -use reth_bsc::chainspec::{BscChainSpec, bsc_testnet}; -use reth_primitives_traits::SealedHeader; -use reth_chainspec::EthChainSpec; -use std::str::FromStr; -use std::sync::Arc; - -/// Test to reproduce the seal recovery issue for block 43132201 -#[test] -fn test_seal_recovery_block_43132201() { - // Block 43132201 data from BSC testnet - let block_number = 43132201u64; - let expected_miner = Address::from_str("0x1a3d9d7a717d64e6088ac937d5aacdd3e20ca963").unwrap(); - let wrong_recovered = Address::from_str("0x95A216f51940259C488A686f5145dA1b1a82afD6").unwrap(); - - // Actual extraData from block 43132201 - let extra_data_hex = "0xd98301040d846765746889676f312e32312e3132856c696e757800000299d9bcf8b381fbb86084e92b477453ef7a021ebec2fe433dfb431ecf6fd1b5386e208a3055e3c0b5cc651852bb4c75a9c68c073c324dad308d018f3e6119415c54f47c6e6c1b603f311c29e8eadd6b55870f2ada055be8b3a776650ad6241bb7a763a66508e6563faaf84c8402922527a05a0a26c82e1d42ca0918957533e1ac5a97bf2d53837ce122944e7bd3189643508402922528a0f337513acca19fa58981201bcb8cb2c56cf3afece07c25e85b2cbbb2a1d2331280a021739230c7e8e9793d6a254992d1ac0401ff68da7a820398fc94a7a8667cdd4ba5b068b15acb1a33353779111ce635afb5eff4acef9a0b9eb5cf3d58b4a63600"; - let extra_data = Bytes::from(hex::decode(&extra_data_hex[2..]).unwrap()); - - // Create a mock header with the actual block data - let header = Header { - parent_hash: B256::from_str("0xf337513acca19fa58981201bcb8cb2c56cf3afece07c25e85b2cbbb2a1d23312").unwrap(), - ommers_hash: B256::from_str("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347").unwrap(), // Standard empty uncle hash - beneficiary: expected_miner, // This should be the miner - state_root: B256::from_str("0x2e9793d6a254992d1ac0401ff68da7a820398fc94a7a8667cdd4ba5b068b15acb").unwrap(), // Mock state root - transactions_root: B256::from_str("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421").unwrap(), // Empty tx root - receipts_root: B256::from_str("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421").unwrap(), // Empty receipt root - logs_bloom: Default::default(), - difficulty: U256::from(2), // Should be 2 for in-turn - number: block_number, - gas_limit: 30000000, - gas_used: 0, - timestamp: 1705554750, // Mock timestamp - extra_data, - mix_hash: B256::ZERO, - nonce: 0u64.into(), - base_fee_per_gas: Some(1000000000), - withdrawals_root: None, - blob_gas_used: None, - excess_blob_gas: None, - parent_beacon_block_root: None, - requests_hash: None, - }; - - let block_hash = B256::from_str("0x42e36cb84f8101382ac947a453e1cacade3966a8b4a5353ca76a389c5b28772c").unwrap(); - let sealed_header = SealedHeader::new(header, block_hash); - - // Create BSC consensus validator - let chain_spec = Arc::new(BscChainSpec { - inner: bsc_testnet() - }); - let validator = BscConsensusValidator::new(chain_spec); - - // Test seal recovery - println!("๐Ÿ” Testing seal recovery for block {}", block_number); - println!("Expected miner: {}", expected_miner); - println!("Wrong recovered: {}", wrong_recovered); - - match validator.recover_proposer_from_seal(&sealed_header) { - Ok(recovered_address) => { - println!("โœ… Recovered address: {}", recovered_address); - - if recovered_address == expected_miner { - println!("๐ŸŽ‰ SUCCESS: Recovered address matches expected miner!"); - } else if recovered_address == wrong_recovered { - println!("โŒ REPRODUCED: Got the wrong recovered address!"); - panic!("Seal recovery returned wrong address: expected {}, got {}", expected_miner, recovered_address); - } else { - println!("โ“ UNEXPECTED: Got a different address entirely: {}", recovered_address); - panic!("Unexpected recovered address: {}", recovered_address); - } - } - Err(e) => { - println!("๐Ÿ’ฅ ERROR: Failed to recover proposer: {:?}", e); - panic!("Seal recovery failed: {:?}", e); - } - } -} - -#[test] -fn test_debug_seal_hash_calculation() { - // Same setup as above but focus on seal hash calculation - let block_number = 43132201u64; - let expected_miner = Address::from_str("0x1a3d9d7a717d64e6088ac937d5aacdd3e20ca963").unwrap(); - - let extra_data_hex = "0xd98301040d846765746889676f312e32312e3132856c696e757800000299d9bcf8b381fbb86084e92b477453ef7a021ebec2fe433dfb431ecf6fd1b5386e208a3055e3c0b5cc651852bb4c75a9c68c073c324dad308d018f3e6119415c54f47c6e6c1b603f311c29e8eadd6b55870f2ada055be8b3a776650ad6241bb7a763a66508e6563faaf84c8402922527a05a0a26c82e1d42ca0918957533e1ac5a97bf2d53837ce122944e7bd3189643508402922528a0f337513acca19fa58981201bcb8cb2c56cf3afece07c25e85b2cbbb2a1d2331280a021739230c7e8e9793d6a254992d1ac0401ff68da7a820398fc94a7a8667cdd4ba5b068b15acb1a33353779111ce635afb5eff4acef9a0b9eb5cf3d58b4a63600"; - let extra_data = Bytes::from(hex::decode(&extra_data_hex[2..]).unwrap()); - - // Print signature details - let signature_start = extra_data.len() - 65; - let signature = &extra_data[signature_start..]; - - println!("๐Ÿ” Block {} signature analysis:", block_number); - println!("ExtraData length: {}", extra_data.len()); - println!("Signature (last 65 bytes): {}", hex::encode(signature)); - println!("Recovery ID: {}", signature[64]); - - // Test chain ID - let chain_spec = Arc::new(BscChainSpec { - inner: bsc_testnet() - }); - println!("Chain ID: {}", chain_spec.chain().id()); - - // TODO: Add actual seal hash calculation and compare with expected -} From 52b66d207fdc542f05ffc879a087586b9b8304a7 Mon Sep 17 00:00:00 2001 From: Clyde Date: Fri, 8 Aug 2025 19:03:19 +0800 Subject: [PATCH 09/11] fix: code clean --- .../parlia_getSnapshot/43132201/our_ec2.json | 1 - .../43132201/public_rpc.json | 460 ------------------ src/consensus/parlia/validation.rs | 12 +- 3 files changed, 6 insertions(+), 467 deletions(-) delete mode 100644 examples/parlia_api/parlia_getSnapshot/43132201/our_ec2.json delete mode 100644 examples/parlia_api/parlia_getSnapshot/43132201/public_rpc.json diff --git a/examples/parlia_api/parlia_getSnapshot/43132201/our_ec2.json b/examples/parlia_api/parlia_getSnapshot/43132201/our_ec2.json deleted file mode 100644 index c9c94d9..0000000 --- a/examples/parlia_api/parlia_getSnapshot/43132201/our_ec2.json +++ /dev/null @@ -1 +0,0 @@ -{"jsonrpc":"2.0","id":3,"result":{"number":43132201,"hash":"0x6a0ea8d0d8a8d5f3a9288c02f6475104407199850b661a2fc26b01b914920145","epoch_length":200,"block_interval":3000,"turn_length":1,"validators":{"0x40d3256eb0babe89f0ea54edaa398513136612f5":{"index:omitempty":0,"vote_address":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},"0x7f5f2cf1aec83bf0c74df566a41aa7ed65ea84ea":{"index:omitempty":0,"vote_address":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},"0xf9a1db0d6f22bd78ffaeccbc8f47c83df9fbdbcf":{"index:omitempty":0,"vote_address":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},"0x1a3d9d7a717d64e6088ac937d5aacdd3e20ca963":{"index:omitempty":0,"vote_address":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},"0x53387f3321fd69d1e030bb921230dfb188826aff":{"index:omitempty":0,"vote_address":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},"0x76d76ee8823de52a1a431884c2ca930c5e72bff3":{"index:omitempty":0,"vote_address":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},"0x08265da01e1a65d62b903c7b34c08cb389bf3d99":{"index:omitempty":0,"vote_address":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},"0xd447b49cd040d20bc21e49ffea6487f5638e4346":{"index:omitempty":0,"vote_address":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},"recents":{"43132201":"0x1a3d9d7a717d64e6088ac937d5aacdd3e20ca963","43132200":"0x08265da01e1a65d62b903c7b34c08cb389bf3d99","43132198":"0xd447b49cd040d20bc21e49ffea6487f5638e4346","43132197":"0x7f5f2cf1aec83bf0c74df566a41aa7ed65ea84ea","43132199":"0xf9a1db0d6f22bd78ffaeccbc8f47c83df9fbdbcf"},"recent_fork_hashes":{"43132198":"00000000","43132199":"00000000","43132201":"00000000","43132200":"00000000","43132197":"00000000"},"attestation:omitempty":null}} \ No newline at end of file diff --git a/examples/parlia_api/parlia_getSnapshot/43132201/public_rpc.json b/examples/parlia_api/parlia_getSnapshot/43132201/public_rpc.json deleted file mode 100644 index ede75a3..0000000 --- a/examples/parlia_api/parlia_getSnapshot/43132201/public_rpc.json +++ /dev/null @@ -1,460 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": 3, - "result": { - "number": 43132201, - "hash": "0x42e36cb84f8101382ac947a453e1cacade3966a8b4a5353ca76a389c5b28772c", - "epoch_length": 200, - "block_interval": 3000, - "turn_length": 1, - "validators": { - "0x08265da01e1a65d62b903c7b34c08cb389bf3d99": { - "index:omitempty": 1, - "vote_address": [ - 150, - 247, - 99, - 240, - 48, - 177, - 173, - 207, - 179, - 105, - 197, - 165, - 223, - 74, - 24, - 225, - 82, - 155, - 175, - 254, - 127, - 234, - 236, - 102, - 219, - 61, - 189, - 27, - 192, - 104, - 16, - 247, - 246, - 248, - 139, - 123, - 230, - 100, - 84, - 24, - 167, - 226, - 162, - 163, - 244, - 5, - 20, - 194 - ] - }, - "0x1a3d9d7a717d64e6088ac937d5aacdd3e20ca963": { - "index:omitempty": 2, - "vote_address": [ - 151, - 153, - 116, - 205, - 143, - 249, - 12, - 191, - 9, - 112, - 35, - 220, - 140, - 68, - 130, - 69, - 206, - 255, - 103, - 30, - 150, - 93, - 87, - 216, - 46, - 175, - 155, - 233, - 20, - 120, - 207, - 160, - 242, - 77, - 41, - 147, - 224, - 197, - 244, - 58, - 108, - 90, - 76, - 217, - 152, - 80, - 2, - 48 - ] - }, - "0x40d3256eb0babe89f0ea54edaa398513136612f5": { - "index:omitempty": 3, - "vote_address": [ - 163, - 52, - 180, - 157, - 118, - 110, - 190, - 62, - 185, - 246, - 189, - 193, - 99, - 189, - 44, - 25, - 170, - 126, - 140, - 238, - 22, - 103, - 133, - 26, - 224, - 193, - 101, - 31, - 1, - 196, - 207, - 124, - 242, - 207, - 207, - 132, - 117, - 191, - 243, - 233, - 156, - 171, - 37, - 176, - 86, - 49, - 71, - 45 - ] - }, - "0x53387f3321fd69d1e030bb921230dfb188826aff": { - "index:omitempty": 4, - "vote_address": [ - 170, - 57, - 235, - 241, - 195, - 139, - 25, - 8, - 81, - 228, - 219, - 5, - 136, - 163, - 233, - 1, - 66, - 197, - 41, - 144, - 65, - 251, - 138, - 13, - 179, - 187, - 154, - 31, - 164, - 189, - 240, - 218, - 232, - 76, - 163, - 126, - 225, - 42, - 107, - 140, - 38, - 202, - 171, - 119, - 95, - 14, - 0, - 123 - ] - }, - "0x76d76ee8823de52a1a431884c2ca930c5e72bff3": { - "index:omitempty": 5, - "vote_address": [ - 128, - 58, - 247, - 150, - 65, - 207, - 150, - 76, - 192, - 1, - 103, - 16, - 23, - 240, - 182, - 128, - 249, - 59, - 125, - 222, - 8, - 91, - 36, - 187, - 198, - 123, - 42, - 86, - 42, - 33, - 111, - 144, - 58, - 200, - 120, - 197, - 71, - 118, - 65, - 50, - 129, - 114, - 163, - 83, - 241, - 228, - 147, - 207 - ] - }, - "0x7f5f2cf1aec83bf0c74df566a41aa7ed65ea84ea": { - "index:omitempty": 6, - "vote_address": [ - 153, - 227, - 132, - 158, - 243, - 24, - 135, - 192, - 248, - 128, - 160, - 254, - 185, - 47, - 53, - 111, - 88, - 251, - 208, - 35, - 168, - 47, - 83, - 17, - 252, - 135, - 165, - 136, - 58, - 102, - 46, - 158, - 187, - 190, - 252, - 144, - 191, - 19, - 170, - 83, - 60, - 36, - 56, - 164, - 17, - 56, - 4, - 191 - ] - }, - "0xd447b49cd040d20bc21e49ffea6487f5638e4346": { - "index:omitempty": 7, - "vote_address": [ - 173, - 159, - 198, - 209, - 236, - 48, - 226, - 128, - 22, - 211, - 137, - 43, - 81, - 167, - 137, - 139, - 211, - 84, - 207, - 231, - 134, - 67, - 69, - 63, - 211, - 134, - 132, - 16, - 218, - 65, - 45, - 231, - 242, - 136, - 49, - 128, - 208, - 162, - 132, - 1, - 17, - 173, - 46, - 4, - 63, - 164, - 3, - 235 - ] - }, - "0xf9a1db0d6f22bd78ffaeccbc8f47c83df9fbdbcf": { - "index:omitempty": 8, - "vote_address": [ - 170, - 222, - 15, - 120, - 166, - 185, - 43, - 56, - 201, - 246, - 212, - 92, - 232, - 251, - 1, - 218, - 43, - 128, - 1, - 0, - 32, - 28, - 240, - 147, - 107, - 107, - 75, - 20, - 201, - 138, - 242, - 46, - 219, - 226, - 125, - 248, - 170, - 25, - 127, - 202, - 115, - 56, - 145, - 181, - 182, - 202, - 149, - 219 - ] - } - }, - "recents": { - "43132197": "0x7f5f2cf1aec83bf0c74df566a41aa7ed65ea84ea", - "43132198": "0xd447b49cd040d20bc21e49ffea6487f5638e4346", - "43132199": "0xf9a1db0d6f22bd78ffaeccbc8f47c83df9fbdbcf", - "43132200": "0x08265da01e1a65d62b903c7b34c08cb389bf3d99", - "43132201": "0x1a3d9d7a717d64e6088ac937d5aacdd3e20ca963" - }, - "recent_fork_hashes": { - "43132194": "0299d9bc", - "43132195": "0299d9bc", - "43132196": "0299d9bc", - "43132197": "0299d9bc", - "43132198": "0299d9bc", - "43132199": "631f83a6", - "43132200": "0299d9bc", - "43132201": "0299d9bc" - }, - "attestation:omitempty": { - "SourceNumber": 43132199, - "SourceHash": "0x5a0a26c82e1d42ca0918957533e1ac5a97bf2d53837ce122944e7bd318964350", - "TargetNumber": 43132200, - "TargetHash": "0xf337513acca19fa58981201bcb8cb2c56cf3afece07c25e85b2cbbb2a1d23312" - } - } -} \ No newline at end of file diff --git a/src/consensus/parlia/validation.rs b/src/consensus/parlia/validation.rs index 4a263ca..a833d60 100644 --- a/src/consensus/parlia/validation.rs +++ b/src/consensus/parlia/validation.rs @@ -202,14 +202,14 @@ where // Encode directly as slice like bsc-erigon does (NOT using SealContent struct) // This matches bsc-erigon's EncodeSigHeader function exactly - // Copy zoro_reth's exact approach: manual field-by-field encoding - // This matches zoro_reth's encode_header_with_chain_id function exactly + // manual field-by-field encoding + // This matches reth-bsc-trail's encode_header_with_chain_id function exactly use alloy_rlp::Encodable; use alloy_primitives::{bytes::BytesMut, U256}; let mut out = BytesMut::new(); - // First encode the RLP list header (like zoro_reth's rlp_header function) + // First encode the RLP list header (like reth-bsc-trail's rlp_header function) let mut rlp_head = alloy_rlp::Header { list: true, payload_length: 0 }; // Calculate payload length for all fields @@ -230,7 +230,7 @@ where rlp_head.payload_length += header.mix_hash().unwrap_or_default().length(); rlp_head.payload_length += header.nonce().unwrap_or_default().length(); - // Add conditional field lengths for post-4844 blocks (exactly like zoro_reth) + // Add conditional field lengths for post-4844 blocks (exactly like reth-bsc-trail) if header.parent_beacon_block_root().is_some() && header.parent_beacon_block_root().unwrap() == alloy_primitives::B256::ZERO { @@ -244,7 +244,7 @@ where // Encode the RLP list header first rlp_head.encode(&mut out); - // Then encode each field individually (exactly like zoro_reth) + // Then encode each field individually (exactly like reth-bsc-trail) Encodable::encode(&U256::from(chain_id), &mut out); Encodable::encode(&header.parent_hash(), &mut out); Encodable::encode(&header.ommers_hash(), &mut out); @@ -262,7 +262,7 @@ where Encodable::encode(&header.mix_hash().unwrap_or_default(), &mut out); Encodable::encode(&header.nonce().unwrap_or_default(), &mut out); - // Add conditional fields for post-4844 blocks (exactly like zoro_reth) + // Add conditional fields for post-4844 blocks if header.parent_beacon_block_root().is_some() && header.parent_beacon_block_root().unwrap() == alloy_primitives::B256::ZERO { From 48e878903e8fd61025d1b9e373e6d4082b79b418 Mon Sep 17 00:00:00 2001 From: Clyde Date: Mon, 11 Aug 2025 15:07:29 +0800 Subject: [PATCH 10/11] fix: remove useless file and code --- DEPLOYMENT.md | 292 --------------- README.md | 14 - docs/DATABASE_INTEGRATION.md | 204 ----------- examples/consensus_factory_usage.rs | 63 ---- examples/curl_examples.md | 69 ---- examples/launch_with_persistence.rs | 103 ------ .../parlia_getSnapshot/request.json | 6 - .../parlia_getSnapshot/response.json | 346 ------------------ examples/test_genesis_snapshot.rs | 64 ---- examples/test_mainnet_genesis.rs | 44 --- examples/test_mainnet_genesis_snapshot.rs | 63 ---- examples/test_parlia_api.rs | 47 --- examples/test_persistence_enabled.rs | 19 - run_bsc_server.sh | 15 - scripts/start_mainnet_debug.sh | 86 ----- scripts/start_testnet.sh | 47 --- 16 files changed, 1482 deletions(-) delete mode 100644 DEPLOYMENT.md delete mode 100644 docs/DATABASE_INTEGRATION.md delete mode 100644 examples/consensus_factory_usage.rs delete mode 100644 examples/curl_examples.md delete mode 100644 examples/launch_with_persistence.rs delete mode 100644 examples/parlia_api/parlia_getSnapshot/request.json delete mode 100644 examples/parlia_api/parlia_getSnapshot/response.json delete mode 100644 examples/test_genesis_snapshot.rs delete mode 100644 examples/test_mainnet_genesis.rs delete mode 100644 examples/test_mainnet_genesis_snapshot.rs delete mode 100644 examples/test_parlia_api.rs delete mode 100644 examples/test_persistence_enabled.rs delete mode 100755 run_bsc_server.sh delete mode 100755 scripts/start_mainnet_debug.sh delete mode 100755 scripts/start_testnet.sh diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md deleted file mode 100644 index 66efe81..0000000 --- a/DEPLOYMENT.md +++ /dev/null @@ -1,292 +0,0 @@ -# BSC Reth Deployment Guide - -## ๐Ÿš€ Quick Start - -BSC Reth is now ready for fullnode deployment! This guide covers setting up and running a BSC node on mainnet or testnet. - -## โœ… Prerequisites - -- **Rust 1.80+** with cargo -- **Git** for cloning repositories -- **SSD storage** (minimum 2TB for mainnet, 500GB for testnet) -- **8GB+ RAM** (16GB+ recommended for mainnet) -- **Stable internet connection** with >100Mbps - -## ๐Ÿ—๏ธ Building from Source - -### 1. Clone and Build - -```bash -git clone https://github.com/your-username/loocapro_reth_bsc.git -cd loocapro_reth_bsc -cargo build --release --bin reth-bsc -``` - -### 2. Verify Installation - -```bash -./target/release/reth-bsc --help -``` - -## ๐ŸŒ Network Configuration - -### BSC Mainnet - -```bash -./target/release/reth-bsc node \ - --chain bsc \ - --http \ - --http.api eth,net,web3,debug,trace \ - --ws \ - --metrics 127.0.0.1:9001 -``` - -### BSC Testnet (Chapel) - -```bash -./target/release/reth-bsc node \ - --chain bsc-testnet \ - --http \ - --http.api eth,net,web3,debug,trace \ - --ws \ - --metrics 127.0.0.1:9001 -``` - -## โš™๏ธ Configuration Options - -### Basic Options - -| Flag | Description | Default | -|------|-------------|---------| -| `--chain` | Network to connect to (`bsc`, `bsc-testnet`) | `bsc` | -| `--datadir` | Data directory for blockchain data | OS default | -| `--http` | Enable HTTP RPC server | disabled | -| `--ws` | Enable WebSocket RPC server | disabled | - -### Network Options - -| Flag | Description | Default | -|------|-------------|---------| -| `--port` | P2P listening port | `30303` | -| `--max-outbound-peers` | Maximum outbound connections | `100` | -| `--max-inbound-peers` | Maximum inbound connections | `30` | -| `--bootnodes` | Custom bootstrap nodes | Built-in | - -### Performance Options - -| Flag | Description | Default | -|------|-------------|---------| -| `--full` | Run as full node (pruned) | enabled | -| `--metrics` | Enable Prometheus metrics | disabled | -| `--db.max-size` | Maximum database size | automatic | - -### BSC-Specific Options - -| Flag | Description | Default | -|------|-------------|---------| -| `--debug` | Enable debug logging | disabled | -| `--validator` | Enable validator mode | disabled | - -## ๐Ÿ”ง Example Configurations - -### Home User (Light Sync) - -```bash -./target/release/reth-bsc node \ - --chain bsc \ - --http \ - --http.addr 127.0.0.1 \ - --http.port 8545 \ - --max-outbound-peers 25 \ - --max-inbound-peers 10 -``` - -### Production Server (Full Node) - -```bash -./target/release/reth-bsc node \ - --chain bsc \ - --datadir /data/bsc-reth \ - --http \ - --http.addr 0.0.0.0 \ - --http.api eth,net,web3,trace \ - --ws \ - --ws.addr 0.0.0.0 \ - --metrics 0.0.0.0:9001 \ - --max-outbound-peers 100 \ - --max-inbound-peers 50 \ - --db.max-size 4TB -``` - -### Validator Node - -```bash -./target/release/reth-bsc node \ - --chain bsc \ - --validator \ - --http \ - --authrpc.jwtsecret /path/to/jwt.hex \ - --bootnodes "enode://your-trusted-nodes" \ - --trusted-only -``` - -### Testnet Development - -```bash -./target/release/reth-bsc node \ - --chain bsc-testnet \ - --debug \ - --http \ - --http.api eth,net,web3,debug,trace,txpool \ - --ws \ - --metrics 127.0.0.1:9001 \ - -vvv -``` - -## ๐Ÿ“Š Monitoring & Maintenance - -### Metrics (Prometheus) - -Add `--metrics` flag to enable metrics on `http://localhost:9001/metrics` - -Key metrics to monitor: -- `reth_sync_block_number` - Current sync progress -- `reth_network_peers` - Connected peer count -- `reth_consensus_state` - Consensus state -- `reth_txpool_pending` - Transaction pool size - -### Logging - -Set log levels with verbosity flags: -- `-v` - Errors only -- `-vv` - Warnings -- `-vvv` - Info (recommended) -- `-vvvv` - Debug -- `-vvvvv` - Trace (very verbose) - -### Health Checks - -Check node health: -```bash -curl -X POST -H "Content-Type: application/json" \ - --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \ - http://localhost:8545 -``` - -## ๐Ÿ”ฅ Performance Tuning - -### Storage Optimization - -- **Use NVMe SSD** for best performance -- **Separate data/logs** on different drives -- **Enable compression** with `--db.growth-step 4GB` - -### Memory Settings - -```bash -# For 32GB RAM system -export MALLOC_CONF="dirty_decay_ms:1000,muzzy_decay_ms:1000" -ulimit -n 65536 # Increase file descriptor limit -``` - -### Network Optimization - -```bash -# Linux network tuning -echo 'net.core.rmem_max = 16777216' >> /etc/sysctl.conf -echo 'net.core.wmem_max = 16777216' >> /etc/sysctl.conf -sysctl -p -``` - -## ๐Ÿ› ๏ธ Troubleshooting - -### Common Issues - -**Sync is slow:** -- Check peer count with metrics -- Verify network bandwidth -- Increase `--max-outbound-peers` - -**High memory usage:** -- Reduce `--engine.memory-block-buffer-target` -- Enable pruning with `--full` -- Monitor with `--metrics` - -**Connection issues:** -- Check firewall settings for port 30303 -- Verify bootnodes are reachable -- Try `--disable-nat` if behind NAT - -**Database corruption:** -- Stop node safely (SIGTERM, not SIGKILL) -- Check disk space and health -- Consider `reth db stats` for analysis - -### Debug Mode - -Enable comprehensive logging: -```bash -./target/release/reth-bsc node --chain bsc --debug -vvvv -``` - -## ๐Ÿ”’ Security Considerations - -### Firewall Rules - -```bash -# Allow P2P connections -ufw allow 30303/tcp -ufw allow 30303/udp - -# RPC access (restrict as needed) -ufw allow from YOUR_IP to any port 8545 -ufw allow from YOUR_IP to any port 8546 -``` - -### JWT Authentication - -For authenticated RPC: -```bash -# Generate JWT secret -openssl rand -hex 32 > jwt.hex - -# Use with node -./target/release/reth-bsc node \ - --authrpc.jwtsecret jwt.hex \ - --rpc.jwtsecret $(cat jwt.hex) -``` - -## ๐Ÿ“ˆ Sync Times & Storage - -### Expected Sync Times (estimates) - -| Network | Storage | Time | -|---------|---------|------| -| BSC Mainnet | 2TB+ | 2-7 days | -| BSC Testnet | 500GB+ | 12-24 hours | - -### Storage Growth - -| Network | Daily Growth | -|---------|--------------| -| BSC Mainnet | ~20-50GB | -| BSC Testnet | ~5-10GB | - -## ๐Ÿš€ Next Steps - -1. **Monitor sync progress** with metrics -2. **Set up automatic restarts** with systemd -3. **Configure log rotation** -4. **Plan storage upgrades** based on growth -5. **Join BSC community** for updates - -## ๐Ÿ“š Additional Resources - -- [BSC Documentation](https://docs.binance.org/) -- [Reth Book](https://reth.rs/) -- [BSC Network Status](https://bscscan.com/) -- [Community Discord](#) - ---- - -**โš ๏ธ Important:** Always test on testnet before mainnet deployment! \ No newline at end of file diff --git a/README.md b/README.md index 59126a4..bbcbf27 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,3 @@ -# feat_parlia_20250805 Status -1. can run with testnet to 300000 blocks in debug.tips -2. can have snapshot API: -``` -curl --location 'http://127.0.0.1:8545' \ ---header 'Content-Type: application/json' \ ---data '{ - "jsonrpc": "2.0", - "method": "parlia_getSnapshot", - "params": ["0x493e0"], - "id": 3 - }' -``` - # Reth @ BSC A BSC-compatible Reth client implementation. This project is **not** a fork of Reth, but rather an extension that leverages Reth's powerful `NodeBuilder` API to provide BSC compatibility. diff --git a/docs/DATABASE_INTEGRATION.md b/docs/DATABASE_INTEGRATION.md deleted file mode 100644 index c86a956..0000000 --- a/docs/DATABASE_INTEGRATION.md +++ /dev/null @@ -1,204 +0,0 @@ -# BSC Database Integration & RPC API - -## ๐ŸŽฏ Implementation Summary - -This document summarizes the database integration and RPC API implementation for BSC Parlia consensus in `loocapro_reth_bsc`. - -## ๐Ÿ“ฆ Database Integration - -### **1. DbSnapshotProvider (Production Ready)** - -**Location**: `src/consensus/parlia/provider.rs` - -**Features**: -- โœ… **MDBX-backed persistence** using `ParliaSnapshots` table -- โœ… **LRU front-cache** with configurable size -- โœ… **CBOR compression** for efficient storage -- โœ… **Checkpoint-based persistence** (every 1024 blocks) -- โœ… **Range queries** with efficient database cursors - -**Usage**: -```rust -use reth_bsc::consensus::parlia::provider::DbSnapshotProvider; - -let provider = DbSnapshotProvider::new(database, 512); // 512 entry LRU cache -``` - -### **2. BscConsensusFactory (Integration Pattern)** - -**Location**: `src/node/consensus_factory.rs` - -**Methods**: -- `create_in_memory()` - Development/testing with 10k cache -- `create_with_database(db, chain_spec, cache_size)` - Production with MDBX -- `create_with_provider(chain_spec, provider)` - Custom configurations - -**Production Integration Example**: -```rust -// At launch level (when database is available) -let consensus = BscConsensusFactory::create_with_database( - ctx.database().clone(), // Access database from LaunchContext - ctx.chain_spec(), // Get chain spec from context - 1024, // LRU cache capacity -); -``` - -### **3. Why Component-Level Database Access is Limited** - -**The Issue**: Reth's `BuilderContext` provides `BlockchainProvider` which encapsulates database access privately. - -**The Solution**: Use `BscConsensusFactory` at the launch level where `LaunchContext` provides direct database access via `ctx.database()`. - -**Current Status**: Using `InMemorySnapshotProvider` with 10k cache at component level; ready to switch to persistent storage at launch level. - -## ๐ŸŒ RPC API Implementation - -### **1. Parlia Snapshot API (bsc-erigon Compatible)** - -**Location**: `src/rpc/parlia.rs` - -**Endpoints**: -- `parlia_getSnapshot(block_id)` - Get snapshot at specific block (matches bsc-erigon) -- `parlia_getSnapshotByHash(block_hash)` - Get snapshot by block hash -- `parlia_getSnapshotByNumber(block_number)` - Get snapshot by block number - -**Features**: -- โœ… **Full block ID resolution** (latest, earliest, pending, finalized, safe, number, hash) -- โœ… **Hash-to-number resolution** via HeaderProvider -- โœ… **Proper error handling** with JSON-RPC error codes -- โœ… **Type-safe responses** with SnapshotResult serialization -- โœ… **Provider abstraction** supporting any SnapshotProvider + BlockReader - -### **2. API Response Format** - -```typescript -interface SnapshotResult { - number: string; // Block number (hex) - hash: string; // Block hash - validators: string[]; // List of validator addresses - epoch: number; // Current epoch number - turn_length: number; // Turn length for round-robin -} -``` - -### **3. Usage Example** - -```rust -use reth_bsc::rpc::parlia::{ParliaApiImpl, ParliaApiServer}; - -let api = ParliaApiImpl::new(snapshot_provider, blockchain_provider); - -// JSON-RPC calls: -// {"method": "parlia_getSnapshot", "params": [null]} // Latest -// {"method": "parlia_getSnapshot", "params": [{"number": "0x64"}]} // Block 100 -// {"method": "parlia_getSnapshotByHash", "params": ["0x1234..."]} -``` - -## ๐Ÿ”ง Integration Guide - -### **1. Development Setup (Current)** - -```rust -// In consensus builder (src/node/consensus.rs) -let consensus = ParliaConsensus::new( - ctx.chain_spec(), - Arc::new(InMemorySnapshotProvider::new(10000)), // 10k cache - EPOCH, - 3, // 3 second block period -); -``` - -### **2. Production Setup (Ready to Enable)** - -```rust -// At launch level (when implementing node launcher) -let consensus = BscConsensusFactory::create_with_database( - launch_ctx.database().clone(), - launch_ctx.chain_spec(), - 1024, // Persistent + 1024 LRU cache -); -``` - -### **3. RPC Integration** - -```rust -// Add to RPC server -let parlia_api = ParliaApiImpl::new( - consensus.snapshot_provider(), - blockchain_provider, -); -rpc_builder.add_parlia_api(parlia_api); -``` - -## โœ… Verification & Testing - -### **1. Database Persistence Test** - -**Tool**: `cargo run --bin snapshot-checker` - -**Results**: -- โœ… 5 snapshots stored and retrieved -- โœ… Range queries working (block 1500 โ†’ snapshot 1024) -- โœ… 5 raw entries in MDBX ParliaSnapshots table -- โœ… LRU cache functioning - -### **2. Consensus Factory Test** - -**Tool**: `cargo run --example consensus_factory_usage` - -**Results**: -- โœ… In-memory consensus creation -- โœ… Database-backed consensus creation -- โœ… Custom provider consensus creation - -## ๐ŸŽฏ Benefits Achieved - -### **1. Production-Grade Persistence** -- **No snapshot loss** on node restart -- **Efficient I/O** with checkpoint-based writes -- **Fast retrieval** with LRU caching -- **Compressed storage** using CBOR - -### **2. BSC-Erigon API Compatibility** -- **Exact endpoint matching** with reference implementation -- **Full block resolution** (latest, hash, number) -- **Proper error handling** following JSON-RPC standards -- **Type-safe responses** with comprehensive field mapping - -### **3. Flexible Architecture** -- **Development-friendly** with in-memory fallback -- **Production-ready** with database persistence -- **Custom extensible** with provider abstraction -- **Performance optimized** with configurable caching - -## ๐Ÿš€ Next Steps - -### **โœ… IMPLEMENTED (Production Ready)** - -1. **โœ… DbSnapshotProvider**: Fully implemented with MDBX, LRU cache, checkpoints -2. **โœ… BscConsensusFactory**: Complete integration patterns for launch-level usage -3. **โœ… RPC API**: Full BSC-erigon compatible snapshot API with all endpoints -4. **โœ… Verification Tools**: `snapshot-checker` and `launch_with_persistence` examples - -### **๐Ÿ“Š Current Integration Status** - -**Component Level (Current)**: -- โœ… Using `InMemorySnapshotProvider` with 25k cache -- โœ… Enhanced capacity for production workloads -- โœ… All consensus validation working correctly - -**Launch Level (Ready to Enable)**: -- โœ… `BscConsensusFactory::create_with_database()` implementation ready -- โœ… Full MDBX persistence available when database access provided -- โณ **PENDING**: Integration at `LaunchContext` where database is accessible - -### **๐Ÿ”ง Next Steps (Optional Enhancements)** - -1. **Custom Node Launcher**: Implement launch-level integration for full persistence -2. **RPC Registration**: Add Parlia API to RPC server configuration -3. **Performance Monitoring**: Add metrics for snapshot operations -4. **Testing**: Extended mainnet/testnet validation - ---- - -**Status**: โœ… **PRODUCTION READY** - Full BSC consensus with optional MDBX persistence available \ No newline at end of file diff --git a/examples/consensus_factory_usage.rs b/examples/consensus_factory_usage.rs deleted file mode 100644 index 459f092..0000000 --- a/examples/consensus_factory_usage.rs +++ /dev/null @@ -1,63 +0,0 @@ -use std::sync::Arc; -use reth_db::{init_db, mdbx::DatabaseArguments, DatabaseEnv}; -use reth_bsc::{ - node::consensus_factory::BscConsensusFactory, - chainspec::BscChainSpec, - consensus::parlia::InMemorySnapshotProvider, -}; - -/// Example showing how to use BscConsensusFactory for different scenarios -fn main() -> eyre::Result<()> { - println!("๐Ÿ”ง BSC Consensus Factory Usage Examples"); - - // 1. Development/Testing: In-memory snapshots - println!("\n1๏ธโƒฃ Creating consensus with in-memory snapshots (development)"); - let dev_consensus = BscConsensusFactory::create_in_memory(); - println!(" โœ… Created in-memory consensus for development"); - - // 2. Production: Database-backed snapshots - println!("\n2๏ธโƒฃ Creating consensus with persistent MDBX snapshots (production)"); - - // Initialize database - let db_path = std::env::temp_dir().join("bsc_consensus_example"); - if db_path.exists() { - std::fs::remove_dir_all(&db_path)?; - } - std::fs::create_dir_all(&db_path)?; - - let database = Arc::new(init_db(&db_path, DatabaseArguments::new(Default::default()))?); - let chain_spec = Arc::new(BscChainSpec { - inner: reth_bsc::chainspec::bsc::bsc_mainnet() - }); - - let prod_consensus = BscConsensusFactory::create_with_database( - database.clone(), - chain_spec.clone(), - 512, // LRU cache size - ); - println!(" โœ… Created persistent consensus for production"); - - // 3. Custom: With specific provider - println!("\n3๏ธโƒฃ Creating consensus with custom snapshot provider"); - let custom_provider = Arc::new(InMemorySnapshotProvider::new(5000)); - let custom_consensus = BscConsensusFactory::create_with_provider( - chain_spec.clone(), - custom_provider, - ); - println!(" โœ… Created custom consensus with specific provider"); - - // Integration example - println!("\n๐Ÿ”— Integration Example:"); - println!(" // In your node launch code:"); - println!(" let consensus = BscConsensusFactory::create_with_database("); - println!(" ctx.database().clone(), // Access database from LaunchContext"); - println!(" ctx.chain_spec(), // Get chain spec from context"); - println!(" 1024, // LRU cache size"); - println!(" );"); - - // Cleanup - std::fs::remove_dir_all(&db_path)?; - println!("\nโœจ Example completed successfully!"); - - Ok(()) -} \ No newline at end of file diff --git a/examples/curl_examples.md b/examples/curl_examples.md deleted file mode 100644 index 7b97cfb..0000000 --- a/examples/curl_examples.md +++ /dev/null @@ -1,69 +0,0 @@ -# BSC Parlia Snapshot API - Curl Examples - -Your BSC node now supports the official `parlia_getSnapshot` API. Here are 3 curl examples to get snapshots at different block heights for testnet: - -## **1. Get snapshot at ~1 week (200,000 blocks = 0x30d40):** -```bash -curl -X POST http://localhost:8545 \ - -H "Content-Type: application/json" \ - -d '{ - "jsonrpc": "2.0", - "method": "parlia_getSnapshot", - "params": ["0x30d40"], - "id": 1 - }' -``` - -## **2. Get snapshot at ~2 weeks (400,000 blocks = 0x61a80):** -```bash -curl -X POST http://localhost:8545 \ - -H "Content-Type: application/json" \ - -d '{ - "jsonrpc": "2.0", - "method": "parlia_getSnapshot", - "params": ["0x61a80"], - "id": 2 - }' -``` - -## **3. Get snapshot at ~3 weeks (600,000 blocks = 0x927c0):** -```bash -curl -X POST http://localhost:8545 \ - -H "Content-Type: application/json" \ - -d '{ - "jsonrpc": "2.0", - "method": "parlia_getSnapshot", - "params": ["0x927c0"], - "id": 3 - }' -``` - -## **Alternative: Using Decimal Block Numbers** -Your API also accepts decimal format: -```bash -curl -X POST http://localhost:8545 \ - -H "Content-Type: application/json" \ - -d '{ - "jsonrpc": "2.0", - "method": "parlia_getSnapshot", - "params": ["200000"], - "id": 4 - }' -``` - -## **Expected Response Format** -The response will match the BSC official format with: -- `number`: Block number -- `hash`: Block hash -- `epoch_length`: 200 (BSC epoch length) -- `block_interval`: 3000 (BSC block interval in milliseconds) -- `turn_length`: 1 (default turn length) -- `validators`: Map of validator addresses to validator info -- `recents`: Map of recent block numbers to proposer addresses -- `recent_fork_hashes`: Map of recent block numbers to fork hashes -- `attestation:omitempty`: null (for compatibility) - -## **Notes:** -- Make sure your BSC node is running with RPC enabled (`--http --http.api="eth, net, txpool, web3, rpc"`) -- The node must be synced to the requested block height -- If a snapshot doesn't exist at the requested block, the API will return `null` \ No newline at end of file diff --git a/examples/launch_with_persistence.rs b/examples/launch_with_persistence.rs deleted file mode 100644 index b51212e..0000000 --- a/examples/launch_with_persistence.rs +++ /dev/null @@ -1,103 +0,0 @@ -/// Example showing how to enable persistent snapshots at the launch level -/// -/// This demonstrates the proper integration point for DbSnapshotProvider -/// when database access is available through LaunchContext -use std::sync::Arc; -use reth_db::{init_db, mdbx::DatabaseArguments}; -use reth_bsc::{ - node::consensus_factory::BscConsensusFactory, - chainspec::BscChainSpec, -}; - -/// Mock launch context that simulates having database access -struct MockLaunchContext { - database: Arc, - chain_spec: Arc, -} - -impl MockLaunchContext { - fn new() -> eyre::Result { - let db_path = std::env::temp_dir().join("bsc_launch_example"); - if db_path.exists() { - std::fs::remove_dir_all(&db_path)?; - } - std::fs::create_dir_all(&db_path)?; - - let database = Arc::new(init_db(&db_path, DatabaseArguments::new(Default::default()))?); - let chain_spec = Arc::new(BscChainSpec { - inner: reth_bsc::chainspec::bsc::bsc_mainnet() - }); - - Ok(Self { database, chain_spec }) - } - - /// Simulate accessing database from launch context - fn database(&self) -> &Arc { - &self.database - } - - /// Simulate accessing chain spec from launch context - fn chain_spec(&self) -> &Arc { - &self.chain_spec - } - - fn cleanup(&self) -> eyre::Result<()> { - let db_path = std::env::temp_dir().join("bsc_launch_example"); - if db_path.exists() { - std::fs::remove_dir_all(&db_path)?; - } - Ok(()) - } -} - -fn main() -> eyre::Result<()> { - println!("๐Ÿš€ BSC Launch-Level Persistent Snapshot Integration"); - println!(); - - // 1. Simulate launch context creation (this would be done by Reth) - println!("1๏ธโƒฃ Initializing launch context with database..."); - let launch_ctx = MockLaunchContext::new()?; - println!(" โœ… Database initialized at temporary location"); - - // 2. Create persistent consensus using database access - println!("\n2๏ธโƒฃ Creating consensus with persistent snapshots..."); - let consensus = BscConsensusFactory::create_with_database( - launch_ctx.database().clone(), - launch_ctx.chain_spec().clone(), - 2048, // Production LRU cache size - ); - println!(" โœ… Persistent consensus created with 2048-entry LRU cache"); - - // 3. Demonstrate that this is the production pattern - println!("\n๐ŸŽฏ PRODUCTION INTEGRATION PATTERN:"); - println!(" // In your node launcher (when LaunchContext is available):"); - println!(" let consensus = BscConsensusFactory::create_with_database("); - println!(" launch_ctx.database().clone(),"); - println!(" launch_ctx.chain_spec().clone(),"); - println!(" 2048, // LRU cache size"); - println!(" );"); - println!(); - println!(" // This consensus will have:"); - println!(" โœ… PERSISTENT snapshot storage in MDBX"); - println!(" โœ… Fast LRU cache for hot snapshots"); - println!(" โœ… Checkpoint-based persistence (every 1024 blocks)"); - println!(" โœ… No data loss on node restart"); - - // 4. Show current vs future status - println!("\n๐Ÿ“Š IMPLEMENTATION STATUS:"); - println!(" โœ… DbSnapshotProvider: COMPLETE & TESTED"); - println!(" โœ… MDBX Integration: COMPLETE & VERIFIED"); - println!(" โœ… Consensus Factory: COMPLETE & READY"); - println!(" โœ… RPC API: COMPLETE & BSC-COMPATIBLE"); - println!(" โณ Launch Integration: PENDING (requires LaunchContext access)"); - - println!("\n๐Ÿ”ง CURRENT WORKAROUND:"); - println!(" โ€ข Component level: InMemorySnapshotProvider (25k cache)"); - println!(" โ€ข Launch level: DbSnapshotProvider (when implemented)"); - - // Cleanup - launch_ctx.cleanup()?; - println!("\nโœจ Example completed successfully!"); - - Ok(()) -} \ No newline at end of file diff --git a/examples/parlia_api/parlia_getSnapshot/request.json b/examples/parlia_api/parlia_getSnapshot/request.json deleted file mode 100644 index 8dc32aa..0000000 --- a/examples/parlia_api/parlia_getSnapshot/request.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "jsonrpc": "2.0", - "method": "parlia_getSnapshot", - "params": ["0x7530"], - "id": 3 - } \ No newline at end of file diff --git a/examples/parlia_api/parlia_getSnapshot/response.json b/examples/parlia_api/parlia_getSnapshot/response.json deleted file mode 100644 index 80ea051..0000000 --- a/examples/parlia_api/parlia_getSnapshot/response.json +++ /dev/null @@ -1,346 +0,0 @@ -{ - "jsonrpc": "2.0", - "id": 3, - "result": { - "number": 30000, - "hash": "0x2c64b38b7a25ddcb7636b81dbefbabd191c128e29acca82b4a7ff7cbe5f2f934", - "epoch_length": 200, - "block_interval": 3000, - "turn_length": 1, - "validators": { - "0x1284214b9b9c85549ab3d2b972df0deef66ac2c9": { - "index:omitempty": 0, - "vote_address": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - "0x35552c16704d214347f29fa77f77da6d75d7c752": { - "index:omitempty": 0, - "vote_address": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - "0x980a75ecd1309ea12fa2ed87a8744fbfc9b863d5": { - "index:omitempty": 0, - "vote_address": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - "0xa2959d3f95eae5dc7d70144ce1b73b403b7eb6e0": { - "index:omitempty": 0, - "vote_address": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - "0xb71b214cb885500844365e95cd9942c7276e7fd8": { - "index:omitempty": 0, - "vote_address": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - "0xf474cf03cceff28abc65c9cbae594f725c80e12d": { - "index:omitempty": 0, - "vote_address": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - } - }, - "recents": { - "29997": "0xa2959d3f95eae5dc7d70144ce1b73b403b7eb6e0", - "29998": "0xb71b214cb885500844365e95cd9942c7276e7fd8", - "29999": "0xf474cf03cceff28abc65c9cbae594f725c80e12d", - "30000": "0x1284214b9b9c85549ab3d2b972df0deef66ac2c9" - }, - "recent_fork_hashes": { - "29995": "00000000", - "29996": "00000000", - "29997": "00000000", - "29998": "00000000", - "29999": "00000000", - "30000": "00000000" - }, - "attestation:omitempty": null - } -} \ No newline at end of file diff --git a/examples/test_genesis_snapshot.rs b/examples/test_genesis_snapshot.rs deleted file mode 100644 index 78b59dc..0000000 --- a/examples/test_genesis_snapshot.rs +++ /dev/null @@ -1,64 +0,0 @@ -use reth_bsc::chainspec::bsc_testnet; -use reth_bsc::consensus::parlia::{ParliaConsensus, InMemorySnapshotProvider, EPOCH, SnapshotProvider}; -use std::sync::Arc; -use alloy_consensus::BlockHeader; -use alloy_primitives::hex; -use reth_chainspec::EthChainSpec; - -fn main() -> eyre::Result<()> { - // Initialize logging - println!("๐Ÿš€ Testing BSC Genesis Snapshot Creation"); - - // Create BSC testnet chain spec - let chain_spec = bsc_testnet(); - let bsc_chain_spec = reth_bsc::chainspec::BscChainSpec { inner: chain_spec }; - let bsc_chain_spec_arc = Arc::new(bsc_chain_spec); - - // Create consensus with in-memory snapshot provider - let snapshot_provider = Arc::new(InMemorySnapshotProvider::new(100)); - let _consensus = ParliaConsensus::new( - bsc_chain_spec_arc.clone(), - snapshot_provider.clone(), - EPOCH, - 3 - ); - - // Check if genesis snapshot was created - if let Some(genesis_snapshot) = snapshot_provider.snapshot(0) { - println!("๐ŸŽฏ Genesis snapshot created successfully!"); - println!(" Block number: {}", genesis_snapshot.block_number); - println!(" Block hash: {:#x}", genesis_snapshot.block_hash); - println!(" Validators count: {}", genesis_snapshot.validators.len()); - println!(" Epoch length: {}", genesis_snapshot.epoch_num); - - println!("\n๐Ÿ“‹ Genesis validators:"); - for (i, validator) in genesis_snapshot.validators.iter().enumerate() { - println!(" {}. {:#x}", i + 1, validator); - } - - println!("\nโœ… Genesis snapshot initialization SUCCESS!"); - } else { - println!("โŒ Genesis snapshot was NOT created!"); - return Err(eyre::eyre!("Genesis snapshot missing")); - } - - // Test extraData length - println!("\n๐Ÿ” Testing BSC testnet extraData..."); - let genesis_header = bsc_chain_spec_arc.genesis_header(); - let extra_data = genesis_header.extra_data(); - println!(" ExtraData length: {} bytes", extra_data.len()); - println!(" ExtraData (first 100 bytes): 0x{}", hex::encode(&extra_data[..100.min(extra_data.len())])); - - // Expected BSC testnet validators count based on extraData analysis - const EXTRA_VANITY_LEN: usize = 32; - const EXTRA_SEAL_LEN: usize = 65; - const VALIDATOR_BYTES_LENGTH: usize = 20; - - if extra_data.len() > EXTRA_VANITY_LEN + EXTRA_SEAL_LEN { - let validator_bytes_len = extra_data.len() - EXTRA_VANITY_LEN - EXTRA_SEAL_LEN; - let expected_validators = validator_bytes_len / VALIDATOR_BYTES_LENGTH; - println!(" Expected validators from extraData: {}", expected_validators); - } - - Ok(()) -} \ No newline at end of file diff --git a/examples/test_mainnet_genesis.rs b/examples/test_mainnet_genesis.rs deleted file mode 100644 index ee4337f..0000000 --- a/examples/test_mainnet_genesis.rs +++ /dev/null @@ -1,44 +0,0 @@ -use alloy_primitives::hex; -use eyre::Result; - -fn main() -> Result<()> { - // BSC mainnet genesis extraData - let mainnet_extra_data = "0x00000000000000000000000000000000000000000000000000000000000000002a7cdd959bfe8d9487b2a43b33565295a698f7e26488aa4d1955ee33403f8ccb1d4de5fb97c7ade29ef9f4360c606c7ab4db26b016007d3ad0ab86a0ee01c3b1283aa067c58eab4709f85e99d46de5fe685b1ded8013785d6623cc18d214320b6bb6475978f3adfc719c99674c072166708589033e2d9afec2be4ec20253b8642161bc3f444f53679c1f3d472f7be8361c80a4c1e7e9aaf001d0877f1cfde218ce2fd7544e0b2cc94692d4a704debef7bcb61328b8f7166496996a7da21cf1f1b04d9b3e26a3d0772d4c407bbe49438ed859fe965b140dcf1aab71a96bbad7cf34b5fa511d8e963dbba288b1960e75d64430b3230294d12c6ab2aac5c2cd68e80b16b581ea0a6e3c511bbd10f4519ece37dc24887e11b55d7ae2f5b9e386cd1b50a4550696d957cb4900f03a82012708dafc9e1b880fd083b32182b869be8e0922b81f8e175ffde54d797fe11eb03f9e3bf75f1d68bf0b8b6fb4e317a0f9d6f03eaf8ce6675bc60d8c4d90829ce8f72d0163c1d5cf348a862d55063035e7a025f4da968de7e4d7e4004197917f4070f1d6caa02bbebaebb5d7e581e4b66559e635f805ff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; - - // Parse the hex data - let data = hex::decode(&mainnet_extra_data[2..]).expect("Invalid hex"); - - println!("๐Ÿ” BSC Mainnet Genesis ExtraData Analysis:"); - println!(" Total length: {} bytes", data.len()); - - // First 32 bytes are vanity - let vanity = &data[0..32]; - println!(" Vanity (32 bytes): {}", hex::encode(vanity)); - - // Last 65 bytes are seal - let seal_start = data.len() - 65; - let seal = &data[seal_start..]; - println!(" Seal (65 bytes): {}", hex::encode(seal)); - - // Validator data is between vanity and seal - let validator_data = &data[32..seal_start]; - println!(" Validator data length: {} bytes", validator_data.len()); - - // Each validator address is 20 bytes - let num_validators = validator_data.len() / 20; - println!(" Number of validators: {}", num_validators); - - if validator_data.len() % 20 == 0 { - println!("\nโœ… Validator addresses:"); - for i in 0..num_validators { - let start = i * 20; - let end = start + 20; - let addr = &validator_data[start..end]; - println!(" {}. 0x{}", i + 1, hex::encode(addr)); - } - } else { - println!("โŒ Validator data length is not a multiple of 20 bytes"); - } - - Ok(()) -} \ No newline at end of file diff --git a/examples/test_mainnet_genesis_snapshot.rs b/examples/test_mainnet_genesis_snapshot.rs deleted file mode 100644 index b243da3..0000000 --- a/examples/test_mainnet_genesis_snapshot.rs +++ /dev/null @@ -1,63 +0,0 @@ -use reth_bsc::chainspec::bsc; -use reth_bsc::consensus::parlia::{ParliaConsensus, InMemorySnapshotProvider, EPOCH, SnapshotProvider}; -use std::sync::Arc; -use alloy_consensus::BlockHeader; -use alloy_primitives::hex; -use reth_chainspec::EthChainSpec; - -fn main() -> eyre::Result<()> { - println!("๐Ÿš€ Testing BSC Mainnet Genesis Snapshot Creation"); - - // Create BSC mainnet chain spec - let chain_spec = bsc::bsc_mainnet(); - let bsc_chain_spec = reth_bsc::chainspec::BscChainSpec { inner: chain_spec }; - let bsc_chain_spec_arc = Arc::new(bsc_chain_spec); - - // Create consensus with in-memory snapshot provider - let snapshot_provider = Arc::new(InMemorySnapshotProvider::new(100)); - let _consensus = ParliaConsensus::new( - bsc_chain_spec_arc.clone(), - snapshot_provider.clone(), - EPOCH, - 3 - ); - - // Check if genesis snapshot was created - if let Some(genesis_snapshot) = snapshot_provider.snapshot(0) { - println!("๐ŸŽฏ Genesis snapshot created successfully!"); - println!(" Number of validators: {}", genesis_snapshot.validators.len()); - println!(" Block number: {}", genesis_snapshot.block_number); - println!(" Block hash: {:#x}", genesis_snapshot.block_hash); - println!(" Epoch: {}", genesis_snapshot.epoch_num); - - println!("\nโœ… Validators in genesis snapshot:"); - for (i, validator) in genesis_snapshot.validators.iter().enumerate() { - println!(" {}. {:#x}", i + 1, validator); - } - } else { - println!("โŒ Genesis snapshot was not created"); - } - - // Test extraData length - println!("\n๐Ÿ” Testing BSC mainnet extraData..."); - let genesis_header = bsc_chain_spec_arc.genesis_header(); - let extra_data = genesis_header.extra_data(); - println!(" ExtraData length: {} bytes", extra_data.len()); - - if extra_data.len() > 97 { - println!(" โœ… ExtraData has sufficient length for validators"); - - // Analyze the structure - let vanity_len = 32; - let seal_len = 65; - let validator_data_len = extra_data.len() - vanity_len - seal_len; - let validator_count = validator_data_len / 20; - - println!(" Validator data section: {} bytes", validator_data_len); - println!(" Expected validator count: {}", validator_count); - } else { - println!(" โŒ ExtraData length insufficient"); - } - - Ok(()) -} \ No newline at end of file diff --git a/examples/test_parlia_api.rs b/examples/test_parlia_api.rs deleted file mode 100644 index 42d99be..0000000 --- a/examples/test_parlia_api.rs +++ /dev/null @@ -1,47 +0,0 @@ -use reth_bsc::rpc::parlia::SnapshotResult; -use reth_bsc::consensus::parlia::{InMemorySnapshotProvider, Snapshot, SnapshotProvider}; -use std::sync::Arc; -use alloy_primitives::{Address, B256}; - -#[tokio::main] -async fn main() { - // Create a test snapshot provider - let snapshot_provider = Arc::new(InMemorySnapshotProvider::new(100)); - - // Create a mock snapshot with some validators and recent proposers - let mut test_snapshot = Snapshot::default(); - test_snapshot.block_number = 1192242; - test_snapshot.block_hash = B256::from_slice(&[0x42; 32]); // Example hash - test_snapshot.epoch_num = 200; - test_snapshot.turn_length = Some(1); - - // Add some test validators - test_snapshot.validators = vec![ - "0x03073aedceaeeae639c465a009ee1012272d20b4".parse::
().unwrap(), - "0x04dd54a9e32f1edd035e0081e882c836346cbb46".parse::
().unwrap(), - "0x07490c0dca97d7f3bb6ea8cc81cd36abe450c706".parse::
().unwrap(), - ]; - - // Add some recent proposers - use std::collections::BTreeMap; - let mut recent_proposers = BTreeMap::new(); - recent_proposers.insert(1192240, "0xa2959d3f95eae5dc7d70144ce1b73b403b7eb6e0".parse::
().unwrap()); - recent_proposers.insert(1192241, "0xa2e5f9e8db4b38ac8529f79c4f3b582952b3d3dc".parse::
().unwrap()); - recent_proposers.insert(1192242, "0x0af7d8b7d4eb50fa0eddd643d11120c94ad61248".parse::
().unwrap()); - test_snapshot.recent_proposers = recent_proposers; - - // Insert the snapshot - snapshot_provider.insert(test_snapshot); - - // Convert to the BSC API format - let snapshot_result: SnapshotResult = snapshot_provider.snapshot(1192242).unwrap().into(); - - // Print the result in JSON format - let json = serde_json::to_string_pretty(&snapshot_result).unwrap(); - println!("BSC Parlia Snapshot API Response:"); - println!("{}", json); - - println!("\nโœ… Test completed successfully!"); - println!("๐Ÿ“ This output should match the BSC official API format"); - println!("๐Ÿ”— Compare with: loocapro_reth_bsc/examples/parlia_api/parlia_getSnapshot/response.json"); -} \ No newline at end of file diff --git a/examples/test_persistence_enabled.rs b/examples/test_persistence_enabled.rs deleted file mode 100644 index bec6ec2..0000000 --- a/examples/test_persistence_enabled.rs +++ /dev/null @@ -1,19 +0,0 @@ -/// Test to verify that persistent snapshots are enabled in the consensus builder - -fn main() -> eyre::Result<()> { - println!("๐Ÿงช BSC Persistent Snapshots Integration Test"); - println!(); - - println!("โœ… Persistent snapshot integration ENABLED!"); - println!(); - println!("๐Ÿ“‹ When you run your fullnode, you should see one of these messages:"); - println!(" ๐Ÿš€ [BSC] PERSISTENT SNAPSHOTS ENABLED! - if database access works"); - println!(" ๐Ÿ”„ [BSC] Using enhanced InMemorySnapshotProvider - if fallback is used"); - println!(); - println!("๐ŸŽฏ The persistence logic is now integrated into your consensus builder!"); - println!(" Location: src/node/consensus.rs:37-71"); - println!(" Strategy: Separate database instance for snapshot storage"); - println!(" Cache: 2048 entries (persistent) or 50k entries (in-memory)"); - - Ok(()) -} \ No newline at end of file diff --git a/run_bsc_server.sh b/run_bsc_server.sh deleted file mode 100755 index 8e39b77..0000000 --- a/run_bsc_server.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash - -# BSC Testnet Server Mode (after sync completion) -RUST_LOG=DEBUG ./target/release/reth-bsc node \ - --chain=bsc-testnet \ - --http --http.api="eth, net, txpool, web3, rpc" \ - --datadir=./target/data_dir/bsc-testnet/data_dir \ - --log.file.directory ./target/data_dir/bsc-testnet/logs \ - --trusted-peers=enode://428b12bcbbe4f607f6d83f91decbce549be5f0819d793ac32b0c7280f159dbb6125837b24d39ad1d568bc42d35e0754600429ea48044a44555e8af2113084ec7@18.181.52.189:30311,enode://28daea97a03f0bff6f061c3fbb2e7b61d61b8683240eb03310dfa2fd1d56f3551f714bb09515c3e389bae6ff11bd85e45075460408696f5f9a782b9ffb66e1d1@34.242.33.165:30311 \ - --metrics 0.0.0.0:6060 - # Note: --debug.tip removed to keep server running - -echo "BSC node is now running in server mode!" -echo "RPC API available at: http://127.0.0.1:8545" -echo "You can now test: curl -X POST -H 'Content-Type: application/json' --data '{\"jsonrpc\":\"2.0\",\"method\":\"parlia_getSnapshot\",\"params\":[\"0x4e20\"],\"id\":3}' http://127.0.0.1:8545" diff --git a/scripts/start_mainnet_debug.sh b/scripts/start_mainnet_debug.sh deleted file mode 100755 index acbb1f3..0000000 --- a/scripts/start_mainnet_debug.sh +++ /dev/null @@ -1,86 +0,0 @@ -#!/bin/bash - -# BSC Mainnet startup script with debug settings and trusted peers - -# Official BSC mainnet bootnodes from params/bootnodes.go -OFFICIAL_BSC_BOOTNODES=( - ) - -# Known trusted BSC peers (example - you should add real trusted nodes) -TRUSTED_PEERS=( - # Add your trusted peer enodes here, for example: - "enode://551c8009f1d5bbfb1d64983eeb4591e51ad488565b96cdde7e40a207cfd6c8efa5b5a7fa88ed4e71229c988979e4c720891287ddd7d00ba114408a3ceb972ccb@34.245.203.3:30311" -"enode://c637c90d6b9d1d0038788b163a749a7a86fed2e7d0d13e5dc920ab144bb432ed1e3e00b54c1a93cecba479037601ba9a5937a88fe0be949c651043473c0d1e5b@34.244.120.206:30311" -"enode://bac6a548c7884270d53c3694c93ea43fa87ac1c7219f9f25c9d57f6a2fec9d75441bc4bad1e81d78c049a1c4daf3b1404e2bbb5cd9bf60c0f3a723bbaea110bc@3.255.117.110:30311" -"enode://94e56c84a5a32e2ef744af500d0ddd769c317d3c3dd42d50f5ea95f5f3718a5f81bc5ce32a7a3ea127bc0f10d3f88f4526a67f5b06c1d85f9cdfc6eb46b2b375@3.255.231.219:30311" -"enode://5d54b9a5af87c3963cc619fe4ddd2ed7687e98363bfd1854f243b71a2225d33b9c9290e047d738e0c7795b4bc78073f0eb4d9f80f572764e970e23d02b3c2b1f@34.245.16.210:30311" -"enode://41d57b0f00d83016e1bb4eccff0f3034aa49345301b7be96c6bb23a0a852b9b87b9ed11827c188ad409019fb0e578917d722f318665f198340b8a15ae8beff36@34.245.72.231:30311" -"enode://1bb269476f62e99d17da561b1a6b0d0269b10afee029e1e9fdee9ac6a0e342ae562dfa8578d783109b80c0f100a19e03b057f37b2aff22d8a0aceb62020018fe@54.78.102.178:30311" -"enode://3c13113538f3ca7d898d99f9656e0939451558758fd9c9475cff29f020187a56e8140bd24bd57164b07c3d325fc53e1ef622f793851d2648ed93d9d5a7ce975c@34.254.238.155:30311" -"enode://d19fd92e4f061d82a92e32d377c568494edcc36883a02e9d527b69695b6ae9e857f1ace10399c2aee4f71f5885ca3fe6342af78c71ad43ec1ca890deb6aaf465@34.247.29.116:30311" -"enode://c014bbf48209cdf8ca6d3bf3ff5cf2fade45104283dcfc079df6c64e0f4b65e4afe28040fa1731a0732bd9cbb90786cf78f0174b5de7bd5b303088e80d8e6a83@54.74.101.143:30311" - -) - -# Join arrays with comma -BOOTNODES=$(IFS=,; echo "${OFFICIAL_BSC_BOOTNODES[*]}") -TRUSTED=$(IFS=,; echo "${TRUSTED_PEERS[*]}") - -# Configuration options -DATADIR="${DATADIR:-$HOME/Library/Application Support/reth/bsc}" -HTTP_PORT="${HTTP_PORT:-8545}" -WS_PORT="${WS_PORT:-8546}" -METRICS_PORT="${METRICS_PORT:-9001}" -P2P_PORT="${P2P_PORT:-30311}" -USE_DISCOVERY="${USE_DISCOVERY:-false}" - -# Clear previous state if requested -if [[ "$CLEAR_STATE" == "true" ]]; then - echo "Cleaning up previous state..." - rm -rf "$DATADIR" -fi - -echo "Starting BSC mainnet node..." -echo "Fork ID: 098d24ac (includes Pascal, Lorentz, Maxwell)" -echo "Data directory: $DATADIR" -echo "Discovery: $USE_DISCOVERY" -echo "" - -# Build command -CMD="RUST_LOG=\"info,reth_engine_tree=warn,net=debug\" ./target/release/reth-bsc node" -CMD="$CMD --chain bsc" -CMD="$CMD --datadir \"$DATADIR\"" -CMD="$CMD --http --http.addr 0.0.0.0 --http.port $HTTP_PORT" -CMD="$CMD --http.api=\"eth,net,web3,debug,trace,txpool\"" -CMD="$CMD --ws --ws.addr 0.0.0.0 --ws.port $WS_PORT" -CMD="$CMD --metrics 0.0.0.0:$METRICS_PORT" -CMD="$CMD --port $P2P_PORT" -CMD="$CMD --max-outbound-peers 100" -CMD="$CMD --max-inbound-peers 50" -CMD="$CMD --full" -CMD="$CMD --db.max-size=2TB" - -# Add network options based on configuration -if [[ "$USE_DISCOVERY" == "false" ]]; then - echo "Running without discovery, using only trusted peers..." - CMD="$CMD --disable-discovery" - if [[ -n "$TRUSTED" ]]; then - CMD="$CMD --trusted-peers=\"$TRUSTED\"" - fi -else - echo "Running with discovery enabled..." - CMD="$CMD --bootnodes=\"$BOOTNODES\"" - if [[ -n "$TRUSTED" ]]; then - CMD="$CMD --trusted-peers=\"$TRUSTED\"" - fi -fi - -# Debug options -CMD="$CMD --log.file.directory=\"$DATADIR/logs\"" -CMD="$CMD -vvv" - -echo "Command: $CMD" -echo "" - -# Execute -eval $CMD \ No newline at end of file diff --git a/scripts/start_testnet.sh b/scripts/start_testnet.sh deleted file mode 100755 index 7bf1c69..0000000 --- a/scripts/start_testnet.sh +++ /dev/null @@ -1,47 +0,0 @@ -cargo clean && cargo update - -if [ "$(uname)" == "Linux" ]; then - RUSTFLAGS='-C link-arg=-lgcc' cargo build --bin reth-bsc --release -elif [ "$(uname)" == "Darwin" ]; then - cargo build --bin reth-bsc --release -fi - - -# Custom: Only BSC debug + general warnings -#RUST_LOG=warn,reth_bsc::node::evm::executor=debug ./target/release/reth-bsc - -# tip_block=0x8b841b96cb2863e21d9b87ba086e405684b8657e2d1b9ec75d6b70bb25725684 # 10k -# tip_block=0xd16058f981cd556bf454a4c422cb10fd5a3c7938b232be433c6ccf3f08ef506e # 100k -# tip_block=0xba9cdb86dd5bbb14d395240f1429c2099d82372dda3e9d97b9e596eb042fb280 # 300k - -# -# tip_block=0x2c64b38b7a25ddcb7636b81dbefbabd191c128e29acca82b4a7ff7cbe5f2f934 # 30k -# tip_block=0x32ba3474696050e50e21b53b2a29b38180ddaf92605b667ec4537cd81ac5bade # 1000k -# tip_block=0x9bd5a954c1f9c9f5d035d016cc35eb6376ae4dc4fb6ee44a139b432e170687be # 5000k - - -#tip_block=0xa63e13e2c00f22120498a51ef66683e5f892112aa1bd5d8e6f8f82a54b43bafa # 20k - - -# tip_block=0xb230ec6bfd3348dff7ae9af62d8d2fb25a2ff3781c770b3fcf75a186e6ddc1bd # 25M - -# tip_block=0x1253e0b2342239c7e042d87d75974e7824c5503cd2ec34bfc7f5a8b25a1c36b1 # 35M -# tip_block=0xb74e00072b7aa7720f547c4ec3075b1f7310f98a2d8b3323289ad66927010dfa # 47M - - -tip_block=0xb74e00072b7aa7720f547c4ec3075b1f7310f98a2d8b3323289ad66927010dfa # 45M - - - - -tip_block=0xb5ddf3dcb55cf5013110acd3c6c8eaffe5c996e7d3c9d4803e36e9efccdbce47 # 43150000 - - -RUST_LOG=INFO ./target/release/reth-bsc node \ - --chain=bsc-testnet \ - --http --http.api="eth, net, txpool, web3, rpc" \ - --datadir=./target/data_dir/bsc-testnet/data_dir \ - --log.file.directory ./target/data_dir/bsc-testnet/logs \ - --trusted-peers=enode://428b12bcbbe4f607f6d83f91decbce549be5f0819d793ac32b0c7280f159dbb6125837b24d39ad1d568bc42d35e0754600429ea48044a44555e8af2113084ec7@18.181.52.189:30311,enode://28daea97a03f0bff6f061c3fbb2e7b61d61b8683240eb03310dfa2fd1d56f3551f714bb09515c3e389bae6ff11bd85e45075460408696f5f9a782b9ffb66e1d1@34.242.33.165:30311 \ - --metrics 0.0.0.0:6060 \ - --debug.tip $tip_block \ No newline at end of file From 3f7d1f3c22d73a2b24b7592471b1d9b9b98cf964 Mon Sep 17 00:00:00 2001 From: Clyde Date: Tue, 12 Aug 2025 10:58:47 +0800 Subject: [PATCH 11/11] fix: update reth --- Cargo.lock | 656 +++++++++++++++++++++++++++-------------------------- Cargo.toml | 84 ++++--- 2 files changed, 372 insertions(+), 368 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f70ff62..6b4e6cc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -112,9 +112,9 @@ dependencies = [ [[package]] name = "alloy-consensus" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b6093bc69509849435a2d68237a2e9fea79d27390c8e62f1e4012c460aabad8" +checksum = "eda689f7287f15bd3582daba6be8d1545bad3740fd1fb778f629a1fe866bb43b" dependencies = [ "alloy-eips", "alloy-primitives", @@ -133,14 +133,14 @@ dependencies = [ "secp256k1 0.30.0", "serde", "serde_with", - "thiserror 2.0.12", + "thiserror 2.0.14", ] [[package]] name = "alloy-consensus-any" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d1cfed4fefd13b5620cb81cdb6ba397866ff0de514c1b24806e6e79cdff5570" +checksum = "2b5659581e41e8fe350ecc3593cb5c9dcffddfd550896390f2b78a07af67b0fa" dependencies = [ "alloy-consensus", "alloy-eips", @@ -180,7 +180,7 @@ dependencies = [ "crc", "rand 0.8.5", "serde", - "thiserror 2.0.12", + "thiserror 2.0.14", ] [[package]] @@ -209,14 +209,14 @@ dependencies = [ "rand 0.8.5", "serde", "serde_with", - "thiserror 2.0.12", + "thiserror 2.0.14", ] [[package]] name = "alloy-eips" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5937e2d544e9b71000942d875cbc57965b32859a666ea543cc57aae5a06d602d" +checksum = "6f35887da30b5fc50267109a3c61cd63e6ca1f45967983641053a40ee83468c1" dependencies = [ "alloy-eip2124", "alloy-eip2930", @@ -252,14 +252,14 @@ dependencies = [ "op-alloy-consensus", "op-revm", "revm", - "thiserror 2.0.12", + "thiserror 2.0.14", ] [[package]] name = "alloy-genesis" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c51b4c13e02a8104170a4de02ccf006d7c233e6c10ab290ee16e7041e6ac221d" +checksum = "11d4009efea6f403b3a80531f9c6f70fc242399498ff71196a1688cc1c901f44" dependencies = [ "alloy-eips", "alloy-primitives", @@ -297,24 +297,24 @@ dependencies = [ [[package]] name = "alloy-json-rpc" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b590caa6b6d8bc10e6e7a7696c59b1e550e89f27f50d1ee13071150d3a3e3f66" +checksum = "883dee3b4020fcb5667ee627b4f401e899dad82bf37b246620339dd980720ed9" dependencies = [ "alloy-primitives", "alloy-sol-types", "http 1.3.1", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.14", "tracing", ] [[package]] name = "alloy-network" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36fe5af1fca03277daa56ad4ce5f6d623d3f4c2273ea30b9ee8674d18cefc1fa" +checksum = "cd6e5b8ac1654a05c224390008e43634a2bdc74e181e02cf8ed591d8b3d4ad08" dependencies = [ "alloy-consensus", "alloy-consensus-any", @@ -333,14 +333,14 @@ dependencies = [ "futures-utils-wasm", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.14", ] [[package]] name = "alloy-network-primitives" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793df1e3457573877fbde8872e4906638fde565ee2d3bd16d04aad17d43dbf0e" +checksum = "80d7980333dd9391719756ac28bc2afa9baa705fc70ffd11dc86ab078dd64477" dependencies = [ "alloy-consensus", "alloy-eips", @@ -392,7 +392,7 @@ dependencies = [ "derive_more 2.0.1", "foldhash", "getrandom 0.3.3", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "indexmap 2.10.0", "itoa", "k256", @@ -410,9 +410,9 @@ dependencies = [ [[package]] name = "alloy-provider" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d59879a772ebdcde9dc4eb38b2535d32e8503d3175687cc09e763a625c5fcf32" +checksum = "478a42fe167057b7b919cd8b0c2844f0247f667473340dad100eaf969de5754e" dependencies = [ "alloy-chains", "alloy-consensus", @@ -437,14 +437,13 @@ dependencies = [ "either", "futures", "futures-utils-wasm", - "http 1.3.1", "lru 0.13.0", "parking_lot", "pin-project", "reqwest 0.12.22", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.14", "tokio", "tracing", "url", @@ -453,13 +452,14 @@ dependencies = [ [[package]] name = "alloy-pubsub" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbdfb2899b54b7cb0063fa8e61938320f9be6b81b681be69c203abf130a87baa" +checksum = "b0a99b17987f40a066b29b6b56d75e84cd193b866cac27cae17b59f40338de95" dependencies = [ "alloy-json-rpc", "alloy-primitives", "alloy-transport", + "auto_impl", "bimap", "futures", "parking_lot", @@ -496,9 +496,9 @@ dependencies = [ [[package]] name = "alloy-rpc-client" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f060e3bb9f319eb01867a2d6d1ff9e0114e8877f5ca8f5db447724136106cae" +checksum = "8a0c6d723fbdf4a87454e2e3a275e161be27edcfbf46e2e3255dd66c138634b6" dependencies = [ "alloy-json-rpc", "alloy-primitives", @@ -522,9 +522,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d47b637369245d2dafef84b223b1ff5ea59e6cd3a98d2d3516e32788a0b216df" +checksum = "c41492dac39365b86a954de86c47ec23dcc7452cdb2fde591caadc194b3e34c6" dependencies = [ "alloy-primitives", "alloy-rpc-types-engine", @@ -535,9 +535,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-admin" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db29bf8f7c961533b017f383122cab6517c8da95712cf832e23c60415d520a58" +checksum = "9c0f415ad97cc68d2f49eb08214f45c6827a6932a69773594f4ce178f8a41dc0" dependencies = [ "alloy-genesis", "alloy-primitives", @@ -547,9 +547,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-anvil" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0b1f499acb3fc729615147bc113b8b798b17379f19d43058a687edc5792c102" +checksum = "10493fa300a2757d8134f584800fef545c15905c95122bed1f6dde0b0d9dae27" dependencies = [ "alloy-primitives", "alloy-rpc-types-eth", @@ -559,9 +559,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-any" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e26b4dd90b33bd158975307fb9cf5fafa737a0e33cbb772a8648bf8be13c104" +checksum = "8f7eb22670a972ad6c222a6c6dac3eef905579acffe9d63ab42be24c7d158535" dependencies = [ "alloy-consensus-any", "alloy-rpc-types-eth", @@ -570,9 +570,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-beacon" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9196cbbf4b82a3cc0c471a8e68ccb30102170d930948ac940d2bceadc1b1346b" +checksum = "53381ffba0110a8aed4c9f108ef34a382ed21aeefb5f50f91c73451ae68b89aa" dependencies = [ "alloy-eips", "alloy-primitives", @@ -581,26 +581,27 @@ dependencies = [ "ethereum_ssz_derive", "serde", "serde_with", - "thiserror 2.0.12", + "thiserror 2.0.14", "tree_hash", "tree_hash_derive", ] [[package]] name = "alloy-rpc-types-debug" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71841e6fc8e221892035a74f7d5b279c0a2bf27a7e1c93e7476c64ce9056624e" +checksum = "a9b6f0482c82310366ec3dcf4e5212242f256a69fcf1a26e5017e6704091ee95" dependencies = [ "alloy-primitives", + "derive_more 2.0.1", "serde", ] [[package]] name = "alloy-rpc-types-engine" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f9cbf5f781b9ee39cfdddea078fdef6015424f4c8282ef0e5416d15ca352c4" +checksum = "e24c171377c0684e3860385f6d93fbfcc8ecc74f6cce8304c822bf1a50bacce0" dependencies = [ "alloy-consensus", "alloy-eips", @@ -618,9 +619,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-eth" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46586ec3c278639fc0e129f0eb73dbfa3d57f683c44b2ff5e066fab7ba63fa1f" +checksum = "b777b98526bbe5b7892ca22a7fd5f18ed624ff664a79f40d0f9f2bf94ba79a84" dependencies = [ "alloy-consensus", "alloy-consensus-any", @@ -635,14 +636,14 @@ dependencies = [ "serde", "serde_json", "serde_with", - "thiserror 2.0.12", + "thiserror 2.0.14", ] [[package]] name = "alloy-rpc-types-mev" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79b6e80b501842c3f5803dd5752ae41b61f43bf6d2e1b8d29999d3312d67a8a5" +checksum = "c15e8ccb6c16e196fcc968e16a71cd8ce4160f3ec5871d2ea196b75bf569ac02" dependencies = [ "alloy-consensus", "alloy-eips", @@ -655,23 +656,23 @@ dependencies = [ [[package]] name = "alloy-rpc-types-trace" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc9a2184493c374ca1dbba9569d37215c23e489970f8c3994f731cb3ed6b0b7d" +checksum = "d6a854af3fe8fce1cfe319fcf84ee8ba8cda352b14d3dd4221405b5fc6cce9e1" dependencies = [ "alloy-primitives", "alloy-rpc-types-eth", "alloy-serde", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.14", ] [[package]] name = "alloy-rpc-types-txpool" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3aaf142f4f6c0bdd06839c422179bae135024407d731e6f365380f88cd4730e" +checksum = "3cc803e9b8d16154c856a738c376e002abe4b388e5fef91c8aebc8373e99fd45" dependencies = [ "alloy-primitives", "alloy-rpc-types-eth", @@ -681,9 +682,9 @@ dependencies = [ [[package]] name = "alloy-serde" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e1722bc30feef87cc0fa824e43c9013f9639cc6c037be7be28a31361c788be2" +checksum = "ee8d2c52adebf3e6494976c8542fbdf12f10123b26e11ad56f77274c16a2a039" dependencies = [ "alloy-primitives", "arbitrary", @@ -693,9 +694,9 @@ dependencies = [ [[package]] name = "alloy-signer" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3674beb29e68fbbc7be302b611cf35fe07b736e308012a280861df5a2361395" +checksum = "7c0494d1e0f802716480aabbe25549c7f6bc2a25ff33b08fd332bbb4b7d06894" dependencies = [ "alloy-primitives", "async-trait", @@ -703,14 +704,14 @@ dependencies = [ "either", "elliptic-curve", "k256", - "thiserror 2.0.12", + "thiserror 2.0.14", ] [[package]] name = "alloy-signer-local" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad7094c39cd41b03ed642145b0bd37251e31a9cf2ed19e1ce761f089867356a6" +checksum = "59c2435eb8979a020763ced3fb478932071c56e5f75ea86db41f320915d325ba" dependencies = [ "alloy-consensus", "alloy-network", @@ -721,7 +722,7 @@ dependencies = [ "coins-bip39", "k256", "rand 0.8.5", - "thiserror 2.0.12", + "thiserror 2.0.14", ] [[package]] @@ -796,12 +797,13 @@ dependencies = [ [[package]] name = "alloy-transport" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f89bec2f59a41c0e259b6fe92f78dfc49862c17d10f938db9c33150d5a7f42b6" +checksum = "3c0107675e10c7f248bf7273c1e7fdb02409a717269cc744012e6f3c39959bfb" dependencies = [ "alloy-json-rpc", "alloy-primitives", + "auto_impl", "base64 0.22.1", "derive_more 2.0.1", "futures", @@ -809,7 +811,7 @@ dependencies = [ "parking_lot", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.14", "tokio", "tower", "tracing", @@ -819,9 +821,9 @@ dependencies = [ [[package]] name = "alloy-transport-http" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d3615ec64d775fec840f4e9d5c8e1f739eb1854d8d28db093fb3d4805e0cb53" +checksum = "78e3736701b5433afd06eecff08f0688a71a10e0e1352e0bbf0bed72f0dd4e35" dependencies = [ "alloy-json-rpc", "alloy-transport", @@ -834,9 +836,9 @@ dependencies = [ [[package]] name = "alloy-transport-ipc" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "374db72669d8ee09063b9aa1a316e812d5cdfce7fc9a99a3eceaa0e5512300d2" +checksum = "c79064b5a08259581cb5614580010007c2df6deab1e8f3e8c7af8d7e9227008f" dependencies = [ "alloy-json-rpc", "alloy-pubsub", @@ -854,9 +856,9 @@ dependencies = [ [[package]] name = "alloy-transport-ws" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5dbaa6851875d59c8803088f4b6ec72eaeddf7667547ae8995c1a19fbca6303" +checksum = "77fd607158cb9bc54cbcfcaab4c5f36c5b26994c7dc58b6f095ce27a54f270f3" dependencies = [ "alloy-pubsub", "alloy-transport", @@ -892,9 +894,9 @@ dependencies = [ [[package]] name = "alloy-tx-macros" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f916ff6d52f219c44a9684aea764ce2c7e1d53bd4a724c9b127863aeacc30bb" +checksum = "6acb36318dfa50817154064fea7932adf2eec3f51c86680e2b37d7e8906c66bb" dependencies = [ "alloy-primitives", "darling", @@ -979,9 +981,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.98" +version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" +checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100" [[package]] name = "aquamarine" @@ -1072,7 +1074,7 @@ dependencies = [ "ark-std 0.5.0", "educe", "fnv", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "itertools 0.13.0", "num-bigint", "num-integer", @@ -1231,7 +1233,7 @@ dependencies = [ "ark-std 0.5.0", "educe", "fnv", - "hashbrown 0.15.4", + "hashbrown 0.15.5", ] [[package]] @@ -1747,7 +1749,7 @@ dependencies = [ "cfg-if", "dashmap 6.1.0", "fast-float2", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "icu_normalizer 1.5.0", "indexmap 2.10.0", "intrusive-collections", @@ -1769,7 +1771,7 @@ dependencies = [ "static_assertions", "tap", "thin-vec", - "thiserror 2.0.12", + "thiserror 2.0.14", "time", ] @@ -1782,7 +1784,7 @@ dependencies = [ "boa_macros", "boa_profiler", "boa_string", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "thin-vec", ] @@ -1794,7 +1796,7 @@ checksum = "42407a3b724cfaecde8f7d4af566df4b56af32a2f11f0956f5570bb974e7f749" dependencies = [ "boa_gc", "boa_macros", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "indexmap 2.10.0", "once_cell", "phf", @@ -1929,18 +1931,18 @@ checksum = "175812e0be2bccb6abe50bb8d566126198344f707e304f45c648fd8f2cc0365e" [[package]] name = "bytemuck" -version = "1.23.1" +version = "1.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c76a5792e44e4abe34d3abf15636779261d45a7450612059293d1d2cfc63422" +checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.10.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "441473f2b4b0459a68628c744bc61d23e730fb00128b841d30fa4bb3972257e4" +checksum = "4f154e572231cb6ba2bd1176980827e3d5dc04cc183a75dea38109fbdd672d29" dependencies = [ "proc-macro2", "quote", @@ -1986,9 +1988,9 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.10" +version = "1.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0da45bc31171d8d6960122e222a67740df867c1dd53b4d51caa297084c185cab" +checksum = "5d07aa9a93b00c76f71bc35d598bed923f6d4f3a9ca5c24b7737ae1a292841c0" dependencies = [ "serde", ] @@ -2026,7 +2028,7 @@ dependencies = [ "semver 1.0.26", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.14", ] [[package]] @@ -2120,9 +2122,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.42" +version = "4.5.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed87a9d530bb41a67537289bafcac159cb3ee28460e0a4571123d2a778a6a882" +checksum = "1c1f056bae57e3e54c3375c41ff79619ddd13460a17d7438712bd0d83fda4ff8" dependencies = [ "clap_builder", "clap_derive", @@ -2130,9 +2132,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.42" +version = "4.5.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64f4f3f3c77c94aff3c7e9aac9a2ca1974a5adf392a8bb751e827d6d127ab966" +checksum = "b3e7f4214277f3c7aa526a59dd3fbe306a370daee1f8b7b8c987069cd8e888a8" dependencies = [ "anstream", "anstyle", @@ -2818,9 +2820,9 @@ dependencies = [ [[package]] name = "derive-where" -version = "1.5.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "510c292c8cf384b1a340b816a9a6cf2599eb8f566a44949024af88418000c50b" +checksum = "ef941ded77d15ca19b40374869ac6000af1c9f2a4c0f3d4c70926287e6364a8f" dependencies = [ "proc-macro2", "quote", @@ -3707,9 +3709,9 @@ dependencies = [ [[package]] name = "glob" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "gloo-net" @@ -3799,9 +3801,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17da50a276f1e01e0ba6c029e47b7100754904ee8a278f886546e98575380785" +checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" dependencies = [ "atomic-waker", "bytes 1.10.1", @@ -3854,9 +3856,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.4" +version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "allocator-api2", "equivalent", @@ -3938,7 +3940,7 @@ dependencies = [ "rand 0.9.2", "ring", "serde", - "thiserror 2.0.12", + "thiserror 2.0.14", "tinyvec", "tokio", "tracing", @@ -3962,7 +3964,7 @@ dependencies = [ "resolv-conf", "serde", "smallvec", - "thiserror 2.0.12", + "thiserror 2.0.14", "tokio", "tracing", ] @@ -4114,7 +4116,7 @@ dependencies = [ "bytes 1.10.1", "futures-channel", "futures-util", - "h2 0.4.11", + "h2 0.4.12", "http 1.3.1", "http-body 1.0.1", "httparse", @@ -4504,9 +4506,9 @@ dependencies = [ [[package]] name = "indenter" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" +checksum = "964de6e86d545b246d84badc0fef527924ace5134f30641c203ef52ba83f58d5" [[package]] name = "indexmap" @@ -4527,7 +4529,7 @@ checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" dependencies = [ "arbitrary", "equivalent", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "serde", ] @@ -4786,7 +4788,7 @@ dependencies = [ "rustls-pki-types", "rustls-platform-verifier", "soketto", - "thiserror 2.0.12", + "thiserror 2.0.14", "tokio", "tokio-rustls 0.26.2", "tokio-util", @@ -4814,7 +4816,7 @@ dependencies = [ "rustc-hash 2.1.1", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.14", "tokio", "tokio-stream", "tower", @@ -4839,7 +4841,7 @@ dependencies = [ "rustls-platform-verifier", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.14", "tokio", "tower", "url", @@ -4877,7 +4879,7 @@ dependencies = [ "serde", "serde_json", "soketto", - "thiserror 2.0.12", + "thiserror 2.0.14", "tokio", "tokio-stream", "tokio-util", @@ -4894,7 +4896,7 @@ dependencies = [ "http 1.3.1", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.14", ] [[package]] @@ -5000,9 +5002,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.174" +version = "0.2.175" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" +checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" [[package]] name = "libgit2-sys" @@ -5046,7 +5048,7 @@ dependencies = [ "multihash", "quick-protobuf", "sha2 0.10.9", - "thiserror 2.0.12", + "thiserror 2.0.14", "tracing", "zeroize", ] @@ -5207,7 +5209,7 @@ version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" dependencies = [ - "hashbrown 0.15.4", + "hashbrown 0.15.5", ] [[package]] @@ -5216,7 +5218,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "227748d55f2f0ab4735d87fd623798cb6b664512fe979705f829c9f81c934465" dependencies = [ - "hashbrown 0.15.4", + "hashbrown 0.15.5", ] [[package]] @@ -5363,7 +5365,7 @@ checksum = "b8496cc523d1f94c1385dd8f0f0c2c480b2b8aeccb5b7e4485ad6365523ae376" dependencies = [ "crossbeam-epoch", "crossbeam-utils", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "metrics", "quanta", "rand 0.9.2", @@ -5769,7 +5771,7 @@ dependencies = [ "derive_more 2.0.1", "serde", "serde_with", - "thiserror 2.0.12", + "thiserror 2.0.14", ] [[package]] @@ -5820,7 +5822,7 @@ dependencies = [ "op-alloy-consensus", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.14", ] [[package]] @@ -5841,7 +5843,7 @@ dependencies = [ "op-alloy-consensus", "serde", "snap", - "thiserror 2.0.12", + "thiserror 2.0.14", ] [[package]] @@ -6033,7 +6035,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1db05f56d34358a8b1066f67cbb203ee3e7ed2ba674a6263a1d5ec6db2204323" dependencies = [ "memchr", - "thiserror 2.0.12", + "thiserror 2.0.14", "ucd-trie", ] @@ -6258,9 +6260,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.95" +version = "1.0.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +checksum = "d61789d7719defeb74ea5fe81f2fdfdbd28a803847077cecce2ff14e1472f6f1" dependencies = [ "unicode-ident", ] @@ -6475,7 +6477,7 @@ dependencies = [ "rustc-hash 2.1.1", "rustls 0.23.31", "socket2 0.5.10", - "thiserror 2.0.12", + "thiserror 2.0.14", "tokio", "tracing", "web-time", @@ -6496,7 +6498,7 @@ dependencies = [ "rustls 0.23.31", "rustls-pki-types", "slab", - "thiserror 2.0.12", + "thiserror 2.0.14", "tinyvec", "tracing", "web-time", @@ -6742,7 +6744,7 @@ checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ "getrandom 0.2.16", "libredox", - "thiserror 2.0.12", + "thiserror 2.0.14", ] [[package]] @@ -6815,7 +6817,7 @@ version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "145bb27393fe455dd64d6cbc8d059adfa392590a45eadf079c01b11857e7b010" dependencies = [ - "hashbrown 0.15.4", + "hashbrown 0.15.5", "memchr", ] @@ -6912,7 +6914,7 @@ checksum = "95325155c684b1c89f7765e30bc1c42e4a6da51ca513615660cb8a62ef9a88e3" [[package]] name = "reth" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-rpc-types", "aquamarine", @@ -6958,7 +6960,7 @@ dependencies = [ [[package]] name = "reth-basic-payload-builder" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-eips", @@ -6982,7 +6984,7 @@ dependencies = [ [[package]] name = "reth-chain-state" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7013,7 +7015,7 @@ dependencies = [ [[package]] name = "reth-chainspec" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-chains", "alloy-consensus", @@ -7033,7 +7035,7 @@ dependencies = [ [[package]] name = "reth-cli" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-genesis", "clap", @@ -7047,7 +7049,7 @@ dependencies = [ [[package]] name = "reth-cli-commands" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "ahash", "alloy-chains", @@ -7127,7 +7129,7 @@ dependencies = [ [[package]] name = "reth-cli-runner" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "reth-tasks", "tokio", @@ -7137,7 +7139,7 @@ dependencies = [ [[package]] name = "reth-cli-util" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-eips", "alloy-primitives", @@ -7148,14 +7150,14 @@ dependencies = [ "reth-fs-util", "secp256k1 0.30.0", "serde", - "thiserror 2.0.12", + "thiserror 2.0.14", "tikv-jemallocator", ] [[package]] name = "reth-codecs" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7175,7 +7177,7 @@ dependencies = [ [[package]] name = "reth-codecs-derive" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "convert_case 0.7.1", "proc-macro2", @@ -7186,7 +7188,7 @@ dependencies = [ [[package]] name = "reth-config" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "eyre", "humantime-serde", @@ -7201,20 +7203,20 @@ dependencies = [ [[package]] name = "reth-consensus" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-primitives", "auto_impl", "reth-execution-types", "reth-primitives-traits", - "thiserror 2.0.12", + "thiserror 2.0.14", ] [[package]] name = "reth-consensus-common" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7226,7 +7228,7 @@ dependencies = [ [[package]] name = "reth-consensus-debug-client" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7251,7 +7253,7 @@ dependencies = [ [[package]] name = "reth-db" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-primitives", "derive_more 2.0.1", @@ -7271,13 +7273,13 @@ dependencies = [ "strum 0.27.2", "sysinfo", "tempfile", - "thiserror 2.0.12", + "thiserror 2.0.14", ] [[package]] name = "reth-db-api" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-genesis", @@ -7305,7 +7307,7 @@ dependencies = [ [[package]] name = "reth-db-common" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-genesis", @@ -7327,14 +7329,14 @@ dependencies = [ "reth-trie-db", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.14", "tracing", ] [[package]] name = "reth-db-models" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-eips", "alloy-primitives", @@ -7349,7 +7351,7 @@ dependencies = [ [[package]] name = "reth-discv4" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -7366,7 +7368,7 @@ dependencies = [ "schnellru", "secp256k1 0.30.0", "serde", - "thiserror 2.0.12", + "thiserror 2.0.14", "tokio", "tokio-stream", "tracing", @@ -7375,7 +7377,7 @@ dependencies = [ [[package]] name = "reth-discv5" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -7391,7 +7393,7 @@ dependencies = [ "reth-metrics", "reth-network-peers", "secp256k1 0.30.0", - "thiserror 2.0.12", + "thiserror 2.0.14", "tokio", "tracing", ] @@ -7399,7 +7401,7 @@ dependencies = [ [[package]] name = "reth-dns-discovery" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-primitives", "data-encoding", @@ -7414,7 +7416,7 @@ dependencies = [ "secp256k1 0.30.0", "serde", "serde_with", - "thiserror 2.0.12", + "thiserror 2.0.14", "tokio", "tokio-stream", "tracing", @@ -7423,7 +7425,7 @@ dependencies = [ [[package]] name = "reth-downloaders" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7448,7 +7450,7 @@ dependencies = [ "reth-tasks", "reth-testing-utils", "tempfile", - "thiserror 2.0.12", + "thiserror 2.0.14", "tokio", "tokio-stream", "tokio-util", @@ -7458,7 +7460,7 @@ dependencies = [ [[package]] name = "reth-e2e-test-utils" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7482,7 +7484,9 @@ dependencies = [ "reth-db", "reth-db-common", "reth-engine-local", + "reth-ethereum-consensus", "reth-ethereum-primitives", + "reth-evm", "reth-network-api", "reth-network-peers", "reth-node-api", @@ -7495,12 +7499,14 @@ dependencies = [ "reth-primitives", "reth-primitives-traits", "reth-provider", + "reth-prune-types", "reth-rpc-api", "reth-rpc-builder", "reth-rpc-eth-api", "reth-rpc-layer", "reth-rpc-server-types", "reth-stages-types", + "reth-static-file", "reth-tasks", "reth-tokio-util", "reth-tracing", @@ -7516,7 +7522,7 @@ dependencies = [ [[package]] name = "reth-ecies" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "aes", "alloy-primitives", @@ -7536,7 +7542,7 @@ dependencies = [ "secp256k1 0.30.0", "sha2 0.10.9", "sha3 0.10.8", - "thiserror 2.0.12", + "thiserror 2.0.14", "tokio", "tokio-stream", "tokio-util", @@ -7547,7 +7553,7 @@ dependencies = [ [[package]] name = "reth-engine-local" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -7569,7 +7575,7 @@ dependencies = [ [[package]] name = "reth-engine-primitives" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7587,14 +7593,14 @@ dependencies = [ "reth-trie", "reth-trie-common", "serde", - "thiserror 2.0.12", + "thiserror 2.0.14", "tokio", ] [[package]] name = "reth-engine-service" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "futures", "pin-project", @@ -7611,13 +7617,13 @@ dependencies = [ "reth-prune", "reth-stages-api", "reth-tasks", - "thiserror 2.0.12", + "thiserror 2.0.14", ] [[package]] name = "reth-engine-tree" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7662,7 +7668,7 @@ dependencies = [ "revm", "revm-primitives", "schnellru", - "thiserror 2.0.12", + "thiserror 2.0.14", "tokio", "tracing", ] @@ -7670,7 +7676,7 @@ dependencies = [ [[package]] name = "reth-engine-util" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-rpc-types-engine", @@ -7697,7 +7703,7 @@ dependencies = [ [[package]] name = "reth-era" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7707,13 +7713,13 @@ dependencies = [ "ethereum_ssz_derive", "reth-ethereum-primitives", "snap", - "thiserror 2.0.12", + "thiserror 2.0.14", ] [[package]] name = "reth-era-downloader" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-primitives", "bytes 1.10.1", @@ -7728,7 +7734,7 @@ dependencies = [ [[package]] name = "reth-era-utils" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -7752,18 +7758,18 @@ dependencies = [ [[package]] name = "reth-errors" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "reth-consensus", "reth-execution-errors", "reth-storage-errors", - "thiserror 2.0.12", + "thiserror 2.0.14", ] [[package]] name = "reth-eth-wire" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-chains", "alloy-primitives", @@ -7782,7 +7788,7 @@ dependencies = [ "reth-primitives-traits", "serde", "snap", - "thiserror 2.0.12", + "thiserror 2.0.14", "tokio", "tokio-stream", "tokio-util", @@ -7792,7 +7798,7 @@ dependencies = [ [[package]] name = "reth-eth-wire-types" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-chains", "alloy-consensus", @@ -7810,13 +7816,13 @@ dependencies = [ "reth-ethereum-primitives", "reth-primitives-traits", "serde", - "thiserror 2.0.12", + "thiserror 2.0.14", ] [[package]] name = "reth-ethereum-cli" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "clap", @@ -7838,7 +7844,7 @@ dependencies = [ [[package]] name = "reth-ethereum-consensus" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7854,7 +7860,7 @@ dependencies = [ [[package]] name = "reth-ethereum-engine-primitives" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-eips", "alloy-primitives", @@ -7866,13 +7872,13 @@ dependencies = [ "reth-primitives-traits", "serde", "sha2 0.10.9", - "thiserror 2.0.12", + "thiserror 2.0.14", ] [[package]] name = "reth-ethereum-forks" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-eip2124", "alloy-hardforks", @@ -7886,7 +7892,7 @@ dependencies = [ [[package]] name = "reth-ethereum-payload-builder" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7913,7 +7919,7 @@ dependencies = [ [[package]] name = "reth-ethereum-primitives" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7931,7 +7937,7 @@ dependencies = [ [[package]] name = "reth-etl" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "rayon", "reth-db-api", @@ -7941,7 +7947,7 @@ dependencies = [ [[package]] name = "reth-evm" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7964,7 +7970,7 @@ dependencies = [ [[package]] name = "reth-evm-ethereum" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7984,20 +7990,20 @@ dependencies = [ [[package]] name = "reth-execution-errors" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-evm", "alloy-primitives", "alloy-rlp", "nybbles", "reth-storage-errors", - "thiserror 2.0.12", + "thiserror 2.0.14", ] [[package]] name = "reth-execution-types" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8016,7 +8022,7 @@ dependencies = [ [[package]] name = "reth-exex" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8045,7 +8051,7 @@ dependencies = [ "reth-tasks", "reth-tracing", "rmp-serde", - "thiserror 2.0.12", + "thiserror 2.0.14", "tokio", "tokio-util", "tracing", @@ -8054,7 +8060,7 @@ dependencies = [ [[package]] name = "reth-exex-types" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-eips", "alloy-primitives", @@ -8068,17 +8074,17 @@ dependencies = [ [[package]] name = "reth-fs-util" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.14", ] [[package]] name = "reth-invalid-block-hooks" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -8106,7 +8112,7 @@ dependencies = [ [[package]] name = "reth-ipc" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "bytes 1.10.1", "futures", @@ -8115,7 +8121,7 @@ dependencies = [ "jsonrpsee", "pin-project", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.14", "tokio", "tokio-stream", "tokio-util", @@ -8126,7 +8132,7 @@ dependencies = [ [[package]] name = "reth-libmdbx" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "bitflags 2.9.1", "byteorder", @@ -8136,14 +8142,14 @@ dependencies = [ "parking_lot", "reth-mdbx-sys", "smallvec", - "thiserror 2.0.12", + "thiserror 2.0.14", "tracing", ] [[package]] name = "reth-mdbx-sys" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "bindgen", "cc", @@ -8152,7 +8158,7 @@ dependencies = [ [[package]] name = "reth-metrics" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "futures", "metrics", @@ -8164,7 +8170,7 @@ dependencies = [ [[package]] name = "reth-net-banlist" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-primitives", ] @@ -8172,13 +8178,13 @@ dependencies = [ [[package]] name = "reth-net-nat" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "futures-util", "if-addrs", "reqwest 0.12.22", "serde_with", - "thiserror 2.0.12", + "thiserror 2.0.14", "tokio", "tracing", ] @@ -8186,7 +8192,7 @@ dependencies = [ [[package]] name = "reth-network" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8231,7 +8237,7 @@ dependencies = [ "secp256k1 0.30.0", "serde", "smallvec", - "thiserror 2.0.12", + "thiserror 2.0.14", "tokio", "tokio-stream", "tokio-util", @@ -8241,7 +8247,7 @@ dependencies = [ [[package]] name = "reth-network-api" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -8258,7 +8264,7 @@ dependencies = [ "reth-network-types", "reth-tokio-util", "serde", - "thiserror 2.0.12", + "thiserror 2.0.14", "tokio", "tokio-stream", ] @@ -8266,7 +8272,7 @@ dependencies = [ [[package]] name = "reth-network-p2p" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8289,14 +8295,14 @@ dependencies = [ [[package]] name = "reth-network-peers" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-primitives", "alloy-rlp", "enr", "secp256k1 0.30.0", "serde_with", - "thiserror 2.0.12", + "thiserror 2.0.14", "tokio", "url", ] @@ -8304,7 +8310,7 @@ dependencies = [ [[package]] name = "reth-network-types" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-eip2124", "humantime-serde", @@ -8318,7 +8324,7 @@ dependencies = [ [[package]] name = "reth-nippy-jar" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "anyhow", "bincode", @@ -8327,7 +8333,7 @@ dependencies = [ "memmap2", "reth-fs-util", "serde", - "thiserror 2.0.12", + "thiserror 2.0.14", "tracing", "zstd", ] @@ -8335,7 +8341,7 @@ dependencies = [ [[package]] name = "reth-node-api" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-rpc-types-engine", "eyre", @@ -8359,7 +8365,7 @@ dependencies = [ [[package]] name = "reth-node-builder" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8425,7 +8431,7 @@ dependencies = [ [[package]] name = "reth-node-core" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8466,7 +8472,7 @@ dependencies = [ "serde", "shellexpand", "strum 0.27.2", - "thiserror 2.0.12", + "thiserror 2.0.14", "toml 0.8.23", "tracing", "url", @@ -8477,7 +8483,7 @@ dependencies = [ [[package]] name = "reth-node-ethereum" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-eips", "alloy-network", @@ -8515,7 +8521,7 @@ dependencies = [ [[package]] name = "reth-node-ethstats" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -8528,7 +8534,7 @@ dependencies = [ "reth-transaction-pool", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.14", "tokio", "tokio-stream", "tokio-tungstenite", @@ -8539,7 +8545,7 @@ dependencies = [ [[package]] name = "reth-node-events" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8563,7 +8569,7 @@ dependencies = [ [[package]] name = "reth-node-metrics" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "eyre", "http 1.3.1", @@ -8584,7 +8590,7 @@ dependencies = [ [[package]] name = "reth-node-types" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "reth-chainspec", "reth-db-api", @@ -8597,7 +8603,7 @@ dependencies = [ [[package]] name = "reth-optimism-chainspec" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-chains", "alloy-consensus", @@ -8620,7 +8626,7 @@ dependencies = [ [[package]] name = "reth-optimism-consensus" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8638,14 +8644,14 @@ dependencies = [ "reth-storage-errors", "reth-trie-common", "revm", - "thiserror 2.0.12", + "thiserror 2.0.14", "tracing", ] [[package]] name = "reth-optimism-evm" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8664,13 +8670,13 @@ dependencies = [ "reth-optimism-primitives", "reth-primitives-traits", "revm", - "thiserror 2.0.12", + "thiserror 2.0.14", ] [[package]] name = "reth-optimism-forks" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-op-hardforks", "alloy-primitives", @@ -8681,7 +8687,7 @@ dependencies = [ [[package]] name = "reth-optimism-payload-builder" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8713,14 +8719,14 @@ dependencies = [ "revm", "serde", "sha2 0.10.9", - "thiserror 2.0.12", + "thiserror 2.0.14", "tracing", ] [[package]] name = "reth-optimism-primitives" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8740,7 +8746,7 @@ dependencies = [ [[package]] name = "reth-optimism-rpc" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8788,7 +8794,7 @@ dependencies = [ "reth-transaction-pool", "revm", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.14", "tokio", "tower", "tracing", @@ -8797,7 +8803,7 @@ dependencies = [ [[package]] name = "reth-optimism-txpool" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8825,7 +8831,7 @@ dependencies = [ "reth-storage-api", "reth-transaction-pool", "serde", - "thiserror 2.0.12", + "thiserror 2.0.14", "tokio", "tracing", ] @@ -8833,7 +8839,7 @@ dependencies = [ [[package]] name = "reth-payload-builder" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -8854,7 +8860,7 @@ dependencies = [ [[package]] name = "reth-payload-builder-primitives" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "pin-project", "reth-payload-primitives", @@ -8866,7 +8872,7 @@ dependencies = [ [[package]] name = "reth-payload-primitives" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-eips", "alloy-primitives", @@ -8878,14 +8884,14 @@ dependencies = [ "reth-errors", "reth-primitives-traits", "serde", - "thiserror 2.0.12", + "thiserror 2.0.14", "tokio", ] [[package]] name = "reth-payload-util" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -8895,7 +8901,7 @@ dependencies = [ [[package]] name = "reth-payload-validator" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-rpc-types-engine", @@ -8905,7 +8911,7 @@ dependencies = [ [[package]] name = "reth-primitives" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "c-kzg", @@ -8919,7 +8925,7 @@ dependencies = [ [[package]] name = "reth-primitives-traits" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8946,13 +8952,13 @@ dependencies = [ "secp256k1 0.30.0", "serde", "serde_with", - "thiserror 2.0.12", + "thiserror 2.0.14", ] [[package]] name = "reth-provider" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8997,7 +9003,7 @@ dependencies = [ [[package]] name = "reth-prune" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-eips", @@ -9017,7 +9023,7 @@ dependencies = [ "reth-static-file-types", "reth-tokio-util", "rustc-hash 2.1.1", - "thiserror 2.0.12", + "thiserror 2.0.14", "tokio", "tracing", ] @@ -9025,7 +9031,7 @@ dependencies = [ [[package]] name = "reth-prune-types" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-primitives", "arbitrary", @@ -9033,13 +9039,13 @@ dependencies = [ "modular-bitfield", "reth-codecs", "serde", - "thiserror 2.0.12", + "thiserror 2.0.14", ] [[package]] name = "reth-ress-protocol" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -9058,7 +9064,7 @@ dependencies = [ [[package]] name = "reth-ress-provider" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -9085,7 +9091,7 @@ dependencies = [ [[package]] name = "reth-revm" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-primitives", "reth-primitives-traits", @@ -9098,7 +9104,7 @@ dependencies = [ [[package]] name = "reth-rpc" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-dyn-abi", @@ -9163,7 +9169,7 @@ dependencies = [ "serde", "serde_json", "sha2 0.10.9", - "thiserror 2.0.12", + "thiserror 2.0.14", "tokio", "tokio-stream", "tower", @@ -9174,7 +9180,7 @@ dependencies = [ [[package]] name = "reth-rpc-api" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-eips", "alloy-genesis", @@ -9202,7 +9208,7 @@ dependencies = [ [[package]] name = "reth-rpc-builder" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-network", "alloy-provider", @@ -9229,7 +9235,7 @@ dependencies = [ "reth-tasks", "reth-transaction-pool", "serde", - "thiserror 2.0.12", + "thiserror 2.0.14", "tokio", "tokio-util", "tower", @@ -9240,7 +9246,7 @@ dependencies = [ [[package]] name = "reth-rpc-convert" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-json-rpc", @@ -9259,13 +9265,13 @@ dependencies = [ "reth-primitives-traits", "reth-storage-api", "revm-context", - "thiserror 2.0.12", + "thiserror 2.0.14", ] [[package]] name = "reth-rpc-engine-api" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-eips", "alloy-primitives", @@ -9287,7 +9293,7 @@ dependencies = [ "reth-tasks", "reth-transaction-pool", "serde", - "thiserror 2.0.12", + "thiserror 2.0.14", "tokio", "tracing", ] @@ -9295,7 +9301,7 @@ dependencies = [ [[package]] name = "reth-rpc-eth-api" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-dyn-abi", @@ -9339,7 +9345,7 @@ dependencies = [ [[package]] name = "reth-rpc-eth-types" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-eips", @@ -9374,7 +9380,7 @@ dependencies = [ "revm-inspectors", "schnellru", "serde", - "thiserror 2.0.12", + "thiserror 2.0.14", "tokio", "tokio-stream", "tracing", @@ -9383,7 +9389,7 @@ dependencies = [ [[package]] name = "reth-rpc-layer" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-rpc-types-engine", "http 1.3.1", @@ -9397,7 +9403,7 @@ dependencies = [ [[package]] name = "reth-rpc-server-types" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-eips", "alloy-primitives", @@ -9413,7 +9419,7 @@ dependencies = [ [[package]] name = "reth-stages" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-eips", @@ -9455,7 +9461,7 @@ dependencies = [ "reth-trie-db", "serde", "tempfile", - "thiserror 2.0.12", + "thiserror 2.0.14", "tokio", "tracing", ] @@ -9463,7 +9469,7 @@ dependencies = [ [[package]] name = "reth-stages-api" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-eips", "alloy-primitives", @@ -9482,7 +9488,7 @@ dependencies = [ "reth-static-file", "reth-static-file-types", "reth-tokio-util", - "thiserror 2.0.12", + "thiserror 2.0.14", "tokio", "tracing", ] @@ -9490,7 +9496,7 @@ dependencies = [ [[package]] name = "reth-stages-types" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-primitives", "arbitrary", @@ -9504,7 +9510,7 @@ dependencies = [ [[package]] name = "reth-static-file" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-primitives", "parking_lot", @@ -9524,7 +9530,7 @@ dependencies = [ [[package]] name = "reth-static-file-types" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-primitives", "clap", @@ -9536,7 +9542,7 @@ dependencies = [ [[package]] name = "reth-storage-api" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-eips", @@ -9560,7 +9566,7 @@ dependencies = [ [[package]] name = "reth-storage-errors" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-eips", "alloy-primitives", @@ -9570,13 +9576,13 @@ dependencies = [ "reth-prune-types", "reth-static-file-types", "revm-database-interface", - "thiserror 2.0.12", + "thiserror 2.0.14", ] [[package]] name = "reth-tasks" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "auto_impl", "dyn-clone", @@ -9585,7 +9591,7 @@ dependencies = [ "pin-project", "rayon", "reth-metrics", - "thiserror 2.0.12", + "thiserror 2.0.14", "tokio", "tracing", "tracing-futures", @@ -9594,7 +9600,7 @@ dependencies = [ [[package]] name = "reth-testing-utils" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-eips", @@ -9610,7 +9616,7 @@ dependencies = [ [[package]] name = "reth-tokio-util" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "tokio", "tokio-stream", @@ -9620,7 +9626,7 @@ dependencies = [ [[package]] name = "reth-tracing" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "clap", "eyre", @@ -9635,7 +9641,7 @@ dependencies = [ [[package]] name = "reth-transaction-pool" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-eips", @@ -9665,7 +9671,7 @@ dependencies = [ "schnellru", "serde", "smallvec", - "thiserror 2.0.12", + "thiserror 2.0.14", "tokio", "tokio-stream", "tracing", @@ -9674,7 +9680,7 @@ dependencies = [ [[package]] name = "reth-trie" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-eips", @@ -9699,7 +9705,7 @@ dependencies = [ [[package]] name = "reth-trie-common" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-consensus", "alloy-primitives", @@ -9725,7 +9731,7 @@ dependencies = [ [[package]] name = "reth-trie-db" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-primitives", "reth-db-api", @@ -9738,7 +9744,7 @@ dependencies = [ [[package]] name = "reth-trie-parallel" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -9755,7 +9761,7 @@ dependencies = [ "reth-trie-common", "reth-trie-db", "reth-trie-sparse", - "thiserror 2.0.12", + "thiserror 2.0.14", "tokio", "tracing", ] @@ -9763,7 +9769,7 @@ dependencies = [ [[package]] name = "reth-trie-sparse" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -9782,7 +9788,7 @@ dependencies = [ [[package]] name = "reth-trie-sparse-parallel" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -9798,7 +9804,7 @@ dependencies = [ [[package]] name = "reth-zstd-compressors" version = "1.6.0" -source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b#f3555b169037072383086eb2ff07bca79a196dfb" +source = "git+https://github.com/clydemeng/reth.git?branch=parlia-6487f0b-simplified#863f7b4eeea34f4644b7cb3393d984fe9f14442a" dependencies = [ "zstd", ] @@ -9926,12 +9932,11 @@ dependencies = [ [[package]] name = "revm-bytecode" -version = "6.1.0" +version = "6.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6922f7f4fbc15ca61ea459711ff75281cc875648c797088c34e4e064de8b8a7c" +checksum = "70db41f111d3a17362b8bb4ca4c3a77469f9742162add3152838ef6aff523019" dependencies = [ "bitvec", - "once_cell", "phf", "revm-primitives", "serde", @@ -9987,9 +9992,9 @@ dependencies = [ [[package]] name = "revm-database" -version = "7.0.2" +version = "7.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61495e01f01c343dd90e5cb41f406c7081a360e3506acf1be0fc7880bfb04eb" +checksum = "6b66e2bc5924f60aa7233a0e2994337e636ff08f72e0e35e99755612dab1b8bd" dependencies = [ "alloy-eips", "revm-bytecode", @@ -10001,9 +10006,9 @@ dependencies = [ [[package]] name = "revm-database-interface" -version = "7.0.2" +version = "7.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20628d6cd62961a05f981230746c16854f903762d01937f13244716530bf98f" +checksum = "2659511acc5c6d5b3cde1908fbe0108981abe8bbf3a94a78d4a4317eb1807293" dependencies = [ "auto_impl", "either", @@ -10066,7 +10071,7 @@ dependencies = [ "revm", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.14", ] [[package]] @@ -10122,20 +10127,21 @@ dependencies = [ [[package]] name = "revm-primitives" -version = "20.1.0" +version = "20.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66145d3dc61c0d6403f27fc0d18e0363bb3b7787e67970a05c71070092896599" +checksum = "e62b900e249a4fc6904d9a76417a3acb711086e3a0ca325da77567f35d46a087" dependencies = [ "alloy-primitives", "num_enum", + "once_cell", "serde", ] [[package]] name = "revm-state" -version = "7.0.2" +version = "7.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cc830a0fd2600b91e371598e3d123480cd7bb473dd6def425a51213aa6c6d57" +checksum = "9f6ed349ee07a1d015307ff0f10f00660be93032ff4c6d9e72a79a84b8cb5101" dependencies = [ "bitflags 2.9.1", "revm-bytecode", @@ -10435,7 +10441,7 @@ dependencies = [ "openssl-probe", "rustls-pki-types", "schannel", - "security-framework 3.2.0", + "security-framework 3.3.0", ] [[package]] @@ -10472,7 +10478,7 @@ dependencies = [ "rustls-native-certs 0.8.1", "rustls-platform-verifier-android", "rustls-webpki 0.103.4", - "security-framework 3.2.0", + "security-framework 3.3.0", "security-framework-sys", "webpki-root-certs 0.26.11", "windows-sys 0.59.0", @@ -10507,9 +10513,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.21" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "rusty-fork" @@ -10700,9 +10706,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "3.2.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" +checksum = "80fb1d92c5028aa318b4b8bd7302a5bfcf48be96a37fc6fc790f806b0004ee0c" dependencies = [ "bitflags 2.9.1", "core-foundation 0.10.1", @@ -11044,7 +11050,7 @@ checksum = "297f631f50729c8c99b84667867963997ec0b50f32b2a7dbcab828ef0541e8bb" dependencies = [ "num-bigint", "num-traits", - "thiserror 2.0.12", + "thiserror 2.0.14", "time", ] @@ -11077,9 +11083,9 @@ checksum = "c1e9a774a6c28142ac54bb25d25562e6bcf957493a184f15ad4eebccb23e410a" [[package]] name = "slab" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" [[package]] name = "smallvec" @@ -11449,11 +11455,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.12" +version = "2.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +checksum = "0b0949c3a6c842cbde3f1686d6eea5a010516deb7085f79db747562d4102f41e" dependencies = [ - "thiserror-impl 2.0.12", + "thiserror-impl 2.0.14", ] [[package]] @@ -11469,9 +11475,9 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "2.0.12" +version = "2.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +checksum = "cc5b44b4ab9c2fdd0e0512e6bece8388e214c0749f5862b114cc5b7a25daf227" dependencies = [ "proc-macro2", "quote", @@ -12004,7 +12010,7 @@ dependencies = [ "rustls 0.23.31", "rustls-pki-types", "sha1", - "thiserror 2.0.12", + "thiserror 2.0.14", "utf-8", ] @@ -12157,9 +12163,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" +checksum = "f33196643e165781c20a5ead5582283a7dacbb87855d867fbc2df3f81eddc1be" dependencies = [ "getrandom 0.3.3", "js-sys", @@ -13051,7 +13057,7 @@ dependencies = [ "pharos", "rustc_version 0.4.1", "send_wrapper 0.6.0", - "thiserror 2.0.12", + "thiserror 2.0.14", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", diff --git a/Cargo.toml b/Cargo.toml index 016fcf1..5d9bd5a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,50 +16,48 @@ path = "src/main.rs" name = "snapshot-checker" path = "src/bin/snapshot_checker.rs" - - [dependencies] -reth = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b" } -reth-cli = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b" } -reth-cli-commands = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b" } -reth-basic-payload-builder = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b" } -reth-db = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b" } -reth-engine-local = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b" } -reth-chainspec = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b" } -reth-cli-util = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b" } -reth-discv4 = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b", features = ["test-utils"] } -reth-engine-primitives = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b" } -reth-ethereum-forks = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b", features = ["serde"] } -reth-ethereum-payload-builder = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b" } -reth-ethereum-primitives = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b" } -reth-eth-wire = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b" } -reth-eth-wire-types = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b" } -reth-evm = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b" } -reth-evm-ethereum = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b" } +reth = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified" } +reth-cli = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified" } +reth-cli-commands = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified" } +reth-basic-payload-builder = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified" } +reth-db = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified" } +reth-engine-local = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified" } +reth-chainspec = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified" } +reth-cli-util = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified" } +reth-discv4 = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified", features = ["test-utils"] } +reth-engine-primitives = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified" } +reth-ethereum-forks = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified", features = ["serde"] } +reth-ethereum-payload-builder = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified" } +reth-ethereum-primitives = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified" } +reth-eth-wire = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified" } +reth-eth-wire-types = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified" } +reth-evm = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified" } +reth-evm-ethereum = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified" } # reth-execution-types = { git = "https://github.com/clydemeng/reth.git", branch = "extend-8e0ff926b" } -reth-transaction-pool = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b" } -reth-node-core = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b" } -reth-node-api = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b" } -reth-node-builder = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b" } -reth-payload-builder = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b" } -reth-revm = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b" } -reth-network = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b", features = ["test-utils"] } -reth-network-p2p = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b" } -reth-network-api = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b" } -reth-node-ethereum = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b", features = ["test-utils"] } -reth-network-peers = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b" } -reth-payload-primitives = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b" } -reth-primitives = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b" } -reth-primitives-traits = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b" } -reth-provider = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b", features = ["test-utils"] } -reth-rpc-eth-api = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b" } -reth-rpc-engine-api = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b" } -reth-rpc-api = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b" } -reth-tracing = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b" } -reth-trie-common = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b" } -reth-trie-db = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b" } -reth-rpc = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b" } -reth-optimism-rpc = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b" } +reth-transaction-pool = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified" } +reth-node-core = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified" } +reth-node-api = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified" } +reth-node-builder = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified" } +reth-payload-builder = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified" } +reth-revm = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified" } +reth-network = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified", features = ["test-utils"] } +reth-network-p2p = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified" } +reth-network-api = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified" } +reth-node-ethereum = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified", features = ["test-utils"] } +reth-network-peers = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified" } +reth-payload-primitives = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified" } +reth-primitives = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified" } +reth-primitives-traits = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified" } +reth-provider = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified", features = ["test-utils"] } +reth-rpc-eth-api = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified" } +reth-rpc-engine-api = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified" } +reth-rpc-api = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified" } +reth-tracing = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified" } +reth-trie-common = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified" } +reth-trie-db = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified" } +reth-rpc = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified" } +reth-optimism-rpc = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified" } revm = "27.0.3" @@ -179,7 +177,7 @@ client = [ [dev-dependencies] # E2E test-suite support -reth-e2e-test-utils = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b" } +reth-e2e-test-utils = { git = "https://github.com/clydemeng/reth.git", branch = "parlia-6487f0b-simplified" } # (all other reth crates are pulled in automatically via workspace deps)