Perché Git non è considerato una "catena a blocchi"?


174

La struttura dati interna di Git è un albero di oggetti dati, in cui ogni oggetto punta solo al suo predecessore. Ogni blocco di dati è sottoposto a hash. La modifica (errore bit o attacco) di un blocco intermedio verrà notata quando l'hash salvato e l'hash effettivo si discostano.

In che modo questo concetto è diverso dalla catena a blocchi?
Git non è elencato come esempio di catene di blocchi, ma almeno nei riassunti, entrambe le descrizioni della struttura dei dati si assomigliano: blocco di dati, collegamento inverso in una sola direzione, hash, ...).

Allora, qual è la differenza, che Git non è chiamato catena di blocchi?


2
Git non è elencato come esempio di catene a blocchi Quando ho provato per la prima volta a capire cosa fosse una blockchain, mi è stato riferito a git come l'esempio più importante (non ho il link esatto ora, ma era dalla cima del elenco restituito da Google alla ricerca di "blockchain")
Leon,

2
Sia Git che Blockchain stanno usando gli alberi Merkle come struttura di dati sottostante fondamentale. Ma questo da solo non rende Git una blockchain, o viceversa. - Se conosci Git (e i suoi interni), conosci comunque alberi di merkle, che possono essere una rivelazione molto utile per capire come funzionano le blockchain.
colpì il

24
Cari elettori stretti, potete spiegare le vostre ragioni? Vedo 2 Mi piace, buoni commenti e una risposta. Perché è basato sull'opinione? Si tratta di strutture di dati e algoritmi, che sembrano non qualificare Git come una catena di blocchi.
Paebbels,

2
Secondo te "non è considerato ..." bitcoin.stackexchange.com/a/43627/77469
v.oddou

4
@ v.oddou Gli alberi Merkle esistono dal 1979. Solo perché due tecnologie utilizzano gli alberi Merkle in modo prominente come parte del loro concetto, ciò non li rende uguali. Non è corretto ridurre Git o bloccare le catene per merkle alberi in quanto nessuno dei due è merkle tree. Li usano solo. Ciò rende il post collegato completamente irrilevante poiché in realtà parla di alberi merkle e non di catene a blocchi.
colpire

Risposte:


53

git non è un esempio di tecnologia blockchain per diversi motivi (questi sono stati i primi che mi sono venuti in mente):

  1. In un'implementazione blockchain, ogni blocco viene verificato in modo indipendente più volte prima di essere aggiunto alla blockchain. Questa è davvero una delle cose più importanti della tecnologia blockchain ed è ciò che garantisce la sua "infondabilità". D'altra parte, molti gitprogetti non richiedono una verifica indipendente e, quando lo fanno, richiedono solo una persona per firmare una modifica prima che venga impegnata nel repository. Quindi, con al massimo un punto di convalida di cui ti devi fidare, gitrompe uno dei principi fondamentali della tecnologia blockchain.

  2. Un gitrepository non è necessariamente duplicato su molti server. Puoi lavorare da un gitrepository localmente e se il tuo disco locale fosse danneggiato, perderesti tutto. La tecnologia blockchain implica la riproduzione del libro mastro tra server.

  3. Puoi riscrivere la gitstoria. Un git push <remote> <branch> --forcedove <branch>è impostato su uno stato precedente a quello at <remote>riscriverebbe la cronologia. Nelle blockchain, il libro mastro è una storia immutabile.


104
"Nelle blockchain, il libro mastro è una storia immutabile." - Anche la storia di Git. Quando "riscrivi la cronologia", inizi da un punto nel passato e aggiungi nuovi commit. Lo stesso è possibile con le catene a blocchi e, in effetti, accade ogni volta che si verifica un fork, anche se in seguito viene abbandonato.
Holger, appena il

8
Per quanto riguarda le catene a blocchi rispetto a Git, puoi anche riscrivere le catene a blocchi, a meno che tu non risolva il problema della collisione dell'hash. E per Git, sì, puoi riscrivere, ma tutti i telecomandi hanno ancora la storia originale. Riscrivere la storia crea nuovi hash e un albero diverso. Se la catena a blocchi non supera tale operazione, questo non è un argomento valido, perché potrei implementarlo se lo volessi. O al contrario posso rifiutare le spinte forzate impostando un ramo come protetto.
Paebbels,

4
@Holger: Solo la cronologia git è modificabile. Nel fare un push --forcesu un singolo ramo stai perdendo riferimenti a commit che vengono ripuliti dal Garbage Collector. Questo è diverso da un fork che non è una riscrittura della storia ma piuttosto un percorso di sviluppo alternativo.
houtanb,

24
Possiamo riassumere che Git potrebbe essere gestito in una modalità a catena di blocchi applicando un flusso di lavoro speciale e vietando diverse operazioni?
Paebbels,

4
@Paebbels sì, sono d'accordo. Di default e nell'uso regolare non lo è, ma con un flusso di lavoro speciale lo sarebbe.
houtanb,

123

Il motivo per cui Git e blockchain sembrano simili è perché entrambi utilizzano alberi di merkle come struttura dati sottostante. Un albero merkle è un albero in cui ogni nodo è etichettato con il valore hash crittografico del loro contenuto, che include le etichette dei suoi figli.

Il grafico aciclico diretto di Git è esattamente questo, un albero merkle in cui ogni nodo (tag, commit, albero o oggetto BLOB) è etichettato con l'hash del suo contenuto e l'etichetta del suo "figlio". Si noti che per i commit, il termine "figlio" è leggermente in conflitto con la comprensione di Git dei genitori: i commit dei genitori lo sono i figli dei commit, devi solo guardare il grafico come un albero che continua a crescere rinviandolo.

Le blockchain sono molto simili a questo, poiché continuano a crescere in questo modo e stanno anche usando la sua proprietà dell'albero merkle per garantire l'integrità dei dati. Ma di solito, le blockchain sono considerate molto più che semplici alberi merkle che è dove si stanno separando dallo “stupido tracker di contenuti” Git . Ad esempio, blockchain di solito significa anche avere un sistema altamente decentralizzato a livello di blocco (non tutti i blocchi devono trovarsi nello stesso posto).

Comprendere le blockchain è un po 'difficile (personalmente, sono ancora molto lontano dalla comprensione di tutto al riguardo), ma considero comprendere gli interni di Git come un buon modo per comprendere gli alberi di merkle che sicuramente aiuta a comprendere una parte fondamentale delle blockchain.


24
Mi dispiace ma da nessuna parte blockchain porta qualcosa di più di Git. le blockchain sono esattamente stupide come git. Se non ci credi, sei overhyped. La rete dei pari e i sistemi di consenso sono una cosa separata.
v. Il

2
i registri privati ​​(blockchain) sono concettualmente identici a git
Munhitsu il

In genere, in un repository git esiste un commit di root ma può esserci un numero qualsiasi di rami. Se vedi l'ultimo commit in un ramo come commit root e i genitori come figli, hai un albero con molte radici che crescono ... Penso che sia solo una variazione sull'albero Merkle in cui i riferimenti dei genitori sono nei contenuti anziché riferimenti figlio. Possono esserci più genitori e figli, quindi non è nemmeno un albero.
herman,

22

Le valute informatiche come Bitcoin, utilizzano una catena crittografica di blocchi distribuiti (albero merkle). L'uso comune lo ha abbreviato in 'blockchain'

Mentre git usa una catena di blocchi (albero di merkle), manca i componenti crittografici dei consensi distribuiti che implicano l'uso comune del termine 'BlockChain'.


17

Blockchainnon è solo una catena di blocchi.

Blockchainè quando c'è un modo per determinare la catena principale quando due o più sono deviati e quando non è necessaria alcuna autorità centrale per quella determinazione.


17

A differenza delle blockchain di criptovaluta ; git non ha un meccanismo di consenso senza fiducia p2p.


Perché consideri un sistema di consenso senza fiducia come parte di una catena di blocchi? Esistono molti modi per creare fiducia in una catena a blocchi, per fortuna è solo che sai che tutto nella tua copia locale non può essere rimosso dal prossimo pull e specifichi che vuoi le modifiche nella copia remota. Hai solo bisogno di un consenso senza fiducia quando altrimenti non sarebbe chiaro cosa sia giusto. In git più rami possono essere "giusti" e unire eventuell insieme.
allo

@allo GitHub è in genere utilizzato come fonte centrale di verità, ma cosa impedisce a un amministratore di forzare la spinta e l'override della storia? Se non esisteva GitHub e ti sei ritirato dai tuoi colleghi, come gestisci i conflitti di unione? Come si determina di chi è il diritto?
Miguel Mota,

1
Nulla ti impedisce di spingere la forza. Ma come mi garantisce una blockchain, posso rilevarlo perché la mia catena non può verificare che questi commit siano basati su di esso. Questo è il punto con una blockchain, non il consenso decentralizzato. E a dire il vero non voglio esplicitamente avere un protocollo di consenso per ciò che unisco (lo sviluppo non è una democrazia), ma in realtà leggo i nuovi commit quando li fondo nella mia catena. Quindi la mia copia è giusta, perché consiste di cose che ho già e quindi posso verificare (cioè vedendo i conflitti di unione) e cose che rivedo e quindi accetto in esso.
allo

1
@allo hai ragione a questo proposito, tuttavia ho affermato nella risposta "blockchain di criptovaluta", non blockchain in generale, ma ora che ci penso la mia risposta non sembra davvero adattarsi alla domanda che mi viene posta perché ero pensando al sistema nel suo complesso piuttosto che alle strutture dati sottostanti
Miguel Mota,

Hai perfettamente ragione sulla differenza delle catene di blocchi utilizzate in git e criptovalute. Non è solo una risposta alla domanda perché (o se) git non è considerato una catena a blocchi, quando si usa il termine rigorouly. Anche la risposta attualmente accettata è simile alla tua risposta. Preferisco ancora la risposta che ha ottenuto la generosità.
allo

1

Gli obiettivi sono diversi per blockchain e git sebbene entrambi utilizzino alberi merkle come struttura di dati.

A blockchainè in genere gestito da una rete peer-to-peer che aderisce a un protocollo per la comunicazione tra nodi e convalida nuovi blocchi. Una volta registrati, i dati in un determinato blocco non possono essere modificati retroattivamente senza l'alterazione di tutti i blocchi successivi, il che richiede il consenso della maggioranza della rete.

Secondo il white paper di Bitcoin:

Una versione puramente peer-to-peer di contanti elettronici consentirebbe di inviare pagamenti online direttamente da una parte all'altra senza passare attraverso un istituto finanziario. Le firme digitali forniscono parte della soluzione, ma i vantaggi principali vanno persi se è necessario un terzo fidato per evitare la doppia spesa. Proponiamo una soluzione al problema della doppia spesa utilizzando una rete peer-to-peer. La rete timestamps le transazioni inserendole in una catena in corso di prove di lavoro basate sull'hash, formando un record che non può essere modificato senza ripetere la prova di lavoro. La catena più lunga non serve solo come prova della sequenza di eventi osservati, ma prova che proviene dal più grande pool di potenza della CPU. Finché la maggior parte della potenza della CPU è controllata da nodi che non cooperano per attaccare la rete, essi " Genererò gli attacchi a catena e outpace più lunghi. La stessa rete richiede una struttura minima. I messaggi vengono trasmessi in modo ottimale e i nodi possono lasciare e ricollegarsi alla rete a piacimento, accettando la più lunga catena di prove di lavoro come prova di ciò che è accaduto mentre erano andati

While Gitè un sistema di controllo della versione distribuito per tenere traccia delle modifiche nel codice sorgente durante lo sviluppo del software, progettato per coordinare il lavoro tra i programmatori, ma può essere utilizzato per tenere traccia delle modifiche in qualsiasi set di file. I suoi obiettivi includono velocità, integrità dei dati e supporto per flussi di lavoro distribuiti e non lineari.

Secondo Linus Torvalds:

In molti modi puoi semplicemente vedere git come un filesystem - è indirizzabile ai contenuti e ha una nozione di versioning, ma l'ho davvero progettato arrivando al problema dal punto di vista di una persona del filesystem (hey, kernel è quello che faccio) e in realtà non ho alcun interesse a creare un sistema SCM tradizionale.


0

Come detto poke :

Git e Blockchains sembrano simili perché utilizzano entrambi Merkle Trees per archiviare le transazioni con data e ora ordinate. Un albero merkle è una struttura di dati ad albero in cui ogni nodo è etichettato con il valore hash crittografico del loro contenuto, che include le etichette dei suoi figli.

La prima differenza è la funzione Hash : Blockchain ha una funzione hash molto costosa in modo che ogni blocco debba essere estratto, dove un "blocco" Git può essere creato con un semplice messaggio di commit.

Lo scopo di Bitcoin è aggiungere fiducia all'ordine delle transazioni. L'attenzione si concentra sulla catena più lunga, poiché è la più costosa da calcolare e quindi molto probabilmente la verità.

Bitcoin realizza ciò richiedendo che l'hash soddisfi determinati parametri (inizia con un numero specifico di 0s), incrementando un valore ("nonce") nel messaggio fino a quando non viene trovato un hash soddisfacente. Questo richiede uno sforzo per trovare, ma solo 1 calcolo per verificare un nonce; e se più nonce producono un hash soddisfacente, allora uno sarà più basso e preso come la verità. Altri schemi di autenticazione rendono l'hash degno di fiducia centralizzando il rilascio dell'hash a un'autorità, magari votata da un accordo di rete o da qualche altro metodo.

I dati della blockchain sono limitati alle transazioni, che devono essere conformi alla convalida. La transazione deve essere valida per essere inclusa nel blocco successivo.Una transazione Bitcoin corrisponde a qualcosa di importante nel mondo reale che giustifica l'uso di un blocco costoso per registrare questo trasferimento, come lo scambio di valore in denaro. In realtà non ci interessa il libro mastro finale, è una metafora di qualcosa nel mondo reale.

Al contrario, i blocchi Git sono arbitrari, in quanto un commit può contenere qualsiasi quantità di dati. Il valore sta nelle modifiche dei dati che vengono organizzati nell'albero git perché ci preoccupiamo del prodotto finale, è convalidato dall'esistenza del repository git.

Lo scopo di Git è consentire ai "registri" economici di tenere traccia di più alternative di prodotto. Il "libro mastro" in Git è ciò che ci interessa, è il nostro prodotto finale; i dati delle transazioni registrano semplicemente come è stato creato il prodotto. Vogliamo rendere molto economico realizzare più versioni dei prodotti finali, un sovraccarico sufficiente per richiedere al creatore di registrare come hanno costruito questo prodotto. Non viene effettuata alcuna convalida esplicita sui dati, si mantiene il prodotto finale se sembra buono e quell'esistenza rende utile avere la catena della creazione di questo prodotto. Se il prodotto finale è errato o l'ordine dei commit non è valido, questo "libro mastro" viene eliminato durante la garbage collection.

La seconda differenza è che le transazioni Blockchain devono provenire da una fonte valida precedente. In Git, non ci interessa quali dati utilizzi per estendere l'albero. In Blockchain, le transazioni devono provenire da una fonte valida precedente. In questo senso, Git traccia l'estensione del nostro ambiente, mentre Blockchain traccia lo scambio di valore all'interno di un ambiente chiuso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.