Dlaczego Git nie jest uważany za „łańcuch bloków”?

174

Wewnętrzna struktura danych Gita to drzewo obiektów danych, w którym każdy obiekt wskazuje tylko na swojego poprzednika. Każdy blok danych jest haszowany. Modyfikacja (błąd bitowy lub atak) bloku pośredniego zostanie zauważona, gdy zapisany hash i rzeczywisty hash odejdą.

Czym ta koncepcja różni się od łańcucha bloków?
Git nie jest wymieniony jako przykład łańcuchów bloków, ale przynajmniej w podsumowaniu oba opisy struktury danych wyglądają podobnie: blok danych, jednokierunkowe łączenie zwrotne, hashe, ...).

Więc gdzie jest różnica, że ​​Git nie jest nazywany łańcuchem bloków?

Paebbels
źródło
2
Git nie jest wymieniony jako przykład łańcuchów bloków Kiedy po raz pierwszy próbowałem dowiedzieć się, czym jest blockchain, zostałem określony przez git jako najważniejszy przykład (nie mam teraz dokładnego linku, ale był on z góry lista zwrócona przez wyszukiwarkę Google dla „blockchain”)
Leon
2
Zarówno Git, jak i blockchain używają drzew Merkle jako podstawowej struktury danych. Ale samo to nie sprawia, że ​​Git jest blockchainem ani na odwrót. - Jeśli znasz Git (i jego elementy wewnętrzne), znasz jednak drzewa merkle, które mogą być bardzo pomocne w zrozumieniu, jak działają łańcuchy bloków.
poke
24
Drodzy bliscy wyborcy, czy możecie wyjaśnić swoje powody? Widzę 2 polubienia, dobre komentarze i odpowiedź. Dlaczego jest oparta na opiniach? Chodzi o struktury danych i algorytmy, które wydają się nie kwalifikować Gita jako łańcucha bloków.
Paebbels
2
Twoim zdaniem „NIE jest uważane za ...” bitcoin.stackexchange.com/a/43627/77469
v.oddou
4
@ v.oddou Drzewa Merkle istnieją od 1979 roku. Tylko dlatego, że dwie technologie wykorzystują drzewa Merkle w sposób widoczny jako część ich koncepcji, nie czyni ich to tym samym. Nieprawidłowe jest redukowanie łańcuchów Git lub block do samych drzew merkle, ponieważ żadne z nich nie jest drzewami merkle. Używają ich tylko. To sprawia, że ​​powiązany post jest całkowicie nieistotny, ponieważ w rzeczywistości mówi o drzewach merkle, a nie o łańcuchach bloków.
poke

Odpowiedzi:

53

git nie jest przykładem technologii blockchain z kilku powodów (były to pierwsze, które przyszły mi do głowy):

  1. W implementacji blockchain każdy blok jest wielokrotnie weryfikowany niezależnie, zanim zostanie dodany do łańcucha bloków. Jest to rzeczywiście jedna z najważniejszych rzeczy w technologii blockchain i zapewnia jej „niehakowalność”. Z drugiej strony, wiele gitprojektów nie wymaga niezależnej weryfikacji, a kiedy już tak się dzieje, wymaga tylko jednej osoby do podpisania zmiany, zanim zostanie ona wprowadzona do repozytorium. W związku z tym, mając co najwyżej jeden punkt weryfikacji, któremu musisz zaufać, gitłamie jedną z podstawowych zasad technologii blockchain.

  2. gitRepozytorium niekoniecznie jest powielany na wielu serwerach. Możesz pracować z gitrepozytorium lokalnie, a gdyby twój dysk lokalny był uszkodzony, straciłbyś wszystko. Technologia Blockchain implikuje reprodukcję rejestru na serwerach.

  3. Możesz przepisać githistorię. git push <remote> <branch> --forceGdzie <branch>jest ustawiony do poprzedniego stanu, niż na <remote>to przepisać historię. W łańcuchach bloków księga główna jest niezmienną historią.

