Git的内部数据结构是一个数据对象树,其中每个对象只指向它的前一个对象。每个数据块都是散列的。当保存的哈希值与实际哈希值偏离时,修改中间块(比特错误或攻击)将被注意到。
这个概念与区块链有何不同? Git并没有被列为区块链的例子,但至少在摘要中,这两个数据结构的描述看起来很相似:数据块、单向反向链接、哈希等等)。
那么区别在哪里,Git不被称为区块链?
Git的内部数据结构是一个数据对象树,其中每个对象只指向它的前一个对象。每个数据块都是散列的。当保存的哈希值与实际哈希值偏离时,修改中间块(比特错误或攻击)将被注意到。
这个概念与区块链有何不同? Git并没有被列为区块链的例子,但至少在摘要中,这两个数据结构的描述看起来很相似:数据块、单向反向链接、哈希等等)。
那么区别在哪里,Git不被称为区块链?
当前回答
正如poke所说:
Git和区块链看起来很相似,因为它们都使用默克尔树来存储有序的带时间戳的交易。merkle树是一种树数据结构,其中每个节点都用其内容的加密散列值标记,其中包括其子节点的标签。
第一个区别是哈希函数:区块链有一个非常昂贵的哈希函数,因此每个块都必须被挖掘,而Git“块”可以用一个简单的提交消息创建。
比特币的目的是为交易秩序增加信任。重点是最长的链,因为它的计算成本最高,因此最有可能是真理。
Bitcoin accomplishes this by requiring that the hash meets certain parameters (begins with a specific number of 0s), by incrementing a value ("nonce") in the message until a satisfactory hash is found. This takes effort to find, but only 1 calculation to verify for a nonce; and if multiple nonces produce a satisfactory hash, then one will be lower and taken as the truth. Other authentication schemes make the hash trustworthy by centralizing the issuing of the hash to an authority, perhaps voted by network agreement, or some other method.
区块链数据仅限于事务,必须符合验证。事务必须有效,才能包含在下一个块中。比特币交易对应于现实世界中一些重要的事情,这些事情证明了使用昂贵的区块来记录这种转移,比如货币价值的交换。我们实际上并不关心最终的总账,它是对现实世界中某些事物的一种隐喻。
相比之下,Git块是任意的,因为一次提交可以包含任意数量的数据。它的价值在于将数据组织到git树中的变化,因为我们关心最终产品,它由git存储库的存在进行验证。
The purpose of Git is to allow cheap "ledgers" to track multiple product alternatives. The "ledger" in Git is what we care about, it's our final product; the transactions data just record how the product was built. We want to make it very cheap to make multiple versions of final products, just enough overhead to require the creator to record how they built this product. No explicit validation is done on the data, you maintain the end-product if it looks good, and that existence makes it useful to have the chain of this product's creation. If the end-product is bad or the order of commits is invalid, this "ledger" gets deleted during garbage collection.
第二个区别是,区块链事务必须来自先前的有效源。在Git中,我们不关心使用什么数据来扩展树。在区块链中,事务必须来自先前的有效源。从这个意义上说,Git跟踪我们环境的扩展,而区块链跟踪封闭环境中的价值交换。
其他回答
没有理由不认为Git是区块链。Git专注于一组非常特殊(也非常重要)的资产:源代码。在这种情况下,共识是手动的,我们可以认为事务(提交)在合并到发布分支时被接受。 实际上,考虑到事务(提交)的数量,Git是迄今为止最成功的区块链。
摘自:https://arxiv.org/pdf/1803.00892.pdf ”……我们定义了“区块链”和“区块链网络”,然后讨论了两种非常不同的、众所周知的区块链网络:加密货币和Git存储库……”
请参见下一篇文章,解释为什么谷歌使用一个单一的monorepo作为单一的真相来源(基本上,作为区块链)。 https://research.google/pubs/pub45424/
Git和区块链之所以看起来相似,是因为它们都使用默克尔树作为底层数据结构。merkle树是一种树,其中每个节点都用其内容的加密散列值标记,其中包括其子节点的标签。
Git的有向无环图就是这样,一个merkle树,其中每个节点(标签、提交、树或blob对象)都用其内容的散列及其“子”的标签进行标记。注意,对于提交,“子”术语与Git对父提交的理解有点冲突:父提交是提交的子提交,您只需要将图看作是一棵通过重新根来不断生长的树。
区块链与此非常相似,因为它们也在以这种方式增长,并且它们也在使用其默克尔树属性来确保数据完整性。但通常情况下,区块链不仅仅被理解为默克尔树,这是它们与“愚蠢的内容跟踪器”Git分开的地方。例如,区块链通常还意味着在区块级别上拥有一个高度分散的系统(并非所有的区块都需要在同一个地方)。
理解区块链有点困难(就我个人而言,我还远远没有理解它的一切),但我认为理解Git内部是理解默克尔树的好方法,这肯定有助于理解区块链的基本部分。
问题是:为什么Git不被认为是“区块链”?因此,这是在断言有一种广泛流传的观点认为Git不是一个区块链(本页上我之前的回答说明并证实了这一观点),并询问这种观点流行的原因。这是个好问题。
Taking the question literally, the answer could be that the blockchain term and concept gained popularity as part of the digital currency operation called “Bitcoin”, and hence came to be associated with how Bitcoin does things: which is by using a lot of computing power to calculate a specific hash including a nonce to meet certain arbitrary requirements, which is by allegedly having no central authority, which is by being “independent”, maybe even “democratic”, and the rest of the kool aid; and as these things are not seen in Git, well, Git cannot be a blockchain, right? And so the question would be answered literally.
在这个表面的问题背后隐藏着另一个问题:什么是区块链?现在你可以找到一个定义并复制到这里,但我没有这样做,因为几年前我就下定决心了,当时我在听一个关于比特币的播客,它努力解释区块链的新概念,区块链的工作方式就像Git,我不打算让我宝贵的理解被互联网上随意的说法误导。
区块链是什么?这个词里有什么?
术语“区块链”中的任何内容都不要求在内容中包含一个nonce,以便得出一个由多少个前导零组成的哈希值。(这个要求只是为了能够通过计算能力,最终通过金钱来控制区块链。)
术语“区块链”中没有任何东西以网络的存在为前提,更不用说去中心化网络了。
“区块链”一词中的任何内容都不以“独立”于“中央权威”为前提。
术语“区块链”只是假设区块(数据)链接在一起。那么什么是链呢?它只是一个链接吗?不,它是一个坚固的纽带,用来用力量把东西连接在一起。
简单的链表不符合区块链的条件,因为列表中数据块的内容可以被更改,而列表将继续来回链接。链条不是这么运作的。
为了使数据块的链接成为数据块链,区块的内容需要以一种或另一种方式进行校验和(摘要),并且这个校验和(摘要)必须是链接的一部分,使其成为保护内容的强链接,防止其被更改。这是区块链。
这就是Git所做的,因此Git是区块链,如果你愿意,也可以将其视为区块链。
为了结束这个圈子,让我们再问一次:为什么Git不被认为是“区块链”?这可能是因为许多人,甚至可能是绝大多数人,不关注一个概念的本质,而是关注眨眼的意外。
区块链和git的目标是不同的,尽管它们都使用默克尔树作为数据结构。
区块链通常由遵循节点间通信和验证新块协议的点对点网络管理。一旦记录,任何给定区块中的数据都不能在不改变所有后续区块的情况下进行追溯修改,这需要网络大多数人的共识。
根据比特币白皮书:
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是一个分布式版本控制系统,用于跟踪软件开发过程中源代码的变化。它是为协调程序员之间的工作而设计的,但它也可以用于跟踪任何一组文件中的更改。它的目标包括速度、数据完整性和对分布式、非线性工作流的支持。
根据Linus Torvalds的说法:
在许多方面,您可以将git视为一个文件系统—它是 内容可寻址,它有版本控制的概念,但我真的 从文件系统的角度对问题进行了设计 人(嘿,我就是做玉米粒的),我实际上绝对有 对创建传统SCM系统毫无兴趣。
正如poke所说:
Git和区块链看起来很相似,因为它们都使用默克尔树来存储有序的带时间戳的交易。merkle树是一种树数据结构,其中每个节点都用其内容的加密散列值标记,其中包括其子节点的标签。
第一个区别是哈希函数:区块链有一个非常昂贵的哈希函数,因此每个块都必须被挖掘,而Git“块”可以用一个简单的提交消息创建。
比特币的目的是为交易秩序增加信任。重点是最长的链,因为它的计算成本最高,因此最有可能是真理。
Bitcoin accomplishes this by requiring that the hash meets certain parameters (begins with a specific number of 0s), by incrementing a value ("nonce") in the message until a satisfactory hash is found. This takes effort to find, but only 1 calculation to verify for a nonce; and if multiple nonces produce a satisfactory hash, then one will be lower and taken as the truth. Other authentication schemes make the hash trustworthy by centralizing the issuing of the hash to an authority, perhaps voted by network agreement, or some other method.
区块链数据仅限于事务,必须符合验证。事务必须有效,才能包含在下一个块中。比特币交易对应于现实世界中一些重要的事情,这些事情证明了使用昂贵的区块来记录这种转移,比如货币价值的交换。我们实际上并不关心最终的总账,它是对现实世界中某些事物的一种隐喻。
相比之下,Git块是任意的,因为一次提交可以包含任意数量的数据。它的价值在于将数据组织到git树中的变化,因为我们关心最终产品,它由git存储库的存在进行验证。
The purpose of Git is to allow cheap "ledgers" to track multiple product alternatives. The "ledger" in Git is what we care about, it's our final product; the transactions data just record how the product was built. We want to make it very cheap to make multiple versions of final products, just enough overhead to require the creator to record how they built this product. No explicit validation is done on the data, you maintain the end-product if it looks good, and that existence makes it useful to have the chain of this product's creation. If the end-product is bad or the order of commits is invalid, this "ledger" gets deleted during garbage collection.
第二个区别是,区块链事务必须来自先前的有效源。在Git中,我们不关心使用什么数据来扩展树。在区块链中,事务必须来自先前的有效源。从这个意义上说,Git跟踪我们环境的扩展,而区块链跟踪封闭环境中的价值交换。