Notarion is zero-knowledge attestation infrastructure on Stellar. Commit cryptographic proofs of any record — a contract, a medical scan, an audit log, an AI training set — and let any party verify properties of that record without ever seeing the record itself.
You must prove records have not been tampered with. You must not reveal the records themselves. These goals appear contradictory — until you replace "trust the vendor's database" with cryptographic proofs anchored to a public ledger.
Prove that a record contains a property — was signed by an authorized party, falls within a regulatory range, references a consented patient — without revealing the record itself. Powered by zk-SNARKs in v2.
Anyone — auditor, regulator, opposing counsel — verifies a proof against the on-chain root using only the public Horizon API. No Notarion software. No vendor cooperation. No trust.
Only opaque 32-byte proofs ever touch the chain — no PII, no record content, no metadata. Right-to-erasure preserved: deleting the off-chain artifact renders the on-chain commitment informationally meaningless.
The same primitive serves the v1 commitment scheme and the v2 zk-SNARK rollout. Your application code never changes.
Your service declares what it wants to prove about a record — existence, integrity, range, set membership, or signature validity.
S : "record ∈ R"The record itself, plus any private inputs (consent token, signing key, patient ID), are kept off-chain and fed into the prover.
W = (record, secrets)A SHA-256 + Merkle commitment (v1) or a zk-SNARK (v2) compresses the truth of S given W into a 32-byte proof π. The witness is discarded.
π ← Prove(S, W)π is batched and anchored to a Stellar transaction memo. Any party can later verify Verify(S, π) → true using only public data.
MEMO_HASH. Scales to 25k–100k mainnet txns/year per region.// What lives on chain — nothing else. { "source_account": "GA…NOTARION", "fee_charged": "100", // 100 stroops · ~$0.000003 "operations": [{ "type": "payment", "amount": "0.0000001", // 1 stroop self-payment "asset_type": "native" }], "memo_type": "hash", "memo": "4f3a9c2e8d1b…b8210f" // proof root } // Off chain — your data, your control. S = "record ∈ R ∧ signed_by(authorized)" W = (record, signing_key, witness_data) π ← Prove(S, W) // 32-byte proof batch.append(π) root = merkleRoot(batch)
Drop a file. Your browser hashes it locally with WebCrypto, places it into a simulated Merkle tree alongside seven other records, and produces a proof that your file is in the tree — without revealing the other records. Nothing leaves your device.
We're selecting design partners across legal, healthcare, financial services, and ESG — verticals where digital evidence is becoming a regulatory requirement, not a nice-to-have.