For miners and verifiers
Verifiers
A verifier checks that the proof in a block matches the promised model. The verifier software is open source, and anyone can run one [1][2]. The protocol does not pay verifiers. Nodes and pools run one to check blocks for themselves.
Hardware and software
The quick check and the smell test run on an ordinary processor. The full check runs the model again over the 256 tokens of the window, so it needs a GPU with the model loaded, plus CUDA and PyTorch, the standard software for running models on NVIDIA GPUs [1][3]. The verifier runs in Docker [1].
Setting up a verifier
Setting up a verifier takes four steps. The full commands are in the official guide [1].
Choose how to run it
Own verifier What it is The node runs its own verifier on the same machine. Node setting -validationapi=realNeeds a GPU Yes, for the full check Verifier service What it is The node runs the cheap checks itself and sends the full check to a verifier it chooses. Node setting -validationapi=desktop -validatorhttpurl=<url> -validatorapikey=<key>Needs a GPU No, the service does the full check In both cases, the node always runs the cheap checks itself, such as signatures, proof of work, the model registry and the quick and smell checks [4]. A node or exchange can also share one verifier service with others [3].
Start the verifier
The verifier is reached over HTTP on port 9000. It does not start without an access key for the operator (
OPERATOR_API_KEY). Who else may use it, and how often, is set withVERIFY_AUTH_ENABLED,VERIFY_API_KEYSandVERIFY_RATE_LIMIT_PER_MIN[1].deployments/docker-compose/core-validation-api/Check that it works
The verifier answers on
/health. Submitted checks can be followed on/v1/verify/status/<hash_id>, and anyone can see the result on/v1/public/status/<hash_id>without a key [1][6].Route What it does /v1/verify/quickQuick check /v1/verify/quick-smellQuick check and smell test /v1/verify/fullFull check, with a rerun of the model /v1/verify/challenge/requestChecks submitted for a challenge /v1/verify/status/<hash_id>Status of a submitted check /v1/public/status/<hash_id>Public status, without a key /healthHealth check Requests are sent in a fixed binary format, described on the Schemas page of the API reference [7].
How the results are used
A proof that fails the quick check stops at the node that received it. The smell test keeps implausible proofs from spreading through the network. A block that fails the full check is not rejected outright, but counts for zero work, so it is unlikely to stay in the chain [3][12]. The verification whitepaper still describes RED as a rejection. The node that runs today counts the block for zero work instead [12]. In tests, honest proofs came out 97.3% GREEN, 2.7% AMBER and 0% RED [8].
| Verdict | Meaning | The block |
|---|---|---|
| GREEN | The proof cannot be told apart from an honest run of the promised model. | Accepted |
| AMBER | Unusual, but not enough for RED. | Not accepted on this verdict alone. The node can run the full check again. |
| RED | The proof does not fit the promised model. | Counts for zero work |
Challenging a model
Some problems only show up after a model has been registered, for example a model that does less computation than it claimed. These can be raised with a challenge [3].
- Every model is registered with a deposit before it can be used for mining [9].
- To challenge it, someone points to a block mined with that model and locks a deposit of their own. This schedules a verdict 100 blocks later [3].
- During those 100 blocks, miners can include commits that support the challenge. With 50 commits, the challenge succeeds. The model is banned, its deposit is burned, and the challenged block no longer counts towards the work behind the chain [3].
- Without enough commits, the model stays registered and the challenger loses their deposit [3].
A challenge can be posted from the AI Models tab in the wallet [10]. The same flow is available in RPC [11].
| Command | What it does |
|---|---|
createmodeldeposit | Locks the deposit to register a model |
createmodelcommit | Adds a commit that supports a registration or challenge |
getmodelregistrationstatus | Shows where a registration stands |
createchallengedeposit | Locks the deposit to challenge a model |
createmodelreclaim / createmodelburn | Reclaims or burns a model deposit |
References
- [1]TensorCash blog, How to run a verifier, 27 June 2026.tensorcash.org/blog/how-to-run-a-verifier/
- [2]TensorCash website, Get involved.tensorcash.org/build/
- [3]Inference Verification: Mathematical Specification.tensorcash.org/whitepapers/Verification_Whitepaper-modern.pdf
- [4]TensorCash blog, How to run a node, 27 June 2026.tensorcash.org/blog/how-to-run-a-node/
- [5]TensorCash source code.git.tensorcash.org/tensorcash/tensorcash
- [6]TensorCash docs, Verifier REST.tensorcash.org/docs/verifier/api
- [7]TensorCash docs, Schemas.tensorcash.org/docs/schemas
- [8]TensorCash mainnet announcement on Bitcointalk, 17 July 2026.bitcointalk.org/index.php?topic=5588724.0
- [9]TensorCash blog, One chain, many models: how TensorCash runs multiple AI models, 14 August 2026.tensorcash.org/blog/how-tensorcash-runs-multiple-models/
- [10]TensorCash blog, How to run the wallet, 27 June 2026.tensorcash.org/blog/how-to-run-the-wallet/
- [11]TensorCash docs, JSON-RPC, model.tensorcash.org/docs/rpc/model
- [12]TensorCash blog, Trust in action: how verification caught an fp8 miner, 23 July 2026.tensorcash.org/blog/catching-a-quantized-miner/