Skip to content

Commit d67417a

Browse files
authored
rpcdaemon: substitute read_block...() with read_header() (#2877)
1 parent cba271f commit d67417a

File tree

5 files changed

+25
-11
lines changed

5 files changed

+25
-11
lines changed

silkworm/rpc/commands/debug_api.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ Task<void> DebugRpcApi::handle_debug_account_range(const nlohmann::json& request
7676
try {
7777
auto start = std::chrono::system_clock::now();
7878
core::AccountDumper dumper{*tx};
79-
DumpAccounts dump_accounts = co_await dumper.dump_accounts(*block_cache_, block_num_or_hash, start_address, max_result, exclude_code, exclude_storage);
79+
DumpAccounts dump_accounts = co_await dumper.dump_accounts(block_num_or_hash, start_address, max_result, exclude_code, exclude_storage);
8080
auto end = std::chrono::system_clock::now();
8181
std::chrono::duration<double> elapsed_seconds = end - start;
8282
SILK_DEBUG << "dump_accounts: elapsed " << elapsed_seconds.count() << " sec";
@@ -216,8 +216,8 @@ Task<void> DebugRpcApi::handle_debug_storage_range_at(const nlohmann::json& requ
216216
try {
217217
const auto chain_storage = tx->make_storage();
218218
const BlockReader reader{*chain_storage, *tx};
219-
const auto block_with_hash = co_await reader.read_block_by_hash(*block_cache_, block_hash);
220-
if (!block_with_hash) {
219+
const auto header = co_await chain_storage->read_header(block_hash);
220+
if (!header) {
221221
SILK_WARN << "debug_storage_range_at: block not found, hash: " << evmc::hex(block_hash);
222222
nlohmann::json result = {{"storage", nullptr}, {"nextKey", nullptr}};
223223
reply = make_json_content(request, result);
@@ -246,7 +246,7 @@ Task<void> DebugRpcApi::handle_debug_storage_range_at(const nlohmann::json& requ
246246
return count++ < max_result;
247247
};
248248

249-
const auto min_tx_num = co_await tx->first_txn_num_in_block(block_with_hash->block.header.number);
249+
const auto min_tx_num = co_await tx->first_txn_num_in_block(header->number);
250250
const auto from_tx_num = min_tx_num + tx_index + 1; // for system txn in the beginning of block
251251

252252
StorageWalker storage_walker{*tx};

silkworm/rpc/core/account_dumper.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
namespace silkworm::rpc::core {
2323

2424
Task<DumpAccounts> AccountDumper::dump_accounts(
25-
BlockCache& cache,
2625
const BlockNumOrHash& block_num_or_hash,
2726
const evmc::address& start_address,
2827
int16_t max_result,
@@ -32,15 +31,15 @@ Task<DumpAccounts> AccountDumper::dump_accounts(
3231
const auto chain_storage = transaction_.make_storage();
3332

3433
const BlockReader block_reader{*chain_storage, transaction_};
35-
const auto block_with_hash = co_await block_reader.read_block_by_block_num_or_hash(cache, block_num_or_hash);
36-
if (!block_with_hash) {
34+
const auto header = co_await block_reader.read_header_by_block_num_or_hash(block_num_or_hash);
35+
if (!header) {
3736
throw std::invalid_argument("dump_accounts: block not found");
3837
}
3938

40-
dump_accounts.root = block_with_hash->block.header.state_root;
39+
dump_accounts.root = header->state_root;
4140

4241
auto key = db::code_domain_key(start_address);
43-
const auto block_num = block_with_hash->block.header.number + 1;
42+
const auto block_num = header->number + 1;
4443
const auto start_txn_number = co_await transaction_.first_txn_num_in_block(block_num);
4544

4645
db::kv::api::DomainRangeRequest query{

silkworm/rpc/core/account_dumper.hpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ class AccountDumper {
2424
AccountDumper& operator=(const AccountDumper&) = delete;
2525

2626
Task<DumpAccounts> dump_accounts(
27-
BlockCache& cache,
2827
const BlockNumOrHash& block_num_or_hash,
2928
const evmc::address& start_address,
3029
int16_t max_result,

silkworm/rpc/core/block_reader.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,20 @@ Task<std::shared_ptr<BlockWithHash>> BlockReader::read_block_by_block_num_or_has
9393
throw std::runtime_error{"invalid block_num_or_hash value"};
9494
}
9595

96+
Task<std::optional<BlockHeader>> BlockReader::read_header_by_block_num_or_hash(const BlockNumOrHash& block_num_or_hash) const {
97+
if (block_num_or_hash.is_number()) { // NOLINT(bugprone-branch-clone)
98+
co_return co_await chain_storage_.read_canonical_header(block_num_or_hash.number());
99+
}
100+
if (block_num_or_hash.is_hash()) {
101+
co_return co_await chain_storage_.read_header(block_num_or_hash.hash());
102+
}
103+
if (block_num_or_hash.is_tag()) {
104+
auto [block_num, ignore] = co_await get_block_num(block_num_or_hash.tag(), /*latest_required=*/false);
105+
co_return co_await chain_storage_.read_canonical_header(block_num);
106+
}
107+
throw std::runtime_error{"invalid block_num_or_hash value"};
108+
}
109+
96110
Task<std::optional<TransactionWithBlock>> BlockReader::read_transaction_by_hash(BlockCache& cache, const evmc::bytes32& transaction_hash) const {
97111
const auto result = co_await chain_storage_.read_block_num_by_transaction_hash(transaction_hash);
98112
if (!result) {

silkworm/rpc/core/block_reader.hpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,9 @@ class BlockReader {
7474

7575
Task<bool> is_latest_block_num(const BlockNumOrHash& block_num_or_hash) const;
7676

77-
Task<std::optional<BlockHeader>> read_header(BlockNum block_num) { co_return co_await chain_storage_.read_canonical_header(block_num); }
77+
Task<std::optional<BlockHeader>> read_header(BlockNum block_num) const { return chain_storage_.read_canonical_header(block_num); }
78+
79+
Task<std::optional<BlockHeader>> read_header_by_block_num_or_hash(const BlockNumOrHash& block_num_or_hash) const;
7880

7981
private:
8082
Task<BlockNum> get_forkchoice_block_num(std::string_view block_hash_tag) const;

0 commit comments

Comments
 (0)