为什么 Git 不被视为 "block chain"?

Why is Git not considered a "block chain"?

Git的内部数据结构是一棵数据对象树,其中每个对象只指向其前身。每个数据块都经过哈希处理。修改(误码或攻击)一个中间块,当保存的哈希值和实际哈希值发生偏差时,会被注意到。

这个概念与区块链有何不同?
Git 没有被列为区块链的例子,但至少在总结中,两种数据结构描述看起来很相似:数据块,单向反向链接,哈希,...)。

那Git不叫区块链,区别在哪里?

Git和区块链之所以看起来相似,是因为它们都使用merkle trees作为底层数据结构。默克尔树是一棵树,其中每个节点都标有其内容的加密哈希值,其中包括其 children.

的标签

Git 的有向无环图就是一个 merkle 树,其中每个节点(标签、提交、树或 blob object)都标有其内容的哈希值和其“child”的标签。请注意,对于提交,“child”术语与 Git 对 parents 的理解有点冲突:Parent 提交 are children 的提交,您只需要将图表视为一棵树,它会不断增长 re-rooting。

区块链与此非常相似,因为它们也以这种方式不断增长,并且它们还使用其 merkle 树 属性 来确保数据完整性。但通常,区块链被理解为不仅仅是 merkle 树,这是它们与 “stupid content tracker” Git 分开的地方。例如,区块链通常也意味着在块级别上具有高度去中心化的系统(并非所有块都需要在同一个地方)。

理解区块链有点困难(就个人而言,我离理解它的一切还很遥远),但我认为理解 Git 内部结构是理解 merkle 树的好方法,这绝对有助于理解关于区块链的基础部分。

不同于加密货币区块链; git 没有 p2p 无信任共识机制。

像比特币这样的网络货币,使用分布式共识加密块链(merkle 树)。常见用法已将其缩短为 'blockchain'

虽然 git 使用块链(merkle 树),但它缺少术语 'BlockChain' 的常见用法所暗示的分布式共识加密组件。

Blockchain 而不是 任何块的任何链。

Blockchain 是当 有一种方法可以在两个或多个被转移时确定主链,并且不需要中央机构来进行该确定。

区块链和 git 的目标不同,尽管两者都使用 merkle 树作为数据结构。

A blockchain 通常由遵守节点间通信和验证新块协议的对等网络管理。一旦记录下来,任何给定块中的数据都不能在不更改所有后续块的情况下进行追溯更改,这需要网络多数人的共识。

根据比特币白皮书:

A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone

虽然 Git 是一个分布式版本控制系统,用于跟踪软件开发过程中源代码的变化 development.It 是为协调程序员之间的工作而设计的,但它可用于跟踪任何集合中的变化的文件。它的目标包括速度、数据完整性和对分布式非线性工作流的支持。

根据 Linus Torvalds 的说法:

In many ways you can just see git as a filesystem – it's content-addressable, and it has a notion of versioning, but I really designed it coming at the problem from the viewpoint of a filesystem person (hey, kernels is what I do), and I actually have absolutely zero interest in creating a traditional SCM system.

作为:

Git 和区块链看起来很相似,因为它们都使用 Merkle Trees 来存储有序的时间戳交易。 默克尔树是一种树数据结构,其中每个节点标有其内容的加密哈希值,其中包括其子节点的标签。

第一个区别是哈希函数:区块链有一个非常昂贵的哈希函数,所以每个块都必须被挖掘,而 Git "block" 可以使用简单的提交消息创建。

比特币的目的是增加对交易顺序的信任。重点是最长的链,因为它的计算成本最高,因此最有可能成为真相。

比特币通过要求散列满足某些参数(以特定数量的 0 开始),通过递增消息中的值 ("nonce") 直到找到满意的散列来实现这一点。这需要付出努力才能找到,但只需 1 次计算即可验证随机数;如果多个 nonce 产生一个令人满意的散列,那么一个会更低并被视为真实。其他身份验证方案通过将散列集中发布给授权机构来使散列值得信赖,可能通过网络协议或其他一些方法投票。

区块链数据仅限于交易,必须符合验证。交易必须有效才能包含在下一个区块中。 一笔比特币交易对应于现实世界中一些重要的事情,证明使用昂贵的区块来记录这种转移是合理的,比如货币价值的交换。我们实际上并不关心最终的分类账,它是对现实世界中某事的隐喻。

相比之下,Git 块是任意的,因为提交可以包含任意数量的数据。价值在于数据的变化被组织到 git 树中,因为我们关心最终产品,它由 git 存储库的存在验证。

Git的目的是让廉价"ledgers"跟踪多个产品替代品。"ledger"在Git是我们关心的,是我们的最终产品;交易数据只记录产品是如何构建的。我们想让制作多个版本的最终产品变得非常便宜,只需要足够的开销来要求创建者记录他们是如何构建这个产品的。没有对数据进行明确的验证,如果最终产品看起来不错,您可以维护它,并且这种存在使得拥有该产品的创建链很有用。如果最终产品不好或提交顺序无效,则此 "ledger" 会在垃圾收集期间被删除。

第二个区别是区块链交易必须来自先前的有效来源。在Git中,我们不关心你使用什么数据来扩展树.在区块链中,交易必须来自先前的有效来源。从这个意义上说,Git 跟踪我们环境的扩展,而区块链跟踪封闭环境中的价值交换。

