Repository navigation
v0.11.0-rc4
Pre-release
Pre-release
·
52 commits
to develop
since this release
π What's New
eth_getLogscompleteness 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 frometh_getLogswhile 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 intomultidownloader(l1infotreesync) and the legacysyncdownloader (bridgesync,claimsync,l2gersync) for the unfinalized zone. Additionally,l1infotreesyncnow persists a last verified checkpoint on every passing sanity check, and escalates a second consecutive reorg-at-the-same-block to that checkpoint (or toInitialBlockfor 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.bridgetrackeridle-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 existingRetentionPeriod(terminal-only grace period).- Configurable per-method agglayer client cache policy (#1771): replaces the hardcoded "only
GetCertificateHeaderis cached" behavior with a per-methodcached/passthrough/forbiddenpolicy onCacheConfig, covering all sixAgglayerClientInterfacemethods. Lets the bridge tracker collapse repeated per-bridge agglayer calls into one cached call per network. claimsyncGetClaimsPagedtimeout fix (#1774): fixescontext deadline exceededon the bridge service claims endpoint for deployments with a largeclaimtable (observed onv0.11.0-rc3), by restricting the ranking CTE to the requested page's global indexes and adding two new indexes (claimsync0002migration).force_ger_updateredundant-send race fix (#1778): closes a race where the in-flight guard could clear before the timer reset was applied, occasionally causing twobridgeMessagetransactions 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/v33.1.2 β 3.1.4 (#1754).
β οΈ Breaking Changes
- π οΈ Config:
[Tracker](proxy config) gainsIdleTimeout(default30m) (#1770). - π οΈ Config:
CacheConfiggains 6 new per-method fields (SendCertificate,GetCertificateHeader,GetEpochConfiguration,GetLatestSettledCertificateHeader,GetLatestPendingCertificateHeader,GetNetworkInfo), eachcached/passthrough/forbidden.Cached=truealone no longer impliesGetCertificateHeadercaching β each client config must now explicitly opt individual methods intocached(#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 toInitialBlockβ i.e. a full automatic resync β replacing today's "halted forever until manual DB wipe."multidownloaderStepSafenow 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-rowl1info_checkpointtable, #1773) andclaimsync0002(indexes onclaim/unset_claimglobal_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
l1infotreesyncself-heals a permanent stuck-halt loop caused by RPC log omission during an L1 reorg, instead of requiring a manual DB wipe (#1773).claimsync'sGetClaimsPagedno longer times out against largeclaimtables (#1774).force_ger_updateno longer occasionally double-sends abridgeMessagetransaction (#1778).
π§ Maintenance
- Bump
github.com/pion/dtls/v33.1.2 β 3.1.4 (#1754).
Full changelog: v0.11.0-rc3...v0.11.0-rc4