Informe de auditoría de contrato inteligente para 1 pulgada

Resumen de gestión

1inch se puso en contacto con Sayfer para realizar una auditoría de seguridad en su contrato inteligente.

Este informe documenta la investigación realizada por Sayfer dirigida a los recursos seleccionados definidos bajo el alcance de la investigación. En particular, este informe muestra la revisión de la postura de seguridad para el contrato inteligente de 1inch. Aplicamos una combinación de inspección manual y herramientas de escaneo automatizadas.

Durante el período de investigación de 15 días de auditoría, descubrimos 3 vulnerabilidades y 1 nota informativa en el contrato auditado.
Ninguno de estos hallazgos se considera crítico; el contrato se puede implementar tal como está. Todos los hallazgos fueron abordados y arreglados por el equipo de 1inch.

Metodología de Riesgo

En Sayfer, estamos comprometidos a ofrecer auditorías de contratos inteligentes de la más alta calidad a nuestros clientes. Es por eso que hemos implementado un modelo integral de evaluación de riesgos para evaluar la gravedad de nuestros hallazgos y brindar a nuestros clientes las mejores recomendaciones posibles para la mitigación.

Nuestro modelo de evaluación de riesgos se basa en dos factores clave: IMPACTO y PROBABILIDAD. El impacto se refiere al daño potencial que podría resultar de un problema, como pérdidas financieras, daños a la reputación o un sistema no operativo. La probabilidad se refiere a la probabilidad de que ocurra un problema, teniendo en cuenta factores como la complejidad del contrato y la cantidad de atacantes potenciales.

Al combinar estos dos factores, podemos crear una comprensión integral del riesgo que plantea un problema en particular y brindar a nuestros clientes una evaluación clara y procesable de la gravedad del problema. Este enfoque nos permite priorizar nuestras recomendaciones y garantizar que nuestros clientes reciban el mejor asesoramiento posible sobre cómo proteger sus contratos inteligentes.

El riesgo se define de la siguiente manera:

Vulnerabilidades por Riesgo

Alta – Amenaza directa a los procesos clave del negocio.
Medio – Amenaza indirecta a los procesos comerciales clave o amenaza parcial a los procesos comerciales.
Baja – No existe amenaza directa. La vulnerabilidad puede explotarse utilizando otras vulnerabilidades.
Informativo – Este hallazgo no indica vulnerabilidad, pero establece un comentario que notifica sobre fallas de diseño e implementación incorrecta que podría causar un problema a largo plazo.

Gravedad
# de problemas
Alta
0
Medio
2
Baja
1
Informativo
1
Critical
0

Enfoque

Introducción

1inch se puso en contacto con Sayfer para realizar una auditoría de seguridad en su contrato inteligente.

Este informe documenta la investigación realizada por Sayfer dirigida a los recursos seleccionados definidos en el ámbito de la investigación. En particular, este informe muestra la revisión de la postura de seguridad para los contratos antes mencionados.

Descripción general del alcance

Junto con el equipo de 1inch definimos el siguiente contrato como alcance del proyecto. Confirmar hash: 81e1f5190c391fbb929aa74a67d43245f3f662dc

Contrato Sha-256
Extensión descompresora.sol bc852b286a487711699128f1124beb69a37a75658730486ce681b5cef1e5ba11

Nuestras pruebas se realizaron entre mayo y junio de 2023.

¡No dejes que sea demasiado tarde!

Comienza tu auditoría con Sayfer

Validación del alcance

Comenzamos asegurándonos de que el alcance que nos definió el cliente fuera técnicamente lógico. Decidir qué alcance es el adecuado para un sistema determinado es parte de la discusión inicial.

Modelo de amenaza

Definimos que la mayor amenaza actual para el sistema es la capacidad de un actor malicioso de provocar DoS o crear un comportamiento inesperado en el algoritmo de compresión.

¡No dejes que sea demasiado tarde!

Comienza tu auditoría con Sayfer

Descripción general del protocolo

1inch mejora la eficiencia de las operaciones dentro del entorno blockchain de Capa 2. Dado que las operaciones con datos de llamadas más grandes tienden a ser más costosas en la Capa 2, el enfoque central es reducir el tamaño de los datos de llamadas. Para lograr esto, se emplea una estrategia de compresión de datos de llamadas, esta estrategia implica principalmente operaciones fuera de la cadena y utiliza un mecanismo denominado DecompressorExtension, que permite la recuperación de los datos de llamadas comprimidos.

