"El verdadero viajero se queja en el monte Luojia, y el falso rey mono transcribe el texto en Shuiliandong".
En "Viaje al Oeste", el macaco de seis orejas finge ser el rey mono Sun Wukong y engaña al monje Tang y a los dioses confundiendo lo falso con lo real. Incluso el espejo del demonio no puede distinguir lo real de lo real. el falso. Ahora, cuando el contrato inteligente se encuentre con el "macaco de seis orejas", ¿qué tipo de chispa creará?
En el contrato inteligente, el constructor es responsable de la inicialización de algunos datos y el valor del propietario generalmente se coloca en el constructor para la inicialización. propietario es el título del propietario del contrato inteligente y, a menudo, se utiliza como superadministrador del contrato. Para el contrato de token, los derechos que se le pueden asignar al propietario incluyen: acuñar/destruir tokens, congelar tokens, etc. Si el desarrollador crea un "constructor" con una sintaxis incorrecta, lo que hace que falten constructores, lo que hace que el "macaco de seis orejas" engañe al desarrollador y, finalmente, haga que el atacante sea el propietario del contrato, entonces el atacante puede depender de la autoridad de el propietario, operaciones como la emisión adicional o la destrucción de tokens pueden provocar el colapso de todo el token.
En el lenguaje Solidity, cuando el nombre de la función es el mismo que el nombre del contrato, esta función es el constructor del contrato. Cuando se crea el objeto del contrato, se llamará primero al constructor para inicializar los datos relevantes.
Ethereum Solidity versión 0.4.22 presenta la palabra clave constructor, una nueva forma de declaración de constructor: constructor() public { }, el propósito de la introducción es reemplazar la forma gramatical en la que se usa el nombre del contrato como nombre del constructor en la versión inferior , De esta manera, se evita el problema del error de nomenclatura del constructor causado por el error administrativo del desarrollador. La palabra clave presentada parece ordinaria, pero tiene un significado profundo, déjame decirte lentamente.
Se espera que el mercado global de cajeros automáticos de Bitcoin aumente a $370 mil millones para 2027: el 24 de abril, Watcher.Guru tuiteó que se espera que el mercado global de cajeros automáticos de Bitcoin aumente de $36 mil millones en 2022 a $370 mil millones en 2027. Dólar. [2022/4/24 14:45:29]
Tomemos el título de Fallout del campo de tiro ethernaut como ejemplo para el análisis. A primera vista, este parece ser un código de contrato normal sin lagunas, pero después de una observación cuidadosa, se descubre que hay un error fatal en el contrato: el nombre del constructor no es coherente con el nombre del contrato y el constructor del contrato de Fallout se escribe incorrectamente como Fall1out (la letra l y el número 1), tal error lo convierte en una función ordinaria modificada por public, que pierde la característica de que el constructor solo se llama cuando se implementa el contrato, por lo que cualquiera puede llamarlo El código fuente de este tema se muestra a continuación:
Figura 1
En la función Fall1out, la dirección de la persona que llama a la función se especifica directamente como propietario, por lo que solo es necesario llamar a la función Fall1out para realizar el cambio del propietario del contrato. Como se muestra abajo:
Figura 2
El "rey de los monos falsos" Fall1out quería confundir al público con la diferencia visual de caracteres similares en algunos tipos de fuentes, pero al final no logró escapar de nuestros "ojos dorados".
Incidentes de seguridad similares han ocurrido en el pasado. Los contratos que contenían constructores falsos se lanzaron con éxito a la cadena principal. El más famoso es el "Incidente MorphToken", que provocó que se emitieran adicionalmente miles de Tokens con un valor de mercado de 10,000. Dirección del código de contrato: https://etherscan.io/address/0x2ef27bf41236bd859a95209e17a43fbd26851f92#code
En el contrato Owned, debido a la mayúscula incorrecta de la primera letra, Owned, que debería haber sido una función constructora, se ha convertido en una función ordinaria Owned, que es modificada por public y puede ser llamada por cualquier persona. Como se muestra abajo:
Figura 3
El contrato MorphToken hereda el contrato Owned e inicializa el propietario en su propio constructor, pero cualquiera puede llamar a la función owned del contrato principal Owned, y un atacante puede cambiar el propietario del contrato llamando a la función owned. El código de inicialización del propietario se muestra en la siguiente figura:
Figura 4
De lo anterior, podemos ver que cualquiera puede convertirse en propietario del contrato llamando a la función de propiedad del contrato. Como se muestra abajo:
Figura 5
Una pequeña falla, una gran diferencia, un pequeño error de letra, pero provocó el colapso de las fichas del contrato. Los tokens también se emitieron maliciosamente. Como se muestra abajo:
Figura 6
Se recomienda reemplazar Solidity 0.4.22 y superior, y usar la sintaxis constructor() correcta. Como se muestra abajo:
Figura 7
Recuerde: no hay ninguna función antes de constructor(), y la función constructor() public { } es la forma de constructor incorrecta.
Si desea utilizar una versión anterior a la 0.4.22, debe verificar si el nombre de la función es consistente con el nombre del contrato. Como se muestra abajo:
Figura 8
En los contratos inteligentes, debido al descuido de los desarrolladores, los incidentes de brechas de seguridad surgen sin cesar. "El terraplén de mil millas se derrumba en un nido de hormigas". Chengdu Lianan-Security Lab ofrece las siguientes sugerencias:
1. Al escribir funciones confidenciales de contratos inteligentes (como constructores y funciones de respaldo), los desarrolladores deben seguir estrictamente las especificaciones oficiales de escritura de código y tener cuidado de no cometer errores de caracteres, etc.
2. En algunos casos, el compilador emitirá una advertencia por el uso incorrecto del constructor, y el desarrollador debe tratarlo correctamente y no puede ignorarlo, ya que es solo un mensaje de advertencia.
3. Antes de que se lance oficialmente el contrato, es necesario encontrar una organización profesional y creíble para hacer un buen trabajo de auditoría del código del contrato.
Tags:
La primera columna de retransmisiones en directo del mercado 20:00 Kim Últimas noticias, contratos puntuales.
El 13 de julio de 2020, hora de Beijing, OKLink lanzó oficialmente el navegador de cadena de bloques DASH. Este navegador continúa con las funciones básicas de otros navegadores de divisas. Computación de datos de cla.
El artículo es una contribución de Biquan Beiming, columnista de Jinse Finance and Economics, y sus comentarios solo representan sus puntos de vista personales.
"El verdadero viajero se queja en el monte Luojia, y el falso rey mono transcribe el texto en Shuiliandong".En "Viaje al Oeste".
Según datos de Zero One Think Tank, a finales de 2019, 5.926 empresas en 47 países y regiones han solicitado 38.064 patentes de blockchain; de ellas, 3.218 empresas son de China, lo que representa el 54.
La primera columna de retransmisiones en directo del mercado 20:00 Kim Últimas noticias, contratos puntuales.
El líder de las criptomonedas, Brock Pierce, se presenta a las elecciones de 2020 como el último candidato presidencial.El capitalista de riesgo de criptomonedas Brock Pierce anunció su candidatura presidencial de EE.