Warum wird Git nicht als "Blockkette" angesehen?

174

Die interne Datenstruktur von Git ist ein Baum von Datenobjekten, wobei jedes Objekt nur auf seinen Vorgänger verweist. Jeder Datenblock wird gehasht. Das Ändern (Bitfehler oder Angriff) eines Zwischenblocks wird bemerkt, wenn der gespeicherte Hash und der tatsächliche Hash abweichen.

Wie unterscheidet sich dieses Konzept von der Blockkette?
Git ist nicht als Beispiel für Blockketten aufgeführt, aber zumindest in Zusammenfassungen sehen beide Datenstrukturbeschreibungen gleich aus: Datenblock, Rückwärtsverknüpfung in eine Richtung, Hashes, ...).

Wo ist also der Unterschied, dass Git nicht als Blockkette bezeichnet wird?

Paebbels
quelle
2
Git ist nicht als Beispiel für Blockketten aufgeführt Als ich zum ersten Mal versuchte herauszufinden, was eine Blockchain ist, wurde ich als das bekannteste Beispiel bezeichnet (ich habe jetzt nicht den genauen Link, aber er war von oben Liste von Google zurückgegeben Suche nach "Blockchain")
Leon
2
Sowohl Git als auch Blockchain verwenden Merkle-Bäume als grundlegende Datenstruktur. Aber das allein macht Git nicht zu einer Blockchain oder umgekehrt. - Wenn Sie Git (und seine Interna) kennen, kennen Sie jedoch Merkle-Bäume. Dies kann eine sehr hilfreiche Offenbarung sein, um zu verstehen, wie Blockchains funktionieren.
Poke
24
Liebe enge Wähler, können Sie Ihre Gründe erklären? Ich sehe 2 Likes, gute Kommentare und eine Antwort. Warum basiert es auf Meinungen? Es geht um Datenstrukturen und Algorithmen, die Git nicht als Blockkette qualifizieren.
Paebbels
2
Es ist Ihre Meinung, dass "es wird NICHT berücksichtigt ..." bitcoin.stackexchange.com/a/43627/77469
v.oddou
4
@ v.oddou Merkle-Bäume existieren seit 1979. Nur weil zwei Technologien Merkle-Bäume als Teil ihres Konzepts prominent einsetzen, sind sie nicht gleich. Es ist falsch , entweder Git oder Blockketten nur Hash-Baum zu reduzieren , da keiner von ihnen ist Hash-Baum. Sie benutzen sie nur. Das macht den verknüpften Beitrag völlig irrelevant, da es sich tatsächlich um Merkle-Bäume handelt und nicht um Blockketten.
Poke

Antworten:

53

git ist aus mehreren Gründen kein Beispiel für Blockchain-Technologie (dies waren die ersten, die mir in den Sinn kamen):

  1. In einer Blockchain-Implementierung wird jeder Block mehrmals unabhängig überprüft, bevor er zur Blockchain hinzugefügt wird. Dies ist in der Tat eines der wichtigsten Dinge an der Blockchain-Technologie und stellt deren "Unhackbarkeit" sicher. Andererseits giterfordern viele Projekte keine unabhängige Überprüfung, und wenn dies der Fall ist, muss nur eine Person eine Änderung abzeichnen, bevor sie in das Repository übernommen wird. Mit höchstens einem Validierungspunkt, dem Sie vertrauen müssen, wird daher giteiner der Grundpfeiler der Blockchain-Technologie gebrochen.

  2. Ein gitRepository wird nicht unbedingt auf vielen Servern dupliziert. Sie können gitlokal von einem Repository aus arbeiten. Wenn Ihre lokale Festplatte beschädigt wäre, würden Sie alles verlieren. Die Blockchain-Technologie impliziert die Reproduktion des Hauptbuchs über Server hinweg.

  3. Sie können den Verlauf neu schreiben git. A , git push <remote> <branch> --forcewo <branch>in einem früheren Zustand als gesetzt an <remote>würde die Geschichte neu zu schreiben. In Blockchains ist das Hauptbuch eine unveränderliche Geschichte.

