-
Notifications
You must be signed in to change notification settings - Fork 48
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
Project Idea: Compare Tracing API outputs across clients #43
Comments
@timbeiko I'd like take on this project👍! |
@timbeiko @hansmrtn Sounds super interesting for me too! A mix of market research, documentation and a real use case. How we might proceed? |
Possible step 4: Write an EIP which defines a standard for tracing APIs |
@pipermerriam that has been tried (https://eips.ethereum.org/EIPS/eip-3155) but it never really took off. I think it's probably easier at this point to document the differences and then either clients can harmonize (and then we can write an EIP which describes things as they are vs. "as we'd like them to be"), or users can know how to handle the various edge cases 😅 |
It seems hardhat has done a good job mapping out the differences. When using tools that don't work well with a specific node version (e.g. Brownie not parsing Erigon's traces correctly), I found that putting a hardhat fork between the node and the tool often solves the problem. Hardhat "normalizes" the trace. |
I would like to help on this 100% ! |
Guys just to see a rough approximation of the APIs. Waiting for our first meeting to meet you. Project: Compare Tracing API outputs across clients APIs available (approximately): go-ethereum: Protocols .- RPC interface (remote procedure call from a server to a client) Go packages (to be embedded) for DApps End go-ethereum Open ethereum: The Trace module: transaction processing The Ad-hoc Tracing API Transactions (trace) 3 (trace_call, trace_rawTransaction, previously mined - trace_replayTransaction (archive node or within recent 1000 blocks)) The Transaction-Trace Filtering API Externality trace on any transaction executed throughout the OpenEthereum chain (canonical ?) Returned: CREATE s, SUICIDE s, CALL, input, output, gas usage, amount transferred, success status / each individual action. JSON-RPC methods Ad-hoc Tracing (5!) trace_ replayTransaction Object - Block traces. Transaction-Trace Filtering (4!) trace_ block Array - Block traces, end Open Ethereum Nethermind (7) see JSON - RPCs: trace. block returns ParityTxTraceFromStore object rawTransaction ParityTxTraceFromReplay object replayBlockTransactions ParityTxTraceFromReplay object replayTransaction ParityTxTraceFromReplay object transaction ParityTxTraceFromStore object end Nethermind Erigon (client written in Go, PoW - execution): OpenEthereum trace-related routines (9) Transaction-Trace Filtering Ad-hoc Tracing end Erigon Besu (Apache 2.0 / Java) client TRACE API methods (3!) trace_ replayBlockTransactions array of objects - list of transaction trace objects (includes revert reason !) transaction array of objects - list of calls to other contracts, one object per call. end Besu |
Besu also has some tracing APIs under DEBUG. |
👍🏻 |
Here is a repo that we can work on: Please fork it and PR if you'd like to contribute https://github.com/hansmrtn/tracing-apis 😄 |
We (TrueBlocks) are also interested in this. We have both OpenEtheruem and Erigon archive nodes running and have been doing a lot of testing against both. Over about 300 tests across all the Recently, we scraped all 13,400,000 blocks using I think it would be good to start with a gold standard for the |
This is a possible set of trace-related test cases presented as |
Hi below you will find nethermind and geth scripts for block and transaction traces. Also you will be able to see a block and transaction returned object from both clients. https://github.com/JEAlfonsoP/evm-tracing-comparison besu is next. |
One of the main reason for the "stickiness" of clients is their tracing APIs. When sophisticated users (e.g. exchanges, block explorers, infrastructure providers, etc.) need to read the data from Ethereum, not only do they need the full blocks/transactions, but they also require the entire traces for them. Different clients provide different ways to access these traces, and applications tend to be built around their client of choice's specific output.
To make it easier for users to swap clients, ideally these trace formats would be standardized. A first step towards getting there, is having a clear view of the various tracing APIs across clients, and how their output differs. At a high level, what I would suggest is:
The text was updated successfully, but these errors were encountered: