-
Notifications
You must be signed in to change notification settings - Fork 2.8k
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
feat: Support block and header versions gql #1848
feat: Support block and header versions gql #1848
Conversation
…ttps://github.com/FuelLabs/fuel-core into bvrooman/feat/support-block-and-header-versions-gql
crates/client/src/client/schema.rs
Outdated
|
||
#[derive(cynic::QueryFragment, Clone, Debug, Eq, PartialEq)] | ||
#[cynic(schema_path = "./assets/schema.sdl")] | ||
pub struct Version { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I moved this out of chain.rs
and into the parent level schema.rs
for reuse in other submodules.
This PR updates the relevant snapshot tests. However, it does not appear that we have tests for all resources against the GQL server-level API or client API (integration or mock GQL), meaning I did not add automated tests that verify the version returned by the GQL server . We have some high level tests for specific actions and resources like TXs but it could be worth having more tests for GQL responses (as long as this responsibility lies with |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looking good. Can you add a test to tests/tests/blocks.rs
that checks the version?
edit: I just saw your last comment. Yeah. I think tests/tests/blocks.rs
is the right place for that coverage
This is a bit tricky: The version isn't actually a field on the client
Because we don't have these, I created some contrived versions and tests here: https://github.com/FuelLabs/fuel-core/pull/1852/files#diff-b43da8aec184b70c3e3ac74b3f156eb2142bf651b724ccfb3d7dc9e6d7d70b01R120. This is just for reference, but should illustrate the kinds of tests we can have in the future, and why we can't really test for that now. |
#[derive(cynic::QueryFragment, Clone, Debug)] | ||
#[cynic(schema_path = "./assets/schema.sdl")] | ||
pub struct Block { | ||
pub version: Version, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Updated to use enum
at the async-graphql
server level and at the cynic
client level. This gives us exhaustive variant checks.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good to me=)
crates/fuel-core/src/schema.rs
Outdated
pub struct Version(u8); | ||
|
||
#[Object] | ||
impl Version { | ||
async fn value(&self) -> scalars::U8 { | ||
self.0.into() | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we can remove this one=)
Okay. That makes sense. I feel like someone mentioned creating something like
variant that we could use to show upgradability. Maybe I misheard. But I'm kinda impartial to something like that. On one hand it would be a decent tracer bullet to prove that we have upgradability, but it also doesn't really capture any desired behavior. Obviously we could get rid of it when we add a real version, but we could also just add the test once we add thet variant. 🤷 |
I like the idea. I hacked together some "test" blocks in another branch to ensure the functionality, which is how I discovered that our previous approach (using Adding a test block variant will require adding the supporting test code. This means adding test code to all the match statements, places requiring destructuring of the block into parts (transactions, etc), and other areas touched. The cost of this is added maintenance and code clutter. And ultimately, this may be fine. I can understand reasons to do it and not to do it. I'd like to try it locally with a cleaner version of my above mentioned branch, including using the proper compiler flags. I will see how it sits and if it still makes sense in practice. |
After spending some time on adding the For one, this kind of test requires supporting the For two, supporting this variant introduces test code that requires maintenance. There are a few places that require us to retrieve details about the See this commit for details. In the end, I recommend against codifying this test. |
This reverts commit 90d3829.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
## Version v0.27.0 ### Added - [#1898](#1898): Enforce increasing of the `Executor::VERSION` on each release. ### Changed - [#1906](#1906): Makes `cli::snapshot::Command` members public such that clients can create and execute snapshot commands programmatically. This enables snapshot execution in external programs, such as the regenesis test suite. - [#1891](#1891): Regenesis now preserves `FuelBlockMerkleData` and `FuelBlockMerkleMetadata` in the off-chain table. These tables are checked when querying message proofs. - [#1886](#1886): Use ref to `Block` in validation code - [#1876](#1876): Updated benchmark to include the worst scenario for `CROO` opcode. Also include consensus parameters in bench output. - [#1879](#1879): Return the old behaviour for the `discovery_works` test. - [#1848](#1848): Added `version` field to the `Block` and `BlockHeader` GraphQL entities. Added corresponding `version` field to the `Block` and `BlockHeader` client types in `fuel-core-client`. - [#1873](#1873): Separate dry runs from block production in executor code, remove `ExecutionKind` and `ExecutionType`, remove `thread_block_transaction` concept, remove `PartialBlockComponent` type, refactor away `inner` functions. - [#1900](#1900): Update the root README as `fuel-core run` no longer has `--chain` as an option. It has been replaced by `--snapshot`. #### Breaking - [#1894](#1894): Use testnet configuration for local testnet. - [#1894](#1894): Removed support for helm chart. - [#1910](#1910): `fuel-vm` upgraded to `0.50.0`. More information in the [changelog](https://github.com/FuelLabs/fuel-vm/releases/tag/v0.50.0). ## What's Changed * feat: Support block and header versions gql by @bvrooman in #1848 * Updated `croo` opcode benchmark to depend on the contract size by @xgreenx in #1876 * Return the old behaviour for the `discovery_works` test by @xgreenx in #1879 * Weekly `cargo update` by @github-actions in #1880 * Separate production from dry runs in executor & Cleanup all execution paths :) by @MitchTurner in #1873 * Use ref instead of owned `Block` in validation by @MitchTurner in #1886 * Weekly `cargo update` by @github-actions in #1893 * ci: fix typos programmatically by @sdankel in #1890 * feat: Preserve message proofs post-regenesis by @bvrooman in #1891 * chore: update README fuel-core run options by @K1-R1 in #1900 * Weekly `cargo update` by @github-actions in #1903 * chore: Make snapshot command members pub accessible by @bvrooman in #1906 * Use testnet configuration for local testnet by @xgreenx in #1894 * Enforce increasing of the `Executor::VERSION` on each release by @xgreenx in #1898 * Bumped the version of the `fuel-vm` to `0.50.0` by @xgreenx in #1910 ## New Contributors * @K1-R1 made their first contribution in #1900 **Full Changelog**: v0.26.0...v0.27.0
Related issues:
Block
andBlockHeader
in the GraphQL API #1796This PR adds a
version
field to theBlock
andBlockHeader
entities returned by the GraphQL API.Additionally, the
Block
andBlockHeader
client types are updated to include theversion
as well.Checklist
Before requesting review
After merging, notify other teams
[Add or remove entries as needed]