||
引用本文请注明出处
作者:DAVID SMITH;译者:陆文婕;校译:宁莎莎
来源:https://scholarlykitchen.sspnet.org/2019/06/27/what-is-the-blockchain-really-and-should-you-care-a-guide-for-the-perplexed-scholarly-publishing-citizen/
在最近的学术出版学会(Society for Scholarly Publishing,SSP)年会上,区块链被作为一个话题提出。
坦白地说,我一直在努力弄清楚区块链到底是什么,它到底能做什么,为什么我要关注它。我想应该不是只有我一个人有这种想法。所以我写了一个指南,来简要介绍区块链是什么,为什么要关注它,什么时候应该把钱花在它身上。
当然,关于区块链实在有太多可以说的,我尝试从比较简单的部分开始阐述。也请技术人员注意,这是一份写给困惑的门外汉的指南。如果没有什么问题的话,让我们开始吧。
1. 区块链是一种数据库
从最基础的地方说起,数据库是一种以结构化的方式存储大量信息的方法。数据库中的每一字段的数据都经过分类和标记,以便检索和获取。虽然我们从这里开始说,但区块链远不止这些,它与其他数据库存储和处理技术有着一定的区别。
2. 区块链数据库以链表的形式保存数据
也就是说,基本上区块链数据库中的所有信息都是线性排序的。每个信息(或者说每个数据字段)都包含指向下一个字段的链接。Spotify的播放列表就是链式列表的一个例子。链表作为一种数据结构并不是特别特殊(尽管它们可能相当复杂),许多数据库都可以存储链表。但是,区块链数据库中的链表数据是特殊的,与其他数据系统不同,区块链数据库中的数据库只能被添加而不能被删除。
3. 区块链数据库中的数据无法被删除
区块链的基本设计原则就是只允许将数据添加到数据库中,而不允许删除或更改。因此,区块链数据库被认为是“不可变的”(unchanging),所以你最好使用它来储存适合用这种方式管理的数据。每个数据字段都经过加密。每次添加新的数据时,加密算法会将新数据与之前加密过的数据一起再次进行加密,下一个被添加的新数据亦然。
因为每次加密都是新添加数据与该数据之前所有数据的加密文件一起进行加密,所有如果要删除或更改链上的某个数据,就需要对要更改的项解密,然后对列表中的所有项重新加密。不过这只是区块链不可变的一部分原因。不管怎样,如果你预计需要对数据库中的数据做出更改,就不要选择使用区块链存储数据。
4. 区块链是分布式的
理解这一点至关重要。绝大多数数据库,无论它们采用什么技术,都包含多个副本,这是因为:
Ø 性能(在数据库中检索和获取数据的速度);
Ø 恢复能力(在诸如断电之类的故障之后重新恢复运转的能力);
Ø 不同的访问权限(可以保存一个需要权限严格受限的主本,同时在其他副本上处理数据)
对于多副本存储,我们需要搞清楚:1)副本和副本之间是如何连接的;2)如何确保它们中的数据无论何时何地都是正确的。我们把第二点称作“一致性”(consensus),该术语指的是特定数据集包含哪些内容以及该数据集的结构和标记方式的标准化。这些数据集可以是客户关系数据、内容管理系统或是研究实验数据。数据库的所有副本都应遵守一致性。
所谓的集中式数据库需要一个主数据库或“父数据库”来确保实际使用中的多个“子数据库”运转正常。只有主数据库存储的数据是“真”数据,其他的都不是。这意味着如果主数据库和其他数据库数据存在差异,以主数据库的版本为准。在集中式存储中,主数据库是可信数据的来源,并且主数据库对其自身数据的正确性和有效性执行检查(我们称之为“验证”),以确保其自身的可信性。在集中式存储之外,数据库管理还有另一种方法,那就是“分布式存储”。
5. 分布式数据库则完全不同,“真”数据没有绝对的来源
分布式数据库中的“真”数据来源于网络中所有(或足够多)参与者的持有和同意。你会看到我在这里提到了“网络”的概念。分布式网络意味着不存在主数据库,数据库之间没有父子关系。所有数据库都可以彼此直接对话,共享数据发生的变化,并接受或操作更改的内容。现在你可能已经困惑地皱起了眉头,想知道这是怎么回事。让我们来看看这些例子有什么值得注意的地方:Napster; BitTorrent; Seti@Home; The Tor network。
这些都是对等网络(P2P)的例子,它们都没有一个组织和控制的权力中心,而区块链也是包含多个对等数据库且没有权力中心。
6. 区块链数据库是一个所有参与者都可以看到其他参与者并与其通信的对等网络。
P2P技术以及存在了相当长的一段时间,并且已经十分成熟。将具有鲁棒性的P2P网络集成在一起的方法已经为人们所熟知。你可能在某个时候已经(合法地)使用过P2P网络,即时你自己也没有意识到这一点。一些读者看到这里可能会想起宾夕法尼亚州立大学(Pennsylvania State University)、麻省理工学院(MIT)和西蒙弗雷泽大学(Simon Fraser University)建立的用于交换研究信息的网站LionShare。
一般P2P网络和区块链网络的关键区别在于,在区块链网络中,所有参与者必须就他们所持有的数据达成共识。这些数据必须保持一致。在达成一致后才在网络上传播。
7. 区块链数据库存储并验证交易数据(transactional data)
区块链数据库中存储着两种数据。其一是交易数据,它并不一定是货币或等价物的交易,但必须表示一个事件。交易数据有一个时间戳、对操作对象的引用和一个值(比如,[在XX时间][为Scholarly Kitchen][写][一个重要的博客])。这就是为什么会经常听到区块链被称为分类账——因为它是交易的记录。其二是验证这些交易语句的数据。区块链系统中的验证十分有趣,因为验证必须是可计算的;需要验证的事件必须按照机器可以执行匹配操作的规则进行描述。这涉及到比较复杂的领域,因此我不打算详细阐述。
8. 区块链数据库网络在零信任环境中运行
因此,区块链网络必须由在记录交易和协议等方面具有共同利益的各方组成,因为每个参与者都会被要求验证和存储他人的交易数据(事件)。
每个参与者还将通过参与区块链网络共同监管着协议和数据交换的结果。因此,共同利益是区块链数据库发挥作用的一个关键乃至至关重要的动力。但这还不够,有着共同利益并不意味着一定能将一些歪曲数据以达到自身目的的不法之徒排除在网络之外。在分布式网络中,你不能相信其他任何人。这一点非常重要。一旦你完全信任这个系统中的某个人,就意味着你同意了接受一个权力中心,那就不能说这个网络是“分布式”的了。所以说,当“分布式”这个术语被使用时,它实际上已经确定了这个网络运行的某些基本规则。虽然实际上真正的非集权是非常难实现的。
9. 区块链中的交易被广而告之于整个网络,参与者就其达成一致,以便验证和记录这些数据,区块链上的所有参与者都必须参与这个过程的某些方面
这需要一种机制:1)激励人们积极对记录的各方交易数据达成一致;2)防止有人试图歪曲或破坏处理中的数据。
以下是这种机制的运转原理:
Ø 你与网络上的某个人进行某种交易。因为信息全是加密的,因此你们交换了验证交换所需的信息。
Ø 然后,你们俩把这个交易的消息广播到区块链网络的其他数据库(我们称之为节点)。此时,那些被告知了这一交易的节点(虽然他们并不参与这一交易),需要对这一消息做出处理和反馈。理论上,他们会像和你交易的那个人一样,同意这笔交易。这就是验证步骤。但足够多的节点都完成了验证步骤后,这一交易数据就被认为是确定的,系统中的每个人都接收到了正确的交易信息。由于这些步骤都需要一定的工作量,所以一般把交易捆绑成组(或者说我们熟悉的“块”)一起处理验证。所以我在前面所介绍的链式数据,就是由这些数据块组成的,这些块附着于分布式的链中,作为事物状态的真实表示在验证后被接受。一旦这个链上有了什么数据,那就不能撤销了。
Ø 当然,实际上有人进行了很多交易,有人则寥寥无几,所以为了达成收益各方愿意付出的努力很快就会有所不同。因此必须要有某种激励机制来让系统中的节点(至少是足够多的的节点)完成验证工作。那就是工作证明(Proof of Work)。
10. 工作证明作为一种激励机制,为区块链验证工作和共识达成的顺利进行提供动力
工作证明是保证参与者在验证过程中的诚实性的一个重要手段。没有工作证明,节点可以相互串通来肆意歪曲数据,只要它们的数量足够多,它们的数据版本就可以轻易取代正确的数据版本。工作证明的设立就是为了防止这种情况的出现。实际上工作证明可以看做是一场比赛,第一个“解决问题”并使自己的解决方案得到确认的节点将“胜出”。
“那么节点‘解决’的‘问题’又是什么呢?”你可能会想这么问。这里的“问题”指的是:将那些封装到数据块中的交易全部按规则进行验证,然后“哈希”(hash)它们。哈希是一个加密过程,它接受数据,然后把它们转换为数字或其他表现形式。这里的难点是,它不能只是随意旧散列(对于计算机来说,要做到这个是非常简单的事情),而必须是满足特定条件的特殊散列。考虑到理解难度,这里不再往深处展开了。要找到特殊散列,执行工作证明的节点必须尝试大量散列,直到找到满足条件的为止。
当某个节点第一个找到数据的特殊散列时,它会将这个消息告知区块链网络中的其他节点。然后其他节点就会检查这个散列是不是真的是满足条件的特殊散列。这个工作非常简单,不需要特别多的精力,所以不需要什么激励制度。一旦足够多的节点确认了这一点,这个数据块就会被添加到系统中,所有的节点都更新其数据版本。
这个需要大量的计算,这也是为什么工作证明十分能源耗费巨大的原因。对于这种特殊的验证方式没有什么别的方法。关键在于提供给“胜出”的节点及其所有者的奖励是使这个系统能够以分布式的方式运转的动力。人们在激励机制下努力去检查代表着交易的数据块,并将它们添加到参与者们的共识中。
那节点“胜出”之后会获得什么?答案是一定数量的货币,并且目前在区块链界这可能是唯一的答案。当然,“胜出”也可以代表某种自我价值的实现,不过这种非金钱式的激励,对于电费和硬件成本来说无济于事。
11. 如果你看到了现在,我想你应该已经明白区块链和常规数据库截然不同
首先,规则一旦达成就不能改变。在构建区块链系统之前,你就必须确定它将用来记录哪些交易的哪些信息。在区块链开始使用后,链上的数据不能更改。这与其他数据库完全不同。其他数据库的描述数据字段、数据类型标准的架构(schema)可以随着时间不断更新。区块链中的数据架构被纳入为系统提供动力的数学协议中。因此如果你发现自己需要更改规则,那么久必须建立一个新的系统,然后让参与者们决定他们要参与哪个系统版本。如果关于某组数据是否应该通过验证存在争议,你通过构建一个带有可信数据版本的新系统解决了这个问题,那么你们又会有参与者需要决定自己支持哪个版本的问题。这就是分叉问题(Forking Problem)。
其次,区块链必须有临界数量的参与者,否则不可信。由于区块链是一个P2P系统,它需要有一定的规模才能正常运转。在一个不可信的系统中,你只能相信自己的数据版本。如果有足够多的人参与到这个网络中,就可以使心怀不轨之人破坏数据的风险在数学上不可能发生。去中心化不仅仅只是一个词,它是对区块链系统提出的切实要求。实际上,在我看来,如果这项技术的应用没有通过其去中心化要求的考验,就不要考虑使用它了。
由于网络的规模和对数据进行大规模验证所需的工作量,区块链是惊人的能源密集型技术。不仅每一个验证行为的计算成本都很高(时间、金钱和精力),而且因为它是只有一个赢家的竞争,所以几乎所有的努力都是徒劳的。所有失败者都将一无所获。他们参与竞争的数据块将被破坏。信息在系统中的存储速度受前文所述数学约束的影响,即只有数据额问题解决后才能添加数据,而只有把更多的计算能力(实际上是电力)投入到这个过程中,才能更快地解决数学问题。这一机制限制了每天可以存储的数据量。但对于与节点数量规模密切相关的可信机制来说,如果数据的验证掌握在少数参与者的手里,这些就会相互信任,而失去了分布式存储的应有之义。考虑到区块链的用途,这种设计还是非常重要的。存储信息更高效、更快速的方法,应用于哪些质量和可靠性不依靠分布式存储的系统。
最后,有效的激励制度是必要的,这就是为什么目前区块链与货币紧密相关。如果你需要花费很多精力去参与区块链网络,那你肯定希望能得到一些东西作为回报。毕竟区块链消耗的能源实际上是在消耗你的钱(电费),理想的回报就是金钱。为了是区块链能在电子货币以外的情况工作,需要有一种能很容易地转换成现金或对参与者来说比现金更有价值的奖励。
12. 综上,区块链综合了数据、计算和那些有兴趣参加无信任网络的人
所有,当你考虑区块链应用于学术出版或学术交流领域的潜力时,请问自己如下问题:
Ø 谁将参加这个网络?
为什么他们会想参加(区块链对他们来说意味着什么)?
驱动这个系统成长、生存并最终繁荣的数据情况如何?
为什么选择使用分布式存储?
如果你能清楚地回答以上问题,那么我想你应该已经为构建规模足够大的网络做好了准备,并且愿意通过数学和算法使这个网络运行起来,到这个程度基本上你已经搞定了一个区块链。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-12-23 05:55
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社