houtanb
źródło
104
„W łańcuchach bloków księga główna jest niezmienną historią”. - Tak jest z historią gita. Podczas „przepisywania historii” zaczynasz od punktu w przeszłości i dodajesz nowe zatwierdzenia. To samo jest możliwe w przypadku łańcuchów bloków i faktycznie dzieje się tak za każdym razem, gdy występuje rozwidlenie, nawet jeśli później zostanie porzucone.
Holger Just
8
O ile rozumiem łańcuchy bloków kontra Git, możesz również przepisać łańcuchy bloków, chyba że rozwiążesz problem kolizji skrótów. W przypadku Gita tak, możesz przepisać, ale wszystkie piloty nadal mają oryginalną historię. Przepisanie historii tworzy nowe skróty i inne drzewo. Jeśli łańcuch bloków nie obejmuje takiej operacji, to nie jest prawidłowy argument, ponieważ mógłbym go zaimplementować, jeśli chcę. Lub odwrotnie, mogę odrzucić wymuszone pchnięcia, ustawiając gałąź jako chronioną.
Paebbels,
4
@HolgerJust historia git jest zmienna. Robiąc a push --forcena pojedynczej gałęzi tracisz odniesienia do zatwierdzeń, które są czyszczone przez moduł odśmiecania pamięci. To coś innego niż rozwidlenie, które nie jest przepisywaniem historii, lecz alternatywną ścieżką rozwoju.
houtanb
24
Czy możemy podsumować, że Git mógłby działać w trybie łańcucha bloków, stosując specjalny przepływ pracy i zabraniając kilku operacji?
Paebbels
4
@Paebbels tak, zgodziłbym się z tym. Domyślnie i przy regularnym użyciu tak nie jest, ale przy specjalnym przepływie pracy tak by było.
houtanb
123

Powodem, dla którego Git i łańcuchy bloków wyglądają podobnie, jest to, że oba używają drzew Merkle jako podstawowej struktury danych. Drzewo Merkle to drzewo, w którym każdy węzeł jest oznaczony kryptograficzną wartością skrótu jego zawartości, która obejmuje etykiety jego dzieci.

Skierowany acykliczny wykres Gita jest dokładnie tym, drzewem merkle, w którym każdy węzeł (tag, zatwierdzenie, drzewo lub obiekt typu blob) jest oznaczony hashem swojej zawartości i etykietą swojego „dziecka”. Zwróć uwagę, że w przypadku zatwierdzeń termin „dziecko” jest nieco sprzeczny ze sposobem rozumienia rodziców przez Git: zatwierdzenia rodziców elementami potomnymi zatwierdzeń, wystarczy spojrzeć na wykres jako drzewo, które rośnie po ponownym zakorzenieniu.

Blockchainy są bardzo podobne do tego, ponieważ również rozwijają się w ten sposób, a także wykorzystują właściwość drzewa Merkle, aby zapewnić integralność danych. Ale zwykle łańcuchy bloków są rozumiane jako coś więcej niż tylko drzewa merkle, które są miejscem, w którym oddzielają się od „głupiego narzędzia do śledzenia zawartości” Gita . Na przykład łańcuchy bloków zwykle oznaczają również posiadanie wysoce zdecentralizowanego systemu na poziomie bloków (nie wszystkie bloki muszą znajdować się w tym samym miejscu).

Zrozumienie blockchainów jest dość trudne (osobiście nadal daleko mi do zrozumienia wszystkiego na ten temat), ale uważam, że zrozumienie wewnętrznych elementów Git jest dobrym sposobem na zrozumienie drzew Merkle, co zdecydowanie pomaga zrozumieć podstawową część dotyczącą łańcuchów bloków.

szturchać
źródło
24
Przykro mi, ale nigdzie blockchain nie wnosi nic więcej niż git. blockchainy są dokładnie tak samo głupie jak git. Jeśli w to nie wierzysz, jesteś przesadzony. Sieć równorzędna i systemy konsensusu to odrębna sprawa.
v.oddou,
2
prywatne księgi (łańcuchy bloków) są koncepcyjnie identyczne z git
Munhitsu
Zazwyczaj w repozytorium git jest jedno zatwierdzenie roota, ale może istnieć dowolna liczba gałęzi. Jeśli widzisz ostatnie zatwierdzenie w gałęzi jako zatwierdzenie root, a rodziców jako dzieci, masz drzewo z wieloma rosnącymi korzeniami ... Myślę, że to tylko odmiana drzewa Merkle, w którym odniesienia do rodziców znajdują się w treści zamiast odniesienia podrzędne. Może być wielu rodziców i dzieci, więc nie jest to nawet drzewo.
herman
22

Cyberwaluty, takie jak Bitcoin, używają rozproszonego konsensu kryptograficznego łańcucha bloków (drzewo Merkle). W powszechnym użyciu skrócono to do „łańcucha bloków”

Chociaż git używa łańcucha bloków (drzewo Merkle), brakuje mu rozproszonych komponentów kryptograficznych, które sugerują powszechne użycie terminu „BlockChain”.

Brian Sullivan
źródło
17

Blockchainnie jest zwykłym łańcuchem bloków.

Blockchainjest wtedy, gdy istnieje sposób określenia głównego łańcucha, gdy dwa lub więcej są przekierowane , i gdy do tego celu nie jest potrzebny żaden organ centralny.

