Skip to content

Commit

Permalink
state: Properly use cumulative_gas_used in receipt encoding
Browse files Browse the repository at this point in the history
  • Loading branch information
rodiazet committed Aug 21, 2023
1 parent 7cef356 commit 52efeb7
Show file tree
Hide file tree
Showing 4 changed files with 10 additions and 4 deletions.
6 changes: 4 additions & 2 deletions test/state/state.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,9 @@ std::variant<TransactionReceipt, std::error_code> transition(State& state, const
std::erase_if(state.get_accounts(),
[](const std::pair<const address, Account>& p) noexcept { return p.second.destructed; });

auto receipt = TransactionReceipt{tx.type, result.status_code, gas_used, host.take_logs(), {}};
// Cumulative gas used is unknown in this scope.
auto receipt = TransactionReceipt{tx.type, result.status_code, gas_used, {}, host.take_logs(),
{}};

// Cannot put it into constructor call because logs are std::moved from host instance.
receipt.logs_bloom_filter = compute_bloom_filter(receipt.logs);
Expand Down Expand Up @@ -275,7 +277,7 @@ std::variant<TransactionReceipt, std::error_code> transition(State& state, const
{
const auto prefix = receipt.type == Transaction::Type::eip1559 ? bytes{0x02} : bytes{};
return prefix + rlp::encode_tuple(receipt.status == EVMC_SUCCESS,
static_cast<uint64_t>(receipt.gas_used),
static_cast<uint64_t>(receipt.cumulative_gas_used),
bytes_view(receipt.logs_bloom_filter), receipt.logs);
}

Expand Down
3 changes: 3 additions & 0 deletions test/state/state.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,10 @@ struct TransactionReceipt
{
Transaction::Type type = Transaction::Type::legacy;
evmc_status_code status = EVMC_INTERNAL_ERROR;
/// Amount of gas used by this transaction.
int64_t gas_used = 0;
/// Amount of gas used by this and previous transactions in the block.
int64_t cumulative_gas_used = 0;
std::vector<Log> logs;
BloomFilter logs_bloom_filter;
};
Expand Down
1 change: 1 addition & 0 deletions test/t8n/t8n.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,7 @@ int main(int argc, const char* argv[])
j_receipt["transactionHash"] = hex0x(computed_tx_hash);
j_receipt["gasUsed"] = hex0x(static_cast<uint64_t>(receipt.gas_used));
cumulative_gas_used += receipt.gas_used;
receipt.cumulative_gas_used = cumulative_gas_used;
j_receipt["cumulativeGasUsed"] = hex0x(cumulative_gas_used);

j_receipt["blockHash"] = hex0x(bytes32{});
Expand Down
4 changes: 2 additions & 2 deletions test/unittests/state_mpt_hash_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ TEST(state_mpt_hash, legacy_and_eip1559_receipt_three_logs_no_logs)
TransactionReceipt receipt0{};
receipt0.type = evmone::state::Transaction::Type::legacy;
receipt0.status = EVMC_SUCCESS;
receipt0.gas_used = 0x24522;
receipt0.cumulative_gas_used = 0x24522;

Log l0;
l0.addr = 0x84bf5c35c54a994c72ff9d8b4cca8f5034153a2c_address;
Expand Down Expand Up @@ -238,7 +238,7 @@ TEST(state_mpt_hash, legacy_and_eip1559_receipt_three_logs_no_logs)
TransactionReceipt receipt1{};
receipt1.type = evmone::state::Transaction::Type::eip1559;
receipt1.status = EVMC_SUCCESS;
receipt1.gas_used = 0x2cd9b;
receipt1.cumulative_gas_used = 0x2cd9b;
receipt1.logs_bloom_filter = compute_bloom_filter(receipt1.logs);

EXPECT_EQ(mpt_hash(std::array{receipt0, receipt1}),
Expand Down

0 comments on commit 52efeb7

Please sign in to comment.