Executando verificação de segurança...
8

Electrum

Estudando sobre criptomoedas e tecnologias relacionadas, me deparei com o problema do gasto energético imenso do Bitcoin e outras criptomoedas que usam Prova-de-Trabalho (Proof-of-Work; PoW) como algoritmo de consenso.

Para quem não está familiarizado com o termo algoritmo de consenso, ele é uma parte essencial de qualquer blockchain (ou de qualquer sistema descentralizado), que garante o acordo dos participantes sobre o que é válido e o que não é. Simplificando, é ele quem “determina a verdade” nesses sistemas.

Na tentativa de resolver esse problema de gasto energético, eu idealizei um algoritmo de consenso e uma criptomoeda para usá-lo.

Nada foi implementado ainda, nenhuma linha de código escrita. Estou escrevendo este artigo na tentativa de receber ajuda ou sugestões. Ainda há alguns pontos a serem definidos. Vou falar mais deles daqui a pouco. Depois de definir as questões pendentes, pretendo escrever um artigo científico explicando em detalhes o algoritmo de consenso e a criptomoeda.

O nome da criptomoeda será Electrum, que é uma liga metálica de ouro e prata, usada como uma das primeiras moedas da história. Já o algoritmo de consenso vai se chamar:

Proof-of-Something

Proof-of-Something é o nome que eu escolhi por não ter criatividade suficiente para pensar em outra coisa.

O algoritmo se baseia no produto entre a movimentação de moedas dentro da blockchain pela “idade” dessas moedas. Vou explicar melhor.

Dentro de uma blockchain, as vezes acontece de um participante discordar de outro sobre o estado atual da rede. Por exemplo: o participante A acha que o último bloco da rede contém 10 transações dentro dele. Já o participante B acha que o último bloco contém 9 transações.

Para decidir quem está “certo”, este algoritmo de consenso vai calcular uma pontuação para a versão do participante A e outra para a versão do participante B. Essa pontuação é calculada multiplicando a quantidade de moedas contidas em cada entrada de cada transação pela “idade” de cada moeda.

Caso não esteja familiarizado com o conceito de entradas e saídas em uma criptomoeda, sugiro que leia este artigo (apenas a parte “Como são moldadas as transações?”) antes de continuar.

Cálculo de pontuação

Aqui eu explico em detalhes como o algoritmo funciona, passo a passo.

Passos para calcular a pontuação de uma transação (Tx):

Passo 1:

Pegar a primeira entrada de Tx.
(Vou chamar essa entrada de In)


Passo 2:

Pegar a saída que está sendo consumida em In.
(Vou chamar essa saída de Out)


Passo 3:

Calcular a pontuação de In, usando a fórmula:

P = X * Y
  • P é a pontuação de In.
  • X é a quantidade de moedas contidas em Out.
  • Y é a idade de Out.

Y é calculado da seguinte forma:

Y = B1 - B0
  • B1 é o índice do bloco que contém Tx (ou seja, é quando Out foi consumida. A “morte” de Out).
  • B0 é o índice do bloco em que Out foi criada (o “nascimento” de Out).

Passo 4:

Repetir a partir do passo 1, calculando a pontuação das próxima entradas de Tx.
Depois de calcular as pontuações de todas as entradas de Tx, somar todos os resultados (os P’s) para chegar à pontuação total de Tx.


Exemplo do cálculo de pontuação

Neste exemplo, calculamos a pontuação de uma transação hipotética (Tx).

Uma pessoa fez uma transação, Tx, com as seguintes características:

  • Tx está inserida no bloco 100
  • Tx possui 2 entradas:
    • A primeira entrada (In_1) consome uma saída (Out_1) que foi criada no bloco 90 e que carrega 5 Electrums.
    • A segunda entrada (In_2) consome uma saída (Out_2) que foi criada no bloco 55 e que carrega 3 Electrums.

Como já temos todas as informações de todas as entradas e saídas, já fizemos os passos 1 e 2. Agora, no passo 3, aplicamos a fórmula:

P = X * Y

Y = B1 - B0

P é a pontuação de In.
X é a quantidade de Electrums contidas em Out.
Y é a idade de Out.
B1 é o índice do bloco que contém Tx (ou seja, é quando Out foi consumida. A “morte” de Out).
B0 é o índice do bloco em que Out foi criada (o “nascimento” de Out).

