Introducción a los contratos inteligentes

En este artículo veremos qué son los contratos inteligentes, cuáles son, nos familiarizaremos con las diferentes plataformas de contratos inteligentes, sus características y también discutiremos cómo funcionan y qué ventajas pueden tener. Este material será muy útil para los lectores que no estén familiarizados con el tema de los contratos inteligentes, pero quieran acercarse a comprenderlo.

Contrato regular vs. contrato inteligente


Antes de entrar en detalles, veamos un ejemplo de la diferencia entre un contrato ordinario, que se establece en papel, y un contrato inteligente, que se presenta en forma digital.

imagen

¿Cómo funcionó esto antes de los contratos inteligentes? Imagine un grupo de personas que quiere establecer algunas reglas y condiciones para la distribución de valores, así como un cierto mecanismo para garantizar la implementación de esta distribución de acuerdo con las reglas y condiciones dadas. Luego se unieron, hicieron un papel en el que escribieron sus datos de identificación, las condiciones, los valores involucrados, fijaron la fecha y firmaron. Este contrato también fue certificado por una parte confiable, como un notario público. Además, estas personas divergieron en diferentes direcciones con su copia impresa de dicho contrato y comenzaron a llevar a cabo algunas acciones que podrían no corresponder con el contrato en sí, es decir, hicieron una cosa y se aseguró en papel que deberían hacer algo completamente diferente. ¿Y cómo salir de esta situación? De hecho, uno de los miembros del grupo necesita tomar este documento, tomar alguna evidencia, llevarlo a la corte y buscar el cumplimiento entre el contrato y las acciones reales. Muy a menudo es difícil lograr una ejecución justa de este contrato, lo que lleva a consecuencias desagradables.

¿Qué se puede decir sobre los contratos inteligentes? Combinan tanto la posibilidad de escribir los términos del contrato como el mecanismo para su estricta implementación. Si se han establecido las condiciones y se ha firmado la transacción o solicitud correspondiente, luego de aceptar esta solicitud o transacción, ya no es posible cambiar las condiciones o afectar su implementación.

Hay un validador o toda la red, así como una base de datos que almacena todos los contratos inteligentes que se ejecutaron en estricto orden cronológico. También es importante que esta base de datos contenga todas las condiciones de activación para ejecutar un contrato inteligente. Además, debe tener en cuenta el valor mismo, cuya distribución se describe en el contrato. Si esto se aplica a alguna moneda digital, entonces esta base de datos debería tenerla en cuenta.

En otras palabras, los validadores de los contratos inteligentes deben tener acceso a todos los datos con los que opera el contrato inteligente. Por ejemplo, una base de datos debe usarse para registrar simultáneamente monedas digitales, saldos de usuarios, transacciones de usuarios y marcas de tiempo. Luego, en un contrato inteligente, la condición puede ser el saldo del usuario en una determinada moneda, el inicio de un determinado momento o el hecho de una determinada transacción, pero no más.

Definición de contrato inteligente


En general, la terminología misma fue inventada por el investigador Nick Szabo y se aplicó por primera vez en 1994, y se documentó en 1997 en un artículo que describe la idea misma de los contratos inteligentes.

Los contratos inteligentes implican que se lleva a cabo una automatización de la distribución del valor, que puede depender solo de las condiciones predefinidas. En su forma más simple, parece un contrato con condiciones estrictamente especificadas, que está firmado por ciertas partes.

Los contratos inteligentes están diseñados para minimizar la confianza de terceros. A veces, el centro de decisión, del que depende todo, está completamente excluido. Además, es más fácil realizar una auditoría para dichos contratos. Esto es consecuencia de algunas características de diseño de dicho sistema, pero a menudo nos referimos a un contrato inteligente como un entorno descentralizado y la presencia de funciones que permiten a cualquiera analizar la base de datos y realizar una auditoría completa de la ejecución de los contratos. Esto garantiza la protección contra cambios retroactivos en los datos que implicarán cambios en la ejecución del contrato en sí. La digitalización de la mayoría de los procesos al crear y lanzar un contrato inteligente a menudo simplifica la tecnología y el costo de su implementación.

Un ejemplo simple: servicio de depósito de garantía


Veamos un ejemplo muy simple. Le ayudará a acercarse a comprender la funcionalidad de los contratos inteligentes, así como a navegar mejor en qué casos deben usarse.

imagen

