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

Use fuel-vm 0.49.0 with new transactions types #1822

Merged
merged 44 commits into from
Apr 16, 2024
Merged

Conversation

xgreenx
Copy link
Collaborator

@xgreenx xgreenx commented Apr 11, 2024

Closes #1753
Closes #1754
Closes #1546

The change upgrade fuel-vm to 0.49 introducing Upgrade and Upload transactions.

Supporting these transactions allows the upgrade of consensus parameters and state transition functions for the whole network.

The change adds basic e2e tests. More advanced use cases will be tested in the #1622.

Checklist

  • Breaking changes are clearly marked as such in the PR description and changelog
  • New behavior is reflected in tests

Before requesting review

  • I have reviewed the code myself

After merging, notify other teams

xgreenx and others added 29 commits April 6, 2024 15:35
Updated CHANGELOG.md
…ers-from-database' into feature/featch-consensus-parameters-from-database
…atabase

# Conflicts:
#	CHANGELOG.md
#	crates/fuel-core/src/service/adapters.rs
#	crates/fuel-core/src/service/adapters/graphql_api.rs
#	crates/fuel-core/src/service/adapters/producer.rs
#	crates/fuel-core/src/service/adapters/txpool.rs
#	crates/fuel-core/src/service/sub_services.rs
#	crates/services/producer/src/block_producer.rs
#	crates/services/producer/src/block_producer/gas_price.rs
#	crates/services/producer/src/block_producer/tests.rs
#	crates/services/txpool/src/service.rs
Fixed the compilation of the debug image.
Use WASM executor in some tests.
@xgreenx xgreenx self-assigned this Apr 11, 2024
@xgreenx xgreenx added the breaking A breaking api change label Apr 11, 2024
@xgreenx xgreenx marked this pull request as ready for review April 11, 2024 18:54
@xgreenx xgreenx requested a review from a team April 11, 2024 18:55
Cargo.toml Outdated
@@ -131,3 +131,6 @@ itertools = { version = "0.12", default-features = false }
insta = "1.8"
tempfile = "3.4"
tikv-jemallocator = "0.5"

[patch.crates-io]
Copy link
Member

Choose a reason for hiding this comment

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

I don't think these should be here anymore

@@ -12,3 +12,6 @@ fuel-core-types = { path = "../../crates/types", default-features = false, featu
] }

[workspace]

[patch.crates-io]
Copy link
Member

Choose a reason for hiding this comment

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

And not this either

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

It is here since fuel-vm is not released yet=D I created PR in advance. It is ready for review and only waits for a release.

