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?
git
hash
blockchain
Paebbels
fonte
fonte
Respostas:
git
não é um exemplo de tecnologia blockchain por várias razões (estas foram as primeiras que vieram à mente):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
git
projetos 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,git
quebra um dos princípios fundamentais da tecnologia blockchain.Um
git
repositório não é necessariamente duplicado em muitos servidores. Você pode trabalhar em umgit
repositório localmente e, se o disco local estiver corrompido, você perderá tudo. A tecnologia Blockchain implica a reprodução do razão entre servidores.Você pode reescrever o
git
histórico. Umgit push <remote> <branch> --force
local<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.fonte
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.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.
fonte
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.
fonte
Blockchain
nã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.fonte
Ao contrário de blockchains de criptomoeda ; O git não possui um mecanismo de consenso p2p sem confiança.
fonte
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:
Embora
Git
seja 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:
fonte
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.
fonte