Skip to content

Commit

Permalink
Pass bailout flag to execution processor
Browse files Browse the repository at this point in the history
  • Loading branch information
Bartosz Zawistowski committed Sep 19, 2024
1 parent 7d8050e commit 4378224
Show file tree
Hide file tree
Showing 8 changed files with 20 additions and 13 deletions.
3 changes: 2 additions & 1 deletion silkworm/core/execution/execution.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@ namespace silkworm {
if (!rule_set) {
return ValidationResult::kUnknownProtocolRuleSet;
}
ExecutionProcessor processor{block, *rule_set, state, chain_config};
constexpr auto kBailout = false;
ExecutionProcessor processor{block, *rule_set, state, chain_config, kBailout};

if (const ValidationResult res = processor.execute_block(receipts); res != ValidationResult::kOk) {
return res;
Expand Down
3 changes: 2 additions & 1 deletion silkworm/core/execution/execution_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ namespace silkworm {

static constexpr auto kMiner{0x5a0b54d5dc17e0aadc383d2db43b0a0d3e029c4c_address};
static constexpr auto kSender{0xb685342b8c54347aad148e1f22eff3eb3eb29391_address};
static constexpr auto kBailout = false;

TEST_CASE("Execute two blocks") {
// ---------------------------------------
Expand Down Expand Up @@ -165,7 +166,7 @@ TEST_CASE("Execute block with tracing") {
std::vector<Receipt> receipts;
const auto rule_set{protocol::rule_set_factory(chain_config)};
REQUIRE(rule_set);
ExecutionProcessor processor{block, *rule_set, state, chain_config};
ExecutionProcessor processor{block, *rule_set, state, chain_config, kBailout};

BlockTracer block_tracer{};
processor.evm().add_tracer(block_tracer);
Expand Down
4 changes: 2 additions & 2 deletions silkworm/core/execution/processor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@
namespace silkworm {

ExecutionProcessor::ExecutionProcessor(const Block& block, protocol::RuleSet& rule_set, State& state,
const ChainConfig& config)
: state_{state}, rule_set_{rule_set}, evm_{block, state_, config} {
const ChainConfig& config, bool bailout)
: state_{state}, rule_set_{rule_set}, evm_{block, state_, config, bailout} {
evm_.beneficiary = rule_set.get_beneficiary(block.header);
evm_.transfer = rule_set.transfer_func();
}
Expand Down
2 changes: 1 addition & 1 deletion silkworm/core/execution/processor.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ class ExecutionProcessor {
ExecutionProcessor(const ExecutionProcessor&) = delete;
ExecutionProcessor& operator=(const ExecutionProcessor&) = delete;

ExecutionProcessor(const Block& block, protocol::RuleSet& rule_set, State& state, const ChainConfig& config);
ExecutionProcessor(const Block& block, protocol::RuleSet& rule_set, State& state, const ChainConfig& config, bool bailout);

/**
* Execute a transaction, but do not write to the DB yet.
Expand Down
12 changes: 7 additions & 5 deletions silkworm/core/execution/processor_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@

namespace silkworm {

static constexpr auto kBailout = false;

TEST_CASE("Zero gas price") {
Block block{};
block.header.number = 2'687'232;
Expand All @@ -45,7 +47,7 @@ TEST_CASE("Zero gas price") {

InMemoryState state;
auto rule_set{protocol::rule_set_factory(kMainnetConfig)};
ExecutionProcessor processor{block, *rule_set, state, kMainnetConfig};
ExecutionProcessor processor{block, *rule_set, state, kMainnetConfig, kBailout};

Receipt receipt;
processor.execute_transaction(txn, receipt);
Expand Down Expand Up @@ -85,7 +87,7 @@ TEST_CASE("No refund on error") {

InMemoryState state;
auto rule_set{protocol::rule_set_factory(kMainnetConfig)};
ExecutionProcessor processor{block, *rule_set, state, kMainnetConfig};
ExecutionProcessor processor{block, *rule_set, state, kMainnetConfig, kBailout};

Transaction txn{};
txn.nonce = nonce;
Expand Down Expand Up @@ -179,7 +181,7 @@ TEST_CASE("Self-destruct") {

InMemoryState state;
auto rule_set{protocol::rule_set_factory(kMainnetConfig)};
ExecutionProcessor processor{block, *rule_set, state, kMainnetConfig};
ExecutionProcessor processor{block, *rule_set, state, kMainnetConfig, kBailout};

processor.evm().state().add_to_balance(originator, kEther);
processor.evm().state().set_code(caller_address, caller_code);
Expand Down Expand Up @@ -327,7 +329,7 @@ TEST_CASE("Out of Gas during account re-creation") {
txn.set_sender(caller);

auto rule_set{protocol::rule_set_factory(kMainnetConfig)};
ExecutionProcessor processor{block, *rule_set, state, kMainnetConfig};
ExecutionProcessor processor{block, *rule_set, state, kMainnetConfig, kBailout};
processor.evm().state().add_to_balance(caller, kEther);

Receipt receipt;
Expand Down Expand Up @@ -370,7 +372,7 @@ TEST_CASE("Empty suicide beneficiary") {
InMemoryState state;

auto rule_set{protocol::rule_set_factory(kMainnetConfig)};
ExecutionProcessor processor{block, *rule_set, state, kMainnetConfig};
ExecutionProcessor processor{block, *rule_set, state, kMainnetConfig, kBailout};
processor.evm().state().add_to_balance(caller, kEther);

Receipt receipt;
Expand Down
3 changes: 2 additions & 1 deletion silkworm/core/protocol/blockchain.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,8 @@ ValidationResult Blockchain::insert_block(Block& block, bool check_state_root) {
}

ValidationResult Blockchain::execute_block(const Block& block, bool check_state_root) {
ExecutionProcessor processor{block, *rule_set_, state_, config_};
constexpr auto kBailout = false;
ExecutionProcessor processor{block, *rule_set_, state_, config_, kBailout};
processor.evm().state_pool = state_pool;
processor.evm().exo_evm = exo_evm;

Expand Down
3 changes: 2 additions & 1 deletion silkworm/db/test_util/test_database_context.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,8 @@ void populate_blocks(db::RWTxn& txn, const std::filesystem::path& tests_dir, InM

// FIX 4b: populate receipts and logs table
std::vector<silkworm::Receipt> receipts;
ExecutionProcessor processor{block, *ruleSet, state_buffer, *chain_config};
static constexpr auto kBailout = false;
ExecutionProcessor processor{block, *ruleSet, state_buffer, *chain_config, kBailout};
db::Buffer db_buffer{txn};
for (auto& block_txn : block.transactions) {
silkworm::Receipt receipt{};
Expand Down
3 changes: 2 additions & 1 deletion silkworm/node/execution/block/block_executor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@ BlockExecutor::BlockExecutor(const ChainConfig* chain_config, bool write_receipt
write_change_sets_{write_change_sets} {}

ValidationResult BlockExecutor::execute_single(const Block& block, db::Buffer& state_buffer, AnalysisCache& analysis_cache, ObjectPool<evmone::ExecutionState>& state_pool) {
ExecutionProcessor processor{block, *protocol_rule_set_, state_buffer, *chain_config_};
constexpr auto kBailout = false;
ExecutionProcessor processor{block, *protocol_rule_set_, state_buffer, *chain_config_, kBailout};
processor.evm().analysis_cache = &analysis_cache;
processor.evm().state_pool = &state_pool;

Expand Down

0 comments on commit 4378224

Please sign in to comment.