También se puede implementar usando Bitcoin, aunque ahora todavía es difícil llamar a Bitcoin una plataforma completa para contratos inteligentes. Entonces, tenemos un comprador y hay una tienda en línea. El comprador quiere comprar un monitor en esta tienda. En el caso más simple, el comprador prepara y envía el pago, y la tienda en línea lo acepta, confirma y luego envía los productos. Sin embargo, en esta situación es necesaria una gran confianza: el comprador debe confiar en la tienda en línea por el costo total del monitor. Dado que la tienda en línea puede tener una baja reputación a los ojos del comprador, existe el riesgo de que, por alguna razón, después de aceptar el pago, la tienda se niegue a prestar servicio y no enviará los productos al comprador. Por lo tanto, el comprador hace una pregunta (respectivamente, y la tienda en línea hace esta pregunta) qué se puede aplicar en este caso para minimizar tales riesgos y hacer que dichas transacciones sean más confiables.

En el caso de Bitcoin, puede proporcionar al comprador y al vendedor la oportunidad de elegir un mediador de forma independiente. Hay muchas personas que se ocupan de temas polémicos. Y nuestros participantes pueden elegir de la lista general de mediadores en los que se confiará al mismo tiempo. Juntos crean una dirección de firma múltiple 2 de 3, donde hay tres claves y dos claves requieren dos firmas para gastar monedas de esta dirección. Una clave pertenecerá al comprador, la segunda a la tienda en línea y la tercera al mediador. Y el comprador enviará la cantidad necesaria para pagar el monitor a una dirección de múltiples firmas. Ahora, cuando el vendedor ve que el dinero está bloqueado por un tiempo en la dirección de múltiples firmas, que depende de él, puede enviar el monitor de manera segura por correo.

Además, el comprador recibe el paquete, inspecciona los productos y toma una decisión sobre la compra final. Puede estar completamente de acuerdo con el servicio prestado y firmar la transacción con su clave, donde transfiere monedas desde la dirección de múltiples firmas al vendedor, o puede estar insatisfecho con algo. En el segundo caso, se pone en contacto con el mediador para componer una transacción alternativa, que distribuirá estas monedas de manera diferente.

Supongamos que el monitor llegara un poco rayado y no hubiera un cable para conectarse a una computadora en el kit, aunque estaba escrito en el sitio web de la tienda en línea que el cable debería incluirse en el kit. Luego, el comprador recopila la evidencia necesaria para demostrarle al mediador que fue engañado en esta situación: toma capturas de pantalla del sitio, toma una foto del cheque del correo, toma una foto de los rasguños en el monitor y muestra que el sello se rompió y se sacó el cable. La tienda en línea, a su vez, recopila su evidencia y se la pasa al mediador.

El mediador está interesado en satisfacer tanto la indignación del comprador como los intereses de la tienda en línea (se entenderá más por qué). Realiza una transacción de este tipo en la que las monedas con direcciones de múltiples firmas se gastarán en alguna proporción entre el comprador, la tienda en línea y la selección, ya que toma una parte para sí mismo como recompensa por su trabajo. Suponga que el 90% del monto total va al vendedor, el 5% al ​​mediador y el 5% de compensación al comprador. El mediador firma esta transacción con su clave, pero aún no puede aplicarse, ya que esto requiere dos firmas, pero solo una. Envía tal transacción tanto al comprador como al vendedor. Si al menos uno de ellos está satisfecho con esta opción de redistribuir monedas, la transacción se firmará adicionalmente y se distribuirá a la red. Para su validación, es suficiente que uno de los participantes en la transacción esté de acuerdo con la opción del mediador.

En este caso, es importante elegir inicialmente un mediador para que ambos participantes confíen en él. En este caso, actuará independientemente de los intereses de uno u otro y evaluará objetivamente la situación. Si el mediador no proporciona una opción para la distribución de monedas que satisfaga al menos a un participante, entonces, habiendo acordado juntos, tanto el comprador como la tienda en línea pueden enviar las monedas a una nueva dirección de múltiples firmas, colocando sus dos firmas. La nueva dirección de múltiples firmas se compilará con otra selección, que, tal vez, será más competente en el asunto y proporcionará una mejor opción.

Ejemplo de dormitorio y nevera


Veamos un ejemplo más complejo que muestra las capacidades de un contrato inteligente de manera más explícita.

imagen

Digamos que hay tres tipos que se han instalado recientemente en un dormitorio. Los tres están interesados ​​en comprar un refrigerador en su habitación, que compartirán. Uno de ellos se ofreció a recolectar la cantidad necesaria para comprar un refrigerador y negociar con el vendedor. Sin embargo, se conocieron relativamente recientemente y no hay suficiente confianza entre ellos. Obviamente, dos de ellos están en riesgo, dando dinero a un tercero. Además, deben llegar a un acuerdo sobre la elección del vendedor.

Pueden usar el servicio de custodia, es decir, elegir un mediador que supervisará la ejecución de la transacción y resolverá los problemas en disputa si surgen. Luego, habiendo acordado, elaboran un contrato inteligente y prescriben ciertas condiciones en él.

