Contrato inteligente

De Bitcoin Wiki
Saltar a: navegación, buscar

Contrato inteligente (ingl. Smart-contract) es un algoritmo electrónico elaborado para automatizar el proceso de ejecución de contratos en blockchain. La idea básica de los contratos inteligentes - eliminar la divergencia de interpretaciones de las condiciones por los partes que acordaron un tratado.


La historia de creación[editar]

El autor de la idea de un contrato inteligente es Nick Szabo, quien en sus obras de 1996-1997 propuso el uso de algoritmos de computadora con una interfaz de usuario para la realización de transacciones en el comercio electrónico. Según el autor, una descripción de las condiciones de los contratos debe llevarse a cabo con la ayuda de herramientas matemáticas y lenguajes de programación. En la práctica, la idea de un contrato inteligente fue realizada por primera vez por Vitalik Buterin en su proyecto de Ethereum (2013).

Principios básicos de funcionamiento[editar]

La realización de ideas de Szabo se hizo posible con la apariencia de la tecnología de Blockchain que asegura la fiabilidad y protección del contrato inteligente en virtud de su propiedades:

El tipo de sistema es descentralizado. Ninguna de las partes en el contrato no puede cambiar el texto del documento porque una copia del contrato se almacena en el registro, distribuido entre muchos nodos de la red. La base de datos abierta. Los términos del contrato están disponibles para todos los participantes de Blockchain que simplifica la auditoría de los contratos. Formalización de las condiciones del contrato. La inspección y ejecución de los términos del contrato se realiza por el código de software (si-esto-entonces-esto (IFTTT)), por lo que se descarta la posibilidad de ejecución incorrecta del contrato. Operaciones atómicas. Contrato será implementado con éxito o no será ejecutado. Turing-completo. Blockchain presentado en Ethereum tiene un lenguaje de programación integrado de Turing-completo, por lo que los usuarios mismos pueden crear cualquier tipo de contratos.

La ejecución del contrato inteligentes[editar]

Los contratos inteligentes en el código de Ethereum son ejecutados en un entorno particular - máquina virtual de Ethereum (EVM). Cada nodo de la red lleva a cabo la verificación del nuevo bloque, pasando a través de las transacciones que están incluidos en este bloque, y realiza el código EVM iniciado por estas transacciones.

Cada nodo de red realiza el mismo cálculo, almacena los mismos valores. Los bloques son creados por los mineros por las recompensas: el coste de la operación se mide en unidades de Ethereum.

La seguridad y la vulnerabilidades[editar]

Contratos inteligentes de Etereum son vulnerables a ataques de piratas informáticos, por varias razones.

1. Errores de uso del lenguaje Solidity

  • Semántica del lenguaje Solidity. Los contratos están escritos en la programación Solidity, que parece a Java, y es un conjunto de funciones. Sin embargo bytecode máquina virtual de Ethereum no es compatible con las funciones, por lo que antes de enviar los contratos a Blockchainn se compilan. Un error en el código de barras del contrato puede dar lugar a la aplicación de la función de “fallback”.
  • La orden incorrecta de las excepciones. Para implementar contrato inteligente lo puede ser necesario interrumpir el trabajo de su método - la excepción. Si se produce una excepción durante la ejecución del comando de “call”, la ejecución del contrato continuará hasta el final del gas.
  • Reentrada. Las mismas instrucciones de programa se pueden introducir varias veces, por ejemplo, a través de una función de “fallback”, lo que lleva a un ciclo en la llamada del método de “call” y los gastos de todo el gas. El ataque a la DAO se ha construido sobre la base de este principio.

2. Errores de la máquina virtual de Ethereum.

  • El contrato, que fue publicado el Blockchain no se puede cambiar. Si el contrato contiene un error, no se puede arreglar, sólo se puede detener la ejecución del contrato. Un buen ejemplo sería la eliminación de las consecuencias del ataque DAO.
  • Pérdidas de Ethereum en traducciónes. Para enviar un Ethereum, debe especificar la dirección del anfitrión, que es una secuencia de 160 bits. Si la dirección no está ligado a un usuario o un contrato, entonces el Ethereum se perderá para siempre.

3. Los errores en Blockchain.

  • El estado de contrato. Parte de transacciones del contrato inteligente, que se mete en un circuito derivado de una palabra, no se realizará. En consecuencia, por un tiempo el estado del contrato no estará definido claramente. Una de las partes del contrato puede suponer que el contrato fue ejecutado, aunque no fue así.
  • Restricciones temporales. Para determinar el estado del contrato lleva tiempo (véase el párrafo anterior), lo que lo hace vulnerable a los ataques.

Fraúdes grandes[editar]

Una gran ataque a DAO se llevó a cabo en julio de 2016, como resultado de lo cual el atacante fue capaz de transferir el saldo del contrato que ha creado más de $ 64 millones. Ataque utilizó la propiedad de rentabilidad: en una sola transacción el atacante tiró los fondos de DAO y los transfirió en su filial DAO, repitiendo la operación varias veces.

Véase también[editar]

Block chain

DAO

Ethereum