Articulo de referencia

Solidez

[[C++]] (later)"},"designer":{"wt":"[[Gavin Wood]]"},"developer":{"wt":"Christian Reitwiessner, {{Cite web |title=Contributors to ethereum/solidity |url=https://github.com/ether...

Solidity es un lenguaje de programación para implementar contratos inteligentes [ 5 ] [ 6 ] en varias plataformas blockchain , sobre todo Ethereum . [ 7 ] Solidity tiene licencia GNU General Public License v3.0 . [ 8 ] Solidity fue diseñado por Gavin Wood [ 9 ] y desarrollado por Christian Reitwiessner, Alex Beregszaszi y varios antiguos colaboradores del núcleo de Ethereum. [ 10 ] Los programas en Solidity se ejecutan en la Máquina Virtual de Ethereum o en máquinas virtuales compatibles . [ 11 ]

Historia

Solidity fue propuesto en agosto de 2014 por Gavin Wood [ 12 ]. El lenguaje fue desarrollado posteriormente por el equipo Solidity del proyecto Ethereum , liderado por Christian Reitwiessner.

Solidity es el lenguaje principal utilizado para desarrollar contratos inteligentes para Ethereum y otras cadenas de bloques privadas , como la cadena de bloques Hyperledger Fabric, orientada a empresas. SWIFT implementó una prueba de concepto utilizando Solidity ejecutándose en Hyperledger Fabric. [ 13 ] [ 14 ]

Descripción

Solidity es un lenguaje de programación de tipado estático diseñado para desarrollar contratos inteligentes que se ejecutan en la Máquina Virtual Ethereum (EVM) o máquinas virtuales compatibles. [ 15 ]

Solidity utiliza una sintaxis similar a la de ECMAScript, lo que la hace familiar para los desarrolladores web ; [ 16 ] sin embargo, a diferencia de ECMAScript, tiene tipado estático y tipos de retorno variádicos . Solidity se diferencia de otros lenguajes orientados a EVM, como Serpent y Mutan, en algunos aspectos importantes. Admite variables miembro complejas para contratos inteligentes , incluyendo mapeos y estructuras jerárquicas arbitrarias . Los contratos inteligentes de Solidity admiten herencia , incluyendo herencia múltiple con linealización C3. Solidity introduce una interfaz binaria de aplicación (ABI) que facilita múltiples funciones con tipado seguro dentro de un contrato inteligente (esto también fue posteriormente soportado por Serpent). La propuesta de Solidity también incluye la "Especificación en Lenguaje Natural", un sistema de documentación para especificar descripciones centradas en el usuario de las ramificaciones de las llamadas a métodos . [ 17 ] [ 18 ]

Ejemplo de un programa Solidity: [ 19 ] [ 20 ]

// SPDX-License-Identifier: GPL-3.0 pragma solidity ^ 0.8.4 ;contrato Moneda { // La palabra clave "public" hace que las variables // sean accesibles desde otros contratos dirección pública minero ; mapeo ( dirección => uint ) saldos públicos ;// Los eventos permiten a los clientes reaccionar a cambios específicos en el contrato que usted declare. Evento Enviado ( dirección de origen , dirección de destino , cantidad uint );// El código del constructor solo se ejecuta cuando se crea el contrato. constructor () { minter = msg.sender ; }// Envía una cantidad de monedas recién creadas a una dirección // Solo puede ser llamada por el creador del contrato function mint ( address receiver , uint amount ) public { require ( msg.sender == minter ); balances [ receiver ] += amount ; }// Los errores permiten proporcionar información sobre // por qué falló una operación. Se devuelven // a quien llama a la función. error InsufficientBalance ( uint requested , uint available );// Envía una cantidad de monedas existentes // desde cualquier llamador a una dirección function send ( address receiver , uint amount ) public { if ( amount > balances [ msg.sender ]) revert InsufficientBalance ({ requested : amount , available : balances [ msg.sender ] });balances [ msg.sender ] -= cantidad ; balances [ receptor ] += cantidad ; emitir Enviado ( msg.sender , receptor , cantidad ); } }

Crítica

Muchas propiedades de seguridad de los contratos inteligentes son inherentemente difíciles de razonar directamente, y la completitud de Turing de Solidity implica que la verificación de propiedades arbitrarias no puede automatizarse de manera decidible . 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. [ 21 ] Se ha culpado a Solidity de la implementación propensa a errores de los contratos inteligentes de Ethereum debido a su naturaleza contraintuitiva, su falta de construcciones para abordar aspectos específicos del dominio de blockchain y su falta de documentación centralizada de vulnerabilidades conocidas . [ 22 ]

En 2016, un investigador de la Universidad de Cornell afirmó que Solidity tuvo parte de la culpa del hackeo de The DAO ocurrido ese año. Declaró: «En realidad, no se trató de un fallo o vulnerabilidad en el contrato de DAO en sí: técnicamente, la Máquina Virtual de Ethereum (EVM) funcionaba según lo previsto, pero Solidity introducía fallos de seguridad en los contratos que no solo pasaron desapercibidos para la comunidad, sino también para los propios diseñadores del lenguaje». [ 23 ]

La comunidad de desarrolladores suele mencionar que Solidity requiere muchas interfaces y API de terceros, y que no puede crear contratos inteligentes críticos que requieran gran cantidad de información.

Referencias

  1. 1 2 "Colaboradores de ethereum/solidity" . GitHub . Consultado el 30 de marzo de 2023 .
  2. "Versión 0.8.36" . 9 de julio de 2026. Consultado el 10 de julio de 2026 .
  3. "Construyamos software mejor, juntos" . GitHub . Consultado el 30 de marzo de 2023 .
  4. "El lenguaje de programación orientado a contratos Solidity" , GitHub , Ethereum , 30 de marzo de 2023 , consultado el 30 de marzo de 2023
  5. Afshar, Vala (17 de julio de 2017). "Ethereum es la segunda moneda digital más valiosa, después de Bitcoin" . HuffPost . Consultado el 10 de abril de 2019 .
  6. "SOFE Berlín: Swift presenta prueba de concepto de blockchain" . Finextra (Noticias). 24 de noviembre de 2016. Consultado el 24 de noviembre de 2016 .
  7. Finley, Klint (junio de 2016). "Alguien acaba de robar 50 millones de dólares del mayor proyecto de financiación colectiva de la historia (no se puede confiar en los humanos)" . Wired .
  8. El lenguaje de programación orientado a contratos Solidity , Ethereum, 30 de marzo de 2023 , consultado el 30 de marzo de 2023.
  9. Wood, Gavin (13 de enero de 2015). "Creación de Solidity" . Ethereum Wiki (Archivado) . Consultado el 23 de marzo de 2024 .
  10. "Lista de colaboradores" . GitHub .
  11. Universidad, AMC (1 de noviembre de 2022). Tecnología Blockchain y Criptomonedas con Solidity Nivel 1. Advanced Micro Systems Sdn Bhd.
  12. "Gavin Wood" . gavwood.com . Archivado del original el 30 de marzo de 2023. Consultado el 30 de marzo de 2023 .
  13. Nikolic, Ivica; Kolluri, Aashish; Sergey, Ilya; Saxena, Prateek; Hobor, Aquinas (14 de marzo de 2018). "Encontrando los contratos codiciosos, pródigos y suicidas a escala". arXiv : 1802.06038 [ cs.CR ]. Diferentes lenguajes fuente se compilan a la semántica EVM, siendo Solidity el predominante.
  14. "Westpac se une a la prueba de concepto de blockchain de SWIFT" . ZDNet . Consultado el 13 de julio de 2022 .
  15. "Tutorial de Hyperledger Fabric: crea una aplicación blockchain para puntos de fidelización" . IBM Developer . Consultado el 10 de abril de 2019 .
  16. "Influencias del lenguaje — Documentación de Solidity 0.8.17" . docs.soliditylang.org . Consultado el 30 de marzo de 2023 .
  17. Kapetanios-27 de junio de 2008 , pág. 309. error sfn: sin destino: CITEREFKapetanios-2008-06-27 ( ayuda )
  18. ethereum. "Formato de especificación natural de Ethereum" . GitHub .
  19. "Introducción a los contratos inteligentes: documentación de Solidity 0.8.19" . docs.soliditylang.org . Consultado el 30 de marzo de 2023 .
  20. 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 breve: 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) del original el 27 de agosto de 2016.{{cite journal}}: CS1 maint: nombres numéricos: lista de autores ( enlace )
  21. Tsankov, Petar; Dan, Andrei; Drachsler-Cohen, Dana; Gervais, Arthur; Bünzli, Florian; Vechev, Martin (15 de octubre de 2018). «Securify: Análisis práctico de seguridad de contratos inteligentes». Actas de la Conferencia ACM SIGSAC de 2018 sobre seguridad informática y de comunicaciones . Association for Computing Machinery. págs. 67–82 . arXiv : 1806.01143 . doi : 10.1145/3243734.3243780 . hdl : 10044/1/87935 . ISBN  978-1-4503-5693-0. S2CID 46936025 . 
  22. Atzei, Nicola; Bartoletti, M.; Cimoli, Tiziana (2017). «Un estudio de los ataques a los contratos inteligentes de Ethereum (SoK)». Principios de seguridad y confianza, 6.ª Conferencia Internacional, 2017, Actas . Lecture Notes in Computer Science. pp. 164–186 . doi : 10.1007/978-3-662-54455-6_8 . ISBN  978-3-662-54454-9. S2CID 15494854 . 
  23. Finley, Klint (18 de junio de 2016). "Un hackeo de 50 millones de dólares demostró que la DAO era demasiado humana" . Wired (Noticias) . Consultado el 18 de febrero de 2017 .
  • Sitio web oficial
  • Solidity en GitHub