Docs / Status
Status
What is actually producing blocks and serving this explorer. Refreshes every 15 seconds.
Explorer
upThis UI.
- Version
v0.2.42- SHA
80424f59- Memory
175.5 MiB- API cache
0
2d
upProducing blocks.
- Version
v2026.9.25- SHA
e33f1b9e- Block
776077- Tip age
1 s- Producer tick
1 s- PQ NIF
loaded
tx generator
upSubmitting from the local gen_txs pool.
- Interval
0 ms- Eth pool
100- Tron pool
100- Max inflight
20- Max tx raw
1- Submitted
474799- Skips
12303- In flight
3853- Last ok
0 s
2d-hsm
upArmed; producer UDS is up on the 2d host (host-side SIGN_BLOCK, not in-enclave).
- Version
v0.1.0- SHA
e0705a664044- Armed
yes- Producer UDS
yes- Last SIGN_BLOCK
1 s
OPA
upHTTP policy API (v1/data). Not Go runtime.
- v1/data 200
7- v1/data non-2xx
0
Explorer metrics
| Metric | Value | Means | Expect |
|---|---|---|---|
frontend_ex_cache_swr_entries |
0 |
Entries in the stale-while-revalidate cache. | small integer. 0 is OK. |
frontend_ex_cache_api_entries |
0 |
Entries in the explorer API cache. | small integer. 0 is OK on a quiet box. |
vm_memory_total_bytes |
175.5 MiB |
BEAM memory for this explorer VM. | hundreds of MiB, not climbing without bound. |
2d metrics
| Metric | Value | Means | Expect |
|---|---|---|---|
chain_producer_blocks_total |
1756 |
Blocks this producer process has committed since boot. | rising. freeze = not mining (see stalled/idle). |
chain_producer_health_poll_ok |
yes |
Last producer-health poll (the thing that writes these gauges) succeeded. | yes. no = gauges may be stale. |
chain_producer_tick_age_seconds |
0.0 s |
Seconds since the last produce_block tick (even if it mined nothing). | under 10s on a 2s slot. 1e9 = never ticked this boot. |
chain_producer_idle |
no |
Producer is ticking but the tip is older than 10s (empty mempool skips empty blocks). | no while gen_txs should be landing. yes = generator skip/empty, not a dead producer. |
chain_producer_stalled |
no |
Producer tick is older than 10s — the GenServer is not looping. | no. yes = chain.service hung or not running. |
chain_latest_block_age_seconds |
0.0 s |
Seconds since the tip block timestamp. | under 10s while traffic is flowing. 1e9 = no blocks. |
chain_latest_block_number |
776074 |
Highest history.blocks.number on this node. | monotonic, matching the explorer home tip. |
chain_pq_verifier_available |
yes |
libmldsa65_verify.so is loaded so the producer can check enclave signatures before commit. | yes. no = armed producer fail-closes every block (2026-09-21 cutover). |
bridge_intent_watcher_last_tick_seconds |
24.2 s |
Seconds since the last IntentWatcher tick. | under 60s (interval 30s). 1e9 = never ticked. |
bridge_intent_watcher_first_tick_completed |
yes |
Watcher has completed at least one successful tick this boot. | yes after ~30s. no = watcher never started. |
bridge_intent_watcher_stall_ticks |
0 |
Consecutive failed watcher ticks on the same from_block. | 0. ≥5 used to fire the stall alert. |
bridge_intent_watcher_cursor_lag_blocks |
0 |
ETH finalized head minus IntentWatcher cursor. | 0. growing = getLogs/RPC stall (public dRPC 400). |
bridge_watchdog_tripped |
no |
Bridge watchdog auto-halt fired this process lifetime. | no / 0. |
tx generator metrics
| Metric | Value | Means | Expect |
|---|---|---|---|
gen_txs_interval_ms |
0 |
Sleep between gen_txs submissions. 0 = as fast as RPC RTT. | 0 on aya (pack toward ~100 TPS). |
gen_txs_max_inflight |
20 |
Unmined txs allowed per pool sender. | 20 on aya with 100+100 pool. |
gen_txs_eth_pool |
100 |
eth_sendRawTransaction sender count. | 100 on aya. |
gen_txs_tron_pool |
100 |
Tron protobuf sender count. | 100 on aya. |
gen_txs_max_tx_raw |
1 |
Max raw USDC per transfer (1 recirculates dust). | 1 on aya. |
gen_txs_log_every |
1000 |
Print one success line every N broadcasts. | 1000 with --quiet. |
gen_txs_http_only |
yes |
Generator is HTTP-only (no second chain supervision tree). | yes on aya. |
gen_txs_no_faucet |
yes |
Generator will not mint; senders must already hold dust. | yes on aya. |
gen_txs_forever |
yes |
Run until SIGTERM. | yes for 2d-tx-generator.service. |
gen_txs_agent |
no |
Also POST /agent/v1/transfers (HSM SIGN_TRANSFER). | no until operator.agent_identities is populated. |
gen_txs_submitted_total{surface="eth"} |
237725 |
Successful broadcasts this boot, by surface (eth / tron / agent). | rising while the unit is packing blocks. |
gen_txs_submitted_total{surface="tron"} |
237074 |
Successful broadcasts this boot, by surface (eth / tron / agent). | rising while the unit is packing blocks. |
gen_txs_submitted_total{surface="agent"} |
0 |
Successful broadcasts this boot, by surface (eth / tron / agent). | rising while the unit is packing blocks. |
gen_txs_skip_total |
12303 |
Loops with no spendable sender (dust / inflight cap). | can rise; a freeze plus last-ok age growing means the pool is dry. |
gen_txs_inflight |
3853 |
Local unmined reservations still held. | under max-inflight × pool. 0 between blocks is OK. |
gen_txs_empty_streak |
0 |
Consecutive empty loops since the last successful broadcast. | 0 while submitting. climbing = skip. |
gen_txs_last_ok_age_seconds |
0.0 s |
Seconds since last successful gen_txs broadcast. | under 15s while packing. 1e9 = none this boot. |
2d-hsm metrics
| Metric | Value | Means | Expect |
|---|---|---|---|
chain_hsm_sign_ok_total |
1756 |
Successful host-side SIGN_BLOCK round-trips this boot. | rising while blocks land. |
chain_hsm_last_sign_ok_age_seconds |
0.0 s |
Seconds since last successful SIGN_BLOCK on this 2d node. | small while producing. 1e9 = none this boot (OK if the producer is idle). |
chain_hsm_producer_socket_up |
yes |
Host-side producer signer UDS exists (proxy to 2d-hsm). Not an in-enclave scrape. | yes when armed. no = SIGN_BLOCK cannot reach the enclave. |
chain_hsm_armed |
yes |
This 2d node has PRODUCER_HSM_SIGNING_ARMED=true. | yes on aya. no = producer fail-closes once a producer is registered. |
OPA metrics
| Metric | Value | Means | Expect |
|---|---|---|---|
http_request_duration_seconds_count{code="200",handler="v1/data",method="get"} |
3 |
OPA HTTP requests to the policy Data API (v1/data). Not Go runtime. | v1/data POST 200 rising with bridge/gas-EOA decisions. 5xx = policy HTTP failure. |
http_request_duration_seconds_count{code="200",handler="v1/data",method="post"} |
4 |
OPA HTTP requests to the policy Data API (v1/data). Not Go runtime. | v1/data POST 200 rising with bridge/gas-EOA decisions. 5xx = policy HTTP failure. |
Scrapes stay on loopback (2d /admin/metrics, explorer :9568, OPA :8181, gen_txs :4011). Generator falls back to 2d idle if that scrape is unset. 2d-hsm gauges are host-side from 2d (no in-enclave scrape). OPA shows HTTP policy (v1/data) only.