Cuando se implementa un contrato inteligente, ¿su código fuente es visible públicamente?

Cuando se implementa un contrato inteligente en la cadena de bloques, ¿el código fuente es visible públicamente para todos los participantes? Por ejemplo, lo que ves aquí en Etherchain. Soy consciente de que hay algunos contratos allí con el código fuente provisto como no, pero solo quiero confirmar.

¡Gracias por adelantado!

Su pregunta no lo establece explícitamente, pero lo que está buscando se llama descompilador. Hay algunos disponibles, por ejemplo, JEB Decompiler, Ethervm o Porosity (obsoleto). Ver ethereum.stackexchange.com/questions/28877/…

Respuestas (2)

No, el código fuente no se puede ver públicamente automáticamente. Si tiene un contrato inteligente de uso público, normalmente necesita publicarlo para que las personas sepan con qué están interactuando, pero no sucede automáticamente.

Sin embargo, el código de bytes compilado está en la cadena de bloques. Es difícil de leer, pero no es seguro asumir que alguien no sabrá lo que hace o escribirá un buen descompilador.

¿Es posible que una persona después de descompilarlo pueda hacer cambios en el contrato?
Nadie puede cambiar un contrato después de que se haya implementado en la cadena de bloques, ni siquiera su creador. Pero si alguien pudiera descompilar o aplicar ingeniería inversa a su contrato, podría hacer cambios y luego implementar la versión modificada como un nuevo contrato.

En general, como comentaron otros usuarios, no es posible recuperar el código fuente original en la práctica. Además, Etherscan.io solo enumera <1% de los contratos con código fuente. Sin embargo, las personas pueden usar descompiladores para realizar ingeniería inversa y tratar de comprender mejor los contratos inteligentes implementados. Hay varios descompiladores disponibles, por ejemplo, Porosity, Mythril, EthIR y Vandal. Un buen descompilador que está disponible actualmente (en términos de fidelidad y confiabilidad) es https://www.contract-library.com . No es una herramienta independiente, pero puede descompilar la mayoría de los contratos que se encuentran actualmente en la red principal de Ethereum.

Y este es el contrato al que se vinculó en modo descompilado: https://contract-library.com/contracts/Ethereum/0xbf35faa9c265baf50c9cff8c389c363b05753275

Como puede ver, algunos de los nombres de funciones y estructuras de datos se infieren automáticamente, a veces en función del conocimiento adquirido al intentar comprender contratos anteriores. En general, los descompiladores para Ethereum actualmente no están diseñados exactamente para optimizar su salida para el consumo humano típico, sin embargo, están optimizados para el consumo de otras máquinas (algoritmos) que pueden encontrar vulnerabilidades de seguridad.