Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 16 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,9 @@ curl -fsSL https://c0mpute.com/install.sh | sh
```

That is the whole setup. The installer puts `c0mpute`, `infernet` and `coinpay` in
`~/.c0mpute/bin` and starts the worker for you (a systemd service where it can, a
background daemon otherwise). Check it with `c0mpute worker status`, then run
`~/.c0mpute/bin`, checks each release binary's minisign signature, and starts the worker
for you as **your user, not root** (a systemd user service where it can, a background
daemon otherwise; `--system-service` for a root-managed system service). Check it with `c0mpute worker status`, then run
`c0mpute bench` once so your node gets a score on the
[node board](https://c0mpute.com/nodes).

Expand All @@ -31,17 +32,23 @@ background daemon otherwise). Check it with `c0mpute worker status`, then run
- **What it does:** serves AI inference (through [Infernet](https://infernetprotocol.com)),
FFmpeg transcoding and storage jobs from the network.
- **What you get:** paid inference is billed through CoinPay (16 coins or PayPal) and you set
your payout address with `infernet payout set <coin> <address>`. Paid demand is early, so
expect small, irregular earnings for now.
your payout address with `infernet payout set <coin> <address>`. Paid demand is early and the
network is small, so expect small, irregular earnings for now. Storage payouts
([CIP-006](docs/prds/006-challenges-metering-payouts.md)) are not paying yet, and CoinPay
settlement for hosting and ads is built but off by default.
- **House models (on by default):** the node pulls and serves the models Infernet publishes at
[infernetprotocol.com/house-models.json](https://infernetprotocol.com/house-models.json) that fit
it (RAM, and always leaving 10% of the disk free), today Profullstack's
`saas-business-strategist-agent` and the uncensored `huihui_ai/qwen3.5-abliterated:4b`/`:9b`.
`c0mpute worker status` lists them and the disk they use. Opt out at install with
`--no-house-models` (uncensored only: `--no-uncensored-models`), or later with
`infernet house-models off` / `infernet house-models uncensored off`; cap the disk with
it (RAM, and always leaving 10% of the disk free), today Profullstack's agent models.
The uncensored `huihui_ai/qwen3.5-abliterated:4b`/`:9b` are on the list too, but a node
serves them **only if you opt in** (`--uncensored-models` at install, or
`infernet house-models uncensored on`). `c0mpute worker status` lists them and the disk
they use. Opt out of house models at install with `--no-house-models`, or later with
`infernet house-models off`; cap the disk with
`infernet house-models cap <gb>`. Models you pulled yourself are never removed.
Details: [infernetprotocol.com/docs/house-models](https://infernetprotocol.com/docs/house-models).
- **Trust:** the worker runs code from the network on your machine. What it can touch, how
releases are signed, and how to remove it: [docs/node-safety.md](docs/node-safety.md). If you
would rather not trust a new project with your main machine, run it in a VM or on a spare box.
- **Invite people:** share `https://c0mpute.com/r/<your-handle>`. Nodes installed from it
show your handle on the board (`C0MPUTE_REF=<handle>` does the same by hand).

Expand Down
34 changes: 29 additions & 5 deletions apps/web/src/app/providers/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -108,19 +108,40 @@ $ c0mpute worker status # the installer already started it`}</CodeBlock>
that fit it, so a request for one can reach any node, not only ours. A model is pulled
only when the machine has its listed RAM and the download leaves 10% of the disk free;
one at a time, never while a job runs, and checked against its pinned digest. Models
you pulled yourself are never removed.
you pulled yourself are never removed. Uncensored models on that list are{" "}
<strong className="text-[var(--color-fg)]">off unless you opt in</strong>.
</p>
<CodeBlock>{`$ c0mpute worker status # lists house models + disk used
$ infernet house-models off # opt out (removes what it pulled)
$ infernet house-models uncensored off # skip uncensored models only
$ infernet house-models uncensored on # opt in to uncensored models (off by default)
$ infernet house-models cap 20 # at most 20 GB`}</CodeBlock>
<p className="text-[var(--color-dim)]">
At install: <code>--no-house-models</code> or <code>--no-uncensored-models</code>.
At install: <code>--no-house-models</code>, or <code>--uncensored-models</code> to opt in.
The list and how to add a model:{" "}
<a href="https://infernetprotocol.com/docs/house-models">infernetprotocol.com/docs/house-models</a>.
</p>
</section>