@xgreenx xgreenx requested a review from a team April 11, 2024 19:00
Comment on lines +475 to +476
CheckedTransaction::Create(_) => {
Err(async_graphql::Error::new("`Create` is not supported"))
Copy link
Member

Choose a reason for hiding this comment

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

Why is this not mentioned in the changelog? Why are we removing the functionality?

@@ -719,10 +735,18 @@ mod test {
fn storage_with_state_transition(
next_version: StateTransitionBytecodeVersion,
) -> Storage {
const BYTECODE_ROOT: Bytes32 = Bytes32::zeroed();
Copy link
Member

Choose a reason for hiding this comment

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

Why are we allowed to use zeroed root here? Adding a comment to the code would be nice.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Added comment to the test

@xgreenx xgreenx requested review from Dentosal and a team April 11, 2024 19:15
Base automatically changed from feature/use-bytecode-from-database to master April 15, 2024 10:51
@xgreenx xgreenx merged commit df417f7 into master Apr 16, 2024
33 checks passed
@xgreenx xgreenx deleted the feature/fuel-vm-0.49.0 branch April 16, 2024 14:05
@xgreenx xgreenx mentioned this pull request Apr 18, 2024
4 tasks
xgreenx added a commit that referenced this pull request Apr 18, 2024
## Version v0.25.0

### Fixed

- [#1821](#1821): Can handle
missing tables in snapshot.
- [#1814](#1814): Bugfix: the
`iter_all_by_prefix` was not working for all tables. The change adds a
`Rust` level filtering.

### Added

- [#1831](#1831): Included the
total gas and fee used by transaction into `TransactionStatus`.
- [#1821](#1821): Propagate
shutdown signal to (re)genesis. Also add progress bar for (re)genesis.
- [#1813](#1813): Added back
support for `/health` endpoint.
- [#1799](#1799): Snapshot
creation is now concurrent.
- [#1811](#1811): Regenesis
now preserves old blocks and transactions for GraphQL API.

### Changed

- [#1833](#1833): Regenesis of
`SpentMessages` and `ProcessedTransactions`.
- [#1830](#1830): Use
versioning enum for WASM executor input and output.
- [#1816](#1816): Updated the
upgradable executor to fetch the state transition bytecode from the
database when the version doesn't match a native one. This change
enables the WASM executor in the "production" build and requires a
`wasm32-unknown-unknown` target.
- [#1812](#1812): Follow-up PR
to simplify the logic around parallel snapshot creation.
- [#1809](#1809): Fetch
`ConsensusParameters` from the database
- [#1808](#1808): Fetch
consensus parameters from the provider.

#### Breaking

- [#1826](#1826): The changes
make the state transition bytecode part of the `ChainConfig`. It
guarantees the state transition's availability for the network's first
blocks.
The change has many minor improvements in different areas related to the
state transition bytecode:
- The state transition bytecode lies in its own
file(`state_transition_bytecode.wasm`) along with the chain config file.
The `ChainConfig` loads it automatically when `ChainConfig::load` is
called and pushes it back when `ChainConfig::write` is called.
- The `fuel-core` release bundle also contains the
`fuel-core-wasm-executor.wasm` file of the corresponding executor
version.
- The regenesis process now considers the last block produced by the
previous network. When we create a (re)genesis block of a new network,
it has the `height = last_block_of_old_netowkr + 1`. It continues the
old network and doesn't overlap blocks(before, we had `old_block.height
== new_genesis_block.hegiht`).
- Along with the new block height, the regenesis process also increases
the state transition bytecode and consensus parameters versions. It
guarantees that a new network doesn't use values from the previous
network and allows us not to migrate `StateTransitionBytecodeVersions`
and `ConsensusParametersVersions` tables.
- Added a new CLI argument, `native-executor-version,` that allows
overriding of the default version of the native executor. It can be
useful for side rollups that have their own history of executor
upgrades.
    - Replaced:
      
      ```rust
               let file = std::fs::File::open(path)?;
               let mut snapshot: Self = serde_json::from_reader(&file)?;
      ```
      
      with a:
      
      ```rust
               let mut json = String::new();
               std::fs::File::open(&path)
.with_context(|| format!("Could not open snapshot file: {path:?}"))?
                   .read_to_string(&mut json)?;
let mut snapshot: Self = serde_json::from_str(json.as_str())?;
      ```
      because it is 100 times faster for big JSON files.
- Updated all tests to use `Config::local_node_*` instead of working
with the `SnapshotReader` directly. It is the preparation of the tests
for the futures bumps of the `Executor::VERSION`. When we increase the
version, all tests continue to use
`GenesisBlock.state_transition_bytecode = 0` while the version is
different, which forces the usage of the WASM executor, while for tests,
we still prefer to test native execution. The `Config::local_node_*`
handles it and forces the executor to use the native version.
- Reworked the `build.rs` file of the upgradable executor. The script
now caches WASM bytecode to avoid recompilation. Also, fixed the issue
with outdated WASM bytecode. The script reacts on any modifications of
the `fuel-core-wasm-executor` and forces recompilation (it is why we
need the cache), so WASM bytecode always is actual now.
- [#1822](#1822): Removed
support of `Create` transaction from debugger since it doesn't have any
script to execute.
- [#1822](#1822): Use `fuel-vm
0.49.0` with new transactions types - `Upgrade` and `Upload`. Also added
`max_bytecode_subsections` field to the `ConsensusParameters` to limit
the number of bytecode subsections in the state transition bytecode.
- [#1816](#1816): Updated the
upgradable executor to fetch the state transition bytecode from the
database when the version doesn't match a native one. This change
enables the WASM executor in the "production" build and requires a
`wasm32-unknown-unknown` target.

### Before requesting review
- [x] I have reviewed the code myself

### After merging, notify other teams

- [x] [Rust SDK](https://github.com/FuelLabs/fuels-rs/)
- [x] [Sway compiler](https://github.com/FuelLabs/sway/)
- [x] DevOps

## What's Changed
* Add PR template by @Dentosal in
#1806
* feat: Parallellize snapshot creation by @segfault-magnet in
#1799
* Follow-up PR to simplify the logic around parallel snapshot creation
by @xgreenx in #1812
* Bugfix: the `iter_all_by_prefix` was not working for all tables by
@xgreenx in #1814
* Added back support for `/health` endpoint by @xgreenx in
#1813
* Fetch consensus parameters from the provider by @xgreenx in
#1808
* Fetch `ConsensusParameters` from the database by @xgreenx in
#1809
* Handle FTI messages in executor by @Voxelot in
#1787
* Use state transition bytecode from the database by @xgreenx in
#1816
* feat: (re)genesis graceful shutdown by @segfault-magnet in
#1821
* Use `fuel-vm 0.49.0` with new transactions types by @xgreenx in
#1822
* Included the total gas and fee into `TransactionStatus` by @xgreenx in
#1831
* Use versioning enum for WASM executor input and output by @xgreenx in
#1830
* Support upgradability of the consensus parameters and state transition
bytecode in genesis by @xgreenx in
#1826
* Store old blocks and txs after regenesis by @Dentosal in
#1811
* Regenesis of `SpentMessages` and `ProcessedTransactions` by @xgreenx
in #1833


**Full Changelog**:
v0.24.2...v0.25.0
crypto523 pushed a commit to crypto523/fuel-core that referenced this pull request Oct 7, 2024
## Version v0.25.0

### Fixed

- [#1821](FuelLabs/fuel-core#1821): Can handle
missing tables in snapshot.
- [#1814](FuelLabs/fuel-core#1814): Bugfix: the
`iter_all_by_prefix` was not working for all tables. The change adds a
`Rust` level filtering.

### Added

- [#1831](FuelLabs/fuel-core#1831): Included the
total gas and fee used by transaction into `TransactionStatus`.
- [#1821](FuelLabs/fuel-core#1821): Propagate
shutdown signal to (re)genesis. Also add progress bar for (re)genesis.
- [#1813](FuelLabs/fuel-core#1813): Added back
support for `/health` endpoint.
- [#1799](FuelLabs/fuel-core#1799): Snapshot
creation is now concurrent.
- [#1811](FuelLabs/fuel-core#1811): Regenesis
now preserves old blocks and transactions for GraphQL API.

### Changed

- [#1833](FuelLabs/fuel-core#1833): Regenesis of
`SpentMessages` and `ProcessedTransactions`.
- [#1830](FuelLabs/fuel-core#1830): Use
versioning enum for WASM executor input and output.
- [#1816](FuelLabs/fuel-core#1816): Updated the
upgradable executor to fetch the state transition bytecode from the
database when the version doesn't match a native one. This change
enables the WASM executor in the "production" build and requires a
`wasm32-unknown-unknown` target.
- [#1812](FuelLabs/fuel-core#1812): Follow-up PR
to simplify the logic around parallel snapshot creation.
- [#1809](FuelLabs/fuel-core#1809): Fetch
`ConsensusParameters` from the database
- [#1808](FuelLabs/fuel-core#1808): Fetch
consensus parameters from the provider.

#### Breaking

- [#1826](FuelLabs/fuel-core#1826): The changes
make the state transition bytecode part of the `ChainConfig`. It
guarantees the state transition's availability for the network's first
blocks.
The change has many minor improvements in different areas related to the
state transition bytecode:
- The state transition bytecode lies in its own
file(`state_transition_bytecode.wasm`) along with the chain config file.
The `ChainConfig` loads it automatically when `ChainConfig::load` is
called and pushes it back when `ChainConfig::write` is called.
- The `fuel-core` release bundle also contains the
`fuel-core-wasm-executor.wasm` file of the corresponding executor
version.
- The regenesis process now considers the last block produced by the
previous network. When we create a (re)genesis block of a new network,
it has the `height = last_block_of_old_netowkr + 1`. It continues the
old network and doesn't overlap blocks(before, we had `old_block.height
== new_genesis_block.hegiht`).
- Along with the new block height, the regenesis process also increases
the state transition bytecode and consensus parameters versions. It
guarantees that a new network doesn't use values from the previous
network and allows us not to migrate `StateTransitionBytecodeVersions`
and `ConsensusParametersVersions` tables.
- Added a new CLI argument, `native-executor-version,` that allows
overriding of the default version of the native executor. It can be
useful for side rollups that have their own history of executor
upgrades.
    - Replaced:
      
      ```rust
               let file = std::fs::File::open(path)?;
               let mut snapshot: Self = serde_json::from_reader(&file)?;
      ```
      
      with a:
      
      ```rust
               let mut json = String::new();
               std::fs::File::open(&path)
.with_context(|| format!("Could not open snapshot file: {path:?}"))?
                   .read_to_string(&mut json)?;
let mut snapshot: Self = serde_json::from_str(json.as_str())?;
      ```
      because it is 100 times faster for big JSON files.
- Updated all tests to use `Config::local_node_*` instead of working
with the `SnapshotReader` directly. It is the preparation of the tests
for the futures bumps of the `Executor::VERSION`. When we increase the
version, all tests continue to use
`GenesisBlock.state_transition_bytecode = 0` while the version is
different, which forces the usage of the WASM executor, while for tests,
we still prefer to test native execution. The `Config::local_node_*`
handles it and forces the executor to use the native version.
- Reworked the `build.rs` file of the upgradable executor. The script
now caches WASM bytecode to avoid recompilation. Also, fixed the issue
with outdated WASM bytecode. The script reacts on any modifications of
the `fuel-core-wasm-executor` and forces recompilation (it is why we
need the cache), so WASM bytecode always is actual now.
- [#1822](FuelLabs/fuel-core#1822): Removed
support of `Create` transaction from debugger since it doesn't have any
script to execute.
- [#1822](FuelLabs/fuel-core#1822): Use `fuel-vm
0.49.0` with new transactions types - `Upgrade` and `Upload`. Also added
`max_bytecode_subsections` field to the `ConsensusParameters` to limit
the number of bytecode subsections in the state transition bytecode.
- [#1816](FuelLabs/fuel-core#1816): Updated the
upgradable executor to fetch the state transition bytecode from the
database when the version doesn't match a native one. This change
enables the WASM executor in the "production" build and requires a
`wasm32-unknown-unknown` target.

### Before requesting review
- [x] I have reviewed the code myself

### After merging, notify other teams

- [x] [Rust SDK](https://github.com/FuelLabs/fuels-rs/)
- [x] [Sway compiler](https://github.com/FuelLabs/sway/)
- [x] DevOps

## What's Changed
* Add PR template by @Dentosal in
FuelLabs/fuel-core#1806
* feat: Parallellize snapshot creation by @segfault-magnet in
FuelLabs/fuel-core#1799
* Follow-up PR to simplify the logic around parallel snapshot creation
by @xgreenx in FuelLabs/fuel-core#1812
* Bugfix: the `iter_all_by_prefix` was not working for all tables by
@xgreenx in FuelLabs/fuel-core#1814
* Added back support for `/health` endpoint by @xgreenx in
FuelLabs/fuel-core#1813
* Fetch consensus parameters from the provider by @xgreenx in
FuelLabs/fuel-core#1808
* Fetch `ConsensusParameters` from the database by @xgreenx in
FuelLabs/fuel-core#1809
* Handle FTI messages in executor by @Voxelot in
FuelLabs/fuel-core#1787
* Use state transition bytecode from the database by @xgreenx in
FuelLabs/fuel-core#1816
* feat: (re)genesis graceful shutdown by @segfault-magnet in
FuelLabs/fuel-core#1821
* Use `fuel-vm 0.49.0` with new transactions types by @xgreenx in
FuelLabs/fuel-core#1822
* Included the total gas and fee into `TransactionStatus` by @xgreenx in
FuelLabs/fuel-core#1831
* Use versioning enum for WASM executor input and output by @xgreenx in
FuelLabs/fuel-core#1830
* Support upgradability of the consensus parameters and state transition
bytecode in genesis by @xgreenx in
FuelLabs/fuel-core#1826
* Store old blocks and txs after regenesis by @Dentosal in
FuelLabs/fuel-core#1811
* Regenesis of `SpentMessages` and `ProcessedTransactions` by @xgreenx
in FuelLabs/fuel-core#1833


**Full Changelog**:
FuelLabs/fuel-core@v0.24.2...v0.25.0
sui319 added a commit to sui319/fuel-core that referenced this pull request Feb 17, 2025
## Version v0.25.0

### Fixed

- [#1821](FuelLabs/fuel-core#1821): Can handle
missing tables in snapshot.
- [#1814](FuelLabs/fuel-core#1814): Bugfix: the
`iter_all_by_prefix` was not working for all tables. The change adds a
`Rust` level filtering.

### Added

- [#1831](FuelLabs/fuel-core#1831): Included the
total gas and fee used by transaction into `TransactionStatus`.
- [#1821](FuelLabs/fuel-core#1821): Propagate
shutdown signal to (re)genesis. Also add progress bar for (re)genesis.
- [#1813](FuelLabs/fuel-core#1813): Added back
support for `/health` endpoint.
- [#1799](FuelLabs/fuel-core#1799): Snapshot
creation is now concurrent.
- [#1811](FuelLabs/fuel-core#1811): Regenesis
now preserves old blocks and transactions for GraphQL API.

### Changed

- [#1833](FuelLabs/fuel-core#1833): Regenesis of
`SpentMessages` and `ProcessedTransactions`.
- [#1830](FuelLabs/fuel-core#1830): Use
versioning enum for WASM executor input and output.
- [#1816](FuelLabs/fuel-core#1816): Updated the
upgradable executor to fetch the state transition bytecode from the
database when the version doesn't match a native one. This change
enables the WASM executor in the "production" build and requires a
`wasm32-unknown-unknown` target.
- [#1812](FuelLabs/fuel-core#1812): Follow-up PR
to simplify the logic around parallel snapshot creation.
- [#1809](FuelLabs/fuel-core#1809): Fetch
`ConsensusParameters` from the database
- [#1808](FuelLabs/fuel-core#1808): Fetch
consensus parameters from the provider.

#### Breaking

- [#1826](FuelLabs/fuel-core#1826): The changes
make the state transition bytecode part of the `ChainConfig`. It
guarantees the state transition's availability for the network's first
blocks.
The change has many minor improvements in different areas related to the
state transition bytecode:
- The state transition bytecode lies in its own
file(`state_transition_bytecode.wasm`) along with the chain config file.
The `ChainConfig` loads it automatically when `ChainConfig::load` is
called and pushes it back when `ChainConfig::write` is called.
- The `fuel-core` release bundle also contains the
`fuel-core-wasm-executor.wasm` file of the corresponding executor
version.
- The regenesis process now considers the last block produced by the
previous network. When we create a (re)genesis block of a new network,
it has the `height = last_block_of_old_netowkr + 1`. It continues the
old network and doesn't overlap blocks(before, we had `old_block.height
== new_genesis_block.hegiht`).
- Along with the new block height, the regenesis process also increases
the state transition bytecode and consensus parameters versions. It
guarantees that a new network doesn't use values from the previous
network and allows us not to migrate `StateTransitionBytecodeVersions`
and `ConsensusParametersVersions` tables.
- Added a new CLI argument, `native-executor-version,` that allows
overriding of the default version of the native executor. It can be
useful for side rollups that have their own history of executor
upgrades.
    - Replaced:
      
      ```rust
               let file = std::fs::File::open(path)?;
               let mut snapshot: Self = serde_json::from_reader(&file)?;
      ```
      
      with a:
      
      ```rust
               let mut json = String::new();
               std::fs::File::open(&path)
.with_context(|| format!("Could not open snapshot file: {path:?}"))?
                   .read_to_string(&mut json)?;
let mut snapshot: Self = serde_json::from_str(json.as_str())?;
      ```
      because it is 100 times faster for big JSON files.
- Updated all tests to use `Config::local_node_*` instead of working
with the `SnapshotReader` directly. It is the preparation of the tests
for the futures bumps of the `Executor::VERSION`. When we increase the
version, all tests continue to use
`GenesisBlock.state_transition_bytecode = 0` while the version is
different, which forces the usage of the WASM executor, while for tests,
we still prefer to test native execution. The `Config::local_node_*`
handles it and forces the executor to use the native version.
- Reworked the `build.rs` file of the upgradable executor. The script
now caches WASM bytecode to avoid recompilation. Also, fixed the issue
with outdated WASM bytecode. The script reacts on any modifications of
the `fuel-core-wasm-executor` and forces recompilation (it is why we
need the cache), so WASM bytecode always is actual now.
- [#1822](FuelLabs/fuel-core#1822): Removed
support of `Create` transaction from debugger since it doesn't have any
script to execute.
- [#1822](FuelLabs/fuel-core#1822): Use `fuel-vm
0.49.0` with new transactions types - `Upgrade` and `Upload`. Also added
`max_bytecode_subsections` field to the `ConsensusParameters` to limit
the number of bytecode subsections in the state transition bytecode.
- [#1816](FuelLabs/fuel-core#1816): Updated the
upgradable executor to fetch the state transition bytecode from the
database when the version doesn't match a native one. This change
enables the WASM executor in the "production" build and requires a
`wasm32-unknown-unknown` target.

### Before requesting review
- [x] I have reviewed the code myself

### After merging, notify other teams

- [x] [Rust SDK](https://github.com/FuelLabs/fuels-rs/)
- [x] [Sway compiler](https://github.com/FuelLabs/sway/)
- [x] DevOps

## What's Changed
* Add PR template by @Dentosal in
FuelLabs/fuel-core#1806
* feat: Parallellize snapshot creation by @segfault-magnet in
FuelLabs/fuel-core#1799
* Follow-up PR to simplify the logic around parallel snapshot creation
by @xgreenx in FuelLabs/fuel-core#1812
* Bugfix: the `iter_all_by_prefix` was not working for all tables by
@xgreenx in FuelLabs/fuel-core#1814
* Added back support for `/health` endpoint by @xgreenx in
FuelLabs/fuel-core#1813
* Fetch consensus parameters from the provider by @xgreenx in
FuelLabs/fuel-core#1808
* Fetch `ConsensusParameters` from the database by @xgreenx in
FuelLabs/fuel-core#1809
* Handle FTI messages in executor by @Voxelot in
FuelLabs/fuel-core#1787
* Use state transition bytecode from the database by @xgreenx in
FuelLabs/fuel-core#1816
* feat: (re)genesis graceful shutdown by @segfault-magnet in
FuelLabs/fuel-core#1821
* Use `fuel-vm 0.49.0` with new transactions types by @xgreenx in
FuelLabs/fuel-core#1822
* Included the total gas and fee into `TransactionStatus` by @xgreenx in
FuelLabs/fuel-core#1831
* Use versioning enum for WASM executor input and output by @xgreenx in
FuelLabs/fuel-core#1830
* Support upgradability of the consensus parameters and state transition
bytecode in genesis by @xgreenx in
FuelLabs/fuel-core#1826
* Store old blocks and txs after regenesis by @Dentosal in
FuelLabs/fuel-core#1811
* Regenesis of `SpentMessages` and `ProcessedTransactions` by @xgreenx
in FuelLabs/fuel-core#1833


**Full Changelog**:
FuelLabs/fuel-core@v0.24.2...v0.25.0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
breaking A breaking api change
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Upgradable Wasm bytecode Upgradable consensus parameters Feature: Forkless upgrade support
2 participants