Publicaciones
avatar

Smart contract maxis, Su compilador de Solidity podría haber eliminado silenciosamente un almacenamiento que necesitaba, y nunca lo habría visto en su código fuente. Solidity 0.8.38 se lanzó el jueves pasado. Corrige un error en el optimizador Yul que estuvo presente en todas las versiones desde la 0.8.19 hasta la 0.8.37. El optimizador lleva un registro de lo que hay en memoria y en almacenamiento. Utiliza esos registros para reemplazar una carga con un valor que ya conoce, y para omitir un almacenamiento que escribe lo que ya está allí. Para determinar si dos direcciones pueden superponerse, describe cada una como una variable base más un desplazamiento. Misma base, desplazamiento diferente, por lo tanto deben ser diferentes ranuras. Esas descripciones se almacenaban en caché. Luego, alguien vuelve a asignar la variable base. El optimizador no siempre lo nota. Ahora compara una dirección construida con el valor antiguo con otra construida con el valor nuevo, como si compartieran la misma base. Decide que son diferentes, pero en tiempo de ejecución apuntan al mismo lugar. El resultado es un registro obsoleto. Una carga posterior puede devolver un valor antiguo. Un almacenamiento que necesitaba puede eliminarse. Un keccak256 sobre esa ubicación puede hashear datos desactualizados. Solo el código compilado con el optimizador activado está expuesto. Con via-IR, cualquier código puede afectarlo, incluso sin ensamblaje en línea. Con la canalización heredada predeterminada, solo algunos ensamblajes en línea y funciones auxiliares generadas por el compilador. Las compilaciones sin optimizar son seguras. El equipo lo clasifica como baja gravedad, y hicieron algo que desearía que todos los equipos de compiladores hicieran: Volvieron a compilar todos los contratos verificados en la base de datos de Sourcify con y sin la corrección, y el bytecode fue idéntico en todos ellos. Por lo tanto, es raro. Raro no es lo mismo que nunca, especialmente si su código es reciente y aún no se ha desplegado. El error se descubrió a través del programa de recompensas por errores de la Ethereum Foundation, y un segundo informe mostró que Solidity simple sin ensamblaje también puede activarlo.

Este contenido es solo para fines informativos y educativos. Puede incluir opiniones de terceros, contenido patrocinado o material promocional por el que el creador puede recibir una compensación. Nada en este feed constituye asesoramiento de inversión ni una garantía de rentabilidad. Eres el único responsable de tus propias decisiones de inversión. Investiga siempre por tu cuenta y actúa con precaución antes de operar. No garantizamos la exactitud de la información de terceros y no nos hacemos responsables de las pérdidas que puedas sufrir. El rendimiento pasado no es indicativo de resultados futuros. Consulta nuestros Términos de la Comunidad y la Declaración de Riesgos para más detalles.

avatarPublica tu respuesta

Comentar