How it works

Neptune Cash keeps payments private and proves them valid with post-quantum zero-knowledge proofs. This page explains how, in plain terms. The documentation and whitepaper linked at the bottom go deeper.

The core idea, in one picture

You pay someone. The chain keeps a record that proves the payment was valid without publicly revealing who paid whom or how much.

WHAT HAPPENS you them 5 NPT WHAT THE CHAIN SHOWS from โ€ขโ€ขโ€ขโ€ข to โ€ขโ€ขโ€ขโ€ข amount โ€ขโ€ขโ€ขโ€ข โœ“ proven valid

What happens when you send NPT

The same steps the cards below explain in detail, in the order they happen:

  1. Your wallet builds the payment and picks the coins to spend.
  2. New coins are sealed into commitments; spent ones leave as removal records. The public records do not reveal the sender, receiver, or amount.
  3. An announcement rides along so the recipient's wallet can spot the payment.
  4. A node runs the transaction's rules, lock scripts and type scripts, inside Triton VM.
  5. That run produces zk-STARK proofs that the rules were followed, without revealing the private transaction data.
  6. The block's payments are combined into one transaction, and their proofs into one proof.
  7. A proof-of-work race of Tip5 hashes decides who appends the block.
  8. Every node checks that one proof rather than replaying anyone's payment, and the chain moves on.

How it hides

How a payment sits on a public ledger without naming its sender, its receiver, or its amount.

The mutator set

Every spendable coin on the chain is a UTXO (unspent transaction output). The mutator set is the structure that holds them, and the foundation of Neptune's transaction privacy: transactions do not name the coins they touch. A coin they create arrives as an addition record: a commitment, meaning a sealed, tamper-proof envelope that pins the coin down without revealing it. A coin they consume leaves as a removal record: a scatter of marks on a big shared checklist. Unlike an addition record, it never identifies the coin: the marks are provably tied to some sealed envelope in the set, without revealing which.

THE MUTATOR SET a transaction โˆ’ one spent, but which? + one added

every entry is an unreadable commitment, and they all look alike

What the mutator set achieves is unlinkability: a spend cannot be connected to the coin it consumes, or to the transaction that created that coin, and double-spending is still caught. An observer sees entries added and entries consumed, and cannot determine which entry a spend touched, whose it was, or what it held. What a removal record does reveal is roughly when the spent entry was created, so each spend hides among the entries created around the same time: a creation window the protocol picks for you.

Announcements

How your wallet discovers it was paid, given that transactions name no addresses. A payment carries an announcement: a public note with a receiver identifier on the outside and a sealed message inside. The sealed part holds the coin's full description and the sender randomness, the sender's half of the secret the commitment was sealed with. The other half is baked into the recipient's address. The recipient needs the announcement's half, together with keys only they hold, to recognize the payment and later spend it.

Both halves together are the deliberate exception to the mutator set's unlinkability, and they open different doors. The recipient, who also holds the private key behind the address, can connect the coin to its entry in the set and produce the removal record that spends it. The sender can watch the coin confirm, but without that key cannot recognize the removal record, so they cannot even tell whether the coin has since been spent. The commitment is the payment and nobody can read it; the announcement is the notice about it, and with the strongest address format exactly one person can. The addresses card covers the formats that widen that circle.

The identifier on the outside is a deliberate trade-off. It lets your wallet spot payments meant for it instead of trial-decrypting every announcement on the chain. The cost: two payments to the same address carry the same identifier and can be linked to each other, which is the mechanism behind the advice to use a fresh address per payment, or to notify the recipient directly off-chain instead.

What you get: payments that find their recipient without putting either of you on the chain.

Addresses, and why one is enormous

Neptune has three shareable address formats because different situations call for different trade-offs: address length, post-quantum strength, and what the holder gets to see.

FormatPrefixLength
Generationnolgam13,482 chars
EC hybridnechm1168 chars
Viewingnviewm1116 chars

The m in each prefix marks mainnet.

