El libro «Creación de contratos inteligentes en Solidity para la cadena de bloques Ethereum. Guía práctica»

El libro «Creación de contratos inteligentes en Solidity para la cadena de bloques Ethereum. Guía práctica»
Durante más de un año he trabajado en el libro 'Creación de contratos inteligentes Solidity para la blockchain de Ethereum. Guía práctica', y ahora este trabajo está completado, y el libro ha sido publicado y está disponible en Litres.

Espero que mi libro ayude a comenzar rápidamente con la creación de contratos inteligentes Solidity y aplicaciones distribuidas DApp para la blockchain de Ethereum. Consiste en 12 lecciones con tareas prácticas. Al completarlas, el lector podrá crear sus propios nodos locales de Ethereum, publicar contratos inteligentes y llamar a sus métodos, intercambiar datos entre el mundo real y los contratos inteligentes a través de oráculos, y trabajar con la red de prueba Rinkeby.

El libro está dirigido a todos aquellos interesados en las tecnologías avanzadas en el ámbito de las blockchains y que deseen adquirir conocimientos rápidamente para realizar un trabajo interesante y prometedor.

A continuación, encontrará el índice y el primer capítulo del libro (también en Litres hay fragmentos del libro disponibles). Espero recibir comentarios, observaciones y sugerencias. Todo esto trataré de tenerlo en cuenta para la preparación de la próxima edición del libro.

Tabla de contenidoIntroducciónNuestro libro está destinado a quienes desean no solo comprender los principios de funcionamiento de la blockchain de Ethereum, sino también adquirir habilidades prácticas en la creación de aplicaciones distribuidas DApp en el lenguaje de programación Solidity para esta red.

Este libro es mejor no solo leerlo, sino trabajar con él, realizando las tareas prácticas descritas en las lecciones. Para trabajar, necesitará un ordenador local, un servidor virtual o en la nube con un sistema operativo Debian o Ubuntu instalado. También para realizar muchas tareas se puede utilizar Raspberry Pi.

En la primera lección consideraremos los principios de funcionamiento de la blockchain de Ethereum y la terminología básica, así como hablaremos sobre dónde se puede utilizar esta blockchain.

El objetivo la segunda lección es crear un nodo de blockchain privado de Ethereum para continuar trabajando en este curso en un servidor Ubuntu y Debian. Abordaremos las particularidades de la instalación de las utilidades básicas, como geth, que proporciona el funcionamiento de nuestro nodo blockchain, así como el demonio de almacenamiento de datos descentralizado swarm.

La tercera lección te enseñará a realizar experimentos con Ethereum en una microcomputadora económica Raspberry Pi. Instalarás el sistema operativo (SO) Raspberian en Raspberry Pi, la utilidad Geth, que permite el funcionamiento del nodo de blockchain, y el demonio de almacenamiento de datos descentralizado Swarm.

La cuarta lección se centra en las cuentas y las unidades de criptomonedas en la red Ethereum, así como en las formas de transferir fondos de una cuenta a otra desde la consola Geth. Aprenderás a crear cuentas, iniciar transacciones de transferencia de fondos, obtener el estado de la transacción y su recibo.

En la quinta lección te familiarizarás con los contratos inteligentes en la red Ethereum y aprenderás sobre su ejecución en la máquina virtual de Ethereum.

Crearás y publicarás tu primer contrato inteligente en una red privada de Ethereum y aprenderás a invocar sus funciones. Para ello, utilizarás el entorno de desarrollo Remix Solidity IDE. Además, aprenderás a instalar y utilizar el compilador por lotes solc.
También hablaremos sobre la llamada interfaz binaria de aplicación Application Binary Interface (ABI) y te enseñaremos a utilizarla.

La sexta lección se centra en la creación de scripts de JavaScript que se ejecutan en Node.js y realizan operaciones con contratos inteligentes Solidity.

Instalarás Node.js en SO Ubuntu, Debian y Raspberian, escribirás scripts para publicar un contrato inteligente en la red local de Ethereum y llamar a sus funciones.

Además, aprenderás a transferir fondos entre cuentas normales mediante scripts, así como a depositarlos en cuentas de contratos inteligentes.

En la séptima lección aprenderás a instalar y utilizar el entorno de desarrollo integrado Truffle, popular entre los desarrolladores de contratos inteligentes Solidity. Aprenderás a crear scripts de JavaScript que llamen a funciones de contratos utilizando el módulo truffle-contract, y también realizarás pruebas de tu contrato inteligente con herramientas Truffle.

