Skip to content

v0.11.0-rc4

Pre-release
Pre-release

Choose a tag to compare

@arnaubennassar arnaubennassar released this 06 Aug 14:56
· 52 commits to develop since this release
27831b4

πŸš€ What's New

  • eth_getLogs completeness verification (logsBloom check) + l1infotreesync self-healing escalated reorg (#1773): root-causes the corruption class behind the bokuto production incident β€” a mixed/flaky RPC view during an L1 reorg can silently omit a log from eth_getLogs while every observed header hash stays canonical, invisible to header-hash reorg detection by construction. Header logs blooms have no false negatives, so a block whose bloom is positive for a queried address but whose logs response has no matching entry is now flagged as a suspected omission and arbitrated with a single re-query by block hash; a confirmed omission retries loudly instead of silently committing corruption. Wired into multidownloader (l1infotreesync) and the legacy sync downloader (bridgesync, claimsync, l2gersync) for the unfinalized zone. Additionally, l1infotreesync now persists a last verified checkpoint on every passing sanity check, and escalates a second consecutive reorg-at-the-same-block to that checkpoint (or to InitialBlock for a pre-existing corrupted DB) β€” turning a permanent stuck-halt loop into an automatic full self-heal. Also adds bounded error-log throttling (common.ShouldLogRetryAtError) to indefinite retry loops across syncers.
  • bridgetracker idle-timeout eviction (#1770): new [Tracker].IdleTimeout (default 30m) forgets a supervised bridge β€” terminal or still active β€” once nobody has polled or subscribed to it for that long, bounding registry memory for bridges nobody is watching. Complements the existing RetentionPeriod (terminal-only grace period).
  • Configurable per-method agglayer client cache policy (#1771): replaces the hardcoded "only GetCertificateHeader is cached" behavior with a per-method cached/passthrough/forbidden policy on CacheConfig, covering all six AgglayerClientInterface methods. Lets the bridge tracker collapse repeated per-bridge agglayer calls into one cached call per network.
  • claimsync GetClaimsPaged timeout fix (#1774): fixes context deadline exceeded on the bridge service claims endpoint for deployments with a large claim table (observed on v0.11.0-rc3), by restricting the ranking CTE to the requested page's global indexes and adding two new indexes (claimsync0002 migration).
  • force_ger_update redundant-send race fix (#1778): closes a race where the in-flight guard could clear before the timer reset was applied, occasionally causing two bridgeMessage transactions to be sent back to back in production despite #1769's earlier dedup fix. The guard is now cleared exclusively by the single-threaded confirmation step that also advances the timer.
  • Dependency bump: github.com/pion/dtls/v3 3.1.2 β†’ 3.1.4 (#1754).

⚠️ Breaking Changes

  • πŸ› οΈ Config: [Tracker] (proxy config) gains IdleTimeout (default 30m) (#1770).
  • πŸ› οΈ Config: CacheConfig gains 6 new per-method fields (SendCertificate, GetCertificateHeader, GetEpochConfiguration, GetLatestSettledCertificateHeader, GetLatestPendingCertificateHeader, GetNetworkInfo), each cached/passthrough/forbidden. Cached=true alone no longer implies GetCertificateHeader caching β€” each client config must now explicitly opt individual methods into cached (#1771). See the PR for the exact per-deployment config each existing client (Tracker/AggSender/Validator) needs to preserve prior behavior.
  • βš™οΈ Operational: on a DB with pre-existing committed-state divergence (no checkpoint recorded yet), l1infotreesync's first reorg escalation purges back to InitialBlock β€” i.e. a full automatic resync β€” replacing today's "halted forever until manual DB wipe." multidownloader StepSafe now fetches headers for every block in a queried range (not just blocks with logs); persisted data volume is unchanged, RPC load increases during initial sync/catch-up only (#1773).
  • πŸ—„οΈ Storage: new migrations l1infotreesync0005 (single-row l1info_checkpoint table, #1773) and claimsync0002 (indexes on claim/unset_claim global_index, #1774) β€” both apply automatically on startup.

πŸ“‹ Config Updates

  • 🧾 Tracker (proxy) β€” new IdleTimeout, shown with the rest of [Tracker] for context:
    [Tracker]
    RetentionPeriod = "10m"
    IdleTimeout = "30m"                # <- new field, default 30m
    RegisterResolveTimeout = "3s"
    L1BlockFinality = "LatestBlock"
    L2BlockFinality = "LatestBlock"
    MaxTrackedBridges = 100000
  • 🧾 Tracker (proxy) agglayer client cache β€” explicit per-method policy:
    [Tracker.AgglayerClient.ConfigurationCache]
    TTL = "1s"
    Capacity = 100
    SendCertificate = "forbidden"
    GetCertificateHeader = "cached"
    GetEpochConfiguration = "cached"
    GetLatestPendingCertificateHeader = "cached"
    GetNetworkInfo = "cached"
  • 🧾 AggSender agglayer client cache β€” unchanged behavior, now explicit:
    [AggSender.AgglayerClient.ConfigurationCache]
    TTL = "5m"
    Capacity = 100
    SendCertificate = "passthrough"
    GetCertificateHeader = "cached"
    GetEpochConfiguration = "passthrough"
    GetLatestSettledCertificateHeader = "passthrough"
    GetLatestPendingCertificateHeader = "passthrough"
    GetNetworkInfo = "passthrough"

πŸ› Bug Fixes

  • l1infotreesync self-heals a permanent stuck-halt loop caused by RPC log omission during an L1 reorg, instead of requiring a manual DB wipe (#1773).
  • claimsync's GetClaimsPaged no longer times out against large claim tables (#1774).
  • force_ger_update no longer occasionally double-sends a bridgeMessage transaction (#1778).

πŸ”§ Maintenance

  • Bump github.com/pion/dtls/v3 3.1.2 β†’ 3.1.4 (#1754).

Full changelog: v0.11.0-rc3...v0.11.0-rc4