What is checked
Burned cycles cannot be proven. Grass proves transport with proofs, not computation, and neither do we. What gets checked here is the node's behaviour — and that is detection, not proof.
Three layers
- Transport and uptime. The node signs every request with the address that will later be paid; a replayed signature is cut off by a two-minute window and every signature is single-use.
- Canaries, 3% of jobs. The router sends the node an extra job with its own prompt and a known answer, at temperature 0. The agent's request runs and is billed as usual — a canary never spoils a paid call and is billed to nobody. It catches a node that returns garbage or swaps the declared model for a smaller one.
- Duplicates, 5% of jobs. One request goes to two nodes and a judge compares the answers on a bag of words — not on embeddings, so the judge never depends on the market it is judging. A disagreement is recorded against the pair: with two answers you cannot tell which one lied, so nobody is punished and the count is published instead.
What reaches the model
The router forwards temperature, top_p, stop and max_tokens — both backends (Ollama and OpenAI-shaped) pass them to the model. max_tokens is capped at 8192 and defaults to 2048; an answer longer than the cap is not paid for and counts as a node failure. n and stream are not supported and get a 400 rather than a quiet ordinary answer: one job is one whole answer, and an SDK that asked for a stream could not have parsed what it would have received instead. tools (function calling) is currently ignored: the model answers in text as if no tools were given — know that before you send them. A canary job always runs at temperature: 0 whatever the agent asked for; otherwise an honest node fails a one-word question by chance.
What "nodes registered right now" means
Registering a node proves only control of a key and costs nothing until the phase-2 stake contract: a hundred addresses can be created in a second without answering a single request. So that number is a claim, not a measurement, and the front page shows it last. The measurement is "nodes that delivered work in 24h": nodes that returned at least one completed answer to an agent (duplicates and canaries do not count — nobody bought them).
What this does not catch
A node that proxies the request to a cheaper model of the same family is not always caught by canaries. We know this and say it here, not in a footnote.
Money
The bill is the router's own estimate of the answer's length (four characters per token), never the number the node reports: otherwise a node could inflate its earnings. The node's number is stored separately as drift. Every request carries a cap on output length, and a request is refused up front when the agent's balance cannot cover the worst case.
Phase-1 balances and payouts are policy v0: a keeper with a key executes them. The stake-and-slash contract and hourly payouts in NVDA are phase 2.
← back to the floor