Se utilizan varias técnicas clave para la compresión de los datos de llamada:

  1. Compresión de bytes cero consecutivos: esta técnica reduce el tamaño total de los datos de llamada al consolidar los bytes cero secuenciales en un formato más compacto.
  2. Copiar bytes consecutivos: en ciertos casos, la replicación de bytes secuenciales se emplea como estrategia de compresión de datos.
  3. Reemplazo basado en diccionario: se utilizan dos métodos distintos para reemplazar un segmento de datos de llamada con un índice extraído de un diccionario predefinido, lo que lleva a una representación de datos más eficiente.

Evaluación de seguridad

Los siguientes casos de prueba fueron la pauta durante la auditoría del sistema. Esta lista de verificación es una versión modificada de la SCSVS v1.2, con gramática mejorada, claridad, concisión y criterios adicionales. Donde hay una brecha en la numeración, se eliminó un criterio original. Los criterios que están marcados con un asterisco fueron agregados por nosotros.

Arquitectura, Diseño y Modelado de Amenazas

Arquitectura, Diseño y Modelado de Amenazas Nombre de la prueba
G1.2 Cada cambio de diseño introducido está precedido por el modelado de amenazas.
G1.3 La documentación define de forma clara y precisa todos los límites de confianza en el contrato (relaciones de confianza con otros contratos y flujos de datos significativos).
G1.4 El SCSVS, los requisitos de seguridad o la política están disponibles para todos los desarrolladores y probadores.
G1.5 Se definen los eventos para las operaciones (cambio de estado/crucial para el negocio).
G1.6 El proyecto incluye un mecanismo que puede detener temporalmente funcionalidades sensibles en caso de un ataque. Este mecanismo no debe bloquear el acceso de los usuarios a sus activos (por ejemplo, tokens).
G1.7 La cantidad de criptomonedas no utilizadas mantenidas en el contrato está controlada y en el nivel mínimo aceptable para no convertirse en un objetivo potencial de un ataque.
G1.8 Si cualquier persona puede llamar a la función de reserva, se incluye en el modelo de amenazas.
G1.9 La lógica de negocios es consistente. Los cambios importantes en la lógica deben aplicarse en todos los contratos.
G1.10 Se emplean herramientas automáticas de análisis de código para detectar vulnerabilidades.
G1.11 Se utiliza la versión principal más reciente de Solidity.
G1.12 Cuando se utiliza una implementación externa de un contrato, se utiliza la versión más reciente.
G1.13 Cuando las funciones se anulan para ampliar la funcionalidad, la palabra clave super se utiliza para mantener la funcionalidad anterior.
G1.14 El orden de la herencia se especifica cuidadosamente.
G1.15 Hay un componente que monitorea la actividad del contrato usando eventos.
G1.16 El modelo de amenaza incluye transacciones de ballenas.
G1.17 La fuga de una clave privada no compromete la seguridad de todo el proyecto.

Pólizas y Procedimientos

Pólizas y Procedimientos Nombre de la prueba
G2.2 La seguridad del sistema está bajo control constante (por ejemplo, el nivel esperado de fondos).
G2.3 Existe una política para rastrear nuevas vulnerabilidades de seguridad y actualizar las bibliotecas a la última versión segura.
G2.4 Se puede contactar públicamente al departamento de seguridad y que el procedimiento para manejar los errores informados (p. ej., una recompensa completa por errores) esté bien definido.
G2.5 El proceso de agregar nuevos componentes al sistema está bien definido.
G2.6 El proceso de cambios importantes en el sistema implica el modelado de amenazas por parte de una empresa externa.
G2.7 El proceso de adición y actualización de componentes al sistema incluye una auditoría de seguridad por parte de una empresa externa.
G2.8 En caso de que se produzca un ataque, existe un procedimiento de mitigación claro y bien conocido.
G2.9 El procedimiento en caso de hackeo define claramente qué personas deben ejecutar las acciones requeridas.
G2.10 El procedimiento incluye alertar a otros proyectos sobre el hackeo a través de canales confiables.
G2.11 Se define un procedimiento de mitigación de fugas de clave privada.

Capacidad de actualización