La octava lección se centra en los tipos de datos de Solidity. Escribirás contratos inteligentes que trabajen con tipos de datos como enteros con signo y sin signo, números con signo, cadenas, direcciones, variables de tipos complejos, arreglos, enumeraciones, estructuras y diccionarios.

En la novena lección Te acercarás un paso más a la creación de contratos inteligentes para la red principal de Ethereum. Aprenderás a publicar contratos utilizando Truffle en la red privada Geth, así como en la red de pruebas Rinkeby. La depuración de un contrato inteligente en la red Rinkeby es muy útil antes de publicarlo en la red principal: allí todo es prácticamente real, pero gratis.

En esta lección, crearás un nodo en la red de pruebas Rinkeby, lo recargarás con fondos y publicarás un contrato inteligente.

Lección 10 se dedica a los almacenes de datos distribuidos Ethereum Swarm. Al utilizar almacenes distribuidos, ahorras en el almacenamiento de grandes volúmenes de datos en la blockchain de Ethereum.

En esta lección, crearás un almacenamiento local de Swarm, realizarás operaciones de escritura y lectura de archivos, así como de directorios con archivos. Luego aprenderás a trabajar con la puerta de enlace pública de Swarm, escribirás scripts para interactuar con Swarm desde Node.js y también utilizarás el módulo Perl Net::Ethereum::Swarm.

El objetivo de la lección 11 es dominar el trabajo con contratos inteligentes Solidity utilizando el popular lenguaje de programación Python y el marco de trabajo Web3.py. Instalarás este marco, escribirás scripts para compilar y publicar un contrato inteligente, así como para invocar sus funciones. Además, Web3.py se utilizará tanto de forma independiente como junto con el entorno de desarrollo integrado Truffle.

En la lección 12 aprenderás a transferir datos entre contratos inteligentes y el mundo real mediante oráculos. Esto te será útil para obtener datos de sitios web, dispositivos de Internet de las Cosas (IoT), diversos instrumentos y sensores, y enviar datos desde contratos inteligentes a estos dispositivos. En la parte práctica de la lección, crearás un oráculo y un contrato inteligente que obtenga el tipo de cambio actual del USD a rublos desde el sitio del Banco Central de Rusia.

Lección 1. Breve introducción a la blockchain y la red EthereumEl objetivo de la lección: familiarizarse con los principios de funcionamiento de la blockchain de Ethereum, sus áreas de aplicación y la terminología básica.
Ejercicios prácticos: no están previstos en esta lección.

Es poco probable que hoy exista algún desarrollador de software que no haya oído hablar de la tecnología blockchain, las criptomonedas, los bitcoins, la oferta inicial de monedas (ICO), los contratos inteligentes, así como otros conceptos y términos relacionados con la blockchain.

La tecnología blockchain abre nuevos mercados y crea empleos para programadores. Si dominan todos los aspectos de las tecnologías de criptomonedas y contratos inteligentes, no deberían tener problemas para aplicar esos conocimientos en la práctica.

Cabe decir que hay mucha especulación en torno a las criptomonedas y blockchains. Dejaremos de lado las discusiones sobre las fluctuaciones en los precios de las criptomonedas, la creación de pirámides, las sutilezas de la legislación sobre criptomonedas, etc. En nuestro curso de formación, nos enfocaremos principalmente en los aspectos técnicos de la aplicación de contratos inteligentes en la blockchain de Ethereum (éther) y el desarrollo de lo que se denomina aplicaciones descentralizadas (DApp).

¿Qué es blockchain?

Blockchain es una cadena de bloques de datos, interconectados de una manera específica. Al inicio de la cadena se encuentra el primer bloque, llamado bloque génesis o bloque inicial. A este le sigue el segundo, luego el tercero, y así sucesivamente.

Todos estos bloques de datos se duplican automáticamente en numerosos nodos de la red blockchain. Así se asegura el almacenamiento descentralizado de los datos de la blockchain.
Pueden imaginarse el sistema blockchain como una gran cantidad de nodos (servidores físicos o virtuales), conectados en red y replicando todos los cambios en la cadena de bloques de datos. Es como un gigantesco ordenador multi-servidor, donde los nodos de dicho ordenador (servidores) pueden estar dispersos por todo el mundo. Y ustedes también pueden agregar su computadora a la red blockchain.

