Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(rpc/rpc): gas and gasUsed in trace root only for ParityTrace #9761

Merged
merged 6 commits into from
Jul 25, 2024

Conversation

ZzPoLariszZ
Copy link
Contributor

Description

This pull request is Part 2/2 of fixing the bug where the gas and gasUsed fields in Parity Trace root are incorrect.

Part 1/2 paradigmxyz/revm-inspectors#171

Related Issues and Pull Requests

Problem

The gas and gasUsed fields in Geth Debug Trace root should be the gas limit and gas used for the entire transaction.

However, two fields in Parity Trace root should be the original ones.

Reproducible Example

With the latest version Reth v1.0.3, using trace_transaction() to trace
the transaction 0x03128677ee3a9623d20f3c677f423ccc592d126374bf32e331343dd1bdf38b61

curl http://localhost:8545 \
  -X POST \
  -H "Content-Type: application/json" \
  --data '{"method":"trace_transaction","params":["0x03128677ee3a9623d20f3c677f423ccc592d126374bf32e331343dd1bdf38b61"],"id":1,"jsonrpc":"2.0"}'  

From Reth

gas: 0x55493 (349331)
gasUsed: 0x32d16 (208150)

From Etherscan and QuickNode

gas: 0x4f227 (324135)
gasUsed: 0x36622 (222754)

Solution for reth

  1. Modify revm-inspectors part

  2. Then

    • remove with_transaction_gas_used() for Parity Trace

    • add with_transaction_gas_limit() for Geth Debug Trace

Miscellaneous

  • Actually, I love the current design, but the results are inconsistent with those of others.

  • When I used make pr to test the Reth Part, the issue make pr failed of lockfile #9381 still exists for me.

    I should only skip tests for lockfile and test them seperately.

@mattsse
Copy link
Collaborator

mattsse commented Jul 25, 2024

However, two fields in Parity Trace root should be the original ones.

can you please clarify what you mean by original here?

mattsse pushed a commit to paradigmxyz/revm-inspectors that referenced this pull request Jul 25, 2024
## Description

This pull request is Part 1/2 of fixing the bug where the `gas` and
`gasUsed` fields in Parity Trace root are incorrect.

Part 2/2 paradigmxyz/reth#9761

## Related Issues and Pull Requests

- Follow: ethereum/go-ethereum#27029
- Improve: paradigmxyz/reth#3678 and paradigmxyz/reth#3719
- Fix: paradigmxyz/reth#9142 with #170 
- Update: paradigmxyz/reth#3782

## Problem

The `gas` and `gasUsed` fields in Geth Debug Trace root should be the
gas limit and gas used for the entire transaction.

However, two fields in Parity Trace root should be the original ones.

### Reproducible Example

With the latest version Reth v1.0.3, using `trace_transaction()` to
trace
the transaction
`0x03128677ee3a9623d20f3c677f423ccc592d126374bf32e331343dd1bdf38b61`

```
curl http://localhost:8545 \
  -X POST \
  -H "Content-Type: application/json" \
  --data '{"method":"trace_transaction","params":["0x03128677ee3a9623d20f3c677f423ccc592d126374bf32e331343dd1bdf38b61"],"id":1,"jsonrpc":"2.0"}'  
```

**From Reth**

```
gas: 0x55493 (349331)
gasUsed: 0x32d16 (208150)
```

**From
[Etherscan](https://etherscan.io/vmtrace?txhash=0x03128677ee3a9623d20f3c677f423ccc592d126374bf32e331343dd1bdf38b61&type=parity#raw)
and QuickNode**

```
gas: 0x4f227 (324135)
gasUsed: 0x36622 (222754)
```

## Solution for `revm-inspectors`

1. Not modify `gas_limit` and `gas_used` in the trace root

    ```diff
    - gas_limit = context.env.tx.gas_limit;
    - trace.set_root_trace_gas_used(gas_used);
- trace.gas_used = gas_used(context.spec_id(), gas.spent(),
gas.refunded() as u64);
    ```

2. The modification in Step 1 will cause another problem

The `gas` field for Geth Debug Trace root will also be reset (not the
gas limitation for the entire transaction).

therefore, can define `set_transaction_gas_limit()` and
`with_transaction_gas_limit()` for Geth Debug,

which is similar to current `set_transaction_gas_used()` and
`with_transaction_gas_used()` for Parity.

3. Then, modify the Reth Part: 

`crates/rpc/rpc/src/trace.rs` and `crates/rpc/rpc/src/debug.rs` to
completely fix the bug.

## Miscellaneous

- Actually, I love the current design, but the results are inconsistent
with those of others.

- When I used `make pr` to test the Reth Part, the issue
paradigmxyz/reth#9381 still exists for me.

    I should only skip tests for `lockfile` and test them seperately.
Copy link
Collaborator

@mattsse mattsse left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

style nits,
new revm-inspectors release is out

crates/rpc/rpc/src/trace.rs Outdated Show resolved Hide resolved
crates/rpc/rpc/src/trace.rs Outdated Show resolved Hide resolved
crates/rpc/rpc/src/trace.rs Outdated Show resolved Hide resolved
crates/rpc/rpc/src/trace.rs Outdated Show resolved Hide resolved
crates/rpc/rpc/src/trace.rs Outdated Show resolved Hide resolved
crates/rpc/rpc/src/trace.rs Outdated Show resolved Hide resolved
crates/rpc/rpc/src/debug.rs Outdated Show resolved Hide resolved
@mattsse mattsse added C-bug An unexpected or incorrect behavior A-rpc Related to the RPC implementation labels Jul 25, 2024
Copy link
Collaborator

@mattsse mattsse left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can you update the revm-inspectors version in the root cargo toml, then should be okay

Cargo.toml Outdated Show resolved Hide resolved
@mattsse
Copy link
Collaborator

mattsse commented Jul 25, 2024

merging once compiles, hehe

@mattsse mattsse added this pull request to the merge queue Jul 25, 2024
Merged via the queue into paradigmxyz:main with commit c4bf5bb Jul 25, 2024
33 checks passed
@ZzPoLariszZ ZzPoLariszZ changed the title fix: gas and gasUsed in trace root only for ParityTrace fix(rpc/rpc): gas and gasUsed in trace root only for ParityTrace Jul 25, 2024
@ZzPoLariszZ ZzPoLariszZ deleted the fix-gas-used-trace-root branch July 28, 2024 20:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-rpc Related to the RPC implementation C-bug An unexpected or incorrect behavior
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Incorrect traces order for suicide call, and gas and value for create call
2 participants