Free 30-min Web3 Consultation
Book Consultation
Smart Contract Security Audits
View Audit Services
Custom DeFi Protocol Development
Explore DeFi
Full-Stack Web3 dApp Development
View App Services
Free 30-min Web3 Consultation
Book Consultation
Smart Contract Security Audits
View Audit Services
Custom DeFi Protocol Development
Explore DeFi
Full-Stack Web3 dApp Development
View App Services
Free 30-min Web3 Consultation
Book Consultation
Smart Contract Security Audits
View Audit Services
Custom DeFi Protocol Development
Explore DeFi
Full-Stack Web3 dApp Development
View App Services
Free 30-min Web3 Consultation
Book Consultation
Smart Contract Security Audits
View Audit Services
Custom DeFi Protocol Development
Explore DeFi
Full-Stack Web3 dApp Development
View App Services
LABS
Glossary

JoinSplit

A JoinSplit is a zero-knowledge proof transaction primitive, notably used in Zcash, that destroys old notes (UTXOs) and creates new ones with hidden values and owners.
Chainscore © 2026
definition
ZERO-KNOWLEDGE PROOF MECHANISM

What is JoinSplit?

A JoinSplit is the core cryptographic operation in the Zcash blockchain that enables private transactions by using zero-knowledge proofs to shield transaction amounts and participant addresses.

A JoinSplit is a specific type of zero-knowledge proof transaction that allows a user to merge (join) and split funds while concealing the transaction's details. It is the fundamental building block of shielded transactions in Zcash's original zk-SNARK-based protocol. In a JoinSplit, a user takes a set of existing notes (both transparent and/or shielded) as inputs and creates two new, fully shielded output notes. The cryptographic proof, known as a zk-SNARK, validates that the transaction is legitimate—no funds are created or destroyed—without revealing the input amounts, output amounts, or the addresses of the participants.

The operation's name describes its function: it joins multiple inputs into a pool and then splits them into new outputs. This process effectively breaks the on-chain link between the sender and receiver. A key constraint is that a JoinSplit transaction must have exactly two shielded outputs, which provides a fixed anonymity set and simplifies the proof construction. The protocol ensures value balance by requiring that the sum of all input values equals the sum of all output values, with any difference being explicitly sent as a transparent change to a public address.

JoinSplits are orchestrated within a broader circuit—a set of cryptographic constraints that the zk-SNARK proves. This circuit verifies: the existence and spend authority of input notes, the computational integrity of the note commitments and nullifiers, and the conservation of value. Each spent input note is marked with a unique nullifier, published to the blockchain to prevent double-spending, while the new output notes are cryptographically committed to, hiding their value and recipient address.

While revolutionary for privacy, the original JoinSplit design had limitations, including a fixed transaction structure and computational intensity. It was succeeded by more flexible mechanisms like Orchard (used in Zcash after the Network Upgrade 5) and Sapling, which offer improved performance and functionality. However, understanding JoinSplit is essential for grasping the evolution of privacy-preserving blockchain protocols and the foundational role of zk-SNARKs in enabling confidential transactions without trusted setup.

how-it-works
ZERO-KNOWLEDGE PRIVACY

How JoinSplit Works

A JoinSplit is the core cryptographic operation in the Zcash protocol that enables private transactions by shielding sender, recipient, and amount data on the blockchain.

A JoinSplit is a zero-knowledge proof transaction that simultaneously joins a set of old shielded notes and splits their value into a new set of shielded notes, breaking the on-chain link between inputs and outputs. This operation is facilitated by a zk-SNARK (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge), which proves the transaction is valid—the inputs sum to the outputs, the user owns the inputs, and no funds are created—without revealing any sensitive details. The only public data recorded are the nullifiers (to prevent double-spends) and commitments (to the new notes), along with a proof verification key.

The process begins with a user's wallet selecting unspent shielded notes from their Sapling or Sprout address as inputs. The JoinSplit computation creates new encrypted notes for the recipient(s) and any change. Crucially, the zk-SNARK proof is generated to validate the entire operation cryptographically. Once broadcast, network validators only check the proof and the uniqueness of the nullifiers; they cannot see the amounts, addresses, or the history of the notes involved, ensuring transaction graph privacy.

