Alternative Chain

Origem: Wikipédia, a enciclopédia livre.

Um Alternative Chain é um sistema que utiliza o algoritmo do block chain para conseguir consenso distribuído sobre um tópico particular. Os altchains podem compartilhar mineiros com uma rede pai, como o Bitcoin ; isso é chamado de mineração mesclada. Alternatives chains tem sido sugeridas como formas de implementar o DNS, trocas de moedas P2P, autorização de certificação SSL, timestaping armazenamento de arquivos e sistemas de votação. [1]


Objetivo[editar | editar código-fonte]

Bitcoin usa o algoritmo do Blockchain para conseguir consenso distribuído sobre quem possui as moedas. As cadeias de blocos foram inventadas 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.[1]

Embora seja possível abusar da cadeia de blocos financeiros dos Bitcoins para outros fins, é mais viável criar uma rede e uma cadeia alternativas que compartilhem os mesmos mineradores. Há várias razões para fazer isso.[2]


  • A cadeia de blocos é uma estrutura de dados grande e complexa compartilhada entre muitas pessoas. Verificando sua integridade requer muitas operações lentas (e assim caras) como ECDSA verificações e procura de disco. Todo mundo que participa no Bitcoin hoje corre um nó e, assim, mantém todo o sistema. Enquanto em futuros usuários finais provavelmente usarão modos mais eficientes, comerciantes e mineiros provavelmente sempre pagarão os custos totais para a manutenção dessa estrutura_de_dados compartilhada. Todas estas pessoas hoje estão unidas por um interesse comum em uma nova forma de pagamentos. Podem ou não estar interessados em outros regimes. Assim, uma razão para manter a cadeia Bitcoin para o financiamento é injusto externalizar os custos de esquemas não relacionados a pessoas que estão interessadas apenas em pagamentos - o exemplo canônico sendo comerciantes. Aumentar o custo de aceitar Bitcoins para bens e serviços prejudica a todos que usam o sistema, reduzindo o número de comerciantes ou aumentando seus custos.

[2]

  • Outra razão é que é apenas má engenharia para empinar todos os possíveis quorum distribuído para as restrições de design do Bitcoin. O formato de transação usado pelo Bitcoin é flexível, mas, em última instância, é projetado para financiamento. O usuário não deve deixar de fora o campo "valor", pois não faria nenhum sentido para sua aplicação particular. Construir aplicativos não financeiros sobre um sistema financeiro resulta em protocolos e códigos difíceis de entender, levando a problemas de manutenção.

[3]

  • Uma última razão é que Satoshi se opôs a colocar dados não-Bitcoin relacionados com a cadeia principal. Como criador do sistema, sua opinião deve levar muito peso com alguém sério sobre estendê-lo.


Conceitos préveios[editar | editar código-fonte]

Satoshi Nakamoto[editar | editar código-fonte]

Satoshi Nakamoto é o fundador do Bitcoin. Em um perfil de função foi falado que seria do japão , porém não se sabe muito sobre sua localização.[4]

Seu envolvimento no projeto Bitcoin tinha diminuído até o final de 2010 , até que terminou por completo. As fontes mais recentes indicam que Satoshi desapareceu para sempre.[5]

Possíveis motivos[editar | editar código-fonte]

Ele deixou algumas pistas sobre porque ele estaria fazendo o projeto com a inclusão do seguinte texto no bloco Genesis ,"The Times 03/jan/2009 chanceler na bera do segundo salvamento para o bancos"

algumas citações interessantes :

"Sim, nós não encontraremos uma solução significativa para o problema politico , mas podemos ganhar uma grande batalha na corrida armamentista e ganhar um novo território de liberdade por vários anos".

"Os governos são bons em cortar as cabeças de umas redes controladas centralmente como Napster, mas redes P2P puras como Gnutella e Tor parecem prender a seus próprios conceitos(governo)."[6]

possível identidade[editar | editar código-fonte]

Sua possível identidade e nacionalidade são desconhecidas.

Ele é totalmente desconhecido fora do bitcoin, tanto quanto qualquer um possa dizer, e sua chave PGP(nunca usado) foi criada apenas alguns meses antes da data do bloco gêneses. Ele parece estar muito familiarizado com a lista de discussão de criptografia, mas não há postagens que não estejam referentes aos bitcoins ao seu nome. Ele usou um endereço de e-mail anonimo para hospedagem da sua conta e enviava os emails quando conectado via Tor. Alguns especularam que toda a sua identidade foi criada antecipadamente para se proteger ou proteger a rede. Talvez ele escolheu o nome Satoshi porque pode significar "sabedoria" ou "razão" e Nakamoto pode significar "fonte Central".

