FIELD MANUAL · rev 2026.10

Inside Ultravein, from rig to payout.

How a VGA taps a vein, how holding or buying sets its rate, how each hour is settled, and the exact contract, API and signed messages underneath.

MANUAL / 01 · THE SHORT VERSIONrev 2026.10

The short version

Ultravein on one page.

Ultravein lets every holder put a VGA on the vein. Unlock one with the UVN you hold, or buy one from the shop for good, then switch it on from a terminal. Every hour it stays on it draws a share of the pool you chose: ETH, UVN, or a tokenized stock.

No hardware involved: every VGA is virtual. Bigger VGAs mine faster; a held one needs more UVN to power on, a bought one needs none.

PartWhat it is
RigYour miner. One per wallet, with a name, a VGA and a reward vein.
Terminalnode rig.mjs start: the switch. The rig mines while it runs.
VGAThe card your rig runs, held (unlocked by balance) or bought (yours for good).
PoolOne bucket per reward asset, funded by the project.
Epoch60 minutes. Rewards are measured and settled per epoch.
MiningPoolThe one contract that holds every pool and pays withdrawals.
NOTE
Deploying and linking are plain-text signatures you can read before signing. Withdrawing rewards and buying a VGA are the only transactions and the only gas you pay. Nothing here ever asks for a seed phrase or private key.
MANUAL / 02 · FIRST DIGrev 2026.10

First dig

From wallet to payout in five moves.

  1. Hold UVN. At least 100,000 for the smallest machine.
  2. Connect your wallet in the dashboard. The site never sends anything without your confirmation.
  3. Deploy a VGA in the dashboard: pick a VGA (or buy one), a name and a reward. Sign once.
  4. Run the terminal: node rig.mjs init, paste the code on Deploy VGA, then node rig.mjs start. It mines while it runs.
  5. Withdraw from Portfolio once a payout root has passed its 30-minute window.
WARN
Tokenized stocks are not available to US persons.
MANUAL / 03 · VGAS & THE SHOPrev 2026.10

VGAs & the shop

Hold to unlock one, or buy one for good.

Each wallet runs one rig with one VGA. Every VGA is virtual: there is no hardware to plug in. There are two ways to get one.

RouteHow it works
Deploy (hold)No purchase. Hold UVN and the VGA your balance covers is yours to run, checked every hour against your lowest balance.
Buy (own)Pay once in UVN through MiningPool.buyCard. The VGA is yours for good and mines with no holding at all.
  • Upgrading a bought VGA costs only the difference over what this wallet already paid.
  • The whole price lands in the UVN reward pool and is paid back out to miners like any refill.
  • Your rig runs the best VGA you can power, owned or held, and never one above the VGA you picked.
FieldRule
Name1 to 32 bytes, no leading or trailing spaces, no control characters.
VGARTX 3060, RTX 4090, A100, H100
RewardETH, MSFT, AAPL, NVDA
RULE
Saving your rig again updates it; the change applies from your next session.
MANUAL / 04 · RUN YOUR RIG (TERMINAL)rev 2026.10

Run your rig (terminal)

One command on; it mines while the terminal runs.

Your VGA is switched on from a terminal, like a mining rig. The terminal holds a small node key (Ed25519) that signs a heartbeat. That key holds no funds and can withdraw nothing; withdrawals always go through your wallet.

terminal
curl -fsSLo rig.mjs https://<this site>/rig.mjs   # or download it from the Deploy page
node rig.mjs init https://<this site>             # prints a code: UV-XXXX-XXXX-XXXX
                                                  # paste it on Deploy VGA, sign with your wallet
node rig.mjs start                                # mines while this stays open
  • Needs Node.js 18 or newer and nothing else. The key is saved in ~/.ultravein/rig.json.
  • A code lasts 30 minutes and works once. Running init again keeps the same key and prints a fresh code.
  • The terminal sends a heartbeat every 5 minutes. Each one keeps the rig mining for 10 minutes, so closing the terminal stops it within 10 minutes.
  • Linking a new node retires the old one. One wallet runs one rig: extra terminals add nothing.
  • Seconds count: a rig online for 20 minutes of an epoch earns for 20 minutes of it.
RULE
The node key only proves the terminal is running. It cannot move tokens, change your rig or withdraw, so a leaked key can at most switch your rig on.
MANUAL / 05 · RIGS (MACHINES)rev 2026.10

Rigs (machines)

Your rate, unlocked by what you hold.

SlotMachineHold at leastHashrateH/s per 1M held
machine 01RTX 3060100,000 UVN1 H/s10.0
machine 02RTX 40901,000,000 UVN10 H/s10.0
machine 03A1005,000,000 UVN55 H/s11.0
machine 04H10010,000,000 UVN120 H/s12.0
RULE
Bigger machines never pay less per token than smaller ones (the last column never drops). Splitting one bag across many wallets can therefore never earn more than holding it in one.

The VGA your rig actually runs in an epoch is the largest one you bought or your lowest balance in that epoch covers, and never larger than the one you picked.

example
picked      H100  (needs 10,000,000)
lowest bal  2,300,000 during the hour
runs as     RTX 4090 · 10 H/s for that hour
MANUAL / 06 · THE STAKE CHECKrev 2026.10

The stake check

Your lowest balance in the hour sets the rate.

Every epoch the network reads every UVN Transfer that touched your wallet and walks your balance back through the hour. The lowest point it finds sets your machine for that epoch.

  • Buying just before the hour ends does not help: the balance at the start of the hour counts too.
  • Selling and buying back inside the hour counts as the dip.
  • Below the smallest machine, that epoch earns nothing, but the shift keeps running.
NOTE
Robinhood Chain RPCs keep only minutes of historical state, so balances are rebuilt from Transfer logs rather than read at old blocks.
MANUAL / 07 · VEINS & YIELDrev 2026.10

Veins & yield

Each pool lets out 0.1% of itself per hour.

There is one pool per reward asset. Your VGA mines only the pool you picked, and is paid in that asset. No swap is involved.

formula
released(pool, epoch) = remaining(pool) × 0.1%
remaining(pool)        = balance − (allocated − claimed)

weight(rig)            = hashrate(VGA) × seconds on session in the epoch
share(rig)             = released × weight / Σ weight of rigs on this pool

Every share is rounded down, so a pool never releases more than its 0.1%. A pool with nobody mining it releases nothing that hour.

worked example
ETH pool holds 10 ETH            → releases 0.01 ETH this hour
rig A: H100   (120 H/s) × 3600 s  → weight 432,000
rig B: A100   ( 55 H/s) × 1800 s  → weight  99,000
A earns 0.01 × 432,000 / 531,000 = 0.008135 ETH
B earns 0.01 ×  99,000 / 531,000 = 0.001864 ETH

Because the release is a share of what is left, a pool never runs dry on its own; refills make the next hours pay more.

MANUAL / 08 · HOURLY SETTLEMENTrev 2026.10

Hourly settlement

A root each hour, a veto window, a hard cap.

An hourly job measures each finished epoch, adds the results to every wallet's running total, and publishes a Merkle root of those totals to MiningPool.

StepWhat happens
MeasureHolding check, VGA, seconds and shares for every rig on a session.
AccumulateTotals are cumulative per (wallet, asset), so a missed run loses nothing.
PublishThe publisher key submits the root and the new total per asset.
Veto window30 minutes in which the guardian key can discard the root.
ActiveAfter the window, withdrawals use the new root.
RULE
A root can commit at most 5% of a pool's unallocated balance per day elapsed since the previous root. Even a wrong or stolen publisher key cannot drain a pool.

If the job is down, up to 24 missed epochs are processed on its next run, oldest first.

MANUAL / 09 · CASHING OUTrev 2026.10

Cashing out

Your yield, whenever you want, in one transaction.

