Git的内部数据结构是一个数据对象树,其中每个对象只指向它的前一个对象。每个数据块都是散列的。当保存的哈希值与实际哈希值偏离时,修改中间块(比特错误或攻击)将被注意到。
这个概念与区块链有何不同? Git并没有被列为区块链的例子,但至少在摘要中,这两个数据结构的描述看起来很相似:数据块、单向反向链接、哈希等等)。
那么区别在哪里,Git不被称为区块链?
Git的内部数据结构是一个数据对象树,其中每个对象只指向它的前一个对象。每个数据块都是散列的。当保存的哈希值与实际哈希值偏离时,修改中间块(比特错误或攻击)将被注意到。
这个概念与区块链有何不同? Git并没有被列为区块链的例子,但至少在摘要中,这两个数据结构的描述看起来很相似:数据块、单向反向链接、哈希等等)。
那么区别在哪里,Git不被称为区块链?
当前回答
区块链不是任意区块的任意链。
区块链是指当两个或多个主链被转移时,有一种方法可以确定主链,并且不需要中央机构来确定主链。
其他回答
理解任何技术的一个好方法是问,“它能解决什么问题”?Git的用例非常简单,因为它的预期用途是版本控制/源代码控制。
Git是什么?
“Git是一个免费的开源分布式版本控制系统,旨在快速高效地处理从小型到超大型项目的所有内容。”参见https://www.git-scm.com/
所以很明显,要解决的用例问题是“分布式版本控制”。仅此而已,不多不少。对此有许多现成的证据。
版本控制——也称为源代码控制或修订控制——是跟踪和管理对代码和其他文件所做更改的重要软件开发实践。它与源代码管理密切相关。
什么是区块链?
“区块链是一种点对点去中心化分布式账本技术,它使任何数字资产的记录透明且不可更改,并且不涉及任何第三方中介。这是一项新兴的革命性技术,因其能够以可扩展的方式降低风险和欺诈而吸引了大量公众的关注。
没有重复区块链的技术细节已经概述在前面的答案(即。挖矿,分布式网络),简单地说,区块链是一个完全不同于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没有p2p的无信任共识机制。
总结一下(对我来说):
虽然Git为您提供了完全的自由选择,但区块链是一个高度政治化的系统,在那里您被迫信任他人:
Git是一个没有预定义共识算法的默克尔树。 区块链是具有预定义共识算法的默克尔树。
因此,如果你是一个人,Git和区块链之间没有区别。当您信任Git和您自己时,您已经拥有了预定义的共识。
但是,当你处于一个网络中时,事情就开始变得不同了。
注:
For Blockchains there is absolutely no requirement for the hash to be difficult to calculate or to define something like "Mining" or have some specific software which ensures you take part of a certain Network. This all might be a requirement for something like Bitcoin (which usually is referred to as Cryptocurrency, which I cannot fully agree to), but neither is BitCoin defining what a Blockchain is, nor does a Blockchain need to be something like BitCoin. The consensus algorithm does not necessarily be something which is based on some cryptographic protocol. For example it would be enough to publish your TIP in a local newspaper each day to (ab)use Git as some Blockchain.
Git提供了多种可能的共识算法,你可以从中选择:
在报纸或类似报纸上发布SHA(可分发且不易伪造) 如果你已经是某个GnuPG信任网络的一部分,你可以很容易地使用签名提交(或签名标签)来同意这个共识。 “Signed off:”变体不提供加密安全的共识,但与Gerrit和快速前进(Fast-Forward-Only)之类的东西结合在一起,它是一些定义很好的共识算法。
因此,要使Git成为区块链,您只需要添加一些空气。
一些不同的观点:
Git本身没有区块链。相比之下,它远小于区块链(缺乏预定义的共识算法),而远高于区块链(允许从过多的共识算法中选择,意味着作为SCM等)。
其他一些观察结果:
Git分支与区块链拆分相同。虽然区块链拆分很少发生,但大多数Git存储库的分支(master+HEAD)比比特币的拆分要少。 Git总是有一个明确的由你完成的共识,也就是你推送到的TIP。然而,这只适用于你,而不是其他人。 将Git存储库推到某个共享的Git服务也可以被视为一种共识。这种共识不需要建立在民主原则的基础上。
非常个人的想法:
区块链是一个过度宣传的流行词,没有它你也能快乐地生活,而Git则是完成工作的不可避免的基本工具,它是你生活中不可或缺的基本必需品之一,就像空气和水一样重要。这可能就是为什么像我这样的人不把Git称为区块链..
YMMV
Git和区块链之所以看起来相似,是因为它们都使用默克尔树作为底层数据结构。merkle树是一种树,其中每个节点都用其内容的加密散列值标记,其中包括其子节点的标签。
Git的有向无环图就是这样,一个merkle树,其中每个节点(标签、提交、树或blob对象)都用其内容的散列及其“子”的标签进行标记。注意,对于提交,“子”术语与Git对父提交的理解有点冲突:父提交是提交的子提交,您只需要将图看作是一棵通过重新根来不断生长的树。
区块链与此非常相似,因为它们也在以这种方式增长,并且它们也在使用其默克尔树属性来确保数据完整性。但通常情况下,区块链不仅仅被理解为默克尔树,这是它们与“愚蠢的内容跟踪器”Git分开的地方。例如,区块链通常还意味着在区块级别上拥有一个高度分散的系统(并非所有的区块都需要在同一个地方)。
理解区块链有点困难(就我个人而言,我还远远没有理解它的一切),但我认为理解Git内部是理解默克尔树的好方法,这肯定有助于理解区块链的基本部分。