About this devnet
An Ethereum chain whose every block is made by a client written from scratch.
The blocks here are built and executed by wacuum, an execution client written in wac, a language for WebAssembly. The same program serves this site: the explorer, the faucet and the JSON-RPC your wallet talks to. There is no geth, no Reth and no JavaScript underneath it.

One program, from your wallet to the disk
Everything to the right of Caddy is a single wac program, about 1,800 lines of its own on top of wacuum, compiled to one WebAssembly module.
wacuum, the client
An execution client is the half of an Ethereum node that runs transactions and keeps the state. wacuum is one, written without borrowing an EVM, a trie or a curve from anywhere else.
The EVM
Every opcode through Osaka, with each fork's gas rules. Calls run on a stack of the interpreter's own, so 1024-deep calls work on any host.
Every precompile
ecrecover, SHA-256, RIPEMD-160, MODEXP, bn254 and its pairing, BLAKE2F, KZG point evaluation, the seven BLS12-381 operations and P256VERIFY, all in wac.
State and tries
One journal undoes a failed call. The Merkle-Patricia tries are kept between blocks, and a root rehashes only the paths to what changed.
Blocks
Header rules, system calls, withdrawals, EIP-7685 requests and blob gas, with every root and the bloom checked. A block that fails leaves no trace.
Engine API and JSON-RPC
What a consensus client steers it with, and what wallets and libraries read it with, over HTTP with JWT authentication.
devp2p
RLPx, snappy, eth/69 and discovery v4. It syncs from geth, and geth syncs from it.
Against the reference tests
Every fixture of execution-spec-tests v5.4.0 passes, and every transition between forks.
| Cancun | Prague | Osaka | |
|---|---|---|---|
| State tests | 16,847 | 18,869 | 19,517 |
| Blockchain tests, from block RLP | 17,685 | 20,859 | 21,558 |
| Engine API tests | 17,685 | 20,878 | 21,577 |
| Blocks rebuilt from the mempool | 17,685 | 20,878 | 21,577 |
wac, the language
wac is a C-family language that compiles to WebAssembly with garbage collection. Its compiler is written in wac, and is built from a ladder of compilers whose lowest rung is WebAssembly text written by hand: no other language's toolchain is needed to have it.
A wac program reaches nothing it was not handed. This one was granted three things — to read files, to write them, and the network — and its built module says so; the host refuses it anything else.
The same module runs on Node, on V8 directly, and on wasmtime, which has no JavaScript in it at all.
The pages of this site are web's components, the ones a wac program mounts in a browser, rendered here on the server instead: every value from the chain is escaped on its way out, and the browser is sent HTML and a stylesheet, and a policy that lets it run nothing else.
Using it
- Add the network
Network name wacuum devnet RPC URL https://wacuum.voltrevo.com/rpcChain id 20261117 (0x13528fd)Currency ETH - Take some ether
The faucet sends 10 ETH to any address, once every 24 hours for each address and each visitor.
- Point your tools at it
curl -s https://wacuum.voltrevo.com/rpc -H 'content-type: application/json' \ -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'cast block-number --rpc-url https://wacuum.voltrevo.com/rpc cast send --rpc-url https://wacuum.voltrevo.com/rpc --private-key $KEY 0x… --value 1etherAnything that speaks JSON-RPC works the same way: ethers, viem, web3.py, a wallet.
The fine print
- The ether here is worth nothing, and the chain may be started again from nothing.
- One node makes every block and there is no consensus layer, so each block is final the moment it is made.
- The explorer keeps a day of blocks; older ones, and the receipts of transactions from before the node last restarted, are not kept.
- Don't send anything here that is worth something anywhere else.