<section className="space-y-3 text-sm leading-7">
<h2 className="font-semibold text-[var(--color-fg)]">[ before you install ]</h2>
<p>
A node runs code from this network on your machine, so here is exactly what it can do.
The worker runs as <strong className="text-[var(--color-fg)]">your user, not root</strong>:
the installer writes to <code>~/.c0mpute</code> and starts a systemd user service
(<code>--system-service</code> for a root-managed one, which needs sudo). Release
binaries are signed with minisign and the installer checks the signature before it
installs anything (public key: <a href="https://github.com/profullstack/c0mpute/blob/master/minisign.pub">minisign.pub</a>).
Jobs are the workloads your node advertises, run by those signed binaries as child
processes with CPU and GPU limits. That is not a sandbox: they can read what your user
can read. The code is MIT and <a href="https://github.com/profullstack/c0mpute">on GitHub</a>.
</p>
<p className="text-[var(--color-dim)]">
If you would rather not trust a new project with your main machine, run it in a VM or on a
spare box first. That is a reasonable call, and the node earns the same there.
Full details: <a href="https://github.com/profullstack/c0mpute/blob/master/docs/node-safety.md">docs/node-safety.md</a>.
</p>
</section>

<section className="space-y-3 text-sm leading-7">
<h2 className="font-semibold text-[var(--color-fg)]">[ CPU voice inference ]</h2>
<p>
Expand Down Expand Up @@ -159,8 +180,11 @@ $ c0mpute worker start --roles tts,stt`}</CodeBlock>
itself by default (it learns the winning price, undercuts it, and asks
more when busy) and never goes under the minimum you set with{" "}
<code>c0mpute pricing set --min 0.05</code>; or ask one fixed price.
When you win, your node runs the job and publishes a receipt; signed
receipts and automatic settlement are not live yet. A direct protocol deal has{" "}
When you win, your node runs the job and publishes a receipt. Settlement
through CoinPay is built for hosting and ads but{" "}
<strong className="text-[var(--color-fg)]">off by default</strong> while it is
tested; storage payouts (<a href="https://github.com/profullstack/c0mpute/blob/master/docs/prds/006-challenges-metering-payouts.md">CIP-006</a>)
are not paying yet. A direct protocol deal has{" "}
<strong className="text-[var(--color-fg)]">no protocol fee</strong>. Jobs
bought through the <Link href="/market">market</Link> will pay you{" "}
<strong className="text-[var(--color-fg)]">95%</strong> once market
Expand Down
83 changes: 83 additions & 0 deletions docs/node-safety.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
# Running a node: what it can touch

A c0mpute node runs work for strangers on your machine. That deserves a plain
answer to "what am I trusting?", so here it is. If anything below is wrong,
open an issue; this page is meant to be checkable against the code.

## What the installer does

`curl -fsSL https://c0mpute.com/install.sh | sh` (source: [`scripts/install.sh`](../scripts/install.sh)):

- Downloads the `c0mpute`, `infernet` and `coinpay` release binaries and
**verifies each one's minisign signature** against the public key in
[`minisign.pub`](../minisign.pub) before installing it. A bad signature aborts the install.
- Installs everything under your home directory: binaries in `~/.c0mpute/bin`,
data in `~/.local/share/c0mpute` (or a bigger volume it symlinks, unless
`NO_STORAGE_RELOCATE=1`).
- Starts the worker as **your user, not root**: a systemd *user* service
(`~/.config/systemd/user/c0mpute-worker.service`), with systemd lingering so
it starts at boot. Without systemd it runs as a background daemon.
- Uses `sudo` only if it is already configured, and only for conveniences:
a `/usr/local/bin` symlink and a `/etc/profile.d` PATH hook, plus the
system service if you ask for one with `--system-service`. It never runs the
worker as root. Skip all of it by running the installer without sudo.

## What the worker runs

- Jobs are the workload types your node advertises (`c0mpute worker status`
lists them): inference through Infernet, FFmpeg transcodes, storage shards,
LoRA training, speech, music and image generation. They are run by the
installed, signed binaries; a buyer sends data and parameters, not code to execute.
Container workloads (video, game servers) start only pinned, well-known images, and only
when Docker or Podman already works on the box.
- Jobs run as child processes of the worker with CPU-thread and GPU limits.
**This is not a sandbox.** A job runs with your user's permissions, so a
bug in a workload runtime could read files your user can read. If that is
not acceptable for your main machine, run the node in a VM, a container or
on a spare box. It earns the same there.
- The node keeps itself up to date (`C0MPUTE_NO_AUTO_UPDATE=1` turns that
off). Updates are verified against the same minisign key before the binary
is swapped.

## Models it serves