houtanb
quelle
104
"In Blockchains ist das Hauptbuch eine unveränderliche Geschichte." - So ist die Git-Geschichte. Beim "Umschreiben des Verlaufs" beginnen Sie an einem Punkt in der Vergangenheit und fügen neue Commits hinzu. Dasselbe ist mit Blockketten möglich, und tatsächlich geschieht dies jedes Mal, wenn eine Gabel auftritt, selbst wenn sie später aufgegeben wird.
Holger nur
8
Soweit ich Blockketten im Vergleich zu Git verstehe, können Sie Blockketten auch neu schreiben, es sei denn, Sie lösen das Problem der Hash-Kollision. Und für Git können Sie zwar umschreiben, aber alle Fernbedienungen haben noch den ursprünglichen Verlauf. Durch das Umschreiben des Verlaufs werden neue Hashes und ein anderer Baum erstellt. Wenn die Blockkette eine solche Operation nicht überschreitet, ist dies kein gültiges Argument, da ich es implementieren könnte, wenn ich möchte. Oder umgekehrt kann ich erzwungene Pushs ablehnen, indem ich einen Zweig als geschützt einstelle.
Paebbels
4
@HolgerJust die Git-Geschichte ist veränderlich. Wenn Sie einen push --forceeinzelnen Zweig ausführen, verlieren Sie Verweise auf Commits, die vom Garbage Collector bereinigt werden. Dies unterscheidet sich von einer Gabelung, die keine Umschreibung der Geschichte, sondern einen alternativen Entwicklungspfad darstellt.
Houtanb
24
Können wir zusammenfassen, dass Git in einem Block-Chain-Modus betrieben werden kann, indem ein spezieller Workflow angewendet und mehrere Operationen verboten werden?
Paebbels
4
@Paebbels ja, dem würde ich zustimmen. Standardmäßig und im regulären Gebrauch ist dies nicht der Fall, aber mit einem speziellen Workflow wäre dies der Fall.
Houtanb
123

Der Grund, warum Git und Blockchains ähnlich aussehen, liegt darin, dass beide Merkle-Bäume als zugrunde liegende Datenstruktur verwenden. Ein Merkle-Baum ist ein Baum, in dem jeder Knoten mit dem kryptografischen Hash-Wert seines Inhalts gekennzeichnet ist, der die Bezeichnungen seiner untergeordneten Knoten enthält.

Gits gerichteter azyklischer Graph ist genau das, ein Merkle-Baum, in dem jeder Knoten (Tag, Commit, Baum oder Blob-Objekt) mit dem Hash seines Inhalts und der Bezeichnung seines „Kindes“ gekennzeichnet ist. Beachten Sie, dass bei Commits der Begriff „Kind“ ein wenig im Widerspruch zu Gits Verständnis der Eltern steht: Übergeordnete Commits sind die Kinder von Commits. Sie müssen das Diagramm nur als einen Baum betrachten, der durch erneutes Rooten weiter wächst.

Blockchains sind dem sehr ähnlich, da sie auch auf diese Weise weiter wachsen und die Merkle-Tree-Eigenschaft verwenden, um die Datenintegrität sicherzustellen. Aber normalerweise werden Blockchains als weit mehr als nur Merkle-Bäume verstanden, bei denen sie sich vom Git des „dummen Content-Trackers“ trennen . Zum Beispiel bedeutet Blockchains normalerweise auch ein stark dezentrales System auf Blockebene (nicht alle Blöcke müssen sich an derselben Stelle befinden).

Blockchains zu verstehen ist etwas schwierig (ich persönlich bin immer noch weit davon entfernt, alles darüber zu verstehen), aber ich betrachte das Verstehen von Git-Interna als einen guten Weg, um Merkle-Bäume zu verstehen, was definitiv dazu beiträgt, einen grundlegenden Teil über Blockchains zu verstehen.

