1 of 21

Designing Private Smart Contracts

with Aztec

1

2 of 21

What is Ethereum?

2

3 of 21

A public blockchain

3

4 of 21

A state machine

A public blockchain

4

5 of 21

5

6 of 21

6

Ethereum (L1)

  • Public�
  • Expensive

erc20

erc721�(NFTs)

Lending/�Borrowing

Trading�(AMMs)

Oracles

Derivatives

Other defi stuff

Experiments

Games

Insurance

Rollup Processors

Bridges to other L1s

Legal contracts

Real Estate

Voting

Staking

Etc…

7 of 21

7

Ethereum (L1)

  • Private-ish money

​

  • Public everything else�
  • Still expensive

erc20

erc721�(NFTs)

Lending/�Borrowing

Trading�(AMMs)

Oracles

Derivatives

Other defi stuff

Experiments

Games

Insurance

Rollup Processors

Bridges to other L1s

Legal contracts

Real Estate

Voting

Staking

Etc…

🌪️

erc20

8 of 21

8

Ethereum (L1)

  • Cheap, private transfers
  • Everything else still public

erc20

erc721�(NFTs)

Lending/�Borrowing

Trading�(AMMs)

Oracles

Derivatives

Other defi stuff

Experiments

Games

Insurance

Bridges to other L1s

Legal contracts

Real Estate

Voting

Staking

Etc…

Rollup Processor��

Aztec’s L2 (v1)

“ERC20” transfer

Batch lots of transfers, off-chain

9 of 21

9

Aztec’s Rollup

“ERC20” transfer

Rollup Processor��

“ERC20” transfer

“ERC20” transfer

“ERC20” transfer

“ERC20” transfer

“ERC20” transfer

“ERC20” transfer

“ERC20” transfer

Proof

Proof

Proof

1 verification = cheap

Actual zk-SNARKs

10 of 21

Wait, it’s all recursion?

​

11 of 21

11

Ethereum (L1)

  • Cheap, Private Defi
  • More generalized

erc20

erc721�(NFTs)

Lending/�Borrowing

Trading�(AMMs)

Oracles

Derivatives

Other defi stuff

Experiments

Games

Insurance

Rollup Processor��

Bridges to other L1s

Legal contracts

Real Estate

Voting

Staking

Etc…

Aztec Connect

ERC20 transfer

Defi�Deposit

Defi Claim

12 of 21

12

Ethereum (L1)

Aztec Connect

“Who did that defi interaction?”

​

Users retain anonymity

Bridge Contract

5 ETH

5,000 DAI

Or lending, borrowing, staking, DCA’ing, etc.

Swap Contract

L1 inputs still public

​

L1 states still public.

​

L1 computations still public

​

L1 contract still public

Pool of private tokens

13 of 21

13

Ethereum (L1)

erc20

erc721�(NFTs)

Lending/�Borrowing

Trading�(AMMs)

Oracles

Derivatives

Other defi stuff

Experiments

Games

Insurance

Rollup Processor��

Bridges to other L1s

Legal contracts

Real Estate

Voting

Staking

Etc…

Aztec (L2)

erc20

erc721�(NFTs)

Lending/�Borrowing

Trading�(AMMs)

Oracles

Derivatives

Other defi stuff

Experiments

Games

Insurance

Bridges to other L1s

Legal contracts

Real Estate

Voting

Staking

Etc…

Public Functions�& States

Private Functions & Private States which aren’t available on Eth L1 or other L2s

+

14 of 21

14

​

asset_id: ETH,

value: 10

owner: Alice,

salt: 0x1234,

​

contract_address: 0x2345,

storage_slot: 42,

value: 10

owner: Alice,

salt: 0x1234,

​

Generalising Private State

15 of 21

15

Private State change,�within a Private Function

​

contract_address: 0x2345,

storage_slot: 42,

value: 10

owner: Alice,

salt: 0x1234,

​

Prove knowledge�of Alice’s secret key

​

+5

​

nullifier = h(commitment, Alice_secret_key)

​

Perform operations on the private state’s value

​

contract_address: 0x2345,

storage_slot: 42,

value: 15,

owner: Alice,

salt: 0x3456,

​

Nullifier Tree

Private State Tree

Prove it exists somewhere in the tree

​

This has to happen on the user’s device!

​

16 of 21

16

‘Private L2’ functions & state changes

‘Public L2’ functions & state changes

L1 functions & state changes

User device

Rollup Sequencers

Eth Nodes

17 of 21

15

“�Blockchains can make state information global,

ZK-SNARKs can make state information private,

but we don't really have any good way to make state information global and private at the same time.�“

Edit: you can use multi-party computation to implement shared private state. But this requires an honest-majority threshold assumption, and one that's likely unstable in practice because (unlike eg. with 51% attacks) a malicious majority could collude to break the privacy without ever being detected.��- Vitalik

​

https://vitalik.ca/general/2022/06/15/using_snarks.html

​

​

18 of 21

15

How to abstract all of this complexity from devs?

19 of 21

15

20 of 21

16

Rust-based domain specific language (DSL) for creating and verifying zero knowledge proofs.

​

Easiest way to write zk applications compatible with any proving system.

​

​

21 of 21

16

We’re hiring engineers to realize this vision!