AZTEC is an efficient zero-knowledge privacy protocol. The protocol powers real world financial applications on Ethereum mainnet today. A complete explanation of AZTEC can be found in our white paper.
All AZTEC documentation is available on the documentation website: https://docs.aztecprotocol.com
This contains docs for the:
- Starter kits, demos and code examples
- Protocol specification
AZTEC is maintained as a monorepo with multiple sub packages. Please find a comprehensive list below.
|An aggregate package combining many smaller utility packages for interacting with the AZTEC Protocol
|AZTEC smart contract compiled artifacts
|A tiny utility library for getting known deployed contract addresses for a particular network
|Dev utils to be shared across AZTEC projects and packages
|AZTEC solidity smart contracts & tests
|Scripts for managing the monorepo
To create AZTEC notes and construct zero-knowledge proofs:
$ yarn add aztec.js
$ yarn add @aztec/contract-artifacts
$ yarn add @aztec/contract-addresses
$ yarn add @aztec/dev-utils
To see a demo, head to this tutorial.
For more information, check out our documentation.
- node >=8.3
- yarn >=1.15.2
- solidity >=0.5.0 <0.6.0
Make sure you are using Yarn >= 1.15.2. To install using brew:
brew install yarn
Then install dependencies:
To build all packages:
$ yarn build
To build a specific package:
$ PKG=aztec.js yarn build
To re-build all packages on change:
$ yarn watch
To clean all packages:
$ yarn clean
To clean a specific package:
$ PKG=aztec.js yarn clean
To lint all packages:
$ yarn lint
To lint a specific package:
$ PKG=aztec.js yarn lint
To run all tests:
$ yarn test
To run tests in a specific package:
$ PKG=aztec.js yarn test
The protocol enables transactions of value, where the values of the transaction are encrypted. The AZTEC protocol smart contract validator,
AZTEC.sol, validates a unique zero-knowledge proof that determines the legitimacy of a transaction via a combination of homomorphic encryption and range proofs.
Instead of balances, the protocol uses AZTEC notes. A note encrypts a number that represents a value (for example a number of ERC-20 tokens). Each note has an owner, defined via an Ethereum address. In order to spend a note the owner must provide a valid ECDSA signature attesting to this.
The AZTEC protocol can enable confidential transactions for any generic digital asset on Ethereum, including existing assets. Our first deployed asset enables zkDai.
The AZTEC protocol can be utilized as a stand-alone confidential token, with value transfers described entirely through AZTEC join-split transactions
The gas costs scale with the number of input and output notes in a join-split transaction. For a fully confidential transfer, with 2 input notes and 2 output notes, the gas cost is approximately 300,000 gas.
Read the AZTEC paper here. The unique AZTEC commitment function enables the efficient construction and verification of range proofs. The protocol requires a trusted setup protocol, that generates a dataset that is required to construct AZTEC zero-knowledge proofs
AZTEC ran Ignition, an MPC ceremony to generate a CRS for our privacy network and other zero-knowledge systems like PLONK from October 25th 2019 to the January 2nd 2020. 176 individuals and institutions took part, each generating randomness and adding it to the previous participant's contribution. If even one participant acts honestly and destroys the randomness they generated, the CRS can be trusted. You can see a recap of Ignition here.
The AZTEC protocol currently only supports confidentiality of amounts. We will be adding User privacy and Code privacy to the protocol and SDK.
Anybody wishing to become early members of the AZTEC network please get in touch at firstname.lastname@example.org