译者注:本文原作者是以色列公司Coin Sciences Ltd的CEO 和创始人Gideon Greenspan,其开发的私有链平台multichain。
区块链技术是言过其实了。我是说,从 Sibos 到 Money20/20 ,或是“经济学人”再到欧洲货币,每个人都想爬上区块链这驾马车。像其他在区块链领域的公司一样,我们也收到了很多公司希望用我们的平台(multichain)来建立概念验证和帮忙的。
作为一个年轻的创业公司,你肯定想我们已经上天了。现在肯定是我们融一大笔钱来建造我们已经设计好的下一代高性能的区块链平台。那我们到底还在等什么?
其实,我们可以耐心的发现区块链技术到底会给企业级的信息技术公司带来什么好处。有一大部分让我们帮忙的工程和区块链半点关系都没有。为什么会这样呢?大公司听说区块链会是下一个风口,从内部找对这个感兴趣的人研究。大公司拿出一些预算告诉他们去做一些看起来很区块链的东西。不一会这些人就来敲我们的门,手里挥着美元,让我们帮他们想一个应用场景。你有什么可说的?
对那些心里有项目的来说,问题又出在哪呢?大部分情况下,这个项目用一个传统的关系型数据库就可以被完美的解决掉。你知道的,像甲骨文和SQL Server这样的庞然大物,或者对更开放的人,MySQL和Postgres。所以让我先把话说清楚:
如果当下的关系型数据库就能满足你的需求,那用区块链你一定是疯了。
为什么?因为像甲骨文和MySQL这样的产品已经经历了数十年的开发周期了。他们被部署在上百万台服务区上跑着上千亿条请求。他们有着世界上最透彻的测试,调试和优化过的代码,每秒处理上千条请求都不带喘气的。
那区块链怎么样?我们的产品是最早进入市场的之一,到今天刚好五个月,下载了几千次。事实上它非常稳定,我们基于比特币内核来开发它。但即使这样,整个区块链产品系列还在婴幼儿时期。
那么我是在说区块链一点儿用没有吗?绝对不是。但是在开始那个光彩亮丽的区块链项目之前,你必须非常清楚你为什么在用区块链。有一些条件必须满足。如果没有满足,你应该回到白板前。或许你可以更好的定义项目。或许你可以替每个人剩下时间和金钱,因为你根本不需要区块链。
1. 数据库 database
我们来说第一个准则。区块链是为共享数据库服务的技术。所以你一开始就需要知道为什么你用数据库,这一种结构性的信息。可以是传统的关系型数据库,包括一个或几个表格一样的数据库表。或者可以是最近流行的NoSQL,更像文件系统或者字典。(理论上讲,NoSQL是关系型数据库的子集)
金融资产的总账可以被自然地表达成一个数据库表,其中每行表示一个被某个特定的实体拥有的一种资产类型。每行又有三列:(1)拥有者的个人标识比如账号(2)资产类别的标识比如“USD”或者”AAPL” (3)被拥有的资产的数量
2. 多个输入者 multiple writers
这个比较简单。区块链是一个支持多个输入者的技术。换句话说,必须有多于一个实体来产生更改数据库的交易。你知道这些输入者是谁吗?
3. 信任的缺失 absence of trusts
第三个准则。如果多于一个实体对数据库输入,那么在这些实体间需要某种程度的不信任。换句话讲,区块链是一个基于数据库和多个不信任的输入者的技术。
说到不信任的时候我在说什么?我指的是一个用户不愿意别人修改自己“拥有”的数据库。类似的,当读取数据库的内容时,一个用户不会像接受“真理”一样接受另一个用户报告的数据,因为每个用户有自己的经济或政治的动机。
4. 去掉中介
所以这个问题,像之前定义的,是使一个数据库和多个不信任的输入者成为可能。已经有一个众所周知的解决方案:一个广受信任的中间人。这是一个每个输入者都相信的人,虽然他们不见得互相信任。其实,这个数据充满了这种性质的数据库,比如在银行里账户的总账。你的银行控制着数据库,保证每笔交易都是有效的,是被参与交易的客户授权了的。无论你费多大劲的请求,你的银行也永远不会让你直接更改数据库。
区块链取消了可信任的中间人,通过使得数据库可以被多个不可信任的输入者直接更改。没有一个中心的守门人需要校验交易和认证他们的来源。然而,交易的定义延伸包含了授权和可靠的证据。交易可以被每个节点单独的验证和处理,每个节点可以保存一份数据库。
但是你需要问的问题是:你是想要还是真的需要去掉中间人?根据你的使用场景,有一个中间实体维护授信的数据库和作为交易看门人真的有错吗?倾向于一个基于区块链的数据库而不是可信任的中间人的合理理由可能包括:成本更低,交易更快,自动调和,新的监管条例或者简单的找不到合适的中间人。
5. 交易互动 Transaction interaction
所以区块链对有多个互不信任的输入者直接修改共享的数据库是适用的。但这还不够。区块链真正的闪光点在当被多个输入者创造出来的交易有交互的时候。
我说交互的时候指的是什么?往全了说,这指被不同的输入者创造的交易是互相关联的。比方说,小红给了小明一笔钱,小明给了小李一笔钱。这种情况下,小明的交易取决于小红的交易,同时我们无法验证小明的交易除非先查看小红的。正因为这种关联性,这些交易自然的属于同一个共享的数据库。
再往深一层说,区块链一个不错的特征是多个输入者可以互相协作的创造交易,每一方都没有风险。这就使得区块链不需要中间人,来打到每方必须实现自己的义务交易才能发生的情形。
还有一个弱一点的应用是不同独立的输入者互相有关系的情形。一个例子是一个不同实体验证客户不同方面的个人身份的身份数据库。虽然每一个验证证书是单独的,但是区块链提供了一个把所有东西整合在一起的方法。
6. 制定规则
这不是一个独立的条件,但是是之前论证的自然结果。如果数据库可以被多个输入者同时修改,这些输入者并不全部互相相信,那么这个数据库必须有内置的规则限定交易的运行。
这些规则从根本上讲不同于传统数据库的约束,因为他们和变换的合法性有关,而不是与数据库某个特定时间的状态有关。每笔交易都会被网络里的每个节点用这些规则检查,检查失败的将会被拒绝,不会传下去。
资产总账包括了这种规则的简单例子,来避免交易无中生有的创造资产。这个规则说总账里各种资产的数量必须在交易前和交易后保持一致。
7. 选择你的验证者
到现在我们描述了一个交易可以在多个地方发起的分布式数据库,在节点中用点对点的方式传播,被每个节点单独验证。那么区块链从何而来?嗯,区块链的任务是有权威的最终的交易日志,这个日志的内容所有的节点都可证明的认同。
我们为什么需要这个日志?首先,它使得新添加的节点可以从零开始计算这个数据库的内容,而不需要信任其他节点。其次,它解决了一些节点丢失掉交易的可能性,因为系统的瘫痪或者信息交流的短路。如果没有交易日志,这会导致一个节点的数据库和其他节点的有出入,这就有损共享数据库的意义。
第三,两个交易是有可能有冲突的,导致只有一个可以被接受。经典案例是”一个资产两次成功消费”,这种情况下同一个资产发给了两个不同的接受者。在没有中央权威的点对点数据库中,节点对接受哪个交易是有不同意见的,因为没有客观的正确答案。通过交易在区块链中被“确认”,我们保证了所有的节点达成一致的选择。
最后,在以太坊类型的区块链中,精确的交易顺序是非常关键的,因为每一笔交易都会影响到接下来的交易会发生什么。这种情形区块链将定义权威的事情发生的顺序,没有这个交易不能被处理。
区块链从字面上看就是一个区块的链条,在这个链条里每一个区块包括了一群被确认的交易的集合。但谁负责选择进入每个区块的交易呢?在适合企业应用的“私有链”中,答案是一群固定的验证者( “矿工” )来把它们创造出的区块进行数字签名。这个白名单将和某种形式的分布式可达成一致的方案结合起来,避免少数的验证者控制这个区块链。比如说,多链用了一种叫做“采矿多样性”的方案,这个方案里被允许的矿工将循环的工作,同时对不行使职责的节点给予一定程度的容忍。
不管使用哪种达成一致的方案,负责检验的节点都比传统中心化数据库的拥有者有少太多的权利。检验者不能伪造交易,也不能违背规则修改数据库。在资产总账中,这意味着他们不能花别人的钱,也不能改变资产的总量。但是即使如此检验者还是有两种方法来影响数据库的内容:
交易审查:如果足够多的验证者恶意串通,他们可以阻止特定的交易在区块链中被确认,使得这个交易永远的打入冷宫。
偏好性。如果两个交易起了冲突,创造下一个区块的检验者将决定哪个交易被确认,另一个就被拒绝。公平的选择是第一个被看到的交易,但是检验者可以根据其他因素做选择,而不显露出谁先来后到这一点。
因为这些问题,在部署一个基于区块链的数据库时,你需要清醒的认识到谁是你的验证者和你为什么相信他们。根据场景的不同,验证者可以被选择成为:(1)一个或多个被一个组织控制的节点(2)一个维护区块链的一群核心组织(3)网络上的每个节点
8. 为你的资产背书
如果你已经看到这了,你们会注意到我倾向于将描述为共享的数据库,而不是通常上讲的”共享的总账”。为什么呢?因为区块链作为一个技术,可以被用于解决比追踪资产所有权更广阔的问题。任何一个有多个互不信任的输入者的数据库都可以基于区块链搭建,而不需要一个中心化的中间人。例子有共享的日历,维基百科形式的合作和讨论论坛。
话说回来,目前似乎主要是那些追踪金融资产的流动和交易的人对区块链感兴趣。我能想到两个原因:(1)金融业在回应(回想起来,非常小的)类似比特币这样的虚拟货币的威胁。(2)一个资产总账是一个被多个互不信任的实体创造的互相影响的交易共享数据库,这是区块链技术是最简单和自然的应用。
如果你确实想用区块链作为资产总账,你需要回答下一个更重要的问题:流动中的资产的本性是什么?我这么说不是表示现金啊债券啊提货单啊,虽然这些也很重要。问题却是:谁是在区块链上代表资产背后的人?如果数据库上说我有十个单位的什么东西,谁将允许我在现实世界中对那十个单位的东西宣示主权?我应该把谁告上法庭如果我不能将在区块链上声明的资产转换成传统的可见的资产?
当然,这个答案对不同的场景将不同。对货币资产来说,你可以想象监管的银行接受现金,然后为存款人在一个区块链技术下的分布式总账里面加钱。在贸易金融中,信用证和提货单将会被相应的进口商的银行和船运公司来背书。未来,我们可以想象一个一级市场的公司债券直接在区块链上发现来融资的时代的到来。
结论
像我在开篇中提到的,如果你的工程不满足每一个条件的话,你不应该使用区块链。如果前五天任何一条不满足,你应该考虑选择:(1)普通的文件存储(2)中心化的数据库(3)主从数据库复制(4)多个用户可以订阅的数据库
如果你满足了前五条,还有些工作要做。你需要将你的应用程序的规则用数据库的交易来表达。你应该为找到可信任的检验者和如何定义分布式的共识感到自信。最后,如果你想创造一个共享的总账,你需要知道谁会来为总账表示的资产来背书。
译者简介:
卤肉饭:就职于硅谷非主流程序员,毕业于哥伦比亚大学和北京邮电大学,个性新奇有趣好玩儿逗比。