Skip to content

fault_proving(compression): glue code for integ into fuel-core#2859

Merged
rymnc merged 11 commits intomasterfrom
chore/glue-compression-service-into-fuel-core
Mar 21, 2025
Merged

fault_proving(compression): glue code for integ into fuel-core#2859
rymnc merged 11 commits intomasterfrom
chore/glue-compression-service-into-fuel-core

Conversation

@rymnc
Copy link
Copy Markdown
Contributor

@rymnc rymnc commented Mar 12, 2025

Note

This PR introduces no breaking changes to the graphql api

Linked Issues/PRs

closes #2776
closes #2778

Description

ai generated desc:
integrating a new compression service and cleaning up the codebase by removing deprecated compression via OCW. The most important changes include adding the fuel-core-compression-service dependency, updating the CombinedDatabase struct and its methods to include the new compression database, and removing deprecated DA compression-related code.

Integration of Compression Service:

Code Cleanup:

Additional Changes:

Checklist

  • Breaking changes are clearly marked as such in the PR description and changelog
  • New behavior is reflected in tests
  • The specification matches the implemented behavior (link update PR if changes are needed)

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

[Add or remove entries as needed]

@rymnc rymnc added no changelog Skip the CI check of the changelog modification fault-proving labels Mar 12, 2025
@rymnc rymnc self-assigned this Mar 12, 2025
@rymnc rymnc force-pushed the chore/glue-compression-service-into-fuel-core branch from 8979d04 to eeda839 Compare March 12, 2025 07:04
Enabled(fuel_core_compression::config::Config),
}

