Por que o Git não é considerado uma "cadeia de blocos"?

174

A estrutura de dados interna do Git é uma árvore de objetos de dados, em que cada objeto aponta apenas para o seu antecessor. Cada bloco de dados é hash. A modificação (erro ou ataque de bit) de um bloco intermediário será notada quando o hash salvo e o hash real se desviarem.

Como esse conceito difere da cadeia de blocos?
O Git não é listado como um exemplo de cadeias de blocos, mas pelo menos em resumos, as duas descrições de estrutura de dados são parecidas: bloco de dados, link reverso de direção única, hashes, ...).

Então, onde está a diferença: o Git não é chamado de cadeia de blocos?

Paebbels
fonte
2
Git não está listado como um exemplo de cadeia de blocos Quando tentei aprender o que era uma blockchain, fui chamado de git como o exemplo mais proeminente (não tenho o link exato agora, mas estava no topo da lista) retornada pela pesquisa do Google por "blockchain") #
Leon Leon
2
O Git e o blockchain estão usando árvores de merkle como sua estrutura de dados subjacente fundamental. Mas isso por si só não faz do Git uma blockchain, ou o contrário. - Se você conhece o Git (e seus componentes internos), conhece as árvores de merkle, o que pode ser uma revelação muito útil para entender como funcionam as cadeias de blocos.
poke
24
Caros eleitores próximos, você pode explicar seus motivos? Vejo 2 curtidas, bons comentários e uma resposta. Por que é baseado em opinião? É sobre estruturas de dados e algoritmos, que parecem não qualificar o Git como uma cadeia de blocos.
Paebbels 13/09
2
É sua opinião que "não é considerado ..." bitcoin.stackexchange.com/a/43627/77469
v.oddou
4
@ v.oddou As árvores Merkle existem desde 1979. Só porque duas tecnologias estão usando árvores Merkle com destaque como parte de seu conceito, isso não as torna iguais. É incorreto reduzir as cadeias Git ou de bloco para merkle árvores, pois nenhuma delas é merkle tree. Eles apenas os usam. Isso torna o post vinculado completamente irrelevante, pois na verdade se trata de árvores de merkle, e não de cadeias de blocos.
cutuca

Respostas:

53

git não é um exemplo de tecnologia blockchain por várias razões (estas foram as primeiras que vieram à mente):

  1. Em uma implementação de blockchain, cada bloco é verificado independentemente várias vezes antes de ser adicionado ao blockchain. Essa é realmente uma das coisas mais importantes sobre a tecnologia blockchain e é o que garante sua "inatacabilidade". Por outro lado, muitos gitprojetos não exigem verificação independente e, quando o fazem, exigem apenas uma pessoa para assinar uma alteração antes que ela seja confirmada no repositório. Portanto, com no máximo um ponto de validação em que você deve confiar, gitquebra um dos princípios fundamentais da tecnologia blockchain.

  2. Um gitrepositório não é necessariamente duplicado em muitos servidores. Você pode trabalhar em um gitrepositório localmente e, se o disco local estiver corrompido, você perderá tudo. A tecnologia Blockchain implica a reprodução do razão entre servidores.

  3. Você pode reescrever o githistórico. Um git push <remote> <branch> --forcelocal <branch>definido como um estado anterior ao que <remote>reescreveria o histórico. Nas cadeias de blocos, o razão é uma história imutável.

houtanb
fonte
104
"Em cadeias de blocos, o livro é uma história imutável." - Assim é a história do git. Ao "reescrever o histórico", você começa a partir de um ponto no passado e adiciona novas confirmações. O mesmo é possível com cadeias de blocos e, de fato, acontece toda vez que um garfo ocorre, mesmo que mais tarde seja abandonado.
Holger Just
8
Tanto quanto eu entendo cadeias de blocos vs. Git, você também pode reescrever cadeias de blocos, a menos que resolva o problema de colisão de hash. E para o Git, sim, você pode reescrever, mas todos os controles remotos ainda têm a história original. Reescrever o histórico cria novos hashes e uma árvore diferente. Se a cadeia de blocos não passar por uma operação como essa, esse não é um argumento válido, porque eu poderia implementá-la, se quiser. Ou, ao contrário, posso rejeitar empurrões forçados configurando um ramo como protegido.
Paebbels 13/09/17
4
Apenas o histórico do git é mutável. Ao executar uma push --forceúnica ramificação, você está perdendo referências a confirmações que são limpas pelo coletor de lixo. Isso é diferente de um fork que não é uma reescrita da história, mas um caminho de desenvolvimento alternativo.
houtanb 13/09/17
24
Podemos resumir que o Git poderia ser operado em modo de cadeia de blocos aplicando um fluxo de trabalho especial e proibindo várias operações?
Paebbels 13/09
4
@Paebbels sim, eu concordo com isso. Por padrão e em uso regular, não é, mas seria um fluxo de trabalho especial.
Houtanb
123

A razão pela qual o Git e as blockchains parecem semelhantes é porque ambos estão usando árvores de merkle como sua estrutura de dados subjacente. Uma árvore de merkle é uma árvore em que cada nó é rotulado com o valor de hash criptográfico de seu conteúdo, que inclui os rótulos de seus filhos.

O gráfico acíclico direcionado do Git é exatamente isso, uma árvore de merkle em que cada nó (tag, commit, árvore ou objeto de blob) é rotulado com o hash do seu conteúdo e o rótulo do seu "filho". Observe que, para commits, o termo "filho" entra em conflito um pouco com a compreensão dos pais pelo Git: os commit dos pais são filhos dos commits, você só precisa olhar para o gráfico como uma árvore que continua a crescer novamente.

As blockchains são muito parecidas com isso, pois também crescem dessa maneira e também estão usando sua propriedade merkle tree para garantir a integridade dos dados. Mas geralmente, blockchains são entendidos como muito mais do que merkle árvores, que é onde elas estão se separando "stupid content tracker" Git . Por exemplo, blockchains geralmente também significa ter um sistema altamente descentralizado no nível do bloco (nem todos os blocos precisam estar no mesmo local).

Compreender blockchains é meio difícil (pessoalmente, ainda estou longe de entender tudo sobre ele), mas considero entender os internos do Git como uma boa maneira de entender as árvores de merkle, o que definitivamente ajuda a entender uma parte fundamental dos blockchains.

cutucar
fonte
24
Sinto muito, mas em nenhum lugar as blockchains trazem mais do que o git. blockchains são exatamente tão estúpidos quanto git. Se você não acredita, é exagerado. A rede de pares e os sistemas de consenso são uma coisa separada.
v.oddou
2
livros privadas (blockchains) são conceitualmente idêntico ao git
Munhitsu
Normalmente, em um repositório git, há uma confirmação raiz, mas pode haver qualquer número de ramificações. Se você vê o último commit em um galho como commit raiz e os pais como filhos, você tem uma árvore com muitas raízes que crescem ... Acho que é apenas uma variação da árvore Merkle, onde as referências dos pais estão no conteúdo, em vez de referências filho. Pode haver vários pais e filhos, por isso nem é uma árvore.
herman
22

As moedas virtuais, como o Bitcoin, usam uma cadeia criptográfica de blocos de consensos distribuídos (merkle tree). O uso comum reduziu isso para 'blockchain'

Enquanto o git usa uma cadeia de blocos (merkle tree), ele não possui os componentes criptográficos dos consensos distribuídos que o uso comum do termo 'BlockChain' implica.

Brian Sullivan
fonte
17

Blockchainnão é apenas uma cadeia de blocos.

Blockchain é quando existe uma maneira de determinar a cadeia principal quando duas ou mais são desviadas e quando nenhuma autoridade central é necessária para essa determinação.

Daniel Vartanov
fonte
17

Ao contrário de blockchains de criptomoeda ; O git não possui um mecanismo de consenso p2p sem confiança.

Miguel Mota
fonte
Por que você considera um sistema de consenso sem confiança como parte de uma cadeia de blocos? Existem várias maneiras de criar confiança em uma cadeia de blocos, pois, simplesmente, você sabe que tudo na sua cópia local não pode ser removido pela próxima solicitação e especifica que deseja as alterações na cópia remota. Você só precisa de um consenso sem confiança quando, caso contrário, não está claro o que é certo. No git, várias ramificações podem estar "certas" e obter a fusão de eventos.
All
O @allo GitHub normalmente é usado como a fonte central da verdade, mas o que impede um administrador de forçar e anular a história? Se não havia GitHub e você se afastou de seus colegas, como você lida com conflitos de mesclagem? Como você determina quem tem direito?
Miguel Mota
1
Nada o impede de forçar a força. Mas como uma blockchain me garante, eu posso detectá-la porque minha cadeia não pode verificar se esses commits estão baseados nela. Esse é o ponto com uma blockchain, não com o consentimento descentralizado. E no git, eu explicitamente não quero ter um protocolo de consentimento para o que mesclo (desenvolvimento não é uma democracia), mas, na verdade, li os novos commits ao mesclá-los à minha cadeia. Portanto, minha cópia está correta, porque consiste em coisas que eu já tenho e, portanto, posso verificar (ou seja, vendo conflitos de mesclagem) e coisas que eu reviso e depois aceito.
allo
1
@todos vocês estão corretos a esse respeito, no entanto, afirmei na resposta "blockchains de criptomoeda", não blockchains em geral, mas agora que penso nisso, minha resposta não parece realmente se encaixar na pergunta que está sendo feita porque eu estava pensamento sobre o sistema como um todo e não as estruturas de dados subjacentes
Miguel Mota
Você está completamente certo sobre a diferença das cadeias de blocos usadas em git e criptomoedas. Não é apenas uma resposta para a pergunta por que (ou se) o git não é considerado uma cadeia de blocos, ao usar o termo rigorosamente. Até a resposta atualmente aceita é semelhante à sua resposta. Eu ainda prefiro a resposta que recebeu a recompensa.
25418
1

Os objetivos são diferentes para blockchain e git, embora ambos usem árvores de merkle como estrutura de dados.