Capacidad de actualización Nombre de la prueba
G3.2 Antes de actualizar, se realiza una emulación en una bifurcación de la red principal y todo funciona como se espera en la copia local.
G3.3 El proceso de actualización se ejecuta mediante un contrato multisig donde más de una persona debe aprobar la operación.
G3.4 Los bloqueos de tiempo se utilizan para operaciones importantes para que los usuarios tengan tiempo de observar los próximos cambios (tenga en cuenta que eliminar posibles vulnerabilidades en este caso puede ser más difícil).
G3.5 inicializar() solo se puede llamar una vez.
G3.6 inicializar() solo puede ser llamado por un rol autorizado a través de modificadores apropiados (por ejemplo, inicializador, solo propietario).
G3.7 El proceso de actualización se realiza en una sola transacción para que nadie pueda adelantarlo.
G3.8 Los contratos actualizables tienen espacios reservados en las ranuras para evitar la sobrescritura.
G3.9 El número de espacios reservados (como un espacio) se ha reducido adecuadamente si se han agregado nuevas variables.
G3.10 No hay cambios en el orden en que se declaran las variables de estado del contrato, ni en sus tipos.
G3.11 Los nuevos valores devueltos por las funciones son los mismos que en versiones anteriores del contrato (por ejemplo, propietario(), saldoDe(dirección)).
G3.12 Se inicializa la implementación.
G3.13 La implementación no puede ser destruida.

 

Lógica de negocios

Lógica de negocios Nombre de la prueba
G4.2 La implementación de la lógica del contrato y los parámetros del protocolo corresponde a la documentación.
G4.3 La lógica empresarial procede en un orden de pasos secuenciales y no es posible omitir pasos o hacerlo en un orden diferente al diseñado.
G4.4 El contrato ha aplicado correctamente los límites comerciales.
G4.5 La lógica empresarial no se basa en los valores recuperados de contratos que no son de confianza (especialmente cuando hay varias llamadas al mismo contrato en un solo flujo).
G4.6 La lógica comercial no se basa en el saldo del contrato (por ejemplo, saldo == 0).
G4.7 Las operaciones sensibles no dependen de los datos del bloque (p. ej., hash de bloque, marca de tiempo).
G4.8 El contrato utiliza mecanismos que mitigan los ataques de ordenación de transacciones (ejecución inicial) (por ejemplo, esquemas de compromiso previo).
G4.9 El contrato no envía fondos automáticamente, sino que permite a los usuarios retirar fondos en transacciones separadas.

Control de Acceso

Control de Acceso Nombre de la prueba
G5.2 Se mantiene el principio del menor privilegio. Otros contratos solo deberían poder acceder a funciones y datos para los que posean autorización específica.
G5.3 Los nuevos contratos con acceso al contrato auditado se adhieren al principio de derechos mínimos por defecto. Los contratos deben tener permisos mínimos o nulos hasta que se otorgue explícitamente el acceso a las nuevas funciones.
G5.4 El creador del contrato cumple con el principio del mínimo privilegio y sus derechos siguen estrictamente los señalados en la documentación.
G5.5 El contrato hace cumplir las reglas de control de acceso especificadas en un contrato de confianza, especialmente si el control de acceso del lado del cliente de la dApp está presente y podría omitirse.
G5.6 Las llamadas a contratos externos solo están permitidas si es necesario.
G5.7 El código modificador es claro y simple. La lógica no debe contener llamadas externas a contratos que no sean de confianza.
G5.8 Todos los atributos de usuario y datos utilizados por los controles de acceso se mantienen en contratos confiables y no pueden ser manipulados por otros contratos a menos que se autorice específicamente.
G5.9 Los controles de acceso fallan de forma segura, incluso cuando se produce una reversión.
G5.10 Si se valida la entrada (parámetros de la función), se utiliza el enfoque de validación positiva (lista blanca) siempre que sea posible.

Comunicación

Comunicación Nombre de la prueba
G6.2 Se identifican las bibliotecas que no forman parte de la aplicación (pero de las que depende el contrato inteligente para funcionar).
G6.3 La llamada de delegado no se usa con contratos que no son de confianza.
G6.4 Los contratos de terceros no ocultan funciones especiales (por ejemplo, reversión).
G6.5 El contrato no verifica si la dirección es un contrato usando código de operación de tamaño de código ext.
G6.6 Los ataques de reingreso se mitigan bloqueando las llamadas recursivas de otros contratos y siguiendo el patrón Verificar-Efectos-Interacciones. No utilice la función de envío a menos que sea imprescindible.
G6.7 El resultado de llamadas a funciones de bajo nivel (p. ej. enviar, delegar llamar, llamar) de otros contratos se comprueba.
G6.8 El contrato se basa en los datos proporcionados por el remitente correcto y no se basa en el valor de tx.origin.