Substituindo Y na primeira fórmula, temos:

P = X * (B1 - B0)

É importante lembrar que a fórmula é aplicada a cada entrada (In_1 e In_2) separadamente. Assim, vamos primeiro calcular a pontuação de In_1. Substituindo os valores de cada variável de In_1, temos:

P = 5 * (100 - 90)
P = 5 * 10
P = 50

Portanto, a pontuação de In_1 é de 50 pontos. Concluído o passo 3, passamos para o passo 4.

No passo 4, vamos apenas repetir o que já fizemos, mas desta vez com In_2.

P = X * (B1 - B0)

Substituindo…

P = 3 * (100 - 55)
P = 3 * 45
P = 135

Portanto, a pontuação de In_2 é de 135 pontos.

Finalmente, para calcular a pontuação de Tx, basta somar as pontuações calculadas. Assim, a pontuação de Tx é de 185 pontos (50 + 135).

A criptomoeda

Segurança

O algoritmo Proof-of-Something vai eliminar a necessidade/possibilidade de mineração de moedas, mas isso não fará a Electrum menos segura.

Na rede Electrum, a segurança contra gastos duplos (ataques 51%) será baseada na movimentação de Electrums entre diferentes usuários. Assim, quanto mais pessoas utilizarem a moeda, mais segura ela se tornará.

Para que alguém consiga realizar um ataque 51% bem-sucedido, esta pessoa precisaria criar uma transação (ou transações) com uma pontuação maior que a soma das pontuações de todas as outras transações “honestas” sendo sobrescritas. Por isso, quanto mais transações de pessoas honestas/normais, mais difícil será alguém mal intencionado realizar um ataque à rede.

Taxas

Para desincentivar transações desnecessárias (ou até ataques, como descrito acima), é bom que exista uma taxa sobre as transações. Dessa forma, caso alguém tente realizar um ataque 51%, essa pessoa vai necessariamente perder o dinheiro gasto com a taxa, caso seu ataque seja bem-sucedido.

O valor da taxa será de 0,2% sobre o valor transferido.

Velocidade

Nas criptomoedas em geral, a velocidade em que os blocos são criados depende da “sorte” do minerador e de seu poder de processamento (chamado hashing power).

Porém, na Electrum, a velocidade em que os blocos serão criados será sempre constante, uma vez que não vai haver mineração. Esse tempo será de 240 segundos (quatro minutos). Isso significa que a cada 4 minutos um bloco vai ser criado, contendo as transações feitas nesse intervalo de tempo.

Distribuição de moedas

As moedas precisam ser distribuídas entre os usuários de uma forma justa. Por exemplo, no Bitcoin elas são distribuídas como recompensas aos mineradores, o que é justo e lógico.

Porém, na Electrum, não vai existir mineração. Por isso, é necessário criar um outro mecanismo de distribuição de moedas. Eu tenho uma “ideia”, mas ela é incompleta e não resolve o problema: As moedas poderão ser distribuídas para os usuários através de staking. Staking é o pagamento de juros para quem “segurar” suas moedas por bastante tempo. O problema é que esse sistema só funciona se os usuários já possuírem moedas (Electrums).

Essa é talvez a parte mais importante do artigo. Eu não tenho uma solução para o problema apresentado, por isso vim pedir ajuda, sugestões, ideias. Vou falar mais disso na seção Contribuir. Então, por favor, eu quero/preciso de ideias melhores que essa.

Criação de blocos

Normalmente, em uma blockchain, todo bloco aponta para o bloco imediatamente anterior, sempre mantendo a linearidade (ou seja, não podem haver dois blocos apontando para um mesmo antecessor). Dessa forma, a partir de um bloco, é possível descobrir todos os anteriores, uma vez que eles formam uma corrente de blocos (uma block chain).

Porém, na Electrum, será um pouco diferente. Existem duas diferenças principais:

Quem vai apontar para os blocos anteriores serão as transações, não os blocos. Todas as transações deverão apontar para o bloco imediatamente anterior a elas. Isso servirá para garantir a imutabilidade da blockchain. Se não fosse assim, qualquer pessoa poderia modificar toda a blockchain, sem nenhum impedimento. As transações apontam para blocos; os blocos contêm outras transações; se qualquer transação for alterada ou removida da blockchain, todas as transações seguintes à alterada se tornarão inválidas. Por isso, o Proof-of-Something sempre vai escolher a versão da blockchain que possui a maior pontuação.

Blocos não serão minerados, eles serão criados simultaneamente por todos os nodes. Como dito na seção Velocidade, blocos vão sempre ser criados em uma taxa constante. Dessa forma, não seria viável um node (o minerador, em outras blockchains) criar o bloco e propagá-lo pela rede. Caso fosse assim, deveria haver alguma forma de escolher este minerador, o que apenas complica o sistema. Ao invés disso, na Electrum, os nodes criarão blocos localmente, agrupando as últimas transações recebidas, quando for o momento para a criação do bloco (de 4 em 4 minutos). Para garantir o consenso, os nodes, após criarem um bloco, deverão verificar se todos possuem as mesmas transações e, caso algum node não tenha recebido uma transação, ele irá acrescentá-la à sua versão local da blockchain nesse momento.

Se algo não ficou claro, não deixe de perguntar ou comentar, que eu vou sempre tentar responder.

Contribuir

Como eu disse anteriormente, o objetivo principal deste artigo é encontrar pessoas interessadas em ajudar, seja com sugestões de implementações, seja de fato construindo o sistema comigo. Se você teve qualquer ideia, dúvida ou sugestão, POR FAVOR não deixe de comentá-la, independente do que for.

Os dois pontos principais que eu preciso de ajuda são:

  • Como distribuir as moedas
  • Quais tecnologias usar (linguagens, frameworks, bibliotecas…)

Lembrando que não são os únicos pontos, apenas os principais. Toda sugestão é bem-vinda.

Carregando publicação patrocinada...
3

Rafael, eu tenho um conhecimento muito superficial em blockchain, mas achei a leitura do seu artigo sensacional! Gostaria que o TabNews fosse maior para conseguir atingir mais pessoas que gostam desse assunto ao ponto de conseguir lhe ajudar a pensar numa solução 🤝

Em paralelo, me chamou a atenção na parte que você propos cobrar um imposto de 1% por transação para evitar abusos. Isso me lembrou a CPMF (Contribuição Provisória sobre Movimentação Financeira) que iniciou em 1997 cobranco 0,20% de uma transação bancária e terminou em 2007 cobrando 0,38%. Destaco isso, pois quando li 1% achei um valor muito alto, mas foi só uma percepção superficial minha, eu não sei se isso é uma prática comum no mercado de criptomoedas 🤝

3

Muito obrigado, Filipe!

Sobre a taxa de 1%, realmente foi um valor escolhido arbritariamente. Que bom que você leventou essa questão, porque eu passei um tempo tentando decidir essa valor mas não encontrei nada similar para me basear, então o CPMF na verdade é muito útil como referência.

Como eu mencionei no artigo, nada que eu apresentei é definitivo e a ideia ainda está sendo amadurecida. Devo modificar o valor do imposto para algo mais baixo e depois editar essa publicação. O único problema que eu vejo em abaixar a taxa é a questão da segurança, já que ela ajuda a desincentivar ataques ou transações desnecessárias (que contribuem para tornar a rede mais pesada já que todas as transações são armazenadas pelos nodes).

Muito bom, obrigado pelo comentário!

2

Justo Rafael, entendo perfeitamente! Sobre o ponto de vista da segurança, faz total sentido, quanto maior melhor. O que precisa ser analizado é o lado da "usabilidade" e "interesse" em querer aportar capital na criptomoeda.

Por exemplo, se essa criptomoeda for usada como moeda para transacionar valores várias vezes por mês como faço com dinheiro, ter um imposto sobre isso irá inibir esse comportamento, mesmo que autêntico, pois tudo vai custar mais caro para mim. Esse foi o efeito da CPFM, as pessoas seguravam o máximo que podiam o dinheiro na conta do banco, ou evitavam ao máximo colocar dinheiro na conta em primeiro lugar. E se essa criptomoeda for usada como investimento, vou precisar medir, de alguma forma, que ela vai precisar render 2x da % (que as movimentações de entrada e saída irão me tirar), assim como é feito com taxa de corretagem variável, para entender quando e se vai valer a pena fazer esse investimento.

De qualquer forma, essas minhas dúvidas são sinais que o seu projeto está encostando na vida real e isso é ótimo! Agora é questão de continuar :)