---
# System prepended metadata

title: 'ZKTF: Aztec & RISC Zero'

---

# ZKTF: Aztec & RISC Zero

## Aztec

### Intro

Chronology:

- Aztec 1: basic private transfers; deprecated
- Aztec Connect: zk-rollup, smart contracts; deprecated
- Aztec (Aztec 3, A3): Noir lang + encrypted L2 zk-rollup

Refs:

- [Overview](https://docs.aztec.network/aztec/overview)
- [Medium article](https://medium.com/aztec-protocol/aztec-the-hybrid-zkrollup-a90a197bf22e)
- [Docs](https://docs.aztec.network/aztec/how-it-works/private-public-execution#)
- [Noir lang](https://aztec.network/noir/)
- [Medium Noir](https://medium.com/aztec-protocol/introducing-noir-the-universal-language-of-zero-knowledge-ff43f38d86d9)
- [Awesome Noir](https://github.com/noir-lang/awesome-noir)

### Noir

Features:

- rust-like language for provable smart contracts
- tools (nargo), standard lib, circuit debug
- compile noir code to ACIR -- abstract circuit intermediate representation
- prove ACIR with any backend (PLONK, Groth16, Marlin, Barretenberg)
- `Field` data type, `private` data, `pub` modifier; `mut`, `comptime`, globals

Commands:

- `noirup` -- install noir/nargo
- `nargo compile` -- compile code into ACIR
- `nargo execute` -- run code
- `nargo prove` -- prove code for given inputs
- `nargo verify` -- verify proof
- `nargo codegen-verifier` -- generate solidity verifier contract

### Encrypted zk-rollup

- Encrypted zk-rollup: public account-based blockchain + UTXO-based privacy solution
- Composable smart contracts: any secret/public function can call any other function. Private and public functions operate on different stacks.
- Privacy: user, data, code
- Encrypted private user data is stored in append-only UTXO-like store with deletions encoded as nullifiers. UTXO is abstracted with Noir.
- User generates a proof of correct execution of a transaction (kernel proof). To allow concurrent access to data by different users there's historical data access (as long as data wasn't nullified). Private-public function calls.
- L1-L2 components:
  - portal -- part of L1 app + hard link to L2 address, 
  - message box -- messaging between L1-L2
  - rollup contract -- L2 rollup state root, state transition verification, data availability
  - kernel circuit -- handles L1-L2 messages delivery
  - rollup circuit -- state transition for a rollup block
  - messages -- L1-L2 pieces of data

## RISC Zero

### Bonsai

Refs:

- [Book](https://dev.bonsai.xyz/litepaper/)
- [Blog](https://www.risczero.com/blog/ethdenver)
- [Repo](https://github.com/risc0/bonsai-starter-template)

Features:

- guest method
- solidity smart contract wrappers: not clear how proof is verified in smart contract
- deploy: submit guest method to Bonsai service for proving
- poke: interact with a smart contract

Hidden features:

- Bonsai proving service: prover-as-a-service
- verifier (SNARK?)

### POSIX I/O

- [rand](https://github.com/risc0/risc0/blob/84528d31c0efad566e585aa04a83d6692b32bd16/risc0/zkvm/platform/src/syscall.rs#L319)
- [sys_read](https://github.com/risc0/risc0/blob/84528d31c0efad566e585aa04a83d6692b32bd16/risc0/zkvm/platform/src/syscall.rs#L349)
- [stdin](https://github.com/risc0/risc0/blob/84528d31c0efad566e585aa04a83d6692b32bd16/risc0/zkvm/src/exec/env.rs#L168)