Daniel Vartanov
źródło
17

W przeciwieństwie do blockchainów kryptowalut ; git nie ma mechanizmu konsensusu bez zaufania p2p.

Miguel Mota
źródło
Dlaczego traktujesz bezfunkcyjny system konsensusu jako część łańcucha bloków? Istnieje wiele sposobów na zbudowanie zaufania w łańcuchu bloków, w przypadku git po prostu wiesz, że wszystko w twojej lokalnej kopii nie może zostać usunięte przy następnym ściągnięciu i określasz, że chcesz zmiany w zdalnej kopii. Bez zaufania konsensusu potrzebujesz tylko wtedy, gdy w przeciwnym razie nie byłoby jasne, co jest słuszne. W git wiele gałęzi może być "właściwych" i zostać połączone razem.
allo
@allo GitHub jest zwykle używane jako główne źródło prawdy, ale co powstrzymuje administratora przed forsowaniem i zastępowaniem historii? Jeśli nie było GitHub i wyciągnąłeś je od swoich rówieśników, jak radzisz sobie z konfliktami scalania? Jak ustalasz, czyje prawo?
Miguel Mota
1
Nic nie powstrzymuje cię przed pchaniem siłą. Ale tak jak gwarantuje mi blockchain, mogę to wykryć, ponieważ mój łańcuch nie może zweryfikować tych zatwierdzeń jako opartych na nim. O to chodzi w przypadku łańcucha bloków, a nie zdecentralizowanej zgody. I w git wyraźnie nie chcę mieć protokołu zgody na to, co łączę (rozwój nie jest demokracją), ale tak naprawdę czytam nowe commity podczas łączenia ich w mój łańcuch. Tak więc moja kopia jest poprawna, ponieważ składa się z rzeczy, które już mam, a zatem mogę zweryfikować (np. Widząc konflikty scalania) oraz rzeczy, które sprawdzam, a następnie przyjmuję do niego.
allo
1
@allo masz rację w tym względzie, jednak w odpowiedzi podałem „łańcuchy kryptowalut”, a nie łańcuchy blokowe w ogóle, ale teraz, kiedy o tym myślę, moja odpowiedź nie wydaje się pasować do zadawanego pytania, ponieważ myślenie o systemie jako całości, a nie o bazowych strukturach danych
Miguel Mota
Masz całkowitą rację co do różnicy między łańcuchami bloków używanymi w git i kryptowalutach. Nie jest to po prostu odpowiedź na pytanie, dlaczego (lub czy) git nie jest uważany za łańcuch blokowy, gdy używa się tego terminu w sposób rygorystyczny. Nawet obecnie zaakceptowana odpowiedź jest podobna do Twojej odpowiedzi. Nadal wolę odpowiedź, która dostała nagrodę.
allo
1

Cele są różne dla blockchain i git, chociaż oba wykorzystują drzewa Merkle jako strukturę danych.

blockchainZwykle A jest zarządzany przez sieć typu każdy z każdym, przylegającą do protokołu komunikacji między węzłami i sprawdzania poprawności nowych bloków. Raz zarejestrowane dane w danym bloku nie mogą być zmienione z mocą wsteczną bez zmiany wszystkich kolejnych bloków, co wymaga zgody większości sieci.

Zgodnie z raportem Bitcoin:

Czysto peer-to-peer wersja elektronicznej gotówki umożliwiłaby przesyłanie płatności online bezpośrednio od jednej strony do drugiej bez przechodzenia przez instytucję finansową. Podpisy cyfrowe stanowią część rozwiązania, ale główne korzyści są tracone, jeśli zaufana strona trzecia jest nadal wymagana, aby zapobiec podwójnemu wydatkowaniu. Proponujemy rozwiązanie problemu podwójnych wydatków za pomocą sieci peer-to-peer. Sieć oznacza transakcje sygnaturami czasowymi, łącząc je w ciągły łańcuch dowodów pracy opartych na skrótach, tworząc rekord, którego nie można zmienić bez ponownego wykonania dowodu pracy. Najdłuższy łańcuch służy nie tylko jako dowód sekwencji zdarzeń, których byliśmy świadkami, ale także dowód, że pochodzi z największej puli mocy procesora. Dopóki większość mocy procesora jest kontrolowana przez węzły, które nie współpracują przy atakowaniu sieci, tak długo Wygeneruję najdłuższy łańcuch i wyprzedzę napastników. Sama sieć wymaga minimalnej struktury. Wiadomości są nadawane z najwyższą starannością, a węzły mogą dowolnie opuszczać i ponownie łączyć się z siecią, akceptując najdłuższy łańcuch proof of work jako dowód tego, co się stało, gdy ich nie było

