Criptomoeda: Como funciona isso?

 - Por DanielNC
Água e uma barbatana à mostra

Estamos bastante acostumados com o termo criptomoeda, temos uma ideia do que é mas não dá para ter certeza sobre o que é sem mergulhar no assunto. Aqui terá uma base do funcionamento básico da cryptocurrency, mesmo não sendo necessário saber para poder usar, mas sempre bom ter ideia do que acontece por traz das telas.


Resumidamente criptomoeda é um tipo de moeda digital, que usa criptografia para proteger transações.As moedas são transferidas sem qualquer intervenção de bancos, instituições financeiras ou governo e são validadas por "mineiros" que registram transações no blockchain e evitam a duplicidade de gasto da criptomoeda.

Vamos ao que interessa

 As criptomoedas seguem um protocolo base de funcionamento, pode haver pequenas diferença entre as criptomoedas mas nada que torne muito diferente das outras.
Para começar a entender o que acontence vamos partir da ideia de que todas transições são guardadas em um registro e ficam publicas todos podendo adicionar transações, necessitando da aprovação de quem esta dando o dinheiro.

Esta aprovação é como fosse uma assinatura, na qual utiliza-se de duas chaves(keys): a privada, exclusiva de cada usúario, e a pública, tendo a key privada sendo sempre a mesma, e a key publica que depende da transações, sendo variada. Com a junção das duas gera uma assinatura de 256 bits com 2²⁵⁶ possibilidades diferentes de assinatura. As transações sempre vão ser diferentes, pois  mesmo que seja o mesmo acordo, cada operação tem um índice diferente, o que altera a key publica, impedindo copia de assinatura.

O protocolo não permite gastar mais do que tem, para evitar transações em que não sejam pagas caso alguem tente passar a perna. O histórico destas transações é a moeda do sistema. Podendo trocar com o mundo real sem muita dificuldade.
Para ser algo descentralizado estes registros, não seria possível colocar em um site publico para todos acessarem, pois teria alguem que mantem o website ou alguem que diz as regras para adicionar uma transação. Para que evitar isso usa-se a estratégia de que todos terem uma cópia dos registros.

Quando alguem quiser fazer alguma operação necessita transmitir para todos sobre sua alteração para que haja uma atualização geral seus próprios registros, para que não tenha diferença entre os registros. Está ideia é o que torna a criptomoeda acessivel à todos e não ter um poder centralizado sobre uma entidade.

Mas como ter certeza de que a informação recebida não é falsa? 
E o que colocar primeiro se receber varias transações ao mesmo tempo? 
O que garante que todos salvando as mesma mudança?


Ai que entra a chave sobre o funcionamento das criptomoedas. Mas para continuar é necessario ter um entendimento sobre hash.

HASH

A hash é um valor retornado de uma função que recebe com entrada um número, uma mensagem ou o que desejar. O dever desta função, conhecida como função hash, é usar o dado de entrada para gerar um valor que seja único e que com uma pequena alteração na entrada gera como resposta um valor totalmente diferente. Uma das grandes utilidades da hash é verificar se algo foi alterado.

Funcão Hash
Um exemplo de hash simples que uma só a mudança de uma letra de maiúsculo par minúsculo já altera a resposta de forma significativa. A hash, diferente de uma criptografia, é algo feito para ser irreversível, ou seja, não há com saber a entrada mesmo tendo a hash.
Como neste exemplo simples, mesmo sabendo como é feito a hash não há como saber qual exatamente foi a entrada, pois além de não saber quantos caracteres tem a entrada, há outras palavras que podem gerar a mesma hash. E é isto que define se uma hash é boa, o numero de colisões, quando menos melhor.
A função hash é o mecanismo usado para gerar e verificar as "assinaturas" citadas no início.
Atualmente a função hash comumente utilizada é SHA-256, que é uma classe diferente de hash, conhecida como função hash criptográfica.
Voltando para os registros, onde contém uma lista de transações. Se aplicarmos a função hash, usando o SHA-256 como exemplo, no registro irá gerar uma hash de 256 bits.
Se tiver uma alteração a hash mudará, se colocarmos um número mágico no final da lista, que com ele a hash gerada irá conter 41 bits iniciais em 0.
Registro+Número Magico --- SHA-256 --->
00000000000000000000000000000000
00000000010000110110111101100100
01101001011011100110011100100000
01000101011001110110011101110011
00100000010000010110001101100101
01110010011101000110111100100000
01001101011010010111001101100101
01110010011000010111011001101001

