Pae*_*els 150 git hash blockchain
Git的内部数据结构是一个数据对象树,其中每个对象只指向其前身.每个数据块都经过哈希处理.当保存的哈希与实际哈希偏离时,将注意到修改(位错误或攻击)中间块.
这个概念与区块链有何不同?
Git未列为块链的示例,但至少在摘要中,两种数据结构描述看起来都相似:数据块,单向反向链接,哈希,......).
那么差异在哪里,Git不被称为区块链?
pok*_*oke 110
Git和区块链看起来相似的原因是因为它们都使用merkle树作为其底层数据结构.merkle树是一棵树,其中每个节点都标有其内容的加密哈希值,其中包括其子项的标签.
Git的有向非循环图正好是一个merkle树,其中每个节点(标记,提交,树或blob对象)都标有其内容的散列和其"子"的标签.请注意,对于提交,"子"术语与Git对父母的理解有点冲突:父提交是提交的子项,您只需要将图形视为通过重新生成它而不断增长的树.
区块链与此非常相似,因为它们也以这种方式不断增长,并且它们还使用其merkle树属性来确保数据完整性.但通常情况下,区块链被理解为不仅仅是merkle树,而是它们与"愚蠢的内容跟踪器"Git分离的地方.例如,区块链通常也意味着在块级别上具有高度分散的系统(并非所有块都需要在同一位置).
理解区块链有点困难(个人而言,我还远远不了解它的一切),但我认为理解Git内部结构是理解merkle树的一种好方法,这肯定有助于理解区块链的基本部分.
hou*_*anb 43
git
区域链技术不是一个例子,原因有几个(这是第一个想到的):
在区块链实现中,每个块在被添加到区块链之前多次独立验证.这确实是区块链技术最重要的事情之一,也是确保其"不可攻击性"的原因之一.另一方面,许多git
项目不需要独立验证,并且当它们执行时,它们仅需要一个人在将更改提交到存储库之前签署.因此,您必须信任至多一个验证点,这git
打破了区块链技术的核心原则之一.
一个git
仓库不一定复制在许多服务器上.您可以git
在本地从存储库工作,如果您的本地磁盘已损坏,您将丢失所有内容.区块链技术意味着跨服务器再现分类帐.
你可以重写git
历史.将git push <remote> <branch> --force
where <branch>
设置为先前的状态,而不是<remote>
重写历史的状态.在区块链中,分类帐是不可变的历史记录.
Lum*_*umi 28
问题是:为什么 Git 不被视为“区块链”?因此,这是断言存在广泛的观点,即 Git 不是区块链(这一断言在本页之前的答案中得到了说明和证实),并询问了这种观点盛行的原因。这是一个很好的问题。
从字面上看这个问题,答案可能是区块链术语和概念作为称为“比特币”的数字货币操作的一部分而变得流行,因此与比特币的工作方式相关联:这是通过使用大量计算能力计算特定的哈希值,包括随机数以满足某些任意要求,据称没有中央权威,这是“独立”的,甚至可能是“民主的”,以及其余的库尔援助;由于这些东西在 Git 中看不到,所以 Git 不可能是区块链,对吧?所以这个问题会从字面上得到回答。
隐藏在这个初步问题背后的是另一个问题:什么是区块链?现在你可以在某个地方查找一个定义并将其复制到这里,但我没有这样做,因为我几年前就下定决心了,当时我在听一个关于比特币的播客,该播客试图解释区块链的新概念,区块链就像 Git 一样工作,我不打算让我宝贵的理解被互联网上的随机声明误导。
那么什么是区块链?这句话是什么意思?
术语“区块链”中的任何内容都没有预先假定要求在内容中包含一个随机数,以便得出由许多前导零组成的散列。(这个要求只是为了能够通过计算能力来控制区块链,最终通过金钱来控制。)
“区块链”一词中没有任何内容以网络的存在为前提,更不用说去中心化的网络了。
“区块链”一词中的任何内容均不以任何“独立于”“中央权威”为前提。
术语“区块链”仅以链接在一起的(数据)块为前提。现在什么是链?它只是一个链接吗?不,它是一个强大的链接,旨在通过武力将事物联系在一起。
一个简单的链表不符合区块链的条件,因为列表中数据块的内容可能会被更改,而列表将继续来回链接就好了。这不是链条的工作方式。
要将数据块的链接变成数据块链,需要以某种方式对块的内容进行校验和(摘要),并且该校验和(摘要)必须是链接的一部分,使其成为一个强大的链接。链接保护内容,防止其被更改。这是一个区块链。
这就是 Git 所做的,因此 Git 是一个区块链,或者如果您愿意,可以作为一个区块链工作。
闭上圈,让我们再问一次:为什么 Git 不被认为是“区块链”?这可能是因为很多人,甚至可能是绝大多数人,并不关注概念的本质,而是关注眨眼事故。
小智 19
像比特币这样的网络货币,使用分布式共识密码链块(merkle树).常见用法已将此缩短为"区块链"
虽然git使用了一系列块(merkle树),但它缺乏分布式共识密码组件,这些组件常用于"BlockChain"一词.
Mig*_*ota 16
与加密货币区块链不同; git没有p2p无信任共识机制.
Dan*_*nov 15
Blockchain
是不是随便一个块的任何链.
Blockchain
当两个或多个被转移时,当有一种方法确定主链时,并且当该确定不需要中央权限时.
Tin*_*ino 14
总结一下(对我来说):
虽然 Git 为您提供了完全的选择自由,但区块链是一个高度政治化的系统,您被迫信任他人:
Git 是一个没有预定义共识算法的 Merkle Tree。
区块链是具有预定义共识算法的默克尔树。
因此,如果你独自一人,Git 和区块链之间没有区别。当您信任 Git 和您自己时,您就已经达成了预定义的共识。
但当你处于网络中时,事情开始变得不同。
笔记:
对于区块链来说,绝对不需要哈希值难以计算或定义“挖矿”之类的东西,或者拥有一些特定的软件来确保您参与某个网络。
这一切可能是比特币(通常被称为加密货币,我不能完全同意)之类的东西的要求,但比特币既没有定义什么是区块链,区块链也不需要像比特币那样。
共识算法不一定是基于某种加密协议的算法。例如,每天在当地报纸上发布您的 TIP(滥用)Git 作为某种区块链就足够了。
Git 很容易提供多种可能的共识算法供您选择:
在报纸或类似报纸上发布 SHA(分布式且难以伪造)
如果您处于极少数情况下,您已经是某个 GnuPG Web Of Trust 的一部分,那么您可以轻松地使用签名提交(或签名标签)来同意共识。
“Signed off:”变体不提供加密安全共识,但与Gerrit和 Fast-Forward-Only 之类的东西结合起来,它是一些定义明确的共识算法。
因此,要让 Git 成为区块链,你所需要的只是添加一些空气。
一些不同的看法:
Git 本身并不是区块链。相比之下,它远小于区块链(缺乏预定义的共识算法),也远大于区块链(允许选择过多的共识算法,相当于 SCM 等)。
其他一些观察结果:
Git 分支与区块链分裂相同。虽然区块链分裂很少发生,但大多数 Git 存储库的分支 ( master
+ HEAD
)少于比特币的分裂。
Git 总是有一个由你完成的明确共识,即你推送的 TIP。然而这仅适用于你而不适用于其他人。
将 Git 存储库推送到某个共享的 Git 服务也可以视为共识。这种共识不需要以民主原则为基础。
非常个人的想法:
虽然区块链是一个被过度炒作的流行词,没有它也可以快乐地生活,但 Git 是完成工作不可避免的基本工具,是你离不开的基本必备工具之一,就像空气和水一样重要。这可能就是为什么像我这样的人不将 Git 称为区块链的原因。
青年MMV
正如波克所说:
Git 和区块链看起来很相似,因为它们都使用默克尔树来存储有序的带时间戳的交易。Merkle 树是一种树形数据结构,其中每个节点都标有其内容的加密哈希值,其中包括其子节点的标签。
第一个区别是哈希函数:区块链有一个非常昂贵的哈希函数,因此每个块都必须被挖掘,而 Git“块”可以通过简单的提交消息创建。
比特币的目的是增加交易秩序的信任。重点是最长的链,因为它的计算成本最高,因此最有可能是事实。
比特币通过要求散列满足某些参数(以特定数量的 0 开头)来实现这一点,通过增加消息中的值(“随机数”)直到找到满意的散列。这需要花费精力才能找到,但只需 1 次计算即可验证随机数;如果多个随机数产生令人满意的散列,则其中一个将较低并被视为真相。其他身份验证方案通过将哈希值集中发布给权威机构(可能通过网络协议或某种其他方法投票)来使哈希值变得可信。
区块链数据仅限于交易,交易必须符合验证。交易必须有效才能包含在下一个区块中。比特币交易对应于现实世界中一些重要的事情,证明使用昂贵的区块来记录这种转移是合理的,例如货币价值的交换。我们实际上并不关心最终的账本,它只是现实世界中某些事物的隐喻。
相比之下,Git 块是任意的,因为提交可以包含任意数量的数据。价值在于将数据的变化组织到 git 树中,因为我们关心的是最终产品,它是通过 git 存储库的存在来验证的。
Git 的目的是让廉价的“账本”能够跟踪多种产品替代品。Git 中的“账本”是我们关心的,它是我们的最终产品;交易数据仅记录产品是如何构建的。我们希望以非常低的成本来制作最终产品的多个版本,只需足够的开销来要求创建者记录他们如何构建此产品。不对数据进行显式验证,如果最终产品看起来不错,则可以对其进行维护,并且这种存在使得拥有该产品的创建链非常有用。如果最终产品不好或提交顺序无效,则该“分类帐”将在垃圾收集期间被删除。
第二个区别是区块链交易必须来自先前的有效来源。在 Git 中,我们不关心你使用什么数据来扩展树。在区块链中,交易必须来自先前的有效来源。从这个意义上说,Git 跟踪我们环境的扩展,而区块链则跟踪封闭环境内的价值交换。
区块链和 git 的目标不同,尽管两者都使用默克尔树作为数据结构。
\n\nAblockchain
通常由遵守节点间通信协议并验证新块的对等网络进行管理。一旦记录,任何给定区块中的数据都无法在不更改所有后续区块的情况下进行追溯更改,这需要网络多数人的共识。
根据比特币白皮书:
\n\n\n\n\n纯粹的点对点版本的电子现金将允许在线支付直接从一方发送到另一方,而无需通过金融机构。数字签名提供了解决方案的一部分,但如果仍需要受信任的第三方来防止双重支出,则主要优势就会丧失。我们提出了一种使用点对点网络来解决双重支出问题的解决方案。网络通过将交易散列到持续的基于散列的工作证明链中来为交易添加时间戳,形成一条在不重做工作证明的情况下无法更改的记录。最长的链不仅可以作为所见证事件序列的证明,而且还可以证明它来自最大的 CPU 算力池。只要大部分 CPU 能力由不合作攻击网络的节点控制,它们就会生成最长的链并超过攻击者。网络本身需要最少的结构。消息在尽力而为的基础上广播,节点可以随意离开和重新加入网络,接受最长的工作量证明链作为它们离开时发生的情况的证明
\n
尽管Git
是一个分布式版本控制系统,用于在软件开发过程中跟踪源代码的更改。它是为协调程序员之间的工作而设计的,但它也可用于跟踪任何文件集中的更改。其目标包括速度、数据完整性以及对分布式非线性工作流程的支持。
正如莱纳斯·托瓦兹所说:
\n\n\n\n在很多方面,你都可以将 git 视为一个文件系统 \xe2\x80\x93,它是内容可寻址的,并且具有版本控制的概念,但我确实是从文件系统的角度来解决这个问题的。 n 人(嘿,内核就是我所做的),而且我实际上对创建传统 SCM 系统的兴趣绝对为零。
\n
没有理由不将 Git 视为区块链。Git 专注于一组非常特殊(且重要)的资产:源代码。这种情况下的共识是手动的,我们可以认为一个交易(提交)在合并到发布分支时被接受。实际上,考虑到交易(提交)的数量,Git 是迄今为止最成功的区块链。
摘自:https : //arxiv.org/pdf/1803.00892.pdf “……我们定义“区块链”和“区块链网络”,然后讨论两种截然不同的、众所周知的区块链网络类别:加密货币和Git 存储库...”
另请参阅下一篇论文,该论文解释了为什么 Google 使用单个 monorepo 作为单一事实来源(基本上,作为区块链)。 https://research.google/pubs/pub45424/