Tags: init4tech/node-components
Tags
feat(genesis): add Gouda rollup; bump signet-sdk family to gouda bran… …ches (#144) * chore(deps): pin signet-sdk + bin-base + storage to gouda branches Pin signet-* (signet-sdk, storage) and init4-bin-base to the gouda-branch SHAs in preparation for wiring KnownChains::Gouda through this workspace. - signet-sdk: 8a85a4636bccf971226a9c80c311832ce33e998c - init4-bin-base: 72eb719abc33fdc169fd287658878eba5520953c - signet-storage: 7841fabdd71dd5b58a7bd21ccd9b7d25d11ddc55 Co-Authored-By: Claude Opus 4.7 <[email protected]> * feat(genesis): add gouda.genesis.json Add the Gouda rollup genesis JSON. Derived from the parmigiana template with Gouda-specific values: chainId 792669, deployHeight 1143386, host-side magic addresses (zenith/orders/passage/transactor), USDC/USDT/WBTC addresses, and startTimestamp. The host side reuses parmigiana.host.genesis.json (Gouda runs on the parmigiana host chain — chainId 3151908). Co-Authored-By: Claude Opus 4.7 <[email protected]> * feat(genesis): wire KnownChains::Gouda through GenesisSpec arms Add the GOUDA_GENESIS_JSON const, GOUDA_GENESIS LazyLock, GOUDA_GENESIS_HARDFORKS LazyLock, and Gouda match arms in genesis_hardforks(), load_raw_genesis(), and load_genesis(). Gouda's host genesis reuses PARMIGIANA_HOST_GENESIS since it runs on the parmigiana host chain. Extend the load_files() test to cover Gouda. Document GOUDA_GENESIS in the README. Co-Authored-By: Claude Opus 4.7 <[email protected]> * chore(deps): bump init4-bin-base to gouda branch with storage fix Pins init4-bin-base at 68a60bbc613d4eded415ad51cc45f5f056d9be83 (gouda branch) which includes signet-cold-sql via git-rev, resolving the diamond dependency issue. Co-Authored-By: Claude Sonnet 4.6 <[email protected]> * chore(deps): bump signet-sdk/bin-base/storage to gouda chains commit * chore(deps): bump init4-bin-base to storage-fix commit (closes signet-cold-sql diamond) * fix(genesis): correct gouda host startTimestamp; bump upstream gouda SHAs - gouda.genesis.json: host.startTimestamp 1779051536 -> 1765226348 (parmigiana host genesis anchor — gouda runs on parmigiana host) - signet-sdk family: bump to ecce6a4 (host-start-timestamp fix) - init4-bin-base: bump to dc2f86c (re-pin to fixed signet-sdk) - signet-storage family: bump to d5bf6fa (re-pin to fixed signet-sdk) * chore(deps): bump init4-bin-base to storage-diamond fix (b2f92e4) * chore(deps): swap git pins for tagged releases (bin-base 0.23.1, signet-sdk 0.19, storage 0.10) Now that init4-bin-base 0.23.1 ships with signet-cold-sql ^0.10.0, the storage 0.10 / signet-sdk 0.19 / bin-base 0.23.1 trio resolves without duplicate signet_cold_sql in the dep graph. Drops all gouda git pins (init4tech/bin-base, init4tech/signet-sdk, init4tech/storage) in favor of crates.io versions. Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]> * chore: bump workspace to 0.19.0 Breaking upstream bumps (signet-sdk 0.18->0.19, storage 0.9->0.10, init4-bin-base 0.21->0.23) plus the new KnownChains::Gouda wiring warrant a minor bump under 0.x semver. Mirrors the 0.17.2->0.18.0 precedent from #143 (storage 0.7->0.8). Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]> * minor update to README --------- Co-authored-by: Claude Opus 4.7 <[email protected]> Co-authored-by: Fraser Hutchison <[email protected]>
chore: bump signet-storage family to 0.8 (workspace 0.18.0) (#143) * chore: bump signet-storage family to 0.8 and migrate to new API Bumps the workspace to 0.18.0 and updates the signet-storage family of crates (signet-storage, signet-cold, signet-hot, signet-hot-mdbx, signet-cold-mdbx, signet-storage-types) from 0.7 to 0.8. This is a breaking upstream release, so the rest of the signet ecosystem (signet-bundle, signet-types, signet-evm, signet-zenith, etc.) and init4-bin-base also move forward to coherent versions: 0.16 -> 0.17, init4-bin-base 0.19.1 -> 0.20.0. Code migration for the new storage API: - UnifiedStorage<H> -> UnifiedStorage<H, B> (second generic for the cold-storage backend). The B parameter propagates through every type that holds the unified handle: StorageRpcCtx, SignetNode, SignetNodeBuilder, and all rpc endpoint signatures. - ColdStorageReadHandle -> ColdStorage<B> (read handle is now a cheap clone of the cold storage handle itself). - ColdStorageTask::spawn / ColdStorageHandle removed; use ColdStorage::new or UnifiedStorage::spawn. - append_blocks and unwind_above on UnifiedStorage are now async. - signet-types 0.17 wraps headers in SignetHeaderV1. Sites that used Sealed<Header> directly now bridge via SignetHeaderV1::new_unchecked and SignetHeaderV1::into_inner. - node-config exposes a NodeColdBackend type alias that resolves to EitherCold when SQL features are on and to MdbxColdBackend otherwise, so callers can name the cold side concretely without caring which runtime backend was chosen. Pre-push checks (fmt, clippy --all-features, clippy --no-default-features, doc) all pass. Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]> * fix: declare missing B generic in SignetNodeBuilder doctest The `# Examples` block on `SignetNodeBuilder` referenced `UnifiedStorage<H, B>` after the storage-0.8 migration but only declared `H` on the `example` fn, so `cargo test --doc` failed to compile. Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]> * refactor: drop B: ColdStorageBackend generic, use concrete NodeColdBackend alias Addresses review feedback that the per-endpoint `<B: ColdStorageBackend>` propagation is code smell rooted in `ColdStorageBackend` not being dyn-compatible. Replace the generic with a concrete `NodeColdBackend` type alias defined in `signet-rpc`: - `test-utils` feature → `MemColdBackend` (in-memory, for tests) - `postgres`/`sqlite` features → `EitherCold` (runtime MDBX-or-SQL) - default → `MdbxColdBackend` This sets up the codebase so the followup boxing-futures upstream work can flip the alias to `Box<dyn ColdStorageBackend>` in one place rather than rewriting every endpoint signature. - `StorageRpcCtx<H, B>` → `StorageRpcCtx<H>` - `SignetNode<N, H, B, AliasOracle>` → `SignetNode<N, H, AliasOracle>` - `SignetNodeBuilder::with_storage<H, B>` → `<H>` - `signet_rpc::router::<H, B>()` → `<H>()` - `signet-node-config` drops its own `NodeColdBackend` alias and the `signet-cold-mdbx as _` workaround; re-exported from `signet-rpc` via the new dep - `StorageConfig::build_storage` cfg-gated to `not(feature = "test_utils")` since the production builder path is meaningless when the alias is swapped to `MemColdBackend` - `signet-rpc/tests/eth_rpc.rs` marked `required-features = ["test-utils"]` - `node-tests` now enables `signet-rpc/test-utils` so its in-memory storage matches the type the builder expects Also addresses review item 3: comment on `block-processor` clarifying that the storage API is signet-agnostic, so the header type at that seam is plain `Sealed<Header>` rather than `SignetHeaderV1`. Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]> * refactor: drop cold backend generic, use ErasedBackend defaults Migrates to the object-safe DynColdStorageBackend trait + ErasedBackend newtype from signet-cold. ColdStorage and UnifiedStorage now default to the erased backend, so the B generic disappears from SignetNode, SignetNodeBuilder, and StorageRpcCtx. NodeColdBackend is gone: the cfg-selected concrete alias is no longer needed since erasure happens at construction time via UnifiedStorage::spawn_erased / ColdStorage::new_erased. StorageConfig inlines the connector logic for the same reason. Pins the signet-storage family to the prestwich/cold-dyn-backend branch via [patch.crates-io] until the changes ship on crates.io. ps: tell swanny i love him 💛 Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]> * fix: move build_storage doctest onto method, disambiguate connect() The doctest example was on the StorageConfig struct, but referenced build_storage which is cfg-gated to not(feature = "test_utils"). Under --all-features the example failed to compile. Moving it onto the method itself means rustdoc only emits the example when the method exists. Also disambiguate the two connect() calls in build_storage: both HotConnect and ColdConnect impl connect() on MdbxConnector, which broke the build under no-default-features. * chore: bump signet-storage to 0.9, signet sdk to 0.18, bin-base to 0.21 signet-storage 0.9 was published with the object-safe DynColdStorageBackend trait and erased defaults, so the prestwich/cold-dyn-backend patch can be dropped. 0.9 transitively pulls signet sdk 0.18, and the FromEnv impl for SqlConnector now lives in init4-bin-base 0.21. --------- Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]> Co-authored-by: James <[email protected]>
chore: bump signet-storage to 0.7 and workspace to 0.17.1 (#132) * chore: bump signet-storage to 0.7 and workspace to 0.17.1 Update all signet-storage family crates (signet-storage, signet-cold, signet-hot, signet-hot-mdbx, signet-cold-mdbx, signet-storage-types) to 0.7 from init4tech/storage#45. Bump workspace version to 0.17.1. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> * chore: switch signet-storage deps from git to crates.io 0.7 Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> --------- Co-authored-by: Claude Opus 4.6 (1M context) <[email protected]>
fix(node): Set backfill max job duration to a safe amount of time (#90) * fix(node): Set backfill max job duration to a safe amount of time Our timeout crash is caused by a footgun on Reth's backfill threshold configuration API. Here's how it roughly looks: - reth allows the mdbx tx timeout sentinel thread to have a configurable max timeout, hidden behind a flag (--db.read-transaction-timeout). We currently, AFAIK, do not configure this. The default value is 5 minutes. Any transactions that live beyond that are killed. - Reth, for the exex backfill, sets the max_duration for its backfill processes to 30 seconds. This does not exceed the default max timeout for the mdbx sentinel thread. - The `ExecutionStageThresholds` default for max duration for execution jobs is 10 minutes. This, by far, exceeds the mdbx timeout sentinel thread max duration. On the execution stage for the reth node this is safe as it calls `disable_long_read_transaction_safety()`, which bypasses the timeout. This is not done on backfill, so this default is unsafe. This is therefore a massive footgun for any exex that configures backfill thresholds. - We were only tweaking the `max_blocks` config value, and using the unsafe default for max duration, when setting the backfill thresholds. This leads to us avoiding an OOM crash, but then running into an mdbx crash due to the sentinel thread forcibly killing the transaction. - Before `set_backfill_thresholds` was added, what caused the OOM was the massive amount of blocks being processed. `max_duration` had a sane default (30s). Once it was introduced, this new bug was added due to the `::default()` usage. - The fix, is therefore, to limit the max duration to a reasonably low time. 30s should be fine. - Note: 30s is a reasonably margin due to a few reasons: - We avoid the hard 5m timeout. - The intended default for exex backfill was already 30s. - There's a 60s timeout warning already, this avoids it entirely. We've seen this error spuriously over the entirety of the signet node's lifecycle. * chore: expose backfill max duration config on env var * chore: version bump
PreviousNext