{"id":39018,"date":"2019-10-31T22:27:25","date_gmt":"2019-10-31T19:27:25","guid":{"rendered":"https:\/\/prohoster.info\/blog\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo\/"},"modified":"2019-10-31T22:27:25","modified_gmt":"2019-10-31T19:27:25","slug":"kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/news\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo","title":{"rendered":"El libro \u00abCreaci\u00f3n de contratos inteligentes en Solidity para la cadena de bloques Ethereum. Gu\u00eda pr\u00e1ctica\u00bb","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"El libro \u00abCreaci\u00f3n de contratos inteligentes en Solidity para la cadena de bloques Ethereum. Gu\u00eda pr\u00e1ctica\u00bb\" src=\"\/wp-content\/uploads\/2019\/10\/9549e708e99fef6892045ff854231fa7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDurante m\u00e1s de un a\u00f1o he trabajado en el libro 'Creaci\u00f3n de contratos inteligentes Solidity para la blockchain de Ethereum. Gu\u00eda pr\u00e1ctica', y ahora este trabajo est\u00e1 completado, y el libro <noindex><a rel=\"nofollow\" href=\"https:\/\/www.litres.ru\/aleksandr-frolov-198\/sozdanie-smart-kontraktov-solidity-dlya-blokcheyna-et\/\">ha sido publicado y est\u00e1 disponible en Litres<\/a><\/noindex>.<\/p>\n<p>Espero que mi libro ayude a comenzar r\u00e1pidamente con la creaci\u00f3n de contratos inteligentes Solidity y aplicaciones distribuidas DApp para la blockchain de Ethereum. Consiste en 12 lecciones con tareas pr\u00e1cticas. Al completarlas, el lector podr\u00e1 crear sus propios nodos locales de Ethereum, publicar contratos inteligentes y llamar a sus m\u00e9todos, intercambiar datos entre el mundo real y los contratos inteligentes a trav\u00e9s de or\u00e1culos, y trabajar con la red de prueba Rinkeby. <\/p>\n<p>El libro est\u00e1 dirigido a todos aquellos interesados en las tecnolog\u00edas avanzadas en el \u00e1mbito de las blockchains y que deseen adquirir conocimientos r\u00e1pidamente para realizar un trabajo interesante y prometedor.<\/p>\n<p>A continuaci\u00f3n, encontrar\u00e1 el \u00edndice y el primer cap\u00edtulo del libro (tambi\u00e9n en <noindex><a rel=\"nofollow\" href=\"https:\/\/www.litres.ru\/aleksandr-frolov-198\/sozdanie-smart-kontraktov-solidity-dlya-blokcheyna-et\/\">Litres<\/a><\/noindex> hay fragmentos del libro disponibles). Espero recibir comentarios, observaciones y sugerencias. Todo esto tratar\u00e9 de tenerlo en cuenta para la preparaci\u00f3n de la pr\u00f3xima edici\u00f3n del libro.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<b class=\"spoiler_title\">Tabla de contenido<\/b><b class=\"spoiler_title\">Introducci\u00f3n<\/b>Nuestro libro est\u00e1 destinado a quienes desean no solo comprender los principios de funcionamiento de la blockchain de Ethereum, sino tambi\u00e9n adquirir habilidades pr\u00e1cticas en la creaci\u00f3n de aplicaciones distribuidas DApp en el lenguaje de programaci\u00f3n Solidity para esta red.<\/p>\n<p>Este libro es mejor no solo leerlo, sino trabajar con \u00e9l, realizando las tareas pr\u00e1cticas descritas en las lecciones. Para trabajar, necesitar\u00e1 un ordenador local, un servidor virtual o en la nube con un sistema operativo Debian o Ubuntu instalado. Tambi\u00e9n para realizar muchas tareas se puede utilizar Raspberry Pi.<\/p>\n<p><b>En la primera lecci\u00f3n <\/b>consideraremos los principios de funcionamiento de la blockchain de Ethereum y la terminolog\u00eda b\u00e1sica, as\u00ed como hablaremos sobre d\u00f3nde se puede utilizar esta blockchain. <\/p>\n<p>El objetivo <b>la segunda lecci\u00f3n<\/b> 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\u00f3n de las utilidades b\u00e1sicas, como geth, que proporciona el funcionamiento de nuestro nodo blockchain, as\u00ed como el demonio de almacenamiento de datos descentralizado swarm.<\/p>\n<p><b>La tercera lecci\u00f3n<\/b> te ense\u00f1ar\u00e1 a realizar experimentos con Ethereum en una microcomputadora econ\u00f3mica Raspberry Pi. Instalar\u00e1s 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.<\/p>\n<p><b>La cuarta lecci\u00f3n<\/b> se centra en las cuentas y las unidades de criptomonedas en la red Ethereum, as\u00ed como en las formas de transferir fondos de una cuenta a otra desde la consola Geth. Aprender\u00e1s a crear cuentas, iniciar transacciones de transferencia de fondos, obtener el estado de la transacci\u00f3n y su recibo.<\/p>\n<p><b>En la quinta lecci\u00f3n<\/b> te familiarizar\u00e1s con los contratos inteligentes en la red Ethereum y aprender\u00e1s sobre su ejecuci\u00f3n en la m\u00e1quina virtual de Ethereum. <\/p>\n<p>Crear\u00e1s y publicar\u00e1s tu primer contrato inteligente en una red privada de Ethereum y aprender\u00e1s a invocar sus funciones. Para ello, utilizar\u00e1s el entorno de desarrollo Remix Solidity IDE. Adem\u00e1s, aprender\u00e1s a instalar y utilizar el compilador por lotes solc.<br \/>\nTambi\u00e9n hablaremos sobre la llamada interfaz binaria de aplicaci\u00f3n Application Binary Interface (ABI) y te ense\u00f1aremos a utilizarla.<\/p>\n<p><b>La sexta lecci\u00f3n<\/b> se centra en la creaci\u00f3n de scripts de JavaScript que se ejecutan en Node.js y realizan operaciones con contratos inteligentes Solidity.<\/p>\n<p>Instalar\u00e1s Node.js en SO Ubuntu, Debian y Raspberian, escribir\u00e1s scripts para publicar un contrato inteligente en la red local de Ethereum y llamar a sus funciones. <\/p>\n<p>Adem\u00e1s, aprender\u00e1s a transferir fondos entre cuentas normales mediante scripts, as\u00ed como a depositarlos en cuentas de contratos inteligentes.<\/p>\n<p><b>En la s\u00e9ptima lecci\u00f3n<\/b> aprender\u00e1s a instalar y utilizar el entorno de desarrollo integrado Truffle, popular entre los desarrolladores de contratos inteligentes Solidity. Aprender\u00e1s a crear scripts de JavaScript que llamen a funciones de contratos utilizando el m\u00f3dulo truffle-contract, y tambi\u00e9n realizar\u00e1s pruebas de tu contrato inteligente con herramientas Truffle.<\/p>\n<p><b>La octava lecci\u00f3n<\/b> se centra en los tipos de datos de Solidity. Escribir\u00e1s contratos inteligentes que trabajen con tipos de datos como enteros con signo y sin signo, n\u00fameros con signo, cadenas, direcciones, variables de tipos complejos, arreglos, enumeraciones, estructuras y diccionarios.<\/p>\n<p><b>En la novena lecci\u00f3n<\/b> Te acercar\u00e1s un paso m\u00e1s a la creaci\u00f3n de contratos inteligentes para la red principal de Ethereum. Aprender\u00e1s a publicar contratos utilizando Truffle en la red privada Geth, as\u00ed como en la red de pruebas Rinkeby. La depuraci\u00f3n de un contrato inteligente en la red Rinkeby es muy \u00fatil antes de publicarlo en la red principal: all\u00ed todo es pr\u00e1cticamente real, pero gratis.<\/p>\n<p>En esta lecci\u00f3n, crear\u00e1s un nodo en la red de pruebas Rinkeby, lo recargar\u00e1s con fondos y publicar\u00e1s un contrato inteligente.<\/p>\n<p><b>Lecci\u00f3n 10<\/b> se dedica a los almacenes de datos distribuidos Ethereum Swarm. Al utilizar almacenes distribuidos, ahorras en el almacenamiento de grandes vol\u00famenes de datos en la blockchain de Ethereum. <\/p>\n<p>En esta lecci\u00f3n, crear\u00e1s un almacenamiento local de Swarm, realizar\u00e1s operaciones de escritura y lectura de archivos, as\u00ed como de directorios con archivos. Luego aprender\u00e1s a trabajar con la puerta de enlace p\u00fablica de Swarm, escribir\u00e1s scripts para interactuar con Swarm desde Node.js y tambi\u00e9n utilizar\u00e1s el m\u00f3dulo Perl Net::Ethereum::Swarm.<\/p>\n<p><b>El objetivo de la lecci\u00f3n 11<\/b> es dominar el trabajo con contratos inteligentes Solidity utilizando el popular lenguaje de programaci\u00f3n Python y el marco de trabajo Web3.py. Instalar\u00e1s este marco, escribir\u00e1s scripts para compilar y publicar un contrato inteligente, as\u00ed como para invocar sus funciones. Adem\u00e1s, Web3.py se utilizar\u00e1 tanto de forma independiente como junto con el entorno de desarrollo integrado Truffle.<\/p>\n<p><b>En la lecci\u00f3n 12<\/b> aprender\u00e1s a transferir datos entre contratos inteligentes y el mundo real mediante or\u00e1culos. Esto te ser\u00e1 \u00fatil 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\u00e1ctica de la lecci\u00f3n, crear\u00e1s un or\u00e1culo y un contrato inteligente que obtenga el tipo de cambio actual del USD a rublos desde el sitio del Banco Central de Rusia.<\/p>\n<p><b class=\"spoiler_title\">Lecci\u00f3n 1. Breve introducci\u00f3n a la blockchain y la red Ethereum<\/b><b>El objetivo de la lecci\u00f3n:<\/b> familiarizarse con los principios de funcionamiento de la blockchain de Ethereum, sus \u00e1reas de aplicaci\u00f3n y la terminolog\u00eda b\u00e1sica.<br \/>\n<b>Ejercicios pr\u00e1cticos:<\/b> no est\u00e1n previstos en esta lecci\u00f3n.<\/p>\n<p>Es poco probable que hoy exista alg\u00fan desarrollador de software que no haya o\u00eddo hablar de la tecnolog\u00eda blockchain, las criptomonedas, los bitcoins, la oferta inicial de monedas (ICO), los contratos inteligentes, as\u00ed como otros conceptos y t\u00e9rminos relacionados con la blockchain.<\/p>\n<p>La tecnolog\u00eda blockchain abre nuevos mercados y crea empleos para programadores. Si dominan todos los aspectos de las tecnolog\u00edas de criptomonedas y contratos inteligentes, no deber\u00edan tener problemas para aplicar esos conocimientos en la pr\u00e1ctica.<\/p>\n<p>Cabe decir que hay mucha especulaci\u00f3n en torno a las criptomonedas y blockchains. Dejaremos de lado las discusiones sobre las fluctuaciones en los precios de las criptomonedas, la creaci\u00f3n de pir\u00e1mides, las sutilezas de la legislaci\u00f3n sobre criptomonedas, etc. En nuestro curso de formaci\u00f3n, nos enfocaremos principalmente en los aspectos t\u00e9cnicos de la aplicaci\u00f3n de contratos inteligentes en la blockchain de Ethereum (\u00e9ther) y el desarrollo de lo que se denomina aplicaciones descentralizadas (DApp).<\/p>\n<h3>\u00bfQu\u00e9 es blockchain?<\/h3>\n<p>\nBlockchain es una cadena de bloques de datos, interconectados de una manera espec\u00edfica. Al inicio de la cadena se encuentra el primer bloque, llamado bloque g\u00e9nesis o bloque inicial. A este le sigue el segundo, luego el tercero, y as\u00ed sucesivamente.<\/p>\n<p>Todos estos bloques de datos se duplican autom\u00e1ticamente en numerosos nodos de la red blockchain. As\u00ed se asegura el almacenamiento descentralizado de los datos de la blockchain. <br \/>\nPueden imaginarse el sistema blockchain como una gran cantidad de nodos (servidores f\u00edsicos 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\u00e9n pueden agregar su computadora a la red blockchain. <\/p>\n<h4>Base de datos distribuida<\/h4>\n<p>\nBlockchain se puede considerar como una base de datos distribuida, replicada en todos los nodos de la red blockchain. En teor\u00eda, la blockchain seguir\u00e1 siendo operativa mientras al menos un nodo que almacene todos los bloques de la blockchain est\u00e9 activo.<\/p>\n<h4>Registro de datos distribuido<\/h4>\n<p>\nBlockchain se puede concebir como un registro distribuido de datos y operaciones (transacciones). Otro nombre para este registro es libro mayor. <\/p>\n<p>En un registro distribuido se pueden a\u00f1adir datos, pero no se pueden modificar ni eliminar. Esta imposibilidad se alcanza, entre otras cosas, mediante la aplicaci\u00f3n de algoritmos criptogr\u00e1ficos, algoritmos especiales para a\u00f1adir bloques a la cadena y el almacenamiento descentralizado de datos.<\/p>\n<p>Al a\u00f1adir bloques y realizar operaciones (transacciones), se utilizan claves privadas y p\u00fablicas. Estas limitan a los usuarios de la cadena de bloques, proporcionando acceso \u00fanicamente a sus propios bloques de datos.<\/p>\n<h4>Transacciones<\/h4>\n<p>\nLa cadena de bloques almacena informaci\u00f3n 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\u00f1adidos.<\/p>\n<p>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\u00f3n de derechos de autor, historial de cambios de propietarios de bienes inmuebles, etc.<\/p>\n<p>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.<\/p>\n<h4>Cadenas de bloques p\u00fablicas y privadas<\/h4>\n<p>\nEs importante se\u00f1alar que todo lo mencionado es cierto solo para las llamadas redes p\u00fablicas de blockchain, que no pueden ser controladas por entidades f\u00edsicas o jur\u00eddicas individuales, \u00f3rganos gubernamentales o gobiernos. <br \/>\nLas llamadas redes privadas de blockchain est\u00e1n bajo el control total de sus creadores, y all\u00ed es posible todo, por ejemplo, la sustituci\u00f3n completa de todos los bloques de la cadena.<\/p>\n<h4>Aplicaciones pr\u00e1cticas del blockchain<\/h4>\n<p>\n\u00bfPara qu\u00e9 puede ser \u00fatil el blockchain?<\/p>\n<p>En resumen, el blockchain permite realizar operaciones (transacciones) de manera segura entre personas o empresas que no conf\u00edan 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.<\/p>\n<p>Por supuesto, sabes que se est\u00e1n creando sistemas de criptomonedas basados en blockchains que tienen como objetivo reemplazar el dinero en efectivo. El dinero en efectivo tambi\u00e9n se conoce como fiat (de Fiat Money).<br \/>\nLa blockchain garantiza el almacenamiento y la inmutabilidad de las transacciones registradas en bloques, por lo que se puede utilizar para la creaci\u00f3n de sistemas de criptomonedas. Contiene todo el historial de transferencia de criptoactivos entre diferentes usuarios (cuentas), y cualquier operaci\u00f3n puede ser rastreada.<\/p>\n<p>Aunque las operaciones dentro de los sistemas de criptomonedas pueden ser an\u00f3nimas, la extracci\u00f3n de criptomoneda y el intercambio por dinero fiat generalmente conducen a la revelaci\u00f3n de la identidad del propietario del activo criptogr\u00e1fico. <\/p>\n<p>Los llamados contratos inteligentes, que son software que funciona en la red Ethereum, permiten automatizar el proceso de creaci\u00f3n de acuerdos y el control de su cumplimiento. Esto es especialmente efectivo si el pago se realiza con la criptomoneda Ether.<\/p>\n<p>La blockchain de Ethereum y los contratos inteligentes de Ethereum, escritos en el lenguaje de programaci\u00f3n Solidity, pueden utilizarse, por ejemplo, en las siguientes \u00e1reas:<\/p>\n<ul>\n<li>alternativa a la notarizaci\u00f3n de documentos;<\/li>\n<li>almacenamiento del registro de propiedades inmobiliarias y datos sobre transacciones de bienes inmuebles;<\/li>\n<li>almacenamiento de informaci\u00f3n sobre derechos de autor de propiedad intelectual (libros, im\u00e1genes, obras musicales, etc.);<\/li>\n<li>creaci\u00f3n de sistemas de votaci\u00f3n independiente;<\/li>\n<li>sector financiero y actividades bancarias;<\/li>\n<li>log\u00edstica a nivel internacional, seguimiento del movimiento de mercanc\u00edas;<\/li>\n<li>almacenamiento de datos personales como alternativa a los sistemas de identificaci\u00f3n;<\/li>\n<li>transacciones seguras en el \u00e1mbito comercial;<\/li>\n<li>almacenamiento de resultados de ex\u00e1menes m\u00e9dicos, as\u00ed como el historial de procedimientos prescritos.<\/li>\n<\/ul>\n<p><\/p>\n<h4>Problemas con la blockchain<\/h4>\n<p>\nPero, por supuesto, no todo es tan simple como podr\u00eda parecer. <\/p>\n<p>Existen problemas con la verificaci\u00f3n de datos antes de su adici\u00f3n a la blockchain (por ejemplo, \u00bfson falsos?), problemas de seguridad en el software del sistema y de aplicaci\u00f3n utilizado para trabajar con la blockchain, as\u00ed como problemas con la posibilidad de utilizar m\u00e9todos de ingenier\u00eda social para robar acceso a las billeteras de criptomonedas, etc.<\/p>\n<p>Una vez m\u00e1s, si estamos hablando de un blockchain privado, perteneciente a una persona u organizaci\u00f3n, y no de un blockchain p\u00fablico con nodos distribuidos en todo el mundo, el nivel de confianza aqu\u00ed no ser\u00e1 mayor que el nivel de confianza hacia esa persona u organizaci\u00f3n.<\/p>\n<p>Tambi\u00e9n hay que tener en cuenta que los datos registrados en el blockchain est\u00e1n disponibles para todos. En este sentido, el blockchain (especialmente el p\u00fablico) no es adecuado para almacenar informaci\u00f3n confidencial. Sin embargo, el hecho de que la informaci\u00f3n en el blockchain no se pueda modificar puede ayudar a prevenir o investigar diversos tipos de fraude.<\/p>\n<p>Las aplicaciones descentralizadas de Ethereum ser\u00e1n m\u00e1s convenientes si se paga por su uso con criptomonedas. Cuantas m\u00e1s personas posean criptomonedas o est\u00e9n dispuestas a adquirirlas, m\u00e1s popularidad obtendr\u00e1n las aplicaciones DApp y los contratos inteligentes.<\/p>\n<p>Entre los problemas generales del blockchain que dificultan su aplicaci\u00f3n pr\u00e1ctica se pueden mencionar la limitada velocidad de adici\u00f3n de nuevos bloques y el costo relativamente alto de las transacciones. Sin embargo, las tecnolog\u00edas en este \u00e1mbito est\u00e1n en desarrollo activo, y hay esperanza de que los problemas t\u00e9cnicos se solucionen con el tiempo.<\/p>\n<p>Otro problema es que los contratos inteligentes del blockchain de Ethereum operan en un entorno aislado de m\u00e1quinas 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\u00edsicos (sensores, contactos, etc.), ni puede enviar datos a ning\u00fan dispositivo externo. Este problema y sus posibles soluciones se discutir\u00e1n en la lecci\u00f3n dedicada a los llamados or\u00e1culos, intermediarios informativos de los contratos inteligentes.<\/p>\n<p>Tambi\u00e9n existen limitaciones en el \u00e1mbito legislativo. En algunos pa\u00edses, por ejemplo, se proh\u00edbe 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\u00f3n del pa\u00eds bajo cuya jurisdicci\u00f3n se encuentra su proyecto.<\/p>\n<h3>\u00bfC\u00f3mo se forma una cadena de bloques?<\/h3>\n<p>\nComo ya mencionamos, la blockchain es una simple cadena de bloques de datos. Primero se forma el primer bloque de esta cadena, luego se a\u00f1ade el segundo y as\u00ed sucesivamente. Se supone que los datos de las transacciones se almacenan en bloques y se a\u00f1aden al \u00faltimo bloque.<\/p>\n<p>En la figura 1.1 mostramos la variante m\u00e1s simple de la secuencia de bloques, donde el primer bloque se refiere al siguiente. <\/p>\n<p><img decoding=\"async\" alt=\"El libro \u00abCreaci\u00f3n de contratos inteligentes en Solidity para la cadena de bloques Ethereum. Gu\u00eda pr\u00e1ctica\u00bb\" src=\"\/wp-content\/uploads\/2019\/10\/23ca04ba2c8914334032523d01bf8b80.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Figura 1.1. Secuencia simple de bloques<\/i><\/p>\n<p>En esta variante, sin embargo, es muy f\u00e1cil falsificar el contenido de cualquier bloque en la cadena, ya que los bloques no contienen ninguna informaci\u00f3n para proteger contra cambios. Dado que la blockchain est\u00e1 destinada a ser utilizada por personas y empresas que no conf\u00edan entre s\u00ed, se puede concluir que tal m\u00e9todo de almacenamiento de datos no es adecuado para blockchain.<\/p>\n<p>Vamos a proteger los bloques contra la falsificaci\u00f3n. En la primera etapa, intentaremos proteger cada bloque con un resumen de verificaci\u00f3n (figura 1.2).<\/p>\n<p><img decoding=\"async\" alt=\"El libro \u00abCreaci\u00f3n de contratos inteligentes en Solidity para la cadena de bloques Ethereum. Gu\u00eda pr\u00e1ctica\u00bb\" src=\"\/wp-content\/uploads\/2019\/10\/141502accec14e868a9382c612cfc791.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Figura 1.2. A\u00f1adiendo protecci\u00f3n de datos de los bloques con un resumen de verificaci\u00f3n<\/i><\/p>\n<p>Ahora un atacante no puede simplemente modificar un bloque, ya que contiene el resumen de verificaci\u00f3n de los datos del bloque. La verificaci\u00f3n del resumen de verificaci\u00f3n mostrar\u00e1 que los datos han sido alterados.<\/p>\n<p>Para calcular el resumen de verificaci\u00f3n, 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\u00f3n hash. <\/p>\n<p>Incluso con un peque\u00f1o cambio en el contenido del bloque de datos, el valor de la funci\u00f3n hash tambi\u00e9n cambiar\u00e1. Al analizar el valor de la funci\u00f3n hash, es imposible recuperar el bloque de datos para el cual fue calculada.<\/p>\n<p>\u00bfSer\u00e1 suficiente esta protecci\u00f3n? Desafortunadamente, no.<\/p>\n<p>En este esquema, el resumen de verificaci\u00f3n (funci\u00f3n hash) solo protege bloques individuales, pero no toda la cadena de bloques. Sabiendo el algoritmo de c\u00e1lculo de la funci\u00f3n hash, un atacante puede f\u00e1cilmente sustituir el contenido del bloque. Tambi\u00e9n nada le impide eliminar bloques de la cadena o a\u00f1adir nuevos.<\/p>\n<p>Para proteger toda la cadena en su conjunto, se puede almacenar en cada bloque junto con los datos tambi\u00e9n el hash de los datos del bloque anterior (figura 1.3).<\/p>\n<p><img decoding=\"async\" alt=\"El libro \u00abCreaci\u00f3n de contratos inteligentes en Solidity para la cadena de bloques Ethereum. Gu\u00eda pr\u00e1ctica\u00bb\" src=\"\/wp-content\/uploads\/2019\/10\/f414ab67dbabc763c537a430e01ed065.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Figura 1.3. A\u00f1adiendo al bloque de datos el hash del bloque anterior<\/i><\/p>\n<p>En este esquema, para cambiar alg\u00fan bloque, es necesario recalcular las funciones hash de todos los bloques posteriores. \u00bfCu\u00e1l es el problema?<\/p>\n<p>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\u00e1 extremadamente dif\u00edcil.<\/p>\n<p>Recordemos tambi\u00e9n 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\u00f3n de un bloque, ya que los cambios deben hacerse en todos los nodos de la red.<\/p>\n<p>Dado que los bloques almacenan informaci\u00f3n sobre el bloque anterior, se puede verificar el contenido de todos los bloques de la cadena.<\/p>\n<h3>Blockchain de Ethereum<\/h3>\n<p>\nEl 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\u00f3n Solidity.<\/p>\n<p>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\u00f3n con el blockchain de Ethereum y los contratos inteligentes en Solidity.<\/p>\n<h3>Miner\u00eda o c\u00f3mo se crean los bloques<\/h3>\n<p>\nLa miner\u00eda (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 \u2018extraer criptomonedas\u2019. La miner\u00eda garantiza el funcionamiento del blockchain, ya que este proceso es el encargado de a\u00f1adir transacciones al blockchain de Ethereum.<\/p>\n<p>Las personas y organizaciones que se dedican a agregar bloques se llaman mineros (miner).<br \/>\nEl software (SO) que funciona en los nodos de los mineros intenta encontrar para el \u00faltimo bloque un par\u00e1metro de hash llamado Nonce, para que se obtenga un determinado valor de la funci\u00f3n 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. <\/p>\n<p>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\u00f1ade 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\u00e1.<\/p>\n<p>As\u00ed, los mineros de Ethereum aseguran el funcionamiento de la red al a\u00f1adir bloques y reciben criptomonedas a cambio. En internet encontrar\u00e1s mucha informaci\u00f3n sobre mineros y miner\u00eda, pero nosotros nos centraremos en la creaci\u00f3n de contratos Solidity y aplicaciones descentralizadas DApp en la red Ethereum.<\/p>\n<h3>Resumen de la lecci\u00f3n<\/h3>\n<p>\nEn la primera lecci\u00f3n 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\u00eda recalcular todos los bloques posteriores en muchos nodos de la red, lo que consume muchos recursos y tiempo.<\/p>\n<p>El blockchain se puede usar para almacenar los resultados de la ejecuci\u00f3n de transacciones. Su principal prop\u00f3sito es organizar la ejecuci\u00f3n segura de transacciones entre partes (personas y organizaciones) que no conf\u00edan mutuamente. Aprendiste en qu\u00e9 \u00e1reas de negocio y en qu\u00e9 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.<\/p>\n<p>Tambi\u00e9n aprendiste que al utilizar blockchain pueden surgir varios problemas. Estos incluyen la verificaci\u00f3n de la informaci\u00f3n a\u00f1adida 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\u00ed como posibles ataques de delincuentes destinados a robar fondos en criptomonedas de las cuentas de los usuarios.<\/p>\n<p>Adem\u00e1s, hablamos brevemente sobre la miner\u00eda como el proceso de a\u00f1adir nuevos bloques al blockchain. La miner\u00eda es necesaria para ejecutar transacciones. Aquellos que se dedican a la miner\u00eda garantizan el funcionamiento del blockchain y reciben recompensas en criptomonedas por ello.<\/p>\n<p><b class=\"spoiler_title\">Lecci\u00f3n 2. Preparaci\u00f3n del entorno de trabajo en Ubuntu y Debian<\/b>Elecci\u00f3n del sistema operativo<br \/>\nInstalaci\u00f3n de utilidades necesarias<br \/>\nInstalaci\u00f3n de Geth y Swarm en Ubuntu<br \/>\nInstalaci\u00f3n de Geth y Swarm en Debian<br \/>\nPreparaci\u00f3n previa<br \/>\nDescarga del distribuidor de Go<br \/>\nConfiguraci\u00f3n de variables de entorno<br \/>\nVerificaci\u00f3n de la versi\u00f3n de Go<br \/>\nInstalaci\u00f3n de Geth y Swarm<br \/>\nCreamos una blockchain privada<br \/>\n\u0413\u043e\u0442\u043e\u0432\u0438\u043c \u0444\u0430\u0439\u043b genesis.json<br \/>\nCreamos un directorio de trabajo<br \/>\nCreamos una cuenta<br \/>\nIniciamos la inicializaci\u00f3n del nodo<br \/>\nPar\u00e1metros de inicio del nodo<br \/>\nConectamos a nuestro nodo<br \/>\nGesti\u00f3n de miner\u00eda y verificaci\u00f3n de saldo<br \/>\nFinalizando la consola de Geth<br \/>\nResumen de la lecci\u00f3n<\/p>\n<p><b class=\"spoiler_title\">Lecci\u00f3n 3. Preparaci\u00f3n del entorno de trabajo en Raspberry Pi 3<\/b>Preparaci\u00f3n de Raspberry Pi 3 para el trabajo<br \/>\nInstalaci\u00f3n de Raspbian<br \/>\nInstalaci\u00f3n de actualizaciones<br \/>\nActivaci\u00f3n del acceso SSH<br \/>\nConfiguraci\u00f3n de una direcci\u00f3n IP est\u00e1tica<br \/>\nInstalaci\u00f3n de utilidades necesarias<br \/>\nInstalaci\u00f3n de Go<br \/>\nDescarga del distribuidor de Go<br \/>\nConfiguraci\u00f3n de variables de entorno<br \/>\nVerificaci\u00f3n de la versi\u00f3n de Go<br \/>\nInstalaci\u00f3n de Geth y Swarm<br \/>\nCreamos una blockchain privada<br \/>\nVerificaci\u00f3n de cuenta y saldo<br \/>\nResumen de la lecci\u00f3n<\/p>\n<p><b class=\"spoiler_title\">Lecci\u00f3n 4. Cuentas y transferencia de fondos entre cuentas<\/b>Visualizaci\u00f3n y adici\u00f3n de cuentas<br \/>\nVisualizaci\u00f3n de la lista de cuentas<br \/>\nAdici\u00f3n de cuenta<br \/>\nPar\u00e1metros del comando geth account<br \/>\nContrase\u00f1as de cuentas<br \/>\nCriptomoneda en Ethereum<br \/>\nUnidades de dinero Ethereum<br \/>\nDeterminando el saldo actual de nuestras cuentas<br \/>\nTransferencia de fondos de una cuenta a otra<br \/>\nM\u00e9todo eth.sendTransaction<br \/>\nVisualizaci\u00f3n del estado de la transacci\u00f3n<br \/>\nRecibo de la transacci\u00f3n<br \/>\nResumen de la lecci\u00f3n<\/p>\n<p><b class=\"spoiler_title\">Lecci\u00f3n 5. Publicaci\u00f3n del primer contrato<\/b>Smart contracts en Ethereum<br \/>\nEjecuci\u00f3n de un smart contract<br \/>\nM\u00e1quina virtual de Ethereum<br \/>\nEntorno de desarrollo integrado Remix Solidity IDE<br \/>\nInicio de la compilaci\u00f3n<br \/>\nLlamada a funciones del contrato<br \/>\nPublicaci\u00f3n del contrato en la red privada<br \/>\nObteniendo la definici\u00f3n ABI y el c\u00f3digo binario del contrato<br \/>\nPublicaci\u00f3n del contrato<br \/>\nVerificaci\u00f3n del estado de la transacci\u00f3n de publicaci\u00f3n del contrato<br \/>\nLlamada a funciones del contrato<br \/>\nCompilador por lotes solc<br \/>\nInstalaci\u00f3n de solc en Ubuntu<br \/>\nInstalaci\u00f3n de solc en Debian<br \/>\nCompilaci\u00f3n del contrato HelloSol<br \/>\nPublicaci\u00f3n del contrato<br \/>\nInstalaci\u00f3n de solc en Raspbian<br \/>\nResumen de la lecci\u00f3n<\/p>\n<p><b class=\"spoiler_title\">\u0423\u0440\u043e\u043a 6. \u0421\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u044b \u0438 Node.js<\/b>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 Node.js<br \/>\nInstalaci\u00f3n en Ubuntu<br \/>\nInstalaci\u00f3n en Debian<br \/>\nInstalaci\u00f3n y ejecuci\u00f3n de Ganache-cli<br \/>\nInstalaci\u00f3n de Web3<br \/>\nInstalaci\u00f3n de solc<br \/>\nInstalaci\u00f3n de Node.js en Raspbian<br \/>\nScript para obtener la lista de cuentas en la consola<br \/>\nScript para publicar un smart contract<br \/>\nEjecuci\u00f3n y obtenci\u00f3n de par\u00e1metros<br \/>\nObtenci\u00f3n de par\u00e1metros de inicio<br \/>\nCompilaci\u00f3n del contrato<br \/>\nDesbloqueo de la cuenta<br \/>\nCarga de ABI y c\u00f3digo binario del contrato<br \/>\nEstimaci\u00f3n de la cantidad de gas necesaria<br \/>\nCreaci\u00f3n del objeto y inicio de la publicaci\u00f3n del contrato<br \/>\nInicio del script de publicaci\u00f3n del contrato<br \/>\nLlamada a funciones del smart contract<br \/>\n\u00bfEs posible actualizar un smart contract publicado?<br \/>\nTrabajando con Web3 versi\u00f3n 1.0.x<br \/>\nObteniendo la lista de cuentas<br \/>\nPublicaci\u00f3n del contrato<br \/>\nLlamada a funciones del contrato<br \/>\nTransferencia de fondos de una cuenta a otra<br \/>\nTransferencia de fondos a la cuenta del contrato<br \/>\nActualizando el smart contract HelloSol<br \/>\nCreamos un script para ver el saldo de la cuenta<br \/>\n\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 getBalance \u0432 \u0441\u043a\u0440\u0438\u043f\u0442 call_contract_get_promise.js<br \/>\nRecargando el saldo del smart contract<br \/>\nResumen de la lecci\u00f3n<\/p>\n<p><b class=\"spoiler_title\">Lecci\u00f3n 7. Introducci\u00f3n a Truffle<\/b>Instalaci\u00f3n de Truffle<br \/>\nCreamos el proyecto HelloSol<br \/>\nCreaci\u00f3n del directorio y los archivos del proyecto<br \/>\nDirectorio contracts<br \/>\nDirectorio migrations<br \/>\nDirectorio test<br \/>\n\u0424\u0430\u0439\u043b truffle-config.js<br \/>\nCompilaci\u00f3n del contrato HelloSol<br \/>\nLanzamiento de la publicaci\u00f3n del contrato<br \/>\nLlamada a las funciones del contrato HelloSol en la consola de Truffle<br \/>\n\u0412\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 HelloSol \u0438\u0437 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 JavaScript \u043f\u043e\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c Node.js<br \/>\nInstalaci\u00f3n del m\u00f3dulo truffle-contract<br \/>\nLlamada a las funciones del contrato getValue y getString<br \/>\nLlamada a las funciones del contrato setValue y setString<br \/>\nCambio del contrato y nueva publicaci\u00f3n<br \/>\nTrabajando con Web3 versi\u00f3n 1.0.x<br \/>\nRealizamos modificaciones en el contrato inteligente HelloSol<br \/>\nScripts para llamar a los m\u00e9todos del contrato<br \/>\nPruebas en Truffle<br \/>\nPrueba en Solidity<br \/>\nPrueba en JavaScript<br \/>\nResumen de la lecci\u00f3n<\/p>\n<p><b class=\"spoiler_title\">Lecci\u00f3n 8. Tipos de datos de Solidity<\/b>Contrato para estudiar los tipos de datos<br \/>\nTipos de datos l\u00f3gicos<br \/>\nN\u00fameros enteros sin signo y enteros con signo<br \/>\nN\u00fameros de punto fijo<br \/>\nDirecci\u00f3n<br \/>\nVariables de tipos complejos<br \/>\nArreglos de tama\u00f1o fijo<br \/>\nArreglos din\u00e1micos<br \/>\nEnumeraci\u00f3n<br \/>\nEstructuras<br \/>\nDiccionarios mapping<br \/>\nResumen de la lecci\u00f3n<\/p>\n<p><b class=\"spoiler_title\">Lecci\u00f3n 9. Migraci\u00f3n de contratos a una red privada y a la red Rinkeby<\/b>Publicaci\u00f3n de un contrato desde Truffle en la red privada Geth<br \/>\nPreparaci\u00f3n del nodo de la red privada<br \/>\nPreparaci\u00f3n del contrato para el funcionamiento<br \/>\nCompilaci\u00f3n y migraci\u00f3n del contrato a la red de Truffle<br \/>\nLanzamiento de la migraci\u00f3n en la red local geth<br \/>\nGeneraci\u00f3n de artefactos de Truffle<br \/>\nPublicaci\u00f3n de un contrato desde Truffle en la red de prueba Rinkeby<br \/>\nPreparaci\u00f3n del nodo Geth para trabajar con Rinkeby<br \/>\nSincronizaci\u00f3n del nodo<br \/>\nAdici\u00f3n de cuentas<br \/>\nRecarga de la cuenta de Rinkeby con Ether<br \/>\nLanzamiento de la migraci\u00f3n del contrato en la red Rinkeby<br \/>\nVisualizaci\u00f3n de la informaci\u00f3n del contrato en la red Rinkeby<br \/>\nConsola de Truffle para la red Rinkeby<br \/>\nUna forma m\u00e1s sencilla de llamar a las funciones del contrato<br \/>\n\u0412\u044b\u0437\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Node.js<br \/>\nTransferencia de fondos entre cuentas en la consola de Truffle para Rinkeby<br \/>\nResumen de la lecci\u00f3n<\/p>\n<p><b class=\"spoiler_title\">Lecci\u00f3n 10. Almacenamiento de datos descentralizado Ethereum Swarm<\/b>C\u00f3mo funciona Ethereum Swarm<br \/>\nInstalaci\u00f3n y lanzamiento de Swarm<br \/>\nOperaciones con archivos y directorios<br \/>\nCargar un archivo en Ethereum Swarm<br \/>\nLeer un archivo de Ethereum Swarm<br \/>\nVisualizaci\u00f3n del manifiesto del archivo cargado<br \/>\nCargando directorios con subdirectorios<br \/>\nLeer un archivo del directorio cargado<br \/>\nUso de la puerta de enlace p\u00fablica Swarm<br \/>\n\u041e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a Swarm \u0438\u0437 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 Node.js<br \/>\nM\u00f3dulo Perl Net::Ethereum::Swarm<br \/>\nInstalaci\u00f3n del m\u00f3dulo Net::Ethereum::Swarm<br \/>\nEscritura y lectura de datos<br \/>\nResumen de la lecci\u00f3n<\/p>\n<p><b class=\"spoiler_title\">Lecci\u00f3n 11. Marco Web3.py para trabajar con Ethereum en Python<\/b>Instalaci\u00f3n de Web3.py<br \/>\nActualizaci\u00f3n e instalaci\u00f3n de los paquetes necesarios<br \/>\nInstalaci\u00f3n del m\u00f3dulo easysolc<br \/>\nPublicaci\u00f3n del contrato usando Web3.py<br \/>\nCompilaci\u00f3n del contrato<br \/>\nConexi\u00f3n al proveedor<br \/>\nEjecuci\u00f3n de la publicaci\u00f3n del contrato<br \/>\nGuardar la direcci\u00f3n del contrato y el abi en un archivo<br \/>\nInicio del script de publicaci\u00f3n del contrato<br \/>\nLlamada a los m\u00e9todos del contrato<br \/>\nLeer la direcci\u00f3n y el abi del contrato del archivo JSON<br \/>\nConexi\u00f3n al proveedor<br \/>\nCreaci\u00f3n del objeto del contrato<br \/>\nLlamada a los m\u00e9todos del contrato<br \/>\nTruffle y Web3.py<br \/>\nResumen de la lecci\u00f3n<\/p>\n<p><b class=\"spoiler_title\">Lecci\u00f3n 12. Or\u00e1culos<\/b>\u00bfPuede un contrato inteligente confiar en datos del mundo exterior?<br \/>\nOr\u00e1culos como intermediarios de informaci\u00f3n del blockchain<br \/>\nFuente de datos<br \/>\nC\u00f3digo para representar datos de la fuente<br \/>\nOr\u00e1culo para registrar el tipo de cambio en el blockchain<br \/>\nContrato USDRateOracle<br \/>\nActualizaci\u00f3n del tipo de cambio en el contrato inteligente<br \/>\nUso de un proveedor Web Socket<br \/>\nEsperando el evento RateUpdate<br \/>\nManejo del evento RateUpdate<br \/>\nIniciando la actualizaci\u00f3n de datos en el contrato inteligente<br \/>\nResumen de la lecci\u00f3n<\/p>\n<p>Fuente: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/467347\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0411\u043e\u043b\u044c\u0448\u0435 \u0433\u043e\u0434\u0430 \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043d\u0430\u0434 \u043a\u043d\u0438\u0433\u043e\u0439 \u00ab\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 Solidity \u0434\u043b\u044f \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0430 Ethereum. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u00bb, \u0438 \u0432\u043e\u0442 \u0442\u0435\u043f\u0435\u0440\u044c \u044d\u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430, \u0430 \u043a\u043d\u0438\u0433\u0430 \u0438\u0437\u0434\u0430\u043d\u0430 \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0432 \u041b\u0438\u0442\u0440\u0435\u0441\u0435. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u043c\u043e\u044f \u043a\u043d\u0438\u0433\u0430 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432 Solidity \u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 DApp \u0434\u043b\u044f \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0430 Ethereum. \u041e\u043d\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 12 \u0443\u0440\u043e\u043a\u043e\u0432 \u0441 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0437\u0430\u0434\u0430\u043d\u0438\u044f\u043c\u0438. \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0432 \u0438\u0445, \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":29275,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-39018","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/es\/blog\/news\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u043d\u0438\u0433\u0430 \u00ab\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 Solidity \u0434\u043b\u044f \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0430 Ethereum. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u00bb | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/news\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:27:25+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:27:25+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Libro 'Creaci\u00f3n de contratos inteligentes Solidity para el blockchain de Ethereum. Gu\u00eda pr\u00e1ctica' | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/es\/blog\/news\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u043d\u0438\u0433\u0430 \u00ab\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 Solidity \u0434\u043b\u044f \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0430 Ethereum. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u00bb | ProHoster","og:url":"https:\/\/prohoster.info\/es\/blog\/news\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:27:25+00:00","article:modified_time":"2019-10-31T19:27:25+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"39018","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-24 00:24:24","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 00:58:39","updated":"2026-01-24 00:24:24","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/39018","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=39018"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/39018\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/29275"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=39018"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=39018"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=39018"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}