JoinSplits are distinct from transparent transactions (which work like Bitcoin) and newer Orchard actions in Zcash. They enable two primary privacy modes: Shielding (converting transparent funds to shielded) and Deshielding (converting shielded funds to transparent). The cryptographic anchors for this system are the Merkle tree of note commitments, which proves inclusion of an input note, and the nullifier set, which prevents replay attacks, all while maintaining the chain's auditability and security guarantees without compromising user privacy.

key-features
ZK-SNARK PRIVACY MECHANISM

Key Features of JoinSplit

JoinSplit is the core privacy-preserving transaction type in Zcash, enabling shielded transfers of value between private addresses (z-addresses) using zero-knowledge proofs.

01

Zero-Knowledge Proofs (zk-SNARKs)

A JoinSplit transaction uses zk-SNARKs (Zero-Knowledge Succinct Non-Interactive Arguments of Knowledge) to prove the validity of a transaction without revealing its details. This allows the network to verify that:

  • Input values equal output values (no inflation).
  • The spender has the authority to use the input notes.
  • The output notes are cryptographically committed to new owners. All while keeping the amounts, senders, and receivers hidden from the public ledger.
02

Shielded Pools (Commitment Trees)

JoinSplit transactions interact with two shielded pools represented by Merkle commitment trees. Each commitment in the tree represents a private note (a shielded UTXO). To spend a note, the prover must demonstrate knowledge of a valid commitment's path in the current tree. This structure enables efficient verification of note existence without revealing which specific note is being spent.

03

Note Structure & Nullifiers

A private note contains the amount, the recipient's address, and a random rho value. To spend a note, the spender generates a unique nullifier derived from the note's secret key and rho. This nullifier is published to prevent double-spending, as each note can only produce one valid nullifier. The link between the nullifier and the original note remains cryptographically hidden.

04

Transaction Anatomy

A standard JoinSplit transaction contains:

  • Public inputs: The root of the Merkle tree and a public spend amount (for transparent/shielded conversions).
  • Proof: The zk-SNARK proof validating the entire statement.
  • Ciphertexts: Encrypted data for the recipients of the new output notes.
  • Nullifiers: For each input note being spent.
  • Commitments: For each new output note being created.
05

Selective Disclosure (Viewing Keys)

While JoinSplit transactions are private by default, the protocol allows for selective disclosure. Users can share a viewing key, which allows a designated third party to decrypt transaction details (amounts, memo fields) associated with their addresses. This enables auditability and compliance without compromising the privacy of other users on the network.

06

Performance & Constraints

JoinSplit transactions involve significant cryptographic computation. Key constraints include:

  • Proof Generation: Computationally intensive for the sender (requires a trusted setup).
  • Fixed Inputs/Outputs: Originally designed for 2 inputs and 2 outputs per transaction.
  • Verification: Efficient for the network; verifying the zk-SNARK proof is fast. Later protocol upgrades (like Sapling) improved performance by moving proof generation off the critical path and reducing proof size.
visual-explainer
ZK-SNARK PRIVACY MECHANISM

Visualizing a JoinSplit

A conceptual breakdown of the cryptographic operation at the heart of shielded transactions on networks like Zcash, which enables private value transfers.

A JoinSplit is the core privacy-preserving transaction type in the Zcash protocol, which uses ZK-SNARKs (Zero-Knowledge Succinct Non-Interactive Arguments of Knowledge) to cryptographically prove the validity of a transaction without revealing its sender, recipient, or amount. It functions by taking a set of input notes (previously received, unspent commitments) and a set of output notes (new commitments to be created), then generating a proof that the total value of the inputs equals the total value of the outputs. This process effectively 'joins' and 'splits' the value, breaking the direct on-chain link between the origin and destination of funds.

The visualization of this operation involves several key cryptographic components. The commitment is a cryptographic hash that binds a note's value and address to a unique point on the blockchain, created when funds are received. The nullifier is a unique tag derived from a spent note, published to prevent double-spending without revealing which specific note was used. The ZK-SNARK proof is the computational magic that validates the entire operation: it proves that the prover knows the secret spending keys for the inputs, that the commitments are correctly formed, and that no new money was created, all without leaking any of the underlying data.

From a user's perspective, a JoinSplit transaction appears as a single, opaque blockchain entry containing only the public nullifiers (to prevent double-spends), the new public commitments (for the outputs), and the ZK-SNARK proof. The actual addresses (z-addrs), amounts, and the historical trail of the notes remain fully encrypted and private. This stands in stark contrast to transparent blockchain transactions, where all inputs, outputs, and amounts are permanently visible and traceable by anyone.

