El nombre de Solidity hace referencia a un lenguaje de tipeo estático de alto nivel con el que se pueden programar contratos inteligentes para la red de Ethereum. Su sintaxis es muy similar a la de lenguajes tan conocidos como C++ o javascript . Solidity fue creada con el propósito de permitir la redacción de contratos inteligentes de forma sencilla para la red Ethereum. Es un lenguaje diseñado para aprovechar al máximo la Máquina Virtual de Ethereum, permitiendo la creación y desarrollo de contratos inteligentes que pueden ejecutarse de manera óptima en la EVM.
Para ello, el programador puede desarrollar sus aplicaciones en un lenguaje de fácil uso, lectura y mantenimiento para que, al finalizar, el motor de Solidity convierta ese simple código en el código máquina que entenderá el EVM, un código máquina que es prácticamente imposible de entender por una persona.
En esencia Solidity facilita el desarrollo de contratos inteligentes sobre Ethereum y, aunque no es el único lenguaje, fue el primero, el más versátil y sobre el que más contratos inteligentes se han desarrollado.
Aquí tienes todo lo que debes saber sobre Solidity.
Indice
¿Qué es Solidity?
La llegada de Bitcoin hace más de una década ocasionó una nueva fiebre de desarrollo en la comunidad de programación. En los primeros días de la criptografía, algunos pioneros vieron el potencial de los sistemas descentralizados y el consenso descentralizado y comenzaron a experimentar con ideas sobre cómo expandir las ideas fundamentales del protocolo Bitcoin a otras aplicaciones.
Vitalik Buterin, uno de los primeros defensores de Bitcoin, consideró por primera vez la creación de otro protocolo para ejecutar contratos inteligentes más elaborados que el de la red Bitcoin. La estructura de Bitcoin es simple y por una buena razón: se creó principalmente para ser dinero sólido. Sin embargo, para realizar transacciones más complejas que no requieren la presencia de un intermediario que las valide, Buterin sugirió la idea de Ethereum, un complejo sistema de contratos inteligentes que interactúan entre sí.
Con Ethereum, la idea de una transacción ya no se limitaba al dinero per se, sino una serie de otros tipos de arreglos que podrían ejecutarse mediante un protocolo altamente maleable y programable. En otras palabras, Ethereum amplió las posibilidades y aportó creatividad y un cierto nivel de resolución de problemas de tipo humano a la mezcla. Como resultado, este nuevo protocolo de cadena de bloques debe estar completo en Turing (o lo más cerca posible de la integridad de Turing) para lograr sus nuevos objetivos.
Antes de comenzar a buscar frenéticamente en Google «cómo aprender Solidity», es importante volver a las raíces de este lenguaje de programación y los contratos inteligentes de Solidity que forman el marco transaccional de Ethereum.
Tanto Solidity como Ethereum son conceptos brillantes construidos sobre conceptos brillantes. Todo comenzó con la exploración de la naturaleza del cálculo y la computación en sí, y el sueño de las máquinas que pueden aproximarse a los humanos en su poder de cómputo.
Ethereum se basa en la extensa historia de trabajo dedicado de destacados criptógrafos, matemáticos e informáticos. Además, integra muchos conceptos, que van desde descentralización, inmutabilidad, estados, redes, teoría de juegos, etc. También es importante volver a leer en máquinas de estados finitos. En tu camino para descifrar cómo aprender Solidez, encontrarás términos como Completitud de Turing y máquinas de Turing. Como tal, es mejor comprender estos conceptos al principio de tu viaje.
¿Qué es la integridad de Turing?
Para entender Soldity, primero tenemos que echar un vistazo a la integridad de Turing y las máquinas de Turing. El término «Turing completo» en sí mismo insinúa los orígenes del concepto de una máquina de Turing. Como habrás adivinado, el legendario Alan Turing tuvo algo que ver en ello. Imaginó una máquina que podría resolver cualquier tipo de problema que los humanos sean capaces de resolver. En resumen, un sistema de reglas de manipulación de datos se considera Turing completo si puede simular una máquina de Turing.
La idea de la estructura de Turing precedió a las computadoras modernas y vino antes de la invención de la memoria RAM. Era una definición abstracta del significado de computación y cómo se realizaba. Los contratos inteligentes de Solidity tienen una relación con las máquinas completas de Turing, como descubrirás más adelante.
¿Qué es una máquina de Turing?
Entonces, ¿qué es una máquina de Turing? Bueno, una máquina de Turing se imaginó originalmente como una cinta infinita dividida en cuadrados, en la que puedes escribir y leer datos. Los datos toman la forma de 1 y 0, o código binario, que luego la máquina interpreta en un conjunto de símbolos. Este conjunto finito de símbolos se conoce como el alfabeto de la máquina.
La máquina tiene un cabezal computacional, o de lectura y escritura, que se puede mover a lo largo de la cinta y que puede escribir o borrar un símbolo en un cuadrado. El cabezal de cómputo dirige la atención de la máquina a un cuadrado a la vez, lo que significa que la máquina es consciente de un solo cuadrado en un momento dado, dependiendo de hacia dónde lo dirija el cabezal de lectura y escritura.
En términos de movimiento, la cabeza computacional está limitada a un espacio a la vez. Solo puede moverse hacia la izquierda o hacia la derecha dentro de un solo espacio de su posición actual. La cabeza también puede leer o escribir símbolos en el cuadrado en particular en el que se encuentra.
A partir de esta arquitectura básica, la máquina puede «calcular» o «decidir» qué conjunto de comportamientos ejecutar en función de lo que se denomina una «máquina de estados finitos». Se pueden crear diferentes tipos de máquinas de Turing cuyas operaciones están definidas por sus máquinas de estado únicas o respectivas. En el artículo de Turing, menciona configuraciones m, que se refieren al número finito de estados dentro de una máquina de estados finitos. La maquina cambia entre este conjunto fijo de posibles configuraciones.
Estados de transición y aceptación en las máquinas de Turing
En una máquina de Turing, comienzas con un estado dado en el presente y te mueves a otro estado resultante o futuro. La fase entre cuentos estados se llama estado de transición.
Mientras una máquina está en su estado actual, escanee el símbolo actual y se refiere a una tabla grande, conocida como tabla de transición, para obtener instrucciones sobre qué hacer a continuación. El estado de transición se refiere a la fase «indecisa» en la que la máquina todavía está buscando la tabla de los próximos pasos.
Cuando ingresa una cadena en una máquina de Turing, puede imaginarla yendo a una tabla de donde los símbolos le indican qué hacer a continuación moviéndose hacia la izquierda o hacia la derecha a través de una serie de estados hasta que alcanza un estado final o un estado de aceptación .
Los estados de aceptación son los que hacen que la máquina detenga su ejecución. Entrar en un estado de aceptación significa que la máquina se detendrá y, por lo tanto, suspenderá permanentemente la ejecución. Esto significa que no se puede entrar en un bucle infinito. Las máquinas sin estados de aceptación, por otro lado, nunca se detuvieron y funcionarán en bucles continuos.
Ethereum menciona dichos estados en su documento amarillo de Ethereum . Una comprensión de los estados de la red y lo que significan para Ethereum lo guiará en el viaje a medida que descubra los atajos óptimos para descubrir cómo interactuar con él y cómo aprender Solidity.
Máquina universal de Turing
Las máquinas de Turing pueden ser tan limitadas o expansivas como sea necesario. Tales máquinas pueden, en teoría, incluso ser capaces de capturar un conjunto más amplio de cálculos y un grado de expresión de órdenes de magnitud proporcional al número de máquinas limitadas o especializadas que asimilan. ¿Qué significa esto, hablando?
Una máquina universal de Turing, o UTM, podría simular el número de descripción de otra máquina de Turing como entrada. Turing ya ha presentado la tabla de transición de estado para tales máquinas. Hoy podemos comprender fácilmente la idea de un programa que se usa como datos y, por lo tanto, podemos construir equivalentes de software de «máquinas de máquinas».
Abre nuestras ideas a un sinfín de posibilidades. Este concepto de una máquina de Turing universal inspiró los cimientos de Ethereum.
Contratos inteligentes de Ethereum y Solidity
Para comprender Ethereum, primero debe aprovecharse de la tecnología detrás de Bitcoin. Esto incluye una comprensión básica de cómo funcionan los registros distribuidos, cómo funciona la minería, cómo se ejecutan los nodos y para qué sirve una cadena de bloques.
Bitcoin inició la revolución criptográfica, pero Ethereum tomó la tesis inicial de la cadena de bloques de Bitcoin y la siguió. Ethereum va más allá de la validación y el almacenamiento de datos en registros distribuidos. Usando Ethereum, se pueden realizar muchas transacciones diferentes y funciones de alto nivel, usando múltiples monedas o tokens (incluido Bitcoin) en toda una red. Esta red asegura que el código se ejecuta de manera equivalente y que los estados resultantes se registran y validan por consenso.
Ethereum es un software gratuito y de código abierto que se ejecuta en una red descentralizada de computadora. Ser parte de esta red es voluntario. Esta red es compatible con la cadena de bloques de Ethereum y garantiza que los programas llamados contratos inteligentes se ejecutan utilizando las computadoras o nodos de los participantes voluntarios.
Máquina Virtual Ethereum o EVM
Ahora que tiene una comprensión conceptual de las máquinas de Turing, la idea detrás de la máquina virtual Ethereum, o EVM, debería ser más fácil de entender. El EVM es una pila virtual que está integrada dentro de cada nodo que participa plenamente en la red, o nodo Ethereum, que ejecuta el código de bytes del contrato. El EVM es un sistema completo de Turing, lo que significa que puede realizar cualquier tipo de paso lógico asociado con funciones computacionales.
Forma uno de los componentes centrales del protocolo Ethereum, lo que le permite lograr un consenso. El consenso en el protocolo se logra mediante la ejecución de contratos inteligentes, cuyos resultados son totalmente deterministas o garantizados. También es crucial para el diseño económico de Ethereum. Mientras que Bitcoin ofrece recompensas por ejecutar una transacción, Ethereum cobra tarifas por ejecutar instrucciones de software. El mecanismo de gas en Ethereum permite a los usuarios pagar por adelantado las instrucciones que desean ejecutar en el EVM utilizando Ether, su moneda nativa.
Los EVM son bastante versátiles, ya que se implementan mediante JavaScript, C++, Ruby, Python y una variedad de otros lenguajes. Parte de responder a la pregunta «¿Qué es Solidez?» es poder entender su relacion con la EVM.
Qué hace Solidity por Ethereum
Los contratos que se ejecutan con EVM se escriben con Solidity. Entonces, de una vez por todas, ¿qué es Solidity? Es un lenguaje de programación de alto nivel que es compatible con la forma en que los humanos expresan instrucciones, utilizando números y letras en lugar de código binario. Si bien las primeras máquinas de Turing se basaron en entradas de unos y ceros, Solidity elimina esa complejidad y humaniza el proceso de entrada utilizando un código más amigable que es en muchos aspectos similar a JavaScript.
Los contratos inteligentes de Solidity son instrucciones que luego se compilan en el código de bytes de EVM. Los nodos de la red Ethereum, como se mencionaron, ejecutan instancias de EVM que les permiten acordar la ejecución del mismo conjunto de instrucciones.
Historia de Solidity: de v0.1.0 al futuro
Solidity fue propuesta por primera vez por el Dr. Gavin Wood, el primer CTO de Ethereum, en 2014 y fue desarrollada por Christian Reitwiessner, quien dirigió un equipo de desarrolladores para avanzar. Tiene alrededor de seis años en el momento de escribir este artículo. Su equipo central, hasta el día de hoy, está patrocinado por la Fundación Ethereum, y cuenta con una amplia comunidad de seguidores y una larga lista de colaboradores que facilita ayudar en su desarrollo a través de confirmaciones, informes de errores y resolución activa de problemas en Github y más allá. .
Su primera versión con nombre público fue v0.1.0. Desde entonces, ha sufrido muchas mejoras e iteraciones. En consecuencia, la respuesta a «¿Qué es Solidez?» sigue evolucionando.
Solidity se aumentó para reducir la barrera de entrada a Ethereum, lo que significa que tenía que ser el lenguaje más simple y fácil de usar para los contratos inteligentes. Al principio, los contratos inteligentes de Solidity tienen cualidades que reflejan tales objetivos, incluida una sintaxis muy similar a JavaScript y una falta notable de funciones. Hubo algunas compensaciones claras en el lenguaje para hacerlo fácil de usar.
Con el tiempo, la seguridad se convirtió en primordial. La facilidad de uso dio paso a cambiantes, y los contratos inteligentes de Solidity de hoy pueden ser explícitos y detallados debido a esto. Hoy, cuando preguntas, “¿Qué es la Solidez?” probablemente terminará con una descripción que incluya su prolijidad frente a la sencillez de otros lenguajes informáticos.
Características
- Solidity es un tipo de lenguaje orientado a objetos (OO) como C ++ y C #.
- Fue diseñado específicamente para desarrollar aplicaciones para la red Ethereum. Por lo tanto, solo se ejecuta en la cadena de bloques Ethereum o derivados compatibles.
- Una ventaja de este lenguaje es que se puede acceder públicamente desde la cadena de bloques al código fuente de los programas que se hacen con él.
- Incluso estando en bytecode, es posible descompilarlo y obtener una muestra bastante clara del código fuente original.
- Solidity soporta herencia múltiple, otorgándole una gran flexibilidad a la hora de programar elementos complejos.
- Este lenguaje también proporciona una serie de bibliotecas muy útiles que facilitan la programación de contratos inteligentes, haciendo que el código sea reutilizable y más fácil de mantener.
Solidity es el primer lenguaje orientado al contrato
Una de las cosas más importantes a tener en cuenta al explorar cómo aprender Solidity es que Solidity es un lenguaje diseñado específicamente para apuntar a la máquina virtual Ethereum o EVM.
Tiene muchas similitudes con JavaScript o JS. Si ya conoce JavaScript, será más fácil aprender Solidity. Por supuesto, hay variaciones en la sintaxis. Sin embargo, desde un punto de vista conceptual y de comando, los lenguajes son bastante parecidos.
Como idioma nativo de Ethereum, a diferencia de su pariente cercano JavaScript, tendrá comandos integrados. Esto se hace para que Solidity acceda a una parte de la cadena de bloques, por ejemplo, una marca de tiempo o dirección de un bloque en particular. Tiene estas funciones integradas que le permiten programar contratos inteligentes de Solidity con facilidad.
Un lenguaje orientado a contratos se diferencia de los lenguajes mayormente orientados a objetos como Java y C++ en que su énfasis está en los contratos y las funciones. La solidez se escribe estáticamente. También admite bibliotecas, herencia y otras características definidas por el usuario que tienden a ser más complejas. El lenguaje compila todas las instrucciones en una caja de arena de bytecode para que estas instrucciones puedan leerse e interpretarse en la red Ethereum.
Contratos inteligentes de Solidity
El objetivo de Ethereum era abordar y ejecutar transacciones a nivel humano, al igual que las ambiciones de la máquina completa de Turing. Para hacer esto, necesitaría adoptar un nivel lógico humano en un grado de simplicidad que fuera amigable para los programadores en un extremo, y ejecutar contratos inteligentes de Solidity en un sistema completo de Turing, promocionado como una máquina virtual completa de Turing, que permitía un nivel sin precedentes de complejidad y certeza en el otro.
La capacidad de procesamiento de una máquina «virtual» de este tipo está integrada en la implementación de su nodo, una hazaña notable de descentralización y el producto de la innovación del movimiento blockchain.
Los contratos inteligentes de Solidity permiten a cualquiera que participe en la red, básicamente, cualquier persona en el mundo que quiera, realizar transacciones con otras personas que no conocen personalmente o en las que no confían. Es posible que ni siquiera usen la misma moneda. Los contratos inteligentes de Solidity se consolidan mediante la programación de las reglas de una transacción comercial, y lo hacen en un lenguaje simplificado legible por máquina. Este negocio descentralizado sin precedentes está automatizado y puede ejecutarse sin supervisión humana y de parte confiable a nivel mundial y las 24 horas del día, los 7 días de la semana.
Entonces, de nuevo, ¿qué es Solidity? Su punto de vista amigable con los humanos de más alto nivel puede hacerlo un poco más detallado que otros lenguajes de programación, pero en el fondo, intenta algo que nunca antes se había intentado, a saber, unir el razonamiento humano y el de la máquina , que no implica el devenir humano. más parecido a una máquina, pero adapta la lógica de la máquina a las necesidades humanas. Es notable que, como herramienta con un compilador, nos permite expresarnos más fácilmente en el código y toma nuestro código legible por humanos y lo transforma en una función comercial.
Además de Solidity, ¿hay otros idiomas en Ethereum?
Sí hay otros lenguajes, como Serpent, que se pueden compilar de manera similar en el código de bytes de la máquina virtual Ethereum. Si bien Serpent y los otros lenguajes «compilables con EVM» están fuera del alcance de este artículo, vale la pena señalar que todos lograron la misma función, que es generar código de bytes EVM que se puede ejecutar en los nodos de la red.
Trabajando y construyendo con Solidity y Web3.js
Otro aspecto del desarrollo en Ethereum es la necesidad de comprender cómo la biblioteca Web3.js permite su interacción con la cadena de bloques principal. El aspecto fundamental de esto es una competencia sólida en JavaScript. Necesita conocimientos de JavaScript para poder trabajar tanto con Solidity como con Web3.js.
El conocimiento de JavaScript de relevancia directa para codificar e interactuar con la cadena de bloques de Ethereum no se puede enfatizar lo suficiente. Utilizando Solidity y Web3.js, integra dApps o aplicaciones descentralizadas en el ecosistema. Su biblioteca Web3.js se utiliza para apuntar a la cadena de bloques de Ethereum para ejecutar una función específica. Las aplicaciones descentralizadas o dApps son aplicaciones que no existen directamente en la cadena de bloques, pero las utilizan para validar y almacenar datos y realizar otras funciones. Web3.js ayuda a tales dApps a acceder a la cadena de bloques.
La mejor manera de unir su conocimiento teórico de aplicaciones JavaScript con prácticas de blockchain es, por supuesto, utilizando Moralis. Moralis facilita el desarrollo de aplicaciones Web3 y dApp. Si necesita un acceso rápido a JavaScript, siéntase libre de aprenderlo a través del curso altamente calificado de Ivan on Tech Academy, JavaScript para desarrolladores de blockchain .
Entornos de desarrollo disponibles
Como casi cualquier lenguaje de programación, Solidity puede aprovechar los beneficios de un entorno de desarrollo integrado o IDE. En Ethereum, el IDE oficial se conoce como Remix . Esto facilita a los desarrolladores la creación de contratos inteligentes, al tiempo que permite el acceso al estado y las propiedades de los contratos inteligentes ya creados. También cuenta con potentes herramientas de análisis y corrección de código para ayudar a los desarrolladores a depurar sus programas.
Remix también se puede ejecutar y utilizar online a través de Firefox o Chrome o directamente en nuestro ordenador. Y aunque este es el IDE oficial de Ethereum, también hay otros entornos que admiten el lenguaje Solidity. Por ejemplo, Ethereum Studio es un IDE especializado que brinda acceso a un entorno completo de Ethereum a través de un intérprete de comandos conocido como shell.
Así mismo, nos encontramos con Solidity plugin para IntelliJ IDEA , otro IDE creado para el desarrollo de programas informáticos compatibles con Solidity. Atom es una herramienta editable que se puede usar para personalizar cualquier cosa. Podemos encontrar un paquete conocido como etheratom que utiliza la biblioteca web3.js para interactuar con un nodo de Ethereum.
Otro IDE que podemos encontrar es el complemento de Visual Studio , creado por Microsoft. Esto permite la creación y desarrollo de contratos inteligentes a través de un compilador de Solidity. También permite la creación de aplicaciones para Microsoft y modernas aplicaciones web y servicios en la nube que utilizan su servicio Azure.