Base de datos distribuida

Blockchain se puede considerar como una base de datos distribuida, replicada en todos los nodos de la red blockchain. En teoría, la blockchain seguirá siendo operativa mientras al menos un nodo que almacene todos los bloques de la blockchain esté activo.

Registro de datos distribuido

Blockchain se puede concebir como un registro distribuido de datos y operaciones (transacciones). Otro nombre para este registro es libro mayor.

En un registro distribuido se pueden añadir datos, pero no se pueden modificar ni eliminar. Esta imposibilidad se alcanza, entre otras cosas, mediante la aplicación de algoritmos criptográficos, algoritmos especiales para añadir bloques a la cadena y el almacenamiento descentralizado de datos.

Al añadir bloques y realizar operaciones (transacciones), se utilizan claves privadas y públicas. Estas limitan a los usuarios de la cadena de bloques, proporcionando acceso únicamente a sus propios bloques de datos.

Transacciones

La cadena de bloques almacena información sobre las operaciones (transacciones) en bloques. Al mismo tiempo, las transacciones antiguas, ya ejecutadas, no pueden ser revertidas ni modificadas. Las nuevas transacciones se almacenan en nuevos bloques añadidos.

De este modo, en la cadena de bloques puede registrarse de manera inalterable toda la historia de transacciones. Por lo tanto, la cadena de bloques puede ser utilizada, por ejemplo, para el almacenamiento seguro de operaciones bancarias, información de derechos de autor, historial de cambios de propietarios de bienes inmuebles, etc.

La cadena de bloques de Ethereum contiene lo que se llama el estado del sistema. A medida que se ejecutan transacciones, el estado cambia desde el inicial hasta el actual. Las transacciones se registran en bloques.

Cadenas de bloques públicas y privadas

Es importante señalar que todo lo mencionado es cierto solo para las llamadas redes públicas de blockchain, que no pueden ser controladas por entidades físicas o jurídicas individuales, órganos gubernamentales o gobiernos.
Las llamadas redes privadas de blockchain están bajo el control total de sus creadores, y allí es posible todo, por ejemplo, la sustitución completa de todos los bloques de la cadena.

Aplicaciones prácticas del blockchain

¿Para qué puede ser útil el blockchain?

En resumen, el blockchain permite realizar operaciones (transacciones) de manera segura entre personas o empresas que no confían mutuamente. Los datos registrados en la cadena de bloques (transacciones, datos personales, documentos, certificados, contratos, albaranes, etc.) no pueden ser falsificados ni reemplazados una vez registrados. Por lo tanto, sobre la base del blockchain se pueden crear, por ejemplo, registros distribuidos confiables de todo tipo de documentos.

Por supuesto, sabes que se están creando sistemas de criptomonedas basados en blockchains que tienen como objetivo reemplazar el dinero en efectivo. El dinero en efectivo también se conoce como fiat (de Fiat Money).
La blockchain garantiza el almacenamiento y la inmutabilidad de las transacciones registradas en bloques, por lo que se puede utilizar para la creación de sistemas de criptomonedas. Contiene todo el historial de transferencia de criptoactivos entre diferentes usuarios (cuentas), y cualquier operación puede ser rastreada.

Aunque las operaciones dentro de los sistemas de criptomonedas pueden ser anónimas, la extracción de criptomoneda y el intercambio por dinero fiat generalmente conducen a la revelación de la identidad del propietario del activo criptográfico.

Los llamados contratos inteligentes, que son software que funciona en la red Ethereum, permiten automatizar el proceso de creación de acuerdos y el control de su cumplimiento. Esto es especialmente efectivo si el pago se realiza con la criptomoneda Ether.

La blockchain de Ethereum y los contratos inteligentes de Ethereum, escritos en el lenguaje de programación Solidity, pueden utilizarse, por ejemplo, en las siguientes áreas:

  • alternativa a la notarización de documentos;
  • almacenamiento del registro de propiedades inmobiliarias y datos sobre transacciones de bienes inmuebles;
  • almacenamiento de información sobre derechos de autor de propiedad intelectual (libros, imágenes, obras musicales, etc.);
  • creación de sistemas de votación independiente;
  • sector financiero y actividades bancarias;
  • logística a nivel internacional, seguimiento del movimiento de mercancías;
  • almacenamiento de datos personales como alternativa a los sistemas de identificación;
  • transacciones seguras en el ámbito comercial;
  • almacenamiento de resultados de exámenes médicos, así como el historial de procedimientos prescritos.