The security and privacy guarantees of a JoinSplit rely on the soundness of the underlying cryptographic primitives. The zk-SNARK proof system ensures computational integrity—if the proof verifies, the transaction is valid. The nullifier scheme guarantees that each shielded note can be spent only once. The commitment scheme ensures that notes cannot be forged or their contents tampered with. Together, these elements create a system where privacy is enforced by cryptographic law, not by obfuscation or trust.

In practice, visualizing the flow involves tracking the lifecycle of shielded notes. A note is created (as an output commitment), exists in a private 'pool' of unspent value, and is later consumed (its nullifier published) in a new JoinSplit to create fresh notes. This continuous cycle of creating and destroying cryptographic commitments, verified by zero-knowledge proofs, is what enables persistent financial privacy on a public ledger, allowing users to transact with the auditability of a blockchain and the confidentiality of a private channel.

examples
JOINSPLIT

Examples & Ecosystem Usage

The JoinSplit operation is a core privacy primitive, most famously implemented in Zcash. These examples illustrate its practical applications and the ecosystem built around it.

06

Regulatory & Compliance Tools

In response to regulatory concerns, selective disclosure mechanisms built on JoinSplit have emerged. Examples:

  • Viewing Keys: Allow a trusted third party to decrypt transaction details.
  • Memo Fields: Encrypted data attached to shielded transactions for compliance.
  • Audit Proofs: Generate a proof that a transaction complies with a policy without revealing other details. These tools aim to balance financial privacy with the need for regulated entities to demonstrate AML/CFT compliance.
evolution
ZERO-KNOWLEDGE PROTOCOLS

Evolution: From Sprout to Sapling

This section details the foundational cryptographic upgrade from the original Sprout protocol to the more secure and trust-minimized Sapling protocol within the Zcash network, focusing on the core transaction primitive: the JoinSplit.

A JoinSplit is the fundamental privacy-preserving transaction construct in Zcash, a shielded transaction that uses zero-knowledge proofs to allow a user to spend old notes and create new ones without revealing the amounts, sender, or receiver addresses on the public blockchain. It is the core mechanism that enables selective transparency, where the value and participants are cryptographically hidden, yet the network can still verify the transaction's validity. This operation "joins" inputs from a user's shielded pool and "splits" them into new outputs, all while proving, via a zk-SNARK, that no new money was created and all signatures are valid.

The original implementation, known as Sprout, launched with Zcash in 2016 and introduced the first widely-available zk-SNARKs for a cryptocurrency. However, Sprout had significant limitations: its trusted setup ceremony generated parameters that, if compromised, could allow undetectable inflation, creating a persistent trust assumption. Furthermore, creating a Sprout JoinSplit was computationally intensive, requiring minutes of proving time and substantial memory, making it impractical for lightweight wallets or mobile devices. These constraints highlighted the need for a more efficient and secure evolution of the protocol.

The Sapling upgrade, activated in 2018, was a monumental leap forward, re-engineering the JoinSplit from the ground up. It introduced a new, more efficient cryptographic curve (BLS12-381) and a vastly improved zk-SNARK construction. The most critical advancement was a multi-party computation (MPC) ceremony for its trusted setup, which involved hundreds of participants globally, dramatically increasing security and reducing trust assumptions. Sapling also separated the proving key from the spending key, enabling non-interactive transactions. The result was a JoinSplit that was orders of magnitude faster—proving time dropped from minutes to seconds—and required far less memory, enabling practical use on mobile devices.

From a user's perspective, the evolution from Sprout to Sapling transformed the experience of private transactions. What was once a specialized, desktop-only operation became a seamless feature. Wallets could now generate Sapling JoinSplits quickly and with minimal resource usage. This efficiency also reduced transaction fees and improved network scalability. The enhanced cryptographic security of Sapling's setup made the system more robust and trustworthy, cementing Zcash's position as a leading privacy-focused blockchain and setting a new standard for practical zero-knowledge applications in cryptocurrency.

security-considerations
JOINSPLIT

Security & Privacy Considerations

A JoinSplit is a cryptographic transaction primitive in privacy-focused blockchains like Zcash, designed to shield transaction amounts and participant identities. This section details its core security properties and inherent trade-offs.

02

Shielded Pools & Anonymity Sets

