Skip to content

Releases: FuelLabs/fuel-core

Version 0.32.0

06 Aug 22:57
ecf5d23
Compare
Choose a tag to compare

Added

Added

  • 1983: Add adapters for gas price service for accessing database values

Breaking

  • 2048: Disable SMT for ContractsAssets and ContractsState for the production mode of the fuel-core. The SMT still is used in benchmarks and tests.
  • #1988: Updated fuel-vm to 0.56.0 (release notes). Adds Blob transaction support.
  • 2025: Add new V0 algorithm for gas price to services.
    This change includes new flags for the CLI:
    - "starting-gas-price" - the starting gas price for the gas price algorithm
    - "gas-price-change-percent" - the percent change for each gas price update
    - "gas-price-threshold-percent" - the threshold percent for determining if the gas price will be increase or decreased
    And the following CLI flags are serving a new purpose
    - "min-gas-price" - the minimum gas price that the gas price algorithm will return
  • 2045: Include withdrawal message only if transaction is executed successfully.
  • 2041: Add code for startup of the gas price algorithm updater so
    the gas price db on startup is always in sync with the on chain db

What's Changed

New Contributors

Full Changelog: v0.31.0...v0.32.0

v0.31.0

05 Jul 22:44
c5b425e
Compare
Choose a tag to compare

Version v0.31.0

Added

  • #2014: Added a separate thread for the block importer.
  • #2013: Added a separate thread to process P2P database lookups.
  • #2004: Added new CLI argument continue-services-on-error to control internal flow of services.
  • #2004: Added handling of incorrect shutdown of the off-chain GraphQL worker by using state rewind feature.
  • #2007: Improved metrics:
    • Added database metrics per column.
    • Added statistic about commit time of each database.
    • Refactored how metrics are registered: Now, we use only one register shared between all metrics. This global register is used to encode all metrics.
  • #1996: Added support for rollback command when state rewind feature is enabled. The command allows the rollback of the state of the blockchain several blocks behind until the end of the historical window. The default historical window it 7 days.
  • #1996: Added support for the state rewind feature. The feature allows the execution of the blocks in the past and the same execution results to be received. Together with forkless upgrades, execution of any block from the past is possible if historical data exist for the target block height.
  • #1994: Added the actual implementation for the AtomicView::latest_view.
  • #1972: Implement AlgorithmUpdater for GasPriceService
  • #1948: Add new AlgorithmV1 and AlgorithmUpdaterV1 for the gas price. Include tools for analysis
  • #1676: Added new CLI arguments:
    • graphql-max-depth
    • graphql-max-complexity
    • graphql-max-recursive-depth

Changed

  • #2015: Small fixes for the database:
    • Fixed the name for historical columns - Metrics was working incorrectly for historical columns.
    • Added recommended setting for the RocksDB - The source of recommendation is official documentation https://github.com/facebook/rocksdb/wiki/Setup-Options-and-Basic-Tuning#other-general-options.
    • Removed repairing since it could corrupt the database if fails - Several users reported about the corrupted state of the database after having a "Too many descriptors" error where in logs, repairing of the database also failed with this error creating a lost folder.
  • #2010: Updated the block importer to allow more blocks to be in the queue. It improves synchronization speed and mitigate the impact of other services on synchronization speed.
  • #2006: Process block importer events first under P2P pressure.
  • #2002: Adapted the block producer to react to checked transactions that were using another version of consensus parameters during validation in the TxPool. After an upgrade of the consensus parameters of the network, TxPool could store invalid Checked transactions. This change fixes that by tracking the version that was used to validate the transactions.
  • #1999: Minimize the number of panics in the codebase.
  • #1990: Use latest view for mutate GraphQL queries after modification of the node.
  • #1992: Parse multiple relayer contracts, RELAYER-V2-LISTENING-CONTRACTS env variable using a , delimiter.
  • #1980: Add Transaction to relayer 's event filter

Breaking

  • #2012: Bumped the fuel-vm to 0.55.0 release. More about the change here.
  • #2001: Prevent GraphQL query body to be huge and cause OOM. The default body size is 1MB. The limit can be changed by the graphql-request-body-bytes-limit CLI argument.
  • #1991: Prepare the database to use different types than Database for atomic view.
  • #1989: Extract HistoricalView trait from the AtomicView.
  • #1676: New fuel-core-client is incompatible with the old fuel-core because of two requested new fields.
  • #1676: Changed default value for api-request-timeout to be 30s.
  • #1676: Now, GraphQL API has complexity and depth limitations on the queries. The default complexity limit is 20000. It is ~50 blocks per request with transaction IDs and ~2-5 full blocks.

Fixed

  • #2000: Use correct query name in metrics for aliased queries.

