Skip to content

Milestone 3 · Economics

Nuvex maintainers
Green terminal characters on a dark display

Stored, never charged

“max_fee is stored and never charged.”
Protocol README, Status

A request account records the job type, the input, the constraints, the optional callback and the fee ceiling the requester was willing to accept. Fulfilment verifies a proof, writes the output and performs the callback. No lamports move for the work, because no instruction transfers a request fee.

Open requestOPEN
job_type
VRF
requester
your program
input
32-byte seed
callback
consumer program
max_fee
recorded, not charged
Illustration · not chain data
Illustration · not chain data

A ceiling, not a price

The field is a limit the requester sets, not a quote the protocol returns. Once fees are configured, a request whose ceiling sits below the configured fee fails at creation rather than being charged the difference.

“max_fee is a requester-supplied ceiling. If the configured fee is above the ceiling, request creation fails. The requester is not charged the ceiling automatically.”
ADR 0005: Fee model

Four roles, no numbers

ADR 0005 is accepted as a split of roles. The actual fee, when one is charged, divides between four destinations:

  • node reward
  • verifier reward
  • protocol treasury
  • security fund

The shares live on ProtocolConfig and JobConfig as basis points rather than as constants in program source, and the on-chain check requires them to sum to 10,000 when they are written. Milestone 3 does not pick those basis points, does not transfer request fees, and has no claim_reward instruction. Arithmetic on lamports is checked.

Stake is not a fee

The lamports a node locks are a separate mechanism from anything a requester pays. Stake sits on the node account, has to meet the registry minimum before the node can fulfil, waits out a cooldown on the way out, and can be slashed by the configured authority. None of that is funded by max_fee.

Stake and heartbeatper node

Minimum stake

configured

Heartbeat window

configured

Registered before request

required

Slash

available

Illustration · not chain data

Separate authorities for separate money

The treasury, the security fund and the reward destinations are distinct authorities, set at initialization and empty until then. The key management policy keeps node identity, operator authority, treasury and security-fund authorities on separate keys, so one compromised key cannot drain every role.

Why we do not publish a split yet

Writing a plausible-looking split into the source would freeze an economic policy into a binary and make the website quote a number nobody has decided. The ADR rejects exactly that.

“Rejected: a fixed 70/20/5/5 split in source. The specification lists the roles and does not list the shares.”
ADR 0005: Fee model

Until a record names basis points, every fee figure on this site reads coming soon. Milestone 4 copied accounts into a read model and still did not charge a fee.

A night sky over a mountain ridge
Nuvex maintainersMilestone 5

Protocol

A price median is not a proof

Milestone 5 asks public venues for SOL, BTC, and ETH, drops anything stale or failed, and returns the median only when enough sources remain. The programs still reject a Price request.

Read the post
Earth from orbit beside a spacecraft
Nuvex maintainersMilestone 4

Protocol

The read model copies accounts. It does not decide them

Milestone 4 adds an indexer, a PostgreSQL store, and a read API the console and CLI can query. An empty list is a real answer. A row in that list is still not a finalized result.

Read the post