¿Qué es Aztec y como interactuar con su sandbox?
Última actualización
Última actualización
Aztec es un protocolo de capa 2 diseñado para Ethereum que combina privacidad y escalabilidad mediante el uso de tecnologías de conocimiento cero (Zero-Knowledge). Su arquitectura permite la ejecución de transacciones privadas y públicas en entornos completamente separados, con los siguientes componentes clave:
Es la herramienta que permite a los usuarios interactuar con Aztec, similar a bibliotecas como Web3.js o Ethers.js.
Se ejecuta del lado del cliente.
Procesa funciones privadas a través de un circuito privado, un simulador ACIR y una base de datos.
Utiliza un modelo basado en UTXOs (similar al de Bitcoin) para manejar el estado privado, con un árbol de datos diseñado para preservar la privacidad.
Se ejecuta en nodos de Aztec.
Procesa funciones públicas y crea rollups que agrupan tanto transacciones privadas como públicas.
Los datos públicos son manejados de manera similar a un libro mayor tradicional como el de Ethereum.
Estado Privado: Gestionado mediante compromisos y nullifiers, asegurando la privacidad al invalidar y actualizar notas privadas.
Estado Público: Similar a otras cadenas como Ethereum, donde los datos son transparentes y accesibles públicamente.
Cada cuenta en Aztec es un contrato inteligente, lo que permite personalizar la autorización de transacciones, la gestión de claves y el pago de tarifas.
Los contratos pueden manipular estados privados y públicos mediante Noir, un lenguaje diseñado específicamente para circuitos de conocimiento cero.
Aztec permite realizar interacciones privadas con Ethereum a través de "portales", que son contratos inteligentes que median las interacciones.
Aztec opera con tres tipos de circuitos:
Circuitos del kernel privado: son ejecutados por el usuario en su propio dispositivo y prueban la correcta ejecución de una función.
Circuitos del kernel público: son ejecutados por el secuenciador y aseguran que el registro de transacciones cumpla con las reglas de ejecución de funciones.
Circuitos de rollup: agrupan todas las transacciones de Aztec en una prueba que puede ser verificada de manera eficiente en Ethereum.
Para poder simular la interaccion con Aztec podemos utilizar su sandbox
Esta guía te enseñará cómo instalar el sandbox de Aztec, ejecutarlo usando el CLI de Aztec, e interactuar con contratos usando la CLI de la wallet.
El Sandbox es una red Aztec que se ejecuta completamente en tu pc e interactúa con un nodo de desarrollo de Ethereum. Puedes desarrollar y deployar en él tal como lo harías en una testnet o mainnet, es la herramienta perfecta para probar todo lo que quieras.
Necesitas dos dependencias globales en tu pc (Node y Docker) vamos a instalarlos:
Node.js >= v18.xx.x y <= v20.17.x (lts/iron) (versiones posteriores, por ejemplo v22.9, generan un error relacionado con 'assert’)
Se recomienda instalar con nvm
Instalamos nvm utilizando curl:
o sino con wget:
Ejecutar cualquiera de los comandos anteriores descarga un script y lo ejecuta. El script clona el repositorio de nvm en ~/.nvm
, e intenta agregar las líneas de código del siguiente fragmento al archivo de perfil correcto (~/.bash_profile
, ~/.zshrc
, ~/.profile
, o ~/.bashrc
).
Ejecutamos command -v nvm
para verificar que hayamos instalado nvm correctamente:
Podemos ver que version tenemos instalada con nvm --version
, ahora que ya tenemos instalado nvm, corremos nvm ls-remote
para ver las versiones de node disponibles:
Instalamos la version 20.17.0 :
Listo! Ya tenemos node instalado
Debemos tener docker instalado, si no lo tenemos instalado y estamos usando Ubuntu, podemos seguir su documentacion: https://docs.docker.com/engine/install/ubuntu/
Hay varias formas de instalarlo, en nuestro caso vamos a instalar Docker Engine desde el repositorio apt (https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository):
Configuramos el repositorio apt
de Docker.
Instalamos los paquetes de Docker:
Verificamos que la instalación se haya realizado con éxito ejecutando la imagen hello-world
:
Debemos tener el siguiente output:
Docker tiene que estar corriendo para poder instalar el sandbox, ejecutamos:
Output esperado:
Corremos:
Esto va a instalar las siguientes herramientas:
aztec - arranca varios subsistemas de infraestructura (sandbox completo, sequencer, prover, pxe, etc.) y proporciona comandos de utilidad para interactuar con la red
aztec-nargo - la versión de Aztec de nargo, la toolchain del compilador noir.
aztec-up - una herramienta para actualizar la toolchain de Aztec a la última versión o a versiones específicas.
aztec-wallet - una herramienta para interactuar con la red de Aztec
Le damos a Yes y va a empezar a descargar el sandbox:
Si no tenemos corriendo docker, vamos a obtener un error como el siguiente:
Una vez que lo tengamos instalado, para correr el sandbox ejecutamos:
El sandbox va a estar listo cuando veamos el siguiente mensaje:
Abrimos otra terminal y ya vamos a poder empezar a interactuar con el cliente de Aztec! :
Ejecutamos aztec -h
para ver la lista de comandos:
RECORDATORIO: Debe estar corriendo el sandbox en una terminal aparte para que se puedan ejecutar los comandos
Para esto corremos el siguiente comando:
Esto va a crear una nueva wallet con una cuenta y darle el alias “my-wallet”.
Nos va permitirá referenciarla con accounts:my-wallet
. Verás registros que te mostrarán la dirección, la clave pública, la clave secreta y más.
Podemos checkear que se ejecuto bien el comando corriendo: aztec-wallet get-alias accounts:my-wallet
deberiamos tener un output como el siguiente:
Ahora que ya tenemos nuestra cuenta nueva, vamos a obtener un poco de tokens (localmente :) )
El sandbox viene con algunos contratos que podemos deployar y jugar con ellos. Uno de estos contratos es el ejemplo de un token, el cual podemos deployar con el siguiente comando:
En el comando podemos observar:
el artifact del contrato como argumento, que es TokenContractArtifact
la cuenta del deployer, a la cual le dimos el alias my-wallet
los argumentos que toma el constructor del contrato, que son el admin
(accounts:my-wallet
), name
(TestToken
), symbol
(TST
), y decimals
(18
).
un alias testtoken
(a
) para poder referenciarlo fácilmente después como contracts:testtoken
Al completarse el despliegue exitosamente, deberías ver algo como esto:
En el siguiente paso vamos a mintear unos tokens!
Llama a la función pública de minteo de esta forma:
En el comando podemos observar:
el nombre de la función como argumento, que es mint_to_public
la cuenta from
(quien hace la llamada) que es accounts:my-wallet
la dirección del contrato, que tiene el alias contracts:testtoken
(o simplemente testtoken
)
los argumentos que toma la función, que son la cuenta donde se mintearán los tokens (my-wallet
), y la cantidad
(100
).
Esto solo funciona porque estamos usando la clave secreta del administrador que tiene permisos para mintear.
Una llamada exitosa debería mostrar algo como esto:
Podes verificar que se ejecuto correctamente llamando a la función que comprueba el saldo de tu cuenta pública:
Esto deberia mostrar:
En los siguientes pasos, moveremos algunos tokens del estado público al privado, y verificaremos nuestro balance público y privado.
Los argumentos para la función transfer_to_private
son:
la dirección de la cuenta a la que se transferirá
la cantidad de tokens a enviar al estado privado
Una llamada exitosa debería mostrar algo similar a lo que has visto antes.
Ahora cuando llames a balance_of_public
de nuevo ¡verás 75!
Esto deberia mostrar:
¡Y luego llama a balance_of_private
para verificar que tienes tus tokens!
Esto deberia mostrar::
¡Felicitaciones, ahora conoces los fundamentos para trabajar con el sandbox de Aztec! Ya estás listo para pasar a cosas más divertidas.