Problemas con la blockchain

Pero, por supuesto, no todo es tan simple como podría parecer.

Existen problemas con la verificación de datos antes de su adición a la blockchain (por ejemplo, ¿son falsos?), problemas de seguridad en el software del sistema y de aplicación utilizado para trabajar con la blockchain, así como problemas con la posibilidad de utilizar métodos de ingeniería social para robar acceso a las billeteras de criptomonedas, etc.

Una vez más, si estamos hablando de un blockchain privado, perteneciente a una persona u organización, y no de un blockchain público con nodos distribuidos en todo el mundo, el nivel de confianza aquí no será mayor que el nivel de confianza hacia esa persona u organización.

También hay que tener en cuenta que los datos registrados en el blockchain están disponibles para todos. En este sentido, el blockchain (especialmente el público) no es adecuado para almacenar información confidencial. Sin embargo, el hecho de que la información en el blockchain no se pueda modificar puede ayudar a prevenir o investigar diversos tipos de fraude.

Las aplicaciones descentralizadas de Ethereum serán más convenientes si se paga por su uso con criptomonedas. Cuantas más personas posean criptomonedas o estén dispuestas a adquirirlas, más popularidad obtendrán las aplicaciones DApp y los contratos inteligentes.

Entre los problemas generales del blockchain que dificultan su aplicación práctica se pueden mencionar la limitada velocidad de adición de nuevos bloques y el costo relativamente alto de las transacciones. Sin embargo, las tecnologías en este ámbito están en desarrollo activo, y hay esperanza de que los problemas técnicos se solucionen con el tiempo.

Otro problema es que los contratos inteligentes del blockchain de Ethereum operan en un entorno aislado de máquinas virtuales y no tienen acceso a datos del mundo real. En particular, un contrato inteligente no puede leer datos de sitios web o de dispositivos físicos (sensores, contactos, etc.), ni puede enviar datos a ningún dispositivo externo. Este problema y sus posibles soluciones se discutirán en la lección dedicada a los llamados oráculos, intermediarios informativos de los contratos inteligentes.

También existen limitaciones en el ámbito legislativo. En algunos países, por ejemplo, se prohíbe el uso de criptomonedas como medio de pago, aunque se permite poseerlas como activos digitales, similares a valores. Estos activos se pueden comprar y vender en el mercado. En cualquier caso, al crear un proyecto que opere con criptomonedas, es necesario familiarizarse con la legislación del país bajo cuya jurisdicción se encuentra su proyecto.

¿Cómo se forma una cadena de bloques?

Como ya mencionamos, la blockchain es una simple cadena de bloques de datos. Primero se forma el primer bloque de esta cadena, luego se añade el segundo y así sucesivamente. Se supone que los datos de las transacciones se almacenan en bloques y se añaden al último bloque.

En la figura 1.1 mostramos la variante más simple de la secuencia de bloques, donde el primer bloque se refiere al siguiente.

El libro «Creación de contratos inteligentes en Solidity para la cadena de bloques Ethereum. Guía práctica»
Figura 1.1. Secuencia simple de bloques

En esta variante, sin embargo, es muy fácil falsificar el contenido de cualquier bloque en la cadena, ya que los bloques no contienen ninguna información para proteger contra cambios. Dado que la blockchain está destinada a ser utilizada por personas y empresas que no confían entre sí, se puede concluir que tal método de almacenamiento de datos no es adecuado para blockchain.

Vamos a proteger los bloques contra la falsificación. En la primera etapa, intentaremos proteger cada bloque con un resumen de verificación (figura 1.2).

El libro «Creación de contratos inteligentes en Solidity para la cadena de bloques Ethereum. Guía práctica»
Figura 1.2. Añadiendo protección de datos de los bloques con un resumen de verificación

Ahora un atacante no puede simplemente modificar un bloque, ya que contiene el resumen de verificación de los datos del bloque. La verificación del resumen de verificación mostrará que los datos han sido alterados.