What's Changed

  • Generate and publish code coverage reports in the CI by @Dentosal in #1947
  • Gas Price Algorithm by @MitchTurner in #1948
  • Use companies fork of the publish-crates action by @xgreenx in #1986
  • Weekly cargo update by @github-actions in #1985
  • Implement gas price updater for service by @MitchTurner in #1972
  • Extract HistoricalView trait from the AtomicView by @xgreenx in #1989
  • Use fresh ReadView for mutate queries by @xgreenx in #1990
  • Prevent api spam with GQL complexity limits by @Voxelot in #1676
  • Enable parsing multiple relayer listening contract addresses from environment variables by @Jurshsmith in #1992
  • Prepare the database to use different types than Database for atomic view by @xgreenx in #1991
  • Added the actual implementation for the AtomicView::latest_view by @xgreenx in #1994
  • Weekly cargo update by @github-actions in #1998
  • Minimize the number of panics in the codebase by @xgreenx in #1999
  • feat: include Transaction events in topic0 filter for download_logs by @DefiCake in #1980
  • Use correct query name for metrics by @xgreenx in #2000
  • Prevent GraphQL query body to be huge and cause OOM by @xgreenx in #2001
  • Adapted the block producer to react on the outdated transactions from the TxPool by @xgreenx in #2002
  • Process block importer events first under P2P pressure by @xgreenx in #2006
  • Implementation of the state rewind feature for the RocksDB by @xgreenx in #1996
  • Upgraded fuel-vm to 0.55.0 by @xgreenx in #2012
  • Improved metrics for the database by @xgreenx in #2007
  • Updated block importer to allow more blocks to be queue by @xgreenx in #2010
  • Added handling of incorrect shutdown of the off-chain GraphQL worker by @xgreenx in #2004
  • Moved P2P database lookups into a separate thread by @xgreenx in #2013
  • Use dedicated thread for the block importer by @xgreenx in #2014
  • Small fixes for the database by @xgreenx in #2015
  • Release v0.31.0 by @xgreenx in #2016
  • Fix the publishing of the fuel-gas-price-algorithm crate by @xgreenx in #2024

New Contributors

Full Changelog: v0.30.0...v0.31.0

v0.30.0

16 Jun 18:56
8b1bf02
Compare
Choose a tag to compare

Version v0.30.0

Added

  • #1975: Added DependentCost benchmarks for the cfe and cfei opcodes.
  • #1975: Added DependentCost for the cfe opcode to the GasCosts endpoint.
  • #1974: Optimized the work of InMemoryTransaction for lookups and empty insertion.

Changed

  • #1973: Updated VM initialization benchmark to include many inputs and outputs.

Breaking

  • #1975: Updated gas prices according to new release.
  • #1975: Changed GasCosts endpoint to return DependentCost for the cfei opcode via cfeiDependentCost.
  • #1975: Use fuel-vm 0.54.0. More information in the release.

What's Changed

  • Add creation_instant as second sort key in tx pool. by @AurelienFT in #1964
  • Updated VM initialization benchmark to include many inputs and outputs by @xgreenx in #1973
  • Fixes the error message for incorrect keypair's path by @xgreenx in #1962
  • Optimized the work of InMemoryTransaction for lookups and empty insertion by @xgreenx in #1974
  • Weekly cargo update by @github-actions in #1976
  • Use fuel-vm 0.54.0 by @xgreenx in #1975
  • Release v0.30.0 by @xgreenx in #1977

Full Changelog: v0.29.0...v0.30.0

v0.29.0

14 Jun 20:22
e3730f8
Compare
Choose a tag to compare

Version v0.29.0

Added

  • #1889: Add new FuelGasPriceProvider that receives the gas price algorithm from a GasPriceService

Changed

  • #1942: Sequential relayer's commits.
  • #1952: Change tip sorting to ratio between tip and max gas sorting in txpool
  • #1960: Update fuel-vm to v0.53.0.

Fixed

  • #1950: Fix cursor BlockHeight encoding in SortedTXCursor

What's Changed

New Contributors

Full Changelog: v0.28.0...v0.29.0

v0.28.0

07 Jun 06:28
d5b99e1
Compare
Choose a tag to compare

Version v0.28.0

Changed

  • #1934: Updated benchmark for the aloc opcode to be DependentCost. Updated vm_initialization benchmark to exclude growing of memory(It is handled by VM reuse).
  • #1916: Speed up synchronisation of the blocks for the fuel-core-sync service.
  • #1888: optimization: Reuse VM memory across executions.

Breaking

  • #1934: Changed GasCosts endpoint to return DependentCost for the aloc opcode via alocDependentCost.
  • #1934: Updated default gas costs for the local testnet configuration. All opcodes became cheaper.
  • #1924: dry_run_opt has new gas_price: Option<u64> argument
  • #1888: Upgraded fuel-vm to 0.51.0. See release for more information.

Added

  • #1939: Added API functions to open a RocksDB in different modes.
  • #1929: Added support of customization of the state transition version in the ChainConfig.

Removed

  • #1913: Removed dead code from the project.

Fixed

  • #1921: Fixed unstable gossipsub_broadcast_tx_with_accept test.
  • #1915: Fixed reconnection issue in the dev cluster with AWS cluster.
  • #1914: Fixed halting of the node during synchronization in PoA service.

