Se compilan contratos inteligentes en la cadena de bloques. ¿Existe algún sistema para verificar que todos los contratos públicos de dapp hagan lo que se proponen hacer?
es decir, esto podría hacerse mediante la compilación de contratos de código abierto y la verificación de las firmas hash del contrato, o en el caso de d-apps públicas pero de código cerrado, potencialmente descompilar el código de bytes compilado y verificar las rutas de código/llamadas a funciones, aunque este es un territorio mucho más turbio .
Consulte, por ejemplo , https://etherscan.io/address/0xf97e0a5b616dffc913e72455fde9ea8bbe946a2b#code , que es el algoritmo de "combinación de genes" de CryptoKitties. Mientras que el resto de CryptoKitties es de código abierto, este módulo de código en particular es de código cerrado. Sin embargo, se ha realizado ingeniería inversa: aquí hay una publicación de blog al respecto, https://medium.com/@sean.soria/cryptokitties-mixgenes-function-69207883fc80 . Si bien esta es una función de código pequeño, parece existir la posibilidad de que se inicie una dapp, proponiendo y pareciendo a primera vista ser de código abierto, pero de hecho contiene una bomba de tiempo oculta, por ejemplo, para transferir el saldo de Ether a la cuenta de un mal actor en una fecha futura codificada.
¿Necesitamos que se establezca algún marco o servicio mediante el cual todo el código de contrato inteligente publicado pueda validarse hasta cierto punto?
esto podría hacerse mediante la compilación de contratos de código abierto y la verificación de las firmas hash del contrato
Eso es más o menos lo que Etherscan ya hace. ¿Conoce las capacidades de Etherscan aquí? ¿Estás proponiendo algo más de lo que ya hace Etherscan?
Para los contratos inteligentes que no tienen un código fuente publicado, simplemente no confíes en ellos. (O confíe en ellos si es capaz de auditar el código de bytes directamente, lo que diría que muy pocas personas pueden hacer).
[E]sto podría hacerse compilando contratos de código abierto y verificando las firmas hash del contrato, o en el caso de d-apps públicas pero de código cerrado, potencialmente descompilando el código de bytes compilado y verificando las rutas de código/llamadas a funciones, aunque esto es mucho territorio más turbio.
Si usa el compilador solc
que compila el código de solidez, puede compilar el código fuente que el editor del contrato afirma que representa un contrato en la cadena de bloques. Debe usar el compilador con la bandera --bin-runtime
para obtener el código que se colocará en la cadena de bloques si compila y publica el código fuente en cuestión. Eche un vistazo a esta respuesta: solc bin vs. bin-runtime
Luego puede comparar el código binario que solc
devuelve con el código devuelto por la llamada en geth eth.getCode(contractaddress)
(esta llamada devuelve el binario que está almacenado en la dirección contractaddress
. Este es el código EVM del contrato colocado en la cadena de bloques). El código binario de estas dos operaciones debe coincidir.
Como dices, también puedes familiarizarte con el código de la máquina virtual que compilan los contratos de Ethereum y que se llama EVM. Si lo hace, podrá leer el contenido de los contratos directamente desde la cadena de bloques. El Libro Amarillo es un buen recurso si desea aprender EVM.
dagrada