Почему Git не считается «цепочкой блоков»?

174

Внутренняя структура данных Git представляет собой дерево объектов данных, в котором каждый объект указывает только на своего предшественника. Каждый блок данных хэшируется. Изменение (битовая ошибка или атака) промежуточного блока будет замечено, когда сохраненный хеш и фактический хеш отклонятся.

Чем эта концепция отличается от цепочки блоков?
Git не указан в качестве примера цепочек блоков, но, по крайней мере, в сводках оба описания структуры данных выглядят одинаково: блок данных, обратная связь в одном направлении, хэши, ...).

Так в чем же разница, что Git не называется цепочкой блоков?

Paebbels
источник
2
Git не указан в качестве примера цепочки блоков Когда я впервые попытался узнать, что такое блокчейн, меня назвали git как наиболее выдающийся пример (сейчас у меня нет точной ссылки, но она была с самого начала список, возвращаемый Google для поиска «блокчейн»)
Леон
2
И Git, и blockchain используют деревья Merkle в качестве своей основной структуры данных. Но одно это не делает Git блокчейном или наоборот. - Если вы знакомы с Git (и его внутренними компонентами), вы, тем не менее, знаете Merkle Tree, что может быть очень полезным открытием для понимания работы блокчейнов.
совать
24
Уважаемые близкие избиратели, вы можете объяснить свои причины? Я вижу 2 лайка, хорошие комментарии и ответ. Почему это основано на мнении? Речь идет о структурах данных и алгоритмах, которые не подходят для Git как цепочки блоков.
Пеббельс
2
Это ваше мнение , что «это не считается ...» bitcoin.stackexchange.com/a/43627/77469
v.oddou
4
@ v.oddou Деревья Merkle существуют с 1979 года. Только потому, что две технологии используют деревья Merkle как часть своей концепции, это не делает их одинаковыми. Неправильно сводить Git или цепочки блоков только к деревьям меркла, поскольку ни одно из них не является деревом меркла. Они только используют их. Это делает связанный пост совершенно неактуальным, так как на самом деле речь идет о деревьях Меркле, а не о цепочках блоков.
тыкай

Ответы:

53

git не является примером технологии блокчейна по нескольким причинам (это было первое, что пришло в голову):

  1. В реализации блокчейна каждый блок проверяется независимо несколько раз, прежде чем он добавляется в блокчейн. Это действительно одна из самых важных вещей в технологии блокчейна, и это то, что обеспечивает ее «неосторожность». С другой стороны, многие gitпроекты не требуют независимой проверки, и, когда они это делают, им требуется только один человек, чтобы подписать изменение, прежде чем оно будет передано в хранилище. Следовательно, имея не более одной точки валидации, которой вы должны доверять, gitнарушается один из основных принципов технологии блокчейна.

  2. gitРепозиторий не обязательно дублируется на многих серверах. Вы можете работать из gitрепозитория локально, и если ваш локальный диск будет поврежден, вы потеряете все. Технология Blockchain предполагает воспроизведение главной книги на разных серверах.

  3. Вы можете переписать gitисторию. git push <remote> <branch> --force, Где <branch>устанавливается в предыдущее состояние , чем при <remote>бы переписать историю. В блокчейнах книга является неизменной историей.

houtanb
источник
104
«В блокчейнах книга является неизменной историей». - Так и история с мерзавцами. Когда вы «переписываете историю», вы начинаете с определенного момента в прошлом и добавляете новые коммиты. То же самое возможно с цепочками блоков, и на самом деле, это происходит каждый раз, когда происходит разветвление, даже если оно позднее отменяется.
Хольгер только
8
Насколько я понимаю, цепочки блоков против Git, вы также можете переписать цепочки блоков, если не решите проблему коллизий хешей. А для Git, да, вы можете переписать, но у всех пультов все еще есть оригинальная история. Переписывание истории создает новые хэши и другое дерево. Если цепочка блоков не выполняет такую ​​операцию, это недопустимый аргумент, потому что я мог бы реализовать ее, если захочу. Или наоборот, я могу отклонить форсированные толчки, установив защищенную ветку.
Паеббельс
4
@HolgerПросто история git изменчива. При выполнении push --forceодной ветки вы теряете ссылки на коммиты, которые очищаются сборщиком мусора. Это отличается от форка, который не переписывает историю, а скорее альтернативный путь развития.
Houtanb
24
Можно ли резюмировать, что Git может работать в режиме цепочки блоков, применяя специальный рабочий процесс и запрещая несколько операций?
Пеббельс
4
@Paebbels да, я бы с этим согласился. По умолчанию и при обычном использовании это не так, но со специальным рабочим процессом это было бы.
houtanb
123

Причина, по которой Git и блокчейны выглядят одинаково, заключается в том, что они оба используют деревья Merkle в качестве своей базовой структуры данных. Дерево Merkle - это дерево, где каждый узел помечен криптографическим хеш-значением их содержимого, которое включает в себя метки его дочерних элементов.

