Notes / Findings

What is queued behind the watched timelocks (2026-09-26): nothing executable, 24 dead entries, recent traffic listed

Findings2026-09-26Chain: Ethereum, Arbitrum

Source: data/finding_2026-09-26-pending-timelock-ops.md in the repository, rendered here without changes. Source file

New read-only tool scripts/check_pending_ops.py (+ scripts/lib/pending_ops.py, 5 tests). A timelock's delay is a promise; the queue is the fact. For each watched timelock it reads the queue events of the last N days (365 by default: an OpenZeppelin queue has no expiry), asks the contract itself whether each operation is still pending (isOperationPending for OpenZeppelin TimelockController, queuedTransactions for the Compound-style Timelock), and lists what becomes executable and when, plus what was queued in the last 14 days and is already gone. Disclosed only: no score reads it. Ethereum and Arbitrum through Tenderly's public gateway (full-history eth_getLogs), calls through publicnode.

Read live 2026-09-26 (6 timelocks, all read, 0 unread)#

TimelockFamily, delayQueue events in 365 dLatestExecutable pending now
Uniswap Governance Timelock (root of 11 tracked targets on 5 ecosystems)Compound-style, 2 d (grace 14 d)542026-07-250
Compound Governance TimelockCompound-style, 2 d5722026-09-220 (+24 expired)
Ethena TimelockOpenZeppelin, 24 h1862026-09-240
Arbitrum L1 TimelockOpenZeppelin, 3 d692026-09-180
Arbitrum L2 Core Governor TimelockOpenZeppelin, 8 d142026-09-040
Arbitrum L2 Treasury TimelockOpenZeppelin, 3 d62026-06-250

What this is and isn't#

A watchlist of 6 timelocks probed live (family and delay read from the contract), not every timelock the oracle scores: Aave's governance executors, Sky's pause proxy, Morpho Vault V2 submit, Tempo and Robinhood timelocks are not covered yet and would each need their own event family. "0 pending" means 0 in the logs the RPC returned; a timelock whose log range is refused is reported UNREAD, never as an empty queue. A quiet timelock (Uniswap: 54 events in a year, none since 07-25) and a truncating RPC look alike from outside, which is why every row shows its event count and latest date.

Verification#

python3 scripts/check_pending_ops.py --days 365 --recent-days 14, exit 0, 6/6 read. Unit tests on the decoding and status logic. No key, nothing sent.

Not an audit, not investment advice. All notes ยท Back to the dashboard.