- **House models** (on by default): the models Infernet lists at
[infernetprotocol.com/house-models.json](https://infernetprotocol.com/house-models.json)
that fit your RAM and leave 10% of the disk free. Turn them off with
`infernet house-models off`, or `--no-house-models` at install.
- **Uncensored house models are off unless you opt in** (`--uncensored-models`
at install, or `infernet house-models uncensored on`).

## Network

Outbound connections only; no port forwarding needed. Some workloads make
outbound HTTP requests on a buyer's behalf from your IP (`crawl.fetch`,
`workflow.step` http calls). Those are limited to public addresses, capped in size and
time, and are listed in `c0mpute worker status` like every other workload. The node joins the
libp2p mesh and advertises its capabilities, benchmark score and (if you set
them) a nickname and referral handle, which appear on the public
[node board](https://c0mpute.com/nodes).

## Money: what pays today

- **Paid inference** through Infernet pays out via CoinPay to the address you
set with `infernet payout set <coin> <address>`.
- **Hosting and ads** settlement through CoinPay is built (PRs #162, #163,
#166) but **off by default** while it is tested.
- **Storage payouts** ([CIP-006](prds/006-challenges-metering-payouts.md)) are
not paying yet.

The network is small and paid demand is early. Expect small, irregular
earnings for now, and budget for the electricity and wear your hardware takes.

## Removing it

```sh
systemctl --user disable --now c0mpute-worker # or: c0mpute worker stop
rm -rf ~/.c0mpute ~/.local/share/c0mpute ~/.config/systemd/user/c0mpute-worker.service
loginctl disable-linger "$USER" # if nothing else of yours needs it
```

With a system service, also run
`sudo systemctl disable --now c0mpute-worker && sudo rm /etc/systemd/system/c0mpute-worker.service`.
Remove Infernet with `infernet uninstall`.
23 changes: 21 additions & 2 deletions docs/prds/006-challenges-metering-payouts.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,37 @@
---
cip: 006
title: "Storage challenges, metering, and provider payouts"
status: Draft
status: In progress
authors:
- anthony@profullstack.com
created: 2026-08-29
updated: 2026-08-29
updated: 2026-11-09
implements: DIP-0012 (0012-storage-plugin.md) Phase 5, DIP-0007 (CoinPay DID)
depends-on: 003, 004
blocks:
implementation:
estimate: "4–6 weeks"
---

## Status (2026-11-09)

Storage payouts are **not paying yet**. What exists today:

| Piece | State |
|---|---|
| Shared payment path (`node/crates/c0mpute-core/src/payments.rs`: `Rail`, idempotent `Ledger`, per-round USD cap) on CoinPay payouts | Merged (#163), **off by default** |
| Hosting marketplace: proof of storage + settlement for hosted sites | Merged (#163), **off by default** |
| Ads billing + settlement through the same path | Merged (#162, #166), **off by default** |
| Storage challenges issued continuously by the network, storage metering, monthly provider statements (this CIP) | Not started beyond `c0mpute-verify`'s `StorageChallenge` primitive |
| Paid inference payouts (Infernet, via CoinPay) | Live today; not part of this CIP |

The planned storage rate is $0.0015/GB-month, so 1 TB earns about $1.50 a
month. The network is still small (live count on
[c0mpute.com/nodes](https://c0mpute.com/nodes)), so nobody should run a node
for storage income yet. The README, `/providers` and
[`docs/node-safety.md`](../node-safety.md) say this in plain words; keep them in step
with this table.

## Summary

Pay people for the disk they contribute, and make sure they are actually
Expand Down
2 changes: 1 addition & 1 deletion docs/prds/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ Delivering read/write network storage for c0mpute, implementing
| [003](003-shard-placement-transport.md) | Cross-node shard placement and streaming transport | 002 | In progress |
| [004](004-metadata-durability.md) | Metadata durability: manifests, volumes, and the root pointer | 002 | Draft |
| [005](005-repair-daemon.md) | Auto-repair daemon | 003, 004 | In progress |
| [006](006-challenges-metering-payouts.md) | Storage challenges, metering, and provider payouts | 003, 004 | Draft |
| [006](006-challenges-metering-payouts.md) | Storage challenges, metering, and provider payouts | 003, 004 | In progress (payment rail merged, off by default; storage payouts not live) |
| [007](007-c0mputefs-filesystem.md) | c0mputefs: mutable filesystem over immutable content | 004 | Draft |
| [008](008-write-path-consistency.md) | Write path: chunking, journal, and crash consistency | 007 | Draft |
| [009](009-mount-cli.md) | `c0mpute storage` CLI and the FUSE mount | 008 | Draft |
Expand Down
Loading
Loading