Направленный ациклический граф Git - это именно то, дерево меркла, где каждый узел (тег, коммит, дерево или объект блоба) помечен хешем его содержимого и меткой его «потомка». Обратите внимание, что для коммитов термин «дочерний» немного конфликтует с пониманием Git родителей: коммиты родителей являются потомками коммитов, вам просто нужно смотреть на график как на дерево, которое продолжает расти, перекорневая его.

Блокчейны очень похожи на это, поскольку они также продолжают расти таким образом, и они также используют его свойство дерева меркла для обеспечения целостности данных. Но обычно блокчейны понимаются как нечто большее, чем просто деревья меркла, где они отделяются от «тупого трекера контента» Git . Например, блокчейны обычно также подразумевают наличие высоко децентрализованной системы на уровне блоков (не все блоки должны находиться в одном и том же месте).

Понимание блокчейнов довольно сложно (лично я все еще далек от понимания всего, что с этим связано), но я считаю, что понимание внутренних элементов Git - это хороший способ понять деревья меркле, которые определенно помогают понять фундаментальную часть о блокчейнах.

совать
источник
24
Извините, но нигде блокчейны не приносят ничего, кроме мерзавца. блокчейны так же глупы, как мерзавец. Если вы в это не верите, вы преувеличены. Одноранговая сеть и консенсусные системы - это отдельная вещь.
v.oddou
2
частные книги (блокчейны) концептуально идентичны git
Munhitsu
Как правило, в репозитории git есть один корневой коммит, но может быть любое количество веток. Если вы видите последний коммит в ветви как корневой коммит, а родители как дети, у вас есть дерево с множеством растущих корней ... Я думаю, что это всего лишь разновидность дерева Меркле, где родительские ссылки находятся в содержимом, а не в дочерние ссылки. Может быть несколько родителей и детей, так что это даже не дерево.
Герман
22

Кибер Валюты, такие как Биткойн, используют распределенную консенсусную криптографическую цепочку блоков (дерево Меркле). Обычное использование сократило это до «блокчейн»

В то время как git использует цепочку блоков (дерево меркле), ему не хватает криптографических компонентов распределенного консенсуса, которые подразумевает общее использование термина «BlockChain».

Брайан Салливан
источник
17

Blockchainэто не просто цепочка каких-либо блоков.

Blockchainэто когда есть способ определения главной цепи, когда две или более переадресованы , и когда для этого определения не требуется центральный орган.

Даниил Вартанов
источник
17

В отличие от криптовалютных блокчейнов ; У git нет p2p-механизма безнадежного консенсуса.

Мигель Мота
источник
Почему вы считаете систему доверия без доверия частью цепочки блоков? Есть много способов создать доверие в цепочке блоков, для git это просто то, что вы знаете, что все в вашей локальной копии не может быть удалено при следующем извлечении, и вы указываете, что хотите внести изменения в удаленную копию. Вам нужен только недоверчивый консенсус, когда в противном случае неясно, что правильно. В git несколько веток могут быть «правильными» и объединяться вместе.
алло
@allo GitHub обычно используется в качестве основного источника правды, но что мешает администратору насильно выдвигать и переопределять историю? Если не было GitHub и вы отстранены от своих коллег, то как вы справляетесь с конфликтами слияний? Как вы определяете чье право?
Мигель Мота
1
Ничто не останавливает вас от силового толчка. Но как блокчейн гарантирует мне, я могу обнаружить это, потому что моя цепочка не может проверить, что эти коммиты основаны на этом. В этом все дело в блокчейне, а не в децентральном согласии. И в git я явно не хочу иметь протокол согласия для того, что я объединяю (развитие - это не демократия), но я фактически читаю новые коммиты при объединении их в мою цепочку. Так что моя копия это право, потому что он состоит из вещей , которые я уже есть , и , таким образом можно проверить (т.е., видя конфликты слияния) и обзор вещи I , а затем принять в ней.
Алло
1
@ Алло, вы правы в этом отношении, однако я сказал в ответе «блокчейны криптовалюты», а не блокчейны в целом, но теперь я думаю, что мой ответ на самом деле не соответствует задаваемому вопросу, потому что я был думать о системе в целом, а не о базовых структурах данных
Мигель Мота
Вы совершенно правы относительно разницы цепочек блоков, используемых в git и криптовалютах. Это просто не ответ на вопрос, почему (или если) git не считается цепочкой блоков, если использовать термин rigorouly. Даже принятый в настоящее время ответ похож на ваш ответ. Я все еще предпочитаю ответ, который получил награду.
Алло
1

Цели различны для блокчейна и git, хотя в качестве структуры данных используются деревья Merkle.

blockchainОбычно управляется одноранговой сетью, придерживающейся протокола межузловой связи и проверяющего новые блоки. После записи данные в любом данном блоке не могут быть изменены задним числом без изменения всех последующих блоков, что требует консенсуса большинства сетей.