La primera condición es que antes de un cierto tiempo, por ejemplo, dentro de una semana, se deben recibir tres pagos de ciertas direcciones por un cierto monto en la cuenta correspondiente del contrato inteligente. Si esto no sucede, el contrato inteligente termina y devuelve las monedas a todos los participantes. Si se cumple la condición, se establecen los valores de los identificadores del vendedor y el mediador, y se verifica la condición de que todos los participantes estén de acuerdo con la elección del vendedor y el mediador. Cuando se cumplan todas las condiciones, los fondos se transferirán a las direcciones especificadas. Tal enfoque puede proteger a los participantes del fraude en cualquier lado y generalmente elimina la necesidad de confiar.

Vemos en este ejemplo el principio en sí mismo de que tal oportunidad de establecer parámetros paso a paso para que se cumpla cada condición permite crear sistemas de cualquier complejidad y profundidad de niveles anidados. Además, primero puede definir la primera condición en un contrato inteligente, y solo después de su finalización ya puede establecer parámetros para la siguiente condición. En otras palabras, formalmente, se prescribe la condición, y los parámetros para ella ya se pueden establecer durante su funcionamiento.

Clasificación de contratos inteligentes


Para la clasificación, puede especificar diferentes grupos de criterios. Sin embargo, en el momento del desarrollo tecnológico, cuatro de ellos son relevantes.

Los contratos inteligentes pueden distinguirse por un entorno de tiempo de ejecución que puede ser centralizado o descentralizado. En el caso de la descentralización, tenemos mucha más independencia y tolerancia a fallas al ejecutar contratos inteligentes.

También pueden distinguirse por el proceso de establecimiento y cumplimiento de condiciones: pueden ser arbitrariamente programables, limitados o predefinidos, es decir, estrictamente tipados. Cuando en la plataforma de contrato inteligente solo hay 4 contratos inteligentes específicos, los parámetros para ellos se pueden establecer arbitrariamente. En consecuencia, configurarlos es mucho más fácil: seleccionamos un contrato de la lista y pasamos los parámetros.

Por el método de iniciación, existen contratos inteligentes automatizados, es decir, cuando se cumplen ciertas condiciones, se cumplen por sí mismos, y existen dichos contratos en los que se especifican las condiciones, pero la plataforma no verifica automáticamente su cumplimiento, por lo que deben iniciarse por separado.

Además, los contratos inteligentes varían en términos de privacidad. Pueden ser completamente abiertos, o parcialmente, o completamente confidenciales. Esto último significa que los observadores externos no ven los términos de los contratos inteligentes. Sin embargo, el tema de la privacidad es muy extenso y debe considerarse por separado del artículo actual.

A continuación nos detendremos en los primeros tres criterios para aclarar la comprensión del tema actual.

Contratos inteligentes de tiempo de ejecución


imagen

El tiempo de ejecución distingue entre plataformas de contratos inteligentes centralizadas y descentralizadas. En el caso de los contratos digitales centralizados, se utiliza un servicio, donde solo hay un validador y puede haber un servicio de respaldo y recuperación, que también se administra de manera centralizada. Hay una base de datos que almacena toda la información necesaria para establecer los términos del contrato inteligente y la distribución del valor que se tiene en cuenta en esta misma base de datos del servicio. Dicho servicio centralizado tiene un cliente que establece condiciones con ciertas solicitudes y utiliza dichos contratos. Debido al hecho de que la plataforma está centralizada, los mecanismos de autenticación pueden ser menos confiables que en las criptomonedas.

Como ejemplo, puede tomar proveedores móviles (diferentes operadores móviles). Supongamos que un determinado operador mantiene una cuenta centralizada del tráfico en sus servidores, que puede transmitirse en diferentes formatos, por ejemplo: en forma de llamadas de voz, SMS, tráfico de Internet móvil y de acuerdo con diferentes estándares, y también realiza un seguimiento de los fondos en los saldos de los usuarios. En consecuencia, un proveedor de servicios móviles puede elaborar contratos para contabilizar los servicios prestados y su pago con diferentes condiciones. En este caso, las condiciones como "enviar un SMS con tal o cual código a tal y tal número y obtendrá tales y tales condiciones de distribución de tráfico" se establecen fácilmente.

Se puede citar un ejemplo más: bancos tradicionales con funcionalidad avanzada de banca por Internet y contratos muy simples como pagos regulares, conversión automática de pagos entrantes, deducción automática de intereses en una cuenta específica, etc.