Aritmética

Aritmética Nombre de la prueba
G7.2 Los valores y las operaciones matemáticas son resistentes a los desbordamientos de enteros. Use la biblioteca SafeMath para operaciones aritméticas antes de solidity 0.8.*.
G7.3 Los fragmentos de código no verificados de Solidity ≥ 0.8.* no introducen desbordamientos/desbordamientos de enteros.
G7.4 Los valores extremos (por ejemplo, valores máximos y mínimos del tipo variable) se consideran y no cambian el flujo lógico del contrato.
G7.5 La desigualdad no estricta se utiliza para la igualdad de equilibrio.
G7.6 En los cálculos se utilizan órdenes de magnitud correctos.
G7.7 En los cálculos, la multiplicación se realiza antes de la división para mayor precisión.
G7.8 El contrato no asume una precisión de punto fijo y utiliza un multiplicador o almacena tanto el numerador como el denominador.

Denegación de servicio

Denegación de servicio Nombre de la prueba
G8.2 El contrato no itera sobre bucles no vinculados.
G8.3 La funcionalidad de autodestrucción se usa solo si es necesario. Si está incluido en el contrato, debe estar claramente descrito en la documentación.
G8.4 La lógica empresarial no se bloquea si un actor (por ejemplo, contrato, cuenta, oráculo) está ausente.
G8.5 La lógica comercial no desincentiva a los usuarios a usar contratos (por ejemplo, el costo de la transacción es mayor que la ganancia).
G8.6 Las expresiones de funciones afirmar o requerir tienen una variante de paso.
G8.7 Si nadie puede llamar a la función de reserva, no está bloqueando las funcionalidades del contrato.
G8.8 No hay operaciones costosas en un bucle.
G8.9 No hay llamadas a contratos que no son de confianza en un bucle.
G8.10 Si existe la posibilidad de suspender la vigencia del contrato, también es posible reanudarla.
G8.11 Si se utilizan listas blancas y listas negras, no interfieren con el funcionamiento normal del sistema.
G8.12 No hay DoS causado por desbordamientos y subdesbordamientos.

Datos de la cadena de bloques

Datos de la cadena de bloques Nombre de la prueba
G9.2 Los datos guardados en los contratos no se consideran seguros ni privados (incluso las variables privadas).
G9.3 No se almacenan datos confidenciales en la cadena de bloques (contraseñas, datos personales, token, etc.).
G9.4 Los contratos no utilizan cadenas literales como claves para las asignaciones. En su lugar, se utilizan constantes globales para evitar el ataque de homoglifos.
G9.5 El contrato no genera trivialmente números pseudoaleatorios basados ​​en la información de la cadena de bloques (p. ej., inicialización con el número de bloque).

Uso de gas y limitaciones

Uso de gas y limitaciones Nombre de la prueba
G10.1 El uso de gas está previsto, definido y tiene limitaciones claras que no se pueden exceder. Tanto la estructura del código como la entrada maliciosa no deberían causar el agotamiento del gas.
G10.2 La ejecución de la función y la funcionalidad no dependen de las tarifas de gas codificadas (están obligadas a variar).

Claridad y legibilidad

Claridad y legibilidad Nombre de la prueba
G11.2 La lógica es clara y modularizada en múltiples contratos y funciones simples.
G11.3 Cada contrato tiene un breve comentario de 1-2 oraciones que explica su propósito y funcionalidad.
G11.4 Se utilizan implementaciones listas para usar, esto se aclara en el comentario. Si estas implementaciones han sido modificadas, las modificaciones se anotan a lo largo del contrato.
G11.5 El orden de herencia se tiene en cuenta en los contratos que utilizan múltiples funciones de herencia y sombra.
G11.6 Siempre que sea posible, los contratos utilizan código probado existente (por ejemplo, contratos de token o mecanismos como poseer) en lugar de implementar los suyos propios.
G11.7 Se siguen patrones de nomenclatura coherentes a lo largo del proyecto.
G11.8 Las variables tienen nombres distintivos.
G11.9 Todas las variables de almacenamiento se inicializan.
G11.10 Las funciones con un tipo de devolución especificado devuelven un valor de ese tipo.
G11.11 Se utilizan todas las funciones y variables.
G11.12 exigir se utiliza en lugar de revertir in if Declaraciones.
G11.13 El afirmar La función se utiliza para probar errores internos y la exigir La función se utiliza para garantizar una condición válida en la entrada de los usuarios y los contratos externos.
G11.14 El código ensamblador solo se usa si es necesario.