Para calcular el resumen de verificación, se puede utilizar una de las funciones de hash, como MD-5, SHA-1, SHA-256, etc. Las funciones hash calculan un cierto valor (por ejemplo, en forma de cadena de texto de longitud constante) como resultado de realizar operaciones irreversibles sobre un bloque de datos. Las operaciones dependen del tipo de función hash.

Incluso con un pequeño cambio en el contenido del bloque de datos, el valor de la función hash también cambiará. Al analizar el valor de la función hash, es imposible recuperar el bloque de datos para el cual fue calculada.

¿Será suficiente esta protección? Desafortunadamente, no.

En este esquema, el resumen de verificación (función hash) solo protege bloques individuales, pero no toda la cadena de bloques. Sabiendo el algoritmo de cálculo de la función hash, un atacante puede fácilmente sustituir el contenido del bloque. También nada le impide eliminar bloques de la cadena o añadir nuevos.

Para proteger toda la cadena en su conjunto, se puede almacenar en cada bloque junto con los datos también el hash de los datos del bloque anterior (figura 1.3).

El libro «Creación de contratos inteligentes en Solidity para la cadena de bloques Ethereum. Guía práctica»
Figura 1.3. Añadiendo al bloque de datos el hash del bloque anterior

En este esquema, para cambiar algún bloque, es necesario recalcular las funciones hash de todos los bloques posteriores. ¿Cuál es el problema?

En los blockchains reales, se crean dificultades artificiales adicionales para agregar nuevos bloques: se utilizan algoritmos que requieren muchos recursos computacionales. Teniendo en cuenta que para realizar cambios en un bloque se necesita recalcular no solo ese bloque, sino todos los posteriores, hacerlo será extremadamente difícil.

Recordemos también que los datos del blockchain se almacenan (se duplican) en numerosos nodos de la red, es decir, se utiliza almacenamiento descentralizado. Esto complica enormemente la falsificación de un bloque, ya que los cambios deben hacerse en todos los nodos de la red.

Dado que los bloques almacenan información sobre el bloque anterior, se puede verificar el contenido de todos los bloques de la cadena.

Blockchain de Ethereum

El blockchain de Ethereum es una plataforma en la que se pueden crear aplicaciones distribuidas DApp. A diferencia de otras plataformas, Ethereum permite utilizar contratos inteligentes (smart contracts) escritos en el lenguaje de programación Solidity.

Esta plataforma fue creada en 2013 por Vitalik Buterin, fundador de la revista Bitcoin Magazine, y lanzada en 2015. Todo lo que estudiaremos o haremos en nuestro curso tiene relación con el blockchain de Ethereum y los contratos inteligentes en Solidity.

Minería o cómo se crean los bloques

La minería (mining) es un proceso bastante complejo y que consume recursos para agregar nuevos bloques a la cadena del blockchain, y no se trata simplemente de ‘extraer criptomonedas’. La minería garantiza el funcionamiento del blockchain, ya que este proceso es el encargado de añadir transacciones al blockchain de Ethereum.

Las personas y organizaciones que se dedican a agregar bloques se llaman mineros (miner).
El software (SO) que funciona en los nodos de los mineros intenta encontrar para el último bloque un parámetro de hash llamado Nonce, para que se obtenga un determinado valor de la función hash estipulada por la red. El algoritmo de hashing Ethash, utilizado en Ethereum, permite obtener el valor de Nonce solo mediante un proceso de prueba y error sucesivo.

Si el nodo minero encuentra el valor correcto de Nonce, esto se considera una prueba de trabajo (PoW, Proof-of-work). En este caso, si el bloque se añade a la red Ethereum, el minero recibe una recompensa en la moneda de la red: Ether. Al momento de redactar nuestro libro, la recompensa es de 5 Ether, aunque con el tiempo se reducirá.

Así, los mineros de Ethereum aseguran el funcionamiento de la red al añadir bloques y reciben criptomonedas a cambio. En internet encontrarás mucha información sobre mineros y minería, pero nosotros nos centraremos en la creación de contratos Solidity y aplicaciones descentralizadas DApp en la red Ethereum.

Resumen de la lección

En la primera lección conociste el blockchain y aprendiste que es una secuencia de bloques organizada de una manera especial. El contenido de los bloques previamente grabados no se puede modificar, ya que esto requeriría recalcular todos los bloques posteriores en muchos nodos de la red, lo que consume muchos recursos y tiempo.

