Como Rodar um Blockchain numa Ilha Deserta com uma Caneta e Papel

Conrado Quilles Gomes
TOTVS Developers
Published in
10 min readMay 20, 2018

Se você um dia se encontrar preso em uma ilha deserta, sabendo como rodar um consenso decentralizado — ou em outra palavras, operar um blockchain bem simples manualmente — isso provará ser bem útil. Tudo o que você precisa é alguns sobreviventes, esse post, uma caneta e alguns pedaços de papel.

Esse texto é uma tradução livre e autorizada do post original do Tal Kol: How to Run a Blockchain on a Deserted Island with Pen and Paper.

Se você não está confiante que essa é uma habilidade necessária para a sua sobrevivência, leia o último post (em inglês) do Tal Kol sobre como um blockchain pode melhorar muito a vida em ilhas.

Vamos voltar para a história original e passar pelo processo com nossos heróis destemidos, que acabaram de cair em uma ilha deserta em algum lugar do Oceano Pacífico — Hugo, José, Maria e Luiz.

Um breve resumo: O grupo está tentando implementar a Moeda-da-ilha, uma nova moeda revolucionária que trará um fim a bagunçada economia da ilha. O grupo comprometeu-se e concordou que cada um iria iniciar com 100 moedas. Já que não há metal para forjar moedas de verdade, eles irão utilizar alguns pedaços de papel para fazer isso acontecer. Cercado de desconfiança, o grupo não conseguiu concordar qual pessoa iria manter o controle dos balanços. A única opção deles é manter o balanço todos juntos.

Nós vamos começar com o que é provavelmente o modelo mais simples de implementação de um blockchain para o caso da nossa ilha. Em posts futuros vamos explorar outras variantes e tentar amarrar essas com conceitos como Prova de Trabalho e Prova de Comprometimento — o que nos permitirá ver seus benefícios e desvantagem. Mas, por enquanto, vamos começar da forma mais simples possível.

O que estamos tentando realizar? É bem simples na verdade — tudo que estamos tentando é manter uma tabela simples de balanço em um pedaço de papel. Essa tabela irá permitir mostrar quantas moedas cada um dos heróis tem. O desafio é, nós não podemos ter um único pedaço de papel que contenha a fonte da verdade — temos que manter a coisa igual e permitir que cada membro do grupo tenha sua própria fonte da verdade — essa é a parte descentralizada. E naturalmente, esperamos que cada um dos 4 papéis eventualmente irá mostrar a mesma informação — essa é a parte do consenso.

Então, como seria esse pedaço de papel?

Dia #1Hugo tem 100 moedas, José tem 100 moedas, Maria tem 100 moedas, Luiz tem 100 moedas._Ass. Hugo_    _Ass. José_    _Ass. Maria_    _Ass. Luiz_

Esse foi o primeiro papel que nós acordamos— por isso que está marcado como dia 1. De onde veio esse balanço? Nós acordamos previamente que é justo cada um do grupo começar com 100 moedas. Nós também precisamos que um dos sobreviventes anote essa informação em papel. Não importa quem, então deixemos o Hugo fazê-lo. Ele será o responsável por publicar esse papel para todos e garantir que cada um tem uma cópia (esqueci de mencionar que a ilha tem uma fotocopiadora incrível).

Como é esperada a mudança no balanço das moedas, nós vamos criar uma atualização do pedaço de papel no final de cada dia. Pode ser que nem sempre o Hugo irá publicar essa atualização — nós queremos manter as coisas mais justas e simples possível.

Outro ponto importante é, como não há uma confiança mutua no grupo, estamos fazendo com que cada membro do grupo confirme individualmente a atualização. Um jeito fácil de atingir isso é fazer com que cada membro do grupo assine os papéis — porém, somente se eles concordarem com o que está escrito.

Quantas pessoas são necessárias para assinar o papel e considerar ele como final e aprovado? Nós precisamos atingir um consenso, então a maioria deverá. Como temos 4 membros no grupo no total, a maioria será 3 dos 4. O papel acima foi assinado pelos 4, então, definitivamente, é final. Porque não forçamos todas as quatro assinaturas em todos os papéis? Porque isso não permitirá que a minoria complique o processo como um todo. Se o José for para uma viagem de pescaria por alguns dias, o grupo não conseguiria atualizar os balanços enquanto ele não voltasse — isso daria muito poder a uma pessoa só. Então porque nós precisamos de uma maioria? Porque 2 assinaturas de 4 não é o suficiente? Porque se exigirmos 2 assinaturas de 4, nós podemos acabar tendo 2 pessoas (como Hugo e José) assinando um balanço e as outras 2 pessoas (Maria e Luiz) assinando uma versão diferente do balanço e elas não irão ser compatíveis. Nós não podemos ter duas versões da realidade diferentes em conflito e ambas serem consideradas final.

Na manhã do segundo dia, Maria quer comprar um tomate. Hugo vende tomates por 2 moedas cada. Ela quer transferir duas moedas para o Hugo. Maria pega um novo pedaço de papel e escreve a transferência nele:

Ação da Maria #1: Transferir 2 moedas para o Hugo - _Ass. Maria_

É a primeira ação da Maria, então ela intitula como tal. Em adição, Maria assina esse papel. Nós temos a assinatura dela para garantir que ninguém consegue falsificar uma transferência de recurso da conta dela.

O fim do segundo dia se aproxima e o grupo quer publicar uma atualização do balanço. Hugo publicou o balanço do primeiro dia e coletou as assinaturas de todo mundo. Faz sentido variar quem é o responsável dessa vez. O grupo acorda em usar um simples sistema de rotação ordenado: Hugo, José, Maria, Luiz, Hugo, José e assim por diante. Isso implica que a responsabilidade por publicar o papel no segundo dia é do José. O papel que ele publica reflete a transferência de Maria:

Dia #2Ação da Maria #1: transferir 2 moedas para Hugo - _Ass. Maria_Hugo tem 102 moedas, José tem 100 moedas, Maria tem 98 moedas, Luiz tem 10 moedas_Ass. José_

Esse papel que o José fez ainda não é final porque só foi assinado por ele. Ele precisa coletar mais assinatura. José vai para o grupo e pede que cada um verifique e assine. Esse papel é fácil de verificar. Primeiro, o verificador precisa olhar para a sua própria coleção de papeis e encontra o papel que mostra o balanço do último dia (Dia 1 nesse caso). Depois, o verificador precisar verificar a lista de novas transferências. Nesse caso, nós temos somente uma transferência da Maria. Essa transferência é fácil de verificar porque Maria tem a quantidade necessária de moedas em seu balanço para dar esse valor ao Hugo.

Quando todos os habitantes da ilha completam suas verificações e assinam os papéis, José agora tem a versão final do papel do dia 2 e poderá publicar para todo mundo. Todo mundo recebe uma cópia e vai dormir feliz e contente.

Dia #2Ação da Maria #1: transferir 2 moedas para Hugo - _Ass. Maria_Hugo tem 102 moedas, José tem 100 moedas, Maria tem 98 moedas, Luiz tem 10 moedas_Ass. José_    _Ass. Hugo_    _Ass. Maria_    _Ass. Luiz_

O dia 3 chegou. O sistema está funcionando bem e todo mundo está empolgado para gastar suas moedas. Hugo quer comprar um pouco de lenha de José por 10 moedas. José quer pegar alguns comprimidos de Luiz por 25 moedas e Luiz está com vontade de tomate e quer dar a Hugo 2 moedas para comprar um. Cada um cria um pedaço de papel detalhando a transferência:

Ação do Hugo #1: transferir 10 moedas para José - _Ass. Hugo_Ação do José #1: transferir 25 moedas para o Luiz - _Ass. José_Ação do Luiz #1: transferir 2 moedas para Hugo - _Ass. Luiz_

Quando a noite se aproxima, o responsável por publicar o balanço é Maria. Para ter certeza que a Maria incluiu essas transferências em sua proposta, cada um precisa dar uma cópia da requisição de transferência. É interessante dar uma cópia da transferência para todo mundo, porque pode ser que a pessoa aguardando a transferência não irá lembrar necessariamente de quem é o turno de publicar a atualização de hoje.

Luiz demora a dar a cópia da sua requisição de transferência para Maria e quando o faz, o balanço do dia já estava pronto:

Dia #3Ação do José #1: transferir 25 moedas para o Luiz - _Ass. José_
Ação do Hugo #1: transferir 10 moedas para José - _Ass. Hugo_
Hugo tem 92 moedas, José tem 85 moedas, Maria tem 98 moedas e Luiz tem 125 moedas_Ass. Maria_

Luiz está frustrado porque esse balanço que não inclui a sua própria transferência. Isso significa que Hugo não irá receber o pagamento de Luiz pelo tomate, e Hugo não dará o tomate para o jantar. Luiz irá dormir com fome essa noite. Ele fica bravo, procura alguma coisa para comer e não assina o balanço da Maria. Mas com sorte, Maria consegue pegar assinaturas o suficiente do resto do grupo:

Dia 3#Ação do José #1: transferir 25 moedas para o Luiz - _Ass. José_
Ação do Hugo #1: transferir 10 moedas para José - _Ass. Hugo_
Hugo tem 92 moedas, José tem 85 moedas, Maria tem 98 moedas e Luiz tem 125 moedas_Ass. Maria_ _Ass. José_ _Ass. Hugo_

Maria conseguiu pegar 3 assinaturas no papel, cada um verificou os balanços e eles com certeza batem com as transferências realizadas no dia. Nós temos uma maioria, então a folha é considerada final.

É o dia 4 e ninguém sabe onde está Luiz. Ele foi pescar na noite anterior, foi pego numa tempestade e não conseguiu retornar ao acampamento. Pode ser problemático porque é o dia do Luiz publicar a atualização do balanço.

Maria quer fazer algumas transferências hoje, então ela escreve num pedaço de papel e dá uma cópia para todo mundo:

Ação da Maria #2: transferir 10 moedas para o José - _Ass. Maria_
Ação da Maria #3: transferir 2 moedas para o Hugo - _Ass. Maria_

A noite se aproxima e Luiz ainda não retornou. O grupo acordou previamente que era a vez dele publicar o balanço, mas ele não está em nenhum lugar e não foi encontrado, portanto o dia de hoje será pulado.

É o dia 5 e Hugo é o responsável por publicar a atualização de hoje. Está chovendo a alguns dias e Hugo deseja um lugar quente para dormir. Ele pede para José construir uma pequena cabana de madeira. José quer 200 moedas pelo trabalho. Isso será um problema, porque Hugo só tem 98 moedas. Hugo tem uma ideia maluca, como ele é o responsável por publicar o balanço hoje, porque não adicionar uma transferência maluca com esse valor para o José?

Ação do Hugo #2: transferir 200 moedas para José - _Ass. Hugo_

Não tem nenhuma outra transferência hoje. Hugo tem a transferência de ontem da Maria e a transferência de Luiz do dia anterior, ambas não foram adicionadas. Ele adiciona todas junto com a sua nova transação:

Dia 5#Ação da Maria #2: transferir 10 moedas para José - _Ass. Maria_
Ação da Maria #3: transferir 2 moedas para o Hugo - _Ass. Maria_
Ação do Hugo #2: transferir 200 moedas para José - _Ass. Hugo_
Ação do Luiz #1: transferir 2 moedas para Hugo - _Ass. Luiz_
Hugo tem 0 moedas, José tem 295 moedas, Maria tem 86 moedas e Luiz tem 123 moedas_Ass. Hugo_

Hugo assina essa atualização mesmo que a sua transferência não faça sentido. Para fazer com que essa atualização seja final, ele precisar coletar mais duas assinaturas. Quando ele pede para José e Maria, ambos percebem que no balanço final do dia 3, Hugo tinha 92 moedas. Como ele quer enviar 200 para José? Eles se recusam a assinar enquanto essa transação não é removida e o balanço corrigido. Ele relutantemente concorda e publica um novo balanço correto. Eles eventualmente assinam:

Dia 5#Ação da Maria #2: transferir 10 moedas para José - _Ass. Maria_
Ação da Maria #3: transferir 2 moedas para o Hugo - _Ass. Maria_
Ação do Luiz #1: transferir 2 moedas para Hugo - _Ass. Luiz_
Hugo tem 96 moedas, José tem 95 moedas, Maria tem 86 moedas e Jake tem 123 moedas_Ass. Hugo_ _Ass. Maria_ _Ass. José_

Esse balanço é final porque tem três assinaturas.

É a manhã do dia 6. Luiz finalmente volta para o acampamento. Ele teve alguns dias duros por conta da tempestade. Ele não fez parte das discussões dos dois últimos dias e perdeu os anúncios com as novas transferência e publicações do balanço. Ele não sabe ao certo quantas moedas ele tem. Ele encontra o primeiro sobrevivente que vê e pede pelas últimas atualizações que ele perdeu. Ele recebe a última atualização do dia 5 e a do dia 4.

Está fácil para o Luiz se sincronizar com o resto do grupo. Ele consegue ver que esses balanços foram assinados por pelo menos 3 vezes, então ele está relativamente salvo de que eles estão certos. Ele pode refazer os cálculos por si mesmo baseado nessas atualizações e no balanço que ele tem (do dia 2). Isso permitirá a Luiz participar nas transferências de hoje como se não houvesse perdido nada.

O sistema está funcionando muito bem. É verdade que ele é um pouco simples, mas é o suficiente para as necessidades dos habitantes da ilham. Bem, não podemos ter um blockchain funcional sem um white-paper! O grupo se reúne e celebra a conquista publicando-o:

Porque isso é considerado um blockchain? Para iniciantes, cada pedaço de papel publicado representa um bloco. Cada bloco é numerado e aponta para o bloco anterior — formando uma cadeia de blocos. Para verificar o estado atual do balanço, qualquer observador tem que iniciar do começo da cadeia (dia 1 — o bloco inicial) e verificar cada bloco um depois do outro e em sucessão. O balanço é construído incrementalmente.

Essa é a implementação ideal de um blockchain? Provavelmente não. Pode ser melhorada de muitas formas. Por exemplo, ela só suporta esses 4 habitantes. O que acontecerá se outro sobrevivente cair na ilha? Esse protocolo será capaz de acomodar ele? Esse protocolo é atualmente permissionado, como podemos construído de um modo de não necessite de permissão? E se quisermos modificar ele para que utilize Prova de Trabalho ou talvez Prova de Comprometimento?

Bem, nós vamos explorar essas ideias no próximo post dessa série.

Tal Kol is a founder at Orbs.com — a public blockchain infrastructure for large scale consumer applications with millions of users. To learn more and read the Orbs white papers click here. [Telegram, Twitter, Reddit]

--

--