Git的内部数据结构是一棵数据对象树,其中每个对象只指向它的前身。每个数据块都被散列。修改(比特错误或攻击)中间块时,将在保存的哈希值和实际哈希值不同时被注意到。
这个概念与区块链有何不同?
Git没有被列为区块链的例子,但至少在总结中,两种数据结构的描述看起来很相似:数据块、单向反向链接、哈希等)。
那么,Git之所以没有被称为区块链,区别在哪里呢?
Git的内部数据结构是一棵数据对象树,其中每个对象只指向它的前身。每个数据块都被散列。修改(比特错误或攻击)中间块时,将在保存的哈希值和实际哈希值不同时被注意到。
这个概念与区块链有何不同?
Git没有被列为区块链的例子,但至少在总结中,两种数据结构的描述看起来很相似:数据块、单向反向链接、哈希等)。
那么,Git之所以没有被称为区块链,区别在哪里呢?
Git的有向无环图正是这样一个Merkle树,其中每个节点(标记,提交,树或blob对象)都带有其内容的哈希值和“子节点”的标签。请注意,对于提交,"子节点"一词与Git对父项的理解有些冲突:父提交是提交的子节点,您只需将图形视为通过重新确定根而不断增长的树即可。
区块链非常类似于此,因为它们也以这种方式不断增长,并且它们还使用其Merkle树属性来确保数据完整性。但通常,区块链被理解为远不止于Merkle树,这就是它们与“愚蠢的内容跟踪器”Git分离的地方。例如,区块链通常意味着在块级别上具有高度分散的系统(不需要所有块都在同一位置)。
理解区块链有点困难(就我个人而言,我仍然远未理解其中的一切),但我认为理解Git内部原理是了解Merkle树的好方法,这绝对有助于理解区块链的基本部分。
区块链不仅仅是一些块的任意链接。
当出现两条或更多分支时,区块链依旧能够确定主链的方式,并且不需要中央机构进行决策。
像比特币这样的加密数字货币使用分布式一致性的块链技术(默克尔树)。通常使用简称为“区块链”。
虽然Git也使用了块链技术(默克尔树),但它缺乏“区块链”这个术语通常所涵盖的分布式一致性加密组件。
与加密货币区块链不同,Git没有点对点的无信任共识机制。
没有理由不把 Git 视为一种区块链。Git 专注于一组非常特定(也很重要)的资产:源代码。在这种情况下,共识是手动进行的,并且我们可以认为当提交并合并到发布分支时,一个交易(commit)被接受了。
实际上,考虑到交易(commits)的数量,Git 是迄今为止最成功的区块链。
摘自:https://arxiv.org/pdf/1803.00892.pdf "... ... 我们定义了 “区块链” 和 “区块链网络”,然后讨论了两种非常不同的、众所周知的区块链网络类别:加密货币和 Git 存储库 ……"
另请参阅下一篇论文,该论文解释了为什么谷歌使用单个 monorepo 作为事实的唯一来源(基本上,作为区块链)。 https://research.google/pubs/pub45424/
注意:
对于区块链来说,没有必要使哈希难以计算或定义类似“挖矿”之类的东西,也不需要特定的软件来确保您参与某个网络。
这可能是比特币(通常被称为加密货币,我不能完全同意)之类的东西所必需的,但比特币既不定义什么是区块链,也不需要像比特币那样。
共识算法不一定是基于某些加密协议的东西。例如,每天在当地报纸上发布TIP就足以(滥用)Git作为一种区块链。
Git提供了多种可能的共识算法供您选择:
在报纸或类似物品上发布SHA(分布式且难以伪造的东西)
如果您已经是GnuPG Web Of Trust的一部分,您可以立即使用Signed Commits(或Signed Tags)来达成共识。
“Signed off:”变体并不提供加密安全的共识,但与类似于Gerrit和Fast-Forward-Only推送相结合,它是一种非常明确定义的共识算法。
因此,要使Git成为区块链,您只需要添加一些空气。
一些不同的观点:
Git本身并不是区块链。相反,它远不如区块链(缺乏预定义的共识算法),但也远比区块链更多(允许选择大量的共识算法,旨在作为源代码管理工具等)。
以下是一些其他观察:
Git分支与区块链分叉相同。虽然区块链分叉很少发生,但大多数Git存储库的分支比比特币有分叉少。
Git总是由您进行明确的共识,即您要推送的TIP。但是,这仅适用于您而不适用于其他人。
将Git存储库推送到某个共享Git服务也可以视为共识。此类共识没有基于民主原则的要求。
非常个人的想法:
尽管区块链是一些被过度炒作的流行语, 你可以愉快地没有它而生活,但Git是一个不可避免的基本工具,用于完成你的工作,你不能没有的基本必备品,就像空气和水一样重要。这可能是为什么像我这样的人不把Git称为区块链的原因..
您的情况可能有所不同。
正如poke说的那样:
Git和区块链看起来很相似,因为它们都使用Merkle Trees来存储有序的时间戳交易。 Merkle Tree是一种树形数据结构,其中每个节点都带有其内容的加密哈希值,包括其子节点的标签。
第一个区别是哈希函数:区块链具有非常昂贵的哈希函数,以便每个块都必须进行挖掘,而Git的“块”可以通过简单的提交消息创建。
比特币的目的是为交易排序添加信任。焦点在于最长的链,因为这是计算成本最高的,因此最有可能是真相。
Bitcoin通过要求哈希满足特定参数(以特定数量的0开头),通过在消息中递增一个值(“nonce”)直到找到满意的哈希来实现这一点。这需要努力才能找到,但只需验证一次计算的nonce;如果多个nonce产生满意的哈希,则其中一个将更低并被视为真相。其他认证方案通过将哈希的发放集中化给某个权威机构(可能由网络协议投票或其他方法)来使哈希值可信。