Si hablamos de contratos inteligentes con un tiempo de ejecución descentralizado, entonces tenemos un grupo de validadores. En el caso ideal, cualquiera puede convertirse en un validador. Debido al protocolo de sincronización de la base de datos y la creación de consenso, tenemos una base de datos común, que ahora almacenará todas las transacciones con contratos estrictamente descritos, y no algunas solicitudes condicionales, cuyos formatos a menudo cambian, pero no hay una especificación abierta. Aquí, las transacciones contendrán instrucciones sobre cómo ejecutar un contrato de acuerdo con especificaciones estrictas. Esta especificación es abierta y, por lo tanto, los propios usuarios de la plataforma pueden auditar y validar contratos inteligentes. Aquí vemos que las plataformas descentralizadas son superiores a las centralizadas en independencia y tolerancia a fallas, pero su diseño y mantenimiento son mucho más complicados.

Contratos inteligentes en el camino para establecer y cumplir condiciones


Ahora analizaremos con más detalle cómo los contratos inteligentes pueden diferir en la forma en que se definen y se cumplen. Aquí prestamos atención a los contratos inteligentes, que se programan arbitrariamente y se completan con Turing. Un contrato inteligente completo de Turing le permite especificar casi cualquier algoritmo como condición para cumplir el contrato: ciclos de registro, algún tipo de funciones de cálculo de probabilidad y similares, hasta sus propios algoritmos de firma electrónica. En este caso, nos referimos a la ortografía realmente arbitraria de la lógica.

También señalan contratos inteligentes arbitrarios, pero no completos según Turing. Estos incluyen Bitcoin y Litecoin con su propio script. Esto significa que es posible usar solo ciertas operaciones en un orden arbitrario, pero ya no es posible escribir bucles y algoritmos personalizados.

Además, existen plataformas de contratos inteligentes que implementan contratos inteligentes predefinidos. Estos incluyen Bitshares y Steemit. Bitshares tiene una serie de contratos inteligentes para operar, administrar cuentas, administrar la plataforma y sus parámetros. Steemit es una plataforma similar, pero ya no se centra en emitir tokens y comerciar como Bitshares, sino en bloguear, es decir, almacena y procesa contenido de forma descentralizada.

Los contratos arbitrarios de Turing-complete incluyen las plataformas Ethereum y RootStock, que aún están en desarrollo. Por lo tanto, profundizaremos en más detalles sobre la plataforma de contrato inteligente Ethereum.

Contratos inteligentes por método de iniciación


Por el método de iniciación, los contratos inteligentes también se pueden dividir en al menos dos grupos: automatizados y manuales (no automatizados).Es típico para los automatizados que con todos los parámetros conocidos y el inicio de las condiciones, el contrato inteligente se ejecute completamente automáticamente, es decir, no requiere el envío de transacciones adicionales y el gasto de una comisión adicional para cada ejecución posterior. La plataforma en sí tiene todos los datos para calcular cómo finalizará el contrato inteligente. La lógica allí no es arbitraria, sino predeterminada, y todo esto es predecible. Es decir, de antemano puede evaluar la complejidad del contrato inteligente, utilizar algún tipo de comisión constante para él y todos los procesos para su implementación son más eficientes.

Para los contratos inteligentes que se programan arbitrariamente, la ejecución no está automatizada. Para iniciar un contrato inteligente de este tipo, prácticamente en cada paso debe crear una nueva transacción que llame a la siguiente etapa de ejecución o al siguiente método del contrato inteligente, pague la comisión correspondiente y espere a que se confirme la transacción. La ejecución se puede completar con éxito o no, porque el código del contrato inteligente es arbitrario y pueden aparecer algunos momentos impredecibles, como un ciclo eterno, la falta de algunos parámetros y argumentos, momentos excepcionales no procesados, etc.

Cuentas Ethereum


Tipos de cuentas de Ethereum


Consideremos qué cuentas en la plataforma Ethereum pueden ser. Aquí solo hay dos tipos de cuentas y no hay más opciones. El primer tipo se llama cuenta de usuario, el segundo es la cuenta de contrato. Veamos en qué se diferencian.

La cuenta de usuario solo es administrada por la clave privada de la firma electrónica. El propietario de la cuenta genera su par de claves para la firma electrónica mediante el algoritmo ECDSA (Algoritmo de firma digital de curva elíptica). Solo las transacciones firmadas por esta clave pueden cambiar el estado de esta cuenta.

Hay una lógica separada para la cuenta de contrato inteligente. Se puede controlar solo con la ayuda de un código de programa predeterminado que determina completamente el comportamiento del contrato inteligente: cómo administrará sus monedas en ciertas circunstancias, por iniciativa de qué usuario y en qué condiciones adicionales se distribuirán estas monedas. Si los desarrolladores no proporcionan algunos puntos en el código del programa, pueden surgir problemas. Por ejemplo, un contrato inteligente puede recibir un estado específico en el que no acepta el inicio de una ejecución posterior por parte de ninguno de los usuarios. En este caso, las monedas se congelarán realmente, porque el contrato inteligente no proporciona una salida de este estado.

