github agglayer/aggkit v0.11.0-rc10

latest releases: v0.12.0-rc2, v0.12.0-rc1, v0.11.1...
pre-releaseone month ago

🚀 What's New

  • Proxy: bridgetracker step-error handling, error-history cap, and ignored-network fix (#1834): a step in StepStatusError is now classified the same way the tracker already classifies tx-level errors — only a terminal cause (permanent, or transient-turned-exhausted) reports as error; a step still retrying a transient error (e.g. a bridge-service instance temporarily inconsistent during a reorg) now correctly reports running/pending/readyToClaim instead of error. ErrorStep.Description is 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=true param to force a fresh recheck. bridgeservicefinder.GetURL now rejects any networkID in Config.IgnoreNetworkIDs up front (new ErrNetworkDisabled), and buildInitialCache no longer seeds a cache entry for an ignored network even when a BridgeURLs/RPCURLs override 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_index wire encoding for BridgeResponse (#1835): BridgeResponse.GlobalIndex was the lone field still declared as *big.Int, whose default JSON marshalling emits a bare (unquoted) number — even though its own swagger tag said type: string, and its sibling GlobalIndex fields (ClaimResponse, UnsetClaimResponse, SetClaimResponse) already used the repo's BigIntString wrapper. For an L1-origin deposit (global_index = 2^64 + deposit_count), the value exceeds JS's Number.MAX_SAFE_INTEGER, so a plain JSON.parse silently rounded it to a different value — potentially resolving to a different bridge/claim. BridgeResponse.GlobalIndex now uses BigIntString like 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 via eth_getLogs over a small, configurable, recent block window — without needing the debug namespace. Results are merged and deduped against the bridge-service response; an ActivityWarning is 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 report tracking_status/claim_status as running/pending/readyToClaim for a bridge whose current step is retrying a transient error, where it previously reported error. all_steps[].error.description may now contain at most 10 entries instead of the full retry history. The new flush_cache query 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 (existing Contains-based matching is unaffected; exact-match comparison would break). (#1834)
  • 🔌 API/CLI: GET /bridge/v1/bridges and GET /tracker/v1/activity/from/{from_address} now emit global_index as a JSON string instead of a bare JSON number. Any consumer parsing global_index as a numeric type must switch to reading it as a string. The generated swagger schema is unchanged (it already declared type: 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/domain unit tests (TestTrackingStatusDerivation/TestClaimStatusDerivation transient/permanent/exhausted cases, Description cap), TestRegistryForget, TestActivityCache_FlushActivityForcesRecheck, TestGetTxStatusHandlerFlushCacheResetsTracking, TestActivityHandlerFlushCacheForcesRecheck, TestWSFlushCacheResetsTracking, plus new bridgeservice 404-diagnostic cases (#1834)
    • TestNewBridgeResponse_GlobalIndexMarshalsAsQuotedString, TestBigIntString_ToBigIntRoundTrip, TestActivityItemMarshalJSON_EmbeddedBridgeGlobalIndexIsQuotedString; manual before/after capture on a 2-L2 anvil devnet confirming global_index is now quoted (#1835)
    • bridgetracker/sources/activity_rpc_test.go (new), extended bridgetracker/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)

📦 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

Don't miss a new aggkit release

NewReleases is sending notifications on new releases.