impl configuration::CompressionConfigProvider for &Config {
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

maybe we dont need this trait

@rymnc rymnc force-pushed the chore/glue-compression-service-into-fuel-core branch from eeda839 to 1a2f441 Compare March 12, 2025 07:08
@rymnc rymnc force-pushed the chore/compression-service-updates branch 2 times, most recently from 403d5bb to 76884dd Compare March 13, 2025 17:03
@rymnc rymnc force-pushed the chore/glue-compression-service-into-fuel-core branch 8 times, most recently from ee4d5e8 to 82b5032 Compare March 13, 2025 20:58
@rymnc rymnc force-pushed the chore/compression-service-updates branch from 2edc33b to cf54700 Compare March 13, 2025 21:15
@rymnc rymnc force-pushed the chore/glue-compression-service-into-fuel-core branch 5 times, most recently from d2e249f to 91aca13 Compare March 14, 2025 11:01
@rymnc rymnc force-pushed the chore/compression-service-updates branch 5 times, most recently from a690077 to 41910bf Compare March 17, 2025 10:53
Base automatically changed from chore/compression-service-updates to master March 17, 2025 11:15
@rymnc rymnc force-pushed the chore/glue-compression-service-into-fuel-core branch 2 times, most recently from 1fcd2a1 to be1ad5c Compare March 17, 2025 11:17
rymnc added a commit that referenced this pull request Mar 19, 2025
## Linked Issues/PRs
<!-- List of related issues/PRs -->
- none

## Description
<!-- List of detailed changes -->
The in memory database fails when trying to access the metadata column ~
the `COUNT`'s were mismatched between the strum::enumCount impl and the
actual number of columns. This PR fixes that with a custom impl. tested
with #2859.

## Checklist
- [x] Breaking changes are clearly marked as such in the PR description
and changelog
- [x] New behavior is reflected in tests
- [x] [The specification](https://github.com/FuelLabs/fuel-specs/)
matches the implemented behavior (link update PR if changes are needed)

### Before requesting review
- [x] I have reviewed the code myself
- [x] I have created follow-up issues caused by this PR and linked them
here

### After merging, notify other teams

[Add or remove entries as needed]

- [ ] [Rust SDK](https://github.com/FuelLabs/fuels-rs/)
- [ ] [Sway compiler](https://github.com/FuelLabs/sway/)
- [ ] [Platform
documentation](https://github.com/FuelLabs/devrel-requests/issues/new?assignees=&labels=new+request&projects=&template=NEW-REQUEST.yml&title=%5BRequest%5D%3A+)
(for out-of-organization contributors, the person merging the PR will do
this)
- [ ] Someone else?
@rymnc rymnc marked this pull request as ready for review March 19, 2025 10:17
@rymnc rymnc requested review from a team, Dentosal, MitchTurner, netrome and xgreenx as code owners March 19, 2025 10:17
Copy link
Copy Markdown
Contributor

@netrome netrome left a comment

Choose a reason for hiding this comment

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

There's a dangling todo that should be resolved. Otherwise I think it would be more future-proof to use a dedicated metadata table, but since it's unused that's not a hard blocker from my side.

Comment on lines +21 to +23
fn metadata_column() -> Self::Column {
Self::Column::MerkleMetadataColumn
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I think we should have a dedicated metadata column. I had problems trying to use the MerkleMetadataColumn as the metadata column in the state root service. This is what I had to do to fix it: https://github.com/FuelLabs/fuel-proof-system/pull/42/commits/41c6fb0ef46c016c9261f0f736798b107a4c23a0

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Though, since you don't use the metadata table but instead the blocks for the Modifiable implementation you won't hit the same bug I did. So I suppose the metadata column will be unused, but it would be safer from other potential bugs to have a dedicated metadata column even if it's empty initially.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

i don't see the point of having it, the CompressedBlocks table suffices for the Modifiable implementation and will probably never change. the tests would catch something like this

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Sure, though perhaps it's then more correct to set CompressedBlocks as the metadata table here? 🤔

Anyway I agree I'm not worried about this being a production bug, since tests would catch it. I'll approve and let you decide if you want to change the metadata table or not.

Comment thread tests/tests/da_compression.rs Outdated
@rymnc rymnc requested a review from netrome March 19, 2025 10:46
@rymnc rymnc added the xxx label Mar 20, 2025
@rymnc rymnc merged commit 3fedb2a into master Mar 21, 2025
33 checks passed
@rymnc rymnc deleted the chore/glue-compression-service-into-fuel-core branch March 21, 2025 13:11
Comment on lines +99 to +105
CoinBalances = 14,
/// Message balances per account.
MessageBalances = 24,
MessageBalances = 15,
/// See [`AssetsInfo`](assets::AssetsInfo)
AssetsInfo = 25,
AssetsInfo = 16,
/// Index of the coins that are available to spend.
CoinsToSpend = 26,
/// See [`DaCompressionTemporalRegistryAddressV2`](da_compression::v2::address::DaCompressionTemporalRegistryAddressV2)
#[cfg(feature = "fault-proving")]
DaCompressionTemporalRegistryAddressV2 = 27,
#[cfg(feature = "fault-proving")]
DaCompressionTemporalAddressMerkleData = 28,
#[cfg(feature = "fault-proving")]
DaCompressionTemporalAddressMerkleMetadata = 29,
// See [`DaCompressionTemporalRegistryAssetIdV2`](da_compression::v2::asset_id::DaCompressionTemporalRegistryAssetIdV2)
#[cfg(feature = "fault-proving")]
DaCompressionTemporalRegistryAssetIdV2 = 30,
#[cfg(feature = "fault-proving")]
DaCompressionTemporalAssetIdMerkleData = 31,
#[cfg(feature = "fault-proving")]
DaCompressionTemporalAssetIdMerkleMetadata = 32,
/// See [`DaCompressionTemporalRegistryContractIdV2`](da_compression::v2::contract_id::DaCompressionTemporalRegistryContractIdV2)
#[cfg(feature = "fault-proving")]
DaCompressionTemporalRegistryContractIdV2 = 33,
#[cfg(feature = "fault-proving")]
DaCompressionTemporalContractIdMerkleData = 34,
#[cfg(feature = "fault-proving")]
DaCompressionTemporalContractIdMerkleMetadata = 35,
/// See [`DaCompressionTemporalRegistryScriptCodeV2`](da_compression::v2::script_code::DaCompressionTemporalRegistryScriptCodeV2)
#[cfg(feature = "fault-proving")]
DaCompressionTemporalRegistryScriptCodeV2 = 36,
#[cfg(feature = "fault-proving")]
DaCompressionTemporalScriptCodeMerkleData = 37,
#[cfg(feature = "fault-proving")]
DaCompressionTemporalScriptCodeMerkleMetadata = 38,
/// See [`DaCompressionTemporalRegistryPredicateCodeV2`](da_compression::v2::predicate_code::DaCompressionTemporalRegistryPredicateCodeV2)
#[cfg(feature = "fault-proving")]
DaCompressionTemporalRegistryPredicateCodeV2 = 39,
#[cfg(feature = "fault-proving")]
DaCompressionTemporalPredicateCodeMerkleData = 40,
#[cfg(feature = "fault-proving")]
DaCompressionTemporalPredicateCodeMerkleMetadata = 41,
#[cfg(feature = "fault-proving")]
DaCompressionTemporalRegistryIndexV2 = 42,
#[cfg(feature = "fault-proving")]
DaCompressionTemporalRegistryIndexMerkleData = 43,
#[cfg(feature = "fault-proving")]
DaCompressionTemporalRegistryIndexMerkleMetadata = 44,
#[cfg(feature = "fault-proving")]
DaCompressionTemporalRegistryTimestampsV2 = 45,
#[cfg(feature = "fault-proving")]
DaCompressionTemporalRegistryTimestampsMerkleData = 46,
#[cfg(feature = "fault-proving")]
DaCompressionTemporalRegistryTimestampsMerkleMetadata = 47,
#[cfg(feature = "fault-proving")]
DaCompressionTemporalRegistryEvictorCacheV2 = 48,
#[cfg(feature = "fault-proving")]
DaCompressionTemporalRegistryEvictorCacheMerkleData = 49,
#[cfg(feature = "fault-proving")]
DaCompressionTemporalRegistryEvictorCacheMerkleMetadata = 50,
CoinsToSpend = 17,
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

You can't change IDs of existing columns, it will break production nodes because now they will point to wrong tables.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

other tests start to fail because the number of columns doesn't match the last one's u32 repr. is the practice to leave the old columns as is?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

No, we don't need to leave old columns. But in memory, the database requires all columns to be sequential, so it is why the test that verifies that fails.

Either we can rework how the memory database manages its state(for example, it could use a hash map. It is how it worked before, but I changed it to use an array because it was more performant). Or we can have two sets of columns, one for the in-memory database and another for Rocksdb.

Comment thread crates/fuel-core/src/database/database_description/compression.rs
Comment thread crates/fuel-core/src/service/adapters/compression_adapters.rs
Comment thread crates/services/compression/src/service.rs
Comment thread crates/services/compression/src/service.rs
kuroki-yosuke added a commit to kuroki-yosuke/core-fuel that referenced this pull request Apr 5, 2025
## Linked Issues/PRs
<!-- List of related issues/PRs -->
- none

## Description
<!-- List of detailed changes -->
The in memory database fails when trying to access the metadata column ~
the `COUNT`'s were mismatched between the strum::enumCount impl and the
actual number of columns. This PR fixes that with a custom impl. tested
with FuelLabs/fuel-core#2859.

## Checklist
- [x] Breaking changes are clearly marked as such in the PR description
and changelog
- [x] New behavior is reflected in tests
- [x] [The specification](https://github.com/FuelLabs/fuel-specs/)
matches the implemented behavior (link update PR if changes are needed)

### Before requesting review
- [x] I have reviewed the code myself
- [x] I have created follow-up issues caused by this PR and linked them
here

### After merging, notify other teams

[Add or remove entries as needed]

- [ ] [Rust SDK](https://github.com/FuelLabs/fuels-rs/)
- [ ] [Sway compiler](https://github.com/FuelLabs/sway/)
- [ ] [Platform
documentation](https://github.com/FuelLabs/devrel-requests/issues/new?assignees=&labels=new+request&projects=&template=NEW-REQUEST.yml&title=%5BRequest%5D%3A+)
(for out-of-organization contributors, the person merging the PR will do
this)
- [ ] Someone else?
@github-actions github-actions Bot mentioned this pull request Apr 9, 2025
xgreenx pushed a commit that referenced this pull request Apr 9, 2025
## Version 0.43.0

### Breaking
- [2882](#2882): Changed the
type of the `resolved_outputs` for pre-confirmations. Now it also
includes `Utxoid`. `resolved_outputs` field contains only `Change` and
`Variable` outputs, so the `UtxoId` for them could be hard to derive, if
transaction has known inputs. This information should help to create
dependent transactions more easily.
- [2900](#2900): Get rid of
`Deref` impl on `ImportResult` by introducing wrapper type.
- [2909](#2909): Compressed
block headers now include a merkle root of the temporal registry after
compression was performed.
- [2931](#2931): In
`fuel-core-compression`, the `compress` function now takes a reference
to `Config` instead of the value.

### Added
- [2848](#2848): Link all
components of preconfirmations and add E2E tests.
- [2882](#2882): Listen to tx
status update from `TxStatusManager` in `TxPool`. Added logic to clean
up transactions from the pool if received squeezed out pre
confirmations. Added logic to promote transactions on sentry nodes when
receive pre-confirmation.
- [2885](#2885): Notify P2P
from `TxStatusManager` in case of bad preconfirmation message.
- [2901](#2901): New query
`dryRunRecordStorageReads` which works like `dryRun` but also returns
storage reads, allowing use of execution tracer or local debugger
- [2912](#2912): Add the
`allow_partial` parameter to the `coinsToSpend` query. The default value
of this parameters is `false` to preserve the old behavior. If set to
`true`, the query returns available coins instead of failing when the
requested amount is unavailable.
- [2914](#2914): Tests
ensuring the proof generation and validation of tables with sparse and
merklized blueprints work.

### Changed
- [2859](#2859): Swap out
off-chain worker compression for dedicated compression service in
`fuel-core-bin`.
- [2914](#2914): Break out
test logic to trait methods for `root_storage_tests` and
`basic_merkleized_storage_tests` test macros.
- [2925](#2925): Make
preconfirmation optional on API endpoints.

### Fixed
- [2918](#2918): Only cancel
background work if primary RocksDB instance is dropped
- [2935](#2935): The change
rejects transactions immediately, if they use spent coins. `TxPool` has
a SpentInputs LRU cache, storing all spent coins.

### Removed
- [2859](#2859): Removed DA
compression from off-chain worker in favor of dedicated compression
service in `fuel-core-bin`.

## What's Changed
* Rework `TxStatusManager` tests by @rafal-ch in
#2871
* fix(storage): custom impl of EnumCount for MerkleizedColumn by @rymnc
in #2875
* Update network versions on README by @github-actions in
#2889
* fix(version-compatibility): pin async-graphql to 7.0.15 by @rymnc in
#2891
* Fix proptest for tx status manager by @rafal-ch in
#2893
* fault_proving(compression): glue code for integ into fuel-core by
@rymnc in #2859
* Link and activate preconfirmations and add integrations tests by
@AurelienFT in #2848
* refactor: Get rid of `Deref` impl on `ImportResult` by introducing
wrapper type. by @netrome in
#2900
* fix(compression_service): post merge reviews by @rymnc in
#2895
* Listen status updates from in TxStatusManager in TxPool by @AurelienFT
in #2882
* chore(compression): include registry root in compressed block header
by @rymnc in #2909
* Improve TxStatusManager tests coverage by @AurelienFT in
#2911
* ci(benchmarks): run nightly benchmark and create PR by @rymnc in
#2915
* fix: Only cancel background work if primary RocksDB instance is
dropped by @netrome in #2918
* fix(ci): nightly benchmark by @rymnc in
#2922
* fix(ci): explicitly push before creating PR by @rymnc in
#2926
* Add allow_partial parameter to the "coins to spend" query by
@AurelienFT in #2912
* fix(compression): improve robustness on startup and shutdown by @rymnc
in #2923
* chore(compression): metrics for compression service by @rymnc in
#2920
* chore(compression): pass compression config by reference by @rymnc in
#2931
* Dry run execution tracing by @Dentosal in
#2901
* Make preconfirmation optional on API endpoints by @AurelienFT in
#2925
* Notify P2P in case of bad preconfirmation message by @AurelienFT in
#2885
* chore(1.85): 1.85.0 readiness by @rymnc in
#2937
* Reject transactions for already spent coins by @xgreenx in
#2935
* feat: add tests for sparse and merkleized blueprint proof generation
by @netrome in #2914


**Full Changelog**:
v0.42.0...v0.43.0

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
ChapmaBeerbohm added a commit to ChapmaBeerbohm/holo-kit that referenced this pull request Sep 26, 2025
## Linked Issues/PRs
<!-- List of related issues/PRs -->
- none

## Description
<!-- List of detailed changes -->
The in memory database fails when trying to access the metadata column ~
the `COUNT`'s were mismatched between the strum::enumCount impl and the
actual number of columns. This PR fixes that with a custom impl. tested
with FuelLabs/fuel-core#2859.

## Checklist
- [x] Breaking changes are clearly marked as such in the PR description
and changelog
- [x] New behavior is reflected in tests
- [x] [The specification](https://github.com/FuelLabs/fuel-specs/)
matches the implemented behavior (link update PR if changes are needed)

### Before requesting review
- [x] I have reviewed the code myself
- [x] I have created follow-up issues caused by this PR and linked them
here

### After merging, notify other teams

[Add or remove entries as needed]

- [ ] [Rust SDK](https://github.com/FuelLabs/fuels-rs/)
- [ ] [Sway compiler](https://github.com/FuelLabs/sway/)
- [ ] [Platform
documentation](https://github.com/FuelLabs/devrel-requests/issues/new?assignees=&labels=new+request&projects=&template=NEW-REQUEST.yml&title=%5BRequest%5D%3A+)
(for out-of-organization contributors, the person merging the PR will do
this)
- [ ] Someone else?
ChapmaBeerbohm added a commit to ChapmaBeerbohm/holo-kit that referenced this pull request Sep 26, 2025
## Version 0.43.0

### Breaking
- [2882](FuelLabs/fuel-core#2882): Changed the
type of the `resolved_outputs` for pre-confirmations. Now it also
includes `Utxoid`. `resolved_outputs` field contains only `Change` and
`Variable` outputs, so the `UtxoId` for them could be hard to derive, if
transaction has known inputs. This information should help to create
dependent transactions more easily.
- [2900](FuelLabs/fuel-core#2900): Get rid of
`Deref` impl on `ImportResult` by introducing wrapper type.
- [2909](FuelLabs/fuel-core#2909): Compressed
block headers now include a merkle root of the temporal registry after
compression was performed.
- [2931](FuelLabs/fuel-core#2931): In
`fuel-core-compression`, the `compress` function now takes a reference
to `Config` instead of the value.

### Added
- [2848](FuelLabs/fuel-core#2848): Link all
components of preconfirmations and add E2E tests.
- [2882](FuelLabs/fuel-core#2882): Listen to tx
status update from `TxStatusManager` in `TxPool`. Added logic to clean
up transactions from the pool if received squeezed out pre
confirmations. Added logic to promote transactions on sentry nodes when
receive pre-confirmation.
- [2885](FuelLabs/fuel-core#2885): Notify P2P
from `TxStatusManager` in case of bad preconfirmation message.
- [2901](FuelLabs/fuel-core#2901): New query
`dryRunRecordStorageReads` which works like `dryRun` but also returns
storage reads, allowing use of execution tracer or local debugger
- [2912](FuelLabs/fuel-core#2912): Add the
`allow_partial` parameter to the `coinsToSpend` query. The default value
of this parameters is `false` to preserve the old behavior. If set to
`true`, the query returns available coins instead of failing when the
requested amount is unavailable.
- [2914](FuelLabs/fuel-core#2914): Tests
ensuring the proof generation and validation of tables with sparse and
merklized blueprints work.

### Changed
- [2859](FuelLabs/fuel-core#2859): Swap out
off-chain worker compression for dedicated compression service in
`fuel-core-bin`.
- [2914](FuelLabs/fuel-core#2914): Break out
test logic to trait methods for `root_storage_tests` and
`basic_merkleized_storage_tests` test macros.
- [2925](FuelLabs/fuel-core#2925): Make
preconfirmation optional on API endpoints.

### Fixed
- [2918](FuelLabs/fuel-core#2918): Only cancel
background work if primary RocksDB instance is dropped
- [2935](FuelLabs/fuel-core#2935): The change
rejects transactions immediately, if they use spent coins. `TxPool` has
a SpentInputs LRU cache, storing all spent coins.

### Removed
- [2859](FuelLabs/fuel-core#2859): Removed DA
compression from off-chain worker in favor of dedicated compression
service in `fuel-core-bin`.

## What's Changed
* Rework `TxStatusManager` tests by @rafal-ch in
FuelLabs/fuel-core#2871
* fix(storage): custom impl of EnumCount for MerkleizedColumn by @rymnc
in FuelLabs/fuel-core#2875
* Update network versions on README by @github-actions in
FuelLabs/fuel-core#2889
* fix(version-compatibility): pin async-graphql to 7.0.15 by @rymnc in
FuelLabs/fuel-core#2891
* Fix proptest for tx status manager by @rafal-ch in
FuelLabs/fuel-core#2893
* fault_proving(compression): glue code for integ into fuel-core by
@rymnc in FuelLabs/fuel-core#2859
* Link and activate preconfirmations and add integrations tests by
@AurelienFT in FuelLabs/fuel-core#2848
* refactor: Get rid of `Deref` impl on `ImportResult` by introducing
wrapper type. by @netrome in
FuelLabs/fuel-core#2900
* fix(compression_service): post merge reviews by @rymnc in
FuelLabs/fuel-core#2895
* Listen status updates from in TxStatusManager in TxPool by @AurelienFT
in FuelLabs/fuel-core#2882
* chore(compression): include registry root in compressed block header
by @rymnc in FuelLabs/fuel-core#2909
* Improve TxStatusManager tests coverage by @AurelienFT in
FuelLabs/fuel-core#2911
* ci(benchmarks): run nightly benchmark and create PR by @rymnc in
FuelLabs/fuel-core#2915
* fix: Only cancel background work if primary RocksDB instance is
dropped by @netrome in FuelLabs/fuel-core#2918
* fix(ci): nightly benchmark by @rymnc in
FuelLabs/fuel-core#2922
* fix(ci): explicitly push before creating PR by @rymnc in
FuelLabs/fuel-core#2926
* Add allow_partial parameter to the "coins to spend" query by
@AurelienFT in FuelLabs/fuel-core#2912
* fix(compression): improve robustness on startup and shutdown by @rymnc
in FuelLabs/fuel-core#2923
* chore(compression): metrics for compression service by @rymnc in
FuelLabs/fuel-core#2920
* chore(compression): pass compression config by reference by @rymnc in
FuelLabs/fuel-core#2931
* Dry run execution tracing by @Dentosal in
FuelLabs/fuel-core#2901
* Make preconfirmation optional on API endpoints by @AurelienFT in
FuelLabs/fuel-core#2925
* Notify P2P in case of bad preconfirmation message by @AurelienFT in
FuelLabs/fuel-core#2885
* chore(1.85): 1.85.0 readiness by @rymnc in
FuelLabs/fuel-core#2937
* Reject transactions for already spent coins by @xgreenx in
FuelLabs/fuel-core#2935
* feat: add tests for sparse and merkleized blueprint proof generation
by @netrome in FuelLabs/fuel-core#2914


**Full Changelog**:
FuelLabs/fuel-core@v0.42.0...v0.43.0

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
GeorgeBake added a commit to GeorgeBake/pipeline-cli that referenced this pull request Sep 29, 2025
## Linked Issues/PRs
<!-- List of related issues/PRs -->
- none

## Description
<!-- List of detailed changes -->
The in memory database fails when trying to access the metadata column ~
the `COUNT`'s were mismatched between the strum::enumCount impl and the
actual number of columns. This PR fixes that with a custom impl. tested
with FuelLabs/fuel-core#2859.

## Checklist
- [x] Breaking changes are clearly marked as such in the PR description
and changelog
- [x] New behavior is reflected in tests
- [x] [The specification](https://github.com/FuelLabs/fuel-specs/)
matches the implemented behavior (link update PR if changes are needed)

### Before requesting review
- [x] I have reviewed the code myself
- [x] I have created follow-up issues caused by this PR and linked them
here

### After merging, notify other teams

[Add or remove entries as needed]

- [ ] [Rust SDK](https://github.com/FuelLabs/fuels-rs/)
- [ ] [Sway compiler](https://github.com/FuelLabs/sway/)
- [ ] [Platform
documentation](https://github.com/FuelLabs/devrel-requests/issues/new?assignees=&labels=new+request&projects=&template=NEW-REQUEST.yml&title=%5BRequest%5D%3A+)
(for out-of-organization contributors, the person merging the PR will do
this)
- [ ] Someone else?
GeorgeBake added a commit to GeorgeBake/pipeline-cli that referenced this pull request Sep 29, 2025
## Version 0.43.0

### Breaking
- [2882](FuelLabs/fuel-core#2882): Changed the
type of the `resolved_outputs` for pre-confirmations. Now it also
includes `Utxoid`. `resolved_outputs` field contains only `Change` and
`Variable` outputs, so the `UtxoId` for them could be hard to derive, if
transaction has known inputs. This information should help to create
dependent transactions more easily.
- [2900](FuelLabs/fuel-core#2900): Get rid of
`Deref` impl on `ImportResult` by introducing wrapper type.
- [2909](FuelLabs/fuel-core#2909): Compressed
block headers now include a merkle root of the temporal registry after
compression was performed.
- [2931](FuelLabs/fuel-core#2931): In
`fuel-core-compression`, the `compress` function now takes a reference
to `Config` instead of the value.

### Added
- [2848](FuelLabs/fuel-core#2848): Link all
components of preconfirmations and add E2E tests.
- [2882](FuelLabs/fuel-core#2882): Listen to tx
status update from `TxStatusManager` in `TxPool`. Added logic to clean
up transactions from the pool if received squeezed out pre
confirmations. Added logic to promote transactions on sentry nodes when
receive pre-confirmation.
- [2885](FuelLabs/fuel-core#2885): Notify P2P
from `TxStatusManager` in case of bad preconfirmation message.
- [2901](FuelLabs/fuel-core#2901): New query
`dryRunRecordStorageReads` which works like `dryRun` but also returns
storage reads, allowing use of execution tracer or local debugger
- [2912](FuelLabs/fuel-core#2912): Add the
`allow_partial` parameter to the `coinsToSpend` query. The default value
of this parameters is `false` to preserve the old behavior. If set to
`true`, the query returns available coins instead of failing when the
requested amount is unavailable.
- [2914](FuelLabs/fuel-core#2914): Tests
ensuring the proof generation and validation of tables with sparse and
merklized blueprints work.

### Changed
- [2859](FuelLabs/fuel-core#2859): Swap out
off-chain worker compression for dedicated compression service in
`fuel-core-bin`.
- [2914](FuelLabs/fuel-core#2914): Break out
test logic to trait methods for `root_storage_tests` and
`basic_merkleized_storage_tests` test macros.
- [2925](FuelLabs/fuel-core#2925): Make
preconfirmation optional on API endpoints.

### Fixed
- [2918](FuelLabs/fuel-core#2918): Only cancel
background work if primary RocksDB instance is dropped
- [2935](FuelLabs/fuel-core#2935): The change
rejects transactions immediately, if they use spent coins. `TxPool` has
a SpentInputs LRU cache, storing all spent coins.

### Removed
- [2859](FuelLabs/fuel-core#2859): Removed DA
compression from off-chain worker in favor of dedicated compression
service in `fuel-core-bin`.

## What's Changed
* Rework `TxStatusManager` tests by @rafal-ch in
FuelLabs/fuel-core#2871
* fix(storage): custom impl of EnumCount for MerkleizedColumn by @rymnc
in FuelLabs/fuel-core#2875
* Update network versions on README by @github-actions in
FuelLabs/fuel-core#2889
* fix(version-compatibility): pin async-graphql to 7.0.15 by @rymnc in
FuelLabs/fuel-core#2891
* Fix proptest for tx status manager by @rafal-ch in
FuelLabs/fuel-core#2893
* fault_proving(compression): glue code for integ into fuel-core by
@rymnc in FuelLabs/fuel-core#2859
* Link and activate preconfirmations and add integrations tests by
@AurelienFT in FuelLabs/fuel-core#2848
* refactor: Get rid of `Deref` impl on `ImportResult` by introducing
wrapper type. by @netrome in
FuelLabs/fuel-core#2900
* fix(compression_service): post merge reviews by @rymnc in
FuelLabs/fuel-core#2895
* Listen status updates from in TxStatusManager in TxPool by @AurelienFT
in FuelLabs/fuel-core#2882
* chore(compression): include registry root in compressed block header
by @rymnc in FuelLabs/fuel-core#2909
* Improve TxStatusManager tests coverage by @AurelienFT in
FuelLabs/fuel-core#2911
* ci(benchmarks): run nightly benchmark and create PR by @rymnc in
FuelLabs/fuel-core#2915
* fix: Only cancel background work if primary RocksDB instance is
dropped by @netrome in FuelLabs/fuel-core#2918
* fix(ci): nightly benchmark by @rymnc in
FuelLabs/fuel-core#2922
* fix(ci): explicitly push before creating PR by @rymnc in
FuelLabs/fuel-core#2926
* Add allow_partial parameter to the "coins to spend" query by
@AurelienFT in FuelLabs/fuel-core#2912
* fix(compression): improve robustness on startup and shutdown by @rymnc
in FuelLabs/fuel-core#2923
* chore(compression): metrics for compression service by @rymnc in
FuelLabs/fuel-core#2920
* chore(compression): pass compression config by reference by @rymnc in
FuelLabs/fuel-core#2931
* Dry run execution tracing by @Dentosal in
FuelLabs/fuel-core#2901
* Make preconfirmation optional on API endpoints by @AurelienFT in
FuelLabs/fuel-core#2925
* Notify P2P in case of bad preconfirmation message by @AurelienFT in
FuelLabs/fuel-core#2885
* chore(1.85): 1.85.0 readiness by @rymnc in
FuelLabs/fuel-core#2937
* Reject transactions for already spent coins by @xgreenx in
FuelLabs/fuel-core#2935
* feat: add tests for sparse and merkleized blueprint proof generation
by @netrome in FuelLabs/fuel-core#2914


**Full Changelog**:
FuelLabs/fuel-core@v0.42.0...v0.43.0

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

4 participants