Em ultima análise, o design do Bitcoin e seu uso de prova criptográfica e implementação totalmente aberta é aquele que torna seu criador, em certo sentido , irrelevante e apenas de interesse por razões históricas.

Bloco genesis[editar | editar código-fonte]

Um bloco Gêneses é o primeiro bloco de uma cadeia de bloco(block chain). As versões modernas dos bitcoins lhe atribuem o numero de bloco 0, embora as versões mais velhas o tenham dado o número 1. o bloco geneses é quase sempre codificado no software. é um caso especial em que não faz referencia a um bloco anterior , tanto para o bitcoin quanto para todos os seus derivados , produzindo um subsídio inutilizavel. [7] É o primeiro bloco do block chain. modernas versões of bitcoins assin

Bitcoin[editar | editar código-fonte]

Bitcoin é uma moeda digital descentralizada criada pelo desenvolvedor Satoshi Nakamoto. Esse sistema de compra não depende de um servidor central para processar transações ou armazenar fundos. Há um máximo de 2.099.999.997.690.000 elementos (chamados satoshis),que atualmente são mais comumente medidos em unidade de 100. 000 . 000 conhecidos como BTC dito de outra forma, não mais de 21 milhões de BTC podem ser criados, fazendo todo o sistema ser efetivamente escasso.[8]

Em abril de 2014 , é a moeda alternativa mais amplamente usada,[9] há também uma capitalização total de mercado acima de 6 bilhões de dólares dos EUA.[10]


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

Para criar uma nova rede que usa cadeias de blocos Nakamoto, é necessário começar definindo o que significa uma transação em sua nova rede. As transações do Bitcoin são divididas e combinam valor usando scripts. Aqui está um exemplo de uma simples "transação" de estilo DNS descrita usando a sintaxe dos buffers de protocolo do Google.[3]

message NameTx {
 required string name = 1;
 repeated bytes ip_addresses = 2;
 required bytes pubkey = 3;
 enum ClaimType {
   NEW_NAME,
   TRANSFER
 }
 required ClaimType type = 4;
 // Only used if type == TRANSFER. The new owner of the name and signature proving current ownership.
 optional bytes dest_pubkey = 5;
 optional bytes signature = 6;}

Isso é muito diferente de uma transação de estilo Bitcoin. Não há conceito de entradas, saídas, endereços, valores ou scripts. Tem o que você precisa para um esquema de estilo DNS muito simples (que não tem controles de abuso etc) e nada mais. Também não há conceito de uma transação "coinbase".

A definição de bloco também depende do usuário. Ele não precisa ser formatado da mesma forma que Satoshi escolheu, mas Há necessidade da maioria das mesmas partes conceituais. precisa-se armazenar algo mais, alguns dados do Bitcoin. Aqui está um exemplo mínimo do que é necessário: [3]

 message MyBlock {
 required bytes prev_block_hash = 1;
 required uint32 difficulty = 2;
 required uint32 time = 3;
 repeated MyTx transactions = 4;}
 message SuperBlock {
 required MyBlock my_data = 1;
 required BitcoinData bitcoin_data = 2;}

[11]


Trabalho compartilhado[editar | editar código-fonte]

É importante observar que não se tem os seguintes campos do formato Satoshis: Este é um texto de demonstração a qual o usuário deve substituí-lo pelo seu conteúdo.


O campo de dados bitcoin é como o usuário compartilha o trabalho com os mineiros hoje (supondo que eles optam por instalar o software ao lado de seu nó bitcoin). É definido como este:

message BitcoinData {
 // A Bitcoin format block header. Because it's in Satoshis custom format we represent this as a byte array.
 required bytes header = 1;
// The first transaction from the block.
 required bytes coinbase_tx = 2;
 // The merkle branch linking the coinbase transaction to the header.
 required bytes coinbase_merkle_branch = 3;
 // The coinbase scriptSig contains bits of data in order. Which one is our hash?
 required int coinbase_tx_index = 4;}


Tudo o que se precisa para compartilhar o trabalho são as quatro coisas acima.

Uma árvore merkle é uma estrutura_de_dados em que cada nó na árvore é um hash. Os nós de folha são hachuras das coisas que você deseja incluir na árvore. Os nós interiores são hashes das concatenações dos nós filhos. Um ramo merkle é uma parte de uma árvore merkle que permite que você criptograficamente provar que algo que você está dado estava na árvore, sem precisar de tudo o que estava na árvore. Eles são calculados pela função CBlock :: GetMerkleBranch () no código Bitcoin.

É armazenado um ramo de merkle aqui para a eficiência. Isso significa que não importa quão grande o bloco Bitcoin atual é, sua rede alternativa só precisa lidar com uma pequena quantidade de dados. o usuário poderia simplesmente armazenar todo o bloco Bitcoin - que seria mais simples, e mas ineficiente.[3]


