Cómo encontrar el código de solidez para una dirección de contrato

Necesito averiguar el código de contrato público, es decir, el código de solidez para una dirección de contrato.

Por ejemplo, aquí tiene una pestaña para el código de contrato, pero solo está en ensamblador y en código de bytes, lo cual no es útil.

Necesito encontrar firmas de métodos para poder formar temas.

Respuestas (1)

Principalmente debido a las optimizaciones realizadas cuando se compila el código fuente, no es factible obtener el código fuente del código de bytes/código de operación en sí. Consulte esta pregunta .

La compilación al código fuente original es imposible porque se eliminan todos los nombres de variables, nombres de tipos e incluso nombres de funciones. Puede ser técnicamente posible llegar a un código fuente que sea similar al código fuente original pero que sea muy complicado, especialmente cuando se usó el optimizador durante la compilación. No conozco ninguna herramienta que haga más que convertir código de bytes en códigos de operación

Entonces, si el código del contrato es de fuente cerrada, entonces no es posible encontrar el código fuente. Pero si el contrato es público, existe la posibilidad de encontrar el código fuente. Puede consultar esta pregunta .

No existe una solución general para esto porque el código de solidez no está publicado en la cadena de bloques. En la cadena de bloques solo se publica el código de bytes resultante. Existen diferentes exploradores de bloques como ether.camp que ofrecen la opción de cargar el código de solidity. Pueden usar el código de solidez para verificar que realmente coincida con el código de bytes en la dirección.

Hay un proyecto que tiene como objetivo hacer esto automáticamente raspando los repositorios de github en busca de código fuente que se ajuste al código de bytes publicado.

AFAIK, no hay obligación de publicar el código fuente del contrato. Depende del usuario verificarlo antes de usarlo. Entonces, si un desarrollador de contratos inteligentes quiere atraer a la mayoría de las personas, depende de él revelar el código para que el otro pueda confiar en él. Dado el código de solidez y su dirección, cualquiera puede verificar el contrato implementado utilizando este método .

¿No hay consenso para publicarlo en github para auditarlo?
En realidad, ahora un "contrato" es solo una lógica codificada. Creo que al principio, el significado estaba más limitado al significado normal de "contrato", es decir, un acuerdo entre dos partes, lo que implica que ambas partes han visto cuál es el acuerdo y lo firmaron. En el sentido actual de la lógica codificada, un "contrato" no es realmente un contrato si el desarrollador no ha revelado el código fuente. Si solo una de las partes conoce el contenido, no es un contrato, en el sentido real de la palabra.