Privacy strength depends on the anonymity set. All shielded transactions (z-to-z) are pooled together. The larger the pool of unlinkable commitments, the harder it is to trace a specific transaction via chain analysis. Key considerations:

  • Low usage reduces anonymity.
  • Selective disclosure via view keys can reduce privacy for auditing.
  • Migration events (like the Sapling upgrade) can create distinct pools.
04

Transaction Graph Break

A primary goal of JoinSplit. It severs the link on the public blockchain between:

  • The sender's past transaction history and the new shielded outputs.
  • The sender and the final recipient in a z-to-z transaction. This break prevents heuristic clustering techniques used in Bitcoin. However, transparent transactions (t-addresses) involved in a JoinSplit create potential linking points if not managed carefully.
05

Computational Cost & Auditability

Privacy introduces trade-offs:

  • High Computational Overhead: Generating a zk-SNARK proof is resource-intensive, affecting transaction speed and hardware requirements.
  • Regulatory & Audit Challenges: The privacy features can conflict with Travel Rule compliance and financial auditing. Solutions like viewing keys allow selective transparency but partially negate privacy.
  • Blockchain Bloat: Proofs and commitments increase data size compared to transparent transactions.
06

Shielding & Deshielding Points

The moments when value moves between transparent (t-address) and shielded (z-address) pools are critical for analysis.

  • Shielding (t-to-z): Reveals the source of funds entering privacy.
  • Deshielding (z-to-t): Reveals the destination of funds exiting privacy. These actions create linkability hints. For maximum privacy, users should minimize these transitions and stay within the shielded pool.
PRIVACY TECH COMPARISON

JoinSplit vs. Other Privacy Models

A technical comparison of privacy-enhancing transaction models based on their core mechanisms, trust assumptions, and trade-offs.

FeatureJoinSplit (e.g., Zcash)CoinJoin (e.g., Wasabi)Stealth Addresses (e.g., Monero)Confidential Assets

Core Privacy Mechanism

Zero-knowledge proofs (zk-SNARKs)

Multi-party coin mixing

One-time addresses + ring signatures

Blinded asset amounts

On-Chain Data Privacy

Shielded: Amounts & parties hidden

Amounts visible, linkability broken

Amounts & parties hidden

Amounts hidden, asset type may be visible

Trust Assumption

Trusted setup for initial parameters

Requires coordination with peers

Trust in decentralized ring signature set

Issuer or cryptographic security

Transaction Size

~2 KB (zk-SNARK proof)

~1-2 KB (typical Bitcoin tx)

~1.5-3 KB (varies with ring size)

~1-2 KB

Computational Overhead

High (proof generation)

Low (standard signature verification)

Medium (ring signature generation/verification)

Medium (range proofs)

Selective Disclosure

Native Multi-Asset Support

JOINSPLIT

Common Misconceptions

JoinSplits are a core privacy mechanism in Zcash and other shielded protocols, but their function is often misunderstood. This section clarifies the most frequent misconceptions about how they work and what they do.

No, a JoinSplit is a cryptographic proof system, not a simple mixing service. While both aim to obfuscate transaction history, a mixer pools funds from many users and returns them in a shuffled manner, relying on a central or semi-trusted pool. A JoinSplit uses zero-knowledge proofs (zk-SNARKs) to mathematically prove the validity of a transaction—that no new money was created and the spender had the authority to spend—without revealing the link between the old shielded notes (inputs) and the new shielded notes (outputs). The privacy is cryptographic and trustless, not probabilistic.

JOINSPLIT

Frequently Asked Questions

A JoinSplit is the core cryptographic operation in privacy-focused blockchains like Zcash, enabling shielded transactions that hide sender, recipient, and amount.

A JoinSplit is a zero-knowledge proof construction that allows a user to spend some old shielded notes and create new ones, while keeping all transaction details confidential. It works by using zk-SNARKs (Zero-Knowledge Succinct Non-Interactive Arguments of Knowledge) to prove, without revealing any underlying data, that:

  • The input notes exist and belong to the spender.
  • The total value of the inputs equals the total value of the outputs.
  • Any leftover value is sent as a miner fee or returned as "change" to the sender in a new, shielded note. The protocol destroys the old notes and mints new ones, breaking the on-chain link between them. This process is the foundation of shielded transactions in the Sapling and later protocols.
ENQUIRY

Get In Touch
today.

Our experts will offer a free quote and a 30min call to discuss your project.

NDA Protected
24h Response
Directly to Engineering Team
10+
Protocols Shipped
$20M+
TVL Overall
NDA Protected Directly to Engineering Team