Mas como fazer para encontrar este número mágico? 

Sabendo que a hash é um valor indecifrável e imprevisível, o jeito é tentar na base do chute.
De número em número para encontrar o mágico. Se fizesse um cálculo probabilístico, considerando um mensagem randômica, seria de 1 em 2⁴¹ (2,2 trilhões) a chance de encontrar este valor.
Ou seja, se este número foi encontrado mostra que houve um esforço para fazer a busca, esforço esse que é conhecido como Proof of Work(PoW), valor no qual só será útil para aquele registro, e se o registro for alterado terá que encontrar novamente o PoW.

Trabalho Computacional

Até aqui temos um registro com uma lista de transações com assinaturas, e o valor de verificação de validade, o PoW do registro, que é o valor que faz a hash gerada pelo SHA-256 tenha um número Z de 0's no início.

Vamos considerar estes registros como blocos, e para poder saber a ordem em que deve ficar os blocos, cada um deles terá o PoW do bloco anterior. Podendo com isso saber todos os blocos antecessores, algo parecido como uma lista encadeada, com a diferença de que se algum bloco for alterado, será necessário um novo PoW para este bloco e para todos os blocos em diante.
Esta junção de blocos com o número de validade é chamado "block chain".

Busca de bloco

Para a criação de blocos é necessário um certo trabalho computacional, no qual é permitido qualquer pessoa no mundo fazer.
O criador do bloco receberá uma lista de transações e colocar em um bloco com o PoW anterior e fazer o trabalho de encontra o número mágico deste novo bloco, quando feito isso ele transmite para todos o bloco criado.

Como recompensa de seu esforço é colocado uma transação onde ele é beneficiado, esse "block reward" não tem assinatura (por não vir de outra pessoa) e esta quantia de recompensa aumenta a quantidade de dinheiro na economia da moeda a cada bloco.
O criador de bloco é conhecido como mineiro(Miner), por haver varias outros mineradores tentado achar o PoW para a criação do bloco, o que necessita muito trabalho, e cada bloco como se fosse uma pequeno pedra preciosa, que apenas um sortudo irá encontrar primeiro.

Utilizando os blockchain

Para quem só quer utilizar o sistema, não irá mais utilizar as transações soltas, irá só receber os blocos dos Miners e atualizar as suas próprias cópias da block chain.
No caso de se receber duas sequência de blocos diferente, pelo protocolo de segurança utilizar sempre a maior sequência, e se forem do mesmo tamanho apenas é necessário esperar até que novos blocos sejam transmitido.

Dando prioridade à blockchain que tem mais trabalho encima. Assim confiando no esforço computacional, pois se uma pessoa quiser fraldar o sistema, enganando alguem ao mandar blocos diferentes, esta pessoa necessitaria de competir com todos os miners sozinha para gerar PoW's para cada bloco primeiro que todo mundo junto.

Quando se recebe um bloco é com o tempo que se vê se é confiável ou não, pois se for um bloco que está sendo utilizado por todos, a blockchain irá crescer encima dele.

O número Z de 0's, citado antes, normalmente é trocado periodicamente para que se tenha uma media de tempo para conseguir achar um novo bloco, dependendo da criptomoeda este tempo varia.
Com o tempo o tempo a recompensa que o miner recebe por bloco é reduzida gradativamente, consequentemente a economia da criptomoeda irá estabilizar, usando como exemplo o bitcoin, que tem o tempo médio de 10 minutos para achar um novo bloco, que a cada 210000 blocos, por volta de 4 anos, é cortado á metade a recompensa, começou com 50BTC em 2009, hoje está em 12,5BTC. No final haverá 21000000BTC ( 210000 blocos(50+25+12,5+6,25...)=210000000 ).

Isto é uma base o funcionamento,se quiser saber mais sobre tem várias outras coisas que não foram citada, como Merkle trees, PoW alternativas, Incentivo para colocar transação, scripting.
Existe sites para ver os blocos um deles é o blockexplorer. Post baseado principalmente neste vídeo. 

Comentários

Postagens mais visitadas deste blog

Emulador de Nintendo DS para pc: DesMuMe

NirCmd um plugin poderoso para seu cmd

PPSSPP O emulador de PSP