What's Changed

  • Removed dead code by @xgreenx in #1913
  • Added backward and forward compatibility integration tests for forkless upgrades by @xgreenx in #1895
  • Fixed halting of the node in rare conditions by @xgreenx in #1914
  • Weekly cargo update by @github-actions in #1928
  • Fixed logging of the WASM executor by @xgreenx in #1930
  • Added support of customization of the state transition version in the ChainConfig by @xgreenx in #1929
  • Document wasm toolchain installation, add rust-toolchain.toml by @Dentosal in #1932
  • Add optional gas_price argument to dry_run_opt by @hal3e in #1924
  • Reuse VM memory across executions by @Dentosal in #1888
  • Fixed reconnection issue in the dev cluster with AWS cluster by @xgreenx in #1915
  • Speeds up synchronisation of the blocks for the fuel-core-sync service by @xgreenx in #1916
  • Fixed unstable gossipsub_broadcast_tx_with_accept test by @xgreenx in #1921
  • Added API functions to open a RocksDB in different modes by @xgreenx in #1939
  • Use DependentCost for aloc opcode by @xgreenx in #1934
  • Release v0.28.0 by @xgreenx in #1945

New Contributors

Full Changelog: v0.27.0...v0.28.0

v0.27.0

29 May 20:49
4d680c4
Compare
Choose a tag to compare

Version v0.27.0

Added

  • #1898: Enforce increasing of the Executor::VERSION on each release.

Changed

  • #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: Regenesis now preserves FuelBlockMerkleData and FuelBlockMerkleMetadata in the off-chain table. These tables are checked when querying message proofs.
  • #1886: Use ref to Block in validation code
  • #1876: Updated benchmark to include the worst scenario for CROO opcode. Also include consensus parameters in bench output.
  • #1879: Return the old behaviour for the discovery_works test.
  • #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: 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: Update the root README as fuel-core run no longer has --chain as an option. It has been replaced by --snapshot.

Breaking

  • #1894: Use testnet configuration for local testnet.
  • #1894: Removed support for helm chart.
  • #1910: fuel-vm upgraded to 0.50.0. More information in the changelog.

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
  • Release v0.27.0 by @xgreenx in #1912

New Contributors

Full Changelog: v0.26.0...v0.27.0

v0.26.0

30 Apr 10:26
9fddecc
Compare
Choose a tag to compare

Version v0.26.0

Fixed

Breaking

  • #1868: Include the event_inbox_root in the header hash. Changed types of the transactions_count to u16 and message_receipt_count to u32 instead of u64. Updated the application hash root calculation to not pad numbers.
  • #1866: Fixed a runtime panic that occurred when restarting a node. The panic happens when the relayer database is already populated, and the relayer attempts an empty commit during start up. This invalid commit is removed in this PR.
  • #1871: Fixed block endpoint to return fetch the blocks from both databases after regenesis.
  • #1856: Replaced instances of Union with Enum for GraphQL definitions of ConsensusParametersVersion and related types. This is needed because Union does not support multiple Versions inside discriminants or empty variants.
  • #1870: Fixed benchmarks for the 0.25.3.
  • #1870: Improves the performance of getting the size of the contract from the InMemoryTransaction.
  • #1851: Provided migration capabilities (enabled addition of new column families) to RocksDB instance.

Added

  • #1853: Added a test case to verify the database's behavior when new columns are added to the RocksDB database.
  • #1860: Regenesis now preserves FuelBlockIdsToHeights off-chain table.

Changed

  • #1847: Simplify the validation interface to use Block. Remove Validation variant of ExecutionKind.
  • #1832: Snapshot generation can be cancelled. Progress is also reported.
  • #1837: Refactor the executor and separate validation from the other use cases

What's Changed

Full Changelog: v0.25.3...v0.26.0

v0.25.3

24 Apr 15:22
eb7302b
Compare
Choose a tag to compare

What's Changed

Full Changelog: v0.25.2...v0.25.3

v0.24.3

24 Apr 13:07
68d962d
Compare
Choose a tag to compare

What's Changed

Full Changelog: v0.24.2...v0.24.3

v0.25.2

19 Apr 22:43
dbc6a1d
Compare
Choose a tag to compare

Version v0.25.1

Fixed

  • #1844: Fixed the publishing of the fuel-core 0.25.1 release.
  • 1842: Ignore RUSTSEC-2024-0336: rustls::ConnectionCommon::complete_io could fall into an infinite loop based on network
  • #1840: Fixed the publishing of the fuel-core 0.25.0 release.
  • #1821: Can handle missing tables in snapshot.
  • #1814: Bugfix: the iter_all_by_prefix was not working for all tables. The change adds a Rust level filtering.

Added

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

Changed

  • #1833: Regenesis of SpentMessages and ProcessedTransactions.
  • #1830: Use versioning enum for WASM executor input and output.
  • #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: Follow-up PR to simplify the logic around parallel snapshot creation.
  • #1809: Fetch ConsensusParameters from the database
  • #1808: Fetch consensus parameters from the provider.

Breaking

  • #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:

               let file = std::fs::File::open(path)?;
               let mut snapshot: Self = serde_json::from_reader(&file)?;

      with a:

               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: Removed support of Create transaction from debugger since it doesn't have any script to execute.
  • #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: 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.

What's Changed

Full Changelog: v0.24.2...v0.25.2