ETFFIN Finance >> Finanzas personales curso >  >> fondo >> Información del fondo

¿Qué es la solidez?

Solidez es el lenguaje de programación que se utiliza para escribir, crear, e implementar contratos inteligentes. Si quieres aprender sobre contratos inteligentes, no puede hacerlo sin comprender y aprender Solidity.

Inicialmente fue propuesto en 2014 por Gavin Wood, pero más tarde fue desarrollado y lanzado por Christian Reitwiessner, Alex Beregszaszi, Yoichi Hirai, y varios antiguos colaboradores principales de Ethereum, Solidity permite la creación y redacción de contratos inteligentes en plataformas blockchain como Ethereum, Ethereum clásico, Tron, entre otros.

Sirve como idioma principal en la máquina virtual de Ethereum (EVM).

Similar a Javascript

En su forma más básica, es un "lenguaje de tipo impreciso". El lenguaje funciona de manera muy similar a C y Javascript pero integra soporte adicional para variables de estado, tipos de datos, y funciones de programación.

Cuando Wood diseñó esto por primera vez, dijo que era para que resulte familiar y fácil para los desarrolladores web existentes. A diferencia de Javascript, Solidity tiene tipos de devolución de tipo estático y variable.

Con solidez, Los desarrolladores de blockchain pueden escribir aplicaciones que implementan la lógica empresarial autoaplicable (autogobernada) incorporada en contratos inteligentes. En llano, esto es lo que permite que los contratos sean autoejecutables, no requiere la participación humana, una vez que se escribe el código.

Para aquellos que son programadores expertos, este idioma es bastante fácil. Para el profano, sin embargo, se necesita tiempo y paciencia.

Comprensión de la sintaxis y los tipos de datos generales

La solidez admite tipos de valores genéricos, específicamente booleanos, enteros direcciones, literales de cadena, y modificadores. Exploremos cada uno.

Booleanos

En informática, El tipo de datos booleano es un tipo de datos que tiene dos valores posibles:verdadero o falso. Estos valores están destinados a representar los dos valores de verdad de la lógica y el álgebra booleana. Para obtener más información sobre esto, por favor haga clic aquí.

Los operadores lógicos que devuelven tipos de datos booleanos:

  • ! Negación lógica
  • &&conjunción lógica, "y"
  • || disyunción lógica, "o"
  • ==igualdad
  • ! =desigualdad

Enteros

Solidity admite int / unit para enteros con signo y sin signo, respectivamente. Estas asignaciones de almacenamiento pueden ser de varios tamaños. Se pueden usar palabras clave como uint8 y uint256 para asignar un tamaño de almacenamiento de 8 bits a 256 bits respectivamente. Por defecto, la asignación es de 256 bits. Es decir, uint e int se pueden usar en lugar de uint256 e int256.

Los operadores compatibles con los tipos de datos enteros son:

  • Comparaciones:<=, <, ==, ! =,> =,> . Estos se utilizan para evaluar a bool.
  • Operadores de bits:&, |, ^ exclusivo bit a bit "o", ~ negación bit a bit, "no".
  • Operadores aritméticos:+, -, unario -, unario +, *, /, % recordatorio, ** exponenciación, <> Giro a la derecha.

El EVM devuelve una excepción de tiempo de ejecución cuando el operador de módulo se aplica al cero de una operación de "división por cero".

Dirección

Una dirección puede contener un valor de 20 bytes equivalente al tamaño de una dirección Ethereum. Estos tipos de direcciones están respaldados por miembros que sirven como base de contrato.

Para obtener más información sobre "valores de bytes", por favor haga clic aquí.

Literales de cadena

Un "literal de cadena" o una cadena anónima, es un tipo de literal en programación para la representación de un valor de "cadena" dentro del código fuente de un programa de computadora. Para obtener más información sobre esto, por favor haga clic aquí.

A diferencia del lenguaje C, Los literales de cadena en Solidity implican ceros de valor final. Estos se pueden representar mediante comillas simples o dobles:"foo" o "bar".

Por ejemplo, "Bar" representará un elemento de 3 bytes, en lugar de cuatro (4).

Similar, con literales enteros, los literales son convertibles inherentemente, utilizando el ajuste correspondiente - byte o cadena.

Modificador

En contratos inteligentes, los modificadores ayudan a asegurar la coherencia de las condiciones definidas, antes de ejecutar el código. En otras palabras, se asegura de que las condiciones estén correctamente definidas, para correr el riesgo de un cálculo inexacto y, por lo tanto, de una ejecución.

Mapeos

La solidez proporciona matrices básicas, enumeraciones operadores, y valores hash para crear una estructura de datos, conocido como "mapeos". Se utilizan para devolver valores asociados con una ubicación de almacenamiento determinada.

Una "matriz" es una asignación de memoria contigua de un tamaño definido por el programador donde si el tamaño se inicializa como "K", y el tipo de elemento se instancia como "T", la matriz se puede escribir como T [k].

Matrices dinámicas

Las matrices también se pueden instanciar dinámicamente usando la notación uint [] [6]. Esto significa que se iniciará una matriz dinámica con seis asignaciones de memoria contiguas, mientras que una matriz bidimensional se puede inicializar como arr [2] [4], donde los dos índices muestran las dimensiones de la matriz.

Muestra de código de solidez

solidez ragma> =0,5,0 <0,7,0;

contract Coin {// La palabra clave "público" hace que las variables
// accesible desde otros contratos
dirección de la cuenta pública;
mapeo (dirección => uint) balances públicos; // Los eventos permiten a los clientes reaccionar ante situaciones específicas
// cambios de contrato que declaras
evento enviado (dirección de, frente a, cantidad uint); // El código de constructor solo se ejecuta cuando el contrato
// es creado
constructor () public {
minter =msg.sender; } // Envía una cantidad de monedas recién creadas a una dirección
// Solo puede ser llamado por el creador del contrato
función mint (receptor de dirección, uint amount) public {
require (msg.sender ==minter); requieren (cantidad <1e60); saldos [receptor] + =monto; } // Envía una cantidad de monedas existentes
// de cualquier persona que llama a una dirección
función de envío (dirección de receptor, uint amount) public {
require (amount <=saldos [msg.sender], "Saldo insuficiente."); saldos [msg.sender] - =monto; saldos [receptor] + =monto; emitir Enviado (msg.sender, receptor, Monto); }}