Cobertura de prueba

Cobertura de prueba Nombre de la prueba
G12.2 Las narrativas de abuso detalladas en el modelo de amenazas están cubiertas por pruebas unitarias
G12.3 Las funciones sensibles en los contratos verificados se cubren con pruebas en la fase de desarrollo.
G12.4 Se ha comprobado la implementación de contratos verificados en busca de vulnerabilidades de seguridad mediante análisis estáticos y dinámicos.
G12.5 La especificación del contrato se ha verificado formalmente
G12.6 La especificación y los resultados de la verificación formal se incluyen en la documentación.

Finanzas descentralizadas

Finanzas descentralizadas Nombre de la prueba
G13.1 El contrato del prestamista no asume que su saldo (utilizado para confirmar el pago del préstamo) se cambie solo con sus propias funciones.
G13.2 Las funciones que cambian el saldo de los prestamistas y/o prestan criptomonedas no son reingresantes si el contrato inteligente permite tomar prestada la criptomoneda de la plataforma principal (por ejemplo, Ethereum). Bloquea los ataques que actualizan el saldo del prestatario durante la ejecución del préstamo flash.
G13.3 Las funciones de préstamo flash solo pueden llamar a funciones predefinidas en el contrato de recepción. Si es posible, defina un subconjunto confiable de contratos para llamar. Por lo general, el contrato de envío (préstamo) es el que debe devolverse.
G13.4 Si incluye operaciones potencialmente peligrosas (p. ej., devolver más ETH/tokens de los prestados), la función del receptor que maneja ETH o tokens prestados puede ser llamada solo por el grupo y dentro de un proceso iniciado por el propietario del contrato receptor u otra fuente confiable (p. ej. multigrado).
G13.5 Los cálculos de la cuota del fondo de liquidez se realizan con la mayor precisión posible (por ejemplo, si la contribución se calcula para ETH, debe hacerse con una precisión de 18 dígitos, para Wei, no para Ether). El dividendo debe multiplicarse por 10 a la potencia del número de dígitos decimales (por ejemplo, dividendo * 10^18 / divisor).
G13.6 Las recompensas no se pueden calcular y distribuir dentro de la misma llamada de función que deposita tokens (también debe definirse como no reingreso). Esto protege de fluctuaciones momentáneas en las acciones.
G13.7 Los contratos de gobernanza están protegidos contra ataques de préstamos rápidos. Una posible técnica de mitigación es requerir que el proceso de depositar tokens de gobernanza y proponer un cambio se ejecute en diferentes transacciones incluidas en diferentes bloques.
G13.8 Cuando se utilizan oráculos en cadena, los contratos pueden pausar las operaciones en función del resultado de los oráculos (en caso de un oráculo comprometido).
G13.9 Los contratos externos (incluso los de confianza) que pueden cambiar los atributos de un contrato de proyecto (p. ej., el precio del token) tienen implementadas las siguientes limitaciones: umbrales para el cambio (p. ej., no más/menos del 5 %) y un límite de actualizaciones (p. ej., una actualización por día).
G13.10 Los atributos del contrato que pueden ser actualizados por los contratos externos (incluso los confiables) se monitorean (por ejemplo, usando eventos) y se implementa un procedimiento de respuesta a incidentes (por ejemplo, durante un ataque en curso).
G13.11 Las operaciones matemáticas complejas que consisten en operaciones de multiplicación y división primero realizan multiplicaciones y luego divisiones.
G13.12 Al calcular los precios de intercambio (por ejemplo, ETH a token o viceversa), el numerador y el denominador se multiplican por las reservas (ver el obtenerPrecioEntrada en función de la Intercambio Uniswap contrato).

 

