区块链被过度炒作。从Sibos到Money20/20再到《经济学人》和《欧洲货币》的封面故事,每个人都在蹭区块链的热度。毫无疑问,越来越多的公司试图验证自己的业务是否适合区块链。但我们在等待对区块链如何在企业业务中真正带来价值有更深的了解。
在某些企业想强上区块链的的项目中,有很大一部分与区块链完全没有关系。他们听说区块链是下一个风口,于是在公司内部找到一些对这个问题感兴趣的人,还提供了足够的预算,让他们用区块链去承接业务。甚至有些公司先批了钱,于是主管们挥舞着钞票,要求咨询公司帮助他们想出一个区块链的用例。
但是,在许多情况下,项目可以用一个普通的关系型数据库很好地实现。如果是这样,那么你使用区块链就完全没意义了。像Oracle和MySQL这样的产品,已经发展了几十年。它们已经被部署在数以百万计的服务器上,运行数万亿次的查询。它们的代码被彻底的测试、调试和优化过,非常的稳定。
那么区块链呢?和久经考验的关系型数据库相比,简直还处在襁褓中。速度,稳定性和成本都有差距。所以,在开始一个区块链项目,需要对为什么要使用区块链有一个非常清楚的想法。有一堆需要满足的条件。
你的业务需要数据库吗?
区块链是一种共享数据库。所以,你想使用区块链,那么要先弄明白你为什么要使用数据库。这可以是一个传统的关系型数据库,它包含一个或多个电子表格,也可以是NoSQL数据库。当然,从理论上讲,NoSQL数据库只是关系型数据库的一个子集。
例如,金融资产的分类账可以自然地表达为一个表,其中每一行代表一个特定实体所拥有的一种资产类型。每一行都有三列内容:(a)所有者的标识符,如账号;(b)资产类型的标识符,如 "美元 "或 "AAPL";以及(c)该所有者持有的该资产的数量。所以,如果你想实现一个账本,用数据库是合适的。
数据库的修改体现为一笔笔的交易。交易代表了对数据库的一系列改变,必须作为一个整体接受或拒绝。例如,在资产分类账的情况下,A用户对B用户的付款是由一个交易表示的,该交易从中扣除适当的数量,并将其添加到另一行。
你的业务是否需要多用户参与修改内容?
区块链是一种允许多人写入数据库的技术。换句话说,需要有一个以上的实体来生成修改数据库的交易。你知道这些人是谁吗?
在大多数情况下,写入者也将运行节点,持有数据库的副本,并以点对点的方式将交易转发给其他节点。然而,交易也可能是由那些自己不运行节点的用户创建的。例如,考虑一个支付系统,该系统由一小群银行集体维护,但有数百万移动设备上的最终用户,只与他们自己的银行系统进行通信。
你的用户是否互相之间不信任?
什么叫不信任?即一个用户不愿意让另一个用户修改它 "拥有 "的数据库条目。同样,一个用户不会无条件的相信另一个用户传播的 "真相 "。因为每个人都有传播利于自己,而非真实信息的动机。
如果你的用户之间互相信任,那区块链的共识机制对你没用,也就没有必要上链了。区块链是一种针对有多个不信任的写入者的数据库的技术。
没有可信任的第三方
因此,到目前为止,这个问题的定义是使一个数据库有多个非信任的写入者。对于这个问题,已经有了一个众所周知的解决方案:受信任的中介机构。也就是说,所有写入者都信任的人,即使他们并不完全信任对方。事实上,世界上充满了这种性质的数据库,如银行的账本。你的银行控制着这个数据库,确保每笔交易都是有效的,并得到其资金流动的客户的授权。这里,银行就是大家都信任的第三方。
区块链消除了对可信第三方的刚性需求。不需要谁来验证交易和认证其来源,而是用有效性证明和授权证明来验证交易。因此,交易可以由维护数据库副本的每个节点独立验证和处理。
但是,如果你的场景中天生就有一个权威可信的角色,不论是个人,部门或者组织,并且用他来验证交易顺畅高效的话,也许没有必要上区块链。相对的,如果根本就找不到这个角色,或者想要更低的成本、更快的交易、自动对账之类的功能,那区块链就适用。
数据是否牵涉到多个用户
区块链的适用范围是对于由多个写入者共享的数据。这意味着由不同写入者创建的交易经常依赖。例如,假设A向B发送了一些资金,然后B又向C发送了一些。在这种情况下,B的交易依赖于A的交易。如果不先检查A的交易,就没有办法验证B的交易(因为B的资金是A给的)。由于这种依赖性,这些事务自然属于一个共享的数据库中。
但如果你打算做一个应用,是大家写各自的日记,且没有共享和互动,那么就没有必要用区块链。
设置规则
这其实不是一个条件,而是前面几点的一个必然结果。如果我们有一个由多个写入者直接修改的数据库,而这些写入者并不完全信任对方,那么这个数据库必须包含限制所执行的事务的嵌入式规则。
这些规则与传统数据库中出现的约束条件有根本的不同,因为它们与转换的合法性有关,而不是数据库在某个特定时间点的状态。网络中的每一个节点都会根据这些规则检查每一笔交易,那些不合格的交易会被拒绝,不会被转发。
资产分类账包含这种规则的一个简单例子,以防止交易凭空创造资产。该规则规定,每笔交易前后,账本中每项资产的总数量必须相同。
设置验证者
到目前为止,我们已经描述了一个分布式数据库,其中交易可以起源于许多地方,以点对点的方式在节点之间传播,并由每个节点独立进行验证。那么,"区块链"从何而来?好吧,区块链的工作是成为权威的最终交易日志,其内容可以被任意节点证明是一致的。
为什么我们需要这个日志?首先,它使新加入的节点能够从头开始计算数据库的内容,而不需要信任其他节点。其次,它解决了一些节点可能会因为系统停机或通信故障而错过一些交易的问题。如果没有交易日志,这将导致一个节点的数据库与其他节点的数据库不一致,破坏了共享数据库的目标。第三,两个交易有可能发生冲突,所以只能接受一个。一个典型的例子是双重消费,即同一资产被发送给两个不同的收件人。在一个没有可信认证机构的点对点数据库中,节点可能对接受哪项交易有不同的意见,因为没有客观的正确答案。通过要求交易在区块链中被 "确认",我们确保所有节点都趋于同一决定。
最后,在以太坊式的区块链中,交易的精确排序起着至关重要的作用,因为每笔交易都会影响到后面每笔交易的情况。在这种情况下,区块链的作用是定义权威的时间顺序,没有它,交易根本无法被处理。
区块链从字面上看是一条区块链,其中每个区块包含一组交易,这些交易作为一组被确认。但谁负责选择进入每个区块的交易?在适合企业应用的那种 "私有区块链 "中,答案是一个封闭的验证者("矿工")群体,他们对自己创建的区块进行数字签名。这种白名单与某种形式的分布式共识方案相结合,以防止少数验证者夺取链的控制权。例如,MultiChain使用一种称为采矿多样性的方案,其中允许矿工以轮流方式工作,有一定程度的宽松,以允许无功能的节点存在。
无论使用哪种共识方案,验证节点的权力都远远小于传统中心化数据库的所有者。验证者不能伪造交易,也不能违反数据库的规则修改数据库。在资产账本中,这意味着他们不能花别人的钱,也不能改变所代表的资产的总量。尽管如此,验证者仍有两种方式可以不当地影响数据库的内容。
- 交易审查。如果有足够多的验证者恶意串通,他们可以阻止某项交易在区块链中得到确认,使其永远处于空白状态。
- 有偏见的冲突解决。如果两个交易发生冲突,创建下一个区块的验证者会决定哪个交易在区块链上被确认,导致另一个交易被拒绝。公平的选择是先看到的交易,但验证者可以根据其他因素来选择,而不透露这一点。
由于这些问题,在部署基于区块链的数据库时,你需要清楚地了解谁是你的验证者,以及你为什么信任他们,如果不是单独的话,集体信任他们。根据不同的用例,验证者可能被选为。
- 由一个组织控制的一个或多个节点
- 维护链的核心组织群
- 网络上的每个节点
支持链上资产的实物
如果你已经走到这一步,你可能已经注意到,我倾向于将区块链称为共享数据库,而不是更常见的 "共享账本"。为什么呢?因为作为一种技术,区块链可以应用于远远超出资产所有权追踪的问题。任何有多个非信任作者的数据库都可以在区块链上实现,而不需要一个大家都信赖的第三方。例子包括共享日历、维基式协作和讨论区。
说到这里,目前看来,区块链主要是那些追踪金融资产流动和交换的人感兴趣。我能想到的原因有两个
- 金融业正在应对比特币等加密货币的威胁(现在看来是微不足道的)
- 资产分类账是共享数据库的最简单和自然的例子,由多个非信任实体创建的交易相互依赖。
如果你确实想使用区块链作为资产分类账,你需要回答一个额外的关键问题。链上资产的性质是什么?答案可能是现金或债券,也可能是任何有价值的其他资产。但一定要有一方允许我在现实世界中提取这些资产。
当然,答案会因用例不同而不同。人们可以想象托管银行接受传统形式的现金,然后在区块链驱动的分布式账本中给存款人的账户记账。在贸易融资方面,信用证和提单将分别由进口商的银行和航运公司提供支持。而在更远的未来,我们可以想象到,企业债券的首次发行将由寻求融资的公司直接在区块链上进行。