作者: 冒志鸿(ArcBlock 首席执行官、首席架构师)
“名词之争”#
第一次了解“名词之争”这个概念,我是在 2018 年初参加甲子光年主办的区块链大会上。 甲子光年创始人甲小姐在开场演讲中引用了胡适先生的这段文字作为开场——要真正理解和拥抱区块链技术,需要首先摒弃“名词之争”,透过现象看本质。
胡适先生在 1935 年 5 月 12 日《独立评论》第 150 号上发表过一篇文章《 充分世界化和全盘西化》,开头就说到:
二十年前,美国《展望周报》(The Outlook)总编辑阿博特(Lyman Abbott)发表了一部自传,其第一篇里记他的父亲的谈话,说:"自古以来,凡哲学上和神学上的争论,十分之九都只是名词上的争论。"阿博特在这句话的后面加上了一句评论,他说:"我父亲的话是不错的。但我年纪越大,越感觉到他老人家的算术还有点小错。其实剩下的那十分之一,也还只是名词上的争论。"
算下来,1935 年,也就是 85 年前胡适先生写了这篇文章,而其中引用了距那时 20 年前的观点,也就是这是 100 多年前的观点了。直到今天,每每出现新的技术、新鲜事物, “名词之争”还是常常会出现。由于区块链技术仍处于早期,整个行业和大众在一些观点上尚未达成共识,经常会产生“名词之争”。
破除迷思,深入了解区块链的能力与局限#
我和陈俊写了这本《区块链实战:从技术创新到商业模式》专门开辟了四章的篇幅,来分析区块链技术的能力和局限,对很多技术、概念进行了辨析,就是希望能帮助读者更多透过现象看本质,从“名词之争”中走出来。
第 6 章:对区块链的常见误解(摘)#
作为区块链技术先行者,我和我的团队过去两年多在全世界各地进行演讲布道,参加了为数众多的学术、技术和商业会议,加入了多个技术和行业组织。在我们的分享沟通中,发现对区块链的各种误解普遍存在,那些身处区块链行业的个人和机构,也难以避免。这些误解有的是对区块链概念望文生义,有的可能是受一些早期文章过时观点的误导,也有受业内少数原教旨主义者刻舟求剑般的观点影响,还有某些区块链项目炒作夸大甚至不实宣传也遮蔽了对区块链的正确认知。
误解一:区块链上的数据是不可篡改的。区块链上的数据有很强的防篡改能力,但并非绝对不可能被篡改。很多公链会明确声称自己的账本是不可篡改的,然而严格意义上来说,这种说法不完全正确。 一个去中心化程度高的公链,的确具有非常强的防数据篡改能力,可以用在不少需要数据防篡改的场景下。
一些区块链,如比特币、以太坊都可能在链的最“尾部”的区块偶尔出现被系统撤回的情况,这是它们的共识算法导致的正常现象。只有在区块到达“最终确定状态”时,才能认为这些数据已经相当难以被篡改,而在到达最终确定状态之前,都存在数据修改的可能性。
误解二:数据上链后,数据永远不会丢失。和误解一相同,有人认为数据上了链就再也不会丢失而获得“永生”了,这也是片面理解。因其分布式设计,区块链网络创建许多备份,所有备份都点对点更新并同步相同的数据。区块链技术的一个好处是每个用户都可以维护自己的数据副本。每当新的完整节点加入网络时,它们会接触发现其他完整节点并请求区块链网络数据的完整副本,这使得数据的丢失或破坏变得困难。
然而,区块链本身不能被认为是完全不可变的。The DAO 事件的结果是以太坊数据回滚,即回滚到丢失 ETH 之前的数据,所以区块链项目并不存在绝对的数据永不丢失。另外,还可能区块链网络被攻击,在 PoW 共识系统中,攻击者只需获得足够的资源来超过区块链网络其余部分的区块创建速度(持有超过 50%的资源用于生成新区块),即可发起攻击,只不过代价可能非常高昂。
误解三:区块链是去中心化的,因此不可能被关闭或审查。类似前面一些误解,尤其那些持有无政府主义观点的人们在夸大区块链能力的说辞中会认为由于区块链的去中心化特性,让区块链不可能被封锁、关闭,甚至认为这是可以用来抗衡政府及执法部门的技术,其实这也是一种片面的理解。
首先,对于处于小规模测试阶段的公链或联盟链,只要其运行的全部节点被关闭,无论出于什么原因,那么这些区块链就消失了;其次,区块链是一种网络应用,如果某个地区的网络被完全切断,或者通过技术手段阻拦某些网络通讯,即使整个区块链网络没有被关闭,但对这个地区而言其实已经被关闭了。因此,如果出现极端情况,即使是去中心化程度很高的公链也不能排除局部甚至整体被关闭的可能性。
误解四:只要采用区块链技术,系统必然会安全程度更高。事实上,这些年来区块链网络系统被攻击、数字资产被盗等安全事故层出不穷。仅 2019 年,几乎每个月都有较大的安全事件爆发,价值超数百亿元的链上资产被黑客或作恶者以不同的方式窃取,主要类型包括公链底层代码缺陷、智能合约代码缺陷、私钥被窃、携款跑路等。仅智能合约漏洞事件,据媒体报道,2019 年就发生超百起,总损失超 1000 万美元。
作为去中心化系统,区块链有许多天生的优势,但区块链系统始终是需要网络运行的系统,因此传统的网络安全策略和防攻击手段在区块链系统中同样必不可少。计算机系统的安全性其实取决于系统本身的安全性设计,和具体使用某种技术并无必然联系。因此,当你听到“因为采用了区块链技术,因此我们的方案更安全”这样的说法的时候,需要格外警惕。
误解五:区块链必须要挖矿,矿工越多区块链越安全。“挖矿”概念是从比特币使用的工作量证明(PoW)共识机制演变而来的。挖矿的抽象意义其实就是节点对区块链网络的贡献,如果用户并没有为系统做出任何贡献的话,挖矿只是制造虚假参与感的噱头。
事实上,区块链技术的使用并没有消除固有的网络安全风险,仍然需要深思熟虑和积极主动的风险管理。其中许多固有风险涉及人为因素,比如如果用户丢失私钥,则与该密钥相关联的任何数字资产都将丢失,因为重新生成相同的私钥在计算上是不可行的。如果私钥被盗,攻击者将可以完全访问由该私钥控制的所有数字资产。因此,强大的网络安全计划对于保护网络和参与组织免受网络威胁至关重要,特别是当黑客拥有更多关于区块链网络及其漏洞的知识的时候。
误解六:区块链让用户自己保管私钥,因此更安全。现在的区块链系统建基于加密算法和签名算法,已经使用区块链的用户都知道“私钥”的重要性。由用户自己控制私钥的方式和传统互联网的用户账户密码的方式有很大不同,由于近年来互联网账户被盗的事件频发,有人认为用户自己控制私钥方式的系统会更安全,实际上这也是一种误解。
从安全角度而言,两种方式各有利弊。用户自己控制私钥方式的明显好处就是系统被攻击或者从系统内部来攻击的难度加大了,但问题是用户从此多了很多私钥要自己管理的烦恼,而且私钥一旦泄漏是无法修改的,甚至明知已经泄漏也无法阻止攻击、挽回损失。另外,如果私钥丢失,系统运营者也无法为用户找回资产。相比之下,传统 IT 系统在这方面有更好的用户体验,用户保管私钥没有这么大的心理压力。还有很多密码管理的实践,例如定期滚动管理用户密码(每过一段时间时间系统要求用户必须修改密码防止泄漏),用户担心密码有泄漏可能可以主动更换密码转移账户等。这些安全实践在今天大部分区块链系统上目前都还没有办法实现。
误解七:区块链上的智能合约是不受操控的,因此更安全、公平、可靠。“智能”合约的“智能”之处在于由计算机代码评估和执行,无需第三方介入,实现了去信任化的合同自动执行。智能合约会执行及时和客观发生的事情,而不是指望另一方兑现承诺,但真正的智能合约却很难形成。因为真正智能的合同需要考虑到所有情况。换言之,要求合约无需信任,意味着合约完全不能有任何模棱两可的空间。
The DAO 的资金安全事件导致了人们对以太坊智能合约以及其宣传的“代码即法律”的质疑,有人认为这个从 The DAO 钱包持续提取 ETH 的人是攻击者,而这个行为属于盗窃,而另有人认为,这从某种意义来说,只不过是找到了一种以违背编写者意图但完全合法使用代码获益的方式,如果“代码即法律”则无可厚非。此事发生之后,以太坊开发者对以太坊进行了回滚产生了硬分叉,引发了更大的争议并直接导致以太坊社区分裂为两大群体。
误解八:采用区块链,用户的隐私问题就得到解决。除了少数专注于隐私需求的区块链技术,包括比特币在内的大部分区块链并不实现真正的匿名。区块链上的数据基本完全公开,也就是每笔交易都能清晰地了解相关的账户及其资金往来,即使不知道某个账户背后对应的是谁,但这个账户在区块链上的一举一动,都是透明公开,而且难以篡改。相比之下,传统互联网的业务数据往往不是全公开的,出现隐私问题常常常是因为某些互联网企业出售或泄露了含有用户隐私的数据。
区块链存在”隐私“的地方是区块链的账户和它背后的真实用户身份在区块链上不存在对应关系。由于区块链的“自主账户”不需要向任何人或机构申请,因此没有任何信息能将这些账户与个人信息关联起来。另外,很难从采用 P2P 通信方式的区块链本身的记录里发现使用者的网络 IP 地址等传统互联网用户定位方法。从这个角度来看,区块链的匿名性的确比互联网应用要更好,因为区块链上虽然交易信息全公开,但毕竟没有任何敏感的个人信息,自然不存在泄露的问题。
误解九:区块链能控制用户的数据,不被非授权使用。区块链技术可用于更好地控制用户数据的访问范围和记录产生可审计的数据访问报告,但是区块链本身并不能控制被授权方滥用这些已授权数据。彻底解决用户隐私和数据滥用问题,仍然需要法律法规的支持配合。
误解十:量子计算实现后,区块链就不再有意义了。量子计算机并非遥不可及,一般认为在 10 到 20 年内,量子计算就能投入实用。量子计算机的计算并行这一特性意味着,随着量子比特数的增加,其计算能力以指数级别增加。量子计算机可能会改变目前区块链挖矿行业,拥有量子计算能力的挖矿速度会高于现在的矿机,更利于解决哈希函数的运算。
需要说明的是,目前量子计算技术还处于非常早期的阶段,据一篇标题颇为耸人听闻的文章 《量子计算机能在 8 小时内破解 2048 位 RSA 加密》指出,据有关专家估算,使用量子计算破解 2048 位的 RSA,考虑到必要的纠错等因素,量子计算机需要的量子比特约需要 10 亿个量子位。IBM 在 2020 年公开展出的量子计算机 IBM Q System One 仅仅有 20 个量子位,而目前报道的最大量子位 Google 量子计算机也就是 57 个量子位。也就是说量子计算技术还需要很长时间的发展才有可能撼动现代加密算法的基础。
因此,面对仍处于技术早期阶段的区块链,我们应该以“区块链技术如何使我们受益”的思维方式来思考和应用,而不是一味纠结于“如何才能使应用融入区块链技术范式”。应该像对待其他任何新技术一样,来准确深入地理解区块链技术的能力和局限,并在适当的情况下采用它。在下面其他章节,我们选择了几个对区块链技术的常见且重要的误解和迷思,请读者和我们一起拨云见日,逐步揭开区块链技术的本质。
第 7 章:关于加密货币、加密资产和通证的误解(摘)#
毋庸讳言,这几年来以比特币为主的各种加密资产及其带来的财富效应,才是吸引全世界的普通大众关注了解区块链技术的最大动力,在此之前可能还从未有任何一种计算机技术让如此多的行外人士如此着迷。
误解一:区块链就是比特币或数字货币。这是一种对区块链技术缺乏基本认识的典型误解。比特币、各种加密数字货币只是区块链的一种应用,而区块链支持很多种其他的应用。
误解二:区块链的作用就是用来“发币”。与误解一类似,区块链除了用于“发币”、发通证之外有很多种用途。“发币”的说法常来自炒作加密货币时代的产物。
误解三:“币”或“通证”除了用于炒作没有别的作用。“通证” 有相当多的用途,非常广范的应用场景,绝大部分区块链应用的设计都离不开使用某种形式的通证,即使这些应用不需要使用虚拟货币。加密货币交易虽然在过去可能是加密货币的主要用途,但已经有越来越多的实用项目采用区块链和通证技术。
误解四:政府要发国家数字货币就必须使用区块链。这也是一种误解,设计和实现一个 Token 并不是非需要区块链不可,完全可以不采用区块链技术。不过在技术发展的今天,采用区块链是一个比较有利的选择。
误解五:企业政府必须使用“无币区块链”。“无币区块链” 是一种“名词之争”,是一些人用于把“区块链技术” 和“币”划清界限而炮制的一种不科学的说法,误导性较强。某种角度而言,几乎不太存在无币(通证)的区块链应用场景。 “无币区块链”就好比是“无数据的数据库”一样荒唐可笑。
第 8 章:对智能合约和虚拟机的误解(摘)#
对很多具有计算机技术背景的人来说,“智能合约”可能是区块链技术里最感兴趣的部分。顾名思义,“智能合约”给人以无限的应用遐想。过去几年,可以说“智能合约”是我接触到的区块链领域里最容易打动客户的理念,然而不幸的是,这往往也是客户最容易误解的概念。 “智能合约”有着无限的可能性,但在今天的实现程度上还有着很多局限,正确认识智能合约的能与不能、现状和未来,有助于我们思考和决策在自己的业务系统中应该如何定位和使用智能合约。
“智能合约”的声名鹊起主要得益于以太坊的成功,而以太坊是用虚拟机的方式来实现其智能合约的,这同时也导致了很多人认为以太坊的实现方式是唯一方式,从而引发了对区块链虚拟机的各种误解。
误解一:区块链必须支持智能合约。区块链技术和智能合约的结合是非常好的形式,区块链具有去中心化、难以篡改、透明可追踪等优点,天然适合于智能合约。智能合约的确是一个令人激动的特性,也因为区块链的普及而名声大噪。然而,智能合约与区块链是两个相互独立的概念,并不互相依存,区块链本身未必需要支持智能合约,也并非所有的应用场合都需要智能合约。
误解二:区块链应用就是智能合约自身。这一误解可能来自以太坊“下一代智能合约与去中心化应用的平台”这一定位宣传过于成功,让很多人在智能合约和应用之间划上了等号。如果真正了解智能合约,就会发现智能合约其实只是一个区块链应用中的一小部分 ,要构建一个让最终用户能够完整体验的应用,光靠智能合约本身通常是不够的,还需要其他业务逻辑、界面逻辑等的支持。
误解三: 智能合约必须就是程序代码。以太坊的智能合约概念成功让很多人以为智能合约就必须是程序代码,但实际上这是一种误解。 以太坊的智能合约引入过程性代码的设计方式,有很强的灵活性,但导致这种智能合约在使用起来只能由软件工程师来完成。其实智能合约的实现可以有多种方式,把智能合约用程序代码来定义,只是一种方式。 未来一定会出现更多种智能合约的形态,例如表格方式、规则描述方式、可视化方式。
误解四:智能合约实现必须实现专用的语言。很多区块链项目都为自己的智能合约设计了新语言,例如以太坊使用的 Solidity,Facebook 的 Libra 设计了 Move 这种专门的智能合约语言。那么是否实现专用的新智能合约语言就更好呢?我觉得这很可能是一种不好的风气,大部分新的程序设计语言并无必要,而且在今天的计算机科学基础上设计实现一门新语言本身并非难事,但要设计一个优秀的新语言则难上加难。很多区块链项目可能只是出于市场宣传或炫技而设计新语言。
未经时间考验的语言,可能存在不完善,例如以太坊智能合约暴露的安全问题,也反映出以 Solidity 作为新语言设计上的不够完善。某些新语言并不能带来功能实现上的超越,反倒不如经历过很长时间很多优化的经典语言更加安全有效。
目前有不少区块链采用基于 WebAssembly(缩写 WASM)的虚拟机来实现智能合约。在 WASM 生态里,结合 LLVM 这样的可以把实现语言和目标编译代码解耦合的成熟技术,理论上未来可以用任何语言来进行开发。
误解五:智能合约必须“图灵完备”。以太坊的智能合约是图灵完备的,这一直是以太坊宣传的一个重要卖点,但并非所有的区块链智能合约都需要是图灵完备的。但智能合约完全可以多样,例如比特币脚本特意设计成非图灵完备。图灵完备与否只是一种设计需要,并不代表其优劣。我相信会有越来越多的区块链会考虑实现非图灵完备的面向领域的语言(Domain Specific Language,缩写 DSL)来实现高效率、安全的智能合约开发。
误解六:支持智能合约必须使用虚拟机。认为支持智能合约的区块链必须要有虚拟机,这也是以太坊风靡之后产生的误解。区块链的共识机制要求所有参与者计算结果保持一致,但是各节点可能会因为各种原因输出不同的结果。以太坊为了让所有节点保持一致写了一个虚拟机,就是为了实现智能合约代码的一致性,并让以太坊的智能合约在这个容器里面运行。然而,理论上虚拟机并不是支持区块链运行智能合约的必要条件。
区块链的智能合约需要在一个资源隔离的环境运行,但是这个环境不局限于虚拟机。只要达到一个沙盒执行环境标准(可以通过命名空间的隔离),保证合约和合约之间、合约和宿主系统之间进行了有效的资源隔离就可以实现。而智能合约是用户编写的,需要防备恶意或故障智能合约的不良影响。
第 9 章:对云计算和区块链关系的误解(摘)#
在过去几年里,我经常会遇到一些自称“比特币经验深厚”的人声称区块链与云计算是截然对立的;认为区块链使用了云计算会变成中心化应用;甚至由于比特币的矿机、矿场无法基于云计算服务来部署,就认为云计算不适用于区块链。然而,最近几年,云计算厂商开始积极拥抱区块链,它们大部分所支持的区块链多为适用于企业的联盟链或私链,因此,常会听到来自“公链”们的批评。各种交错的不同声音有时会让人困惑,到底区块链和云计算技术是什么样的关系?是矛盾对立还是相辅相成?
误解一:用云计算搭建的就不是真正的区块链。这一错误认知最初来自于例如比特币等 PoW 挖矿无法利用云计算的情况,但是在本章我们介绍了云计算服务对区块链部署提供的价值,而且事实上目前有数以千万计的区块链节点和应用都部署在云计算之上。
过往的区块链项目,因为云计算的技术和产品发展尚未达到现有的发达和丰富,往往是项目设计之初,并没有考虑到与云计算的结合,又可能是共识算法的局限,也无法利用云计算服务的便利与高效。新一代的区块链项目设计者,已经意识到云计算对区块链项目大有裨益,无论从底层设计和共识算法角度出发,无论是从安全性还是稳定性来说,都会更多考量利用云计算服务,目前有越来越多的区块链项目支持云计算部署,我们相信这是一种趋势。
误解二:使用了云计算的区块链更为“中心化”。区块链该不该使用云计算,其实这一考量与是否中心化并无关系。对于区块链使用云计算会变得中心化的误解,主要是来自于认为部署在云计算的区块链项目就受制于中心化的云计算厂商这种看法,但这种看法显然十分偏颇。因为事实上任何一个项目就算不部署在云计算平台上,也需要部署并受制于其他厂商的平台,而根据一般经验,普通机房比大型云计算服务企业的风险显然要大得多。
误解三:云计算厂商出于商业目的能让区块链服务变得更中心化。这种担心有一定的道理,云计算厂商作为商业机构当然希望把客户更牢地“锁定”在自己平台上,但恰恰区块链本身的去中心特点使得云计算厂商更难把区块链占为己有。
去中心化应用往往更多是一种“协议”, 也就是要求应用可能会被多方部署在多个不同环境,只是因为采用相同的“协议”,或者基于相同的区块链才能一起协作。在这种思路下,应用的开发者会更不容易被“云锁定”。
目前,云计算服务商被人诟病的问题集中于“云锁定”,如应用一旦使用了某个云平台上很多“高级性能”,就产生了“依赖性”,难以切换到别的云上。区块链在软件架构设计角度来看,有时候像一种软件连接器(Software Connector)或者软件总线(Software Bus)的位置,能提供一种跨越云的高层协议,因此更难被“云锁定”。