A blockchainé geralmente gerenciado por uma rede ponto a ponto, aderindo a um protocolo para comunicação entre nós e validando novos blocos. Uma vez gravados, os dados em qualquer bloco não podem ser alterados retroativamente sem a alteração de todos os blocos subsequentes, o que requer consenso da maioria da rede.

Conforme o documento técnico do Bitcoin:

Uma versão puramente ponto a ponto do dinheiro eletrônico permitiria que os pagamentos online fossem enviados diretamente de uma parte para outra sem passar por uma instituição financeira. As assinaturas digitais fornecem parte da solução, mas os principais benefícios são perdidos se um terceiro confiável ainda for necessário para evitar gastos duplos. Propomos uma solução para o problema dos gastos duplos usando uma rede ponto a ponto. O registro de data e hora da rede faz o hash em uma cadeia contínua de prova de trabalho baseada em hash, formando um registro que não pode ser alterado sem refazer a prova de trabalho. A cadeia mais longa serve não apenas como prova da sequência de eventos testemunhada, mas também como prova de que ela provém do maior pool de energia da CPU. Desde que a maioria da energia da CPU seja controlada por nós que não cooperam para atacar a rede, eles ' gerará os mais longos atacantes de cadeia e espaço externo. A própria rede requer estrutura mínima. As mensagens são transmitidas com o melhor esforço possível, e os nós podem sair e voltar à rede à vontade, aceitando a maior cadeia de provas de trabalho como prova do que aconteceu enquanto eles estavam fora

Embora Gitseja um sistema de controle de versão distribuído para rastrear alterações no código-fonte durante o desenvolvimento do software, ele foi projetado para coordenar o trabalho entre os programadores, mas pode ser usado para rastrear alterações em qualquer conjunto de arquivos. Seus objetivos incluem velocidade, integridade dos dados e suporte a fluxos de trabalho não lineares distribuídos.

Conforme Linus Torvalds:

De muitas maneiras, você pode ver o git como um sistema de arquivos - é endereçável ao conteúdo e tem uma noção de controle de versão, mas eu realmente o projetei tendo o problema do ponto de vista de uma pessoa do sistema de arquivos (ei, kernels é o que eu faço) , e na verdade não tenho absolutamente nenhum interesse em criar um sistema SCM tradicional.

asing177
fonte
0

Como puxão disse :

Git e Blockchains parecem semelhantes porque ambos estão usando as árvores Merkle para armazenar transações com registro de data e hora ordenadas. Uma árvore de merkle é uma estrutura de dados de árvore em que cada nó é rotulado com o valor de hash criptográfico de seu conteúdo, que inclui os rótulos de seus filhos.

A primeira diferença é a função Hash : o Blockchain tem uma função de hash muito cara, de modo que cada bloco precisa ser extraído, onde um "bloco" do Git pode ser criado com uma simples mensagem de confirmação.

O objetivo do Bitcoin é adicionar confiança à ordem das transações.O foco está na cadeia mais longa, já que é mais caro de calcular e, portanto, provavelmente a verdade.

O Bitcoin realiza isso exigindo que o hash atenda a determinados parâmetros (começa com um número específico de 0s), incrementando um valor ("nonce") na mensagem até que um hash satisfatório seja encontrado. Isso exige esforço para encontrar, mas apenas 1 cálculo para verificar se há um nonce; e se várias nonces produzem um hash satisfatório, então uma será menor e tomada como verdade. Outros esquemas de autenticação tornam o hash confiável, centralizando a emissão do hash para uma autoridade, talvez votada por acordo de rede ou algum outro método.

Os dados da Blockchain são limitados a transações, que devem estar em conformidade com a validação. A transação deve ser válida para ser incluída no próximo bloco. Uma transação de Bitcoin corresponde a algo importante no mundo real que justifica o uso de um bloco caro para registrar essa transferência, como troca de valor monetário. Na verdade, não nos preocupamos com o livro final, é uma metáfora para algo no mundo real.

Por outro lado, os blocos Git são arbitrários, pois uma confirmação pode conter qualquer quantidade de dados. O valor está nas alterações de dados que estão sendo organizadas na árvore git porque nos preocupamos com o produto final, que é validado pela existência do repositório git.

O objetivo do Git é permitir que "livros-razão" baratos rastreiem várias alternativas de produtos.O "livro-razão" no Git é o que nos interessa, é o nosso produto final; os dados das transações apenas registram como o produto foi construído. Queremos tornar muito barato a criação de várias versões dos produtos finais, apenas o suficiente para exigir que o criador registre como eles criaram esse produto. Nenhuma validação explícita é feita nos dados, você mantém o produto final, se parecer bom, e essa existência torna útil ter a cadeia de criação desse produto. Se o produto final estiver ruim ou a ordem de consolidação for inválida, esse "razão" será excluído durante a coleta de lixo.

A segunda diferença é que as transações Blockchain devem vir de uma fonte válida anterior. No Git, não nos importamos com quais dados você usa para estender a árvore. No Blockchain, as transações devem vir de uma fonte válida anterior. Nesse sentido, o Git rastreia a extensão do nosso ambiente, enquanto o Blockchain rastreia a troca de valor dentro de um ambiente fechado.

Alex F
fonte