Solidity es un lenguaje de programación orientado a objetos para escribir contratos inteligentes . [1] Se utiliza para implementar contratos inteligentes [2] en varias plataformas blockchain , en particular, Ethereum . [3] Fue desarrollado por Christian Reitwiessner, Alex Beregszaszi y varios antiguos colaboradores principales de Ethereum para permitir la escritura de contratos inteligentes en plataformas blockchain como Ethereum. [4] Los programas compilados por Solidity están pensados para ejecutarse en Ethereum Virtual Machine .
![]() El logo del lenguaje Solidity | |
Sitio web | github |
---|---|
Influenciado por | |
JavaScript , C ++ , Eiffel , Python |
Historia
Solidity fue propuesto inicialmente en agosto de 2014 por Gavin Wood ; [5] [se necesita fuente no primaria ] el lenguaje fue desarrollado más tarde por el equipo Solidity del proyecto Ethereum, dirigido por Christian Reitwiessner.
En la actualidad, Solidity es el idioma principal en Ethereum [6] , así como en otras cadenas de bloques privadas que se ejecutan en plataformas que compiten con Ethereum, como Monax y su cadena de bloques Hyperledger Burrow, que utiliza Tendermint para el consenso. SWIFT ha implementado una prueba de concepto utilizando Solidity que se ejecuta en Burrow. [2] [se necesita fuente no primaria ] [7] [ fuente no confiable ]
Descripción
Solidity es un lenguaje de programación de tipo estático diseñado para desarrollar contratos inteligentes que se ejecutan en la máquina virtual Ethereum , también conocida como EVM. [8]
Según lo especificado por Wood, está diseñado en torno a la sintaxis ECMAScript para que sea familiar para los desarrolladores web existentes; [ cita requerida ] a diferencia de ECMAScript, tiene tipos de retorno de tipo estático y variable . En comparación con otros lenguajes de orientación EVM de la época, como Serpent y Mutan, Solidity contenía una serie de diferencias importantes. Se admitieron variables miembro complejas para contratos, incluidas estructuras y asignaciones jerárquicas arbitrarias . Los contratos admiten la herencia , incluida la herencia múltiple con linealización C3 . Una interfaz de aplicación binaria (ABI) facilitar múltiples de tipo de fallos también se introdujo funciones dentro de un único contrato (y más tarde con el apoyo de serpiente). También se incluyó en la propuesta un sistema de documentación para especificar una descripción centrada en el usuario de las ramificaciones de una llamada a un método, conocido como "Especificación del lenguaje natural". [9] [10] [se necesita fuente no primaria ]
Ejemplo de un programa de solidez: [11] [12]
solidez del pragma > = 0,7,0 < 0,8,0 ; contrato Coin { // La palabra clave "pública" hace que las variables // accesibles desde otros contratos abordan pública acuñador ; mapeo ( dirección => uint ) saldos públicos ; // Los eventos permiten que los clientes reaccionen a los // cambios de contrato específicos que usted declara evento Enviado ( dirección desde , dirección hasta , monto uint ); // El código de constructor solo se ejecuta cuando el contrato // se crea constructor () public { minter = msg.sender ; } // Envía una cantidad de monedas recién creadas a una dirección // Solo puede ser llamado por la función de creador del contrato mint ( receptor de dirección , cantidad de uint ) public { require ( msg.sender == minter ); requiera ( cantidad < 1 e60 ); saldos [ receptor ] + = monto ; } // Envía una cantidad de monedas existentes // desde cualquier persona que llama a una función de dirección send ( dirección de receptor , cantidad de uint ) public { require ( cantidad <= saldos [ msg.sender ], "Saldo insuficiente" ); saldos [ msg.sender ] - = monto ; saldos [ receptor ] + = monto ; emitir Enviado ( mensaje , remitente , receptor , cantidad ); }}
Disponibilidad de la plataforma de desarrollo
- ErisDB de AWS [ cita requerida ]
- Casco de seguridad
- Microsoft Visual Studio [13]
- Código de Microsoft Visual Studio [14]
- Tendermint en Microsoft Azure [ cita requerida ]
- Remix de Ethereum [ cita requerida ]
Plataformas blockchain
Solidity está disponible en:
- Ethereum
- Cadena inteligente de Binance [15]
- Ethereum clásico
- Tendermint y ErisDB (una versión de Tendermint) [16] [ cita requerida ]
- Contraparte (que se ejecuta en Bitcoin ) [17] [18] [ cita requerida ]
- Tron
- Hedera Hashgraph
Crítica
Muchas propiedades de seguridad de los contratos inteligentes son intrínsecamente difíciles de razonar directamente, y la integridad de Turing de Solidity hace que la verificación automatizada de propiedades arbitrarias sea indecidible . Las soluciones automatizadas actuales para el análisis de seguridad de contratos inteligentes pueden pasar por alto violaciones críticas, producir falsos positivos y no lograr una cobertura de código suficiente en contratos realistas. [19] La solidez ha sido nombrada como una razón importante para la implementación propensa a errores de los contratos inteligentes de Ethereum debido a su naturaleza contradictoria, la falta de construcciones para lidiar con aspectos específicos del dominio de blockchain y la falta de documentación centralizada de vulnerabilidades conocidas. [20]
En 2016, un investigador de la Universidad de Cornell declaró que Solidity era parcialmente culpable del hack de DAO que tuvo lugar en 2016. Dijo: "esto en realidad no fue un defecto o un exploit en el contrato de DAO en sí: técnicamente la Máquina Virtual Ethereum (EVM) funcionaba según lo previsto, pero Solidity estaba introduciendo fallas de seguridad en los contratos que no solo la comunidad pasaba por alto, sino que también los diseñadores del lenguaje ". [21]
Referencias
- ^ Afshar, Vala; Evangelista, Colaborador Jefe Digital; Salesforce (17 de julio de 2017). "Ethereum es la segunda moneda digital más valiosa, detrás de Bitcoin" . HuffPost . Consultado el 10 de abril de 2019 .
- ^ a b "SOFE Berlin: Swift presenta una prueba de concepto de blockchain" . Finextra (Noticias). 24 de noviembre de 2016 . Consultado el 24 de noviembre de 2016 .
- ^ "Alguien acaba de robar $ 50 millones del proyecto de financiación colectiva más grande de la historia. (No se puede confiar en los seres humanos)" . Cableado .
- ^ "Lista de contribuyentes" .
- ^ Benoit Schweblin. "Visor de StackEdit" . stackedit.io .
- ^ Nikolic, Ivica; Kolluri, Aashish; Sergey, Ilya; Saxena, Prateek; Hobor, Aquino (14 de marzo de 2018). "Encontrar los contratos codiciosos, pródigos y suicidas a escala". arXiv : 1802.06038 [ cs.CR ].
Diferentes lenguajes de origen se compilan con la semántica de EVM, siendo el predominante Solidity
- ^ KENTOURIS, CHRIS (13 de diciembre de 2016). "Contratos inteligentes de Blockchain: lo que es inteligente, lo que no" . Finops (Noticias) . Consultado el 14 de diciembre de 2016 .
- ^ "Tutorial de Hyperledger Fabric - Cree una aplicación blockchain para puntos de fidelidad" . Desarrollador de IBM . Consultado el 10 de abril de 2019 .
- ↑ Kapetanios-2008-06-27 , p. 309.
- ^ ethereum. "Formato de especificación natural de Ethereum" . GitHub .
- ^ "Ejemplo de submoneda de la documentación de Solidity" .
- ^ Schneier, Karthikeyan; Schneier, Antoine; Bhargavan, Cedric; Delignat-Lavaud, Anitha; Fournet, Gollamudi; Schneier, Bruce; Rastogi, Nadim; Sibut-Pinote, Aseem; Rastogi1, Thomas; Swamy, Nikhil; Zanella-Beguelin, Santiago (27 de agosto de 2016). "Documento corto: verificación formal de contratos inteligentes" (PDF) . Microsoft Research, Instituto Francés de Investigación en Informática y Automatización, Universidad de Harvard . Archivado (PDF) desde el original el 27 de agosto de 2016.
- ^ Teeter, Cale (1 de abril de 2016). "Integración de solidez con Visual Studio" . Medio (sitio web) . Archivado desde el original el 27 de noviembre de 2016 . Consultado el 10 de junio de 2021 .
- ^ PatAltimore. "Use Visual Studio Code para conectarse a Azure Blockchain Service - Azure Blockchain" . docs.microsoft.com . Consultado el 27 de marzo de 2020 .
- ^ "Binance Smart Chain" .
- ^ "¿Qué es Tendermint | Tendermint Core" . docs.tendermint.com . Consultado el 15 de abril de 2021 .
- ^ Vigna, Michael J. Casey y Paul (12 de noviembre de 2014). "BitBeat: la contraparte de la empresa Bitcoin 2.0 adopta el software de Ethereum" . Wall Street Journal . ISSN 0099-9660 . Consultado el 16 de abril de 2021 .
- ^ Swan, Melanie (2015). Blockchain: anteproyecto para una nueva economía (1ª ed.). [Sebastopol, California] ISBN 978-1-4919-2047-3. OCLC 900781291 .
- ^ Tsankov, Petar; Dan, Andrei; Drachsler-Cohen, Dana; Gervais, Arthur; Bünzli, Florian; Vechev, Martin (15 de octubre de 2018). "Securify: análisis de seguridad práctico de contratos inteligentes" (PDF) . Actas de la Conferencia ACM SIGSAC 2018 sobre seguridad informática y de comunicaciones . Asociación de Maquinaria de Computación: 67–82. arXiv : 1806.01143 . doi : 10.1145 / 3243734.3243780 . S2CID 46936025 .
- ^ Atzei, Nicola; Bartoletti, M .; Cimoli, Tiziana (2017). "Una encuesta de ataques a contratos inteligentes de Ethereum (SoK)" . POST . Apuntes de conferencias en Ciencias de la Computación. 10204 : 164–186. doi : 10.1007 / 978-3-662-54455-6_8 . ISBN 978-3-662-54454-9. S2CID 15494854 .
- ^ Finley, Klint (18 de junio de 2016). "Un truco de $ 50 millones acaba de demostrar que el DAO era demasiado humano" . Wired (Noticias) . Consultado el 18 de febrero de 2017 .