Smart Contracts #1: Introdução
História, o que são e para quê servem
Este é o primeiro artigo de uma série titulada “Smart Contracts”, onde irei tratar de smart contracts com foco na plataforma Ethereum. Com esta série, meu objetivo é trazer conteúdo completo e compreensivo sobre o tema, que tratarei de forma teórica e prática. O primeiro artigo tratará do entendimento teórico necessário para que os leitores possam começar a construir e operar com contratos. A partir do segundo artigo, irei ensinar como escrever um contrato, e leitores aprenderão de maneira simples como fazê-lo. A meta final é a construção de um dApp funcional para este contrato. Tudo será explicado passo-a-passo, e o único requerimento é um entendimento básico da tecnologia blockchain e da plataforma Ethereum. Um novo artigo será publicado toda terça-feira.
Caso você tenha interesse em aprender mais e tenha um conhecimento razoável da língua inglesa, toda quarta-feira, a partir de amanhã (29/08) publicarei um artigo tratando de uma definição importante do mundo da tecnologia blockchain, em uma série titulada “Blockchain definition of the week”. O primeiro artigo discutirá o conceito de gas da plataforma Ethereum, que é muito importante para aqueles que querem se aprofundar na criação de smart contracts.
Em 1994, o cientista de computação e criptógrafo Nick Szabo introduziu o termo “smart contract”, idealizando uma representação digital de contratos tradicionais, com o objetivo de minimizar a necessidade de confiança em intermediários.
“A smart contract is a computerized transaction protocol that executes the terms of a contract.” — Szabo, 1994
Smart contracts, ou contratos inteligentes em português, são protocolos computacionais que agem independentemente para executar propósitos específicos. Eles nada mais são do que um conjunto de código, que seguem a lógica if-this-then-that (se-isso-então-aquilo), ou seja, quando algum evento acontece, ele desencadeia uma reação pré-determinada.
Para compreendermos melhor essa lógica, vamos direto para um exemplo:
pragma solidity ^0.4.24; //Versão da linguagemcontract Hello { //Nome do contrato //Função HelloWorld retorna a mensagem "Hello World"
function HelloWorld () public pure returns (string) {
return "Hello World";
}
}
- Código escrito em Solidity, uma das linguagens de programação de smart contracts na plataforma Ethereum
- ‘//’ : Indica o começo de um comentário, que não produz efeito algum no código, apenas ajuda o leitor a compreender melhor.
Não se preocupe muito com entender o código por completo ainda, mas vamos analisar o que o contrato acima faz.
O contrato, nomeado de “Hello”, possui uma função. Esta função dita que, quando “chamada” (executada), o contrato deve “retornar” (emitir) a mensagem “Hello World”. Veja o diagrama abaixo:
Lógica if-this-then-that:
Se o usuário chama a função HelloWorld →
Então o contrato retorna a mensagem “Hello World”
Após publicado, o contrato acima vai fazer somente aquilo que foi originalmente programado para fazer, e não pode ser modificado após publicação.
Anteriormente, quando Szabo idealizou os smart contracts, existia um grande problema: bancos de dados. Para conseguir executar as funções designadas, o contrato necessita buscar e armazenar informações em algum registro, e até a criação da blockchain, a implementação de smart contracts com bancos de dados tradicionais significaria que eles poderiam ser facilmente manipulados pelo centralizador. No caso acima, o programador do contrato ou o proprietário do banco de dados poderiam fazer com que o contrato parasse de retornar “Hello World” e retornasse outra frase, ou também deletar o contrato por completo.
Com a criação da blockchain, este problema é resolvido. Fazendo uso dos contratos em cima de um registro distribuído e imutável garante a legitimidade dos registros, e permite operações sem que as partes envolvidas precisem confiar uma na outra.
E foi com essa ideia que, em 2013, Vitalik Buterin publicou o whitepaper do Ethereum. Unindo, as ideias de Nick Sazbo, e a tecnologia inventada por Satoshi Nakamoto, o Ethereum, com seu lançamento em 2015, se tornou a primeira plataforma para criação de smart contracts.
Para entender melhor a importância de tudo isso, vamos tomar um empréstimo como exemplo. Hoje, para pegarmos dinheiro emprestado, é necessário passar por um intermediador, que na maioria dos casos, é o banco. Mas existe também um outro intermediador, uma autoridade reguladora, que garante os direitos seus e do banco em relação ao empréstimo. Neste caso, é necessário ter confiança tanto na autoridade, quanto no banco, esperando que estes órgãos garantam seus direitos com essa operação. Na maior parte das vezes, este processo funciona, mas ele conta com falhas, fricção, e taxas altas.
Agora imagine que, para usufruir de taxas menores, você decide pegar dinheiro emprestado com seu amigo. Mas, quem garante que você vai pagar de volta? E o que acontece se você não pagar? E se nenhum amigo quiser te emprestar dinheiro?
É aí que entra o contrato inteligente. Veja abaixo um exemplo de empréstimo simples por meio de um smart contract.
Criação do contrato
- Participantes estabelecem os termos do contrato e verificam que o código reflete estes termos.
- Contrato é publicado na blockchain e não pode mais ser modificado por ninguém.
Início do empréstimo
- Mutuante deposita o dinheiro no contrato.
- Mutuário deposita a garantia (exemplo: ativo digital) no contrato.
- Contrato envia o dinheiro para o mutuário. (Apenas se a garantia estipulada for depositada )
- Contrato inicia a contagem regressiva para o pagamento.
Término do empréstimo: Cenário 1
- Mutuário paga o valor do empréstimo mais juros dentro do prazo estabelecido para o contrato.
- Contrato envia o valor completo para o mutuante.
- Contrato envia a garantia para o mutuário.
- Opcional: Contrato se auto-destrói.
Término do empréstimo: Cenário 2
- Mutuário não deposita o valor estabelecido ou o prazo vence.
- Contrato envia a garantia para o mutuante.
- Opcional: Contrato se auto-destrói.
Como podemos ver, o contrato substitui os intermediadores, e automatiza o processo, trazendo também mais segurança. Por isso, o empréstimo pode ser realizado de maneira segura, não só entre amigos, mas entre quaisquer duas pessoas no mundo, devido à característica global de blockchains. Ao invés de confiar em um amigo, banco, empresa, ou governo, a confiança passa para o código, que pode ser verificado para garantir legitimidade.
Além dos processos descritos acima, em um empréstimo mais complexo, também seria possível incluir funções mais avançadas, como nomear outra pessoa para o pagamento, ou um fundo segurador que automaticamente cobre eventual inadimplência.
Maiores benefícios
Resumindo, os grandes benefícios de smart contracts são:
- Automatização de processos: Contratos executam as funções necessárias quando os requerimentos são atendidos, diminuindo a velocidade com a qual operações complexas são realizadas, e também o esforço necessário para garantir que elas ocorram de maneira correta.
- Confiança: Não é necessário confiar em uma organização ou pessoa para verificar e garantir operações. O código garante a segurança. Isto traz novas oportunidades, como empréstimos entre pessoas que não se conhecem.
- Desintermediação: A eliminação ou diminuição de intermediários em processos permite mais velocidade, segurança e taxas menores. Também previne abusos de poder, e limita o controle de grandes organizações.
- Imutabilidade: A utilização de um registro imutável facilita auditoria e verificação de dados, tanto recentes quanto mais antigos. Um mutuário não consegue afirmar que efetuou o pagamento sem o ter feito, pois basta checar o registro para validar a informação. Não existe o risco de um cartório pegar fogo e documentos importantes desaparecerem para sempre.
- Digitalização: Menos papel, menos cartórios, menos filas. Registros podem ser feitos, auditados, monitorados, executados e atualizados remotamente.
- Simplicidade: Ao invés de escrever 9 folhas de papel, basta escrever 150 linhas de código.
- Segurança: Devido à todos os argumentos mencionados acima.
Exemplos de aplicações
Além de empréstimos, veja abaixo onde mais podemos utilizar esta tecnologia, usufruindo dos benefícios mencionados acima:
- Eleições
- Ativos digitais
- Transferências de posse
- Redes sociais
- Registros de propriedade
- Leilões
- Apostas
- Loteria
- Cadeia de produção
- Contratação de serviços
- Seguradoras
- Fundos de investimento
- IoT
- Identidade
- Prontuário Médico
Plataformas
#include <eosiolib/eosio.hpp>
#include <eosiolib/print.hpp>
using namespace eosio;
class hello : public eosio::contract {
public:
using contract::contract;
/// @abi action
void hi( account_name user ) {
print( "Hello, ", name{user} );
}
};
EOSIO_ABI( hello, (hi) )
- Contrato HelloWorld, desta vez escrito para a plataforma EOSIO (comumente conhecida como EOS).
E onde são criados estes smart contracts?
Atualmente, a maior plataforma para criação de smart contracts é o Ethereum. Durante essa série de artigos, vamos focar no Ethereum, e aprender a escrever, publicar e interagir com contratos na rede. A razão para isso é que o Ethereum é a plataforma mais estabelecida, conhecida, e que possui maior quantidade de conteúdo aberto para aprendizado.
Outras plataformas com propósito similar são: Ethereum Classic, EOSIO, Lisk, Tron, NEO, Stellar, Ripple, NEM, QTUM.
Interação com uma interface
Para o usuário comum, é importante criar uma interface simples que permita interação com o contrato desejado. Para isso, é necessário utilizar linguagens de front-end para criar uma UI (user interface), e integrar a interface com o contrato. No caso do Ethereum, são utilizados web3js e ethjs para isso. Vamos aprender sobre integração com web3js em um artigo futuro.
Resumindo…
Smart contracts são protocolos computadorizados publicados em uma blockchain que permitem automatizar operações de maneira digital, também trazendo mais segurança para as mesmas. Idealizados em 1994, a primeira plataforma permitindo sua criação como proposta por Nick Szabo foi o Ethereum, que surgiu em 2015. Hoje, a maior parte dos contratos é feita na plataforma Ethereum, porém existem outras plataformas que possibilitam o mesmo. Contratos inteligentes podem ser utilizados para uma diversidade de áreas, podendo otimizar o processo tanto de uma aposta quanto de uma eleição.
Up next
No próximo artigo, vamos construir alguns smart contracts e testá-los, assim como aprofundar um pouco mais nos aspectos técnicos do tema. Ao longo da série, vamos também criar um dApp (aplicação descentralizada) na forma de um website que interage com o seu contrato. Se houverem perguntas, é só escrever nos comentários abaixo.
Recursos adicionais
- Documento de Nick Szabo publicado em 1994:
- Whitepaper do Ethereum: https://github.com/ethereum/wiki/wiki/White-Paper