Checking test ndt-virtual-xmx98_1791393589_00000000000BBCD0
Run this in BigQuery after joining M-Lab’s free data group (see below). The archive row should show the same network number and a download speed close to the signed one. If the row is missing or the network differs, the funder can challenge the day before it settles.
SELECT id, date,
a.MeanThroughputMbps AS download_mbps,
a.MinRTT AS min_rtt_ms,
client.Network.ASNumber AS asn,
server.Site AS mlab_site
FROM `measurement-lab.ndt.ndt7`
WHERE date = "2026-10-07"
AND id IN ("ndt-virtual-xmx98_1791393589_00000000000BBCD0", "ndt-virtual-xmx98_1791393589_00000000000BD429")Contracts on Base Sepolia
| Roll Call v3 | 0xD4EDf73a6604840986C32339A96c8E59cB915984Terms, readings, day marks, payouts. Source verified on Sourcify (exact match). |
|---|---|
| Test dollar (tUSD) | 0xA6F6e6Bb1Bc46a54635a417Fc8d601B39BaB37626 decimals, minted by the attester key for the demo. No value. |
| Attester | 0x629239c5b7B7e6E78944DFd8f4D519161BbA79d9Checks networks, records readings, settles days, relays closures; pays every visitor’s gas. |
| Funder | 0xb582FBB0b36365dED379f6B9Bc9AC6f2de4A304BOpens demo terms, challenges suspicious days, ends terms after repeated absences. |
| Arbiter | 0xf7ADb15eb48085a35Efb1eb04c946bE4D20e5AcDDecides challenges. |
| Provider | 0x0E82E9f33e83a3be2895b9Fe68b75A735790fD4bReceives payouts and posts bonds for demo terms. |
| Roll Call v2 (retired) | 0x27500043Bf3A8ae3405264412C2D4D43E8744150Replaced the same afternoon after a second review: parts of the day now divide school hours, offline reports reach the contract until the day settles, weak partial days are strikes, and closures cover a run of days. |
| Roll Call v1 (retired) | 0x6b5fa7F9bD52D8162bF61D329ca167C5CF069dd5The first deployment, replaced the same morning after an audit found that a funder could end a term before earned days settled, closures could erase passes, retrying could earn a full day, and one key could hold two roles. |
Read a term from the chain
With Foundry’s cast, no account needed. The register returns one entry per school day: readings, parts of the day passed, which parts (a bit mask), mark (0 open, 1 present, 2 partial, 3 absent, 4 silent, 5 closed, 6 voided), closed, challenged, voided.
RPC=https://sepolia.base.org RC=0xD4EDf73a6604840986C32339A96c8E59cB915984 cast call $RC "termCount()(uint256)" --rpc-url $RPC cast call $RC "register(uint256)((uint8,uint8,uint32,uint8,bool,bool,bool)[])" 1 --rpc-url $RPC cast call $RC "state(uint256)((uint128,uint128,uint128,uint128,uint128,uint16,uint16,uint8,bool,bool))" 1 --rpc-url $RPC
Run the contract’s tests
45 tests, including a fuzz test over 500 random terms that checks no money is created or lost.
git clone https://github.com/RohanGlitched/rollcall cd rollcall/contracts forge test -vv
Check a reading against M-Lab’s archive
M-Lab publishes every test it serves in BigQuery, including the client’s network number and the throughput its own server measured. Roll Call writes each real reading’s full test id on chain, so a funder (or anyone) can join the two.
Access is free: join M-Lab’s discuss group with a Google account, then query from any Google Cloud project. Tests appear in the archive within about a day, which is why a real term’s challenge window should be longer than that.
Open any real reading on a term page and its test id links here with the query filled in.
-- every Roll Call reading's id, from the chain, -- joined to M-Lab's own record of the same test SELECT id, date, a.MeanThroughputMbps AS download_mbps, a.MinRTT AS min_rtt_ms, client.Network.ASNumber AS asn FROM `measurement-lab.ndt.ndt7` WHERE date BETWEEN "2026-10-23" AND CURRENT_DATE() AND id IN UNNEST(@rollcall_test_ids)
Our readings, checked against M-Lab’s archive
M-Lab loads each day into BigQuery about two days later, so the first real readings (October 23) can be checked from about October 25. The script that does it is in the repository (web/scripts/archive-check.mjs); its results will appear here, reading by reading.
What it costs to run
Gas measured from this deployment’s own transactions on Base Sepolia, priced at Base mainnet’s gas price and the ETH price right now (0.0060 gwei, ETH $2,309). This is execution gas; Base also charges a small fee for posting the data to Ethereum, which grows with the size of the transaction.