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

eth_multicall Implementers' Meeting #1241

Closed
poojaranjan opened this issue Jan 7, 2025 · 3 comments
Closed

eth_multicall Implementers' Meeting #1241

poojaranjan opened this issue Jan 7, 2025 · 3 comments

Comments

@poojaranjan
Copy link
Contributor

poojaranjan commented Jan 7, 2025

Meeting Info

📅 Subscribe to the Ethereum Protocol Call calendar for calendar invites

Resources

Ideas for eth_simulateV2
PEEPanEIP#135: Eth Simulate with Oleg and Killari
https://eips.ethereum.org/EIPS/eip-4399
https://docs.login.xyz/general-information/siwe-overview
https://ethresear.ch/t/fork-choice-enforced-inclusion-lists-focil-a-simple-committee-based-inclusion-list-proposal/19870

Agenda

Add more discussion items or async updates.

The next meeting is scheduled for January 20, 2025 at 12:00 UTC

@poojaranjan
Copy link
Contributor Author

Recording: https://youtu.be/HKjT5O74lx4

@bomanaps
Copy link

Agreed Action Items and Implementation Decisions

Tracing Enhancements

  1. Add new tracing methods and derive specifications from implementations.
  2. Specify the outer trace object structure while treating block traces as a black box.
  3. Align EatSimulator implementation across all clients.

Transaction and Block Tracing Strategies

  1. Explore adding a trace_simulate method for debugging transactions.
  2. Propose tracing both transactions and blocks, capturing state roots between transactions.
  3. Support client-specific tracing methods.
  4. Consider creating separate namespaces for Geth and Parity traces to improve organization.
  5. Potentially add client-specific namespaces for enhanced tracing methods.

eth_simulate Parameter Extensions

  1. Propose adding an optional RLP return parameter to eth_simulate for v2 documentation.
  2. Suggest including a hidden parameter to return RLP data alongside the standard JSON response.

Test Suite and Reliability Challenges

  1. Investigate issues with duplicate blocks caused by total difficulty pegged to zero.
  2. Reduced failing test cases from 83 to 72; duplicate block issues remain a significant challenge.
  3. Regular updates to the Hive test suite; participants are encouraged to report any discrepancies.
  4. Observed non-deterministic test failures likely linked to race conditions or shared state issues.

Debugging Consensus Differences

Methods to Obtain RLPs

  1. Use debug_getBadBlocks: Temporary RLP dumps saved to disk.
  2. Automatic dumps for RLP receipts and traces in cases of potential consensus issues.
  3. Access traces via archive nodes.

RLP Sharing

  1. Exchange block and transaction RLPs between clients to identify discrepancies during consensus differences.
  2. Current practices include:
    • Retrieving temporary or on-disk RLP dumps with debug_getBadBlocks.
    • Auto-dumping receipts and traces for potential issues.
    • Accessing traces from archive nodes.

Challenges with eth_simulate

  1. RLPs and traces aren't easily retrieved for eth_simulate calls since they are transient.

Suggestions:

  1. Add a hidden parameter to eth_simulate to return RLPs.
  2. Introduce a new method like eth_simulateTrace for detailed analysis.

Tracing Approaches

  1. Clients like Geth and Parity offer tracing configurations that could include debug and parity namespaces.
  2. Heavier options may suit debugging since they're not gas-accounted and require more memory.

Hive Tests and Non-Deterministic Failures

Potential Issues

  1. Race conditions or shared states during parallel test runs.
  2. Non-deterministic failures, especially with eth_simulate calls.

Challenges

  1. Debugging Hive tests is complicated due to the transient nature of simulation calls and limitations in output retrieval.

Proposed Solutions:

  1. Add hidden or optional parameters to eth_simulate to return RLPs directly.
  2. Enhance RPC output or adapt Hive tests for direct access.
  3. Modify client configurations to enable auto-dumping traces during specific test executions.

Cross-Client Consistency

  1. While most clients (Erigon, Besu, etc.) support parity-like traces, Geth does not, leading to inconsistencies in tooling and debugging workflows.
  2. Ensuring parity in debugging outputs across clients can streamline comparisons and troubleshooting.

Implementation Recommendations

For Debugging Enhancements

  1. Add a separate, heavy trace method in the debug namespace, distinct from eth_simulate, to avoid production interference.
  2. Ensure compatibility with existing client tracing standards for tools like block explorers.

For Persistent Debugging Output

  1. Allow configuration for logging RLPs or traces to permanent locations instead of temp files for easier retrieval and analysis.

Short-Term

  1. Add parameters to eth_simulate to optionally return RLP or trace data.
  2. Implement temporary programmatic tracing to capture simulation-specific traces.

Long-Term

  1. Develop a uniform method for tracing and debugging, potentially adopting shared standards across clients.
  2. Address shared state or race condition issues in tests and simulations to improve consistency and reliability.

Communication

  1. Share findings and insights with team members like Rohit and Sina to foster collaborative debugging.
  2. Document procedures for enabling and utilizing new debugging features to facilitate broader adoption.

@poojaranjan
Copy link
Contributor Author

Closing in favor of #1248

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants