Blockchain para a Solução de Problemas Cotidianos
Por Jean Everson Martina, Professor do Departamento de Informática e Estatística, Universidade Federal de Santa Catarina (UFSC)
Em 2008, um pesquisador anônimo auto nominado Satoshi Nakamoto publicou o artigo intitulado “Bitcoin: A peer-to-peer electronic clash system“, propondo a criptomoeda mais valiosa de hoje no mercado, o Bitcoin [Nakamoto et al. 2008]. A proposta é uma rede ponto a ponto descentralizada, na qual os participantes podem realizar transações monetárias sem a intervenção de um terceiro confiável (TTP). A grande inovação do projeto de Nakamoto é a criação do Blockchain.
Um blockchain é um log distribuído com a permissão somente de adição de novas informações para armazenar dados digitais. Foi proposto por Nakamoto [Nakamoto et al. 2008] para ser usado como um livro razão colaborativo que valida e registra transações financeiras na rede ponto a ponto do Bitcoin.
As transações consistem basicamente na transferência de fundos de uma conta para outra. Uma conta é identificada por uma chave pública e controlada pela chave privada correspondente. A validação de uma transação requer pelo menos duas verificações. Primeiro, verifica-se que o remetente possui a conta da qual os fundos estão sendo transferidos. Mais precisamente, o remetente deve fornecer uma assinatura válida na transação usando a chave privada das contas de origem. Segundo, verifica-se que o saldo da conta de origem não é menor que os fundos enviados. Depois que a transação é validada, o livro razão é atualizado para refletir o novo saldo das contas envolvidas.
Esse livro razão consiste em uma lista ligada de blocos. Um bloco contém um único conjunto de transações válidas. Além disso, todos os blocos menos o primeiro, incluem um ponteiro para o bloco anterior. O ponteiro é realizado como um hash do bloco anterior. A Figura 1 descreve um blockchain.
Figura 1. A estrutura do Blockchain
O blockchain não foi feito para ser armazenado em um único lugar, mas replicado entre vários participantes de uma rede ponto a ponto. Para manter as réplicas consistentes, os participantes executam protocolos de consenso.
Esses protocolos permitem que os participantes concordem sobre qual deve ser o próximo bloco a ser adicionado à blockchain. Por exemplo, os participantes devem concordar que o próximo bloco contém transações novas e válidas e um ponteiro para o último bloco. Além disso, esses protocolos de consenso permitem que os participantes cheguem a um acordo sem a necessidade de terceiros. Tais protocolos de consenso são criados para lidar com falhas bizantinas [Lamport et al. 1982] e ataques Sybil [Douceur 2002]. Para tolerar falhas bizantinas, os protocolos requerem um limite superior no número de participantes desonestos (por exemplo, menos de um terço de todos os participantes [Castro and Liskov 1999]). Quanto aos ataques de Sybil, a contramedida mais utilizada é a chamada prova de trabalho. Consiste em um quebra-cabeça criptográfico que um participante deve resolver usando recursos computacionais significativos para ter o direito de conectar o próximo bloco na blockchain. Geralmente, há uma recompensa financeira para motivar os participantes a resolver o quebra-cabeça. Por exemplo, o blockchain do Bitcoin recompensa um participante com moedas por resolver o quebra-cabeça criptográfico.
Após o sucesso do Bitcoin, novas plataformas de blockchain chegaram. Por exemplo, citamos o Ethereum [Wood et al. 2014]. Essa plataforma combina a natureza descentralizada da blockchain com contratos inteligentes (partes de software executadas na blockchain). Dessa maneira, é possível executar aplicativos descentralizados com propriedades como transparência, integridade e pseudo-anonimato. Assim, o blockchain se tornou rapidamente um objeto de pesquisa e propostas de negócios.
Os contratos inteligentes foram idealizados por Nick Szabo [Szabo 1997]. Um contrato inteligente é um código determinístico executado por computadores distintos que concordam com o resultado da execução. Como tal, contratos inteligentes operam como agentes autônomos, cujo comportamento é completamente previsível [Christidis and Devetsikiotis 2016]. Os contratos inteligentes podem ser usados para ajudar as partes que não confiam uma na outra a celebrar um contrato sem depender de terceiros. Mais precisamente, as cláusulas do contrato são traduzidas para um contrato inteligente. Depois que as partes concordam com o contrato inteligente, ele é gerenciado por computadores. Neste ponto, as partes envolvidas não podem alterar o contrato inteligente nem interferir na sua execução.
Os blockchains têm sido a infraestrutura necessária para gerar contratos inteligentes. Mais precisamente, uma blockchain pode ser usada para armazenar e endereçar contratos inteligentes na forma de scripts executáveis e imutáveis. Ao contrário das carteiras de blockchain, um contrato inteligente geralmente não é identificado por uma chave pública, mas por um hash do contrato inteligente. Uma transação endereçada a um contrato inteligente aciona sua execução pelos participantes da rede ponto a ponto. Enquanto está sendo executado, um contrato inteligente pode mudar seu estado e originar novas transações. O histórico dos estados de um contrato inteligente, bem como as transações que ele recebeu e enviou, são armazenadas permanentemente no blockchain.
Nem todas as blockchains foram projetadas para oferecer suporte a contratos inteligentes. Um exemplo que não tem suporte a tal é a blockchain do Bitcoin. Por outro lado, o blockchain Ethereum fornece um ambiente de execução baseado em pilha chamado Ethereum Virtual Machine para executar contratos inteligentes. Esse ambiente fornece um conjunto de instruções de bytecode para programar contratos inteligentes. Uma lista exaustiva de tais instruções é fornecida por Wood [Wood et al. 2014].
Para facilitar a escrita de contratos inteligentes, podem ser usadas linguagens de alto nível que são compiladas para essas instruções específicas de bytecode. Por exemplo, Solidity [Dannen 2017]. Contratos inteligentes baseados em Solidity contêm funções e variáveis. Uma função de construtor inicializa variáveis dentro do contrato inteligente e é executada uma vez quando o contrato inteligente é implantado (ou seja, criado na blockchain). Uma função pode ser acionada emitindo transações para ela. Além disso, com a ajuda dos chamados modificadores, uma função pode ser programada para aceitar transações de qualquer endereço ou de determinados endereços. Por exemplo, uma função em um contrato inteligente pode ser programada para que só possa ser acionada pelo criador do contrato inteligente.
Para proteger a blockchain contra abusos e recompensar a rede pela execução de contratos inteligentes, aplicam-se taxas. Mais precisamente, o endereço que deseja que um contrato inteligente seja executado através da emissão de transação para o contrato inteligente deve pagar as taxas de execução. É preciso pagar por todas as instruções a serem executadas no contrato inteligente. Por exemplo, a execução de uma instrução de adição modular em Ethereum custa cinco ”gas”. Referimos o leitor interessado em taxas de computação ao trabalho de Wood [Wood et al. 2014]. Os usuários do Ethereum podem pagar ”gas”a com a cripto-moeda Ethereum, Ether. Quanto mais Ether oferecer por gás, mais rapidamente sua transação será processada pela rede.
Então, hoje, na prática temos ainda a criação de inúmeras cripto-moedas, mas o grande nicho de aplicação de blockchains é na construção de aplicações que necessitem de resiliência, imutabilidade e consenso distribuído. Estas são as propriedades que a Blockchian e as cripto-moedas nos entregam e que podem ser facilmente reutilizadas utilizando estes conceitos de contratos inteligentes.
Temos visto trabalhos muito interessantes surgindo usando estas tecnologias. Temos visto trabalhos na área de automação de processo e documentos, tais como esse projeto de automação de cartórios [Meyer 2019]. Também temos visto o uso em aplicações de registo e emissão de diplomas [Palma et al. 2019b], e para rastrear veículos com segurança e privacidade [Palma et al. 2019a]. Temos visto também várias iniciativas no mercado financeiro, monitoração de sistemas de logística, controles de sistemas de saúde, etc.
Os projetos mais interessantes, e ao mesmo tempo em domínios quase que inesperados, que tive contatos nos últimos tempos foram o uso e blockchain para coordenar o comando e posicionamento frotas de satélites cubesat, o controle de calibração de equipamentos médicos usando blockchain e o controle e localização de processos de comércios exterior. Experimentar com a tecnologia e achar novos domínios de aplicação têm sido muito interessante e hoje é considerado super-inovador.
Sobre o autor
Jean Everson Martina possui graduação em Ciência da Computação pela Universidade Federal de Santa Catarina (2001), mestrado em Ciência da Computação pela Universidade Federal de Santa Catarina (2005 ) e doutorado em Ciência da Computação pela Universidade de Cambridge no Reino Unido (2011). É professor do Departamento de Informática e de Estatística da Universidade Federal de Santa Catarina desde 2013. Tem experiência na área de Ciência da Computação, com ênfase em Gerenciamento de Certificados Digitais, Protocolos Criptográficos, Sistemas Embarcados, Métodos Formais, e Engenharia de Software voltada a segurança da Informação. Atua principalmente nos seguintes temas: assinaturas digitais, sistemas operacionais embarcados, execução segura de código, proteção de chaves criptográficas,computação forense, formalização de protocolos, verificação formal, modelagem de cerimônias de segurança e projeto de software seguro.
Referências
Castro, M. and Liskov, B. (1999). Practical byzantine fault tolerance. In Proceedings of the Third Symposium on Operating Systems Design and Implementation, OSDI ’99, pages 173–186, Berkeley, CA, USA. USENIX Association.
Christidis, K. and Devetsikiotis, M. (2016). Blockchains and smart contracts for the Internet of Things. IEEE Access, 4:2292–2303.
Dannen, C. (2017). Introducing Ethereum and Solidity: Foundations of Cryptocurrency and Blockchain Programming for Beginners. Apress.
Douceur, J. R. (2002). The sybil attack. In Druschel, P., Kaashoek, F., and Rowstron, A., editors, Peer-to-Peer Systems, pages 251–260, Berlin, Heidelberg. Springer Berlin Heidelberg.
Lamport, L., Shostak, R. E., and Pease, M. C. (1982). The byzantine generals problem. ACM Trans. Program. Lang. Syst., 4(3):382–401.
Meyer, J. V. (2019). Document validation using blockchain: A validation scheme for natural person’s documents. Trabalho de Conclusão de Curso em Ciência da Computação, UFSC, Brazil.
Nakamoto, S. et al. (2008). Bitcoin: A peer-to-peer electronic cash system.
Palma, L. M., Gomes, F. O., Vigil, M., and Martina, J. E. (2019a). A transparent and privacy-aware approach using smart contracts for car insurance reward programs. In Garg, D., Kumar, N. V. N., and Shyamasundar, R. K., editors, Information Systems Security, pages 3–20, Cham. Springer International Publishing.
Palma, L. M., Vigil, M. A. G., Pereira, F. L., and Martina, J. E. (2019b). Blockchain and smart contracts for higher education registry in brazil. International Journal of Network Management, 29(3):e2061.
Szabo, N. (1997). Formalizing and securing relationships on public networks. First Monday, 2(9).
Wood, G. et al. (2014). Ethereum: A secure decentralised generalised transaction ledger. Ethereum project yellow paper, 151(2014):1–32.
Como citar esse artigo:
Martina, J., 2020. Blockchain para a Solução de Problemas Cotidianos. SBC Horizontes. ISSN: 2175-9235. Disponível em: http://horizontes.sbc.org.br/index.php/2020/06/30/blockchain-para-a-solucao-de-problemas-cotidianos/(abrir em uma nova aba)