Cómo crear cuentas en Ethereum


En el caso de una cuenta de usuario, el propietario genera independientemente un par de claves a través de ECDSA. Es importante tener en cuenta que Ethereum usa exactamente el mismo algoritmo y exactamente la misma curva elíptica que Bitcoin para la firma electrónica, pero la dirección se calcula de una manera ligeramente diferente. Aquí, el resultado del doble hashing ya no se aplica, como en Bitcoin, pero se proporciona un hashing único por la función Keccak en una longitud de 256 bits. Los bits menos significativos se cortan del valor recibido, es decir, los 160 bits menos significativos del valor de salida de la función hash. Como resultado, obtenemos la dirección en Ethereum. De hecho, toma 20 bytes.

Tenga en cuenta que el identificador de cuenta en Ethereum está codificado en hexadecimal sin usar una suma de verificación, a diferencia de Bitcoin y muchos otros sistemas donde la dirección está codificada en el sistema de números base 58 con la suma de una suma de verificación. Esto significa que debe trabajar con los identificadores de cuenta en Ethereum con cuidado: incluso un error en el identificador garantiza la pérdida de monedas.

Hay una característica importante y consiste en el hecho de que se crea una cuenta de usuario en el nivel general de la base de datos en el momento en que acepta el primer pago entrante.

Hay un enfoque completamente diferente para crear una cuenta de contrato inteligente. Inicialmente, uno de los usuarios escribe el código fuente del contrato inteligente, después de lo cual el código se pasa a través de un compilador especial para la plataforma Ethereum, recibiendo el código de bytes para la máquina virtual Ethereum. El bytecode recibido se coloca en un campo de transacción especial. Se autentica en nombre de la cuenta del iniciador. Además, esta transacción se distribuye a través de la red y aloja el código de contrato inteligente. La comisión por la transacción y, en consecuencia, por la ejecución del contrato se elimina del saldo de la cuenta del iniciador.

Cada contrato inteligente necesariamente contiene su propio constructor (de este contrato). Puede estar vacío o puede tener contenido. Después de que se ejecuta el constructor, se crea un identificador de cuenta de contrato inteligente, mediante el cual puede enviar monedas, llamar a ciertos métodos del contrato inteligente, etc.

Estructura de transacción de Ethereum


Para aclararlo, comenzaremos a revisar la estructura de la transacción Ethereum y el código de contrato inteligente de muestra.

imagen

Una transacción de Ethereum consta de varios campos. El primero de estos nonce es un cierto número de transacción relativo a la cuenta en sí, que lo distribuye y es su autor. Esto es necesario para distinguir los dobles de las transacciones, es decir, para excluir el caso cuando la misma transacción se acepta dos veces. Mediante el uso de un identificador, cada transacción tiene un valor hash único.

Esto es seguido por un campo como el precio del gas . Este es el precio al que la moneda base de Ethereum se convierte en gas, que paga la ejecución del contrato inteligente y la asignación del recurso de máquina virtual. ¿Qué significa esto?

En Bitcoin, las comisiones se pagan directamente por la moneda base, el propio Bitcoin. Esto es posible gracias a un mecanismo simple para calcularlos: pagamos estrictamente la cantidad de datos que contiene la transacción. En Ethereum, la situación es más complicada, porque es muy difícil comenzar desde la cantidad de datos de transacción. Aquí, la transacción aún puede contener código de programa que se ejecutará en la máquina virtual, y cada operación de la máquina virtual puede tener una complejidad diferente. También hay operaciones que asignan memoria para variables. Tendrán su propia complejidad, de la que dependerá el pago de cada operación.

El costo de cada operación en gas equivalente será constante. Se introduce específicamente para determinar el costo constante de cada operación. Dependiendo de la carga en la red, el precio del gas cambiará, es decir, el coeficiente según el cual la moneda base se convertirá en esta unidad auxiliar para pagar la comisión.

Hay otra característica de la transacción en Ethereum: el código de bytes que contiene para la ejecución en la máquina virtual se ejecutará hasta que termine con algún resultado (éxito-fracaso) o hasta que se asigne un cierto número de monedas para pagar una comisión Es para evitar la situación cuando, en caso de algún error, todas las monedas se gastaron en comisión de la cuenta del remitente (por ejemplo, se lanzó algún tipo de ciclo perpetuo en la máquina virtual), existe el siguiente campo: gas de inicio (a menudo se llama límite de gas): define La cantidad máxima de monedas que el remitente está dispuesto a gastar en una transacción específica.

El siguiente campo se llama dirección de destino.. Esto incluye la dirección del destinatario de las monedas o la dirección de un contrato inteligente específico, cuyos métodos se llamarán. Después de que sigue el campo de valor , donde se ingresa la cantidad de monedas que se envían a la dirección de destino.

