Physical devices stream signed telemetry anchored on BOT Chain every interval (blocks are ~0.74s). An autonomous Settlement Agent reads the on-chain anchors, evaluates each device's interval against its on-chain service contract (freshness, uptime, thresholds), and pays or slashes the operator per interval in stablecoin, continuously and gaslessly for devices. On-chain policy, not the agent, is the authority: an operator cannot be paid for data they did not deliver, and the agent cannot stiff an honest operator.
devices (EOAs) sponsor / relayer BOT Chain (968, ~0.74s)
+----------+ signed +---------------+ zero-gas +---------------------+
| devicesim|--telemetry-->| paymaster |--tx------>| TelemetryAnchor |
| (Go) | + blob | (MegaFuel- | | DeviceRegistry |
+----------+ payload | compatible) | | ServiceContract |
+---------------+ | SettlementVault |
| PolicyModule (auth) |
+--------------+ reads anchors, proposes settle +---------+-----------+
| Settlement |------------------------------------------------+
| Agent (Go) | settleEpoch(deviceId, epoch), re-derived on-chain
+--------------+
|
v
+--------------+ wagmi/viem, explorer deep-links
| web (Next.js)| fleet grid, device detail, settlement ledger, proof panel
+--------------+
| Primitive | PulseGrid use | Status |
|---|---|---|
EOA Paymaster (pm_isSponsorable) |
gasless device telemetry | LIVE (self-hosted sponsor). A fleet anchors gaslessly, device balances flat at 0; mainnet is public MegaFuel |
| Blob API (EIP-4844) | raw telemetry in blobs, KZG/hash anchor on-chain | LIVE. Fleet posts type-3 blob txs; blobhash(0) bound on-chain, payload recovered, keccak256 == payloadHash |
| Sub-second blocks (0.74s) | per-interval real-time settlement | LIVE. Per-epoch pay/slash settling on-chain |
| Near-zero fees (base fee 0) | continuous micro-settlement economics | CONFIRMED. ~0.0071 BOT/anchor, blob DA effectively free |
| B DEX / stable | settlement asset (MockUSD on testnet) | mainnet path |
SettlementVault.settleEpoch(deviceId, epoch) is the only settlement entrypoint and its entire
caller surface is (deviceId, epoch). The verdict and amount are re-derived on-chain by the
PolicyModule pure library from the device-signed anchor count (TelemetryAnchor.anchorsInEpoch)
and the stored SLA, so a malicious agent cannot overpay, wrongly slash, pay an un-anchored epoch,
or replay (proven by test_Adversarial_*). Dual escrow: a funder-funded payEscrow pays the
operator on a good epoch; the operator-staked bond is slashed to the treasury on a bad or missing
one. Settlement keys off the count of signed anchors, never raw blob bytes.
The ServiceContract SLA is versioned and append-only: slaOfAt(epoch) resolves the terms in
force when an interval was delivered, and new terms are only allowed to take effect from a future
epoch, so an interval always settles at its delivered-time terms and cannot be repriced retroactively.
Alongside settlement, the agent maintains an explainable reputation snapshot (uptime, cadence
z-score, dropout/degraded flags) from the same on-chain anchor facts. It informs the dashboard
and future risk-priced bonding; it never feeds a settlement verdict.
For live tx hashes and the full reproduce steps, see the repository README.md and
docs/WRITEUP.md.