From e1a5a15d20bbb0e3add58ba3eb8b89c4d09a2174 Mon Sep 17 00:00:00 2001 From: lupin012 <58134934+lupin012@users.noreply.github.com.> Date: Wed, 2 Oct 2024 20:19:39 +0200 Subject: [PATCH 1/2] impl providers for BlockNumberFromBlockHash & BlockHashFromBlockNumber --- cmd/dev/grpc_toolbox.cpp | 4 +++- silkworm/db/chain/remote_chain_storage.cpp | 8 +++++-- silkworm/db/chain/remote_chain_storage.hpp | 8 ++++++- .../db/chain/remote_chain_storage_test.cpp | 2 +- silkworm/db/kv/grpc/client/remote_client.cpp | 22 ++++++++++++++++++- silkworm/db/kv/grpc/client/remote_client.hpp | 4 ++++ .../db/kv/grpc/client/remote_client_test.cpp | 8 ++++++- .../db/kv/grpc/client/remote_transaction.cpp | 8 +++++-- .../db/kv/grpc/client/remote_transaction.hpp | 6 ++++- .../grpc/client/remote_transaction_test.cpp | 2 ++ silkworm/db/kv/state_changes_stream_test.cpp | 8 ++++++- .../rpc/core/estimate_gas_oracle_test.cpp | 12 ++++++++-- silkworm/rpc/core/evm_debug_test.cpp | 2 +- silkworm/rpc/core/evm_executor_test.cpp | 4 +++- silkworm/rpc/core/evm_trace_test.cpp | 2 +- silkworm/rpc/core/receipts_test.cpp | 2 +- silkworm/rpc/daemon.cpp | 4 +++- silkworm/rpc/ethdb/kv/backend_providers.hpp | 12 ++++++++++ silkworm/rpc/ethdb/kv/remote_database.cpp | 4 +++- silkworm/rpc/test_util/dummy_transaction.hpp | 2 +- 20 files changed, 104 insertions(+), 20 deletions(-) diff --git a/cmd/dev/grpc_toolbox.cpp b/cmd/dev/grpc_toolbox.cpp index 8175d4da8f..0dae7a379f 100644 --- a/cmd/dev/grpc_toolbox.cpp +++ b/cmd/dev/grpc_toolbox.cpp @@ -991,7 +991,9 @@ int execute_temporal_kv_query(const std::string& target, KVQueryFunc query_fu *grpc_context, &state_cache, rpc::ethdb::kv::block_provider(ð_backend), - rpc::ethdb::kv::block_number_from_txn_hash_provider(ð_backend)}; + rpc::ethdb::kv::block_number_from_txn_hash_provider(ð_backend), + rpc::ethdb::kv::block_number_from_block_hash_provider(ð_backend), + rpc::ethdb::kv::block_hash_from_block_number_provider(ð_backend)}; auto kv_service = client.service(); // NOLINTNEXTLINE(performance-unnecessary-value-param) diff --git a/silkworm/db/chain/remote_chain_storage.cpp b/silkworm/db/chain/remote_chain_storage.cpp index d058567fa9..95ec8be2b2 100644 --- a/silkworm/db/chain/remote_chain_storage.cpp +++ b/silkworm/db/chain/remote_chain_storage.cpp @@ -30,10 +30,14 @@ namespace silkworm::db::chain { RemoteChainStorage::RemoteChainStorage(kv::api::Transaction& tx, BlockProvider block_provider, - BlockNumberFromTxnHashProvider block_number_from_txn_hash_provider) + BlockNumberFromTxnHashProvider block_number_from_txn_hash_provider, + BlockNumberFromBlockHashProvider block_number_from_block_hash_provider, + BlockHashFromBlockNumberProvider block_hash_from_number_provider) : tx_{tx}, block_provider_{std::move(block_provider)}, - block_number_from_txn_hash_provider_{std::move(block_number_from_txn_hash_provider)} {} + block_number_from_txn_hash_provider_{std::move(block_number_from_txn_hash_provider)}, + block_number_from_block_hash_provider_{std::move(block_number_from_block_hash_provider)}, + block_hash_from_number_provider_{std::move(block_hash_from_number_provider)} {} Task RemoteChainStorage::read_chain_config() const { const auto genesis_block_hash{co_await read_canonical_block_hash(tx_, kEarliestBlockNumber)}; diff --git a/silkworm/db/chain/remote_chain_storage.hpp b/silkworm/db/chain/remote_chain_storage.hpp index 3afb4a88bb..63844898fe 100644 --- a/silkworm/db/chain/remote_chain_storage.hpp +++ b/silkworm/db/chain/remote_chain_storage.hpp @@ -28,6 +28,8 @@ namespace silkworm::db::chain { using BlockProvider = std::function(BlockNum, HashAsSpan, bool, Block&)>; using BlockNumberFromTxnHashProvider = std::function(HashAsSpan)>; +using BlockNumberFromBlockHashProvider = std::function(HashAsSpan)>; +using BlockHashFromBlockNumberProvider = std::function(BlockNum)>; //! RemoteChainStorage must be used when blockchain data is remote with respect to the running component, i.e. it is //! in remote database (accessed via gRPC KV I/F) or remote snapshot files (accessed via gRPC ETHBACKEND I/F) @@ -35,7 +37,9 @@ class RemoteChainStorage : public ChainStorage { public: RemoteChainStorage(kv::api::Transaction& tx, BlockProvider block_provider, - BlockNumberFromTxnHashProvider block_number_from_txn_hash_provider); + BlockNumberFromTxnHashProvider block_number_from_txn_hash_provider, + BlockNumberFromBlockHashProvider block_number_from_block_hash_provider, + BlockHashFromBlockNumberProvider block_hash_from_number_provider); ~RemoteChainStorage() override = default; [[nodiscard]] Task read_chain_config() const override; @@ -80,6 +84,8 @@ class RemoteChainStorage : public ChainStorage { kv::api::Transaction& tx_; BlockProvider block_provider_; BlockNumberFromTxnHashProvider block_number_from_txn_hash_provider_; + BlockNumberFromBlockHashProvider block_number_from_block_hash_provider_; + BlockHashFromBlockNumberProvider block_hash_from_number_provider_; }; } // namespace silkworm::db::chain diff --git a/silkworm/db/chain/remote_chain_storage_test.cpp b/silkworm/db/chain/remote_chain_storage_test.cpp index 47b1574873..65948f9276 100644 --- a/silkworm/db/chain/remote_chain_storage_test.cpp +++ b/silkworm/db/chain/remote_chain_storage_test.cpp @@ -48,7 +48,7 @@ static Bytes kChainConfig{*from_hex( struct RemoteChainStorageTest : public silkworm::test_util::ContextTestBase { test_util::MockTransaction transaction; - RemoteChainStorage storage{transaction, {}, {}}; + RemoteChainStorage storage{transaction, {}, {}, {}, {}}; }; TEST_CASE_METHOD(RemoteChainStorageTest, "read_chain_config") { diff --git a/silkworm/db/kv/grpc/client/remote_client.cpp b/silkworm/db/kv/grpc/client/remote_client.cpp index 030a4452c0..0c160a1740 100644 --- a/silkworm/db/kv/grpc/client/remote_client.cpp +++ b/silkworm/db/kv/grpc/client/remote_client.cpp @@ -43,6 +43,8 @@ class RemoteClientImpl final : public api::Service { api::StateCache* state_cache, chain::BlockProvider block_provider, chain::BlockNumberFromTxnHashProvider block_number_from_txn_hash_provider, + chain::BlockNumberFromBlockHashProvider block_number_from_block_hash_provider, + chain::BlockHashFromBlockNumberProvider block_hash_from_number_provider, rpc::DisconnectHook on_disconnect) : channel_{create_channel()}, stub_{proto::KV::NewStub(channel_)}, @@ -50,18 +52,24 @@ class RemoteClientImpl final : public api::Service { state_cache_{state_cache}, block_provider_{std::move(block_provider)}, block_number_from_txn_hash_provider_{std::move(block_number_from_txn_hash_provider)}, + block_number_from_block_hash_provider_{std::move(block_number_from_block_hash_provider)}, + block_hash_from_number_provider_{std::move(block_hash_from_number_provider)}, on_disconnect_{std::move(on_disconnect)} {} RemoteClientImpl(std::unique_ptr stub, agrpc::GrpcContext& grpc_context, api::StateCache* state_cache, chain::BlockProvider block_provider, chain::BlockNumberFromTxnHashProvider block_number_from_txn_hash_provider, + chain::BlockNumberFromBlockHashProvider block_number_from_block_hash_provider, + chain::BlockHashFromBlockNumberProvider block_hash_from_number_provider, rpc::DisconnectHook on_disconnect) : stub_{std::move(stub)}, grpc_context_{grpc_context}, state_cache_{state_cache}, block_provider_{std::move(block_provider)}, block_number_from_txn_hash_provider_{std::move(block_number_from_txn_hash_provider)}, + block_number_from_block_hash_provider_{std::move(block_number_from_block_hash_provider)}, + block_hash_from_number_provider_{std::move(block_hash_from_number_provider)}, on_disconnect_{std::move(on_disconnect)} {} ~RemoteClientImpl() override = default; @@ -80,7 +88,9 @@ class RemoteClientImpl final : public api::Service { grpc_context_, state_cache_, block_provider_, - block_number_from_txn_hash_provider_); + block_number_from_txn_hash_provider_, + block_number_from_block_hash_provider_, + block_hash_from_number_provider_); co_await tx->open(); co_return tx; } @@ -151,6 +161,8 @@ class RemoteClientImpl final : public api::Service { api::StateCache* state_cache_; chain::BlockProvider block_provider_; chain::BlockNumberFromTxnHashProvider block_number_from_txn_hash_provider_; + chain::BlockNumberFromBlockHashProvider block_number_from_block_hash_provider_; + chain::BlockHashFromBlockNumberProvider block_hash_from_number_provider_; rpc::DisconnectHook on_disconnect_; std::chrono::milliseconds min_backoff_timeout_{rpc::kDefaultMinBackoffReconnectTimeout}; std::chrono::milliseconds max_backoff_timeout_{rpc::kDefaultMaxBackoffReconnectTimeout}; @@ -161,12 +173,16 @@ RemoteClient::RemoteClient(const rpc::ChannelFactory& create_channel, api::StateCache* state_cache, chain::BlockProvider block_provider, chain::BlockNumberFromTxnHashProvider block_number_from_txn_hash_provider, + chain::BlockNumberFromBlockHashProvider block_number_from_block_hash_provider, + chain::BlockHashFromBlockNumberProvider block_hash_from_number_provider, rpc::DisconnectHook on_disconnect) : p_impl_{std::make_shared(create_channel, grpc_context, state_cache, std::move(block_provider), std::move(block_number_from_txn_hash_provider), + std::move(block_number_from_block_hash_provider), + std::move(block_hash_from_number_provider), std::move(on_disconnect))} {} RemoteClient::RemoteClient(std::unique_ptr stub, @@ -174,12 +190,16 @@ RemoteClient::RemoteClient(std::unique_ptr stub, api::StateCache* state_cache, chain::BlockProvider block_provider, chain::BlockNumberFromTxnHashProvider block_number_from_txn_hash_provider, + chain::BlockNumberFromBlockHashProvider block_number_from_block_hash_provider, + chain::BlockHashFromBlockNumberProvider block_hash_from_number_provider, rpc::DisconnectHook on_disconnect) : p_impl_{std::make_shared(std::move(stub), grpc_context, state_cache, std::move(block_provider), std::move(block_number_from_txn_hash_provider), + std::move(block_number_from_block_hash_provider), + std::move(block_hash_from_number_provider), std::move(on_disconnect))} {} // Must be here (not in header) because RemoteClientImpl size is necessary for std::unique_ptr in PIMPL idiom diff --git a/silkworm/db/kv/grpc/client/remote_client.hpp b/silkworm/db/kv/grpc/client/remote_client.hpp index 1e8832fc1c..4dc2bcba7f 100644 --- a/silkworm/db/kv/grpc/client/remote_client.hpp +++ b/silkworm/db/kv/grpc/client/remote_client.hpp @@ -40,6 +40,8 @@ struct RemoteClient : public api::Client { api::StateCache* state_cache, chain::BlockProvider block_provider, chain::BlockNumberFromTxnHashProvider block_number_from_txn_hash_provider, + chain::BlockNumberFromBlockHashProvider block_number_from_block_hash_provider, + chain::BlockHashFromBlockNumberProvider block_hash_from_number_provider, std::function()> on_disconnect = []() -> Task { co_return; }); RemoteClient( std::unique_ptr<::remote::KV::StubInterface> stub, @@ -47,6 +49,8 @@ struct RemoteClient : public api::Client { api::StateCache* state_cache, chain::BlockProvider block_provider, chain::BlockNumberFromTxnHashProvider block_number_from_txn_hash_provider, + chain::BlockNumberFromBlockHashProvider block_number_from_block_hash_provider, + chain::BlockHashFromBlockNumberProvider block_hash_from_number_provider, std::function()> on_disconnect = []() -> Task { co_return; }); ~RemoteClient() override; diff --git a/silkworm/db/kv/grpc/client/remote_client_test.cpp b/silkworm/db/kv/grpc/client/remote_client_test.cpp index cb9da2a785..578ee5013e 100644 --- a/silkworm/db/kv/grpc/client/remote_client_test.cpp +++ b/silkworm/db/kv/grpc/client/remote_client_test.cpp @@ -45,6 +45,10 @@ struct RemoteClientTestRunner : public TestRunner Task { co_return 0; }}; + chain::BlockNumberFromBlockHashProvider block_number_from_block_hash_provider{ + [](HashAsSpan) -> Task { co_return 0; }}; + chain::BlockHashFromBlockNumberProvider block_hash_from_block_number_provider{ + [](BlockNum) -> Task { co_return 0; }}; protected: RemoteClient make_api_client() override { @@ -52,7 +56,9 @@ struct RemoteClientTestRunner : public TestRunner RemoteTransaction::create_state(boost::asio::an } std::shared_ptr RemoteTransaction::create_storage() { - return std::make_shared(*this, block_provider_, block_number_from_txn_hash_provider_); + return std::make_shared(*this, block_provider_, block_number_from_txn_hash_provider_, block_number_from_block_hash_provider_, block_hash_from_number_provider_); } Task RemoteTransaction::domain_get(api::DomainPointQuery&& query) { // NOLINT(*-rvalue-reference-param-not-moved) diff --git a/silkworm/db/kv/grpc/client/remote_transaction.hpp b/silkworm/db/kv/grpc/client/remote_transaction.hpp index 412118550e..db5c2b89bc 100644 --- a/silkworm/db/kv/grpc/client/remote_transaction.hpp +++ b/silkworm/db/kv/grpc/client/remote_transaction.hpp @@ -43,7 +43,9 @@ class RemoteTransaction : public api::BaseTransaction { agrpc::GrpcContext& grpc_context, api::StateCache* state_cache, chain::BlockProvider block_provider, - chain::BlockNumberFromTxnHashProvider block_number_from_txn_hash_provider); + chain::BlockNumberFromTxnHashProvider block_number_from_txn_hash_provider, + chain::BlockNumberFromBlockHashProvider block_number_from_block_hash_provider, + chain::BlockHashFromBlockNumberProvider block_hash_from_number_provider); ~RemoteTransaction() override = default; uint64_t tx_id() const override { return tx_id_; } @@ -81,6 +83,8 @@ class RemoteTransaction : public api::BaseTransaction { chain::BlockProvider block_provider_; chain::BlockNumberFromTxnHashProvider block_number_from_txn_hash_provider_; + chain::BlockNumberFromBlockHashProvider block_number_from_block_hash_provider_; + chain::BlockHashFromBlockNumberProvider block_hash_from_number_provider_; std::map> cursors_; std::map> dup_cursors_; ::remote::KV::StubInterface& stub_; diff --git a/silkworm/db/kv/grpc/client/remote_transaction_test.cpp b/silkworm/db/kv/grpc/client/remote_transaction_test.cpp index 63c22d89c7..48e73e2792 100644 --- a/silkworm/db/kv/grpc/client/remote_transaction_test.cpp +++ b/silkworm/db/kv/grpc/client/remote_transaction_test.cpp @@ -40,6 +40,8 @@ struct RemoteTransactionTest : db::test_util::KVTestBase { grpc_context_, &state_cache_, {}, + {}, + {}, {}}; }; diff --git a/silkworm/db/kv/state_changes_stream_test.cpp b/silkworm/db/kv/state_changes_stream_test.cpp index 98cede5343..fdf73bc85a 100644 --- a/silkworm/db/kv/state_changes_stream_test.cpp +++ b/silkworm/db/kv/state_changes_stream_test.cpp @@ -85,6 +85,10 @@ struct RemoteStateChangesStreamTest : public StateChangesStreamTest { // We're not testing blocks here, so we don't care about proper block-number-from-txn-hash provider chain::BlockNumberFromTxnHashProvider block_number_from_txn_hash_provider{ [](HashAsSpan) -> Task { co_return 0; }}; + chain::BlockNumberFromBlockHashProvider block_number_from_block_hash_provider{ + [](HashAsSpan) -> Task { co_return 0; }}; + chain::BlockHashFromBlockNumberProvider block_hash_from_block_number_provider{ + [](BlockNum) -> Task { co_return 0; }}; RemoteClient make_remote_client(auto&& channel_or_stub) { return { @@ -92,7 +96,9 @@ struct RemoteStateChangesStreamTest : public StateChangesStreamTest { grpc_context_, state_cache.get(), block_provider, - block_number_from_txn_hash_provider}; + block_number_from_txn_hash_provider, + block_number_from_block_hash_provider, + block_hash_from_block_number_provider}; } }; diff --git a/silkworm/rpc/core/estimate_gas_oracle_test.cpp b/silkworm/rpc/core/estimate_gas_oracle_test.cpp index f3aed4b247..c106ce3681 100644 --- a/silkworm/rpc/core/estimate_gas_oracle_test.cpp +++ b/silkworm/rpc/core/estimate_gas_oracle_test.cpp @@ -105,8 +105,16 @@ TEST_CASE("estimate gas") { remote_db_test.grpc_context_, &remote_db_test.state_cache_, ethdb::kv::block_provider(&backend), - ethdb::kv::block_number_from_txn_hash_provider(&backend)); - const db::chain::RemoteChainStorage storage{*tx, ethdb::kv::block_provider(&backend), ethdb::kv::block_number_from_txn_hash_provider(&backend)}; + ethdb::kv::block_number_from_txn_hash_provider(&backend), + ethdb::kv::block_number_from_block_hash_provider(&backend), + ethdb::kv::block_hash_from_block_number_provider(&backend)); + const db::chain::RemoteChainStorage storage{ + *tx, + ethdb::kv::block_provider(&backend), + ethdb::kv::block_number_from_txn_hash_provider(&backend), + ethdb::kv::block_number_from_block_hash_provider(&backend), + ethdb::kv::block_hash_from_block_number_provider(&backend), + }; MockEstimateGasOracle estimate_gas_oracle{block_header_provider, account_reader, config, workers, *tx, storage}; SECTION("Call empty, always fails but success in last step") { diff --git a/silkworm/rpc/core/evm_debug_test.cpp b/silkworm/rpc/core/evm_debug_test.cpp index 2f3282a205..5cfcf2953b 100644 --- a/silkworm/rpc/core/evm_debug_test.cpp +++ b/silkworm/rpc/core/evm_debug_test.cpp @@ -57,7 +57,7 @@ struct DebugExecutorTest : public test_util::ServiceContextTestBase { boost::asio::any_io_executor io_executor{io_context_.get_executor()}; json::Stream stream{io_executor, writer}; test::BackEndMock backend; - RemoteChainStorage chain_storage{transaction, ethdb::kv::block_provider(&backend), ethdb::kv::block_number_from_txn_hash_provider(&backend)}; + RemoteChainStorage chain_storage{transaction, ethdb::kv::block_provider(&backend), ethdb::kv::block_number_from_txn_hash_provider(&backend), ethdb::kv::block_number_from_block_hash_provider(&backend), ethdb::kv::block_hash_from_block_number_provider(&backend)}; }; class TestDebugExecutor : DebugExecutor { diff --git a/silkworm/rpc/core/evm_executor_test.cpp b/silkworm/rpc/core/evm_executor_test.cpp index 83fa0a39fe..925546da4e 100644 --- a/silkworm/rpc/core/evm_executor_test.cpp +++ b/silkworm/rpc/core/evm_executor_test.cpp @@ -58,7 +58,9 @@ struct EVMExecutorTest : public test_util::ServiceContextTestBase { test::BackEndMock backend; RemoteChainStorage storage{transaction, ethdb::kv::block_provider(&backend), - ethdb::kv::block_number_from_txn_hash_provider(&backend)}; + ethdb::kv::block_number_from_txn_hash_provider(&backend), + ethdb::kv::block_number_from_block_hash_provider(&backend), + ethdb::kv::block_hash_from_block_number_provider(&backend)}; const uint64_t chain_id{11155111}; const ChainConfig* chain_config_ptr{lookup_chain_config(chain_id)}; BlockNum block_number{6'000'000}; diff --git a/silkworm/rpc/core/evm_trace_test.cpp b/silkworm/rpc/core/evm_trace_test.cpp index 783fb92520..7d47358393 100644 --- a/silkworm/rpc/core/evm_trace_test.cpp +++ b/silkworm/rpc/core/evm_trace_test.cpp @@ -60,7 +60,7 @@ struct TraceCallExecutorTest : public test_util::ServiceContextTestBase { StringWriter writer{4096}; boost::asio::any_io_executor io_executor{io_context_.get_executor()}; std::unique_ptr backend = std::make_unique(); - RemoteChainStorage chain_storage{transaction, ethdb::kv::block_provider(backend.get()), ethdb::kv::block_number_from_txn_hash_provider(backend.get())}; + RemoteChainStorage chain_storage{transaction, ethdb::kv::block_provider(backend.get()), ethdb::kv::block_number_from_txn_hash_provider(backend.get()), ethdb::kv::block_number_from_block_hash_provider(backend.get()), ethdb::kv::block_hash_from_block_number_provider(backend.get())}; }; #ifndef SILKWORM_SANITIZE diff --git a/silkworm/rpc/core/receipts_test.cpp b/silkworm/rpc/core/receipts_test.cpp index 3155677c91..a7a83f1f5a 100644 --- a/silkworm/rpc/core/receipts_test.cpp +++ b/silkworm/rpc/core/receipts_test.cpp @@ -227,7 +227,7 @@ TEST_CASE("get_receipts") { WorkerPool pool{1}; db::test_util::MockTransaction transaction; std::unique_ptr backend = std::make_unique(); - silkworm::db::chain::RemoteChainStorage chain_storage{transaction, ethdb::kv::block_provider(backend.get()), ethdb::kv::block_number_from_txn_hash_provider(backend.get())}; + silkworm::db::chain::RemoteChainStorage chain_storage{transaction, ethdb::kv::block_provider(backend.get()), ethdb::kv::block_number_from_txn_hash_provider(backend.get()), ethdb::kv::block_number_from_block_hash_provider(backend.get()), ethdb::kv::block_hash_from_block_number_provider(backend.get())}; SECTION("null receipts without data") { const silkworm::BlockWithHash block_with_hash{}; diff --git a/silkworm/rpc/daemon.cpp b/silkworm/rpc/daemon.cpp index 765173d397..8b9623d5ad 100644 --- a/silkworm/rpc/daemon.cpp +++ b/silkworm/rpc/daemon.cpp @@ -82,6 +82,8 @@ static std::string get_library_versions() { return library_versions; } +using ethdb::kv::block_hash_from_block_number_provider; +using ethdb::kv::block_number_from_block_hash_provider; using ethdb::kv::block_number_from_txn_hash_provider; using ethdb::kv::block_provider; @@ -318,7 +320,7 @@ std::unique_ptr Daemon::make_kv_client(rpc::ClientContext& auto* backend{must_use_private_service(io_context)}; if (settings_.standalone) { return std::make_unique( - create_channel_, grpc_context, state_cache, block_provider(backend), block_number_from_txn_hash_provider(backend)); + create_channel_, grpc_context, state_cache, block_provider(backend), block_number_from_txn_hash_provider(backend), block_number_from_block_hash_provider(backend), block_hash_from_block_number_provider(backend)); } // TODO(canepat) finish implementation and clean-up composition of objects here db::kv::api::StateChangeRunner runner{io_context.get_executor()}; diff --git a/silkworm/rpc/ethdb/kv/backend_providers.hpp b/silkworm/rpc/ethdb/kv/backend_providers.hpp index 06cbbfeff7..4a49407943 100644 --- a/silkworm/rpc/ethdb/kv/backend_providers.hpp +++ b/silkworm/rpc/ethdb/kv/backend_providers.hpp @@ -33,4 +33,16 @@ inline db::chain::BlockNumberFromTxnHashProvider block_number_from_txn_hash_prov }; } +inline db::chain::BlockNumberFromBlockHashProvider block_number_from_block_hash_provider(ethbackend::BackEnd* backend) { + return [backend](HashAsSpan hash) -> Task { + co_return co_await backend->get_block_number_from_hash(hash); + }; +} + +inline db::chain::BlockHashFromBlockNumberProvider block_hash_from_block_number_provider(ethbackend::BackEnd* backend) { + return [backend](BlockNum number) -> Task { + co_return co_await backend->get_block_hash_from_block_number(number); + }; +} + } // namespace silkworm::rpc::ethdb::kv diff --git a/silkworm/rpc/ethdb/kv/remote_database.cpp b/silkworm/rpc/ethdb/kv/remote_database.cpp index 923f0d207a..253016681e 100644 --- a/silkworm/rpc/ethdb/kv/remote_database.cpp +++ b/silkworm/rpc/ethdb/kv/remote_database.cpp @@ -52,7 +52,9 @@ Task> RemoteDatabase::begin() { grpc_context_, state_cache_, block_provider(backend_), - block_number_from_txn_hash_provider(backend_)); + block_number_from_txn_hash_provider(backend_), + block_number_from_block_hash_provider(backend_), + block_hash_from_block_number_provider(backend_)); co_await txn->open(); SILK_TRACE << "RemoteDatabase::begin " << this << " txn: " << txn.get() << " end"; co_return txn; diff --git a/silkworm/rpc/test_util/dummy_transaction.hpp b/silkworm/rpc/test_util/dummy_transaction.hpp index 0462333c9d..32d30edd35 100644 --- a/silkworm/rpc/test_util/dummy_transaction.hpp +++ b/silkworm/rpc/test_util/dummy_transaction.hpp @@ -75,7 +75,7 @@ class DummyTransaction : public db::kv::api::BaseTransaction { } std::shared_ptr create_storage() override { - return std::make_shared(*this, ethdb::kv::block_provider(&backend_), ethdb::kv::block_number_from_txn_hash_provider(&backend_)); + return std::make_shared(*this, ethdb::kv::block_provider(&backend_), ethdb::kv::block_number_from_txn_hash_provider(&backend_), ethdb::kv::block_number_from_block_hash_provider(&backend_), ethdb::kv::block_hash_from_block_number_provider(&backend_)); } Task close() override { co_return; } From 865de926e345666179cc8d7ae6bf307492e2c38b Mon Sep 17 00:00:00 2001 From: lupin012 <58134934+lupin012@users.noreply.github.com.> Date: Wed, 2 Oct 2024 20:38:02 +0200 Subject: [PATCH 2/2] fix clang_tidy error --- silkworm/rpc/test_util/mock_back_end.hpp | 1 - 1 file changed, 1 deletion(-) diff --git a/silkworm/rpc/test_util/mock_back_end.hpp b/silkworm/rpc/test_util/mock_back_end.hpp index c2a1008d99..78067f0b24 100644 --- a/silkworm/rpc/test_util/mock_back_end.hpp +++ b/silkworm/rpc/test_util/mock_back_end.hpp @@ -20,7 +20,6 @@ #include #include -#include #include #include