Gitが「ブロックチェーン」と見なされないのはなぜですか?


174

Gitの内部データ構造はデータオブジェクトのツリーであり、各オブジェクトはその先行オブジェクトのみを指します。各データブロックはハッシュされます。保存されたハッシュと実際のハッシュが異なる場合、中間ブロックを変更(ビットエラーまたは攻撃)します。

このコンセプトはブロックチェーンとどう違うのですか?
Gitはブロックチェーンの例としてリストされていませんが、少なくとも要約すると、両方のデータ構造の説明は似ています(データブロック、単一方向の逆リンク、ハッシュなど)。

では、Gitはブロックチェーンと呼ばれていないという違いはどこにあるのでしょうか。


2
ブロックチェーンの例としてGitがリストされていない最初にブロックチェーンとは何かを学習しようとしたときに、最も有名な例としてgitと呼ばれていました(正確なリンクはありませんが、上から「ブロックチェーン」のGoogle検索で返されたリスト)
Leon

2
Gitもブロックチェーンも、基本的な基礎データ構造としてマークルツリーを使用しています。しかし、それだけでGitがブロックチェーンになったり、逆になったりすることはありません。– Git(およびその内部)を知っていれば、マークルツリーも知っています。これは、ブロックチェーンのしくみを理解するのに非常に役立つ啓示となります。
突く

24
親しい有権者各位、あなたの理由を説明できますか?2件のいいね、良いコメントと回答が表示されます。なぜそれは意見に基づいているのですか?これは、Gitをブロックチェーンと見なさないように継ぎ合わせるデータ構造とアルゴリズムに関するものです。
Paebbels 2017

2
「考慮されていない...」というのはあなたの意見ですbitcoin.stackexchange.com/a/43627/77469
v.oddou

4
@ v.oddouマークルツリーは1979年から存在しています。2つのテクノロジーがコンセプトの一部としてマークルツリーを目立つように使用しているからといって、それらが同じになるわけではありません。それらのどちらも同じくらいハッシュ木にGitのか、ブロック鎖のいずれかを減少させるために間違っていますハッシュ木。彼らはそれらを使うだけです。それは実際にはブロックチェーンではなくマークルツリーについて話しているので、リンクされた投稿は完全に無関係です。
突く

回答:


53

git いくつかの理由でブロックチェーン技術の例ではありません(これらは最初に思いついたものです):

  1. ブロックチェーンの実装では、すべてのブロックがブロックチェーンに追加される前に、独立して複数回検証されます。これは確かにブロックチェーン技術の最も重要なものの1つであり、その「アンハッカ性」を保証するものです。一方、多くのgitプロジェクトは独立した検証を必要とせず、必要な場合、リポジトリにコミットする前に1人の人が変更を承認するだけで済みます。したがって、信頼する必要のある検証の多くて1つのポイントで、gitはブロックチェーンテクノロジーのコア原則の1つを壊します。

  2. gitリポジトリは、必ずしも多くのサーバに複製されていません。gitリポジトリからローカルで作業できます。ローカルディスクが破損している場合、すべてが失われます。ブロックチェーン技術は、サーバー間で台帳を複製することを意味します。

  3. git履歴を書き換えることができます。A のそれよりも以前の状態に設定されている歴史を書き換えるでしょう。ブロックチェーンでは、元帳は不変の歴史です。git push <remote> <branch> --force<branch><remote>


104
「ブロックチェーンでは、元帳は不変の歴史です。」-gitの歴史もそうです。「履歴を書き直す」ときは、過去のある時点から始めて、新しいコミットを追加します。同じことがブロックチェーンでも可能で、実際には、後で破棄されても、フォークが発生するたびに発生します。
Holger Just

8
私がブロックチェーンとGitを理解している限り、ハッシュ衝突の問題を解決しない限り、ブロックチェーンを書き換えることもできます。Gitの場合、はい、書き直すことができますが、すべてのリモートにはまだ元の履歴があります。履歴を書き換えると、新しいハッシュと別のツリーが作成されます。ブロックチェーンがそのような操作を回避しない場合、必要に応じて実装できるため、これは有効な引数ではありません。または逆に、ブランチを保護対象として設定することで、強制プッシュを拒否できます。
Paebbels 2017

4
@HolgerJust gitの履歴は変更可能です。際にはpush --force、単一の枝の上に、あなたは、ガベージコレクタによってクリーンアップされコミットへの参照を失っています。これは、歴史の書き換えではなく、代替の開発パスであるフォークとは異なります。
houtanb 2017

24
要約すると、特別なワークフローを適用していくつかの操作を禁止することにより、Gitをブロックチェーンモードで操作できるということです。
Paebbels 2017

4
@Paebbelsはい、私はそれに同意します。デフォルトでは、通常の使用ではそうではありませんが、特別なワークフローではそうなります。
houtanb 2017

123

Gitとブロックチェーンが同じように見える理由は、どちらも基礎となるデータ構造としてマークルツリーを使用しているためです。マークルツリーは、各ノードがその内容の暗号化ハッシュ値でラベル付けされたツリーであり、その子のラベルが含まれています。