El siguiente es un campo interesante llamado datos , que se ajusta a toda la estructura. Este no es un campo separado, sino toda la estructura en la que se define el código para la máquina virtual. Puede poner datos arbitrarios aquí; hay reglas separadas para esto.

Y el último campo se llama firma. Contiene simultáneamente la firma electrónica del autor de esta transacción y la clave pública con la que se verificará esta firma. A partir de la clave pública, puede obtener el identificador de la cuenta del remitente para esta transacción, es decir, identificar de forma exclusiva la cuenta del remitente en el propio sistema. Según la estructura de la transacción, descubrimos lo principal.

Ejemplo de código de contrato inteligente para solidez


Echemos un vistazo más de cerca al contrato inteligente más simple usando un ejemplo.

contract Bank { address owner; mapping(address => uint) balances; function Bank() { owner = msg.sender; } function deposit() public payable { balances[msg.sender] += msg.value; } function withdraw(uint amount) public { if (balances[msg.sender] >= amount) { balances[msg.sender] -= amount; msg.sender.transfer(amount); } } function getMyBalance() public view returns(uint) { return balances[msg.sender]; } function kill() public { if (msg.sender == owner) selfdestruct(owner); } } 

Arriba hay un código fuente simplificado que puede contener monedas de usuario y devolverlas a pedido.

Por lo tanto, existe un contrato inteligente del Banco que realiza las siguientes funciones: acumula monedas en su saldo, es decir, cuando se confirma una transacción y se coloca un contrato inteligente de este tipo, se crea una nueva cuenta que puede contener monedas en su saldo; recuerda a los usuarios y la distribución de monedas entre ellos; Tiene varios métodos para administrar saldos, es decir, es posible reponer, retirar y verificar el saldo del usuario.

Veamos cada línea de código fuente. Hay campos constantes en este contrato. Uno de ellos, con el tipo de dirección, se llama propietario. Aquí, el contrato recuerda la dirección del usuario que creó este contrato inteligente. Además, existe una estructura dinámica que preserva la correspondencia entre las direcciones de usuario y los saldos.

Después de que esto sigue el método del Banco, se llama igual que el contrato. En consecuencia, este es su constructor. Aquí, a la variable de propietario se le asigna la dirección de la persona que publicó este contrato inteligente en la red. Esto es lo único que sucede en este constructor. Es decir, msg en este caso son exactamente los datos que se transfirieron a la máquina virtual junto con la transacción que contiene todo el código para este contrato. En consecuencia, msg.sender es el autor de esta transacción, que aloja este código. Él será el propietario del contrato inteligente.

El método de depósito permite que una transacción transfiera un cierto número de monedas a una cuenta de contrato. En este caso, el contrato inteligente, al recibir estas monedas, las deja en su balance general, pero escribe a la estructura de saldos quién fue exactamente el remitente de estas monedas para saber a quién pertenecen.

El siguiente método se llama retirar y toma un parámetro: la cantidad de monedas que alguien quiere retirar de este banco. Aquí hay una comprobación para ver si hay suficientes monedas en el saldo del usuario que llama a este método para enviarlas. Si hay suficientes, el contrato inteligente en sí devuelve esta cantidad de monedas a la persona que llama.

El siguiente es el método para verificar el saldo actual del usuario. Quien llame a este método se utilizará para obtener este equilibrio en el contrato inteligente. Vale la pena señalar que el modificador de este método es view. Esto significa que el método en sí no cambia las variables de su clase de ninguna manera y de hecho es solo un método de lectura. No se crea una transacción separada para llamar a este método, no se paga comisión y todos los cálculos se realizan localmente, después de lo cual el usuario recibe el resultado.

El método de matar es necesario para destruir el estado de un contrato inteligente. Y aquí se escribe un chequeo adicional si la persona que llama de este método es el propietario de este contrato. Si es así, entonces el contrato se autodestruye, y la función de destrucción acepta un parámetro: el identificador de cuenta, al cual el contrato enviará todas las monedas restantes en su saldo. En este caso, las monedas restantes irán automáticamente a la dirección del titular del contrato.

¿Cómo funciona un nodo de red Ethereum completo?


Echemos un vistazo esquemático a cómo se ejecutan estos contratos inteligentes en la plataforma Ethereum y cómo funciona un nodo de red completo.

imagen

Un nodo de red Ethereum completo debe tener al menos cuatro módulos.
El primero, como para cualquier protocolo descentralizado, es el módulo de red P2P, un módulo para conexión de red y trabajo con otros nodos, donde se intercambian bloques, transacciones e información sobre otros nodos. Este es un componente tradicional para todas las criptomonedas descentralizadas.

