Altchains
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]
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.[3]
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.[3] 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),[4] comerciantes e mineradores pagarão sempre os custos totais para a manutenção desta estrutura de dados compartilhada.[3]
- 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"[3] 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.[3]
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.[5]
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,[5] mas precisa da maioria das mesmas partes conceituais. Também é necessário armazenar alguns dados da Bitcoin.[5] 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[5]:
- 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[6]:
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.[6] 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.[6]
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]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.[7] 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][7] 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][7]:
- 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; eu/
é 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]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.
Ver também
[editar | editar código-fonte]- ↑ a b «Blockchains and the Internet of Things» (em inglês). EUA: Postscapes. Consultado em 17 de junho de 2017
- ↑ 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
- ↑ a b c d e «Alternative chain - Objective» (em inglês). EUA: Bitcoin Wiki. Consultado em 16 de junho de 2017. Arquivado do original em 5 de setembro de 2017
- ↑ «Scalability - Simplified payment verification» (em inglês). EUA: bitcoinwiki. Consultado em 18 de junho de 2017
- ↑ a b c d «Alternative chain - Designing a new network» (em inglês). EUA: Bitcoin Wiki. Consultado em 16 de junho de 2017. Arquivado do original em 5 de setembro de 2017
- ↑ a b c «Alternative chain - Sharing work» (em inglês). EUA: Bitcoin Wiki. Consultado em 18 de junho de 2017. Arquivado do original em 5 de setembro de 2017
- ↑ a b c «Namecoin» (em inglês). EUA: Namecoin. Consultado em 18 de junho de 2017