What Vibe Hash is
Bitcoin miners spend electricity on hashes nobody uses, and only one lucky winner per block gets paid. Vibe Hash replaces the hashes with training steps on a real model that someone has paid to have trained. There's no lottery: everyone whose work passes the checks is paid in proportion to how much they did.
There are two ways to take part, and you can do both from the same computer.
- Worker. Let your computer train and check models. This is the mining. You can start with no VIBE at all: your first 5 VIBE of pay becomes your stake.
- Train a model. Give the network a spreadsheet of examples and some VIBE, and get back a trained model that makes predictions on new rows.
Training a model takes four commands once Vibe Hash is set up. Your data is a CSV file, and the result is a model file that makes predictions; Get started walks through each step.
>vibehash train my-data.csv --budget 100# posts the job; the network trains it >vibehash job status# rounds done, accuracy, budget left >vibehash job download# saves my-data-model.npz >vibehash predict new-rows.csv# a prediction for every row
Most people join the public network, run at node.vibehash.org, and vibehash setup connects to it by itself. To join a different network, you need its node address, such as 203.0.113.7: get it from whoever runs it, or run your own with vibehash testnet.
Test network. VIBE has no cash value, so don't buy or sell it. The software hasn't been audited.
Get started
You need Python 3.10 or newer, free from python.org. On Windows, tick “Add python.exe to PATH” while installing it. Choose what you want to do, then paste the commands into PowerShell on Windows or Terminal on macOS.
A round
The network runs in rounds. With default settings a round takes about 38 seconds and ends with one new block. The bar is drawn to scale, in the colours the worker's dashboard uses for each phase. Jobs with big models get longer rounds, sized so an ordinary computer on a home connection can still download the model, train a unit and upload its snapshots in time. A model with 34 million weights, for example, gets rounds of about 17 minutes.
- Register3 s
Workers check in with their measured speed and memory. Those with 5 VIBE staked get work first; newcomers still earning their stake get small batches from what's left.
- Compute20 s
The work is split into small units sized so a slow laptop can finish one in time; faster machines get more units, not bigger ones. Each worker trains its units and sends a sealed fingerprint of each result before the deadline.
- Reveal5 s
A random number that nobody could know earlier picks which parts of each unit get checked. Workers reveal their results and those parts.
- Verify, then seal10 s
Other workers re-run the chosen parts and report whether they match; checking is paid work too. Passing results are averaged into the model, and payments and penalties go into a block, with a record of the round's signed messages that anyone can replay to check every decision. The network's validators vote on the block before it counts.
Who runs the network
No single computer is in charge. The network is run by validators: nodes with VIBE staked that take turns leading rounds, in an order weighted by stake and fixed in advance.
- The leader runs the round. Workers do the round with whichever validator is leading it. They find it on their own, so nothing changes for you.
- The others check its block. Each validator replays the round from its record of signed messages, and votes against any block whose payments, penalties or choices don't follow from them.
- Two thirds make it final. A block counts once validators holding more than two thirds of the stake have signed it. Those signatures travel with the block, so anyone can check them.
A leader that pays itself extra, favours a worker or drops someone's work is voted down, and the next validator runs the round again. If a validator goes offline, the others carry on without it, and it catches up when it's back. Two different blocks can never both be final unless more than a third of the stake signs both, and a validator that votes two ways leaves signed proof behind.
Anyone can check all of this without trusting a node: vibehash chain verify replays every round and checks every block's signatures, and a node started with --peer syncs the chain and refuses any block that fails those checks. A staked account can become a validator with vibehash validator join, and vibehash validator list shows who votes.
Checking the work
Re-doing all the work would double its cost, so Vibe Hash re-runs small random pieces and makes cheating a losing bet. Each unit of training is split into 8 segments, with a saved snapshot of the model between each one. These are the checks, cheapest first.
- Sealed answerWorkers send a fingerprint of their result before anyone reveals anything. Copying someone else's answer can't match your own fingerprint.
- Proven snapshotsEvery snapshot a worker reveals must match the fingerprint, so nobody can swap in different ones after seeing which parts get checked.
- Sanity checkTraining must start from this round's model and end where the worker says it did, and the change must be a sensible size. That stops boosted updates that would wreck the model.
- Spot-check replayA randomly chosen worker re-runs 3 random segments and compares. A result must be within the job's tolerance and within 1% of what that segment of training actually changed, which absorbs rounding differences between chips but not skipped work.
- Duplicate unitsAbout 1 in 5 units secretly goes to two workers. If their answers differ, the whole unit is re-run to see who was wrong.
- Planted fakesTwo known-fake results per round are slipped to checkers. A checker who approves one is caught being lazy; a checker who rejects honest work is caught too, because every rejection is re-run.
- Checking the nodeEvery choice the node makes in a round follows from the round's signed messages, which its block commits to, so anyone can replay the round. It keeps recent rounds' checkpoints, so anyone can also re-run its checks on the actual results. And it signs a receipt for every message it accepts, so a worker whose message goes missing from the round can prove it.
Would faking part of the work pay off?
A worker skips some segments and makes up the snapshots. The spot-check picks segments at random.
Getting caught costs half your stake and the whole round's pay, and the duplicate-unit check is a second chance to catch you. Faking less saves less work but still risks the stake.
CPUs and GPUs
AI is trained on graphics cards, and Vibe Hash uses them. A worker with an NVIDIA, Intel Arc, AMD (on Linux) or Apple GPU trains on it through PyTorch, which vibehash setup installs for your card. Without one, it trains on the CPU. Both run exactly the same maths in the same order, so any worker can check any other worker's result.
- GPUs get more of the work. Each worker measures its real training speed and the network hands out units in proportion once it has delivered: a new worker starts with a few units and can take up to twice as many each round it delivers in full, dropping back to what it managed if it misses a deadline. A GPU that's 20 times faster ends up with about 20 times the units and 20 times the pay. Pay per unit of work is the same for everyone.
- Memory decides which jobs you can take. For GPU jobs the worker reports your graphics memory, and you're only given jobs that fit in it.
- GPU jobs use float32, the number format GPUs are built for. Many consumer GPUs, including Intel Arc and Apple, can't do float64 at all, so float64 jobs always run on the CPU.
- Checking works across devices. Chips round numbers very slightly differently, so a GPU's result and a CPU's replay never match bit for bit. The replay rule above allows for that without letting skipped training through, even late in training when each step barely moves the model.
- Shortcuts are off. Workers disable GPU modes that trade accuracy for speed, such as NVIDIA's TF32, and use deterministic kernels. Otherwise replays on another device wouldn't match.
Measured on an NVIDIA RTX 4070 SUPER against a CPU: results differed by at most 8e-8, more than a thousand times inside the 0.0001 tolerance, and by under 0.1% of what each segment of training changed. The same GPU gave identical results every run. On a 2.2-million-weight model the GPU ran each step about 10 times faster than a 28-thread CPU.
Payment
Each round creates a pool of VIBE: new coins from the block subsidy (50 VIBE, halving every 210 rounds, as in Bitcoin) plus the job poster's fee for the units that passed. Job posters pay nothing for work that failed. The pool is split three ways, drawn to scale here.
- 80%Workers, by verified training work × reputation
- 15%Checkers, by re-run work × reputation
- 5%Block producer, only if work was verified
Anything nobody earned is burned, so nobody gains by rejecting good work. Everyone is paid at the same rate per unit of work, so a laptop earns less in total but gets paid every round it contributes. You don't need a mining pool.
Worked example: one round
Subsidy 50 VIBE + job fee 10 VIBE = a 60 VIBE pool. 22 units passed, everyone at full reputation.
| Who | Did | Share | Paid |
|---|---|---|---|
| Old laptop | 2 units | 2 / 22 of 48 VIBE | 4.36 VIBE |
| Office desktop | 5 units | 5 / 22 of 48 VIBE | 10.91 VIBE |
| RTX 3060 rig | 15 units | 15 / 22 of 48 VIBE | 32.73 VIBE |
| Checkers | re-ran segments | 15% of pool | 9.00 VIBE |
| Block producer | sealed the block | 5% of pool | 3.00 VIBE |
Every worker gets 2.18 VIBE per unit, the same rate on every machine. Reputation scales your share between 0.5× and 1.0×. New wallets start at 0.8×, gain 0.02 each round they deliver verified work, and lose 0.05 for missing a deadline. It moves per round rather than per unit, so a laptop builds reputation as fast as a big rig.
Penalties
Crashes and dropped connections cost you only that round's pay. Your stake is at risk only for things an honest machine never does.
| What happened | Stake | Pay | Reputation |
|---|---|---|---|
| Unit passed its checks | kept | paid for the unit | +0.02 for the round |
| Didn't finish before the compute deadline | kept | that unit unpaid | −0.05 |
| Crashed or went offline after sending a sealed answer | kept | whole round unpaid | −0.05, and back to the new-worker limit of 4 units |
| Didn't answer a checking task | kept | no checking pay | −0.05 |
| Result failed a replay, sanity or duplicate check, or didn't match its fingerprint | −50% | whole round unpaid | reset to 0.5 |
| Approved a planted fake while checking | −50% | whole round unpaid | reset to 0.5 |
| Rejected honest work while checking | −50% | whole round unpaid | reset to 0.5 |
Half of any slashed stake goes to whoever caught the problem and the other half is burned. When you unstake, the coins wait 20 rounds before you can spend them, and they can still be slashed in that time. A wallet whose stake falls below the 5 VIBE minimum goes back to earning it in: small batches of work, no checking others, and its pay refills the stake first.
Starting with nothing
Bitcoin needed no stake, because a hash proves itself. Training can only be spot-checked, so the stake is what a cheater stands to lose. To keep that without anyone handing out coins, a new worker earns its stake in. Its first 5 VIBE of pay goes into its stake instead of its wallet, so what it could lose by cheating grows with what it has earned. Until then it's held to small batches, gets units only after staked workers have theirs, and never checks other workers' results. Its own results are always checked by a staked worker. The network's first validators vote with bootstrap stake, which can never be withdrawn or spent and is burned if they leave. So every spendable coin starts from work.
Job file
vibehash train writes and posts the job for you from a CSV, choosing these settings to fit your data. To control every setting yourself, vibehash job template writes a job file to edit and vibehash post-job posts it. The network checks every field when a job is posted and rejects anything out of range.
| Field | Allowed | What it does |
|---|---|---|
id | 1–64 chars: a–z 0–9 . _ - | Unique name for the job |
fee_per_round | whole syn, ≥ 0 | What you pay for a round where every unit passes. 1 VIBE = 100,000,000 syn. |
model.n_in / n_out | 1–4096 / 2–1000 | Number of inputs and number of classes |
model.n_hidden | one width, or a list of 1–8 widths up to 8192 | Hidden layers. [512, 512] is two layers of 512. |
precision | float32 or float64 | float32 runs on GPUs. float64 always runs on the CPU, because many GPUs can't do it. |
data | synthetic + seed, or npz + sha256 | post-job --dataset fills in the npz hash for you |
lr, batch_size | 0–10, 1–4096 | Training settings |
steps_per_unit | up to 100,000 | Training steps in one unit of work |
checkpoint_every | must divide steps_per_unit | Steps per checked segment |
units_per_round | 1–10,000 | How much work each round hands out |
memory_mb | 1–1,000,000 | Machines with less memory won't be given or asked to check this job: graphics memory on a GPU, RAM on a CPU |
tolerance | up to 0.01 | How closely a replay must match. Use 0.0001 for float32 jobs, so a GPU's result checks out on a CPU, and 0.000001 for float64. |
max_update_ratio | up to 10 | Largest change one unit may make to the model |
compute_s | optional, 5–3600 | A longer compute phase for this job's rounds, in seconds, for bigger units. Without it, rounds are sized from the model automatically. |
A dataset is an .npz file with four arrays: x_train, y_train, x_val and y_val. It's loaded without running any code inside it, and every worker checks its hash against the job before using it.
Troubleshooting
The messages you're most likely to see, and what to do about each.
'python' is not recognized / command not found
Python isn't installed, or isn't on your PATH. On Windows, run the python.org installer again and tick “Add python.exe to PATH”. On macOS and Linux, use python3; the “Your computer” setting in Get started does this for you.
No matching distribution found for vibehash
Vibe Hash is on PyPI, so this means pip couldn't use it. Usually your Python is older than 3.10: python --version shows which you have, and python.org has the current one. Otherwise update pip with python -m pip install --upgrade pip, check you're online, and run the install command again.
I lost my wallet file
Rebuild it from the 24 recovery words setup showed you when it created the wallet: vibehash wallet restore asks for them and saves a new wallet file with the same address and coins. Wallets made before recovery words existed (before version 0.4) have no words, so for those the backed-up file is the only copy.
row 12, column 'colour': 'red' isn't a number
Every input column must hold numbers. Leave text columns out of the file, or turn them into numbers, such as small = 1, medium = 2, large = 3. The column you're predicting can hold names; if it isn't the last column, name it with --label.
No module named vibehash
Vibe Hash was installed for a different copy of Python. Run the install command again, starting with the same python or python3 you use for everything else.
no node address / no wallet: run `vibehash setup`
Commands use the node address and wallet that setup saved. Run setup once, or add --node or --wallet to the command. To switch networks, run vibehash setup --node NEW-ADDRESS.
can't reach node at http://…
Check the node address with whoever runs the network. The node may also be offline for a moment; the worker keeps retrying on its own, so you can leave it running.
stake at least 500000000 syn to take work
This network was set up to require stake, rather than letting workers earn it in, and yours is under the 5 VIBE minimum (500,000,000 syn). Ask whoever runs it for some VIBE, then stake it as Get started shows.
message timestamp too far from node clock
Your computer's clock is more than 2 minutes off. Turn on automatic time sync in your system settings.
node switched networks (genesis changed); refusing to continue
The address you're connected to now runs a different network. Check you have the right node address, then start the worker again.
this wallet is encrypted; a password is required
Run the command in a normal terminal window so it can ask for your password. To run unattended, set VIBEHASH_PASSWORD in that terminal first.
dataset … not available on this node
The job expects a dataset the network doesn't have. Post the job with the dataset file filled in, which uploads it with the job.
vibehash devices only lists the CPU
GPU support isn't installed, or was installed without support for your card (a plain pip install torch on Windows does that). Run vibehash install-gpu: it finds your card, installs the PyTorch build that runs on it, and tests it. If it says your driver is too old, update it from your card maker's website and run it again.
GPU training needs PyTorch / device … not found
You asked for a GPU with --device, but PyTorch can't see one. Run vibehash devices to see what's available, or leave out --device to fall back to the CPU automatically.
censored: round 12: the node signed a receipt for your commit but sealed the round without it
The node accepted one of your messages, promised in a signed receipt to record it, then sealed the round without it, which can cost you that round's pay and reputation. Your receipts are proof: they're saved in receipts.jsonl in your worker's folder under ~/.vibehash/cache. Anyone can check that file with vibehash chain verify --receipts receipts.jsonl, so share it with whoever runs the network, and with other workers deciding whether to trust that node.
The dashboard looks garbled, or I want plain log lines
Add --plain to worker or testnet. Logs redirected to a file get plain lines automatically, and setting NO_COLOR turns the colours off.
I'm registered but never get any units
Check three things. Your memory must be at least the job's memory_mb: graphics memory for jobs that run on your GPU, system RAM otherwise (add --memory-mb if it's detected wrong). New workers get at most 4 units until they've delivered once, so the first round is small. And while you're still earning your stake, you only get units staked workers didn't need, so on a busy network the first rounds can pass with none; that changes once your first 5 VIBE is in.