Además, tenemos un módulo para almacenar datos de blockchain, procesar, seleccionar una rama prioritaria, complementar bloques, desacoplar bloques, verificar estos bloques, etc.

El tercer módulo se llama EVM (máquina virtual Ethereum): esta es la máquina virtual que acepta el código de bytes de la transacción Ethereum. Este módulo toma el estado actual de una cuenta específica y realiza cambios en su estado en función del código de bytes recibido. La versión de la máquina virtual en cada uno de los nodos de la red debe ser la misma. Los cálculos en cada uno de los nodos de Ethereum son exactamente los mismos, pero ocurren en un orden asincrónico: alguien verifica y acepta esta transacción antes, es decir, ejecuta todo el código contenido en ella, y alguien más tarde. En consecuencia, al crear una transacción, se distribuye a la red, los nodos la aceptan y, en el momento de la verificación, al igual que Bitcoin Script se ejecuta en Bitcoin, el código de bytes de la máquina virtual se ejecuta aquí.

Una transacción se considera verificada si se ejecutó todo el código que contiene, se generó un nuevo estado para una cuenta específica y se guardó hasta que quedó claro si esta transacción se aplicó o no. Si se aplica la transacción, este estado se considera no solo completado, sino que ya es relevante. Hay una base de datos que almacena el estado de cada cuenta para cada host. Debido al hecho de que todos los cálculos se realizan de la misma manera y el estado de la cadena de bloques es el mismo, la base de datos que contiene el estado de todas las cuentas también será la misma para cada nodo.

Mitos y limitaciones de los contratos inteligentes.


En cuanto a las restricciones que existen para las plataformas de contratos inteligentes similares a Ethereum, se puede citar lo siguiente:

  • ejecución de código;
  • asignar memoria;
  • datos de blockchain;
  • enviar pagos;
  • crear un nuevo contrato;
  • Llamar a otros contratos.

Veamos las restricciones que se imponen a una máquina virtual y, en consecuencia, disipamos algunos mitos sobre los contratos inteligentes. En una máquina virtual, que puede estar no solo en Ethereum, sino también en plataformas similares, puede realizar operaciones lógicas verdaderamente arbitrarias, es decir, escribir código y se ejecutará allí, además puede asignar memoria. Sin embargo, la comisión se paga por separado para cada operación y para cada unidad de memoria asignada adicionalmente.

Además, la máquina virtual puede leer datos de la base de datos de blockchain para usar estos datos como desencadenante para ejecutar una u otra lógica de contratos inteligentes. Una máquina virtual puede crear y enviar transacciones, puede crear nuevos contratos y métodos de llamada de otros contratos inteligentes que ya están publicados en la red: existen, están disponibles, etc.

El mito más común es que los contratos inteligentes de Ethereum pueden usar información de cualquier recurso de Internet en sus propias condiciones. La verdad es que la máquina virtual no puede enviar una solicitud de red a algún recurso de información externo en Internet, es decir, es imposible escribir un contrato tan inteligente que distribuya el valor entre los usuarios dependiendo del clima en la calle, o quién ganó en algún campeonato, o en función de qué otro incidente sucedió en el mundo exterior, porque la información sobre estos incidentes simplemente no se encuentra en la base de datos de la plataforma en sí. Es decir, no hay nada en la cadena de bloques sobre esto. Si no aparece allí, la máquina virtual no puede usar estos datos como desencadenantes.

Desventajas de Ethereum


Hagamos una lista de los principales. El primer inconveniente es que existen algunas dificultades para diseñar, desarrollar y probar contratos inteligentes en Ethereum (Ethereum usa el lenguaje Solidity para escribir contratos inteligentes). De hecho, la práctica muestra que un porcentaje muy grande de todos los errores pertenece al factor humano. Esto es realmente cierto para los contratos inteligentes Ethereum ya escritos, que tienen una complejidad de medio o superior. Si para los contratos inteligentes simples la probabilidad de error es pequeña, entonces en los contratos inteligentes complejos ocurren muy a menudo errores que conducen al robo de fondos, a su congelación, a la destrucción de contratos inteligentes de una manera inesperada, etc. Muchos de estos casos ya se conocen.

El segundo inconveniente es que la máquina virtual en sí misma no es perfecta, ya que también está escrita por personas. Puede ejecutar comandos arbitrarios y esto es una vulnerabilidad: se pueden configurar varios comandos de una manera determinada, lo que conducirá a consecuencias imprevistas. Esta es un área muy compleja, pero ya hay varios estudios que muestran que estas vulnerabilidades existen en la versión actual de la red Ethereum y pueden conducir al fracaso de muchos contratos inteligentes.

