Skip to content

Releases: threshold-network/tbtc-subgraph

Release list

v0.52.0

Choose a tag to compare

@mswilkison mswilkison released this 06 Oct 15:11
4c0a385

v0.52.0

This release adds the rebate-staking history needed by Explorer, records the treasury fee divisor in force at each deposit reveal, and retires legacy economic operator-staking fields. It also guards remaining mapping contract calls so reverted enrichment reads do not halt indexing.

Changes

  • #22: guard mapping contract calls and enforce guarded access in CI; preserve DKG event counts when enrichment calls revert.
  • #23: record nullable Deposit.treasuryFeeDivisorAtReveal from ordered initialization/governance events. Zero is known disabled fees; null is unknown history.
  • #24: add RebateStaker, RebateStakingEvent, and RebateStakingStats. T balances use 18 decimals, rebates use satoshis, and pending unstaking remains included until finalization.
  • #25: index registration independently of legacy token stake; expose application operator identities and reported authorization weights. Remove retired operator stake balances/roles and obsolete aggregate stake counters; retain wallet/group public keys, rewards, and raw fault telemetry.
  • #26: refresh patched brace-expansion releases and enforce a reviewed braces depth-guard backport in the Node build/deploy toolchain. The version-only OSV exception applies to one locally patched advisory and expires 2026-11-04.

Compatibility and rollout

The operator schema changes are breaking. Consult docs/operator-staking-retirement.md for removed fields and replacements. Preserve the previous published deployment for historical stake queries and rollback. This version requires a full re-sync; no graft is configured.

Deploy and sync, publish, validate the deployment-pinned gateway, update and verify the production API proxy, and only then release Explorer PR tlabs-xyz/threshold-dapp#453. Explorer cleanup #454 removes an unused query and preserves the active wallet fallback. A frontend/subgraph rollback must preserve schema compatibility.

Validation

The combined mapping changes passed code generation, mainnet and Sepolia builds, 17 mapping tests, and 97 Node regression/toolchain tests before the dependency follow-up. The follow-up adds seven security checks, passed the same build/mapping gates, and passed the full configured OSV scan. The unfiltered audit still identifies the source-patched braces package by version.

Production evidence

  • Annotated tag v0.52.0 points to 4c0a3858513c6973f6ee3aa969eda0db2b83e56a.
  • Release checks and Studio deployment succeeded; production approval was granted by piotr-roslaniec.
  • Studio deployment completed at 2026-10-05 07:09:46 UTC with deployment ID QmQQQ5hHWPfFC77zzMgWJSq7MbW8ctumDxnChGoi1yAdr5.
  • Studio fully synced and prepublication validation passed on October 6: seven same-block staker balance/pending comparisons, five rebate receipt comparisons, six earliest/recent deposit fee-divisor comparisons, and preserved wallet keys. Independent indexed-history replay reconciled all 50 stakers and 583 events.
  • Published on Arbitrum One on October 6. The deployment-pinned gateway passed the full smoke check before cutover.
  • Production now serves v0.52.0 through https://api.threshold.network/subgraph/mainnet, with cache namespace subgraph-v0.52.0-20261006. The exact pre-cutover ordinary query returned the new deployment on both MISS and HIT. Full production smoke passed at Ethereum block 26,134,128 with no indexing errors, canonical-block checks, seven staker balance/pending comparisons, five rebate receipts, six deposit fee-divisor comparisons, operator schema, and preserved wallet keys.
  • Published v0.51.0, deployment QmY5pJqTSL4iTJMHu7cU5AFzzY3kHyXbjcqEr9db6wXeE7, and its protected pinned gateway are retained for rollback. Any rollback must use a fresh cache namespace and account for frontend schema compatibility.
  • The dependent frontend PR tlabs-xyz/threshold-dapp#453 is merged and deployed in v1.10.16. Its preview passed staking totals/pagination, deposit fee/details, redemption records and wallet fallback checks; the canonical production site serves the tagged build and displays the new staking data.

The backend is live in production. Contract comparisons are representative samples; replay of all indexed staking history is a consistency check, not an exhaustive independent reconstruction of chain logs.

v0.49.0

Choose a tag to compare

@piotr-roslaniec piotr-roslaniec released this 07 Aug 16:28
40a158c

What's new

Subgraph mainnet deploy at commit 40a158c. Adds cross-chain redemption tracking, the FROST/Schnorr event surface mirrored from the tBTC monorepo, routed-deposit support for all five L2 depositors, and a sweep-fee/deposit-key fix that was previously corrupting on-chain data.

Changes by PR

  • #5 fix(swept): record real treasury fee and per-deposit minted amount — swept deposits now record the actual treasury fee charged (not zero) and the per-deposit minted amount on the redemption entity, so downstream queries can compute the realized fee correctly.
  • #3 feat: add cross-chain redemption tracking via Wormhole VAA parsing — indexes L1BTCRedeemerWormhole.RedemptionRequested plus the matching call-handler, and tracks Redemption, WormholeSender, and CrossChainRedemptionTracker entities from block 18500000 on mainnet.
  • #4 feat(subgraph): mirror FROST/Schnorr event surface from tBTC monorepo — adds the FROST-wallet registration and ECDSA/P2TR fraud-router event handlers, plus the lifecycle-router events. Mirrors tlabs-xyz/tbtc:feat/frost-schnorr-migration at the frozen frost-extraction-source-v1 tag.
    • Companion: scripts/verify-subgraph-abi-drift.mjs now includes the anonymous flag in event normalization, so two ABIs with same signature but different anonymous no longer hash identically.
  • #7 feat: index routed-deposit destinationOwner on Deposit — adds RoutedDeposit entity and indexes DepositInitialized / DepositFinalized from GaslessDepositor, ArbitrumDepositor, BaseDepositor, SuiDepositor, and StarkNetDepositor. Both legacy and current event formats handled. Bridge.deposits(depositKey) now resolves the routed-deposit destinationOwner when the matching routed event arrives first.
  • #8 fix: pass the correct deposit key to Bridge.deposits() — the prior code passed a corrupted key (lowercase a-f hex nibbles read as 0); now uses the same hexToBigint as everywhere else, which already handles lowercase hex correctly.

Networks

Network Studio subgraph Source build
Mainnet tbtc-mainnet this tag

Sepolia is compile-checked only (no Studio subgraph exists; see docs/deployment.md).

Deployment notes

Cut from master @ 40a158c. Triggered by pushing the v0.49.0 tag; passed the checks build gate and the production environment approval gate before deploying.