Chociaż Gitjest rozproszonym systemem kontroli wersji do śledzenia zmian w kodzie źródłowym podczas tworzenia oprogramowania, jest przeznaczony do koordynowania pracy między programistami, ale może być używany do śledzenia zmian w dowolnym zestawie plików. Jego cele obejmują szybkość, integralność danych i obsługę rozproszonych, nieliniowych przepływów pracy.

Jak twierdzi Linus Torvalds:

Pod wieloma względami możesz po prostu postrzegać git jako system plików - jest adresowalny do treści i ma pojęcie wersjonowania, ale tak naprawdę zaprojektowałem go z myślą o problemie z punktu widzenia osoby z systemem plików (hej, jądra to to, co robię) , i właściwie nie mam absolutnie żadnego interesu w tworzeniu tradycyjnego systemu SCM.

asing177
źródło
0

Jak powiedział szturchanie :

Git i Blockchain wyglądają podobnie, ponieważ oba używają drzew Merkle do przechowywania zamówionych transakcji ze znacznikiem czasu. Drzewo Merkle to drzewiasta struktura danych, w której każdy węzeł jest oznaczony kryptograficzną wartością skrótu jego zawartości, która obejmuje etykiety jego dzieci.

Pierwszą różnicą jest funkcja Hash : Blockchain ma bardzo kosztowną funkcję mieszającą, więc każdy blok musi zostać wydobyty, podczas gdy „blok” Gita można utworzyć za pomocą prostego komunikatu o zatwierdzeniu.

Celem Bitcoin jest dodanie zaufania do kolejności transakcji. Skupiamy się na najdłuższym łańcuchu, ponieważ jest on najdroższy do obliczenia, a zatem najprawdopodobniej jest prawdą.

Bitcoin osiąga to, wymagając, aby hash spełniał określone parametry (zaczyna się od określonej liczby zer), zwiększając wartość („nonce”) w wiadomości, aż do znalezienia zadowalającego hasha. To wymaga wysiłku, aby znaleźć, ale tylko jedno obliczenie do zweryfikowania przez nonce; a jeśli wiele wartości jednorazowych daje zadowalający hash, to jeden będzie niższy i uznany za prawdę. Inne schematy uwierzytelniania sprawiają, że hash jest wiarygodny dzięki scentralizowaniu wysyłania skrótu do organu, być może przegłosowanego na podstawie umowy sieciowej lub innej metody.

Dane Blockchain są ograniczone do transakcji, które muszą być zgodne z walidacją. Transakcja musi być ważna, aby została zawarta w następnym bloku. Transakcja Bitcoin odpowiada czemuś ważnemu w prawdziwym świecie, co uzasadnia użycie drogiego bloku do zarejestrowania tego przelewu, na przykład wymiana wartości pieniężnej. Tak naprawdę nie obchodzi nas ostateczna księga, to metafora czegoś w prawdziwym świecie.

Z kolei bloki Gita są dowolne, ponieważ zatwierdzenie może zawierać dowolną ilość danych. Wartość polega na tym, że zmiany danych są organizowane w drzewie git, ponieważ zależy nam na produkcie końcowym, jest to potwierdzone przez istnienie repozytorium git.

Celem Git jest umożliwienie tanim „księgom” śledzenia wielu alternatyw produktów. „Księga główna” w Git jest tym, na czym nam zależy, to nasz produkt końcowy; dane transakcji rejestrują tylko sposób budowy produktu. Chcemy, aby tworzenie wielu wersji produktów końcowych było bardzo tanie, tylko na tyle narzutów, aby twórca musiał rejestrować, jak zbudował ten produkt. Dane nie są poddawane jawnej walidacji, utrzymujesz produkt końcowy, jeśli wygląda dobrze, a istnienie to sprawia, że ​​warto mieć łańcuch tworzenia tego produktu. Jeśli produkt końcowy jest zły lub kolejność zatwierdzeń jest nieprawidłowa, ta „księga” zostanie usunięta podczas czyszczenia pamięci.

Druga różnica polega na tym, że transakcje Blockchain muszą pochodzić z wcześniejszego ważnego źródła. W Gicie nie obchodzi nas, jakich danych używasz do rozszerzenia drzewa. W Blockchain transakcje muszą pochodzić z wcześniejszego ważnego źródła. W tym sensie Git śledzi rozszerzenie naszego środowiska, podczas gdy Blockchain śledzi wymianę wartości w zamkniętym środowisku.

Alex F.
źródło