Sack
quelle
24
Es tut mir leid, aber nirgendwo bringen Blockchains mehr als Git. Blockchains sind genauso dumm wie Git. Wenn Sie das nicht glauben, sind Sie überzeichnet. Das Peer-Netzwerk und die Konsenssysteme sind eine separate Sache.
v.oddou
2
Private Ledger (Blockchains) sind konzeptionell identisch mit Git
Munhitsu
In der Regel gibt es in einem Git-Repository ein Root-Commit, es können jedoch beliebig viele Zweige vorhanden sein. Wenn Sie das letzte Commit in einem Zweig als Root-Commit und die Eltern als Kinder sehen, haben Sie einen Baum mit vielen Wurzeln, die wachsen ... Ich denke, es ist nur eine Variation des Merkle-Baums, in dem Elternreferenzen im Inhalt statt enthalten sind untergeordnete Referenzen. Es kann mehrere Eltern und Kinder geben, es ist also nicht einmal ein Baum.
Hermann
22

Cyber-Währungen wie Bitcoin verwenden eine verteilte kryptografische Blockkette von Konsens (Merkle-Baum). Die allgemeine Verwendung hat dies zu "Blockchain" verkürzt.

Während Git eine Kette von Blöcken verwendet (Merkle-Baum), fehlen ihm die kryptografischen Komponenten des verteilten Konsenses, die die übliche Verwendung des Begriffs "BlockChain" impliziert.

Brian Sullivan
quelle
17

Blockchainist nicht irgendeine Kette von Blöcken.

BlockchainDies ist der Fall, wenn es eine Möglichkeit gibt, die Hauptkette zu bestimmen, wenn zwei oder mehr umgeleitet werden und wenn für diese Bestimmung keine zentrale Autorität erforderlich ist.

Daniel Vartanov
quelle
17

Im Gegensatz zu Kryptowährungs-Blockchains ; git hat keinen vertrauenswürdigen p2p-Konsensmechanismus.

Miguel Mota
quelle
Warum betrachten Sie ein vertrauenswürdiges Konsenssystem als Teil einer Blockkette? Es gibt viele Möglichkeiten, Vertrauen in eine Blockkette zu schaffen. Für git ist es nur so, dass Sie wissen, dass nicht alles in Ihrer lokalen Kopie beim nächsten Pull entfernt werden kann, und Sie geben an, dass Sie die Änderungen in der Remote-Kopie wünschen. Sie brauchen nur dann einen vertrauenslosen Konsens, wenn sonst unklar wäre, was richtig ist. In Git können mehrere Zweige "richtig" sein und schließlich zusammengeführt werden.
Allo
@allo GitHub wird normalerweise als zentrale Quelle der Wahrheit verwendet, aber was hindert einen Administrator daran, den Verlauf zu erzwingen und zu überschreiben? Wenn es keinen GitHub gab und Sie sich von Ihren Kollegen zurückgezogen haben, wie gehen Sie dann mit Zusammenführungskonflikten um? Wie bestimmen Sie, wessen Recht?
Miguel Mota
1
Nichts hindert Sie daran, Druck auszuüben. Aber wie mir eine Blockchain garantiert, kann ich sie erkennen, weil meine Kette nicht überprüfen kann, ob diese Commits darauf basieren. Das ist der Punkt mit einer Blockchain, nicht die dezentrale Zustimmung. Und in git möchte ich ausdrücklich kein Einverständnisprotokoll für das haben, was ich verschmelze (Entwicklung ist keine Demokratie), aber ich lese tatsächlich die neuen Verpflichtungen, wenn ich sie in meine Kette einführe. Meine Kopie ist also richtig, da sie aus Dingen besteht, die ich bereits habe und die ich überprüfen kann (dh durch Zusammenführen von Konflikten), und aus Dingen, die ich überprüfe und dann akzeptiere.
Allo
1
@allo Sie sind in dieser Hinsicht richtig, aber ich habe in der Antwort "Kryptowährungs-Blockchains" angegeben, nicht Blockchains im Allgemeinen, aber jetzt, wo ich darüber nachdenke, scheint meine Antwort nicht wirklich zu der gestellten Frage zu passen, weil ich es war Denken Sie eher an das System als Ganzes als an die zugrunde liegenden Datenstrukturen
Miguel Mota
Sie haben völlig Recht mit dem Unterschied der Blockketten, die in Git- und Kryptowährungen verwendet werden. Es ist einfach keine Antwort auf die Frage, warum (oder ob) Git nicht als Blockkette betrachtet wird, wenn der Begriff rigorouly verwendet wird. Sogar die aktuell akzeptierte Antwort ähnelt Ihrer Antwort. Ich bevorzuge immer noch die Antwort, die das Kopfgeld bekommen hat.
Allo
1

Die Ziele sind für Blockchain und Git unterschiedlich, obwohl beide Merkle-Bäume als Datenstruktur verwenden.

A blockchainwird normalerweise von einem Peer-to-Peer-Netzwerk verwaltet, das ein Protokoll für die Kommunikation zwischen Knoten einhält und neue Blöcke validiert. Einmal aufgezeichnet, können die Daten in einem bestimmten Block nicht rückwirkend geändert werden, ohne dass alle nachfolgenden Blöcke geändert werden, was einen Konsens der Netzwerkmehrheit erfordert.

Wie laut Bitcoin Whitepaper:

Eine reine Peer-to-Peer-Version von elektronischem Bargeld würde es ermöglichen, Online-Zahlungen direkt von einer Partei an eine andere zu senden, ohne ein Finanzinstitut zu durchlaufen. Digitale Signaturen sind Teil der Lösung, aber die Hauptvorteile gehen verloren, wenn weiterhin ein vertrauenswürdiger Dritter erforderlich ist, um Doppelausgaben zu vermeiden. Wir schlagen eine Lösung für das Problem der doppelten Ausgaben mithilfe eines Peer-to-Peer-Netzwerks vor. Das Netzwerk stempelt Transaktionen mit Zeitstempeln, indem es sie in eine fortlaufende Kette von Hash-basierten Proof-of-Work-Daten einfügt, die einen Datensatz bilden, der nicht geändert werden kann, ohne den Proof-of-Work zu wiederholen. Die längste Kette dient nicht nur als Beweis für die Abfolge der beobachteten Ereignisse, sondern auch als Beweis dafür, dass sie aus dem größten Pool an CPU-Leistung stammt. Solange ein Großteil der CPU-Leistung von Knoten gesteuert wird, die nicht zusammenarbeiten, um das Netzwerk anzugreifen, Ich werde die längsten Ketten- und Outpace-Angreifer generieren. Das Netzwerk selbst erfordert eine minimale Struktur. Nachrichten werden nach bestem Wissen und Gewissen gesendet, und Knoten können das Netzwerk nach Belieben verlassen und wieder verbinden. Dabei wird die längste Proof-of-Work-Kette als Beweis dafür akzeptiert, was während ihrer Abwesenheit passiert ist

Es handelt sich zwar Gitum ein verteiltes Versionskontrollsystem zur Verfolgung von Änderungen im Quellcode während der Softwareentwicklung. Es dient zur Koordinierung der Arbeit zwischen Programmierern, kann jedoch zur Verfolgung von Änderungen in einem beliebigen Satz von Dateien verwendet werden. Zu den Zielen gehören Geschwindigkeit, Datenintegrität und Unterstützung für verteilte, nichtlineare Workflows.

Wie nach Linus Torvalds:

In vielerlei Hinsicht kann man git nur als Dateisystem sehen - es ist inhaltsadressierbar und hat eine Vorstellung von Versionierung, aber ich habe es wirklich so entworfen, dass es aus der Sicht einer Dateisystem-Person auf das Problem zurückzuführen ist (hey, Kernel ist das, was ich tue). und ich habe eigentlich absolut kein Interesse daran, ein traditionelles SCM-System zu erstellen.

asing177
quelle
0

Wie Poke sagte :

Git und Blockchains sehen ähnlich aus, da beide Merkle Trees zum Speichern geordneter Transaktionen mit Zeitstempel verwenden. Ein Merkle-Baum ist eine Baumdatenstruktur, in der jeder Knoten mit dem kryptografischen Hashwert seines Inhalts gekennzeichnet ist, der die Bezeichnungen seiner untergeordneten Knoten enthält.

Der erste Unterschied ist die Hash-Funktion : Blockchain hat eine sehr teure Hash-Funktion, so dass jeder Block abgebaut werden muss, wobei ein Git- "Block" mit einer einfachen Commit-Nachricht erstellt werden kann.

Der Zweck von Bitcoin besteht darin, der Reihenfolge der Transaktionen Vertrauen zu verleihen. Der Fokus liegt auf der längsten Kette, da diese am teuersten zu berechnen ist und daher höchstwahrscheinlich die Wahrheit ist.

Bitcoin erreicht dies, indem verlangt wird, dass der Hash bestimmte Parameter erfüllt (beginnt mit einer bestimmten Anzahl von Nullen), indem ein Wert ("nonce") in der Nachricht erhöht wird, bis ein zufriedenstellender Hash gefunden wird. Dies erfordert Mühe zu finden, aber nur 1 Berechnung, um eine Nonce zu überprüfen; und wenn mehrere Nonces einen zufriedenstellenden Hash erzeugen, wird einer niedriger sein und als die Wahrheit angesehen werden. Andere Authentifizierungsschemata machen den Hash vertrauenswürdig, indem sie die Ausgabe des Hash an eine Behörde zentralisieren, die möglicherweise durch eine Netzwerkvereinbarung oder eine andere Methode abgestimmt wurde.

Blockchain-Daten sind auf Transaktionen beschränkt, die der Validierung entsprechen müssen. Die Transaktion muss gültig sein, um in den nächsten Block aufgenommen zu werden.Eine Bitcoin-Transaktion entspricht etwas, das in der realen Welt wichtig ist und die Verwendung eines teuren Blocks zur Aufzeichnung dieser Überweisung rechtfertigt, z. B. den Austausch von Geldwerten. Das endgültige Hauptbuch ist uns eigentlich egal, es ist eine Metapher für etwas in der realen Welt.

Im Gegensatz dazu sind Git-Blöcke beliebig, da ein Commit eine beliebige Datenmenge enthalten kann. Der Wert liegt in den Änderungen der Daten, die im Git-Baum organisiert werden, da uns das Endprodukt am Herzen liegt. Es wird durch das Vorhandensein des Git-Repositorys bestätigt.

Der Zweck von Git ist es, billigen "Ledgern" zu ermöglichen, mehrere Produktalternativen zu verfolgen. Das "Hauptbuch" in Git ist das, was uns wichtig ist, es ist unser Endprodukt; Die Transaktionsdaten zeichnen lediglich auf, wie das Produkt erstellt wurde. Wir möchten es sehr billig machen, mehrere Versionen von Endprodukten herzustellen, gerade genug Aufwand, damit der Ersteller aufzeichnen muss, wie er dieses Produkt hergestellt hat. Es wird keine explizite Validierung der Daten durchgeführt. Sie pflegen das Endprodukt, wenn es gut aussieht, und diese Existenz macht es nützlich, die Kette der Produkterstellung zu haben. Wenn das Endprodukt fehlerhaft ist oder die Reihenfolge der Festschreibungen ungültig ist, wird dieses "Hauptbuch" während der Speicherbereinigung gelöscht.

Der zweite Unterschied besteht darin, dass Blockchain-Transaktionen aus einer zuvor gültigen Quelle stammen müssen. In Git ist es uns egal, welche Daten Sie zum Erweitern des Baums verwenden. In Blockchain müssen die Transaktionen aus einer zuvor gültigen Quelle stammen. In diesem Sinne verfolgt Git die Erweiterung unserer Umgebung, während Blockchain den Werteaustausch in einer geschlossenen Umgebung verfolgt.

Alex F.
quelle