Quickstart
You need Rust (stable) and, for the multi-node run, bash. The node is one
binary; the whole mesh is one script.
1. Run the protocol tests
Fast — covers crypto, capsules, replay, pacts, and payments with no network.
cd verse-node && cargo test --workspace # 151 tests
2. Run the real mesh
Eight native processes on loopback, each its own Ed25519 identity, talking over real iroh QUIC and fetching each other’s blobs over the wire by CID.
cd verse-node && bash scripts/verified-run-demo.sh
It runs an honest scenario (job → settled) and a lying-provider scenario (forged-but-signed receipt → caught by a third process replaying it → refunded).
Set VERSE_VERBOSE=1 to trace every QUIC round-trip and over-the-wire blob
pull.
3. Write a capsule
A capsule is a WASM module exporting run(in_ptr, in_len, out_ptr) -> out_len
and memory, run deny-by-default: no network, no filesystem, no clock, no
randomness. Anything it could observe from its environment could make it answer
differently twice — and then re-running it would prove nothing.
verse capsule new hello --lang rust # or --lang wat for a single file
cd hello && cargo build --release --target wasm32-unknown-unknown
verse capsule run target/wasm32-unknown-unknown/release/hello.wasm --input hello
verse capsule test target/wasm32-unknown-unknown/release/hello.wasm \
--input hello --expect-output ifmmp # exit 0/1, for CI
This is the same runtime the mesh uses, with no node and no network — the
(output, fuel, output-cid) it prints is exactly what a provider computes and a
verifier replays.
For C/C++, pass -Wl,--global-base=1048576; for AssemblyScript, --memoryBase 131072 --initialMemory 4. Those are required, not tuning: the defaults place
static data inside the host’s input region, and the runtime refuses such a module
rather than let it compute a silently corrupted answer.
4. Containers / swarm
docker build -t verse-node:local .
docker compose up --abort-on-container-exit --exit-code-from client
# or on a real Docker Swarm (overlay network)
docker swarm init
docker stack deploy -c docker-stack.yml verse
5. Inspect a running mesh
verse status # discover + handshake every node
verse ping --addr 127.0.0.1:9003 # inspect one node
6. Smoke-test inference
A small Llama-2 (TinyStories 15M, a Rust port of llama2.c) runs as an ordinary
content-addressed WASM capsule — its weights are a blob the capsule pulls via
env.blob_read, so an inference receipt is replay-verifiable like any other job.
There is no model role and no verse:model/generate@1. verse generate is a
local, no-network smoke test:
verse generate --prompt "Once upon a time"
Needs assets/stories15M.bin + assets/tokenizer.bin (~80 tok/s on CPU).
7. Benchmark
./scripts/bench.sh # throughput + latency vs concurrency
PROVIDERS=8 BUILD=release ./scripts/bench.sh
See Architecture for how the pieces fit together.