Generation is the strongest, and the enormous one: it encodes a lattice-based public key, built on mathematics resistant to quantum attacks, and that key is what a sender uses to encrypt the announcement from the previous card. The length is the price of post-quantum privacy.

EC hybrid is the compact option. Its key exchange uses an elliptic curve, the one piece here a quantum computer could break. Even a successful attack would require the address itself, which never appears on the chain, and would only reveal what that address received; spending would remain out of reach.

A viewing address gives away your incoming payments: anyone holding it can see every payment announced to you on-chain and its amount, though they cannot spend anything. That is useful when the transparency is the point: an accountant, an auditor, or a donation page can verify incoming payments with no power to move them.

What you get: control over the trade: the strongest post-quantum privacy when you can share a long address, a compact option when you cannot, and a watch-only format whose holder can see your payments but never spend them.

How it proves

Rules are programs: running one yields a proof that anyone can check, and one proof covers a whole block.

Lock scripts and type scripts

Neptune's rules are small programs attached to coins, and they come in two kinds. They run in Triton VM and are proven with STARKs, the next two cards. This is what "programmable" concretely means here.

A lock script decides who may spend a UTXO. Usually it checks knowledge of a secret key, but it can be arbitrarily complex: shared ownership, quorums, or conditions unrelated to keys entirely.

A type script decides how a kind of coin may behave: the native currency type script is what enforces that a transaction's inputs cover its outputs plus its fee, so no coins appear from thin air. The three-year timelock on half of every mining reward is a type script too: the rule lives on the coins themselves, not in anyone's policy.

What you get: ownership and money rules enforced by proofs rather than policy, and the foundation Neptune's programmability builds on.

Triton VM, or proving instead of replaying

Think of Triton VM as the computer Neptune's transaction rules run on: a simulated machine that every node can run identically. The interesting part is what it is used for. Most chains use their VM to replicate state, so every node re-executes everything and ends up holding the same data. Neptune uses Triton VM to validate updates to a state commitment instead: one sealed fingerprint of the whole ledger, a chain-sized sibling of the per-coin commitments in the last section. Nodes agree on that fingerprint, and that it changed correctly, without needing to see the private data behind the change.

MOST CHAINS every node keeps the data, and re-runs the work NEPTUNE 9f2c 9f2c 9f2c โœ“ โœ“ โœ“ same fingerprint everywhere, checked by a proof your data stays yours

Verifying proofs instead of replaying data is what lets a chain be both verifiable and private. Programs for it are written in its own low-level language, tasm.

zk-STARKs

The proof system Triton VM ships with. The zk stands for zero-knowledge: a proof that convinces you a program ran correctly without showing you what it ran on. The rest of the acronym, Scalable Transparent ARgument of Knowledge, matters here for two reasons: transparent means there is no trusted setup ceremony to take on faith, and the proofs are built out of hash functions, the next card's subject, not out of math a quantum computer can break. Validating a Neptune transaction largely means verifying such proofs.

ONE PROVER run the program, once expensive: many cores, ~128 GB of RAM small proof โœ“ โœ“ โœ“

checking the proof is cheap, so every node does it

The cost is asymmetric by design: proving is expensive, verifying is cheap. That asymmetry is why composing a block needs serious hardware while checking one does not, and it is why STARKs sit at the center of the design: the network verifies private computation without ever seeing it. Who does that expensive proving, the last card in this section explains.

Tip5, the hash everything rests on

A hash function turns any data into a short fingerprint that cannot feasibly be run backwards. Tip5 is Triton VM's built-in hash, co-designed by one of Neptune's founders for recursive STARK machines like this one: cheap to reason about inside the VM rather than merely fast on a CPU. It seals the commitments in the hiding half of this page, and it is the hash the mining race is run with.

That is why the GPU miner lists its Neptune algorithm as tip5 rather than neptune: the algorithm is the hash, and the coin is one thing that uses it.

From a payment to the chain

