# The Aztec stack, from the language up

> Aztec is three layers. Noir is the language for writing programs that can be proved. The contract framework splits execution between your device and the network. The rollup underneath is run by thousands of independent sequencers. This is how they fit together.

Canonical: https://aztec.network/blog/the-aztec-stack-from-the-language-up  
Type: Article  
Reviewed: 19 October 2026  
Publisher: Aztec Foundation

Published: 21 September 2026  
Category: Aztec Network

People meet Aztec from different directions. A developer finds Noir first. A trader finds a private exchange. A staker finds the token. They are all looking at the same system from different floors, so here is the whole building, starting at the bottom.

## Noir: programs you can prove

A zero-knowledge proof lets you convince someone that a computation ran correctly without showing them the inputs. For years, writing that computation meant hand-building arithmetic circuits, which is about as pleasant as it sounds.

Noir replaces that with a language that reads like Rust. This is a complete program:

```
fn main(age: u8) -> pub bool {
    age >= 18
}
```

The argument is private by default. The return value is marked `pub`, so it is the only thing a verifier learns. Compile it, run it against your age, and you get a proof that you are an adult which says nothing else about you.

Noir is open source and it is not tied to Aztec. It works with any proving backend, and it runs in a browser, on a server, or on a phone. ZKPassport uses it to verify a passport without revealing what is in it. ZK Email uses it to prove facts about an inbox. You can learn the basics in an afternoon at [noir-lang.org](https://noir-lang.org), and what you learn carries over whether or not you ever deploy to a chain.

## Contracts: private and public in the same place

An Aztec contract is written in Noir with a framework called Aztec.nr on top. The framework adds the one idea that makes Aztec different from other chains. Every function says where it runs.

```
#[external("private")]
fn transfer(to: AztecAddress, amount: u128) { ... }

#[external("public")]
fn total_supply() -> u128 { ... }
```

A private function executes on the user's own device. A public function executes on the network, the way a Solidity function does on Ethereum. One contract can have both, and one transaction can call both.

Storage follows the same split. Public state is a key-value tree that anyone can read, which is what you want for a pool price or a vote count. Private state is a set of encrypted notes. Spending a note publishes a nullifier that marks it as used, and only the note's owner can tell which nullifier belongs to which note. If you have used Bitcoin's UTXO model this will feel familiar. If you have used Ethereum's account model, the public side will.

Developers decide, variable by variable, what belongs where. A lending market might keep its interest rate public and every position private. A game might keep the map public and each player's location hidden.

## The wallet does the proving

When you send a private transaction, most of the work happens before the network hears about it. Your wallet simulates the private functions against your own notes, then generates a proof that every rule in the contract was followed. In Alpha V5 that takes about 2.5 seconds on a laptop and about 7 in a browser, roughly half what it took in V4.

What goes to the network is the proof, the new note commitments, and the nullifiers. The amounts, the counterparties, and the contract logic you ran all stay on your machine. This is why no sequencer or prover can see your data. They are never sent it.

## The network: nobody in the middle

Below the contracts is a rollup that settles on Ethereum.

Sequencers order transactions and run the public functions. There are more than 3,500 of them, each with at least 200,000 AZTEC staked, and the protocol picks one at random for every block. Blocks currently arrive about every six seconds. The roadmap aims for three to four by the end of 2026.

Provers take each epoch of 32 blocks and produce one proof covering all of it. More than 50 are running, and anyone with the hardware can join.

Ethereum does the rest. The proof is verified by a contract on L1, and the state changes are published in blobs so that anyone can rebuild the chain from Ethereum's data alone. L2BEAT rates the result [Stage 2](https://l2beat.com/scaling/projects/aztecnetwork).

No company appears anywhere in that description. Aztec Labs wrote much of the software and the Aztec Foundation supports the ecosystem, but neither one runs the sequencers or the provers, and neither can change the protocol without the vote described below.

## The token ties it together

AZTEC is an ERC-20 on Ethereum with four jobs. It pays transaction fees once bridged to the network. Sequencers stake it to earn the right to propose blocks. Sequencers and provers are paid in it, with rewards split 70/30. And it carries votes: a protocol upgrade needs sequencers to signal support, tokenholders to approve it, and a timelock to expire before it takes effect.

## Where to start

If you write code, install Noir and prove something small, then read the [Aztec documentation](https://docs.aztec.network) and deploy a contract to the sandbox. If you would rather use the network than build on it, the [apps directory](/apps) lists what is live, with a note on what each app keeps private. If you hold the token, the [staking dashboard](https://stake.aztec.network) lets you run a sequencer or delegate to one.

One caution for all three groups. The network is Alpha software. It is live on Ethereum mainnet and improving with every release, and it has not finished being tested. Check the [network status](/network/status) before you move anything you cannot afford to lose.

---

Markdown representation of https://aztec.network/blog/the-aztec-stack-from-the-language-up. Published by Aztec Foundation.
