O blockchain (também conhecido como "protocolo da confiança") é uma tecnologia que visa a descentralização como medida de segurança.

Introdução

Em 2008, foi apresentado ao grupo de discussão "The Cryptography Mailing" um artigo técnico contendo os princípios de funcionamento de uma cripto-moeda denominada Bitcoin, cuja proposta era a criação de uma moeda digital mundial que funcionasse em uma rede peer-to-peer e que permitisse o envio de pagamentos online de forma totalmente segura, sem o envolvimento de instituições financeiras para todos os participantes da rede. A autoria desse artigo é anônima e está sob o pseudônimo de Satoshi Nakamoto.

Conceitos

A tecnologia Blockchain pode ser entendida de várias formas. Em linhas gerais, pode-se dizer que se trata de um sistema distribuído de base de dados em log, mantido e gerido de forma compartilhada e descentralizada (através de uma rede peer-to-peer, P2P), na qual todos os participantes são responsáveis por armazenar e manter a base de dados.

Características

A tecnologia foi construída tendo em mente quatro principais características arquiteturais:

  1. segurança das operações
  2. descentralização de armazenamento/computação
  3. integridade de dados
  4. imutabilidade de transações

Explicando de outra forma, Blockchain é uma "ledger of facts" replicada em computadores que participam de uma rede peer-to-peer, onde:

  • - O ledger é um livro de registros digital, no qual uma vez validado um registro, este nunca mais poderá ser apagado;
  • - Um fato (fact) pode significar várias coisas, desde uma transação monetária, a um conteúdo de determinado documento, ou até mesmo um programa de computador, contendo, em algumas plataformas, até uma base de dados pequena;
  • - Os membros participantes da rede podem, ou não ser anônimos e são chamados peers ou “nós”;
  • - Toda operação ou transação dentro da ledger é protegida por tecnologias criptográficas de assinatura digital, inclusive para identificar os nós emissores e receptores das transações;
  • - Quando um nó deseja adicionar ao ledger um fato novo, é necessário um consenso entre todos ou alguns nós previamente determinados da rede, para decidir se um fato pode ser registrado no ledger;
  • - Havendo consenso, o fato será escrito e nunca mais poderá ser apagado, em tese, um processo levemente semelhante à escritura e registro de um imóvel no Brasil.

Rede Blockchain

Conforme mostrado, uma rede Blockchain possui os seguintes elementos essenciais:

  • - Fato (Fact): pode ser uma transação, um conteúdo digital ou um programa de computador, este último também denominado contrato inteligente (smart contract);
  • - Bloco: é um conjunto de fatos, geralmente em um número fixo predefinido;
  • - Cadeia de blocos (Blockchain): conjunto de blocos encadeados (conectados um a um) seguindo uma lógica matemática, ou seja, não são independentes.

Do ponto de vista de aplicação, a tecnologia Blockchain passou por uma grande evolução com a possibilidade de uso dos contratos inteligentes.

Eles são programas de computador replicados e executados por todos os nós da rede, ou por um conjunto predeterminado de nós denominados validadores. Aplicações baseadas em contratos inteligentes são chamadas Decentralized Applications ou Dapps.

Atualmente, as redes Blockchain são divididas em dois grandes grupos:

  1. As redes públicas ou de acesso aberto (permissionless)
  2. As redes privadas ou de acesso autorizado (permissioned)
A figura a seguir mostra algumas características de tais redes citadas:

O processo de validação ocorre quando um nó da rede, seguindo um conjunto de regras bem definidas, consegue montar um bloco que, neste exemplo, é um conjunto de transações monetárias utilizando a criptomoeda. Vale lembrar que o nó validador escolhe um número definido de transações não processadas da rede para montar o bloco.

Vários nós estão fazendo a mesma coisa simultaneamente, mas não necessariamente com as mesmas transações, ou seja, o processo de montagem do bloco depende das transações ainda não processadas visíveis ao nó. Há uma competição entre os nós para validar determinadas transações antes dos concorrentes. No Bitcoin, tal processo de validação é denominado mineração, em que o nó finaliza o processo de montagem do bloco quando resolve uma expressão matemática computacionalmente custosa.

Quando isso ocorre, todos os nós da rede são informados e o bloco, após passar por um processo de autenticação pelos demais nós, baseado nas regras de consenso, é inserido na cadeia com as transações devidamente validadas e um novo processo de construção de bloco se inicia em cada nó.

Cópias de cada transação são divididas em hash, e os hashes são emparelhados, os hash emparelhados novamente e divididos novamente até que um único hash permaneça, a raiz de um merkle.

A raiz do merkle é armazenada no cabeçalho do bloco. Cada bloco também armazena o hash do cabeçalho do bloco anterior, encadeando os blocos juntos. Isso garante que uma transação não possa ser modificada, sem modificar o bloco que a registra e todos os blocos seguintes.

As transações também são encadeadas juntas. O software de carteira dá a impressão de que valores são enviados para as carteiras, mas os blocos realmente mudam de transação para transação. Cada transação pega os valores recebidos anteriormente em uma ou mais transações anteriores, de modo que a entrada de uma transação é a saída de uma transação anterior.

Segue abaixo um exemplo de transação utilizando Bitcoin:

Uma única transação pode criar várias saídas, como seria o caso ao enviar para vários endereços, mas cada saída de uma transação específica só pode ser usada como entrada uma vez na cadeia de blocos. Qualquer referência subsequente é um envio duplo proibido - uma tentativa de envio os mesmos valores duas vezes.

Saídas são vinculadas a identificadores de transação (TXIDs), que são os hashes de transações assinadas.

Como cada saída de uma transação específica pode ser gasta apenas uma vez, as saídas de todas as transações incluídas na cadeia de blocos podem ser categorizadas como saída de transações não utilizadas (UTXOs) ou saídas de transações gastas. Para que um pagamento seja válido, ele deve usar apenas UTXOs como entradas.

Vantagens

Uma pergunta frequente nas discussões sobre Blockchain está relacionada com as vantagens que a tecnologia possui em relação às outras tecnologias na resolução de problemas semelhantes. As principais vantagens do Blockchain sobre as tecnologias ditas convencionais são:

  1. Economia de tempo: em algumas situações, como sistemas de pagamentos globais, o processamento de transações com Blockchain pode durar apenas minutos no lugar de dias, como outros sistemas convencionais;
  2. Minimização de custos: o acesso confiável a uma base de dados distribuída e consistente elimina custos operacionais (tais como de integração de sistemas heterogêneos) e, principalmente, de intermediários;
  3. Redução de riscos: a prevenção de fraudes, de adulterações e de outros crimes cibernéticos é facilmente reduzido pelo acesso transparente a dados imutáveis e íntegros;
  4. Aumento da confiança: processos e registros compartilhados com segurança e, se necessário, maior transparência, facilitam a verificação, a auditoria e a asseguração do bom funcionamento da infraestrutura tecnológica da qual dependem os parceiros de negócios;

Aplicações

Com a possibilidade de se utilizar os contratos inteligentes nas plataformas de desenvolvimento Blockchain atualmente disponíveis, as possibilidades de aplicações cresceram de modo significativo, indo além das já conhecidas criptomoedas, permitindo aplicações avançadas, tais como controle de imóveis, cadeias de produção e até mesmo a gestão de identidade digital de pessoas e coisas. Podendo ser usado por instituições financeiras, Governo ...

Ambiente de Desenvolvimento

Atualmente, é possível desenvolver aplicações de Blockchain utilizando plataformas de desenvolvimento com código aberto ou proprietário, porém predomina a tendência de desenvolvimento sobre plataformas de código aberto.

Altura do bloco e bifurcação

Qualquer minerador que consiga colocar um cabeçalho de bloco com sucesso em um valor abaixo do limite de destino pode adicionar o bloco inteiro à cadeia de blocos (supondo que o bloco seja válido). Esses blocos são comumente abordados por sua altura de bloco - o número de blocos entre eles e o primeiro bloco (bloco 0, mais conhecido como o bloco de gênese).

Vários blocos podem ter a mesma altura de bloco, como é comum quando dois ou mais mineiros produzem um bloco mais ou menos ao mesmo tempo. Isso cria uma bifurcação aparente na cadeia de blocos, conforme mostrado na ilustração acima.