A filial merkle liga a transação de coinbase ao cabeçalho do bloco, para que você possa provar que estava nesse bloco. O coinbase TX é um regular Bitcoin coinbase (que faz novas moedas e reivindicações taxas), exceto o scriptSig em sua entrada contém uma entrada extra que hoje scriptSigs não. Essa entrada extra é um hash de sua estrutura de bloco. A base de dados scriptSig hoje é formatada da seguinte forma:

void IncrementExtraNonce(CBlock* pblock, CBlockIndex* pindexPrev, unsigned int& nExtraNonce, int64& nPrevTime){
   .....
   pblock->vtx[0].vin[0].scriptSig = CScript() << pblock->nBits << CBigNum(nExtraNonce);
   .....
 }

[11]


Apenas os bits de dificuldade e o "nonce extra". Mas, na verdade, é permitido conter qualquer coisa, desde que não seja muito grande. Então, em novos blocos seria:

<MyBlock hash> <nBits> <nExtraNonce>

Para obter o hash MyBlock no Bitcoin requer um comando RPC atualmente não implementado, "setextrahashes". Ele atualizaria uma lista global e a função IncrementExtraNonce incluirá os hashes extras quando o scriptSig for construído. Esta é uma mudança muito simples para o Bitcoin.[11]


No scriptSig acima o coinbase_tx_index seria zero. É possível trabalhar em um número arbitrário de cadeias alternativas simultaneamente:

<MyBlock hash> <SomeOtherChainBlock hash> <nBits> <nExtraNonce>

[11]


Caso em que a mensagem BitcoinData para SomeOtherChain seria 1 em vez de zero.


Nota importante: a cadeia do usuário tem sua própria dificuldade e, como tal, a taxa de criação de blocos é independente da quantidade de mineração que ocorre.

Software de nó independente[editar | editar código-fonte]

A nova rede tem sua própria base de código. Ele pode ser escrito em qualquer idioma que o usuário gostaria.

Quando um nó na rede recebe uma mensagem informando sobre uma nova transação, ele verifica se a transação segue as regras da rede. Para usar este exemplo DNS simples, verificaria se o usuário estaria reivindicando um novo nome, ele ainda não existe e se os usuários estiverem transferindo um nome que as assinaturas a qual estejam corretas.

Se a transação for válida, ela será adicionada à mensagem MyBlock atual do usuário. Essa mensagem é serializada para binário, hashed e, em seguida, seu nó faz um RPC para Bitcoin dizendo-lhe que é o hash extra atual. Quando Bitcoin encontra um bloco de formato Bitcoin da dificuldade direita para a rede, informa seu software e passa o cabeçalho de bloco, transação de coinbase e ramo de merkle a ele. O nó os combina em uma mensagem BitcoinData, que é então colada junto com seu bloco de correntes alternativas. Este "superbloco" é então transmitido através da rede independente de usuários P2P.

Quando um nó na nova rede recebe um superbloco, ele faz o seguinte:

  1. .Verifica se o conteúdo do MyBlock está correto, ou seja, que as transações seguem as regras
  2. .Verifica que o hash MyBlock anterior faz com que ele se encaixe em algum lugar na cadeia e que a dificuldade está correta.
  3. .Hashes a estrutura MyBlock e, em seguida, verifica que este hash aparece no BitBeinData coinbase scriptSig, no local certo.
  4. .Extrai a raiz merkle do bloco de formato Bitcoin a partir do cabeçalho e, em seguida, verifica que a base de moeda tx fornecido, de fato, existem nesse bloco (usando o ramo, raiz, tx e cabeçalho juntos).
  5. .Verifica se o hash do cabeçalho do bloco Bitcoin formato está abaixo da dificuldade encontrada na estrutura MyBlock.


Referências

  1. a b Alternative Chain,[1],bitcoinwiki,15 de julho de 2016
  2. a b Alternative Chain ,[2],bitcoinwiki,15 de julho de 2016
  3. a b c d Alternative Chain ,[3],bitcoinwiki,15 de julho de 2016
  4. Satoshi Nakamoto profile on P2P Foundation
  5. «Transcript of #bitcoin-dev for 2011/04/26». Consultado em 12 de fevereiro de 2017. Arquivado do original em 18 de julho de 2012 
  6. Re: Bitcoin P2P e-cash paper Fri, 07 Nov 2008 09:30:36 -0800
  7. Genesis block ,[4],bitcoinwiki,19 de julho de 2016
  8. Bitcoin ,[5],bitcoinwiki,29 de janeiro de 2016
  9. «Mt.Gox data». Bitcoincharts 
  10. «Market Capitalization». BlockChain.info. Consultado em 21 de abril de 2014 
  11. a b c d Alternative Chain,[6],bitcoinwiki,15 de julho de 2016