Ganchos EVM IBC
Descripción general
Los ganchos EVM, implementados como middleware IBC, desempeñan un papel fundamental a la hora de facilitar las llamadas de contratos entre cadenas que implican transferencias de tokens. Esta capacidad es particularmente crucial para los intercambios entre cadenas, ya que proporciona un mecanismo sólido para el comercio descentralizado entre diferentes redes blockchain. La clave de esta funcionalidad es el memo
campo en los paquetes de transferencia ICS20 e ICS721, como se introdujo en IBC v3.4.0.
Formato de ejecución de contrato EVM
Antes de sumergirnos en el formato de metadatos de IBC, echemos un vistazo al formato de datos del enlace y abordemos qué campos debemos configurar. El EVM MsgCall
se define aquí y otros tipos se definen aquí .
Así que detallamos de dónde queremos obtener cada uno de estos campos:
Remitente: No podemos confiar en el remitente de un paquete IBC, la cadena de contraparte tiene plena capacidad de mentir al respecto. No podemos arriesgarnos a que este remitente sea confundido con un usuario o dirección de módulo en particular en Initia. Entonces reemplazamos el remitente con una cuenta para representar al remitente con el prefijo del canal y un prefijo de módulo evm. Esto se hace configurando el remitente en
Bech32(Hash(Hash("ibc-evm-hook-intermediary") + channelID/sender))
, donde channelId es la identificación del canal en la cadena local.ContractAddr: este campo debe obtenerse directamente de los metadatos del paquete ICS-20.
Entrada: este campo debe obtenerse directamente de los metadatos del paquete ICS-20.
Entonces nuestro mensaje de llamada evm construido que ejecutamos se verá así:
Estructura del paquete ICS20
Entonces, dados los detalles anteriores, propagamos la estructura de datos del paquete ICS20 implícita. ICS20 es JSON nativo, por lo que usamos JSON para el formato de nota.
Un paquete ICS20 tiene el formato correcto para evmhooks si se cumple lo siguiente:
memo
no esta en blancomemo
es JSON válidomemo
tiene al menos una clave, con valor"evm"
memo["evm"]["message"]
tiene exactamente cinco entradas,"contract_addr"
y"input"
receiver
== "" ||receiver
== "dirección_del_módulo::nombre_del_módulo::nombre_de_la_función"
Consideramos que un paquete ICS20 está dirigido a evmhooks si se cumple todo lo siguiente:
memo
no esta en blancomemo
es JSON válidomemo
tiene al menos una clave, con nombre"evm"
Si un paquete ICS20 no está dirigido a evmhooks, evmhooks no hace nada. Si un paquete ICS20 se dirige hacia evmhooks y tiene un formato incorrecto, evmhooks devuelve un error.
Flujo de ejecución
Ganchos previos a la evm:
Asegúrese de que el paquete IBC entrante sea criptográficamente válido
Asegúrese de que el paquete IBC entrante no haya agotado el tiempo de espera.
En ganchos evm, ejecución previa del paquete:
Asegúrese de que el paquete esté formateado correctamente (como se define anteriormente)
Edite el receptor para que sea la cuenta del módulo IBC codificada
En ganchos evm, publique la ejecución del paquete:
Construya el mensaje evm como se definió anteriormente
Ejecutar mensaje evm
si el mensaje evm tiene error, devuelve ErrAck
de lo contrario, continúe a través del middleware
Devolución de llamada asíncrona
Es posible que un contrato que envía una transferencia IBC necesite escuchar el ACK de ese paquete. Para permitir que los contratos escuchen el acuse de recibo de paquetes específicos, proporcionamos devoluciones de llamada de acuse de recibo. El contrato que desea recibir una devolución de llamada debe implementar dos funciones.
ibc_ack
ibc_timeout
Además, cuando un contrato realiza una solicitud de transferencia de IBC, debe proporcionar datos de devolución de llamada asíncronos a través del campo de nota.
memo['evm']['async_callback']['id']
: la identificación de devolución de llamada asíncrona se asigna desde el contrato. luego se pasará como argumento deibc_ack
yibc_timeout
.memo['evm']['async_callback']['contract_addr']
: La dirección del módulo que define la función de devolución de llamada.
Conclusión
El gancho EVM representa un avance en la interoperabilidad, ya que permite funcionalidades fluidas entre cadenas y mejora la utilidad de las transferencias de tokens. Al aprovechar el gancho EVM, los desarrolladores pueden iniciar interacciones contractuales complejas en diferentes cadenas, fomentando nuevos casos de uso y aplicaciones. Este desarrollo no solo simplifica las barreras técnicas previamente asociadas con las comunicaciones entre cadenas, sino que también allana el camino para ecosistemas blockchain más integrados y eficientes. A medida que esta tecnología madure, sin duda desbloqueará un mayor potencial para aplicaciones descentralizadas, contribuyendo a una adopción más amplia y a la eficacia operativa de las tecnologías blockchain.
Last updated