Ordenar auditoría de Sayfer





    Este sitio está protegido por reCAPTCHA y Google Sitio de Política de privacidad y Términos de Servicio aplican.

    Resultados de la auditoría

    Riesgo de centralización

    ID DECIR-01
    Estado fijo
    Riesgo Medio
    Destino Extensión descompresora.sol
    Herramientas Prueba manual

    Descripción

    Si _setData La función está expuesta al propietario del contrato, que parece ser la forma prevista de utilizar el contrato según el README, esto introduce un riesgo de centralización para cada proyecto que utiliza DecompressorExtension.

    function _setData(uint256 offset, bytes32 data) internal
    validDictAccess(offset) {
        unchecked {
            _dict[offset] = data;
        }
    }

    Un propietario podría adelantar una llamada de un usuario y cambiar la clave de dictado correspondiente antes de que se ejecute la llamada, lo que le permite cambiar los datos de la llamada de forma arbitraria. Por lo tanto, resulta imposible para un usuario verificar los datos de llamada (descomprimidos) antes de realizar una llamada.

    La mutabilidad de las entradas del dict también significa que otros contratos inteligentes que llaman a descomprimir no pueden almacenar los datos de llamada comprimidos de forma inmutable, ya que su interpretación puede cambiar.

    Mitigación

    Una solución para esto sería no permitir cambiar las entradas del diccionario existente, pero se necesita una mejor comprensión de las necesidades y opciones del negocio.

     

    Sin implementación propia

    ID DECIR-02
    Estado fijo
    Riesgo Medio
    Destino Extensión descompresora.sol
    Herramientas Prueba manual

    Descripción

    El README indica varias veces acerca de la implementación Forma propia OpenZeppelin. En realidad, el contrato no implementa ni amplía Owneable, lo que podría resultar confuso y engañoso para los propietarios del proyecto.

    Del README:

    This contract provides a `DecompressorExtension` abstract
    contract that extends `Ownable` from the OpenZeppelin
    library.

    Esto es peligroso ya que los propietarios del proyecto podrían asumir que existe un mecanismo de control de acceso, que no existe.

    Mitigación

    Implemente la funcionalidad de propiedad heredando de Ownable o actualice el archivo README para indicar que el usuario es quien debe encargarse del control de acceso.

     

    Ataque DoS de gas

    ID DECIR-03
    Estado fijo
    Riesgo Baja
    Destino Extensión descompresora.sol
    Herramientas Prueba manual

    Descripción

    Es muy fácil enviar comentarios (breves) a decompress eso da como resultado enormes datos de llamadas descomprimidos, es decir, el equivalente a un bomba zip.

    Por ejemplo, muchos bytes 00111111 seguidos de algunos otros datos se pueden enviar usando case 0, lo que genera enormes costos de expansión de memoria:

    case 0 {
        let size := add(byte(0, data), 1)
        calldatacopy(outptr, calldatasize(), size)
        inptr := add(inptr, 1)
        outptr := add(outptr, size)
        continue
    }

    Si el usuario realiza esta transacción él mismo, esto no es un problema, ya que simplemente desperdicia sus propios fondos, de ahí el bajo riesgo que conlleva este hallazgo.

    Sin embargo, existen algunos escenarios en los que esto podría permitir un ataque. Por ejemplo, podríamos tener un contrato de retransmisión que se denomina contrato inteligente en el que los desarrolladores se encargaron de que el uso de gas de cada función esté limitado. Si este contrato inteligente ahora comienza a utilizar la extensión, el uso de gas se vuelve ilimitado, ya que el data La variable es una entrada controlada por el usuario.

    Mitigación

    Evitar esta vulnerabilidad será difícil; es necesario comprender mejor las necesidades empresariales.

    Una solución es introducir un límite de longitud opcional para los datos de llamada descomprimidos, aunque esto podría ser difícil o imposible de establecer dependiendo de las funciones.
    Aparte de esta solución técnica, creemos que esto debería al menos documentarse en el archivo README o en un comentario en línea.

     

    Incompatibilidad con ERC-2771/metatransacciones

    ID DECIR-04
    Estado fijo
    Riesgo Informativo
    Destino Extensión descompresora.sol
    Herramientas Prueba manual

    Descripción

    La extensión es incompatible con el estándar ERC-2771 donde el repetidor agrega el remitente original a los datos de la llamada (ya que esto provocaría errores de compresión).

    Esto no debería ser un gran problema ya que los contratos aún admiten llamadas normales (sin comprimir), pero significa que la compresión no se puede usar junto con metatransacciones.

    Nuestra suposición es que en algún momento este contrato será un componente básico para otros protocolos, que pueden usar ERC-2771, que luego ya no funcionará cuando se usen datos de llamada comprimidos.

    Mitigación

    Si esto es relevante, implemente ERC-2771

    Contáctenos

    Mantenerse en contacto

    Destino
    Tel Aviv, Israel
    Correo electrónico
    Mensajeros
    No dude en ponerse en contacto con nosotros, ¡estaremos encantados de responderle!





      Este sitio está protegido por reCAPTCHA y Google Sitio de Política de privacidad y Términos de Servicio aplican.
      Ir al contenido