Portfolio shows, per asset, what you earned, what you already withdrew and what is ready now. Withdrawing sends one transaction (the contract's claim function) that proves your total and pays the difference since your last withdrawal.

  • Ready trails earned by up to one settlement plus its 30-minute window.
  • Only your own wallet can withdraw for itself.
  • A stock issuer can block a wallet or pause its market. That withdrawal reverts, nothing moves, and the reward stays ready.
WARN
Some wallets carry an EIP-7702 sweeper delegation that forwards any ETH they receive. If your wallet's code starts with 0xef0100 and you did not set it, an ETH withdrawal will be swept. Use a clean wallet.
MANUAL / 10 · GUARANTEESrev 2026.10

Guarantees

What the contract guarantees, and what it cannot.

Enforced by the contractDepends on a key or a service
Withdrawals can never exceed what a root commits.The publisher computing shares honestly.
5% per day cap on every root.The guardian vetoing a bad root in time.
30-minute veto window on every root.The hourly job running.
Withdraws only of unowed funds, public, after 48 hours.The owner key not being lost.
No proxy, no upgrade path.Robinhood Chain's sequencer and its own upgradeable core.

The owner can list reward assets, rotate the publisher and guardian, and propose a withdraw. A withdraw is an on-chain event that cannot execute for 48 hours and can never touch what is owed to miners.

MANUAL / 11 · CONTRACT REFERENCErev 2026.10

Contract reference

MiningPool's functions, events and errors.

ItemValue
MiningPoolnot deployed yet
ChainRobinhood Chain · id 4663
RELEASE_BPS_PER_DAY500 (5%)
CHALLENGE_DELAY1800 s
WITHDRAW_DELAY172800 s (48 h)
Leafkeccak256(keccak256(abi.encode(account, asset, cumulative)))
solidity
function fund(address asset, uint256 amount) payable
function claim(address asset, uint256 cumulative, bytes32[] proof)
function buyCard(uint8 tier)                                               // VGA shop, pays the difference
function setShop(address token, uint256[] prices)                          // owner, prices[i] = tier i+1
function publish(bytes32 root, address[] assets, uint256[] newCommitted)   // publisher
function veto()                                                            // guardian
function promote()                                                         // anyone
function proposeWithdraw(address asset, uint256 amount, address to)        // owner
function executeWithdraw(uint256 id) / cancelWithdraw(uint256 id)          // owner
function setAsset(address asset, bool allowed) / setRoles(owner, publisher, guardian)

view root() · pendingRoot() · committed(asset) · claimed(asset)
     claimedBy(account, asset) · unallocated(asset) · allowed(asset)
     cardToken() · cardPrice(tier) · cardOf(account) · cardSpent(account)
events / errors
event Funded(from, asset, amount)       event Claimed(account, asset, amount)
event Published(root, assets, totals)  event Promoted(root)   event Vetoed(root)
event WithdrawProposed(id, asset, amount, to, readyAt)  WithdrawCancelled  WithdrawExecuted
event ShopSet(token, prices)           event CardBought(buyer, tier, paid)

error OverCap(asset)  BadProof  NothingToClaim  OverCommitted  PendingExists
      NotAllowed  BadInput  NothingToVeto  NotReady  OverUnallocated  Unauthorized

ETH is address(0). Asset arrays in publish must be strictly ascending.

MANUAL / 12 · API REFERENCErev 2026.10

API reference

Each public endpoint and what it returns.

MethodPathReturns
GET/api/statsdeployed, shop{token, prices[]}, pools[], agents[] (rigs on a session)
GET/api/networknet[]: per epoch rigs, hashrate, pools, emitted
GET/api/me?address=agent (your rig), session, balance, effectiveTier, owned, perHour, earned, wallet
GET/api/history?address=hist[] per epoch, act[] activity log
GET/api/proof?address=&asset=cumulative, claimable, proof[]
POST/api/agentdeploy or update your rig (signed)
POST/api/node/initterminal: node key proves itself, gets a code
GET /api/proof
{
  "cumulative": "8135000000000000",
  "claimable":  "8135000000000000",
  "proof": ["0x5f2a…", "0x91c0…"]
}

Amounts are decimal strings in the asset's smallest unit (18 decimals for every listed asset). Addresses are lowercase.

MANUAL / 13 · SIGNED MESSAGESrev 2026.10

Signed messages

Word for word, what your wallet signs.

Wallet actions are plain personal-sign messages. Every field is inside the text, so none can be swapped after signing.

rig
ultravein rig
address: 0xyouraddress
name: nightshift
tier: h100
asset: 0x0000000000000000000000000000000000000000
ts: 1791395618
link
ultravein link
address: 0xyouraddress
code: UV-8K2F-QX7M-41PD
ts: 1791395619

The terminal signs its own messages with the node key (Ed25519, base64url): ultravein node for init and ultravein beat for each heartbeat, each with node: and ts: lines.

RULE
ts must be within 5 minutes of the server clock and newer than the last accepted ts for your wallet. A replayed or stale signature is refused. Contract wallets are checked with ERC-1271.
MANUAL / 14 · DASHBOARD GUIDErev 2026.10

Dashboard guide

A tour of every tab.

TabUse it to
OverviewYour VGA in 3D, balance, estimated rate, earnings chart and the 12-hour blocks.
Deploy VGAPick or buy a VGA, name your rig, choose a reward. Preview the board card.
MachineStart a shift, watch progress, see which gate checks pass.
ActivityMinutes mined per hour, a timeline and a table of every epoch.
PortfolioWallet balances, earned, withdrawn, ready and withdraw buttons per asset.
PoolsPool levels, buckets, your share, network hashrate and pool history.
LeaderboardEvery rig on a session, strongest VGA first.
MANUAL / 15 · FAQrev 2026.10

FAQ

Quick answers.

Do I need a GPU?

No. The machine is a setting; your held balance unlocks it.

Can I run two VGAs?

One wallet runs one rig. More wallets never beat one bag, by design.

Why is ready lower than earned?

Ready follows the active root, which trails by up to one settlement plus 30 minutes.

What if the hourly job stops?

Nothing is lost. Totals are cumulative and up to 24 epochs catch up per run.

Is the APR fixed?

No rate is promised. It depends on pool size, refills and how many VGAs mine it.

What happens to idle pools?

A pool nobody mines releases nothing and keeps its balance.

MANUAL / 16 · GLOSSARYrev 2026.10

Glossary

The vocabulary of the site and the API.

Rig
Your miner; one per wallet.
Node
The terminal key that switches a rig on; holds no funds.
VGA
The hashrate tier your rig runs, held or bought.
Epoch
A 60-minute window; rewards are measured per epoch.
Weight
Hashrate × seconds on shift within an epoch.
Root
Merkle root of every wallet's cumulative rewards.
Committed
What the active root says miners are owed, per asset.
Unallocated
Pool balance not owed to anyone.
Publisher
The key that posts roots.
Guardian
The key that can veto a root during its window.

If anything in this manual and the MiningPool contract ever disagree, the contract is right.