没有理由不将 Git 视为区块链。 Git 专注于一组非常特殊(且重要)的资产:源代码。本例中的共识是手动的,我们可以认为一个事务(commit)在合并到发布分支时就被接受了。 实际上,考虑到交易(提交)的数量,Git 是迄今为止最成功的区块链。

摘自:https://arxiv.org/pdf/1803.00892.pdf “... ...我们定义了“区块链”和“区块链网络”,然后讨论了两个非常不同的、众所周知的 类 区块链网络:加密货币和 Git 存储库...”

另请参阅下一篇论文,解释为什么 Google 使用单个单一存储库作为单一事实来源(基本上,作为区块链)。 https://research.google/pubs/pub45424/

问题是:为什么 Git 不被认为是“区块链”? 所以这是在断言有一种广泛的观点认为 Git 不是区块链(本页我前面的答案说明和证实的断言)并询问这种观点盛行的原因。这是个好问题。

从字面上看这个问题,答案可能是区块链术语和概念作为称为“比特币”的数字货币操作的一部分而流行,因此与比特币的运作方式相关联:通过使用计算特定散列的大量计算能力,包括满足某些任意要求的随机数,据称没有中央权威,这是“独立”,甚至可能是“民主”,以及其余的 kool 援助;由于这些东西在 Git 中看不到,所以 Git 不可能是区块链,对吧?所以这个问题会从字面上回答。

这个表面问题背后隐藏着另一个问题:什么是区块链?现在你可以查找某个 定义 并将其复制到这里,但我没有这样做,因为我 下定决心 年前,当听一个关于比特币的播客时,该播客试图解释区块链的新概念, 区块链的工作方式类似于 Git,我不打算让我宝贵的理解被互联网上的随机说法所误导。

那么什么是区块链?这个词是什么?

术语“区块链”中没有任何内容预先假定要求在内容中包含随机数,以便得出由如此多的前导零组成的哈希值。 (这个要求只是为了能够通过计算能力控制区块链,因此最终通过金钱来控制。)

“区块链”一词中没有任何东西预先假定网络的存在,更不用说去中心化的网络了。

术语“区块链”中的任何内容均不预设任何“独立于”“中央权威”。

术语“区块链”仅以链接在一起的(数据)块为前提。现在什么是链?它只是一个 link 吗?不,它是一个 strong link 旨在通过力量将事物固定在一起。

一个简单的 linked 列表不符合区块链的条件,因为列表中数据块的内容可能会被更改,而列表会继续 link 来回移动美好的。这不是链条的工作方式。

要将一个link个数据块变成一个个数据块,块的内容需要以一种或另一种方式进行校验和(摘要),并且此校验和(摘要)必须是 link 的一部分,使其成为保护内容的强大 link,防止其被更改。这是区块链。

这就是 Git 所做的,因此 Git 是一个区块链,或者作为一个区块链工作,如果你愿意的话。

绕圈再问:为什么Git不算“区块链”?可能是因为很多人,甚至可能是大大多数人,不关注一个概念的本质,而是关注blinking accidents.

总结一下(对我来说):

虽然 Git 为您提供完全的选择自由,但区块链是一个高度政治化的系统,您被迫信任他人:

  • Git是没有预定义共识算法的默克尔树。

  • 区块链是具有预定义共识算法的 Merkle 树。

因此,如果你是一个人,那么 Git 和区块链没有区别。当您信任 Git 和您自己时,您已经有了预定义的共识。

但是,当您处于网络中时,情况开始变得不同。


备注:

  • 对于区块链,绝对没有要求散列难以计算或定义诸如“挖矿”之类的东西或拥有一些特定的软件来确保您参与某个网络。
    这可能是对比特币(通常称为加密货币,我不能完全同意)之类的东西的要求,但比特币也没有定义什么是区块链,区块链也不需要像比特币这样的东西。

  • 共识算法不一定是基于某种加密协议的算法。例如,每天在当地报纸上发布您的 TIP 以(ab)使用 Git 作为某些区块链就足够了。

Git 随时提供多种可能的共识算法供您选择:

  • 在报纸或类似的报纸上发布 SHA(分发且难以伪造的东西)

  • 如果您已经是某个 GnuPG Web Of Trust 的一部分,这种情况很少见,您可以轻松地使用 Signed Commits(或 Signed Tags)来同意共识。

  • “Signed off:”变体不提供加密安全共识,但结合 something like Gerrit 和 Fast-Forward-Only 推动它是一些定义明确的共识算法。

因此要使 Git 成为区块链,all you need is to add some air


一些不同的观点:

Git 本身并不是区块链。相比之下,它远不及区块链(缺乏预定义的共识算法),也远不及区块链(允许从过多的共识算法中进行选择,类似于 SCM 等)。


其他一些观察:

  • Git 分支与区块链分裂相同。虽然区块链分裂很少发生,但大多数 Git 存储库的分支 (master+HEAD) 少于 BitCoin had splits.

  • Git总有一个明确的共识是你做的,也就是你推送的TIP。然而,这只适用于你而不适用于其他人。
    将 Git 存储库推送到一些共享的 Git 服务也可以看作是一种共识。这种共识不需要基于民主原则。


非常个人的想法:

虽然区块链是一些 overhyped buzzword,没有它你也可以快乐地生活,Git 是完成工作必不可少的基本工具,是你不能没有的基本必备工具之一,像空气和水一样重要的东西。这可能就是为什么像我这样的人不将 Git 称为区块链 ..

YMMV