По данным биткойн-бумаги:

Чисто одноранговая версия электронных денежных средств позволит отправлять онлайн-платежи напрямую от одной стороны к другой, не проходя через финансовое учреждение. Цифровые подписи обеспечивают часть решения, но основные преимущества теряются, если надежная третья сторона все еще требуется для предотвращения двойных расходов. Мы предлагаем решение проблемы двойных расходов с использованием одноранговой сети. Сетевые временные метки транзакций, хешируя их в непрерывную цепочку основанных на хэше доказательств работы, формируя запись, которую нельзя изменить, не восстанавливая доказательство работы. Самая длинная цепочка служит не только доказательством последовательности событий, но и доказательством того, что она произошла из самого большого пула мощности процессора. Пока большая часть мощности ЦП контролируется узлами, которые не взаимодействуют для атаки на сеть, они ' создаст самую длинную цепь и опередит атакующих. Сама сеть требует минимальной структуры. Сообщения передаются с максимальным усилием, и узлы могут по желанию выходить из сети и присоединяться к ней, принимая самую длинную цепочку проверки работоспособности в качестве доказательства того, что произошло во время их отсутствия.

Хотя Gitэто распределенная система контроля версий для отслеживания изменений в исходном коде во время разработки программного обеспечения. Она предназначена для координации работы между программистами, но ее можно использовать для отслеживания изменений в любом наборе файлов. Его цели включают скорость, целостность данных и поддержку распределенных, нелинейных рабочих процессов.

По словам Линуса Торвальдса:

Во многих отношениях вы можете просто видеть git как файловую систему - она ​​адресно-ориентирована на контент, и у нее есть понятие управления версиями, но я действительно разработал ее с точки зрения пользователя файловой системы (эй, ядра - это то, что я делаю) и я фактически абсолютно не заинтересован в создании традиционной системы SCM.

asing177
источник
0

Как тык сказал :

Git и Blockchains выглядят одинаково, потому что они оба используют Merkle Trees для хранения упорядоченных транзакций с метками времени. Дерево меркла - это древовидная структура данных, где каждый узел помечен криптографическим значением хеш-функции их содержимого, которое включает в себя метки его дочерних элементов.

Первым отличием является функция Hash : Blockchain имеет очень дорогую хэш-функцию, так что каждый блок должен быть добыт, тогда как «блок» Git может быть создан с помощью простого сообщения фиксации.

Цель Биткойна - добавить доверие к порядку транзакций. Основное внимание уделяется самой длинной цепочке, поскольку она является наиболее дорогой для вычисления и, таким образом, скорее всего, будет правдой.

Биткойн выполняет это, требуя, чтобы хеш соответствовал определенным параметрам (начинается с определенного числа 0), увеличивая значение («nonce») в сообщении, пока не будет найден удовлетворительный хеш. Это требует усилий, чтобы найти, но только 1 расчет для проверки одноразового номера; и если множественные одноразовые числа дают удовлетворительный хэш, тогда один будет ниже и будет принят за истину. Другие схемы аутентификации делают хэш надежным за счет централизации выдачи хэша органу власти, возможно, проголосованному сетевым соглашением или каким-либо другим способом.

Данные блокчейна ограничены транзакциями, которые должны соответствовать проверке. Транзакция должна быть действительной, чтобы быть включенной в следующий блок. Биткойн-транзакция соответствует чему-то важному в реальном мире, что оправдывает использование дорогостоящего блока для записи этого перевода, например обмен денежной стоимости. На самом деле нас не волнует последняя книга, это метафора чего-то в реальном мире.

Напротив, блоки Git являются произвольными, поскольку коммит может содержать любое количество данных. Ценность заключается в изменениях данных, организованных в дерево git, потому что мы заботимся о конечном продукте, это подтверждается существованием репозитория git.

Цель Git - позволить дешевым «бухгалтерским книгам» отслеживать несколько вариантов продукта. «Леджер» в Git - это то, что нас волнует, это наш конечный продукт; данные транзакций просто записывают, как был построен продукт. Мы хотим сделать несколько версий конечных продуктов очень дешевыми, достаточно затрат, чтобы создатель записал, как они создали этот продукт. Никаких явных проверок данных не производится, вы поддерживаете конечный продукт, если он выглядит хорошо, и это существование делает полезным иметь цепочку создания этого продукта. Если конечный продукт плохой или порядок фиксации недействителен, этот «регистр» удаляется во время сборки мусора.

Второе отличие состоит в том, что транзакции Blockchain должны исходить из предыдущего действительного источника. В Git нам не важно, какие данные вы используете для расширения дерева. В Blockchain транзакции должны исходить из предыдущего действительного источника. В этом смысле Git отслеживает расширение нашей среды, тогда как Blockchain отслеживает обмен ценностями в закрытой среде.

Алекс Ф
источник