{"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\/pt\/blog\/news\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo","title":{"rendered":"Livro \"Desenvolvimento de contratos inteligentes em Solidity para a blockchain Ethereum. Guia Pr\u00e1tico\"","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Livro &quot;Desenvolvimento de contratos inteligentes em Solidity para a blockchain Ethereum. Guia Pr\u00e1tico&quot;\" src=\"\/wp-content\/uploads\/2019\/10\/9549e708e99fef6892045ff854231fa7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nMais de um ano estive trabalhando no livro 'Criando contratos inteligentes Solidity para a blockchain Ethereum. Guia Pr\u00e1tico', e agora este trabalho est\u00e1 conclu\u00eddo, e o livro <noindex><a rel=\"nofollow\" href=\"https:\/\/www.litres.ru\/aleksandr-frolov-198\/sozdanie-smart-kontraktov-solidity-dlya-blokcheyna-et\/\">foi publicado e est\u00e1 dispon\u00edvel no Litres<\/a><\/noindex>.<\/p>\n<p>Espero que meu livro ajude a come\u00e7ar rapidamente a criar contratos inteligentes Solidity e aplicativos descentralizados DApp para a blockchain Ethereum. Ele consiste em 12 li\u00e7\u00f5es com tarefas pr\u00e1ticas. Ao complet\u00e1-las, o leitor poder\u00e1 criar seus pr\u00f3prios n\u00f3s locais Ethereum, publicar contratos inteligentes e chamar seus m\u00e9todos, trocar dados entre o mundo real e os contratos inteligentes com a ajuda de or\u00e1culos, e trabalhar com a rede de testes Rinkeby. <\/p>\n<p>O livro \u00e9 destinado a todos que est\u00e3o interessados em tecnologias avan\u00e7adas no campo das blockchains e desejam obter rapidamente conhecimentos que lhes permitam trabalhar em atividades interessantes e promissoras.<\/p>\n<p>Abaixo voc\u00ea encontrar\u00e1 o \u00edndice e o primeiro cap\u00edtulo do livro (tamb\u00e9m na <noindex><a rel=\"nofollow\" href=\"https:\/\/www.litres.ru\/aleksandr-frolov-198\/sozdanie-smart-kontraktov-solidity-dlya-blokcheyna-et\/\">Litres<\/a><\/noindex> est\u00e3o dispon\u00edveis trechos do livro). Espero receber feedback, coment\u00e1rios e sugest\u00f5es. Tudo isso tentarei levar em conta na prepara\u00e7\u00e3o da pr\u00f3xima edi\u00e7\u00e3o do livro.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<b class=\"spoiler_title\">\u00cdndice<\/b><b class=\"spoiler_title\">Introdu\u00e7\u00e3o<\/b>Nosso livro \u00e9 destinado \u00e0queles que querem n\u00e3o apenas entender os princ\u00edpios de funcionamento da blockchain Ethereum, mas tamb\u00e9m adquirir habilidades pr\u00e1ticas na cria\u00e7\u00e3o de aplicativos descentralizados DApp na linguagem de programa\u00e7\u00e3o Solidity para essa rede.<\/p>\n<p>Este livro \u00e9 melhor n\u00e3o apenas para ler, mas para trabalhar com ele, realizando as tarefas pr\u00e1ticas descritas nas li\u00e7\u00f5es. Para trabalhar, voc\u00ea precisar\u00e1 de um computador local, um servidor virtual ou em nuvem com o sistema operacional Debian ou Ubuntu instalado. Para a realiza\u00e7\u00e3o de muitas tarefas, \u00e9 poss\u00edvel usar tamb\u00e9m o Raspberry Pi.<\/p>\n<p><b>Na primeira li\u00e7\u00e3o <\/b>vamos explorar os princ\u00edpios de funcionamento da blockchain Ethereum e a terminologia b\u00e1sica, al\u00e9m de discutir onde essa blockchain pode ser utilizada. <\/p>\n<p>O objetivo <b>a segunda li\u00e7\u00e3o<\/b> \u2014 criar um n\u00f3 de blockchain Ethereum privado para trabalhos futuros no \u00e2mbito deste curso em um servidor Ubuntu e Debian. Vamos examinar as particularidades da instala\u00e7\u00e3o das principais utilidades, como geth, que proporciona o funcionamento do n\u00f3 da nossa blockchain, assim como o daemon de armazenamento descentralizado swarm.<\/p>\n<p><b>A terceira li\u00e7\u00e3o<\/b> o ensinar\u00e1 a realizar experimentos com Ethereum em um barato microcomputador Raspberry Pi. Voc\u00ea instalar\u00e1 o sistema operacional (SO) Rasberian no Raspberry Pi, a ferramenta Geth, que permite o funcionamento do n\u00f3 blockchain, assim como o daemon de armazenamento descentralizado Swarm.<\/p>\n<p><b>Quarta aula<\/b> \u00e9 dedicada \u00e0s contas e unidades de criptomoeda na rede Ethereum, al\u00e9m das formas de transferir fundos de uma conta para outra a partir do console Geth. Voc\u00ea aprender\u00e1 a criar contas, iniciar transa\u00e7\u00f5es de transfer\u00eancia de fundos, obter o estado da transa\u00e7\u00e3o e seu recibo.<\/p>\n<p><b>Na quinta aula<\/b> voc\u00ea ser\u00e1 apresentado aos contratos inteligentes na rede Ethereum e aprender\u00e1 sobre sua execu\u00e7\u00e3o pela m\u00e1quina virtual Ethereum. <\/p>\n<p>Voc\u00ea criar\u00e1 e publicar\u00e1 em uma rede privada Ethereum seu primeiro contrato inteligente e aprender\u00e1 a chamar suas fun\u00e7\u00f5es. Para isso, voc\u00ea usar\u00e1 o ambiente de desenvolvimento Remix Solidity IDE. Al\u00e9m disso, voc\u00ea aprender\u00e1 a instalar e usar o compilador em lote solc.<br \/>\nTamb\u00e9m abordaremos o que \u00e9 conhecido como interface bin\u00e1ria de aplicativo Application Binary Interface (ABI) e ensinaremos a utiliz\u00e1-la.<\/p>\n<p><b>Sexta aula<\/b> \u00e9 dedicada \u00e0 cria\u00e7\u00e3o de scripts JavaScript que operam sob Node.js e realizam opera\u00e7\u00f5es com contratos inteligentes Solidity.<\/p>\n<p>Voc\u00ea instalar\u00e1 o Node.js no SO Ubuntu, Debian e Rasberian, escrever\u00e1 scripts para publicar um contrato inteligente na rede local Ethereum e chamar suas fun\u00e7\u00f5es. <\/p>\n<p>Al\u00e9m disso, voc\u00ea aprender\u00e1 a transferir fundos entre contas comuns usando scripts, assim como credit\u00e1-los \u00e0s contas de contratos inteligentes.<\/p>\n<p><b>Na s\u00e9tima aula<\/b> voc\u00ea aprender\u00e1 a instalar e usar o popular ambiente integrado Truffle, que \u00e9 bastante utilizado pelos desenvolvedores de contratos inteligentes Solidity. Voc\u00ea aprender\u00e1 a criar scripts JavaScript que chamam as fun\u00e7\u00f5es dos contratos usando o m\u00f3dulo truffle-contract, al\u00e9m de testar seu contrato inteligente com as ferramentas do Truffle.<\/p>\n<p><b>Oitava aula<\/b> \u00e9 dedicada aos tipos de dados Solidity. Voc\u00ea escrever\u00e1 contratos inteligentes que trabalham com tipos de dados como inteiros com sinal e sem sinal, n\u00fameros com sinal, strings, endere\u00e7os, vari\u00e1veis de tipos complexos, arrays, enums, structs e dicion\u00e1rios.<\/p>\n<p><b>Na nona aula<\/b> Voc\u00ea dar\u00e1 mais um passo em dire\u00e7\u00e3o \u00e0 cria\u00e7\u00e3o de contratos inteligentes para a rede principal Ethereum. Voc\u00ea aprender\u00e1 a publicar contratos usando o Truffle em uma rede privada Geth, bem como em uma rede de testes Rinkeby. A depura\u00e7\u00e3o do contrato inteligente na rede Rinkeby \u00e9 muito \u00fatil antes de sua publica\u00e7\u00e3o na rede principal \u2014 l\u00e1 tudo \u00e9 praticamente real, mas gr\u00e1tis.<\/p>\n<p>Neste m\u00f3dulo, voc\u00ea criar\u00e1 um n\u00f3 da rede de testes Rinkeby, o financiar\u00e1 e publicar\u00e1 um contrato inteligente.<\/p>\n<p><b>Aula 10<\/b> \u00e9 dedicada aos armaz\u00e9ns de dados descentralizados Ethereum Swarm. Usando armaz\u00e9ns descentralizados, voc\u00ea economiza no armazenamento de grandes volumes de dados na blockchain Ethereum. <\/p>\n<p>Neste m\u00f3dulo, voc\u00ea criar\u00e1 um armazenamento local Swarm, realizar\u00e1 opera\u00e7\u00f5es de grava\u00e7\u00e3o e leitura de arquivos, bem como de diret\u00f3rios com arquivos. Depois, voc\u00ea aprender\u00e1 a trabalhar com um gateway p\u00fablico Swarm, escrever\u00e1 scripts para acessar o Swarm a partir do Node.js, al\u00e9m de utilizar o m\u00f3dulo Perl Net::Ethereum::Swarm.<\/p>\n<p><b>O objetivo da aula 11<\/b> \u00e9 dominar o trabalho com contratos inteligentes Solidity utilizando a popular linguagem de programa\u00e7\u00e3o Python e o framework Web3.py. Voc\u00ea instalar\u00e1 este framework, escrever\u00e1 scripts para compilar e publicar contratos inteligentes, bem como para invocar suas fun\u00e7\u00f5es. O Web3.py ser\u00e1 usado tanto de forma independente quanto em conjunto com o ambiente de desenvolvimento integrado Truffle.<\/p>\n<p><b>Na aula 12<\/b> voc\u00ea aprender\u00e1 a transmitir dados entre contratos inteligentes e o mundo real usando or\u00e1culos. Isso ser\u00e1 \u00fatil para obter dados de websites, dispositivos de Internet das Coisas (IoT), v\u00e1rios aparelhos e sensores, e enviar dados de contratos inteligentes para esses dispositivos. Na parte pr\u00e1tica da aula, voc\u00ea criar\u00e1 um or\u00e1culo e um contrato inteligente que receber\u00e1 a taxa de c\u00e2mbio atual do USD para rubros do site do Banco Central da R\u00fassia.<\/p>\n<p><b class=\"spoiler_title\">Aula 1. Breve introdu\u00e7\u00e3o ao blockchain e \u00e0 rede Ethereum<\/b><b>Objetivo da aula:<\/b> conhecer os princ\u00edpios de funcionamento do blockchain Ethereum, suas \u00e1reas de aplica\u00e7\u00e3o e a terminologia b\u00e1sica.<br \/>\n<b>Exerc\u00edcios pr\u00e1ticos:<\/b> nesta aula n\u00e3o est\u00e3o previstos.<\/p>\n<p>\u00c9 dif\u00edcil hoje encontrar um desenvolvedor de software que nunca tenha ouvido falar da tecnologia blockchain, criptomoedas, bitcoins, ofertas iniciais de moedas (ICO) e contratos inteligentes, bem como de outros conceitos e termos relacionados ao blockchain.<\/p>\n<p>A tecnologia blockchain abre novos mercados e cria empregos para programadores. Se voc\u00ea entender todos os detalhes das tecnologias de criptomoedas e contratos inteligentes, n\u00e3o deve ter problemas em aplicar esse conhecimento na pr\u00e1tica.<\/p>\n<p>\u00c9 preciso dizer que h\u00e1 muitas especula\u00e7\u00f5es em torno das criptomoedas e dos blockchains. Vamos deixar de lado as discuss\u00f5es sobre as varia\u00e7\u00f5es de pre\u00e7os das criptomoedas, a cria\u00e7\u00e3o de pir\u00e2mides, as sutilezas da legisla\u00e7\u00e3o sobre criptomoedas, etc. Em nosso curso, vamos nos concentrar principalmente nos aspectos t\u00e9cnicos da aplica\u00e7\u00e3o de contratos inteligentes no blockchain Ethereum (\u00e9thereum, ether) e no desenvolvimento de aplicativos descentralizados (Distributed Application, DApp).<\/p>\n<h3>O que \u00e9 blockchain<\/h3>\n<p>\nO blockchain (Blockchain, Block Chain) \u00e9 uma cadeia de blocos de dados interligados de uma maneira espec\u00edfica. No in\u00edcio da cadeia est\u00e1 o primeiro bloco, chamado de bloco g\u00eanesis (genesis block) ou bloco de g\u00eanesis. Em seguida, vem o segundo, depois o terceiro, e assim por diante.<\/p>\n<p>Todos esses blocos de dados s\u00e3o automaticamente duplicados em numerosos n\u00f3s da rede blockchain. Isso garante o armazenamento descentralizado dos dados do blockchain. <br \/>\nVoc\u00ea pode imaginar o sistema blockchain como uma grande quantidade de n\u00f3s (servidores f\u00edsicos ou virtuais) interconectados em uma rede, replicando todas as altera\u00e7\u00f5es na cadeia de blocos de dados. \u00c9 como se fosse um gigantesco computador multi-servidor, onde os n\u00f3s desse computador (servidores) podem estar espalhados pelo mundo. E voc\u00ea tamb\u00e9m pode adicionar seu computador \u00e0 rede blockchain. <\/p>\n<h4>Banco de dados distribu\u00eddo<\/h4>\n<p>\nO blockchain pode ser visto como um banco de dados distribu\u00eddo, replicado em todos os n\u00f3s da rede blockchain. Em teoria, o blockchain funcionar\u00e1 enquanto houver pelo menos um n\u00f3 que armazene todos os blocos do blockchain.<\/p>\n<h4>Registro de dados distribu\u00eddo<\/h4>\n<p>\nO blockchain pode ser interpretado como um registro distribu\u00eddo de dados e opera\u00e7\u00f5es (transa\u00e7\u00f5es). Outra denomina\u00e7\u00e3o para esse registro \u00e9 livro-raz\u00e3o. <\/p>\n<p>Em um registro distribu\u00eddo, \u00e9 poss\u00edvel adicionar dados, mas n\u00e3o \u00e9 poss\u00edvel alter\u00e1-los ou exclu\u00ed-los. Essa impossibilidade \u00e9 alcan\u00e7ada, em particular, atrav\u00e9s da aplica\u00e7\u00e3o de algoritmos criptogr\u00e1ficos, algoritmos especiais para adicionar blocos \u00e0 cadeia e armazenamento descentralizado de dados.<\/p>\n<p>Ao adicionar blocos e realizar opera\u00e7\u00f5es (transa\u00e7\u00f5es), s\u00e3o utilizados chaves privadas e p\u00fablicas. Elas restringem os usu\u00e1rios da blockchain, concedendo-lhes acesso apenas aos seus pr\u00f3prios blocos de dados.<\/p>\n<h4>Transa\u00e7\u00f5es<\/h4>\n<p>\nA blockchain armazena informa\u00e7\u00f5es sobre opera\u00e7\u00f5es (transa\u00e7\u00f5es) em blocos. Nesse processo, transa\u00e7\u00f5es antigas, j\u00e1 realizadas, n\u00e3o podem ser revertidas ou modificadas. Novas transa\u00e7\u00f5es s\u00e3o armazenadas em novos blocos adicionados.<\/p>\n<p>Assim, toda a hist\u00f3ria das transa\u00e7\u00f5es pode ser registrada na blockchain de forma imut\u00e1vel. Portanto, a blockchain pode ser utilizada, por exemplo, para o armazenamento seguro de opera\u00e7\u00f5es banc\u00e1rias, informa\u00e7\u00f5es sobre direitos autorais, hist\u00f3rico de altera\u00e7\u00f5es de propriet\u00e1rios de im\u00f3veis, entre outros.<\/p>\n<p>A blockchain Ethereum cont\u00e9m os chamados estados do sistema. \u00c0 medida que as transa\u00e7\u00f5es s\u00e3o realizadas, o estado muda do inicial para o atual. As transa\u00e7\u00f5es s\u00e3o registradas em blocos.<\/p>\n<h4>Blockchains p\u00fablicas e privadas<\/h4>\n<p>\n\u00c9 importante notar que tudo o que foi dito se aplica apenas \u00e0s chamadas redes p\u00fablicas de blockchain, que n\u00e3o podem ser controladas por indiv\u00edduos ou entidades jur\u00eddicas espec\u00edficas, \u00f3rg\u00e3os governamentais ou governos. <br \/>\nAs chamadas redes privadas de blockchain est\u00e3o sob controle total de seus criadores, e tudo \u00e9 poss\u00edvel l\u00e1, por exemplo, a substitui\u00e7\u00e3o completa de todos os blocos da cadeia.<\/p>\n<h4>Aplica\u00e7\u00f5es pr\u00e1ticas da blockchain<\/h4>\n<p>\nPara que a blockchain pode ser \u00fatil?<\/p>\n<p>Resumidamente, a blockchain permite realizar opera\u00e7\u00f5es (transa\u00e7\u00f5es) de forma segura entre pessoas ou empresas que n\u00e3o confiam umas nas outras. Os dados registrados na blockchain (transa\u00e7\u00f5es, dados pessoais, documentos, certificados, contratos, notas fiscais, etc.) n\u00e3o podem ser falsificados ou substitu\u00eddos ap\u00f3s o registro. Portanto, em cima da blockchain, \u00e9 poss\u00edvel criar, por exemplo, registros distribu\u00eddos confi\u00e1veis de diversos tipos de documentos.<\/p>\n<p>Claro, voc\u00ea sabe que sistemas de criptomoeda s\u00e3o criados com base em blockchains, projetados para substituir o dinheiro em papel comum. O dinheiro em papel tamb\u00e9m \u00e9 conhecido como fiduci\u00e1rio (do Fiat Money).<br \/>\nO blockchain garante o armazenamento e a imutabilidade das transa\u00e7\u00f5es registradas em blocos, por isso pode ser usado para criar sistemas de criptomoeda. Ele cont\u00e9m todo o hist\u00f3rico de transfer\u00eancia de ativos criptogr\u00e1ficos entre diferentes usu\u00e1rios (contas), e qualquer opera\u00e7\u00e3o pode ser rastreada.<\/p>\n<p>Embora as opera\u00e7\u00f5es dentro dos sistemas de criptomoeda possam ser an\u00f4nimas, a convers\u00e3o de criptomoeda e sua troca por dinheiro fiduci\u00e1rio geralmente resulta na divulga\u00e7\u00e3o da identidade do propriet\u00e1rio do ativo criptogr\u00e1fico. <\/p>\n<p>Os chamados contratos inteligentes, que s\u00e3o softwares que operam na rede Ethereum, permitem automatizar o processo de formaliza\u00e7\u00e3o de acordos e o controle de seu cumprimento. Isso \u00e9 especialmente eficaz quando o pagamento pelo acordo \u00e9 feito em criptomoeda Ether (\u00e9ter).<\/p>\n<p>O blockchain Ethereum e os contratos inteligentes Ethereum, escritos na linguagem de programa\u00e7\u00e3o Solidity, podem ser usados, por exemplo, nas seguintes \u00e1reas:<\/p>\n<ul>\n<li>alternativa \u00e0 certifica\u00e7\u00e3o notarial de documentos;<\/li>\n<li>armazenamento do registro de bens im\u00f3veis e informa\u00e7\u00f5es sobre opera\u00e7\u00f5es relacionadas a bens im\u00f3veis;<\/li>\n<li>armazenamento de informa\u00e7\u00f5es sobre direitos autorais de propriedades intelectuais (livros, imagens, obras musicais etc.);<\/li>\n<li>cria\u00e7\u00e3o de sistemas de vota\u00e7\u00e3o independente;<\/li>\n<li>setor financeiro e atividades banc\u00e1rias;<\/li>\n<li>log\u00edstica em escala internacional, rastreamento de movimenta\u00e7\u00f5es de cargas;<\/li>\n<li>armazenamento de dados pessoais como uma alternativa ao sistema de identifica\u00e7\u00e3o;<\/li>\n<li>transa\u00e7\u00f5es seguras no setor comercial;<\/li>\n<li>armazenamento de resultados de exames m\u00e9dicos, bem como do hist\u00f3rico de procedimentos prescritos.<\/li>\n<\/ul>\n<p><\/p>\n<h4>Problemas com o blockchain<\/h4>\n<p>\nMas, \u00e9 claro, nem tudo \u00e9 t\u00e3o simples quanto parece! <\/p>\n<p>Existem problemas com a verifica\u00e7\u00e3o de dados antes de serem adicionados ao blockchain (por exemplo, se n\u00e3o s\u00e3o falsificados?), problemas de seguran\u00e7a do software de sistema e aplicativo usado para trabalhar com blockchain, e problemas relacionados \u00e0 possibilidade de usar m\u00e9todos de engenharia social para roubar acesso a carteiras de criptomoeda etc.<\/p>\n<p>Novamente, se estivermos falando de uma blockchain privada pertencente a uma pessoa ou organiza\u00e7\u00e3o, e n\u00e3o de uma blockchain p\u00fablica com n\u00f3s espalhados pelo mundo, o n\u00edvel de confian\u00e7a aqui n\u00e3o ser\u00e1 maior do que o n\u00edvel de confian\u00e7a nessa pessoa ou organiza\u00e7\u00e3o.<\/p>\n<p>Tamb\u00e9m \u00e9 importante considerar que os dados gravados na blockchain tornam-se acess\u00edveis a todos. Nesse sentido, a blockchain (especialmente a p\u00fablica) n\u00e3o \u00e9 adequada para armazenar informa\u00e7\u00f5es confidenciais. No entanto, o fato de que as informa\u00e7\u00f5es na blockchain n\u00e3o podem ser alteradas pode ajudar a prevenir ou investigar diversos tipos de fraudes.<\/p>\n<p>Aplicativos descentralizados do Ethereum ser\u00e3o mais convenientes se forem pagos com criptomoedas. Quanto mais pessoas possu\u00edrem criptomoedas ou estiverem dispostas a adquiri-las, maior ser\u00e1 a popularidade dos aplicativos DApp e dos contratos inteligentes.<\/p>\n<p>Entre os problemas gerais da blockchain que dificultam sua aplica\u00e7\u00e3o pr\u00e1tica, podemos mencionar a velocidade limitada de adi\u00e7\u00e3o de novos blocos e o custo relativamente alto das transa\u00e7\u00f5es. Mas as tecnologias nessa \u00e1rea est\u00e3o se desenvolvendo ativamente, e h\u00e1 esperan\u00e7as de que os problemas t\u00e9cnicos sejam resolvidos com o tempo.<\/p>\n<p>Outro problema \u00e9 que os contratos inteligentes da blockchain Ethereum operam em um ambiente isolado de m\u00e1quinas virtuais e n\u00e3o t\u00eam acesso a dados do mundo real. Em particular, o programa do contrato inteligente n\u00e3o pode ler dados de sites ou de quaisquer dispositivos f\u00edsicos (sensores, contatos, etc.), nem pode enviar dados para quaisquer dispositivos externos. Este problema e as formas de resolv\u00ea-lo ser\u00e3o discutidos na aula dedicada aos chamados Or\u00e1culos \u2013 intermedi\u00e1rios de informa\u00e7\u00e3o para contratos inteligentes.<\/p>\n<p>Existem tamb\u00e9m limita\u00e7\u00f5es legais. Em alguns pa\u00edses, por exemplo, o uso de criptomoedas como meio de pagamento \u00e9 proibido, mas \u00e9 permitido possu\u00ed-las como um ativo digital, semelhante a valores mobili\u00e1rios. Esses ativos podem ser comprados e vendidos em bolsas. Em qualquer caso, ao criar um projeto que lida com criptomoedas, \u00e9 necess\u00e1rio se familiarizar com a legisla\u00e7\u00e3o do pa\u00eds cuja jurisdi\u00e7\u00e3o abrange seu projeto.<\/p>\n<h3>Como \u00e9 formada a cadeia da blockchain<\/h3>\n<p>\nComo j\u00e1 mencionamos, a blockchain \u00e9 uma simples cadeia de blocos de dados. Primeiro, o primeiro bloco dessa cadeia \u00e9 formado, em seguida, adiciona-se o segundo e assim por diante. Os dados das transa\u00e7\u00f5es s\u00e3o supostos serem armazenados nos blocos, e adicionados ao \u00faltimo bloco.<\/p>\n<p>Na Fig. 1.1 mostramos a vers\u00e3o mais simples da sequ\u00eancia de blocos, onde o primeiro bloco aponta para o seguinte. <\/p>\n<p><img decoding=\"async\" alt=\"Livro &quot;Desenvolvimento de contratos inteligentes em Solidity para a blockchain Ethereum. Guia Pr\u00e1tico&quot;\" src=\"\/wp-content\/uploads\/2019\/10\/23ca04ba2c8914334032523d01bf8b80.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Fig. 1.1. Sequ\u00eancia simples de blocos<\/i><\/p>\n<p>Neste formato, no entanto, \u00e9 muito f\u00e1cil falsificar o conte\u00fado de qualquer bloco da cadeia, uma vez que os blocos n\u00e3o cont\u00eam nenhuma informa\u00e7\u00e3o para proteger contra altera\u00e7\u00f5es. Considerando que a blockchain \u00e9 destinada a usu\u00e1rios e empresas que n\u00e3o confiam entre si, pode-se concluir que esse m\u00e9todo de armazenamento de dados n\u00e3o \u00e9 adequado para a blockchain.<\/p>\n<p>Vamos trabalhar na prote\u00e7\u00e3o dos blocos contra falsifica\u00e7\u00f5es. Na primeira etapa, tentaremos proteger cada bloco com um hash (Fig. 1.2).<\/p>\n<p><img decoding=\"async\" alt=\"Livro &quot;Desenvolvimento de contratos inteligentes em Solidity para a blockchain Ethereum. Guia Pr\u00e1tico&quot;\" src=\"\/wp-content\/uploads\/2019\/10\/141502accec14e868a9382c612cfc791.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Fig. 1.2. Adicionando prote\u00e7\u00e3o dos dados do bloco com um hash<\/i><\/p>\n<p>Agora, um invasor n\u00e3o pode simplesmente alterar um bloco, pois ele cont\u00e9m o hash dos dados do bloco. A verifica\u00e7\u00e3o do hash mostrar\u00e1 que os dados foram alterados.<\/p>\n<p>Para calcular o hash, pode-se usar uma das fun\u00e7\u00f5es de hash, como MD-5, SHA-1, SHA-256, etc. As fun\u00e7\u00f5es de hash calculam um determinado valor (por exemplo, em forma de string de texto de comprimento fixo) como resultado da execu\u00e7\u00e3o de opera\u00e7\u00f5es irrevers\u00edveis sobre um bloco de dados. As opera\u00e7\u00f5es dependem do tipo de fun\u00e7\u00e3o de hash. <\/p>\n<p>Mesmo com uma pequena altera\u00e7\u00e3o no conte\u00fado do bloco de dados, o valor da fun\u00e7\u00e3o de hash tamb\u00e9m mudar\u00e1. Analisando o valor da fun\u00e7\u00e3o de hash, n\u00e3o \u00e9 poss\u00edvel recuperar o bloco de dados para o qual ele foi calculado.<\/p>\n<p>Essa prote\u00e7\u00e3o ser\u00e1 suficiente? Infelizmente, n\u00e3o.<\/p>\n<p>Neste esquema, o hash (fun\u00e7\u00e3o hash) protege apenas blocos individuais, mas n\u00e3o toda a cadeia de blocos. Sabendo o algoritmo de c\u00e1lculo da fun\u00e7\u00e3o hash, um invasor pode facilmente alterar o conte\u00fado de um bloco. Al\u00e9m disso, nada impede que ele exclua blocos da cadeia ou adicione novos.<\/p>\n<p>Para proteger toda a cadeia como um todo, pode-se armazenar em cada bloco, juntamente com os dados, tamb\u00e9m o hash dos dados do bloco anterior (Fig. 1.3).<\/p>\n<p><img decoding=\"async\" alt=\"Livro &quot;Desenvolvimento de contratos inteligentes em Solidity para a blockchain Ethereum. Guia Pr\u00e1tico&quot;\" src=\"\/wp-content\/uploads\/2019\/10\/f414ab67dbabc763c537a430e01ed065.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Fig. 1.3. Adicionando ao bloco de dados o hash do bloco anterior<\/i><\/p>\n<p>Neste esquema, para modificar qualquer bloco, \u00e9 necess\u00e1rio recalcular as fun\u00e7\u00f5es hash de todos os blocos subsequentes. \u00c0 primeira vista, qual \u00e9 o problema?<\/p>\n<p>Nos blockchains reais, dificuldades artificiais foram criadas para a adi\u00e7\u00e3o de novos blocos \u2014 algoritmos que requerem muitos recursos computacionais s\u00e3o utilizados. Considerando que, para alterar um bloco, \u00e9 necess\u00e1rio recalcular n\u00e3o apenas esse bloco, mas todos os subsequentes, ser\u00e1 extremamente complicado faz\u00ea-lo.<\/p>\n<p>Lembre-se tamb\u00e9m de que os dados do blockchain s\u00e3o armazenados (duplicados) em numerosos n\u00f3s na rede, ou seja, utiliza-se armazenamento descentralizado. Isso torna muito mais dif\u00edcil a falsifica\u00e7\u00e3o de um bloco, uma vez que as altera\u00e7\u00f5es precisam ser feitas em todos os n\u00f3s da rede.<\/p>\n<p>Como os blocos armazenam informa\u00e7\u00f5es sobre o bloco anterior, \u00e9 poss\u00edvel verificar o conte\u00fado de todos os blocos da cadeia.<\/p>\n<h3>Blockchain Ethereum<\/h3>\n<p>\nO blockchain Ethereum \u00e9 uma plataforma sobre a qual \u00e9 poss\u00edvel criar aplicativos distribu\u00eddos DApp. Diferentemente de outras plataformas, o Ethereum permite o uso de chamados contratos inteligentes (smart contracts), escritos na linguagem de programa\u00e7\u00e3o Solidity.<\/p>\n<p>Esta plataforma foi criada em 2013 por Vitalik Buterin, fundador da revista Bitcoin Magazine, e lan\u00e7ada em 2015. Tudo o que estudaremos ou faremos em nosso curso pr\u00e1tico est\u00e1 relacionado ao blockchain Ethereum e aos contratos inteligentes em Solidity.<\/p>\n<h3>Minera\u00e7\u00e3o ou como os blocos s\u00e3o criados<\/h3>\n<p>\nA minera\u00e7\u00e3o (mining) \u00e9 um processo bastante complexo e que consome muitos recursos para adicionar novos blocos \u00e0 cadeia de blockchain, e n\u00e3o apenas 'extrair criptomoedas'. A minera\u00e7\u00e3o garante o funcionamento do blockchain, pois \u00e9 esse processo que responde pela adi\u00e7\u00e3o de transa\u00e7\u00f5es ao blockchain Ethereum.<\/p>\n<p>As pessoas e organiza\u00e7\u00f5es que se dedicam \u00e0 adi\u00e7\u00e3o de blocos s\u00e3o chamadas de mineradores (miner).<br \/>\nO software (SW) que opera nos n\u00f3s dos mineradores tenta encontrar para o \u00faltimo bloco o par\u00e2metro de hash chamado Nonce, para que um determinado valor da fun\u00e7\u00e3o hash, definido pela rede, seja obtido. O algoritmo de hash Ethash, aplicado no Ethereum, permite obter o valor de Nonce apenas por meio de tentativas sequenciais. <\/p>\n<p>Se o n\u00f3 do minerador encontrou o valor correto do Nonce, isso \u00e9 conhecido como prova de trabalho (PoW, Proof-of-work). Neste caso, se o bloco for adicionado \u00e0 rede Ethereum, o minerador recebe uma recompensa em moeda da rede \u2014 Ether. No momento em que este livro foi preparado, a recompensa \u00e9 de 5 Ether, mas com o tempo isso ser\u00e1 reduzido.<\/p>\n<p>Assim, os mineradores Ethereum garantem o funcionamento da rede adicionando blocos e recebem por isso dinheiro em criptomoeda. Na internet, voc\u00ea encontrar\u00e1 uma abund\u00e2ncia de informa\u00e7\u00f5es sobre mineradores e minera\u00e7\u00e3o, mas n\u00f3s nos concentraremos na cria\u00e7\u00e3o de contratos Solidity e aplicativos descentralizados DApp na rede Ethereum.<\/p>\n<h3>Resumo da li\u00e7\u00e3o<\/h3>\n<p>\nNa primeira li\u00e7\u00e3o, voc\u00ea se familiarizou com a blockchain e aprendeu que ela \u00e9 uma sequ\u00eancia de blocos composta de maneira especial. O conte\u00fado dos blocos j\u00e1 registrados n\u00e3o pode ser alterado, pois isso exigiria recalcular todos os blocos subsequentes em muitos n\u00f3s da rede, o que requer muitos recursos e tempo.<\/p>\n<p>A blockchain pode ser aplicada para manter os resultados da execu\u00e7\u00e3o de transa\u00e7\u00f5es. Sua principal finalidade \u00e9 organizar a execu\u00e7\u00e3o segura de transa\u00e7\u00f5es entre partes (pessoas e organiza\u00e7\u00f5es) que n\u00e3o confiam umas nas outras. Voc\u00ea aprendeu em quais \u00e1reas espec\u00edficas de neg\u00f3cios e em quais setores a blockchain Ethereum e os contratos inteligentes Solidity podem ser utilizados. Esses setores incluem o setor banc\u00e1rio, a registradora de propriedade, documentos e assim por diante.<\/p>\n<p>Voc\u00ea tamb\u00e9m aprendeu que ao utilizar a blockchain, diversos problemas podem surgir. Esses incluem problemas de verifica\u00e7\u00e3o da informa\u00e7\u00e3o adicionada \u00e0 blockchain, a velocidade de opera\u00e7\u00e3o da blockchain, o custo das transa\u00e7\u00f5es, problemas de troca de dados entre contratos inteligentes e o mundo real, al\u00e9m de potenciais ataques maliciosos destinados a roubar criptomoedas das contas dos usu\u00e1rios.<\/p>\n<p>Al\u00e9m disso, falamos brevemente sobre minera\u00e7\u00e3o como o processo de adi\u00e7\u00e3o de novos blocos \u00e0 blockchain. A minera\u00e7\u00e3o \u00e9 necess\u00e1ria para a execu\u00e7\u00e3o de transa\u00e7\u00f5es. Aqueles que fazem minera\u00e7\u00e3o garantem o funcionamento da blockchain e recebem recompensas em criptomoeda por isso.<\/p>\n<p><b class=\"spoiler_title\">Li\u00e7\u00e3o 2. Prepara\u00e7\u00e3o do ambiente de trabalho nos sistemas operacionais Ubuntu e Debian<\/b>Escolha do sistema operacional<br \/>\nInstala\u00e7\u00e3o das utilidades necess\u00e1rias<br \/>\nInstala\u00e7\u00e3o do Geth e Swarm no Ubuntu<br \/>\nInstala\u00e7\u00e3o do Geth e Swarm no Debian<br \/>\nPrepara\u00e7\u00e3o preliminar<br \/>\nCarregamento do distribuidor Go<br \/>\nConfigura\u00e7\u00e3o de Vari\u00e1veis de Ambiente<br \/>\nVerificando a vers\u00e3o do Go<br \/>\nInstala\u00e7\u00e3o do Geth e Swarm<br \/>\nCriando uma blockchain privada<br \/>\n\u0413\u043e\u0442\u043e\u0432\u0438\u043c \u0444\u0430\u0439\u043b genesis.json<br \/>\nCriando um diret\u00f3rio de trabalho<br \/>\nCriando uma conta<br \/>\nIniciando a inicializa\u00e7\u00e3o do n\u00f3<br \/>\nPar\u00e2metros de inicializa\u00e7\u00e3o do n\u00f3<br \/>\nConectando ao nosso n\u00f3<br \/>\nGerenciando a minera\u00e7\u00e3o e verificando o saldo<br \/>\nFinalizando o console do Geth<br \/>\nResumo da li\u00e7\u00e3o<\/p>\n<p><b class=\"spoiler_title\">Aula 3. Prepara\u00e7\u00e3o do ambiente de trabalho no Raspberry Pi 3<\/b>Preparando o Raspberry Pi 3 para uso<br \/>\nInstala\u00e7\u00e3o do Rasberian<br \/>\nInstala\u00e7\u00e3o de atualiza\u00e7\u00f5es<br \/>\nAtivando o acesso SSH<br \/>\nConfigurando um endere\u00e7o IP est\u00e1tico<br \/>\nInstala\u00e7\u00e3o das utilidades necess\u00e1rias<br \/>\nInstala\u00e7\u00e3o do Go<br \/>\nCarregamento do distribuidor Go<br \/>\nConfigura\u00e7\u00e3o de Vari\u00e1veis de Ambiente<br \/>\nVerificando a vers\u00e3o do Go<br \/>\nInstala\u00e7\u00e3o do Geth e Swarm<br \/>\nCriando uma blockchain privada<br \/>\nVerificando a conta e o saldo<br \/>\nResumo da li\u00e7\u00e3o<\/p>\n<p><b class=\"spoiler_title\">Aula 4. Contas e transfer\u00eancia de fundos entre contas<\/b>Visualizando e adicionando contas<br \/>\nVisualizando a lista de contas<br \/>\nAdicionando uma conta<br \/>\nPar\u00e2metros do comando geth account<br \/>\nSenhas de contas<br \/>\nCriptomoedas no Ethereum<br \/>\nUnidades monet\u00e1rias do Ethereum<br \/>\nDeterminado o saldo atual de nossas contas<br \/>\nTransferindo fundos de uma conta para outra<br \/>\nM\u00e9todo eth.sendTransaction<br \/>\nVisualizando o estado da transa\u00e7\u00e3o<br \/>\nRecibo da transa\u00e7\u00e3o<br \/>\nResumo da li\u00e7\u00e3o<\/p>\n<p><b class=\"spoiler_title\">Aula 5. Publicando o primeiro contrato<\/b>Contratos inteligentes no Ethereum<br \/>\nExecutando um contrato inteligente<br \/>\nM\u00e1quina virtual do Ethereum<br \/>\nAmbiente de desenvolvimento integrado Remix Solidity IDE<br \/>\nIniciando a compila\u00e7\u00e3o<br \/>\nChamando fun\u00e7\u00f5es do contrato<br \/>\nPublicando o contrato em uma rede privada<br \/>\nObtendo a defini\u00e7\u00e3o do ABI e o c\u00f3digo bin\u00e1rio do contrato<br \/>\nPublica\u00e7\u00e3o do contrato<br \/>\nVerificando o estado da transa\u00e7\u00e3o de publica\u00e7\u00e3o do contrato<br \/>\nChamando fun\u00e7\u00f5es do contrato<br \/>\nCompilador em lote solc<br \/>\nInstala\u00e7\u00e3o do solc no Ubuntu<br \/>\nInstala\u00e7\u00e3o do solc no Debian<br \/>\nCompilando o contrato HelloSol<br \/>\nPublica\u00e7\u00e3o do contrato<br \/>\nInstala\u00e7\u00e3o do solc no Rasberian<br \/>\nResumo da li\u00e7\u00e3o<\/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 \/>\nInstala\u00e7\u00e3o no Ubuntu<br \/>\nInstala\u00e7\u00e3o no Debian<br \/>\nInstala\u00e7\u00e3o e execu\u00e7\u00e3o do Ganache-cli<br \/>\nInstala\u00e7\u00e3o do Web3<br \/>\nInstala\u00e7\u00e3o do solc<br \/>\nInstala\u00e7\u00e3o do Node.js no Rasberian<br \/>\nScript para obter a lista de contas no console<br \/>\nScript para publicar um contrato inteligente<br \/>\nIniciando e obtendo par\u00e2metros<br \/>\nObtendo par\u00e2metros de inicializa\u00e7\u00e3o<br \/>\nCompila\u00e7\u00e3o do contrato<br \/>\nDesbloqueando a conta<br \/>\nCarregando ABI e c\u00f3digo bin\u00e1rio do contrato<br \/>\nAvalia\u00e7\u00e3o da quantidade necess\u00e1ria de g\u00e1s<br \/>\nCriando um objeto e iniciando a publica\u00e7\u00e3o do contrato<br \/>\nExecutando o script de publica\u00e7\u00e3o do contrato<br \/>\nChamando fun\u00e7\u00f5es do contrato inteligente<br \/>\n\u00c9 poss\u00edvel atualizar um contrato inteligente publicado?<br \/>\nTrabalhando com Web3 vers\u00e3o 1.0.x<br \/>\nObtendo a lista de contas<br \/>\nPublica\u00e7\u00e3o do contrato<br \/>\nChamando fun\u00e7\u00f5es do contrato<br \/>\nTransferindo fundos de uma conta para outra<br \/>\nTransferindo fundos para a conta do contrato<br \/>\nAtualizando o contrato inteligente HelloSol<br \/>\nCriando um script para visualizar o saldo da conta<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 \/>\nRecarregando a conta do contrato inteligente<br \/>\nResumo da li\u00e7\u00e3o<\/p>\n<p><b class=\"spoiler_title\">Aula 7. Introdu\u00e7\u00e3o ao Truffle<\/b>Instala\u00e7\u00e3o do Truffle<br \/>\nCriando o projeto HelloSol<br \/>\nCria\u00e7\u00e3o do diret\u00f3rio e arquivos do projeto<br \/>\nDiret\u00f3rio contracts<br \/>\nDiret\u00f3rio migrations<br \/>\nDiret\u00f3rio test<br \/>\n\u0424\u0430\u0439\u043b truffle-config.js<br \/>\nCompilando o contrato HelloSol<br \/>\nIn\u00edcio da publica\u00e7\u00e3o do contrato<br \/>\nChamada das fun\u00e7\u00f5es do contrato HelloSol no convite 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 \/>\nInstala\u00e7\u00e3o do m\u00f3dulo truffle-contract<br \/>\nChamada das fun\u00e7\u00f5es do contrato getValue e getString<br \/>\nChamada das fun\u00e7\u00f5es do contrato setValue e setString<br \/>\nMudan\u00e7a do contrato e republica\u00e7\u00e3o<br \/>\nTrabalhando com Web3 vers\u00e3o 1.0.x<br \/>\nFazendo altera\u00e7\u00f5es no smart contract HelloSol<br \/>\nScripts para chamar os m\u00e9todos do contrato<br \/>\nTestes no Truffle<br \/>\nTeste em Solidity<br \/>\nTeste em JavaScript<br \/>\nResumo da li\u00e7\u00e3o<\/p>\n<p><b class=\"spoiler_title\">Aula 8. Tipos de dados em Solidity<\/b>Contrato para estudar tipos de dados<br \/>\nTipos de dados l\u00f3gicos<br \/>\nN\u00fameros inteiros sem sinal e inteiros com sinal<br \/>\nN\u00fameros de ponto fixo<br \/>\nEndere\u00e7o<br \/>\nVari\u00e1veis de tipos complexos<br \/>\nArrays de tamanho fixo<br \/>\nArrays din\u00e2micos<br \/>\nEnumera\u00e7\u00e3o<br \/>\nEstruturas<br \/>\nMapas mapping<br \/>\nResumo da li\u00e7\u00e3o<\/p>\n<p><b class=\"spoiler_title\">Aula 9. Migra\u00e7\u00e3o de contratos para rede privada e para a rede Rinkeby<\/b>Publica\u00e7\u00e3o do contrato do Truffle na rede privada Geth<br \/>\nPrepara\u00e7\u00e3o do n\u00f3 da rede privada<br \/>\nPrepara\u00e7\u00e3o do contrato para funcionamento<br \/>\nCompila\u00e7\u00e3o e migra\u00e7\u00e3o do contrato para a rede Truffle<br \/>\nIn\u00edcio da migra\u00e7\u00e3o na rede local geth<br \/>\nExtraindo artefatos do Truffle<br \/>\nPublica\u00e7\u00e3o do contrato do Truffle na rede de teste Rinkeby<br \/>\nPrepara\u00e7\u00e3o do n\u00f3 Geth para trabalhar com Rinkeby<br \/>\nSincroniza\u00e7\u00e3o do n\u00f3<br \/>\nAdi\u00e7\u00e3o de contas<br \/>\nRefor\u00e7o da conta Rinkeby com ether<br \/>\nIn\u00edcio da migra\u00e7\u00e3o do contrato para a rede Rinkeby<br \/>\nVisualiza\u00e7\u00e3o das informa\u00e7\u00f5es do contrato na rede Rinkeby<br \/>\nConsole Truffle para a rede Rinkeby<br \/>\nUma maneira mais simples de chamar fun\u00e7\u00f5es do 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 \/>\nTransfer\u00eancia de fundos entre contas no console Truffle para Rinkeby<br \/>\nResumo da li\u00e7\u00e3o<\/p>\n<p><b class=\"spoiler_title\">Aula 10. Armazenamento descentralizado de dados Ethereum Swarm<\/b>Como funciona o Ethereum Swarm<br \/>\nInstala\u00e7\u00e3o e execu\u00e7\u00e3o do Swarm<br \/>\nOpera\u00e7\u00f5es com arquivos e diret\u00f3rios<br \/>\nUpload de arquivo para o Ethereum Swarm<br \/>\nLeitura de arquivo do Ethereum Swarm<br \/>\nVisualiza\u00e7\u00e3o do manifesto do arquivo carregado<br \/>\nUpload de diret\u00f3rios com subdiret\u00f3rios<br \/>\nLeitura de arquivo do diret\u00f3rio carregado<br \/>\nUso de gateway p\u00fablico 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 \/>\nInstala\u00e7\u00e3o do m\u00f3dulo Net::Ethereum::Swarm<br \/>\nGrava\u00e7\u00e3o e leitura de dados<br \/>\nResumo da li\u00e7\u00e3o<\/p>\n<p><b class=\"spoiler_title\">Aula 11. Framework Web3.py para trabalhar com Ethereum em Python<\/b>Instala\u00e7\u00e3o do Web3.py<br \/>\nAtualiza\u00e7\u00e3o e instala\u00e7\u00e3o de pacotes necess\u00e1rios<br \/>\nInstala\u00e7\u00e3o do m\u00f3dulo easysolc<br \/>\nPublica\u00e7\u00e3o do contrato usando Web3.py<br \/>\nCompila\u00e7\u00e3o do contrato<br \/>\nConex\u00e3o com o provedor<br \/>\nExecu\u00e7\u00e3o da publica\u00e7\u00e3o do contrato<br \/>\nSalvando o endere\u00e7o do contrato e abi em um arquivo<br \/>\nExecutando o script de publica\u00e7\u00e3o do contrato<br \/>\nChamada de m\u00e9todos do contrato<br \/>\nLeitura do endere\u00e7o e abi do contrato a partir de arquivo JSON<br \/>\nConex\u00e3o com o provedor<br \/>\nCria\u00e7\u00e3o do objeto do contrato<br \/>\nChamada de m\u00e9todos do contrato<br \/>\nTruffle e Web3.py<br \/>\nResumo da li\u00e7\u00e3o<\/p>\n<p><b class=\"spoiler_title\">Aula 12. Or\u00e1culos<\/b>Um contrato inteligente pode confiar em dados do mundo externo?<br \/>\nOr\u00e1culos como intermedi\u00e1rios informacionais da blockchain<br \/>\nFonte de dados<br \/>\nC\u00f3digo para representar dados da fonte<br \/>\nOr\u00e1culo para gravar a taxa de c\u00e2mbio na blockchain<br \/>\nContrato USDRateOracle<br \/>\nAtualiza\u00e7\u00e3o da taxa de c\u00e2mbio no contrato inteligente<br \/>\nUso do provedor Web Socket<br \/>\nAguardando o evento RateUpdate<br \/>\nProcessamento do evento RateUpdate<br \/>\nIniciando a atualiza\u00e7\u00e3o de dados no contrato inteligente<br \/>\nResumo da li\u00e7\u00e3o<\/p>\n<p>Fonte: <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.3 - 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\/pt\/blog\/news\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\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\/pt\/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\udd47Livro \u201cCriando contratos inteligentes Solidity para a blockchain Ethereum. Guia pr\u00e1tico\u201d | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/news\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","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\/pt\/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\/pt\/wp-json\/wp\/v2\/posts\/39018","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=39018"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/39018\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/29275"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=39018"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=39018"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=39018"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}