A block does not carry a bundle of separate transactions. The composer merges the block's payments into one aggregate transaction, inputs, outputs, and announcements shuffled together, and produces one proof for all of it. The merge is packaging, not a mixer: every record survives it unchanged, and the payments circulated separately in the mempool first. Hiding stays the mutator set's job.

That merge is the kind of expensive proving the zk-STARKs card describes, and it is not the first proof in a payment's life: the sending node proves the payment valid when it creates it. Powerful nodes can then upgrade and combine those proofs for a share of the fees before a composer builds the block.

ONE BLOCK one transaction one proof pending payments merged, proven once joins the chain

a Tip5 hash lottery decides which guesser appends it

Appending the block is the cheap half. A proof-of-work lottery of Tip5 hashes decides which guesser, the role most people call the miner, earns the right, and every node then verifies the block's one proof rather than re-running everyone's payments. Mining splits exactly along the proof system's asymmetry: composing is the heavy proving, guessing is hash after hash.

The composer never opens anyone's payment to do its job: it merges sealed transactions by verifying and combining their proofs, learning no more about them than any other observer. And that is how private payments become a chain everyone can trust.

The fine print

Two headline claims come with details worth knowing before you repeat them.

Post-quantum, precisely

Spending is hash-based. Lock scripts and the key derivation behind them, how your seed phrase becomes spending keys, run on Tip5. Authority over your coins rests on hash functions, which a quantum computer does not meaningfully weaken. That is the heart of Neptune's post-quantum claim, and it holds.

Encryption is not all hash-based. A generation address carries a lattice-based public key, used to encrypt the announcement, the payment notice, for its recipient. An EC hybrid address uses secp256k1, an elliptic curve, for that key exchange instead. Elliptic curves are exactly what a large quantum computer is expected to break; lattices, like hashes, are believed to resist one. So the curve appears in one optional address format, for confidentiality rather than custody: a break there would let an attacker read what you received, but only if they also hold the address, which never appears on the chain, and it would still not let anyone spend it.

ComponentBuilt onPost-quantum?
Spending and ownershipHash functions (Tip5)Yes
Proofs (zk-STARKs)Hash functionsYes
Generation address encryptionLatticesYes
EC hybrid address encryptionsecp256k1 curveNo: a break plus the address risks reading, never spending

Succinctness, on the roadmap

Neptune does not have this yet; it is on the roadmap and in active development. The aim is that verifying the whole chain takes only a small amount of work regardless of how much history exists, instead of downloading and checking every block one by one. The mechanism is recursive block validation: every block carries a STARK proof, the same kind built in the section above, that its predecessor was valid, so checking the newest block transitively checks the chain.

TODAY download and check every block, one by one ROADMAP proof check the newest, inherit the rest

each block proves its predecessor valid ยท not shipped

The components summarized

The whole system at a glance: each row pairs a part with its job and its payoff, and links back to its card above.

ComponentWhat it doesWhat you get
Mutator setHolds every coin as an indistinguishable commitment and takes spends without naming the coinSpends that cannot be linked to the coin they consume or the transaction that created it
AnnouncementsCarry an encrypted notice that leads the recipient's wallet to its paymentPrivate payments that still arrive
AddressesThree shareable formats trading length, post-quantum strength, and visibilityPrivacy you can match to the situation
Lock and type scriptsSmall programs setting the conditions to spend and how coins behaveRules enforced by code, and programmability
Triton VMExecutes the transaction rules so the execution itself can be provenRules verified while your data stays with you
zk-STARKsProve a program ran correctly without revealing anything elseProof the rules were followed, verifiable by anyone
Tip5Seals the commitments and powers the mining raceOne quantum-resistant hash behind commitments, proofs, and mining
Block pipelineMerges a block's payments into one transaction covered by one proofCheap verification for every node regardless of how many payments a block holds

Go deeper

This page stops where the real documentation starts. The docs cover the full technical detail; the whitepaper covers the vision and the reasoning.