por Vansh Wassan, ingeniero de integraciones y relaciones con desarrolladores @ API3
Twitter: @WassanVansh Github:
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
Para comenzar, vaya a ChainAPI
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.
Para este tutorial, voy a usar
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 GET
/events.json
con algunos parámetros de consulta. Puede agregar todos los parámetros que requiere su API.
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 fixed
el parámetro de format
porque quiero que devuelva la respuesta en json
.
Después de agregar todos los puntos finales requeridos, ahora puede presionar finalizar y prepararse para implementar 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:
config contiene config.json y secrets.env .
El archivo config.json se usa durante la implementación/reimplementación de un Airnode para configurar su comportamiento y proporcionar asignaciones de operaciones API.
El archivo secrets.env contiene valores para config.json que deben mantenerse en secreto.
El directorio de salida tendrá el recibo.json que se generará después de implementar con éxito el Airnode.
El archivo aws.env contiene las credenciales de AWS para las implementaciones dirigidas a AWS.
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
El README.md contiene todos los pasos para implementar el airnode proporcionado en un formato de descuento.
Abra aws.env y agregue su AWS_ACCESS_KEY_ID
y AWS_SECRET_ACCESS_KEY
que acaba de crear.
Abra config/secrets.env 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.
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 *
Un paso final antes de implementar su Airnode es configurar
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 config.json para que cualquier contrato del solicitante pueda acceder al Airnode.
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
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
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
A *
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 AirnodeRrpV0 . Durante el siguiente ciclo de ejecución, Airnode obtiene los parámetros de solicitud del evento emitido.
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
El Contrato del Solicitante tendrá dos funciones principales, makeRequest()
y fulfill()
.
La función makeRequest()
llamará a la función makeFullRequest()
delfulFill()
de AirnodeRrpV0.sol.
La función makeRequest()
espera los siguientes parámetros para realizar una solicitud válida.
airnode
(dirección) y endpointId
especifican el punto final.sponsor
y sponsorWallet
(direcciones) especifican qué billetera se utilizará para cumplir con la solicitud.parameters
especifican la API y@airnode-abi
.La devolución de llamada al Solicitante contiene dos parámetros:
requestId
: Primero se adquiere al realizar la solicitud y se pasa aquí como referencia para identificar la solicitud a la que se destina la respuesta.data
: En caso de una respuesta exitosa, estos son los datos solicitados que han sido codificados y contienen undecode()
del objeto abi
. Para desplegar el Contrato Solicitante, vamos a utilizar
Haz un contrato y pégalo en el
Ahora presione compilar en el lado derecho del tablero y compile el contrato inteligente.
Ahora estamos listos para implementar nuestro 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 sponsorWallet
más tarde. Puedes conseguir algo de la
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 _rrpAddress
es el airnodeRrpAddress principal. Los contratos RRP ya se han implementado en la cadena. Puedes consultar por tu cadena específica
Complete la _rrpAddress
y haga clic en Implementar. Confirme la transacción en su MetaMask y espere a que implemente el contrato del solicitante.
Asegúrese de estar en Polygon Mumbai Testnet
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 makeRequest
para ver todos los parámetros que necesita pasar para realizar una solicitud completa al Airnode.
Aquí, debe pasar su airnode
(dirección de Airnode), endpointID
, sponsor
(el propio Solicitante), sponsorWallet
y parameters
para llamar a la función makerequest()
.
Podemos encontrar el airnode
en el receipt.json
en el directorio de salida que obtuvimos cuando implementamos nuestro Airnode.
El endpointID
se puede encontrar en el archivo config.json
.
Necesitamos derivar el sponsorWallet
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.
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
:
npx @api3/airnode-admin derive-sponsor-wallet-address \ --airnode-xpub xpub6CUGRUo... \ --airnode-address 0xe1...dF05s \ --sponsor-address 0xF4...dDyu9
npx @api3/airnode-admin derive-sponsor-wallet-address ^ --airnode-xpub xpub6CUGRUo... ^ --airnode-address 0xe1...dF05s ^ --sponsor-address 0xF4...dDyu9
Su airnode-address
airnode y airnode-xpub
(la clave pública extendida de Airnode ) se pueden encontrar en el mismo receipt.json.
La sponsor-address
será la dirección del propio contrato del Solicitante (el que acaba de implementar).
Ejecute el comando para obtener su sponsorWallet
.
Financie el sponsorWallet
con alguna prueba MATIC.
Los parámetros deben codificarse en bytes32
antes de enviarlo. Vamos a utilizar la @airnode-abi
para codificar los parámetros fuera de la cadena y luego enviarlos al Solicitante.
Puedes ir y clonar
Ejecute el siguiente comando para obtener sus parameters
codificados:
node .\src\encodeParams.js
Ahora tiene todos los parámetros que necesita para ejecutar la función makeRequest
. Rellene todos los campos y haga clic en Transact.
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 asponsorWallet
para ver si hay nuevas transacciones.
Es posible que deba esperar un momento mientras Airnode llama a la función de fulfill()
en AirnodeRrpV0.sol que, a su vez, devolverá la llamada al contrato del solicitante en la dirección de fulfillAddress
utilizando la función fulfillFunctionId
para entregar data
.
Aquí podemos ver nuestra última transacción Fulfill .
Ahora regrese a Remix y requestId
en los registros para la última transacción.
También puede encontrar su requestId
de solicitud en los registros en Polygon Mumbai Block Explorer.
Copie su requestId
de solicitud y péguelo en el método de datos fulfilledData
para decodificar la respuesta. Haga clic en llamar y le mostrará su respuesta API.
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
¿Alguna pregunta? Verificar