🚀 What's New
- Proxy: bridgetracker step-error handling, error-history cap, and ignored-network fix (#1834): a step in
StepStatusErroris now classified the same way the tracker already classifies tx-level errors — only a terminal cause (permanent, or transient-turned-exhausted) reports aserror; a step still retrying a transient error (e.g. a bridge-service instance temporarily inconsistent during a reorg) now correctly reportsrunning/pending/readyToClaiminstead oferror.ErrorStep.Descriptionis capped to the 10 most recent entries instead of growing unbounded across retries. The tracker's tx endpoints (REST/WebSocket) and the activity endpoint gain a?flush_cache=trueparam to force a fresh recheck.bridgeservicefinder.GetURLnow rejects anynetworkIDinConfig.IgnoreNetworkIDsup front (newErrNetworkDisabled), andbuildInitialCacheno longer seeds a cache entry for an ignored network even when aBridgeURLs/RPCURLsoverride exists for it.GET /injected-l1-info-leaf's 404 now reports how far L2 injection has actually progressed (last injected leaf index/block/timestamp) instead of just "not injected". - Bridge service: fix
global_indexwire encoding forBridgeResponse(#1835):BridgeResponse.GlobalIndexwas the lone field still declared as*big.Int, whose default JSON marshalling emits a bare (unquoted) number — even though its own swagger tag saidtype: string, and its siblingGlobalIndexfields (ClaimResponse,UnsetClaimResponse,SetClaimResponse) already used the repo'sBigIntStringwrapper. For an L1-origin deposit (global_index = 2^64 + deposit_count), the value exceeds JS'sNumber.MAX_SAFE_INTEGER, so a plainJSON.parsesilently rounded it to a different value — potentially resolving to a different bridge/claim.BridgeResponse.GlobalIndexnow usesBigIntStringlike its siblings. - Activity endpoint: RPC-based fallback for recent bridges (#1838):
GET /activity/from/{from_address}now merges the existing bridge-service REST scan with a new RPC-based fallback that scans the network's own bridge contract directly viaeth_getLogsover a small, configurable, recent block window — without needing thedebugnamespace. Results are merged and deduped against the bridge-service response; anActivityWarningis added when the bridge-service is behind or unreachable, so extras from the RPC scan are flagged appropriately. New nested config:[Tracker.ActivitySourceBridgeService](PageSize) and[Tracker.ActivitySourceRPC](Enabled,RangeFromBlock,RangeToBlock).
⚠️ Breaking Changes
aggkit-proxy
- 🔌 API/CLI:
GET /tracker/v1/network/{network_id}/tx/{tx_hash}(and the WebSocket "status" message) can now reporttracking_status/claim_statusas running/pending/readyToClaim for a bridge whose current step is retrying a transient error, where it previously reportederror.all_steps[].error.descriptionmay now contain at most 10 entries instead of the full retry history. The newflush_cachequery parameter is additive/opt-in on all three endpoints.GET /injected-l1-info-leaf's 404 error message gains extra diagnostic text appended after the original message (existingContains-based matching is unaffected; exact-match comparison would break). (#1834) - 🔌 API/CLI:
GET /bridge/v1/bridgesandGET /tracker/v1/activity/from/{from_address}now emitglobal_indexas a JSON string instead of a bare JSON number. Any consumer parsingglobal_indexas a numeric type must switch to reading it as a string. The generated swagger schema is unchanged (it already declaredtype: string); only the runtime wire encoding changes to match it. (#1835) - 🗑️ Deprecated Features: none.
📋 Configuration Updates
[Tracker.ActivitySourceBridgeService]
PageSize = 100
[Tracker.ActivitySourceRPC]
Enabled = true
RangeFromBlock = "LatestBlock/-90"
RangeToBlock = "LatestBlock"ActivitySourceRPC defaults to disabled unless explicitly configured; ActivitySourceBridgeService.PageSize falls back to the previous hardcoded value (100) when unset. (#1838)
✅ Testing & Validation
- Test cases:
- Extended
bridgetracker/domainunit tests (TestTrackingStatusDerivation/TestClaimStatusDerivationtransient/permanent/exhausted cases,Descriptioncap),TestRegistryForget,TestActivityCache_FlushActivityForcesRecheck,TestGetTxStatusHandlerFlushCacheResetsTracking,TestActivityHandlerFlushCacheForcesRecheck,TestWSFlushCacheResetsTracking, plus newbridgeservice404-diagnostic cases (#1834) TestNewBridgeResponse_GlobalIndexMarshalsAsQuotedString,TestBigIntString_ToBigIntRoundTrip,TestActivityItemMarshalJSON_EmbeddedBridgeGlobalIndexIsQuotedString; manual before/after capture on a 2-L2 anvil devnet confirmingglobal_indexis now quoted (#1835)bridgetracker/sources/activity_rpc_test.go(new), extendedbridgetracker/sources/activity_test.go(REST/RPC merge & warning matrix),bridgetracker/config_test.go; manual devnet test stalling bridge-service sync to confirm the RPC-fallback warning surfaces and clears (#1838)
- Extended
📦 Full Changelog
- fix: v0.11.0-rc9 proxy integration: bridgetracker step-error status handling, error-history cap, and bridgeservicefinder ignored-network fix by @joanestebanr in #1834
- fix(bridgeservice): encode BridgeResponse.GlobalIndex as BigIntString, not bare JSON number by @arnaubennassar in #1835
- feat(bridgetracker): add RPC-based fallback for recent bridges in /activity endpoint by @joanestebanr in #1838
Full Changelog: v0.11.0-rc9...v0.11.0-rc10