— Network · Base Sepolia · chain 84532
The protocol,
read from the chain
Every figure on this page comes out of the deployed contracts. None of them is typed in, cached from a spreadsheet, or inferred from what the node logs. The reads are eth_call, which the chain answers without a transaction, without gas and without an account — so this page needs no key, holds no key, and cannot move the protocol.
The panel was written with the address book when the site was built, then re-read in your browser. If the endpoint is unreachable you still see real figures and an honest label saying when they were taken — a status page that goes blank when a public node is busy is not a status page.
— Live state
What the contracts say right now
Nine views on three contracts. The ceiling and the liability are the protocol's output; everything else is the state that produces them.
- Current epoch
- 71 002
- Head block
- 51 121 485
- Advanced to epoch
- 70 815the chain's clock is at 71 002 — the gap is epochs nobody called
advance()for - Aggregate ceiling, wad
- 0Ztakora.aggregateCeiling()
- Aggregate liability, wad
- 0Ztakora.aggregateLiability()
- Bonded verifier stake, wad
- 140 100 000 000 000the stake a quorum is measured against
- Required bond, wad
- 37 393 598 585 1521.2× the largest committed ceiling
- Settlement
- open · 0blocked by a shortfall, and its size
- Epoch geometry, blocks
- 720 / 240 / 240epoch / commit window / reveal window
- Quorum
- 666667 ppmof bonded stake; three equal bonds means all three verifiers
- Grace, blocks
- 20slack before a phase is declared missed
- Required evidence classes
- 100b1010 — a bit set means that class must be live
| Issuer | Ceiling, wad | Liability, wad | Headroom, wad | Verdict |
|---|---|---|---|---|
| 0xe143…6b10 | 0 | 0 | 0 | inside |
api/status.js re-reads every figure above from the endpoint named in the bar, decoding the replies with the same module this page was built with. If it cannot answer, the panel keeps the numbers it was built with and says so: a page that goes blank because a public node is having a day tells you nothing about the chain or about itself.
— The clock
What those two epoch numbers mean
The chain's clock, and the contract's
currentEpoch() is block.number ÷ blocksPerEpoch. It moves whether or not anyone is watching. epochStarted() is the last epoch the contract was told it had entered, by anyone calling advance() — a call that is not privileged, because nothing about it is discretionary.
When those two numbers differ, the network is not broken: it is unattended. Every epoch in the gap is an epoch in which no book was recomputed, so a mint in that window was judged against a line drawn earlier. That is the failure mode §05 of the specification is designed around — evidence decays, and the decay is arithmetic rather than a committee noticing.
The window inside the epoch
- Commit — verifiers post a blind hash. 240 blocks.
- Reveal — the same verifiers post the values behind those hashes. 240 blocks.
- Settle — the aggregator's pack is checked against the reveals and the line is written to storage. 240 blocks.
- Grace — 20 blocks of slack before a phase is declared missed, so a slow block does not become a slashed verifier.
Nothing here is scheduled on wall-clock time. A verifier cannot choose which Tuesday it benefits from by withholding a reveal, because there is no Tuesday in the protocol.
A ceiling of 0 is not an error and it is not a bug in this page. The ceiling is computed from attested collateral, and an epoch with no quorate attestation has no attested collateral: the honest answer is zero, and the contract refuses every mint above it — which is the mechanism working, not failing. What has kept this deployment at zero is the cost of a transaction on an OP Stack testnet against a faucet-funded treasury; the arithmetic, and what it would take to close one epoch, is on the operator page.
— Endpoints
Take the numbers yourself
The panel is a convenience. The JSON it reads and the chain it reads are both available to anything you would rather trust.
| Endpoint | What you get |
|---|---|
./api/status | Every figure above, as JSON, cached for 20 seconds, refreshed by the page |
./data/deployment.json | Addresses, selectors, code sizes, creation transactions and the build-time read |
./data/abi/ | The eight interfaces, so any tool can derive the selectors rather than copy them |
https://sepolia.base.org | The chain. The page never asks you to take its word for anything |
curl -s https://demo.ztakora.com/api/status | jq .
# { "ok": true, "headBlock": 51010101, "epoch": "70847",
# "aggregateCeiling": "0", "aggregateLiability": "0",
# "totalBonded": "140100000000000", "requiredBond": "37393598585152",
# "settlementBlocked": { "blocked": false, "outstanding": "0" },
# "params": { "blocksPerEpoch": "720", "quorumNum": "666667", … },
# "errors": [] }
curl -s https://sepolia.base.org -H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_call","params":[{"to":"0x95d445fad4d54e8e5f0375a75779bf79cdf4cf15","data":"0x76671808"},"latest"]}' | jq .
# the same currentEpoch() the panel shows, from the chain rather than from usThe endpoint is one file, with no dependencies and no secrets in it. Its addresses and selectors are generated into web/server/_deployment.mjs from the compiled ABI, and it decodes replies with the same module that wrote this page's build-time figures — so the two cannot drift into disagreement. What the host runs is api/status.js at the repository root: three lines that re-export that module, because a function is built from the source tree and not from the exported site.