Quando mineiros produzem blocos simultâneos no final da cadeia de blocos, cada nó escolhe individualmente qual bloco aceitar. Na ausência de outras considerações, os nós geralmente usam o primeiro bloco que vêem.

Eventualmente, um mineiro produz outro bloco que se liga a apenas um dos blocos concorrentes simultaneamente minerados. Isso torna esse lado da bifurcação mais forte que o outro lado. Assumindo que uma bifurcação contém apenas blocos válidos, os pares normais sempre seguem a cadeia mais difícil para recriar e descarta blocos antigos pertencentes a bifurcações mais curtass. (Blocos obsoletos também são chamados de órfãos ou blocos órfãos, mas esses termos também são usados para blocos órfãos verdadeiros sem um bloco pai conhecido.)

Bifurcações de longo prazo são possíveis se diferentes mineradores trabalharem com objetivos cruzados, como alguns mineradores trabalhando diligentemente para estender a cadeia de blocos ao mesmo tempo em que outros mineradores estão acessando tentando revisar 51% do histórico de transações.

Como vários blocos podem ter a mesma altura durante uma bifurcação de corrente de bloco, a altura do bloco não deve ser usada como um identificador global exclusivo. Em vez disso, os blocos geralmente são referenciados pelo hash do cabeçalho (geralmente com a ordem de byte invertida e em hexadecimal).

Dados de transação

Cada bloco deve incluir uma ou mais transações. A primeira dessas transações deve ser uma transação com base em moeda, também chamada de transação de geração, que deve coletar e gastar a recompensa em bloco (composta por um subsídio de bloco e quaisquer taxas de transação pagas pelas transações incluídas neste bloco).

O UTXO (saída de transações não utilizadas) de uma transação com base em moeda tem a condição especial de não poder ser gasto (usado como entrada) por pelo menos 100 blocos. Isso impede temporariamente que um minerador gaste as taxas de transação e bloqueie a recompensa de um bloco que pode, posteriormente, ser determinado como obsoleto (e, portanto, a transação com base em moeda destruída) após uma bifurcação da cadeia de block.

Não é necessário que os blocos incluam quaisquer transações não baseadas em moedas, mas os mineiros quase sempre incluem transações adicionais para coletar suas taxas de transação.

Todas as transações, incluindo a transação com base em moedas, são codificadas em blocos no formato binário (rawtransaction).

O formato rawtransaction é preparado para criar o identificador de transação (txid). A partir desses txids, a árvore merkle é construída ao emparelhar cada txid com um outro txid e depois combiná-los. Se houver um número ímpar de txids, o txid sem um parceiro será enviado com uma cópia de si mesmo.

Os hashes resultantes são combinados com um outro hash juntos. Qualquer hash sem um parceiro é dividido com ele mesmo. O processo se repete até restar apenas um hash, a raiz do merkle.

Por exemplo, se as transações foram meramente unidas (não hash), uma árvore de cinco partes merkle se pareceria com o seguinte diagrama de texto:

       ABCDEEEE .......Merkle root
      /        \
   ABCD        EEEE
  /    \      /
 AB    CD    EE .......E is paired with itself
/  \  /  \  /
A  B  C  D  E .........Transactions

A árvore de merkle permite que os clientes verifiquem por si mesmos que uma transação foi incluída em um bloco obtendo a raiz de merkle de um cabeçalho de bloco e uma lista de hashes intermediários de um par completo. O peer completo não precisa ser confiável: é caro falsificar cabeçalhos de bloco e os hashes intermediários não podem ser falsificados ou a verificação falhará.

Por exemplo, para verificar se a transação D foi adicionada ao bloco, um cliente SPV precisa apenas de uma cópia dos hashes C, AB e EEEE, além da raiz de merkle; o cliente não precisa saber nada sobre as outras transações. Se as cinco transações nesse bloco estivessem todas no tamanho máximo, o download do bloco inteiro exigiria mais de 500.000 bytes, mas o download de três hashes e o cabeçalho do bloco exigiriam apenas 140 bytes.