¡Bienvenida/o a mi primer workshop! Te enseñaré la funcionalidad más simple que puedes esperar de un AVS para que comiences a familiarizarte con EigenLayer.
- Slides
- Video en español
- Sígueme en X: @Ariiellus
En este tutorial crearemos un servicio que genera una palabra, añade "Hello" y verifica que la acción ha ocurrido correctamente. El flujo de usuario es el siguiente:
- El consumidor del AVS solicita que se genere y firme un mensaje de "Hello World".
- El contrato HelloWorld recibe la solicitud y emite un evento
NewTaskCreatedpara la petición. - Todos los operadores registrados en el AVS que han hecho staking y delegado activos toman esta solicitud. El operador genera el mensaje solicitado, lo convierte en un hash y firma ese hash con su clave privada.
- Cada operador envía su hash firmado de vuelta al contrato HelloWorld AVS.
- Si el operador está registrado en el AVS y tiene el stake mínimo requerido, el envío es aceptado.
Eso es todo. Este flujo simple resalta algunos de los mecanismos clave de cómo funcionan los AVS.
⚠️ Advertencia:
Este ejemplo no utiliza el nuevo flujo de trabajo del set de operadores. Consulta ELIP-002 para más detalles. Para un ejemplo del nuevo flujo, revisa los ejemplos de Incredible Squaring (versión en Go, versión en Rust).
Este ejemplo incluye una condición simple de penalización: una tarea DEBE ser respondida por suficientes operadores antes de que hayan pasado N bloques desde la creación de la tarea. Puedes modificar el valor OPERATOR_RESPONSE_PERCENTAGE en el archivo .env para ajustar la probabilidad de que un operador responda una tarea. Si esta condición no se cumple, cualquier persona puede penalizar al operador llamando a HelloWorldServiceManager.slashOperator.
Esta sección describe los herramientas necesarias para el desarrollo local.
Primero copiaremos el repo de EigenLayer:
git clone https://github.com/Layr-Labs/hello-world-avs.git
cd hello-world-avsDespués instalaremos las herramientas necesarias para el desarrollo local:
# Instalar dependencias del proyecto:
npm install
# Instalar Foundry
curl -L https://foundry.paradigm.xyz | bash
# Instalar Ethers
npm install ethersOtras herramientas necesarias son:
En la terminal #1, ejecuta los siguientes comandos:
# Iniciar la cadena local con Anvil
npm run start:anvilEn la terminal #2 desplegaremos los contratos de EigenLayer y el contrato HelloWorld en la cadena local:
# Configurar archivo .env
cp .env.example .env
cp contracts/.env.example contracts/.env
# Actualizar dependencias si es necesario y compilar los contratos
npm run build:forge
# Desplegar contratos de EigenLayer
npm run deploy:core
# Desplegar contratos del AVS Hello World
npm run deploy:hello-world
# (Opcional) Actualizar las ABIs
npm run extract:abis
# Iniciar la aplicación del operador
npm run start:operatorEn la terminal #3 crearemos tareas de Hello World que se enviarán a los operadores:
# Iniciar la aplicación createNewTasks
npm run start:trafficAlgunas otras tareas que puedes probar son la distribución de recompensas a los operadores por las tareas realizadas.
En otra terminal:
# Crear raíces de distribución
npm run create-distributions-root
# Reclamar la distribución
npm run claim-distributionsDistribución dirigida por operador:
# Crear raíces de distribución dirigidas por el operador
npm run create-operator-directed-distributions-root
# Reclamar la distribución
npm run claim-distributionsIntentemos crear un servicio de oráculo que toma los datos del precio de Bitcoin desde CoinMarketCap.
El servicio cuenta con 3 partes básicas:
-
Un trigger: Cualquier evento emitido por un contrato. Este evento desencadena un servicio. En este ejemplo el trigger transmitirá la información del ID de un activo de CoinMarketCap.
-
Un componente de servicio: El componente de servicio contiene la lógica del servicio. En este ejemplo el componente de servicio se encargara de obtener el precio del activo de CoinMarketCap y enviarlo en formato JSON.
-
Un contrato de servicio: Este contrato contiene la lógica de validación y almacenamiento de la información obtenida del componente de servicio. Cuando un operador enviá una respuesta, el contrato de servicio verificara la integridad de la información y la asociara con el ID del trigger.
Estas partes se utilizan para crear un servicio de oráculo mediante WAVS.
Para configurar el sistema, debes tener instalado las siguientes herramientas:
- Foundry
- Docker
- Make
- JQ
- Rust
- Cargo
Para crear un servicio de oráculo, sigue estos pasos:
Abre una terminal y ejecuta el siguiente comando:
forge init --template Lay3rLabs/wavs-foundry-template my-wavs --branch 0.3
cd my-wavsInstala dependencias y construye el contrato junto con los testes correspondientes:
# Instala dependencias
make setup
# Construye los contratos
forge build
# Realiza los tests
forge testConstruyamos y probemos los componentes:
make wasi-buildTesting y debugging local:
# El ID de Bitcoin es 1. No se guardará en el contrato, solo se muestra la salida del componente
COIN_MARKET_CAP_ID=1 make wasi-execCorre el servicio de oráculo:
cp .env.example .env
# Inicia una Anvil chain y despliega los contratos de EigenLayer
make start-allEn una nueva terminal desplegaremos nuestros contratos WavsSubmit.sol & WavsTrigger.sol:
export SERVICE_MANAGER_ADDR=`make get-eigen-service-manager-from-deploy`
forge script ./script/Deploy.s.sol ${SERVICE_MANAGER_ADDR} --sig "run(string)" --rpc-url http://localhost:8545 --broadcastDespliega tu servicio y actívalo:
make deploy-service
export COIN_MARKET_CAP_ID=1
export SERVICE_TRIGGER_ADDR=`make get-trigger-from-deploy`
forge script ./script/Trigger.s.sol ${SERVICE_TRIGGER_ADDR} ${COIN_MARKET_CAP_ID} --sig "run(string,string)" --rpc-url http://localhost:8545 --broadcast -v 4
# Muestra el último TriggerId y muestra el resultado mediante `script/ShowResult.s.sol`
make show-resultSi necesitas ayuda para desplegar o modificar este repositorio para tu AVS:
- Abre un ticket en support.eigenlayer.xyz
- Proporciona:
- Stacktrace completo
- Repositorio mínimo con el error
- Pasos para reproducirlo
- Para Holesky: asegúrate de verificar tus contratos con
forge verify-contract
¿Planeas construir un AVS y quieres hablar con el equipo DevRel de EigenLayer? Llena este formulario: EigenLayer AVS Intro Call
- Este repositorio está enfocado en pruebas locales con Anvil. Soporte para Holesky será añadido pronto.
- Para producción, se recomienda usar una arquitectura BLS basada en RegistryCoordinator.
