Decentralised commercial inference

A coding agent ran for 28 minutes on a TensorCash miner through the AskTilly API. Every turn was metered, and every turn came back with a proof.

AskTilly · 17 October 2026

One API turn on Qwen3.8-27B drawn as its 256-token window. Each token is sampled with a draw derived from the hash of mainnet block 31,536 and the text so far; the finished window is hashed into a proof of work. The model built this animation itself from its own receipt (live version).

What happened

OpenAI's Codex CLI (version 0.163.0) was pointed at the AskTilly API with the model Qwen/Qwen3.8-27B and a 250k-token context. The model was served by a single TensorCash miner: a GPU worker that mines the TensorCash chain and serves API traffic from the same process, so every answer it produces is also a piece of proof-of-work. Codex got one prompt:

Study two things: the generative token visual on paradigm.xyz, and the brand and idea of tensorcash.org, where proof of inference is the proof of work. Then build one self-contained HTML animation that merges them: Paradigm's visual language, TensorCash's colours, words and numbers, driven by the real inference receipt in receipt.json. Research both sites with curl first and keep notes. The exact deliverables are in BRIEF.md. Do not stop until all of them exist; then end your final message with the word COMPLETE repeated three times.

It fetched both sites, wrote notes, wrote a build script, generated the animation above and documented it: 42 tool calls in 28 minutes, four files, no human input after the prompt. The time-lapse is the whole session.

The session, sped up. The prompt types in at 8x; the research and build run at 160x.

Files the session produced: notes.md, build_animation.py, animation.html, README.md. What it was given: prompt.txt, BRIEF.md, receipt.json.

What it cost

Requests42
Input tokens1,207,526, of which 1,153,264 were served from the prefix cache
Output tokens37,063
Rates$0.20 per million input tokens, $0.05 per million cached input tokens, $2.50 per million output tokens
Uncached input54,262 × $0.20 / 1M = $0.011
Cached input1,153,264 × $0.05 / 1M = $0.058
Output37,063 × $2.50 / 1M = $0.093
Total at these rates$0.16

The miner that served the session was paid in $TSC: 0.046 $TSC to tc1q64zl8t7kx2xqk6c2t4cn640nu053ylrr4wnf9g, transaction e408dbf05c353eb3….

The proof

Each of the 42 requests returned a receipt. A receipt contains the input and output hashes, the token counts, and a proof v4 attestation: the 256 chosen tokens of the window, their probabilities, the uniform draws the sampler used, the softmax normalisers, the VDF tick, and the hash of the mainnet block the window was bound to. Sampling is fixed by the protocol (temperature 1.0, top_p 1.0, top_k 50, bf16), so a verifier can replay the window teacher-forced, with the same weights, and compare. A RED verdict counts for zero work.

Receipt resp_a82d038d0dc3371a and the chain state at block 31,536
The receipt behind the animation and the block it is bound to. The proof page carries the full receipt, the attestation blob, the explorer's snapshot of block 31,536 and all 42 receipts of the build session.

The model is the one registered on the TensorCash mainnet, Qwen/Qwen3.8-27B@1d4bf0f2ff6012fd82039f2fa52739d0dd7c60c0. The 42 receipts bind to blocks 31,627 to 31,632; four of those blocks were themselves mined on that model.

Check it yourself

B=https://www.asktilly.ai/blog/decentralised-commercial-inference/proof/data
curl -sO $B/receipt_resp_a82d038d0dc3371a.json
python3 -c 'import json,base64,hashlib;r=json.load(open("receipt_resp_a82d038d0dc3371a.json"));b=base64.b64decode(r["worker_attestation_b64"]);print(len(b),hashlib.sha256(b).hexdigest()==r["worker_attestation_sha256"])'
# 196448 True
python3 -c 'import json;r=json.load(open("receipt_resp_a82d038d0dc3371a.json"));h=r["pow"]["proof"]["block_hash_hex"];print(bytes.fromhex(h)[::-1].hex())'
# b967cbf20fb2a3a85e3fd6eb06ae12360e58054e1b1874811b332cf8a5566446
curl -s https://api.tensorcash.org/esplora/api/block-height/31536
# b967cbf20fb2a3a85e3fd6eb06ae12360e58054e1b1874811b332cf8a5566446

A full replay needs the registered weights and the TensorCash verifier code; both are public. If you have an AskTilly account, every answer in the chat app has a "Verify receipt" action that runs the same check.