Altchains

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa

Desde o surgimento da Bitcoin em 2009, muitas criptomoedas alternativas (ou altcoins) foram criadas utilizando estruturas similares. Cada uma com sua própria blockchain e usualmente conhecidas como altchains por serem fortemente baseadas no software da Bitcoin.[1]

Capazes de rastrear e verificar qualquer tipo de troca de dados, talvez a altchain que merece maior destaque seja a Namecoin.[1] Dentre outras altchains conhecidas, com fins monetários ou não, estão: Litecoin, Dogecoin, Zerocoin e Ethereum.[2][3]

Objetivo[editar | editar código-fonte]

A Bitcoin usa o algoritmo da Blockchain para alcançar um consenso distribuído sobre quem tem a posse das criptomoedas. As blockchains foram criadas especificamente para o projeto Bitcoin, mas podem ser aplicadas em qualquer lugar onde um consenso distribuído precisa ser estabelecido na presença de atores maliciosos ou não confiáveis.[4]

Embora seja possível tirar proveito da blockchain da Bitcoin para outros fins, o melhor é criar uma rede e uma altchain que compartilhem os mesmos mineradores.[4] Abaixo estão listadas algumas razões que justificam essa atitude:

  • A blockchain é uma estrutura de dados grande e complexa compartilhada entre muitas pessoas. Verificar sua integridade requer muitas operações lentas (e, portanto, caras), como as verificações do ECDSA e as buscas em disco. Hoje, todos que participam da Bitcoin administram um nó e, assim, mantêm toda a blockchain. Enquanto os futuros usuários finais provavelmente usarão modos mais eficientes, mas ligeiramente menos seguros como clientes SPV (do inglês, Simplified Payment Verification),[5] comerciantes e mineradores pagarão sempre os custos totais para a manutenção desta estrutura de dados compartilhada.[4]
  • O formato de transação que o Bitcoin usa é flexível, mas, em última instância, é projetado para fins monetários. Não é possível excluir o campo "valor"[4] mesmo que este campo não seja utilizado para a uma aplicação específica. Construir aplicativos não financeiros em cima de um sistema financeiro resulta em protocolos e códigos estranhos que são difíceis de entender, levando a problemas de manutenção.
  • Satoshi Nakamoto, idealizador do Bitcoin, se opôs a colocar dados não relacionados com Bitcoin na cadeia principal.[4]

Projetando uma nova rede[editar | editar código-fonte]

Para criar uma nova rede que usa o padrão de projeto Blockchain, idealizado por Nakamoto, é necessário definir o que significa uma transação nessa nova rede. Em Bitcoin, as transações dividem e combinam o valor usando scripts, mas não há obrigatoriedade em se utilizar esta forma de operação.[6]

Abaixo é mostrado um exemplo de uma transação simples semelhante a DNS, descrita usando a sintaxe do Protocol Buffers do Google:

message MinhaTx {
  required string name = 1;
  repeated bytes ip_addresses = 2;
  required bytes pubkey = 3;
  enum ClaimType {
    NEW_NAME,
    TRANSFER
  }
  required ClaimType type = 4;

  optional bytes dest_pubkey = 5;
  optional bytes signature = 6;
}

Assim como a implementação da transação, a definição do bloco também depende do desenvolvedor da nova altchain. A formatação do bloco não precisa ser necessariamente igual ao que Satoshi Nakamoto projetou,[6] mas precisa da maioria das mesmas partes conceituais. Também é necessário armazenar alguns dados da Bitcoin.[6] Abaixo é apresentado um exemplo mínimo do que é necessário:

message MeuBloco {
  required bytes prev_block_hash = 1;
  required uint32 difficulty = 2;
  required uint32 time = 3;

  repeated MinhaTx transactions = 4;
}

message SuperBloco {
  required MeuBloco my_data = 1;
  required BitcoinData bitcoin_data = 2;
}

No exemplo acima, foram excluídos os seguintes campos do formato implementado por Satoshi, listados abaixo juntamente com as justificativas para tal[6]:

  • Versão: o próprio protobuf lida com o controle de versão dos formatos de dados binários.
  • Raiz de Merkle: apesar de opcional o desenvolvedor pode optar por organizar as transações em uma raiz de Merkle, caso deseje utilizar o mesmo artifício de recuperação de espaço em disco utilizado por Satoshi Nakamoto no Bitcoin.

Compartilhando trabalho[editar | editar código-fonte]

Atualmente, o campo bitcoin_data é a forma de compartilhar o trabalho com os mineradores (assumindo que eles optem por instalar o software da altchain em conjunto com o seus nós bitcoin). O suficiente necessário para dividir o trabalho está definido abaixo[7]:

message BitcoinInfo {
  // Um header no formato Bitcoin. Por se estar no formato personalizado por Satoshi, é representado como um array de bytes.
  required bytes header = 1;

  // A primeira transação do bloco.
  required bytes coinbase_tx = 2;

  // O branch Merkle ligando a transação base ao header.
  required bytes coinbase_merkle_branch = 3;

  // O scriptSig da transação base contém bits de dados em ordem
  required int coinbase_tx_index = 4;
}

Uma árvore de Merkle é uma estrutura de dados na qual cada nó na árvore é um hash. As folhas da árvore são hashes das informações que se deseja incluir na árvore e os nós interiores são hashes das concatenações dos nós filhos.[7] Um ramo de Merkle é a parte de uma árvore de Merkle que permite que se prove criptograficamente que algo recebido está na árvore, sem precisar de tudo o que está na árvore. Eles são calculados pela função CBlock :: GetMerkleBranch() no código Bitcoin.

Armazenamos um ramo de Merkle aqui a fim de ser eficiente. Isso significa que não importa o tamanho do bloco Bitcoin atual, sua rede alternativa só precisa lidar com uma pequena quantidade de dados. Você poderia armazenar todo o bloco Bitcoin - isso seria mais simples, mas, em contrapartida, ineficiente.[7]

Altchains não-monetárias[editar | editar código-fonte]

Altchains são implementações alternativas do padrão de projeto Blockchain que não são necessariamente utilizadas para fins monetários. Muitas incluem uma moeda, mas esta moeda é usada apenas como um símbolo (token) a fim de alocar alguma outra informação, como um recurso ou um contrato. A moeda, em outras palavras, não é o ponto principal da plataforma; é uma característica secundária.[2]

Namecoin[editar | editar código-fonte]

Marca do Namecoin

Namecoin foi a primeira bifurcação do código bitcoin. É uma tecnologia de código aberto experimental que melhora a descentralização, segurança, resistência a censura, privacidade e velocidade de certos componentes da infraestrutura da internet como DNS e identidades.[8] Também pode ser definida como uma plataforma descentralizada de registro e transferência baseado em valor-chave que utiliza uma blockchain[2] e dá suporte a um registro global de nomes de domínio similar ao sistema de registro de nomes de domínio da Internet.

Namecoin é atualmente utilizada como um serviço de nomes de domínio (DNS) alternativo para o domínio raiz .bit e também pode ser utilizada para:

  • Registrar nomes e pares chave-valor em outros espaços de nome;
  • Armazenar informações como endereços de e-mail, chaves de criptografia, certificados SSL, arquivo de assinatura, sistemas de votação, certificados da bolsa; e uma série de outras aplicações.[2]

O sistema da Namecoin inclui uma moeda cujo símbolo é NMC, utilizada para pagar taxas de transações para registrar e transferir nomes. Atualmente, a taxa para registrar um nome é de 0.01 NMC ou, aproximadamente, 1 centavo de dólar americano.[2][8] Como na bitcoin, as taxas são coletadas por mineradores de namecoins.[2]

Os parâmetros básicos da Namecoin são os mesmos da Bitcoin[2][8]:

  • Geração de blocos: 10 minutos;
  • Total da moeda: 21 milhões de NMC até o ano 2140;
  • Algoritmo de consenso: prova-de-trabalho com SHA256;
  • Capitalização de mercado: 10 milhões de dólares na metade de 2014.

Espaços de nome (ou namespaces) da Namecoin não são restritos e qualquer um pode utilizar qualquer espaço de nome de qualquer forma.[2] No entanto, certos espaços de nome possuem uma especificação acordada, de modo que, quando é lido a partir da blockchain, softwares a nível de aplicativo sabem ler e continuar a partir dali. Se estiver mal formado, qualquer software que você use para ler a partir do espaço de nome específico criará um erro. Alguns dos espaços de nome populares são[2]:

  • d/ é o namespace do nome de domínio para domínios .bit;
  • id/ é o namespace para armazenar identificadores de pessoas, como endereços de e-mail, chaves PGP e assim por diante; e
  • u/ é uma especificação adicional, mais estruturada, para armazenar identidade (com base em openspecs).

O cliente Namecoin é muito semelhante ao do Bitcoin Core, porque é derivado do mesmo código-fonte. Após a instalação, o cliente baixará uma cópia completa da blockchain da Namecoin e estará pronto para consultar e registrar nomes. Existem três comandos principais[2]:

  • name_new
    • Pesquisa ou pré-registra um nome
  • name_firstupdate
    • Registra um nome e torna o registro público
  • name_update
    • Muda os detalhes ou atualiza um registro de nome

Por exemplo, para registrar o domínio my-domain.bit, devemos utilizar o comando name_new como a seguir[2]:

$ namecoind name_new d/my-domain
[
     "aceb666a3ac3686abd12118e488395c02555d7a2424eb12a0bff59b50",
     "4124ac6d13e16b31"
]

O comando name_new registra uma reivindicação no nome, criando um hash do nome com uma chave aleatória. As duas sequências de caracteres retornadas pelo comando name_new são o hash e a chave aleatória (4124ac6d13e16b31 no exemplo anterior) que podem ser usadas para tornar público o registro do nome. Uma vez que essa reivindicação tenha sido registrada na blockchain da Namecoin, ela pode ser convertida em um registro público com o comando name_firstupdate, desde que seja fornecida a chave aleatória[2]:

$ namecoind name_firstupdate d/my-domain 4124ac6d13e16b31"{"map": {"www": {"ip":"4.3.2.1"}}}}"
7a2e6a1c7e59ebe6bbe5901b359c2f62c02385a57f12606ecec4b2a

Este exemplo mapeará o nome de domínio www.my-domain.bit para o endereço IP 4.3.2.1. O hash retornado é o ID da transação que pode ser usado para rastrear esse registro. Você pode ver quais nomes estão registrados para você executando o comando name_list[2]:

namecoind name_list
[
    {
        "name" : "d/my-domain",
        "value" : "{map: {www: {ip:4.3.2.1}}}}",
        "address" : "XGRUaSruhsNCccpsBhriA8GeQfr",
        "expires_in" : 32959
    }
]

Os registros de Namecoin precisam ser atualizados a cada 36.000 blocos (aproximadamente 200 a 250 dias). O comando name_update não tem taxa e, portanto, a renovação de domínios na Namecoin é gratuita. Os provedores de terceiros podem lidar com registro, renovação automática e atualização via uma interface web, por uma pequena taxa. Com um fornecedor de terceiros, evita a necessidade de executar um cliente Namecoin, mas você perde o controle independente de um registro de nome descentralizado oferecido pela Namecoin.[2]

Ethereum[editar | editar código-fonte]

Marca do Ethereum

Ethereum é uma plataforma de processamento e execução de contrato Turing-completo baseada em um ledger de blockchain. Não é um clone do Bitcoin, mas um design e implementação completamente independentes. Ethereum possui uma moeda incorporada, chamada ether, que é necessária para pagar a execução do contrato. A cadeia de blocos de Ethereum registra contratos, que são expressos em uma linguagem Turing-completa de baixo nível, semelhante à bytecode. Essencialmente, um contrato é um programa que é executado em cada nó no sistema Ethereum. Os contratos Ethereum podem armazenar dados, enviar e receber pagamentos de ether, armazenar ether e executar uma gama infinita (pois é Turing-completo) de ações computáveis, atuando como agentes de software autônomos descentralizados.[2]

O Ethereum pode implementar sistemas bastante complexos que de outra forma são implementados como altchains. Por exemplo, o seguinte é um contrato de registro de nome semelhante ao utilizado no Namecoin escrito em Ethereum (ou, mais precisamente, escrito em uma linguagem de alto nível que pode ser compilada para o código Ethereum)[2]:

if !contract.storage[msg.data[0]]: # A chave ainda não foi reservada?
    # Então, reserve-a!
    contract.storage[msg.data[0]] = msg.data[1]
    return(1)
else:
    return(0) // Caso contrário, não fazer nada.

Referências

  1. a b «Blockchains and the Internet of Things» (em inglês). EUA: Postscapes. Consultado em 17 de junho de 2017 
  2. a b c d e f g h i j k l m n o p M. Antonopoulos, Andreas (Dezembro de 2014). Mastering Bitcoin - Unlocking Digital Cryptocurrencies (em inglês). EUA: O'Reilly Media. ISBN 978-1-4493-7404-4 
  3. «Blockchain - Alternative blockchains» (em português). Brasil: Wikipédia. Consultado em 18 de junho de 2017 
  4. a b c d e «Alternative chain - Objective» (em inglês). EUA: Bitcoin Wiki. Consultado em 16 de junho de 2017 
  5. «Scalability - Simplified payment verification» (em inglês). EUA: bitcoinwiki. Consultado em 18 de junho de 2017 
  6. a b c d «Alternative chain - Designing a new network» (em inglês). EUA: Bitcoin Wiki. Consultado em 16 de junho de 2017 
  7. a b c «Alternative chain - Sharing work» (em inglês). EUA: Bitcoin Wiki. Consultado em 18 de junho de 2017 
  8. a b c «Namecoin» (em inglês). EUA: Namecoin. Consultado em 18 de junho de 2017