El blockchain se puede usar para almacenar los resultados de la ejecución de transacciones. Su principal propósito es organizar la ejecución segura de transacciones entre partes (personas y organizaciones) que no confían mutuamente. Aprendiste en qué áreas de negocio y en qué esferas se puede utilizar el blockchain Ethereum y los contratos inteligentes Solidity. Esto incluye el sector bancario, el registro de derechos de propiedad, documentos, etc.

También aprendiste que al utilizar blockchain pueden surgir varios problemas. Estos incluyen la verificación de la información añadida al blockchain, la velocidad de funcionamiento del mismo, el costo de las transacciones, el problema del intercambio de datos entre los contratos inteligentes y el mundo real, así como posibles ataques de delincuentes destinados a robar fondos en criptomonedas de las cuentas de los usuarios.

Además, hablamos brevemente sobre la minería como el proceso de añadir nuevos bloques al blockchain. La minería es necesaria para ejecutar transacciones. Aquellos que se dedican a la minería garantizan el funcionamiento del blockchain y reciben recompensas en criptomonedas por ello.

Lección 2. Preparación del entorno de trabajo en Ubuntu y DebianElección del sistema operativo
Instalación de utilidades necesarias
Instalación de Geth y Swarm en Ubuntu
Instalación de Geth y Swarm en Debian
Preparación previa
Descarga del distribuidor de Go
Configuración de variables de entorno
Verificación de la versión de Go
Instalación de Geth y Swarm
Creamos una blockchain privada
Готовим файл genesis.json
Creamos un directorio de trabajo
Creamos una cuenta
Iniciamos la inicialización del nodo
Parámetros de inicio del nodo
Conectamos a nuestro nodo
Gestión de minería y verificación de saldo
Finalizando la consola de Geth
Resumen de la lección

Lección 3. Preparación del entorno de trabajo en Raspberry Pi 3Preparación de Raspberry Pi 3 para el trabajo
Instalación de Raspbian
Instalación de actualizaciones
Activación del acceso SSH
Configuración de una dirección IP estática
Instalación de utilidades necesarias
Instalación de Go
Descarga del distribuidor de Go
Configuración de variables de entorno
Verificación de la versión de Go
Instalación de Geth y Swarm
Creamos una blockchain privada
Verificación de cuenta y saldo
Resumen de la lección

Lección 4. Cuentas y transferencia de fondos entre cuentasVisualización y adición de cuentas
Visualización de la lista de cuentas
Adición de cuenta
Parámetros del comando geth account
Contraseñas de cuentas
Criptomoneda en Ethereum
Unidades de dinero Ethereum
Determinando el saldo actual de nuestras cuentas
Transferencia de fondos de una cuenta a otra
Método eth.sendTransaction
Visualización del estado de la transacción
Recibo de la transacción
Resumen de la lección

Lección 5. Publicación del primer contratoSmart contracts en Ethereum
Ejecución de un smart contract
Máquina virtual de Ethereum
Entorno de desarrollo integrado Remix Solidity IDE
Inicio de la compilación
Llamada a funciones del contrato
Publicación del contrato en la red privada
Obteniendo la definición ABI y el código binario del contrato
Publicación del contrato
Verificación del estado de la transacción de publicación del contrato
Llamada a funciones del contrato
Compilador por lotes solc
Instalación de solc en Ubuntu
Instalación de solc en Debian
Compilación del contrato HelloSol
Publicación del contrato
Instalación de solc en Raspbian
Resumen de la lección

Урок 6. Смарт-контракты и Node.jsУстановка Node.js
Instalación en Ubuntu
Instalación en Debian
Instalación y ejecución de Ganache-cli
Instalación de Web3
Instalación de solc
Instalación de Node.js en Raspbian
Script para obtener la lista de cuentas en la consola
Script para publicar un smart contract
Ejecución y obtención de parámetros
Obtención de parámetros de inicio
Compilación del contrato
Desbloqueo de la cuenta
Carga de ABI y código binario del contrato
Estimación de la cantidad de gas necesaria
Creación del objeto y inicio de la publicación del contrato
Inicio del script de publicación del contrato
Llamada a funciones del smart contract
¿Es posible actualizar un smart contract publicado?
Trabajando con Web3 versión 1.0.x
Obteniendo la lista de cuentas
Publicación del contrato
Llamada a funciones del contrato
Transferencia de fondos de una cuenta a otra
Transferencia de fondos a la cuenta del contrato
Actualizando el smart contract HelloSol
Creamos un script para ver el saldo de la cuenta
Добавляем вызов функции getBalance в скрипт call_contract_get_promise.js
Recargando el saldo del smart contract
Resumen de la lección

