por Vansh Wassan, ingeniero de integraciones y relaciones con desarrolladores @ API3 Twitter: @WassanVansh Github: vanshwassan Parte I: implementar un Airnode en una API REST Como todos sabemos, no es posible mediante un contrato inteligente acceder directamente a las API externas fuera de una cadena de bloques. Interactuar con datos fuera de la cadena mientras se trabaja con contratos inteligentes es un problema real para muchas dApps. La cadena de bloques de Ethereum fue diseñada para ser completamente determinista mientras que Internet no lo era. Llamar a una API directamente suena fácil, pero en una cadena de bloques, requeriría que todos los nodos llamaran al mismo punto final al mismo tiempo y esperaran obtener los mismos datos para llegar a un consenso. Además, el concepto central de una cadena de bloques es su seguridad, que se deriva de una red descentralizada de validadores independientes que limitan deliberadamente su conexión con el mundo exterior. Sin embargo, con , puede tener oráculos propios operados directamente por los proveedores de API, llamados que proporciona datos a cualquier dApp en cadena *. * Como resultado, puede hacer que cualquier API REST sea fácilmente accesible para un contrato inteligente. API3 nodos de aire Saluda a ChainAPI es una plataforma que le permite integrar e implementar Airnode de código abierto con sus herramientas de implementación e integración paso a paso. API de cadena Para comenzar, vaya a e inicie sesión conectando su MetaMask. ChainAPI API de cadena Se le pedirá que confirme y firme la transacción a través de su extensión MetaMask. Asegúrese de estar usando una nueva billetera MetaMask con un mnemotécnico nuevo. Su mnemotécnico se utilizará más tarde para implementar el Airnode. Debe mantenerlo extremadamente seguro, ya que servirá como la "clave privada" de su Airnode implementado. Cada vez que vuelvas a ChainAPI te volverás a conectar, usando MetaMask, para identificarte firmando un mensaje para la misma cuenta. Complete el proceso de registro y asigne un nombre a su espacio de trabajo. Workspaces le brinda una manera de invitar a otros usuarios a ayudar o colaborar con integraciones e implementaciones. Esto facilita la gestión de sus Airnode como equipo o la subcontratación del proceso mientras mantiene el control sobre sus integraciones e implementaciones. Para cambiar su nombre en el futuro, haga clic en el nombre en la parte superior izquierda del tablero Dentro de ChainAPI, podrá crear y administrar sus integraciones o implementaciones de Airnode navegando a los paneles "Integraciones" o "Implementar" en el panel de navegación de la izquierda. Integrando tu Airnode Para este tutorial, voy a usar puntos finales para recuperar datos de existencias. API REST pública de dxFeed Para comenzar, seleccione la opción "Integrar API" en la parte superior derecha del tablero. Ingrese los detalles sobre la API que está integrando. Debe ingresar la URL base de su API junto con todos los puntos finales que desea integrar. Como es una API pública, no tiene esquemas de seguridad. Ahora puede comenzar agregando todos sus puntos finales. Aquí, la API REST de dxFeed tiene un punto final con algunos parámetros de consulta. Puede agregar todos los parámetros que requiere su API. GET /events.json Ahora necesita agregar todos los parámetros y definir a dónde van (consulta/encabezado/ruta/cookie). Aquí, todos los parámetros son parámetros de consulta y el usuario debe definirlos. He el parámetro de porque quiero que devuelva la respuesta en . fixed format json defina qué parte de la respuesta se seleccionará y codificará antes del cumplimiento. Puede ser definido por el solicitante, pero también podemos codificarlo en la configuración de Airnode. Parámetros reservados Después de agregar todos los puntos finales requeridos, ahora puede presionar finalizar y prepararse para implementar su Airnode. Desplegando su Airnode Para implementar el Airnode, vaya a la sección de implementación en el menú. Asigne un nombre a su implementación y seleccione la integración que desea usar con ella. Seleccione su proveedor de nube donde desea que se implemente su Airnode. Ahora seleccione las cadenas para su implementación. También puede seleccionar varias redes y proveedores si lo desea en varias cadenas. Aquí, vamos a tener nuestro Airnode en Polygon Mumbai Testnet. Revise su configuración por última vez. Si todo parece correcto, haga clic en siguiente. Descarga todos los archivos de configuración de Airnode y extráelos. Así es como debería verse el directorio de configuración de Airnode: contiene y . config config.json secrets.env El archivo se usa durante la implementación/reimplementación de un Airnode para configurar su comportamiento y proporcionar asignaciones de operaciones API. config.json El archivo contiene valores para config.json que deben mantenerse en secreto. secrets.env El directorio de salida tendrá el que se generará después de implementar con éxito el Airnode. recibo.json El archivo contiene las credenciales de AWS para las implementaciones dirigidas a AWS. aws.env Como estamos utilizando AWS como nuestro proveedor de la nube, debemos agregar nuestras claves de acceso de AWS IAM con la política de acceso de administrador. Puedes referirte a esto video si no está seguro de cómo obtenerlos. El contiene todos los pasos para implementar el airnode proporcionado en un formato de descuento. README.md Abra aws.env y agregue su y que acaba de crear. AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY Abra y agregue su billetera mnemotécnica. Asegúrese de mantenerlo extremadamente seguro, ya que servirá como la "clave privada" de su Airnode implementado. A partir de la frase mnemotécnica, Airnode puede asignar direcciones de billetera tanto a la instancia de Airnode como a sus usuarios. config/secrets.env También debe agregar la URL de su proveedor de Blockchain. Aquí, vamos a utilizar Alchemy para obtener una URL de proveedor de red de prueba de Polygon Mumbai gratuita. Puede usar cualquier proveedor de blockchain que admita su red También puede configurar su * *cartas credenciales. Es un servicio opcional que permite a los usuarios autenticados realizar solicitudes HTTP a su instancia de Airnode implementada para realizar pruebas. ChainAPI ya ha generado estas claves para usted, pero puede cambiarlas si lo desea. Pasarela Http Un paso final antes de implementar su Airnode es configurar en el archivo . Autorizadores config.json Cuando un Airnode recibe una solicitud, puede usar contratos de autorización en cadena para verificar si se justifica una respuesta. Esto permite que Airnode implemente una amplia variedad de políticas y autorice el acceso del solicitante al contrato a su API subyacente. Para el alcance de este tutorial, podemos configurar la matriz del autorizador vacía en para que cualquier contrato del solicitante pueda acceder al Airnode. config.json Ahora está listo para implementar su Airnode. Asegúrese de tener Docker instalado en su sistema. Copie y pegue los siguientes comandos en su terminal en el directorio raíz de su paquete de implementación. ventanas docker run -it --rm ^ --env-file aws.env ^ -v "%cd%/config:/app/config" ^ -v "%cd%/output:/app/output" ^ api3/airnode-deployer:0.7.3 deploy OSX docker run -it --rm \ --env-file aws.env \ -e USER_ID=$(id -u) -e GROUP_ID=$(id -g) \ -v "$(pwd)/config:/app/config" \ -v "$(pwd)/output:/app/output" \ api3/airnode-deployer:0.7.3 deploy linux docker run -it --rm \ --env-file aws.env \ -e USER_ID=$(id -u) -e GROUP_ID=$(id -g) \ -v "$(pwd)/config:/app/config" \ -v "$(pwd)/output:/app/output" \ api3/airnode-deployer:0.7.3 deploy Su Airnode ya está desplegado. Puede comprobar su estado en la sección de implementación. Echa un vistazo a Github Repo para esta guía . aquí Parte II: Cómo codificar un contrato de Solicitante para llamar y leer los datos del Airnode. En la Parte I, integramos e implementamos con éxito un Airnode a través de ChainAPI. Ahora codificaremos un contrato de solicitante simple para llamar y leer datos de nuestro Airnode. Antes de comenzar, asegúrese de configurar el en su sistema. Siga el Léame para instalar y compilar todas las dependencias y paquetes para poder acceder a la CLI de Airnode. Airnode Monorepo Clona el Airnode Monorepo. $ git clone https://github.com/api3dao/airnode.git . Para instalar las dependencias, $ yarn run bootstrap Para construir todos los paquetes, $ yarn run build Un Airnode es un oráculo propio que envía datos API fuera de la cadena a su contrato en la cadena. Hace una solicitud a la cadena contrato protocolo RRP ( AirnodeRrpV0.sol ) que agrega la solicitud a los registros de eventos. El Airnode fuera de la cadena luego accede a los registros de eventos, obtiene los datos de la API y realiza una devolución de llamada al solicitante. <https://docs.api3.org/airnode/v0.8/grp-developers/ ](https://docs.api3.org/airnode/v0.8/grp-developers/) A * *es un contrato que desencadena una solicitud de Airnode. Para hacerlo, el solicitante debe estar patrocinado y realizar la solicitud utilizando una billetera de patrocinador que coincida. Solicitante El Solicitante luego llama al contrato de protocolo, que emite un evento de cadena de bloques con los parámetros de solicitud. Airnode escucha los eventos emitidos por el contrato . Durante el siguiente ciclo de ejecución, Airnode obtiene los parámetros de solicitud del evento emitido. AirnodeRrpV0 Un Airnode es un oráculo propio que envía datos API fuera de la cadena a su contrato en la cadena. Hace una solicitud a la cadena contrato protocolo RRP ( AirnodeRrpV0.sol ) que añade el Solicitante de codificación.sol El Contrato del Solicitante tendrá dos funciones principales, y . makeRequest() fulfill() La función llamará a la función del contrato de protocolo que añade la solicitud a su almacenamiento. El objetivo fuera de la cadena recopila la solicitud del almacenamiento de AirnodeRrpV0.sol y responde utilizando la función de AirnodeRrpV0.sol. makeRequest() makeFullRequest() AirnodeRrpV0.sol nodo de aire fulFill() Parámetros de solicitud La función espera los siguientes parámetros para realizar una solicitud válida. makeRequest() (dirección) y especifican el punto final. airnode endpointId y (direcciones) especifican qué billetera se utilizará para cumplir con la solicitud. sponsor sponsorWallet Los especifican la API y (ver para saber cómo se codifican) Codificaremos los parámetros fuera de la cadena usando la biblioteca . parameters Parámetros reservados Especificaciones de Airnode ABI @airnode-abi Parámetros de respuesta La devolución de llamada al contiene dos parámetros: Solicitante : Primero se adquiere al realizar la solicitud y se pasa aquí como referencia para identificar la solicitud a la que se destina la respuesta. requestId : En caso de una respuesta exitosa, estos son los datos solicitados que han sido codificados y contienen un además de otros datos de respuesta. Decodificarlo usando la función del objeto . data marca de tiempo decode() abi Compilar el contrato Para desplegar el Contrato Solicitante, vamos a utilizar . Es un IDE en línea que permite desarrollar, implementar y administrar contratos inteligentes para cadenas de bloques compatibles con EVM. Remezclar IDE Haz un contrato y pégalo en el código. Solicitante.sol Ahora presione compilar en el lado derecho del tablero y compile el contrato inteligente. Ahora estamos listos para implementar nuestro Solicitante. Despliegue del Solicitante Como vamos a implementar el contrato en Polygon Mumbai Testnet, asegúrese de tener suficiente MATIC en su billetera para implementar el Solicitante y luego financiar el más tarde. Puedes conseguir algo de la . sponsorWallet Grifo de Bombay Diríjase a Implementar y ejecutar Transacciones y seleccione Proveedor inyectado: opción MetaMask en Entorno. Conecta tu MetaMask. Asegúrate de estar en Mumbai Testnet. El es el Los contratos RRP ya se han implementado en la cadena. Puedes consultar por tu cadena específica . _rrpAddress airnodeRrpAddress principal. aquí Complete la y haga clic en Implementar. Confirme la transacción en su MetaMask y espere a que implemente el contrato del solicitante. _rrpAddress Asegúrese de estar en Polygon Mumbai Testnet Llamando al Solicitante Tan pronto como se implemente su contrato, diríjase a Implementar y ejecutar transacciones y haga clic en el menú desplegable para su Solicitante en Contratos implementados. Ahora seleccione el menú desplegable para ver todos los parámetros que necesita pasar para realizar una solicitud completa al Airnode. makeRequest Aquí, debe pasar su (dirección de Airnode), , (el propio Solicitante), y para llamar a la función . airnode endpointID sponsor sponsorWallet parameters makerequest() Podemos encontrar el en el en el directorio de salida que obtuvimos cuando implementamos nuestro Airnode. airnode receipt.json El se puede encontrar en el archivo . endpointID config.json Necesitamos derivar el a través del comando Airnode CLI que realizará la llamada real. También necesitamos financiarlo con algo de MATIC para cubrir el costo del gas. sponsorWallet Una vez que haya configurado la CLI de Airnode e instalado y creado todas las dependencias y paquetes, ejecute el siguiente comando para derivar su : sponsorWallet Linux: npx @api3/airnode-admin derive-sponsor-wallet-address \ --airnode-xpub xpub6CUGRUo... \ --airnode-address 0xe1...dF05s \ --sponsor-address 0xF4...dDyu9 Ventanas: npx @api3/airnode-admin derive-sponsor-wallet-address ^ --airnode-xpub xpub6CUGRUo... ^ --airnode-address 0xe1...dF05s ^ --sponsor-address 0xF4...dDyu9 Su airnode y (la clave pública extendida ) se pueden encontrar en el mismo La será la dirección del propio contrato del Solicitante (el que acaba de implementar). airnode-address airnode-xpub de Airnode receipt.json. sponsor-address Ejecute el comando para obtener su . sponsorWallet Financie el con alguna prueba MATIC. sponsorWallet Los parámetros deben codificarse en antes de enviarlo. Vamos a utilizar la para codificar los parámetros fuera de la cadena y luego enviarlos al Solicitante. bytes32 @airnode-abi Puedes ir y clonar y configurarlo. el repositorio de este tutorial Ejecute el siguiente comando para obtener sus codificados: parameters node .\src\encodeParams.js Ahora tiene todos los parámetros que necesita para ejecutar la función . Rellene todos los campos y haga clic en Transact. makeRequest Nota: El sponsor aquí será la dirección del contrato de solicitante que acaba de implementar. Haga clic en realizar la transacción, confirme la transacción en MetaMask y espere a que se complete la transacción. Ahora puedes dirigirte a y verifique su para ver si hay nuevas transacciones. https://mumbai.polygonscan.com sponsorWallet función de dirección de Es posible que deba esperar un momento mientras Airnode llama a la fulfill() en AirnodeRrpV0.sol que, a su vez, devolverá la llamada al contrato del solicitante en la fulfillAddress utilizando la función fulfillFunctionId para entregar data . Aquí podemos ver nuestra última transacción . Fulfill Ahora regrese a Remix y en los registros para la última transacción. requestId También puede encontrar su de solicitud en los registros en Polygon Mumbai Block Explorer. requestId Copie su de solicitud y péguelo en el método de datos para decodificar la respuesta. Haga clic en llamar y le mostrará su respuesta API. requestId fulfilledData Aquí, solicitamos el precio de las acciones de Tesla. Ahora implementó con éxito un Airnode e hizo un contrato de solicitante para obtener datos de él. También puede referirse a por todo el código que he usado para este tutorial. este repositorio ¿Alguna pregunta? Verificar ¡y deja tus consultas en el canal de soporte para desarrolladores! Servidor de discordia de API3