Zcash Action Circuit
A Zcash Orchard transaction is defined as a sequence of one or more actions. The Zcash Orchard circuit defines what a valid action is. It is important to note that in addition to shielded UTXOs, Zcash also has a transparent value pool (i.e. the Zcash protocol also allows for transparent, traceable transactions).
The general idea is as follows: Each action allows the spending of up to one UTXO () and the creation of up to one new UTXO (). To balance the value difference between them there is a balancing value ().
The equation applies:
where refers to the value (i.e. the amount of ZEC) of a UTXO as defined in section 3.2 (p.14) of the Zcash Protocol Specification.
The value thus expresses whether the UTXO transfer of a single Orchard action results in a positive or negative value surplus. Over the entire transaction - i.e. over the sum of all actions - must obviously result in zero. This means that the sum of all inputs of a transaction must be equal to the sum of all outputs.
However, the actual value surplus of an action remains secret - just like the private inputs of the circuit (i.e. the sensitive UTXO data). Instead, only a so-called of is published, which is specified in section 5.4.8.3 of the Zcash Protocol Specification.
The is a Pedersen Commitment that has special cryptographic properties such as homomorphic addition. This property allows for the values of all actions of the same transaction to be balanced without having to disclose the actual differences of individual actions publicly: The homomorphically encrypted of all individual actions can be summed up and eventually balanced with a single transparent value from the transparent value pool (in case the sum is not zero). See section 4.14 of the Zcash Protocol Specification to learn more about the final balancing value of a shielded transaction.
A shielded transaction in Zcash Orchard therefore either generates a transparent output (), or it consumes a transparent input (), or equals zero, in which case it is a fully shielded transaction with no inputs or outputs from the transparent value pool.
The flexibility of this circuit design therefore allows the four different types of actions:
- transparent → shielded (, resembles a mint).
- shielded → transparent (, resembles a burn)
- shielded → shielded (, resembles a shielded transfer)
- mixed → mixed (either mint + shielded transfer or burn + shielded transfer)
The following schematic shows a highly simplified representation of the Zcash Orchard top level arithmetic circuit, reduced to the essential components. The black inputs are the private inputs of the arithmetic circuit and the blue inputs are the public inputs. Only if all equality gates (==) resolve to true the output of the circuit is , otherwise it is .

The circuit is divided into three areas, which are highlighted in different colors:
Area A contains all the logic regarding . This is by far the most complex part of the circuit, since the validity of as well as the validity of must be proven here. Specifically, it must be proven that:
- There exists a sister path to the of , which leads to a valid of the merkle tree (i.e. is a valid UTXO).
- The address of the UTXO can be derived from (i.e. is indeed the correct private key to ).
- The nullifier is valid (i.e. is indeed the nullifier of ).
Area B proves that is indeed the correct to the newly created UTXO .
Area C proves that actually represents the correct (aka Pedersen commitment) of the value surplus .