Lección 7. Introducción a TruffleInstalación de Truffle
Creamos el proyecto HelloSol
Creación del directorio y los archivos del proyecto
Directorio contracts
Directorio migrations
Directorio test
Файл truffle-config.js
Compilación del contrato HelloSol
Lanzamiento de la publicación del contrato
Llamada a las funciones del contrato HelloSol en la consola de Truffle
Вызов функций контракта HelloSol из скрипта JavaScript под управлением Node.js
Instalación del módulo truffle-contract
Llamada a las funciones del contrato getValue y getString
Llamada a las funciones del contrato setValue y setString
Cambio del contrato y nueva publicación
Trabajando con Web3 versión 1.0.x
Realizamos modificaciones en el contrato inteligente HelloSol
Scripts para llamar a los métodos del contrato
Pruebas en Truffle
Prueba en Solidity
Prueba en JavaScript
Resumen de la lección

Lección 8. Tipos de datos de SolidityContrato para estudiar los tipos de datos
Tipos de datos lógicos
Números enteros sin signo y enteros con signo
Números de punto fijo
Dirección
Variables de tipos complejos
Arreglos de tamaño fijo
Arreglos dinámicos
Enumeración
Estructuras
Diccionarios mapping
Resumen de la lección

Lección 9. Migración de contratos a una red privada y a la red RinkebyPublicación de un contrato desde Truffle en la red privada Geth
Preparación del nodo de la red privada
Preparación del contrato para el funcionamiento
Compilación y migración del contrato a la red de Truffle
Lanzamiento de la migración en la red local geth
Generación de artefactos de Truffle
Publicación de un contrato desde Truffle en la red de prueba Rinkeby
Preparación del nodo Geth para trabajar con Rinkeby
Sincronización del nodo
Adición de cuentas
Recarga de la cuenta de Rinkeby con Ether
Lanzamiento de la migración del contrato en la red Rinkeby
Visualización de la información del contrato en la red Rinkeby
Consola de Truffle para la red Rinkeby
Una forma más sencilla de llamar a las funciones del contrato
Вызов методов контракта при помощи Node.js
Transferencia de fondos entre cuentas en la consola de Truffle para Rinkeby
Resumen de la lección

Lección 10. Almacenamiento de datos descentralizado Ethereum SwarmCómo funciona Ethereum Swarm
Instalación y lanzamiento de Swarm
Operaciones con archivos y directorios
Cargar un archivo en Ethereum Swarm
Leer un archivo de Ethereum Swarm
Visualización del manifiesto del archivo cargado
Cargando directorios con subdirectorios
Leer un archivo del directorio cargado
Uso de la puerta de enlace pública Swarm
Обращение к Swarm из скриптов Node.js
Módulo Perl Net::Ethereum::Swarm
Instalación del módulo Net::Ethereum::Swarm
Escritura y lectura de datos
Resumen de la lección

Lección 11. Marco Web3.py para trabajar con Ethereum en PythonInstalación de Web3.py
Actualización e instalación de los paquetes necesarios
Instalación del módulo easysolc
Publicación del contrato usando Web3.py
Compilación del contrato
Conexión al proveedor
Ejecución de la publicación del contrato
Guardar la dirección del contrato y el abi en un archivo
Inicio del script de publicación del contrato
Llamada a los métodos del contrato
Leer la dirección y el abi del contrato del archivo JSON
Conexión al proveedor
Creación del objeto del contrato
Llamada a los métodos del contrato
Truffle y Web3.py
Resumen de la lección

Lección 12. Oráculos¿Puede un contrato inteligente confiar en datos del mundo exterior?
Oráculos como intermediarios de información del blockchain
Fuente de datos
Código para representar datos de la fuente
Oráculo para registrar el tipo de cambio en el blockchain
Contrato USDRateOracle
Actualización del tipo de cambio en el contrato inteligente
Uso de un proveedor Web Socket
Esperando el evento RateUpdate
Manejo del evento RateUpdate
Iniciando la actualización de datos en el contrato inteligente
Resumen de la lección

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster