Skip to content

Commit 2d57336

Browse files
authored
rpcdaemon: fix data storage access in local state (#2221)
1 parent 10a7e39 commit 2d57336

File tree

5 files changed

+12
-9
lines changed

5 files changed

+12
-9
lines changed

.github/workflows/rpc-integration-tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ jobs:
2727
- name: Checkout RPC Tests Repository & Install Requirements
2828
run: |
2929
rm -rf ${{runner.workspace}}/rpc-tests
30-
git -c advice.detachedHead=false clone --depth 1 --branch v0.35.0 https://github.com/erigontech/rpc-tests ${{runner.workspace}}/rpc-tests
30+
git -c advice.detachedHead=false clone --depth 1 --branch v0.36.0 https://github.com/erigontech/rpc-tests ${{runner.workspace}}/rpc-tests
3131
cd ${{runner.workspace}}/rpc-tests
3232
pip3 install -r requirements.txt
3333

silkworm/db/state/local_state.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,15 @@ uint64_t LocalState::previous_incarnation(const evmc::address& /*address*/) cons
4646
}
4747

4848
std::optional<BlockHeader> LocalState::read_header(BlockNum block_number, const evmc::bytes32& block_hash) const noexcept {
49-
return db::read_header(txn_, block_number, block_hash);
49+
return data_model_.read_header(block_number, block_hash);
5050
}
5151

5252
bool LocalState::read_body(BlockNum block_number, const evmc::bytes32& block_hash, BlockBody& out) const noexcept {
53-
return db::read_body(txn_, block_hash, block_number, out);
53+
return data_model_.read_body(block_hash, block_number, out);
5454
}
5555

5656
std::optional<intx::uint256> LocalState::total_difficulty(BlockNum block_number, const evmc::bytes32& block_hash) const noexcept {
57-
return db::read_total_difficulty(txn_, block_number, block_hash);
57+
return data_model_.read_total_difficulty(block_number, block_hash);
5858
}
5959

6060
evmc::bytes32 LocalState::state_root_hash() const {
@@ -68,7 +68,7 @@ BlockNum LocalState::current_canonical_block() const {
6868

6969
std::optional<evmc::bytes32> LocalState::canonical_hash(BlockNum block_number) const {
7070
// This method should not be called by EVM::execute
71-
return db::read_canonical_hash(txn_, block_number);
71+
return data_model_.read_canonical_hash(block_number);
7272
}
7373

7474
} // namespace silkworm::db::state

silkworm/db/state/local_state.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ namespace silkworm::db::state {
3434
class LocalState : public State {
3535
public:
3636
explicit LocalState(BlockNum block_number, mdbx::env chaindata_env)
37-
: block_number_{block_number}, txn_{std::move(chaindata_env)} {}
37+
: block_number_{block_number}, txn_{std::move(chaindata_env)}, data_model_{txn_} {}
3838

3939
std::optional<Account> read_account(const evmc::address& address) const noexcept override;
4040

@@ -91,6 +91,7 @@ class LocalState : public State {
9191
private:
9292
BlockNum block_number_;
9393
mutable db::ROTxnManaged txn_;
94+
db::DataModel data_model_;
9495
};
9596

9697
} // namespace silkworm::db::state

silkworm/rpc/core/evm_trace.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1561,6 +1561,10 @@ Task<TraceDeployResult> TraceCallExecutor::trace_deploy_transaction(const silkwo
15611561
co_return deploy_result;
15621562
}
15631563

1564+
Task<TraceCallResult> TraceCallExecutor::trace_transaction(const silkworm::Block& block, const rpc::Transaction& transaction, const TraceConfig& config) {
1565+
return execute(block.header.number - 1, block, transaction, gsl::narrow<int32_t>(transaction.transaction_index), config);
1566+
}
1567+
15641568
Task<std::vector<Trace>> TraceCallExecutor::trace_transaction(const BlockWithHash& block_with_hash, const rpc::Transaction& transaction) {
15651569
std::vector<Trace> traces;
15661570

silkworm/rpc/core/evm_trace.hpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -498,10 +498,8 @@ class TraceCallExecutor {
498498
Task<std::vector<TraceCallResult>> trace_block_transactions(const silkworm::Block& block, const TraceConfig& config);
499499
Task<TraceCallResult> trace_call(const silkworm::Block& block, const Call& call, const TraceConfig& config);
500500
Task<TraceManyCallResult> trace_calls(const silkworm::Block& block, const std::vector<TraceCall>& calls);
501-
Task<TraceCallResult> trace_transaction(const silkworm::Block& block, const rpc::Transaction& transaction, const TraceConfig& config) {
502-
return execute(block.header.number - 1, block, transaction, gsl::narrow<int32_t>(transaction.transaction_index), config);
503-
}
504501
Task<TraceDeployResult> trace_deploy_transaction(const silkworm::Block& block, const evmc::address& contract_address);
502+
Task<TraceCallResult> trace_transaction(const silkworm::Block& block, const rpc::Transaction& transaction, const TraceConfig& config);
505503
Task<std::vector<Trace>> trace_transaction(const silkworm::BlockWithHash& block, const rpc::Transaction& transaction);
506504
Task<TraceEntriesResult> trace_transaction_entries(const TransactionWithBlock& transaction_with_block);
507505
Task<std::string> trace_transaction_error(const TransactionWithBlock& transaction_with_block);

0 commit comments

Comments
 (0)