Otra gran dificultad, puede considerarse un inconveniente. Consiste en el hecho de que es posible, de manera práctica o técnica, llegar a la conclusión de que si compila el código de bytes del contrato que se ejecutará en la máquina virtual, puede determinar un orden específico de operaciones. Cuando se realizan juntas, estas operaciones cargarán en gran medida la máquina virtual y la ralentizarán desproporcionadamente a la comisión que se pagó por estas operaciones.

En el pasado, ya había un período de desarrollo de Ethereum, cuando muchos tipos que entendieron en detalle el funcionamiento de la máquina virtual encontraron tales vulnerabilidades. De hecho, las transacciones pagaron una comisión muy pequeña, pero prácticamente ralentizaron toda la red. Estos problemas son muy difíciles de resolver, porque necesita determinarlos, en segundo lugar, ajustar el precio para realizar estas operaciones y, en tercer lugar, realizar una bifurcación dura, lo que significa actualizar todos los nodos de red a una nueva versión del software, y luego activación simultánea de estos cambios.

En cuanto a Ethereum, se ha llevado a cabo una gran cantidad de investigación, se ha adquirido mucha experiencia práctica: tanto positiva como negativa, pero, sin embargo, aún quedan dificultades y vulnerabilidades que aún deben ser combatidas de alguna manera.

Entonces, cuando se completa la parte temática del artículo, pasamos a las preguntas que surgen con bastante frecuencia.

Preguntas frecuentes


- Si todas las partes del contrato inteligente actual desean cambiar los términos, ¿pueden cancelar este contrato inteligente mediante la firma múltiple y luego crear un nuevo contrato inteligente con condiciones actualizadas para su implementación?

Aquí la respuesta será doble. Por qué Porque, por un lado, un contrato inteligente se establece una vez y no implica ningún cambio, y por otro lado, puede tener una lógica predefinida que proporcione un cambio completo o parcial en algunas condiciones. Es decir, si desea cambiar algo en su contrato inteligente, debe prescribir las condiciones bajo las cuales puede actualizar estas condiciones. Por consiguiente, solo de manera tan prudente se puede organizar la renovación del contrato. Pero aquí, también, puede tener problemas: cometer algún tipo de error y obtener la vulnerabilidad correspondiente. Por lo tanto, tales cosas deben ser muy detalladas y completamente diseñadas y probadas.

- ¿Y si el mediador entra en una conspiración con una de las partes involucradas: fideicomiso o un contrato inteligente? ¿Se requiere un mediador en un contrato inteligente?

No se requiere un mediador en un contrato inteligente. Puede que no sea. Si en el caso de un depósito en garantía el mediador entra en una conspiración de una de las partes, entonces sí, este esquema pierde bruscamente todo su valor. Por lo tanto, los mediadores se eligen de tal manera que todas las partes involucradas en este proceso confíen en ellos al mismo tiempo. En consecuencia, simplemente no transferirá monedas a una dirección de múltiples firmas con el mediador en el que no confía.

- ¿Es posible transferir muchos tokens diferentes de una dirección a diferentes direcciones de destino, por ejemplo, intercambiar direcciones, donde estos tokens se intercambian en una transacción de Ethereum?

Esta es una buena pregunta y se refiere al modelo de transacción de Ethereum y sus diferencias con el modelo de Bitcoin. Y la diferencia es dramática. Si en el modelo de transacción de Ethereum simplemente transfiere monedas, entonces se transfieren solo de una dirección a otra, sin cambios, solo la cantidad específica que especificó. En otras palabras, este no es un modelo de salidas no gastadas (UTXO), sino un modelo de cuentas y saldos correspondientes. Es teóricamente posible enviar varios tokens diferentes a la vez con una transacción, si escribe un contrato inteligente complicado, pero aún tiene que hacer muchas transacciones, crear un contrato, luego transferir tokens y monedas, y luego llamar al método apropiado. Esto requiere esfuerzo y tiempo, respectivamente, en la práctica no funciona así y todos los pagos en Ethereum se realizan en transacciones separadas.

- Uno de los mitos sobre la plataforma Ethereum es que es imposible describir las condiciones que dependerán de los datos de un recurso externo de Internet, ¿entonces qué?

La solución es que el contrato inteligente en sí mismo puede incluir uno o más de los llamados oráculos de confianza que recopilan datos sobre el estado de las cosas en el mundo exterior y los transfieren a contratos inteligentes a través de métodos especiales. El contrato en sí considera que los datos que recibió de partes confiables son verdaderos. Para una mayor confiabilidad, simplemente seleccionan un gran grupo de oráculos y minimizan el riesgo de colusión. El contrato en sí mismo puede no tener en cuenta los datos de oráculos que contradicen a la mayoría.

Este tema se trata en una de las conferencias del curso en línea Blockchain: " Introducción a los contratos inteligentes ".

Source: https://habr.com/ru/post/es413231/


All Articles