/v2/verify (HMAC is symmetric: verification goes through Invarians today; an on-chain anchor for keyless verification is planned).shift, shift_delta, shift_magnitude_delta and per-chain precursors[] (v3 design preview, calibrated per chain).capability_level: per_message_attested. CCTP V2 exposes the Circle ECDSA signature per message (crypto.anchor: circle_ecdsa, retrievable via /v2/cctp/attestation/{nonce} — V2 keys retrieval by the Circle-attributed nonce). CCIP matches source send and destination execute by bytes32 messageId (retrievable via /v2/ccip/message/{message_id}); crypto.anchor is null today (no per-message cryptographic anchor captured yet for CCIP).
The Delta is a continuous reading of how far each classifying observable has moved from its long-term baseline (~30 days), and whether the deviation is growing or reverting. Soft slowdowns and slow drifts that do not flip the regime still surface here. Each classifying observable carries a MetricBlock in diagnostic mode. The v3 redesign adds a per-chain precursors[] array carrying calibrated boolean flags with axis, lead, lift, and cross-chain status (calibration is chain-type-exclusive).
ratio: short EMA value, the same one the regime classifier reads.ratio_long: long-term baseline (~30 days).shift: how far the metric has moved from baseline (signed).shift_delta: direction of value movement between two consecutive cycles.shift_magnitude_delta: whether the deviation is growing or shrinking.drift on each panel entry (structural and demand axes), flagged predictive_status: "deprecated_unvalidated" in v3 after FDR testing on 2025 corpora.panel = client.get_panel_v2(chains=["optimism"], include="diagnostic")
op = next(e for e in panel.l2 if e.chain == "optimism")
shift = op.structural.metrics["sequencer_publish_latency"].shift
if shift > 0.5:
finality_buffer = nominal_buffer * (1 + shift)
audit.annotate(shift=shift, buffer_extended=True)
Per-metric shift on a given observable activates once the long-term EMA stabilizes (~30 days post-launch). Before activation, the panel exposes the raw value and the agent can derive its own deviation against a self-computed baseline. shift_available: false per metric until then.
Invarians certifies network state. The table below documents what each state has looked like historically. No action is prescribed, your agent defines its own policy.
| Regime | Freq. | Documented events | What was observed |
|---|---|---|---|
| S1D1 | 95.4% | Baseline | All axes within calibrated parameters. |
| S2D1 | 3.0% | ETH Merge (Sept 2022) · ETH Shanghai (Apr 2023) · POL Reorg Storm (Feb 2023) · SOL ×4 outages (2021–2022) | Structural rhythm deviation (τ). Demand nominal. Fee monitors: silent. |
| S1D2 | 1.7% | ETH DeFi Summer (2020) · ETH NFT Mania (2021) · POL Gas Crisis (May 2021) · POL Network Halt (Mar 2021) | Demand elevated (π). Structural layer nominal. Infrastructure functioning correctly under elevated load. |
| S2D2 | 0.2% | No ground truth event documented | Both axes above calibrated thresholds simultaneously. Not observed in 4 years of ETH data. |
| State | Documented event | What was observed |
|---|---|---|
BS1 |
Baseline | Variable-latency bridge surface within calibrated bounds under methodology BRIDGE_STATE_STRUCTURAL_v1.2. Fast-mode window invariants hold (success rate ≥ 0.995, fallback rate ≤ 0.05) and invariant I5 is muted (no Standard-mode message older than 48 h without an Iris attestation). Circle Iris and Chainlink RMN healthy. |
Every attestation returned by the API includes a cryptographic signature (inv_sig_...).
This signature is generated with HMAC-SHA256 and can be independently verified using the /v2/verify endpoint.
POST /v2/verify Content-Type: application/json { "payload": { /* panel object without signed_execution_context */ }, "signature": "hmac-sha256:..." } → { "valid": true, "key_id": "invarians-v1", "version": "2.0.0" }
import requests
response = requests.get(
"https://api.invarians.com/v2/panel",
headers={"Authorization": "Bearer YOUR_API_KEY"},
params={"include": "diagnostic"},
)
data = response.json()
# Verify the signature independently (strip signed_execution_context from payload)
sec = data["signed_execution_context"]
payload = {k: v for k, v in data.items() if k != "signed_execution_context"}
verify = requests.post(
"https://api.invarians.com/v2/verify",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"payload": payload, "signature": sec["signature"]}
)
print(verify.json()) # → {"valid": true, "key_id": "invarians-v1", "version": "2.0.0"}