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

Execution tracing: GraphQL query to get storage inputs for past blocks #2491

Open
wants to merge 29 commits into
base: master
Choose a base branch
from

Conversation

Dentosal
Copy link
Member

@Dentosal Dentosal commented Dec 11, 2024

Description

To support local debugging and execution tracing, we need to add an API that returns the state that VM needs to execute transactions. This is done by recording all database accesses during tx validation, called storage read replay (bikeshedding in progress). This data is then exposed as-is through GraphQL. The API is non-trivial to consume, but a seperate client is proviced, see https://github.com/FuelLabs/execution-trace

The implementation exposes database table names and representations directly. Maintaining backwards compatibility with this could turn out to be quite hard.

Follow-ups:

Example query:

mutation {
  storageReadReplay(height:"4") { column, key, value }
}

TODO

  • Move behind --debug flag

Open questions:

  • Do we really want --debug flag to enabled this, as opposed to super-high query cost or a separate flag to enable?
  • What should the query cost be?

Checklist

  • Breaking changes are clearly marked as such in the PR description and changelog: No breaking changes!
  • New behavior is reflected in tests
  • The specification matches the implemented behavior: This is outside spec scope.

Before requesting review

  • I have reviewed the code myself
  • I have created follow-up issues caused by this PR and linked them here

After merging, notify other teams

See the VM PR FuelLabs/fuel-vm#881.

@Dentosal Dentosal added enhancement New feature or request fuel-block-executor wasm WASM-based block execution labels Dec 11, 2024
@Dentosal Dentosal self-assigned this Dec 11, 2024
@Dentosal Dentosal force-pushed the dento/execution-trace branch from 8d80d7b to 3ba2bc7 Compare December 19, 2024 15:18
@Dentosal Dentosal changed the title Execution tracing for past blocks Execution tracing: add GraphQL endpoint to get storage inputs for past blocks Jan 15, 2025
@Dentosal Dentosal changed the title Execution tracing: add GraphQL endpoint to get storage inputs for past blocks Execution tracing: GraphQL query to get storage inputs for past blocks Jan 15, 2025
Dentosal added a commit to FuelLabs/fuels-rs that referenced this pull request Jan 17, 2025
- Related to #1432

# Release notes

In this release, we:

- Changed `ABIDecoder` methods to take `std::io::Read` instead of
`&[u8]`, allowing it to be used in a streaming manner.

# Summary

`ABIDecoder` methods take `bytes: impl std::io::Read` instead of `bytes:
&[u8]`. This allows decoding abi types without having to know the size
in advance. This is particularly useful when reading them directly from
VM memory, which will be used by the indexer after
FuelLabs/fuel-core#2491 is done.

# Breaking Changes

`ABIDecoder` methods take `bytes: impl std::io::Read` instead of `bytes:
&[u8]`. Callers using arrays or `Vec` must change the argument from
`&value` to `value.as_slice()`.

# Checklist

- [x] All **changes** are **covered** by **tests** (or not applicable)
- [x] All **changes** are **documented** (or not applicable)
- [x] I **reviewed** the **entire PR** myself (preferably, on GH UI)
- [x] I **described** all **Breaking Changes** (or there's none)

---------

Co-authored-by: hal3e <[email protected]>
Co-authored-by: Ahmed Sagdati <[email protected]>
Co-authored-by: segfault-magnet <[email protected]>
@Dentosal Dentosal marked this pull request as ready for review January 24, 2025 23:43
@Dentosal Dentosal requested a review from a team January 24, 2025 23:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request fuel-block-executor wasm WASM-based block execution
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants