Run a node

A node opens bridges that other people's encrypted messages travel over and, with that verified work, discovers VEL. It installs with one command, runs in the background and updates itself.

Install

# macOS / Linux
curl -fsSL https://velum.consultorabim.com/install.sh | bash
# Windows (PowerShell)
irm https://velum.consultorabim.com/install.ps1 | iex

The installer downloads the binary for your system, creates the node key, registers it on the network and sets it to start automatically when the computer boots. You can read it before running it: install.sh and install.ps1. You can also download the binary by hand.

System Binary
macOS (Apple Silicon and Intel) velum-darwin-arm64, velum-darwin-x64
Linux velum-linux-x64, velum-linux-arm64
Windows velum-windows-x64.exe

A single file per system, with no dependencies or loose files.

Requirements

  • A computer that stays on for a while and an internet connection.
  • Very little CPU and memory. Disk: a few hundred MB for the chain; fragments are deleted once delivered or after 7 days.
  • No need to open ports. If you do, other nodes can connect to you directly (--endpoint), which helps the network resist blocks.

Options

velum-node --name "atico-madrid" --payout vel…            # options are saved in ~/.velum/config.json
velum-node --port 7420                                    # local panel at http://localhost:7420
velum-node --gateway none --peer ws://203.0.113.7:7420/ws # direct peers only, no public gateway
velum-node --endpoint wss://node.example.org/ws           # public address announced on-chain
velum-node address                                        # prints the node address
velum-node reset                                          # wipes chain data (keeps the key) and resyncs

When signing up, the node declares its approximate region (continent). It helps apps pick nearby nodes; it has no effect on consensus.

The dashboard

The node opens a dashboard on your computer: http://localhost:7420. There you see its tier, its continuous service streak, what it has earned and connected peers.

From the dashboard you can pause contributing. Bear in mind that an absence of more than 48 hours in a row resets the continuous service streak.

Signed updates

The node checks the release manifest:

{
  "version": "3.0.1",
  "minNodeVersion": "3.0.0",
  "minAppVersion": "3.0.0",
  "files": {
    "darwin-arm64": { "url": "https://velum.consultorabim.com/download/velum-darwin-arm64", "sha512": "…" },
    "linux-x64":    { "url": "https://velum.consultorabim.com/download/velum-linux-x64",    "sha512": "…" },
    "windows-x64":  { "url": "https://velum.consultorabim.com/download/velum-windows-x64.exe", "sha512": "…" }
  },
  "ts": 1793577600000,
  "sig": "…ed25519 signature by the release key…"
}

It only installs a new version if the sig signature is valid for the ed25519 release key built into it and the file's SHA-512 hash matches. The manifest includes minNodeVersion: a node below the minimum updates before carrying on.

How a node discovers VEL

Routes by lottery and proximity

For each fragment, a public lottery picks 3 candidate nodes, favouring those with a higher tier and bond. The app measures the ping and uses the fastest of the three, like a CDN. Only the bridge that actually carried it counts, and always one of the three drawn: nobody can choose who carries it.

Sampled claims {#reclamaciones}

A node doesn't upload every receipt to the chain. When the epoch closes:

  1. It gathers its receipts into a Merkle tree (SHA-512) and publishes work.claim { epoch, count, root }.
  2. The next epoch's beacon picks 16 random receipts from its tree.
  3. The node answers with work.prove: those receipts with their secret and Merkle path.
  4. If it doesn't answer within 2 epochs or a single leaf fails, the claim is void and it loses that epoch's reward.
  5. Nobody can claim more than 1.5 times what is expected for their weight in the lottery.

Only about a kilobyte per node per epoch goes on the chain, even if the network carries billions of messages.

What is discovered each epoch

The epoch's issuance, the 80% of fees set aside and what the Reserve returns. It's discovered like this:

  • 85% by opening bridges: verified deliveries × tier multiplier.
  • 15% by producing and validating blocks, equally per block. There is discovery even when there are no messages.

Tiers by continuous service

Tier Multiplier Requirement
New ×0.50 On sign-up
Active ×0.65 ≥ 1 month of continuous service and ≥ 90% presence
Veteran ×0.85 ≥ 3 continuous months and ≥ 95%
Pillar ×1.00 ≥ M(t) continuous months and ≥ 98%
M(t) = min(12, 6 + floor(network age in months / 4))

Pillar requires 6 months when the network is born and goes up by one month for every 4 months of network life, up to 12.

  • Continuous service is a streak of epochs with presence. An absence of more than 48 hours in a row resets it; a short maintenance break doesn't.
  • Multipliers divide what's there: no more than the epoch's issuance is ever discovered.

Optional bond

With node.bond you can lock VEL to raise your weight in the lottery up to ×2:

lottery weight = tier × (1 + min(bond, 10,000 VEL) / 10,000)

The bond unlocks after a 14-day wait. If your node fails an epoch's checks, it discovers nothing that epoch. Other people can also delegate VEL to your node: see Ecosystem.

Light nodes on your phone

The app can act as a light node from Settings › Act as a node (by default, only on Wi-Fi and while charging). It accepts and delivers fragments, but doesn't produce blocks, and the gateway doesn't send it full blocks to save data.

Can my node read messages?

No. It only stores fragments of encrypted envelopes, all the same size. Even with every piece, an envelope can't be opened without the recipient device's key.