Gitの有向非循環グラフはまさに、マークルツリーであり、各ノード(タグ、コミット、ツリー、またはblobオブジェクト)には、そのコンテンツのハッシュとその「子」のラベルが付けられています。コミットの場合、「子」という用語はGitの親の理解と多少矛盾します。親コミットコミットの子であり、グラフを再ルートすることによって成長し続けるツリーとしてグラフを見るだけで十分です。

ブロックチェーンもこのように成長し続けるため、これに非常に似ています。また、データの整合性を確保するためにマークルツリープロパティを使用しています。しかし、通常、ブロックチェーンは、「愚かなコンテンツトラッカー」のGitから分離されているマークルツリー以上のものとして理解されています。たとえば、ブロックチェーンは通常、ブロックレベルで高度に分散されたシステムを持つことも意味します(すべてのブロックが同じ場所にある必要はありません)。

ブロックチェーンを理解することはちょっと難しいですが(個人的には、私はまだそれについてすべてを理解しているわけではありません)、Gitの内部を理解することは、ブロックチェーンの基本的な部分を理解するのに役立つマークルツリーを理解するための良い方法だと思います。


24
申し訳ありませんが、ブロックチェーンがgitが提供する以上のものを提供する場所はありません。ブロックチェーンはgitとまったく同じくらい愚かです。あなたがそう信じていない場合、あなたは誇大広告です。ピアネットワークとコンセンサスシステムは別のものです。
v.oddou 2018

2
プライベート元帳(ブロックチェーン)は概念的にはgitと同じです
Munhitsu '29

通常、gitリポジトリには1つのルートコミットがありますが、ブランチはいくつでも存在できます。ブランチの最後のコミットがルートコミットとして表示され、親が子として表示される場合は、多くのルートが成長するツリーがあります。子参照。複数の親と子が存在する可能性があるため、ツリーでさえありません。
ヘルマン

22

ビットコインのようなサイバー通貨は、ブロックのコンセンサス暗号チェーン(マークルツリー)を使用します。一般的な使用法はこれを「ブロックチェーン」に短縮しました

gitはブロックのチェーン(マークルツリー)を使用しますが、「BlockChain」という用語の一般的な用法が意味する分散コンセンサス暗号コンポーネントが欠けています。


17

Blockchainブロックのチェーンだけではありません

Blockchainときである2またはそれ以上が流用されている主鎖を決定する方法がある、と何の中央機関がその決意のために必要とされていない場合。


17

暗号通貨ブロックチェーンとは異なり; gitにはp2pトラストレスコンセンサスメカニズムがありません。


なぜトラストレスコンセンサスシステムをブロックチェーンの一部と見なすのですか?ブロックチェーンで信頼を作成するには多くの方法があります。gitの場合、ローカルコピーのすべてを次のプルで削除できないことがわかっていて、リモートコピーの変更が必要であることを指定するだけです。信頼できないコンセンサスが必要なのは、そうでなければ何が正しいのか不明確な場合だけです。gitでは、複数のブランチを「適切」にして、eventuellをマージすることができます。
アロ

@allo GitHubは通常、真実の中心的な情報源として使用されますが、管理者が履歴を強制的に押したり上書きしたりするのを妨げているのは何ですか?GitHubがなく、ピアからプルした場合、マージの競合をどのように処理しますか?あなたは誰の権利をどのように決定しますか?
ミゲル・モタ

1
何もあなたを強制的に押すことを止めません。しかし、ブロックチェーンが私を保証するように、私のチェーンはこれらのコミットがそれに基づいていると確認できないため、それを検出できます。それは分散チェーンの同意ではなく、ブロックチェーンの要点です。そして、gitの中で、私は明示的にしません(開発が民主主義ではありません)私はマージ何のための同意プロトコルを持つようにしたいが、私のチェーンにそれらをマージするとき、私は実際に新しいコミットをお読みください。私のコピー正しいです。なぜなら、コピーすでに持っているもので構成されているため、(つまり、マージの競合を確認することで)確認でき、レビューして受け入れたものだからです。
Allo

1
@alloあなたはその点で正しいですが、私は一般的なブロックチェーンではなく、「暗号通貨ブロックチェーン」という回答で述べましたが、私はそれについて考えたので、私の回答は質問された質問に実際には適合していないようです基本的なデータ構造ではなくシステム全体について考える
Miguel Mota

あなたはgitとcryptocurrencyで使用されるブロックチェーンの違いについて完全に正しいです。用語を厳密に使用する場合、gitがブロックチェーンと見なされない理由(またはその場合)に対する質問への回答ではありません。現在受け入れられている答えでさえあなたの答えに似ています。私はまだ賞金を得た答えを好みます。
Allo

1

ブロックチェーンとgitの目標は異なりますが、どちらもデータ構造としてマークルツリーを使用します。

blockchainは通常、ノード間通信のプロトコルに準拠し、新しいブロックを検証するピアツーピアネットワークによって管理されます。いったん記録されると、特定のブロックのデータは、後続のすべてのブロックを変更せずにさかのぼって変更することはできません。これには、ネットワークの過半数の合意が必要です。

ビットコインのホワイトペーパーによると:

純粋にピアツーピアバージョンの電子現金を使用すると、金融機関を経由せずにオンライン決済をある当事者から別の当事者に直接送信できます。デジタル署名はソリューションの一部を提供しますが、二重支出を防ぐために信頼できるサードパーティが依然として必要な場合、主な利点は失われます。ピアツーピアネットワークを使用した二重支出問題の解決策を提案します。ネットワークは、トランザクションをハッシュベースの作業証明のチェーンにハッシュすることによってトランザクションにタイムスタンプを付け、作業証明をやり直さなければ変更できないレコードを形成します。最長のチェーンは、目撃された一連のイベントの証拠として機能するだけでなく、CPUパワーの最大のプールから来たことの証拠としても機能します。CPUパワーの大部分が、ネットワークを攻撃するために協力していないノードによって制御されている限り、最長のチェーンを生成し、攻撃者を追い越します。ネットワーク自体は最小限の構造で済みます。メッセージはベストエフォートベースでブロードキャストされ、ノードは自由にネットワークを離れたり、ネットワークに再参加したりすることができ、最長の作業証明チェーンを、なくなった間に起こったことの証明として受け入れます。

ながら Gitプログラマの間で作業を調整するために設計されたソフトウェアdevelopment.It中にソースコードの変更を追跡するための分散型バージョン管理システムであり、ファイルの任意のセットの変化を追跡するために使用することができます。その目標には、速度、データの整合性、分散型の非線形ワークフローのサポートが含まれます。

Linus Torvaldsによると:

多くの方法でgitをファイルシステムとして見ることができます– gitはコンテンツアドレス指定可能であり、バージョン管理の概念がありますが、ファイルシステム担当者の観点から問題が発生するように設計しました(カーネルは私がやっていることです) 、そして私は従来のSCMシステムを作成することにまったく関心がありません。


0

以下のようPOKEは言いました

Gitとブロックチェーンはどちらもマークルツリーを使用して、順序付けされたタイムスタンプ付きトランザクションを格納しているため、似ています。マークルツリーは、各ノードがその子のラベルを含むコンテンツの暗号化ハッシュ値でラベル付けされるツリーデータ構造です。

最初の違いはハッシュ関数です。ブロックチェーンには非常に高価なハッシュ関数があり、各ブロックをマイニングする必要があります。Gitの「ブロック」は単純なコミットメッセージで作成できます。

ビットコインの目的は、トランザクションの順序に信頼を追加することです。最長のチェーンに焦点が当てられます。これは、計算に最も費用がかかるため、真実である可能性が最も高いためです。

ビットコインは、ハッシュが特定のパラメーター(特定の数の0で始まる)を満たすことを要求し、満足のいくハッシュが見つかるまでメッセージの値( "nonce")をインクリメントすることでこれを実現します。これは見つけるのに労力を要しますが、ナンスを検証するための計算は1つだけです。複数のノンスが満足のいくハッシュを生成する場合、1つは低くなり、真実と見なされます。他の認証スキームは、おそらくネットワーク合意または他の方法によって投票された、当局へのハッシュの発行を集中化することにより、ハッシュを信頼できるものにします。

ブロックチェーンデータは、検証に準拠する必要があるトランザクションに限定されます。トランザクションは、次のブロックに含まれるために有効でなければなりません。ビットコイン取引は、お金の価値の交換など、この送金を記録するために高価なブロックを使用することを正当化する、現実世界で重要な何かに対応します。私たちは実際には最終的な台帳を気にしません。それは現実世界の何かのメタファーです。

対照的に、コミットには任意の量のデータを含めることができるため、Gitブロックは任意です。最終的な製品に関心があるため、gitツリーに編成されているデータの変更に価値があり、それはgitリポジトリの存在によって検証されます。

Gitの目的は、安価な「台帳」が複数の代替製品を追跡できるようにすることです。Gitの「元帳」は私たちが気にしているものであり、それが最終製品です。トランザクションデータは、製品の構築方法を記録するだけです。私たちは、最終製品の複数のバージョンを作成することを非常に安価にしたいと考えています。作成者がこの製品をどのように構築したかを記録するように要求するのに十分なオーバーヘッドです。データに対して明示的な検証は行われません。見た目が良い場合は最終製品を維持します。その存在により、この製品の作成のチェーンを持つことが役立ちます。最終製品が不良であるか、コミットの順序が無効である場合、この「元帳」はガベージコレクション中に削除されます。

2番目の違いは、ブロックチェーントランザクションが以前の有効なソースからのものでなければならないことです。Gitでは、ツリーの拡張にどのデータを使用するかは関係ありません。ブロックチェーンでは、トランザクションは以前の有効なソースからのものでなければなりません。その意味で、Gitは私たちの環境の拡張を追跡しますが、ブロックチェーンは閉じた環境内での価値の交換を追跡します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.