区块链的用途是实现保持去中心化系统
● 软件系统的架构决定了其中的节点计算机如何被组织,以及如何与其他计算机连接。
● 中心化和去中心化的软件系统可以看作系统架构的南北极。
● 分布式系统由许多独立的计算机组成,它们通过使用通信介质相互协作,以实现特定的目标,且没有任何计算机能控制整个系统。
● 根据经验,可以指出只要有一个单一的组件可能导致整个系统崩溃,那么不管系统的架构多么复杂,它都不是去中心化的。
● 区块链是去中心化软件系统实现层的一部分。
● 区块链的意义在于确保去中心化软件系统中一个特殊的非功能性特征:实现并维护系统的完备性。
点对点系统相对于中心化系统的优势在于其直接在交易双方之间进行交互,而不通过中间人,因此处理时间更短,成本也更低。
点对点系统的优势并不限于转账,几乎所有虚拟商品和服务的生产者和客户之间的中间商都易受到点对点系统的替代。随着数字化的发展,将会出现越来越多虚拟化的商品和服务,它们都将受益于点对点系统效率的提升。点对点系统的倡导者认为,我们生活的各个方面几乎都将受到数字化技术和点对点系统的影响,如支付、储蓄、贷款、保险、出生证明、驾驶证、护照、身份证、教育证书、专利和劳动合同。它们中的大多数已经以数字化的形式存在于夹在提供者和消费者之间的机构的中心化系统中了。
去除中间人也被称为“脱媒现象”,其对很多商业公司来说构成了严重的威胁。因为这些公司存在的基础是能在不同人群之间成为主要的中介,例如在买家和卖家、借贷者和放贷者或生产者和消费者之间。
点对点系统是由若干节点(个人计算机)组成的分布式软件系统,系统中单一节点的计算资源(例如CPU处理能力、存储容量)可直接被其他节点调用。当加入点对点系统时,用户按照其权限和角色将其计算机转换为系统的节点。尽管用户对系统贡献的资源可能有所不同,但系统中的所有节点具有相同的功能和责任。因此,所有用户的计算机都是资源的供应者和消费者。
例如,在点对点文件共享系统中,各个文件均存储在各个用户的计算机上。当有人想在这样的系统中下载文件时,他直接从另一个人的计算机上下载即可,这个人可能是隔壁的邻居或世界上任何的其他人。
点对点系统的架构
点对点系统是分布式计算机系统,它们由共享计算资源的各个节点组成。然而,还有一些仍然利用中心化设计思想的点对点系统。中心化系统通过维护中心节点以促进系统成员之间的交互,同时维护描述不同节点提供的服务目录,或执行节点的查找和标识等任务。中心化点对点系统通常使用图2-2左侧所示的混合架构,这种架构集合了中心化系统和去中心化系统的优点。另一方面,完全分布式的点对点系统没有中央节点进行控制或协调,因而系统中的所有节点都执行相同的任务,既作为资源和服务的提供者,也同样是消费者。
中心化点对点系统的一个例子是Napster,它维护着与系统连接的所有节点上可用歌曲的中央数据库。
点对点系统和区块链之间的关系
所述,区块链可被认为是实现和维护分布式系统完备性的工具。完全分布式的点对点系统可使用区块链技术来实现和维护系统的完备性。
区块链的潜力
完全去中心化点对点系统和区块链之间的联系是,后者为前者提供了实现并维护完备性的工具。完全去中心化的点对点系统具有极大的商业潜力,因为它们可以取代中心化系统下靠信息中介建立起来的商业模式。既然完全去中心化点对点系统可以使用区块链来实现并维护完备性,区块链就变得非常重要了。而真正主要的原因是,当我们为去中心化的产业模式感到无比兴奋的时候,会发现区块链是能够帮助我们实现目标的唯一手段。
因为它们在软件系统中的应用与在其他地方的应用有些不同。
● 身份认证。
● 鉴定。
● 授权。
三者的含义和相互关系,可以通过现实世界中的例子来加以说明。打个比方,你准备去超市买一瓶红酒,而超市不允许向未成年人出售含酒精饮料。那么超市如何确定他们只向正确的人群出售了酒呢?他们通过身份认证、鉴定以及授权这3个步骤来实现。接下来我们会做进一步的介绍。
身份认证
身份认证指的是通过提供可以作为标识符的相关信息来确认使用者的身份。在买酒的例子中,你可以提供一个身份证,但是身份认证并无法证明你就是你说的这个人,也无法证明你已经成年,身份认证只是意味着申明你是某一个人。
鉴定
鉴定的目的是为了阻止有人冒充他人。鉴定就意味着要核实你的确是你声称的这个人。这个鉴定过程可以通过提供一些能证明你身份信息的事物来进行,比如身份证或驾驶证。在这个过程中很重要的一点是,你所提供的对你身份的证明信息必须具备一些和你相关的独一无的东西,如照片、指纹等。在买酒的例子中,可以出示包含了你照片的驾驶证,通过比对你和驾驶证上的照片可以完成鉴定工作。对驾驶证上照片的检查是为了防止出现驾驶证被盗用的情况。
授权
授权意味着根据对应人的身份特征准许其访问特定资源或使用特定服务。授权产生于一次成功的鉴定,以及对其所拥有权利的准确评估。在买酒的例子中,授权意味着在检查过你驾驶证上的出生日期之后,允许你购买酒。如果你的年龄过小,店员有权拒绝向你提供酒。注意在这个例子中,发生拒绝出售酒的情况并不是因为鉴定失败,此时身份认证与鉴定都已成功完成,只是因为在授权过程中店员发现你年龄过小才未进行授权。因此,授权通常意味着要将鉴定后的结果与一些规则进行比对评估。
█ 备注: 身份认证指的是确认使用者的身份。鉴定指的是证明你确实是你所声称的这个人。授权指的是让你根据之前的身份鉴定能访问特定的资源或得到特定的服务。
账本的性质与意义
所有权的证明和变更与账本功能之间的关系
一个账本必须同时履行两种相对的功能。一方面能够通过读取账本中的数据来证明所有权,另一方面账本需要记录每一次所有权的转移,也就意味着新的数据需要被写入账本。这两个功能最重要的不同可以归结为公开与隐私的不同。
当账本对每个人开放时,证明所属权就比较容易了。因此,公开是证明所属权的基础,好比在法庭上证人进行公开的指证。但是,所属权的转让应该专门限定开放给合法的转让对象(所有者),因此隐私是所有权变更的基础。向账本写入数据意味着更改所有权,因此我们只希望绝对可信的实体,才能够具有对账本进行写入数据的操作权限。
隐私和公开,证明所属权和转移所属权,以及读取账本和写入账本这3类矛盾同样可以在区块链中找到,于是我们在这里指出:区块链是一个能够被任何人访问,拥有类似账本功能的巨大去中心化点对点系统,也可将它理解为一个去中心化的账本。
所有权与区块链
以政府出具的证明文件作为见证的形式,是很多高价值事物确定所有权的关键。但当政府保存的信息被破坏或销毁时,会发生什么呢?或者说,有人故意在更新账本信息时犯了错误或干脆未对证明信息进行更新又会发生什么呢?一旦发生这种情况,政府出具的证明信息将无法反映真实情况。
只拥有一个账本用来证明所有权所带来的问题,可以采用让法庭审判的方式来解决。只依靠一个证人的证词来下定论,需要面对证人可能不诚实的风险,那么更多的证人显然是更好的。越多的独立证人参与进来,他们证词中的主要一致部分为真的可能性就越大。这也可以通过大数定理或统计学知识进行证明,而在这个过程中,接近并找到真相的关键在于拥有大量相互独立的证人,并确保这些证人各自独立且相互之间没有影响。
将这一点延伸到账本中用作对所有权的证明,是非常简单将这一点延伸到账本中用作对所有权的证明,是非常简单易懂的:抛弃只拥有并维护一个账本的想法,我们应该构建一个完全去中心化的账本系统,而在这个系统中所有权的证明需要通过绝大多数的节点同意才能完成。
说到这里,你可能会感到奇怪,这些和区块链有什么关系呢?通过账本和区块链来进行所有权管理之间的联系可以总结为以下5点。
● 单个账本可以用来记录与所有权相关的信息,可以看作一份区块链中存储与所有权相关数据的账本。
● 单个账本存储在一个点对点系统中的节点上。
● 区块链算法确保了单个节点在每一次投票之后,能够同步到同一个状态。
● 系统的完备性是系统具备提供真实且正确所有权描述的关键。
● 在身份认证、鉴定、授权以及确保数据安全性时,必须采用密码学技术
● 所有权证明需要3个要素。
▶ 对所有者的证明。
▶ 对事物被拥有的证明。
▶ 提供一个所有者和事物之间的连接。
● 可以使用身份证、出生证明和驾驶证来识别所有者。可以使用序列号、生产日期、生产证书或详细的对象描述来识别特定的商品。
● 所有者和物品之间的关系可以保留在账本中,与法庭中的证人起着相同的作用。
● 只有一个账本是有风险的,因为它可能被损坏,或伪造。在这种情况下,账本不再是证明所有权值得信赖的信息来源。可以利用一组独立的账本而不是仅使用一个中央账本来记录所有权,并使用大多数账本都认可的结果来对所有权进行证明。
● 可以通过使用区块链数据结构来创建基于完全去中心化系统的账本。每个节点上的区块链数据表示一个账本,并由运行该节点的计算机来维护。区块链算法负责让各个节点账本内的所有权状态同步到一个一致的版本。
● 完全去中心化点对点账本系统的完备性,是其进行正确的所有权证明并确保只有合法所有人才能够进行资产转移的坚实基础。
双花问题
假设已有了一个管理真实财产所有权的点对点系统。我们通过系统中的独立计算机节点,而不是中性化的数据库来对包含所有权信息的账本进行更新,每一个节点都有一份对这个账本的备份。一旦账本中一间房屋的所有权从一个人转移到另一个人,整个系统上的所有账本都需要进行同步,以保证更新到最新的状态。然而,在节点之间传递信息并更新各节点上的账本都需要时间,直到系统的最后一个节点收到最新的信息,并且完成对自己账本的更新之后,系统才可达到一个稳定的状态。也就是说,有的节点会比其他的节点更早得知最新一次所有权转移的信息,而这就给那些提前获取账本更新信息的节点留下了一个利用这一信息来作恶的机会。
让我们设想一个下面的情景:A将房屋卖给B,房屋从A到B的所有权变更会被记录在去中心化点对点系统的一个账本中,维护这个账本的节点需要将这条信息告知它所知道的其他所有的节点,并进一步通过这些节点让这条信息扩散出去,直到所有节点都知道从A到B的房屋所有权变更为止。但是,这时A迅速访问了存有另一个账本的节点,并且将他刚转让给B的房屋的所有权在这个账本中记录为转让给C。如果发生这件事的时候这个节点还没有得知A已经将房屋的所有权转让给了B,该节点就会记录下A将房屋的所有权转让给了C,并为此次转让提供证明。此时就意味着A利用去中心化系统中同步信息需要时间这个潜在漏洞,将自己的房屋出售了两次,而事实上B和C是不能够同时拥有房屋的,他们之中只有一人能够成为房屋新的合法拥有者。A的所作所为导致的问题,我们称之为双花问题。
术语
和“区块链”术语类似,“双花”也有以下3种含义。
● 复制数字商品引起的问题。
● 去中心化的点对点分布式账本中可能存在的问题。
● 完全分布式点对点系统中违反完备性的一个例子。
复制数字商品引起的问题
在复制数字商品时,双花问题指的是一台计算机上的数据可以不受限制地进行复制,这使得本该同一时间只有一个所有者的“加密货币”或其他数据出现多个所有者的问题。通过复制代表了“加密货币”的数据片段,同一笔“加密货币”被同时多次使用成为可能,此类行为类似用印刷机不断仿制银行票据。因为在技术上是可实现的,复制“加密货币”这一行为会伤害“货币”的核心原则:同一笔钱在同一个时间不能给予两个不同的人。复制“加密货币”,并且将其同时多次消费的能力使得“加密货币”变得无效且没有价值,这也就是我们所说的双花问题。
去中心化的点对点分布式账本中可能存在的问题
当我们用“双花”表述去中心化的点对点分布式账本中可能存在的问题时,它指出了一个事实:将信息同步到整个去中心化系统上需要花费时间,这导致了在同一个时间并不是所有的节点上都记录了完全一致的所有权信息。因为,不是所有节点都拥有最新的信息,同步信息慢的节点就可能会被其他拥有最新信息的节点所利用,导致在这个系统中出现同一个所有权在同一时间内的多次转移,即发生“双花”问题。
分布式点对点系统中违反完备性带来的双花问题
去中心化的点对点系统并不局限在管理所有权这一个应用场景中,但是无论在什么场景中,节点之间花费时间同步信息更新数据所带来的潜在问题始终存在,这和具体的应用场景无关。
因此,双花问题可以看作去中心化点对点系统中数据一致性的问题。因为数据的一致性是系统完备性的重要组成部分,故而我们可以说双花问题是影响系统完备性的具体例子。
如何解决双花问题
因为“双花”在不同情境下的含义不同,所以并没有单一的方法可以避免双花的发生。作为替代,我们可以提出很多不同的解决方案,接下来会列举一些。解决复制数字商品引起的双花问题
因为“加密货币”或其他数字资产的可复制性,所带来的双花问题事实上和所有权的特性有关。如果不限定实现方法的话,任何可接受的将数字商品映射到其所有者的方法都可解决这个问题。即使是一本纸制的中央账本或电子账本,不管它的系统结构如何,都可以确保“加密货币”同一时间只能够被花费一次,从而确保账本始终正确工作。
解决去中心化的点对点分布式账本中潜在的双花问题
在这种使用场景下,系统架构和应用领域是确定了的。去中心化的点对点分布式账本经常被认为是源于区块链的经典案例,我们在上一讲中所作的阐述,强调了区块链和去中心化的点对点分布式账本之间的关系。而按照本书中对“区块链”这一术语的定义,“区块链”就可以看作去中心化的点对点分布式账本中潜在双花问题的解决方案。
解决分布式点对点系统中违反完备性的双花问题
在这种情景下,我们能够确定系统架构,但是应用领域不一定是确定的。因此,对于这个层面上的双花问题,我们应关注在实现并且确保去中心化点对点系统的完备性上,而不去关注系统具体的用途。然而一个去中心化点对点系统的用途会带来其对应的“完备性”的定义,比如我们比较一个简单的文件共享应用,和一个对数字资产所有权进行管理的应用,两者对完备性特征会有不同需求。因此,如果在不明确应用的特殊要求和目标的情况下,我们无法回答区块链相关技术是否是实现并确保系统完备性的正确工具,这也就意味着可能在其他一些去中心化的点对点系统应用场景下,其他的诸如通过设计数据结构和特殊算法等方法,更适合用来实现并确保系统的完备性。
对于去中心化点对点分布式账本中潜在的双花问题而言,区块链技术是解决该问题的一个合适的工具。
● 双花这个术语有多种含义,在不同语境下具有不同的含义。
● 双花可以指代:
▶ 复制数字资产引起的问题。
▶ 在去中心化点对点系统中可能存在的问题。
▶ 威胁去中心化点对点系统的一个例子。
● 双花用来指代对完全去中心化点对点账本系统的一个实际威胁。
● 区块链技术是一种解决双花问题的手段。
区块链节点如何处理交易数据和新的区块。然而,区块链系统的个体节点所维护的历史交易记录,可能会因为信息传送延迟或错误而有所不同。
所有网络节点之间,如何维护一个明确的历史交易记录,这样在澄清所有权请求时,无论请求哪一个节点,都会得到相同的结果。
区块链算法要求系统的所有节点必须完成两个部分的工作。在任何给定的时间点,系统的每个节点都在检查一个新的区块(它是由另一个节点或努力成为下一个创建新区块的节点创建的)。虽然这个区块随后必须由所有其他节点来检查,但是系统并没有规定在任何给定的时间内必须完成这两种工作中的哪一种。单个节点收到的新区块更像是控制任何特定节点所做工作的“指挥棒”。然而,新区块的到达时间会受到网络信息传输能力的影响。网络本身也是有其自身缺陷的,这些信息在传输过程中可能会丢失、延迟,或者出现到达节点的顺序颠倒等情况。因此,网络中的节点在同一时间收到的信息可能不同。此外,两种工作之间的切换不会在所有节点上同时发生。相反,每个节点会根据消息到达节点的时间来控制两种工作之间的切换。这将导致单个节点间的工作状态相互重叠。因此,我们面临的挑战是找到一种确定一个明确的历史交易记录的方法,而不至于重新使用一种中心化的解决方案。
解决方案
公园小径这个例子表明,一群人可以在需要集体决策问题中,通过独立和持续地投票来达成共识。这种投票的结果通常被称为“分布式共识”,因为它是在没有一种中央控制或协调因素存在的独立行动个体之间达成的。
█ 注意: 共识指独立个体之间达成统一的协议。分布式共识是完全分布式点对点系统中成员之间达成的一种协议。
一群独立行动的个体,集体解决问题的情形可以用下列条件来描述。
1.一群个体在相同的环境下工作。
2.存在一个需集体决策的问题。
3.个体独立地努力实现一个相同的目标。
4.为实现目标而采取的个人行动,在环境中会留下明显的痕迹,这个痕迹有助于解决需集体决策的问题。
5.个体使用相同的标准来评估基于环境变化所带来的问题。
区块链的设计思路是让所有节点都能独立地参与投票,从而就选择哪一个版本的历史交易记录达成一个集体共识。区块链完成集体决策需要4个前提条件。
1.所有节点都在相同的网路环境中运行,这些节点维护各自的账本,以及控制节点行为的区块链算法。
2.对一个历史交易记录进行集体选择。
3.所有节点都努力向账本中添加新的有效区块以获取奖励,从而将自身的收入最大化。
4.为了实现目标,节点会向其他节点发送它们发现的新区块,并让它们检查这一新区块。因此,网络中的每个节点都会参与到维护一个统一账本的工作当中。
然而,还缺失第5个要点:一种可以让所有节点根据环境的变化做出决策的标准。这个如何选择历史交易记录的标准,应基于如何将新区块添加到区块
链数据结构当中,并保护数据不受节点操作的影响。由于采用工作量证明,故添加一个新区块的计算成本是昂贵的,并且会使得试图操纵历史交易记录的尝试付出更加昂贵的成本。因此,当存在不止一种有冲突的历史交易记录版本时,花费在创建历史交易记录上的累计计算成本似乎是选择历史交易记录的自然标准。如果系统中的所有节点都应用相同的标准来选择历史交易记录,那么系统的所有节点最终会在同一版本的历史交易记录上达成一致。集体选择哪个版本的历史交易记录的过程通常被称为达成共识的过程。
具体操作
这种根据创建交易所需的计算量来选择历史交易记录的设想,导致了以下两个标准的出现。
● 最长链标准。
● 最重链标准。
最长链标准
最长链标准是基于包含最多区块的区块链代表付出最多计算量的设想。为了研究这一标准,让我们来看一种初始情况,即分布式系统的所有节点维护同一条链的情况,如图19-1所示。出于简化的目的,图中提供了一条省略了许多细节的链。图中每个框表示一个区块,并且每个区块都通过一个缩短的哈希值来标识。从一个框指向另一个框的箭头表示将区块头连接到其前一个区块的哈希引用。在这种初始情况下,所有节点都同意交易数据的这一历史记录,并努力使用另一个新的区块对现有链条进行扩展。
每个区块头必须满足以下规则。
1.它必须包含对前一个区块的有效哈希引用。
2.必须包含有效交易数据的默克尔树的根。
3.必须包含正确的哈希难度等级。
4.其时间戳需在之前区块头标记的时间戳之后。
5.必须包含一个随机数。
6.上述5个数据组合在一起计算出的哈希值满足难度等级。
验证规则确保只有付出计算成本解决了哈希难题后,才能将新区块添加到区块链数据结构当中。规则4确保了区块中的交易数据确实是按照添加的时间先后来排序的。
█ 注意: 通过解决哈希难题,向区块链数据结构中添加新区块的活动,也被称作挖矿。
工作原理
区块链数据结构使得任何人对数据的任何修改都将无所遁形。任何对区块链上数据的修改都需要极高的成本。哈希难题是导致在修改数据过程中需要付出极高成本的原因。在修改数据的过程中重写区块链数据结构的累积成本就让修改数据变得不再那么有吸引力。因此,区块链数据结构就成了一个极难修改、仅可添加新区块的数据存储结构。
修改区块链的成本
假设我们要尝试修改默克尔树中一部分特定的交易数据,而该默克尔树的根位于当前区块以前20个区块的区块头中。修改交易数据就需要进行以下工作。
1.重写修改后的交易数据所属的默克尔树。
2.重写被重写的默克尔树的根所属的区块头。
3.重写所有后续的区块头,一直到区块链数据结构的末端。
第2点需要解决哈希难题,因为更改默克尔树的根会更改区块头的哈希值,从而改变其哈希难题的解。由于对前一个区块头的哈希引用的连续更改,第3点就要求解决20个哈希难题。假设解决一个哈希难题平均需要花费10分钟的时间,我们共计需要210分钟才能在位于当前区块头20个区块以前的区块中修改数据。
现实世界中不可变数据的存储
区块链数据结构的不可变性,取决于哈希难题带来的计算成本。哈希难题的难度等级又决定了需要多少算力,以及多少时间来解决它们,相应地就决定了区块链数据结构的不可变性。如果难度太低,更改区块链数据的计算成本就会下降,并且可能不会再被认为其成本高得让人望而却步,反过来就有可能鼓励人们修改交易数据的历史记录。另一方面,如果难度太高,即使是添加新区块的计算成本也会极高,这就阻碍了节点增添新交易数据的积极性。你设计一条区块链时所面临的挑战就在于,确定恰当的哈希难题的难度等级。由于技术进步,计算机的计算能力也在发生变化,这会让难度等级的设计变得更加复杂。因此,可能需要以一种动态的方式来确定难度等级。
现实世界中的区块链很少会对所有区块应用一种不变的难度等级。相反,它们通常会根据增加新区块的速度来动态地确定难度等级。这就确保了解决哈希难题所需的时间保持在一个防止节点修改历史交易记录的水平。
区块链将交易数据存储在一个对修改敏感的数据结构中,从而保护历史交易记录免受操纵及伪造。
● 通过以下两个方法确保历史交易记录的不可变性。
▶ 将交易数据存储在对修改极为敏感的区块链数据结构中,当发生修改时就要从引发修改的点开始依次重写区块数据,一直到整条链的末端。
▶ 哈希难题对每个区块头都是唯一的,这取决于其独特的内容。
● 当区块链上的数据发生变化时,就需要重写发生变化之后的所有区块,而这样做的成本会使得修改历史交易记录变得不那么有吸引力。
● 在区块链数据结构中,区块头的每次写入或重写都需要解决哈希难题,这就使区块链数据结构成为一个仅可添加新数据的结构。
● 区块头至少包含以下数据:
▶ 前一个区块头的哈希引用。
▶ 包含交易数据的默克尔树的根。
▶ 哈希难题的难度等级。
▶ 开始解决哈希难题的时间。
▶ 解决哈希难题的随机数。
诚信和信任的建立都是有成本的
关于区块链如何处理新的交易数据,以及系统节点如何在真正的历史交易记录上达成一致的讨论,揭示了哈希难题的重要性。解决哈希难题在实现和维护系统完备性方面起到了重要作用。但解决哈希难题消耗了计算资源,从而需要付出成本。出于这个原因,有必要对那些为维护系统完备性而做出贡献的节点进行补偿。然而,在整个讨论中,已经假定节点以某种方式获得了补偿,并没有提补偿的发放是使用哪种支付方式。因此,本讲将专注于介绍如何补偿节点对维护系统完备性所做出的贡献。
让我们假设你是一家面包店的老板。有一天,你想出了一个关于如何改善生意的好主意。你意识到钱是稀缺的,但面包店总是有面包在出售,而且在大多数工作日结束时,还有大量的面包被剩下。因此,你决定用面包支付员工的薪水,而不是付钱给他们。这将有两个好处:节省你的钱,避免扔掉剩下的面包。你的员工对这个想法并不感兴趣,但很快其他公司就会模仿你,最后所有公司都开始采用相同的方法:汽车制造商向员工支付汽车作为工资,建筑公司向员工支付房屋作为工资,等等。有一天,你的朋友们抱怨他们不切实际的工资支付方式,但你注意到其中一个朋友的工资仍是以现金形式支付的。你认为这个朋友会在哪家公司或机构工作?事实证明,他在一家中央银行工作,而中央银行恰好是一个货币的提供者!
这个例子说明了我们通过完成工作创造的商品和得到的作为工资的商品之间的依赖关系。本讲指出了在区块链中的这种依赖关系。事实证明,在某些情况下,区块链可用它生产的代币来支付矿工的工资。但在讨论这个特殊的案例之前,先让我们更详细地回顾一下手续费的作用,以及在区块链中进行补偿支付的重要性。
区块链中手续费所起到的作用
强调了区块链利用胡萝卜加大棒的方法,让组成系统的节点相互进行验证。奖励和惩罚作为两种使系统中的节点能够有序验证交易的力量,可使节点选出聚集最多计算量的权威链。奖励和惩罚是通过交易手续费和区块奖励来实现的。这种机制在所有区块链中都是通用的,不管它们的具体应用场景是什么。然而,在各种区块链的具体应用中,对用于补偿系统维护者的具体支付工具的选择并不相同。如何定义和使用一种给予节点验证和添加新区块奖励的支付工具,被认为是建立一种具体区块链应用的主要挑战之一。因此,必须考虑所选择支付工具的下列影响。
● 对系统完备性的影响。
● 对系统开放度的影响。
● 对系统分布式特征的影响。
● 对系统设计哲学的影响。
对系统完备性的影响奖励和惩罚的力量是实现和维护区块链完备性的基础。这是可行的,因为系统中的节点获得了其维护系统完备性的补偿。但是,我们怎么知道哪些节点确实在一开始就因它们的工作而获得了一笔宝贵的补偿呢?好了,这就是问题的关键。哪一种支付工具被认为是有价值的,值得做哪些维护系统的工作?如果这种支付工具被认为失去价值或不值得信任,会发生什么?当它们用一种不值得信任或毫无价值的支付手段来补偿节点时,我们能不能期望那些节点继续维护系统的完备性?不,我们不能。缺乏对用于补偿节点的支付工具的信任,将会“污染”整个系统。因此,用于补偿维护系统完备性的支付工具直接影响了区块链本身的可信度。
对系统开放性的影响
区块链应该是一个开放的点对点系统。每个人都可以把自己的计算机连接到这个系统上,并且会因为对其完备性的维护而得到奖励。但是,如果用于补偿节点的支付工具不像区块链本身那样开放,会发生什么呢?如果补偿是通过使用一种仅在特定国家可用的支付工具来完成的,又会发生什么呢?在这种情况下,支付工具引入的限制性会抵消系统的开放性。
对系统分布式特征的影响
区块链是一种纯粹的分布式点对点系统,没有任何中央控制机构进行协调。但是,如果用来补偿节点的支付工具是由一个中心化的机构来控制和管理的,会发生什么呢?这意味着允许中心化机构通过“后门”进入系统,这将抵消整个系统的分布式特性。
对系统设计哲学的影响
前面的讨论表明,用于补偿节点维护系统完备性的支付工具本身有可能会抵消区块链的一些特征。这就提出了一个有趣的问题:一个纯粹的分布式点对点系统,如果它因使用一种支付工具来补偿它的节点而抵消了其最主要的价值,那么它怎么能被认为是可信的呢?每一个声称完全开放和分布式的区块链系统都必须找到一个令人满意的答案来回答这个问题。
用于补偿节点的支付工具的理想属性
为了尽可能少地抵消区块链的特征,一种用于补偿节点的支付工具应该包含以下属性。
● 以数字形式提供;否则,它就不能被包含在区块链中。
● 在现实世界中被视为一种支付工具;否则,节点就不能利用它们的收入在现实世界中支付为维护系统完备性而产生的账单。
● 在所有国家均被接受为一种支付手段;否则,将对生活在那些不接受它作为支付工具的国家的节点失去吸引力。
● 不受资本流动的限制:否则,它从其他节点获得的奖励将受到限制。
● 具有稳定的价值;否则,节点就会面临丧失购买力的经济风险。
● 是值得信赖的;否则,它会削弱区块链创造信任的能力。
不受任何一个组织控制;否则,它会与区块链的分布式特性发生严重冲突。
这些属性读起来就像是完美世界货币的一份愿望清单。
“加密货币”的出现上面列出了一些期望用于补偿节点的支付工具所具有的属性。没有任何一种法定货币能够满足这些特性。一种具有这些属性的支付工具在除了补偿分布式系统之外的许多情况下都是有用的。事实证明,许多人已经考虑过这个问题。第一个也是最著名的区块链应用就是为了解决这个问题而形成的。区块链的想法是非常棒的:它是一个纯粹的分布式点对点系统,它管理着一种新型“数字代币”的所有权,而它反过来又可被用来补偿系统的节点,以验证和增加区块链数据结构中的新区块。这种特殊的代币将其应用目标与一种新型代币所有权的管理联系起来,作为一个值得信赖的支付工具来补偿其系统贡献者。我说的是比特币。比特币系统不仅在一个纯粹的点对点系统中管理比特币的所有权,而且它还用比特币来补偿那些为其完备性做出贡献的节点。由于区块链依赖于密码学,这种新型代币也被称为“加密货币”。根据经验,你可能会说,比特币和许多其他“加密货币”就像面包房老板一样,都向员工支付他们生产的面包,不同的是,节点生产的面包实际上是一种新的“加密货币”。
▶ 分布式特征。
▶ 系统设计哲学。
● 补偿节点的支付工具应有如下属性。
▶ 以数字形式提供。
▶ 在现实世界中被接受。
▶ 不受资本流动限制的影响。
▶ 值得信赖。
▶ 不受任何一个组织控制。
● “加密货币”是一种独立的代币,其所有权由区块链管理。它可作为一种支付工具来补偿维护系统完备性的节点。
区块链的作用:应用层的功能性特征
区块链有以下两个应用目标。
● 明确所有权。
● 转移所有权。
明确所有权
明确所有权意味着回答构成所有权的主要问题,即:谁拥有,拥有多少,拥有什么和什么时候拥有的转移所有权
转移所有权意味着改变所有权的当前状态。就这一作用而言,区块链可以让所有者将他们的财产转让给其他人。因此,它回答了另一个证明所有权的重要问题:谁在什么时候获得了谁的所有权?
区块链的非功能性特征
与区块链互动时,你会注意到它是如何履行职责的。区块链实现其作用的质量是由其以下的非功能性特征描述的。
● 高可用性。
● 抗操纵。
● 可靠性。
● 开放性。
● 匿名性。
● 安全性。
● 系统弹性。
● 最终一致性。
● 保持系统完备性。
高可用性区块链不会停机,甚至没有一个可将它关闭的按钮。
抗操纵
没有人能单独决定区块链中交易数据的内容,也没有人可以关闭整个系统。
可靠性
区块链以良好的机制来实现它的功能。人们可以相信区块链能够正确地明确和转移所有权。
开放性
区块链并不会拒绝某些用户使用其服务,相反,它对所有人都开放。
匿名性
区块链能准确地识别其用户,但它既不维护也不揭示用户在真实世界中的身份。
安全性
区块链在个人交易级层面以及整个系统层面都是安全的。就个人层面而言,区块链能确保所有权只保留在合法所有者的手中。从整个系统层面来看,区块链保护所有使用者的所有权不受操纵、伪造、双重支出和未经授权的访问。
系统弹性
即使在开放的网络中,区块链也能正确地明确和转移所有权。区块链能够抵抗广泛的针对所有权的攻击,比如伪造、双花以及通过伪装成别人来获取财产。
最终一致性
区块链不会始终产生一致的结果。相反,获得一致结果的机会将随着时间的推移而增加,最终会使整个系统具有一致性。
保持系统完备性
区块链可保持数据的一致性,并确保单个交易和交易数据的整个历史记录的安全性。
区块链内部运行时实现层的功能性特征
区块链内部的功能性特征可分为以下几个部分。
● 所有权逻辑。
● 交易安全性。
● 交易处理逻辑。
● 存储逻辑。
● 点对点架构。
● 一致性逻辑。
所有权逻辑所有权逻辑决定了所有权是如何被明确和转移的。区块链利用单个交易数据来描述所有权的转移,并维护整个交易数据以明确所有权。图说明了所有权逻辑和它的一些基本概念。在顶部的方框显示的概念依赖于其下面的概念。最下面一行的方框展示了所有权逻辑所依赖的底层概念。
上层模块会比下层模块更加宽泛,下层的模块可以认为是对上层模块的具体实现。比如所有权的证明需要对所有者和财产的鉴定,以及明确二者之间的所属关系。要明确所有权就必须进行鉴定,并且需要通过检验去确定只有自由合法的人才可以使用对应的财产。最下面的5个方块代表着具体的实现层,比如密码和签名是用来实现授权与鉴定这两个基本功能的。账本可以看作关联所有者和他们财产的一个具体的实物实现。
● 身份认证。
● 鉴定。
● 授权。
三者的含义和相互关系,可以通过现实世界中的例子来加以说明。打个比方,你准备去超市买一瓶红酒,而超市不允许向未成年人出售含酒精饮料。那么超市如何确定他们只向正确的人群出售了酒呢?他们通过身份认证、鉴定以及授权这3个步骤来实现。接下来我们会做进一步的介绍。
身份认证
身份认证指的是通过提供可以作为标识符的相关信息来确认使用者的身份。在买酒的例子中,你可以提供一个身份证,但是身份认证并无法证明你就是你说的这个人,也无法证明你已经成年,身份认证只是意味着申明你是某一个人。
鉴定
鉴定的目的是为了阻止有人冒充他人。鉴定就意味着要核实你的确是你声称的这个人。这个鉴定过程可以通过提供一些能证明你身份信息的事物来进行,比如身份证或驾驶证。在这个过程中很重要的一点是,你所提供的对你身份的证明信息必须具备一些和你相关的独一无的东西,如照片、指纹等。在买酒的例子中,可以出示包含了你照片的驾驶证,通过比对你和驾驶证上的照片可以完成鉴定工作。对驾驶证上照片的检查是为了防止出现驾驶证被盗用的情况。
授权
授权意味着根据对应人的身份特征准许其访问特定资源或使用特定服务。授权产生于一次成功的鉴定,以及对其所拥有权利的准确评估。在买酒的例子中,授权意味着在检查过你驾驶证上的出生日期之后,允许你购买酒。如果你的年龄过小,店员有权拒绝向你提供酒。注意在这个例子中,发生拒绝出售酒的情况并不是因为鉴定失败,此时身份认证与鉴定都已成功完成,只是因为在授权过程中店员发现你年龄过小才未进行授权。因此,授权通常意味着要将鉴定后的结果与一些规则进行比对评估。
█ 备注: 身份认证指的是确认使用者的身份。鉴定指的是证明你确实是你所声称的这个人。授权指的是让你根据之前的身份鉴定能访问特定的资源或得到特定的服务。
账本的性质与意义
一个账本必须同时履行两种相对的功能。一方面能够通过读取账本中的数据来证明所有权,另一方面账本需要记录每一次所有权的转移,也就意味着新的数据需要被写入账本。这两个功能最重要的不同可以归结为公开与隐私的不同。
当账本对每个人开放时,证明所属权就比较容易了。因此,公开是证明所属权的基础,好比在法庭上证人进行公开的指证。但是,所属权的转让应该专门限定开放给合法的转让对象(所有者),因此隐私是所有权变更的基础。向账本写入数据意味着更改所有权,因此我们只希望绝对可信的实体,才能够具有对账本进行写入数据的操作权限。
隐私和公开,证明所属权和转移所属权,以及读取账本和写入账本这3类矛盾同样可以在区块链中找到,于是我们在这里指出:区块链是一个能够被任何人访问,拥有类似账本功能的巨大去中心化点对点系统,也可将它理解为一个去中心化的账本。
所有权与区块链
以政府出具的证明文件作为见证的形式,是很多高价值事物确定所有权的关键。但当政府保存的信息被破坏或销毁时,会发生什么呢?或者说,有人故意在更新账本信息时犯了错误或干脆未对证明信息进行更新又会发生什么呢?一旦发生这种情况,政府出具的证明信息将无法反映真实情况。
只拥有一个账本用来证明所有权所带来的问题,可以采用让法庭审判的方式来解决。只依靠一个证人的证词来下定论,需要面对证人可能不诚实的风险,那么更多的证人显然是更好的。越多的独立证人参与进来,他们证词中的主要一致部分为真的可能性就越大。这也可以通过大数定理或统计学知识进行证明,而在这个过程中,接近并找到真相的关键在于拥有大量相互独立的证人,并确保这些证人各自独立且相互之间没有影响。
不仅仅是所有“碎片”的简单相加
本讲是区块链知识之旅的终点站。第9讲至第20讲介绍了组成区块链的各个概念,本讲会将所有这些概念组合在一起。因此,你不仅会获得对区块链的整体理解,还会看到不同的概念是如何协作的。本讲从回顾区块链的主要概念开始,之后解释了区块链如何应用前面各讲中介绍的各种技术来创造信任。最后,还提供了对区块链技术的整体回顾,从而为介绍区块链可应用的领域打下了基础。
点对点架构
系统架构方式决定了节点是如何相互关联并相互连接的。如图21-5所示,区块链使用了一个纯粹的分布式点对点的系统架构。该系统由称为节点的独立计算机组成。这些节点通过互联网彼此连接。每个节点都维护自己的区块链账本,其中包含交易数据的整个历史记录。节点之间通过使用一种类似八卦在人与人之间传递的方式来相互通信。这种传递信息的方式可确保最终每个节点都能接收到所有的信息。
一致性逻辑及其基本概念
获得抽象的区块链技术套件抽象是通过识别和区分区块链的组抽象是通过识别和区分区块链的组成部分来获得的。这与我们在第5讲中讨论的“区块链技术套件”的内容是一致的。显然,所有权逻辑和交易数据是特定应用的组成部分,因为它们决定了如何用交易数据描述所有权,以及所有权如何被明确和转让。另一方面,交易安全性和交易处理逻辑对应用目标的依赖性较小。前者使用了标识符、身份验证、授权和数字签名等通用概念,这些概念可以在任何其他应用中使用。图21-3展示的是一个庞大的数据处理过程,其大部分概念与应用无关。唯一与应用紧密耦合的概念是交易数据的验证。所有其他概念,如竞争、控制、奖励、惩罚和区块头的验证都无须知道特定的数据是否被处理。
区块链是天才的杰作。然而,区块链并不完美,也存在缺陷。因此,本讲将介绍区块链的一些主要缺陷,并说明这些缺陷为其商业应用所带来的阻碍
面临的挑战
区块链是一个完全分布式的点对点系统,允许所有人查看历史交易记录,并添加新的交易记录到节点共同维护的账本中。开放性以及没有中央控制机构是这一系统的特征。这一系统中,节点作为独立见证人来解决确权的问题。然而,开放性以及中央控制和协调机构的缺失同时也会造成一些不必要的影响,从而限制该系统的应用。因此,我们面临的挑战就在于了解这一系统可能存在的缺陷,并有针对性地来制定解决这些缺陷的方案。
区块链的技术缺陷
区块链最主要的技术缺陷包括以下几点。
● 缺乏隐私。
● 安全模式。
● 延展性的限制。
● 高成本。
● 隐藏的中心化属性。
● 缺乏灵活性。
● 临界值。
缺乏隐私
区块链是一种完全分布式的点对点账本系统,负责维护完整的历史交易记录。所有交易细节,比如货物数量以及转账金额、涉及的账户,还有转账时间等信息,所有人都能查得到。这一点是很有必要的,这样才能让所有人明确所有权并且验证新的交易(比如识别双花攻击)。因此,缺乏隐私成为了区块链的一个缺陷。失去了透明性,区块链就无法履行其职责。然而,这种透明性通常被视作实现其应用的一个限制因素,尤其是实际应用于对隐私要求较高的情况下时。
安全模式
区块链采用了非对称加密算法进行用户身份的验证,以及交易的授权。区块链账户实际上可看作公钥,只有持有对应私钥的用户才能获取账户中的资产。只有包含数字签名的交易数据才是有效的,且能够实现账户间的资产转移,而数字签名是通过私钥生成的。私钥是证明所有权的唯一工具。只要某账户的私钥被故意泄露,那么这个独立账户的安全性就无法得到保障。
除此之外,保护账户资产的其他安全措施是不存在的。这里需要指出的是,区块链采用的非对称加密算法是迄今为止最好也是最强大的加密方式。因此,区块链的安全性本身是很强的。然而,除此之外区块链系统并没有其他安全措施能够防止用户丢失或泄漏私钥。这和日常生活中保护房子、车子、信用卡和借记卡的PIN码一样。一旦你把钥匙给了别人,无论背后的原因是什么,你的资产安全性就无法继续得到保障,只有真正拿着钥匙或知道PIN码的人才能开走你的车或者取走你的钱。区块链账户的私钥也不例外。然而,也有人认为过于单一的安全措施是限制区块链应用的主要因素之一。
延展性的限制
区块链这个点对点系统旨在实现两个目标:
其一,允许所有人在共同维护的历史记录中添加新的交易记录;
其二,确保交易数据的历史记录不会被控制或伪造。区块链平衡这两个目标的方式是:采用不可更改、且只允许添加新数据的数据结构,在新区块添加时要求给出哈希难题的解答(解答哈希难题是非常耗时的)。解答哈希难题是一种有效防止历史交易记录被操控的方式,因为要实现这一点需要极高的成本。不幸的是,采用这一安全措施的代价就是交易处理速度的下降,因此也就限制了区块链的延展性。区块链的这一特点被视为其在高处理速度、高延展性以及高吞吐量环境中应用的重大阻碍。
高成本
高成本问题和延展性问题有关。解答哈希难题或确保工作量证明算法正常运行都需要极高的计算成本。正是这一安全措施才能保证历史交易记录具有不可更改性。这里所说的计算成本包括时间、电力等方面的投入。然而,最终的结果始终是不变的:工作量证明成本极高。因此,整个区块链系统的运作都需要付出成本。至于成本的高低则取决于哈希难题的难度。
隐藏的中心化属性
在区块链数据结构中添加区块所需解答的哈希难题,以及为系统完备性做出贡献所需的奖励分配规则,都需要节点之间进行竞争。那些拥有必要金融资源的人会投资专业的硬件用于解决哈希难题,从而对系统做出贡献,最终取得奖励。另一方面,没有专业硬件的人要想为系统验证交易并添加新区块就会变得无利可图,最终只会让他们选择退出,不再为系统贡献计算资源。因此,原本数量庞大且成员多样化的节点最终会演变为小部分由企业控制的节点。它们因为能够获取专业硬件而持有大量的算力,最终会垄断系统。与其他行业的垄断行为一样,这一小部分企业可能滥用权力(比如故意忽略特定交易或区别对待用户)。这就构成了潜在的中心化属性,会对整个系统的分布式特性构成威胁。从技术角度来看,这类系统仍然是分布式的,但其完备性却只能依靠一小部分企业来维护。
缺乏灵活性
区块链是一个复杂的技术组合,由一系列经优化后相互兼容的协议组成。改变这个井然有序的系统是极具挑战性的。事实上,一旦区块链开始运作之后,没有任何一个有效方法能够改变或升级其主要部件。这一点就要求区块链系统有一个较长的使用寿命。举个例子,所用加密算法必须在区块链的可用期限内保持有效性,这很可能是好几个世纪。对区块链算法以及冲突解决方式来说同样如此。由于区块链的不可更改性,会使得连开发区块链的人也很难修复漏洞或对区块链协议进行调整。这些特点都导致了整个区块链系统在灵活性方面无法与其他系统相比。
临界值
区块链防操纵的特点,以及共同维护历史交易记录的可信性都基于这样一个假设,即系统中的大多数算力都是由诚实节点控制的。然而,在算力有限的小型点对点系统中,前文所说的大多数可能仍是少数,因此很可能导致51%攻击的出现。对于用户数量不足以及市值较低的“加密货币”来说,这个问题尤其重要。因此,所有区块链都需要确保拥有一定的诚信节点以防止遭到算力攻击。达到一个特定的节点规模来防止51%算力攻击的出现,是每个新区块链系统必须应对的挑战。
区块链的非技术性缺陷
区块链最主要的非技术缺陷包括以下两点。。
● 缺乏法律认可。
● 缺乏用户接受度。
缺乏法律认可
区块链能够让用户在公开和完全分布式的点对点系统中对所有权进行管理和转移。独立节点通过分布式共识参与管理所有权的方式也引来了质疑,因为人们对在区块链中生成的交易的合法性存疑。无论这项技术的安全性和复杂程度如何,区块链中交易的合法性都是需要解决的问题。这是关于如何在现有法律系统中融合一种新的所有权管理方式的问题。那些见证互联网兴起并发展的人,可能会发现如今区块链的法律地位的不清晰与20世纪90年代的互联网很相似。
缺乏用户接受度
用户接受度的缺失是另一个不可忽视的问题。区块链法律地位的不确定性将会造成用户的怀疑,最终打消其使用区块链系统的念头。用户接受度的另一方面在于教育成本。当用户不了解区块链所用的基础技术时,要想让他们使用并信任区块链是不现实的。
克服缺陷
上述技术和非技术类缺陷都是区块链在现实世界得到应用的重大阻碍。如何克服特定缺陷,依然是设计者需要积极探索的方向。对于这类活动的讨论不在本书的介绍范围之内。不过,下文简要描述了如何解决区块链的缺陷。
技术性缺陷
解决区块链技术性缺陷会涉及各个技术层面的问题。解决区块链技术缺陷的重大挑战之一,就是了解技术改进和技术创新的区别。下一讲将深入讨论这个话题。
非技术性缺陷
区块链的非技术性缺陷,可以被视作采用一项新技术所需考虑到的社会、经济、法律和心理层面的问题。互联网和电商就是证明时间能够解答新技术面临的法律问题的最好例子,用户也需要时间去理解、信任以及尝试使用新技术。幸运的是,互联网和电商的例子同样证明了时间对新技术普及的重要性,随着时间的推移,新技术在用户间的接受度和普及度会逐渐提升,并且也可为人们提出法律方面的解决方案留出时间。
区块链两大主要技术局限产生的两大主要冲突。
区块链的主要冲突
区块链面临着以下两大冲突。
● 透明度与隐私。
● 安全与速度。
透明度与隐私
区块链根据交易数据的全部历史记录来明确所有权,且这些交易数据的历史记录对所有人都是可见的。因此,区块链就类似于一种公共交易登记簿或公共账本。开放和透明是区块链验证所有权的核心。每个人都可以审计其他人的交易,从而可以十分轻松地发现双花攻击,因此这种开放性是解决双花问题的基础。
然而,这种解决方案与隐私性背道而驰。隐私性意味着要保证除交易双方外的人无法接触交易数据中包含的信息(例如涉及账户或转账金额等信息)。由此产生的冲突就在于一方面需要透明度来明确所有权,另一方面系统用户又需要有一定的隐私。
安全与速度
可以毫不夸张地说,交易数据的历史记录是区块链的核心。可以将交易数据的历史记录存储在不可变且仅可添加数据的区块链数据结构中,而这个结构又会要求被添加或重写的每个区块都要解决哈希难题,从而保证历史交易数据不会被操纵,也不会被伪造。这不仅会使操纵或伪造历史交易数据的成本变得极高,还减慢了新交易数据被添加到区块链数据结构的速度。这就与商业环境中许多应用程序对速度和可扩展性的要求形成对比。由此产生的冲突就在于一方面要根据耗时的工作量证明算法来确保历史交易记录的安全,另一方面又面临着用户对速度及系统可扩展性的要求。
冲突的根源
这两大冲突的根源就在于区块链的两个基本操作:读取或写入交易数据。开放性与隐私性的冲突可以追溯到读取区块链数据的操作,而安全性与速度的冲突则可以追溯到向区块链数据结构写入数据的操作。总结了两个主要技术局限、潜在冲突以及区块链的相应基本功能之间的关系
解决冲突
可以选择找一个平衡所有冲突的折中方案,也可以选择让其中一方以压倒性的优势削弱另一方从而解决冲突。正如前文所述,区块链支持透明度以及安全性,从而削弱了隐私与速度。有其他方法可解决这些冲突,我们将在下面的内容中做更详细的介绍。
在透明度与隐私之间做出选择
在透明度与隐私之间做出选择,实际上意味着决定向谁授予查看交易数据的权限。如果仅考虑授予读取权限的极端情况,则有两种选择:将读取权限授予所有人,或者授予有限的节点或用户。人们可以根据哪些用户或节点有权读取区块链数据或创建新交易来区分以下类型的区块链。
● 向所有用户或节点授予读取权限以及创建新区块权限的为公有链。
● 向预先选定的一组用户或节点授予有限读取权限以及创建新区块权限的为私有链。
在安全性与速度之间做出选择
在安全性与速度之间做出选择,实际上就意味着决定向谁授予写入交易数据的权限。如果仅考虑授予写入权限的极端情况,则有两种选择:将写入权限授予所有人,或者向预先选定的一组被确定可信任的用户或节点授予写入权限。我们可以基于写入权限的授予情况来区分以下两种类型的区块链。
● 向所有人授予写入权限的无须许可的区块链。每个用户或节点都可以验证交易,向并向区块链添加新区块。
● 仅向预先选定被确定为可信任的一组数量有限的节点或用户授予写入权限的许可区块链。因此,只有具有写入权限的一组节点才能够验证交易,并参与分布式系统的共识过程。
4种类型的区块链
区块链,以及上述所有各讲中讨论的区块链都是公有无须许可的区块链。对于读取或创建交易权限的任何限制都将产生其中一种类型的区块链。私有许可类的区块链有较高的处理速度,以及对交易数据进行保密的能力,被认为是最适合用于商业环境中的。
影响限制历史交易记录的读取或写入权限会对区块链以下几个方面的特征产生影响。
● 点对点架构。
● 分布式性质。
● 用途。
点对点架构
在第3讲中,我们了解了点对点系统及其性质。点对点系统的一个主要特征就是其包括了在权利与作用方面完全平等的节点(计算机)。尽管单个节点就其贡献的资源而言可能会有所不同,但系统中的所有节点都具有相同的功能和责任。然而,如上所述的4种类型的区块链在向组成系统的节点授予读取及创建交易权限时却存在不同。如果节点在读取或创建交易时的能力不同,那么它们就不再平等。因此,对系统的读取及写入权限进行限制,似乎违反了点对点系统的一大重要特性。
分布式性质
在第2讲中,我们了解了分布式系统及其性质。不存在任何类型的中央控制或协调机构,常被认为是分布式系统的一个主要特征。然而,如上所述的4种不同类型区块链的出现却基于向预先选定的一组节点或用户授予读取或写入权限,而不是向所有人都授予这些权限。谁来决定授予或拒绝授予系统的读取或写入权限呢?谁又来制定授予或拒绝授予读取及写入权限的规则呢?
读写权限分配的规则不是由纯粹的分布式系统来管理和执行的,那么系统就将拥有一个中央要素,这反过来又会与区块链的分布式特性产生矛盾。
中显示了通过中央要素管理并执行读写权限分配规则的分布式系统的大致架构。这就意味着,要么存在一个隐藏的中央控制机构,要么系统成为所有拥有有限权限节点组成的中心化系统,但同时又在内部使用分布式的组织方式。在这两种情况下,整个系统就十分类似于由分布式与中心化要素组成的一个混合系统。
用途
在第4讲中,我们了解到区块链解决的核心问题就是在由数量未知、可靠性和可信度也未知的对等节点组成的纯粹分布式点对点系统中实现并维持诚信(即达成共识)。对读取及写入权限设限不仅改变了分布式点对点系统的构成属性,还改变了节点的可信度。如果对能够向区块链写入数据的节点的可信度进行评估,那么最终系统中可能不包括可信度未知的节点。因此,可以得出结论:这样的系统本身不再需要区块链在不可信赖的环境中创建信任的这一能力了。
由于以下原因,区块链即使在由数量已知、可靠性及可信度也大概已知的节点组成的系统中也能创造价值。首先,由于技术故障,此类系统中的节点数量可能会有所变化。其次,每个分布式系统都会面临一些可让单独消息层面的通信变得不可靠的网络问题。最后,即使通过适应过程也不能保证节点百分之百可信。此外,由于技术故障,即使可信节点也可能会得出错误的结果。
重新审视区块链的用途
由于就读取与写入权限对节点做出了限制,我们可能会改变对区块链用途的看法。然而,即使在私有许可这一最受限制的情况下,区块链也可用来保持系统完备性。因此,我们可能会决定放宽区块链创造信任的条件。与其坚持区块链的用途是保持开放的、纯粹分布式点对点系统的完备性,倒不如说它的用途是实现和保持一般分布式系统的完备性。
区块链能够如何发挥作用,提供哪些服务以及用户如何与之交互。以下是几个重要区块链概念的演进。
● 使用权。
● 隐私。
● 共识。
● 交易。
● 存储数据。
● 数据结构。
使用权
对区块链的读写限制可催生出对各种区块链版本的需求。我们在第23章中提到过,对数据读取的限制演化出公有链和私有链,而对写入数据权限的限制又诞生出了开放和不开放的区块链。
这4种区块链就可以看成是概念上的演进,因为它们改变了区块链的主要特征,有着不同的用途、分布式属性和构架方式。
隐私
区块链的开放性一直都是重点讨论的话题,因为这种特征在某些使用情景下影响了用户对隐私的需求。私有链限制读取功能,任何人都不能凭借历史交易记录来获得对交易数据的控制权。其他保护隐私的方法包括把隐私数据存储在专业保护隐私的分布式计算平台上。另外,零知识证明可以不用获取所有的数据就能证明声明的正确性(比如证明一种数据类商品的所有权)。这种技术使用在区块链上可以让任何人不用读取所有的交易细节就可以证实与所有权相关的声明。
共识
工作量证明通过计算机计算提供一些基本的衡量标准来选择一种交易数据的历史记录,解决不同历史版本的冲突问题。但是这种依据计算能力的方式让很多计算机科学家不满,他们认为计算能力是可以被攻破的。
因此,区块链演进出了多种不同的共识算法。股权证明(POS)和股权授权证明(DPOS)就是另外两种共识算法,具体操作原理是把投票权和商品的所有权或者移交权联系起来。另外一些“另类”的共识算法包括Paxos和Raft。这些算法在区块链诞生前就存在了。但是,要把这些算法讲清楚可就不简单了,也超出了本书的范畴。工作量证明(POW)之外的其他共识算法的问题在于它们概念上非常复杂,难以证实。如果这些算法存在理论上的漏洞,就会导致区块链系统中“腐败”的发生,从而影响区块链创造出的信任。
交易
交易就是从一个账户转移所有权到另一个账户。事实上,交易本身就是一个自治合约。交易本身包含一切实现所有权转移所需的信息。这种理念促进了智能合约的发展,并且让人们尝试通过区块链来执行智能合约。与交易数据相似,智能合约是使用机器可以读取的语言来描述各参与方意志的方法。但是与简单的交易数据不同,智能合约针对不同的物体、主题、行为和条件对如何实现所有权转移的操作非常灵活。从技术角度而言,智能合约就是用特定编程语言写在区块链里的自治计算机程序。写入智能合约后,区块链可通过执行合约中的代码来实现拓展。这种拓展实现了区块链从存储数据的分布式系统到执行智能合约的虚拟机的转变。
能够在区块链上运行代码意味着可以在上面构建应用,而不只是简单地用来存储数据。在讨论智能合约时,我们需要意识到这个术语并不是指不同交易方之间的合同,而是指区块链上管理和执行合同的一段代码。
智能合约的灵活性,使它的使用范围变得非常广:如定期支付房租、借贷、还贷,以及在出现危害时支付保险赔偿。所以未来几年智能合约将是最重要的一个区块链发展方向。
存储数据
之前我们都在讨论如何把新数据存储进来,并维护整个历史交易记录的完整性。但是我们在第9讲中讨论过可以通过交易数据或历史交易数据来管理所有权。前者多用来管理少量数据,后者多用在有智能合约的场景中,整个系统包含多种随机信息,如账户余额、保险合同,或者代表物理世界物体的数据。这样一来,整个系统的状态都被存储在历史交易数据当中,并且可通过智能合约来实现状态转变。
数据结构
区块链的数据结构不是由区块构成的一条直线;相反,区块链的数据结构实际上是树状的,不同的分支代表交易数据的不同历史版本。区块链算法的主要挑战就在于让分布式系统的节点挑选一条分支来作为权威链。另外一种存储交易数据的方法就是使用有向无环图表来展示这个树状的数据结构。我们可以假设这个有向无环图就是树状的区块链数据结构。使用这种有向无环图
来存储历史交易记录对区块链的性能、所有权归属和节点间达成共识的方式都具有深远影响。
区块链的主要发展方向
众所周知,大众习惯高估技术的短期影响,而忽视其长期影响。互联网的演进和它对人类社会的影响就是上述道理的最好证明,这也意味着要预估技术创新的长期影响是非常困难的。以下几点或许是区块链长期发展的重要方向。
● 去中介化。
● 自动化。
● 标准化。
● 流水线处理。
● 提高处理速度。
● 降低成本。
● 信任协议和共识。
● 让信任变成一种商品。
● 提高技术意识。
去中介化区块链并没有消灭中介,而是自己充当了严格遵守规则的数字中介。从一种中介转移到另外一种并没有什么了不起,但是取代掉依赖用户信任的人类组织,把信任编码到软件系统当中还是一个很重大的成就。此外,能够取代大批中介,实现节点和节点之间以安全的方式直接互动,确实称得上是一个巨大的成就。因此,去中介化是区块链未来发展需要保留的一个特征。
自动化
为了能够更好地扮演数字中介的角色,区块链需要依赖自动化。区块链的使用场景越多,越是能够通过点到点之间的自动互动来替代中介之间的手动操作。因此,区块链的另一大未来发展方向就是巩固自动化。
标准化
区块链通过运行特定规则和标准实现交易的自动操作。因为区块链使用得越多,相关交易方之间的交易和互动就要越标准化。所以进一步加强标准化也是区块链发展之路的一个重要课题。
流水线处理
由于标准化和自动化,商业流程会变得更加透明和流水线化。很多组织都准备好使用区块链来处理业务。所以,了解现有的商业处理模式,并对其进行重新设计以实现流水线式的操作也是一个重要的方向。
提高处理速度
去中介化、标准化、流水线处理和自动化促进了处理速度的大幅提升。因此,我们可以期待区块链得到越来越多的使用,同时交易双方的互动也会越多并越高效。如何用高速自动处理的系统改进过去那种耗时的手工处理系统也是一个重要的课题。
降低成本
自动化、去中介化和标准化往往带来的结果就是成本的降低。历史已经反复告诉我们自动化所带来的成本降低已经重塑了很多行业,让更多的人能够买得起各式各样的商品。当然,成本降低不只会对汽车制造、电视、手机和服装等产业产生深远的影响。因此,这也是在经济层面上需要重点关注的区块链发展方向。
信任协议和共识
区块链把人类对人类组织的信任转移到对计算机共识的信任。这或许会改变我们对信任的理解,改变我们对个人乃至整个社会信任的理解。因此,信任协议将会是区块链在社会学方面的重要发展方向。
让信任变成一种商品
自动化和标准化不仅减少了多个行业的生产时间和成本,同样让过去消费者承担不起的商品走进千家万户。你还记得30年前一台计算机或者一部手机有多贵吗?现在,手机都是商场促销免费赠送的东西了。现在花不多的钱就可以买到一台有超高运算能力的计算机。这是因为自动化和标准化可让计算机芯片的制造成本大幅下降。可以预见随着区块链发展,商业互动中所需的信任、安全和结算的成本都将会大幅降低。这对日常商业往来中需要发起交易、执行交易并结算的行业是长期的刚需。
提高技术意识
区块链是一种高度复杂的技术,它借助极难篡改的数据结构和共识算法来解决信任问题,实现点对点系统的一致性。这些并不一定能够吸引到商业世界的注意。但事实上,区块链已经获得了各行各业的瞩目。越多的人开始关注区块链技术,并试图了解这项技术在现实生活中的应用。这是至关重要的因为在很多行业中要获得成功和社会财富的关键点就在于能否攻克技术上的难题。
潜在劣势
除了正面的影响,区块链同样也存在负面影响,以下是其潜在的劣势。
● 缺少隐私性。
● 缺少责任制。
● 减少就业。
● 再中介化。
缺少隐私性
公有链不隐藏交易数据,任何人都可以读取历史交易数据。这对那些想保护自己隐私的人而言是非常恐怖的一件事情。这些担忧是可以理解的,尤其考虑到大公司已经收集了这么多的个人数据。这种担心可能会促进私有链的发展,或者促进其他一些具有高度安全性的协议的产生。此外,这会引发大家的思考:是否人人都可以做自己数据的主人,都有能力去出售数据的读取或者使用权。这样一来,搜索引擎服务商和社交媒体等其他中介就会失去一定的用户和市场份额。
缺少责任制
去中介化会导致个人责任的缺失。中介通过合同约束各方,并给出相应的担保。中介还会在交易无法顺利进行时做好调解工作,履行自己的义务。人对人类组织的信任转移到对协议和技术的信任后,用户就无法在发生、执行和
喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!