Block Chain Learning Notes

区块链是什么

区块链技术是由比特币创造的,本文也将从比特币开始进行引导,一步一步告诉大家什么是区块链。如果你想立马知道区块链是什么,也可以直接转到文章末尾的区块链定义

区块链,可能是当下最有前景又充满分歧的技术与经济趋势。它给数字世界带来了“价值表示”和“价值转移”两项全新的基础功能。其潜力正在显现出来,但当下它又处于朦胧与野蛮生长的阶段。

对比互联网的发展史,现在的区块链可能相当于 1994 年的互联网,即互联网刚刚进入大众视野的时期,那也是第一波互联网革命萌芽的时期。谷歌、亚马逊、Facebook、腾讯、阿里巴巴、优步、滴滴,甚至现在市值超万亿的苹果都得益于那一时刻。

现在区块链技术可能带来互联网的二次革命,把互联网从“信息互联网”带向“价值互联网”。在区块链的对照之下,人们发现,最初被形象地称为“信息高速公路”的互联网处理的是“信息”,而区块链能处理的是“价值”。

变革即将发生,未来已来。我们又一次处于革命的起点——价值互联网的变革,而要理解价值互联网的未来,我们先要搞明白区块链技术是什么。

让我们回到10年前,从中本聪(Satoshi Nakamoto)发明比特币的那一刻说起。

比特币的诞生

2009年1月3日,在位于芬兰赫尔辛基的服务器上,至今匿名的神秘技术极客中本聪生成了第一个比特币区块,即所谓的比特币创世区块(genesis block)。

在创世区块的备注中,中本聪写入了当天英国《泰晤士报》的头版头条标题:

“The Times 03/Jan/2009 Chancellor on brink of second bailout for banks”
“《泰晤士报》,2009年1月3日,财政大臣站在第二次救助银行的边缘”

这样做,他记录了比特币系统启动和创世区块生成的时刻,又借这句话表达了对当时全球金融体系的暗讽。2009 年年初,全球金融体系刚经历了 2008 年金融危机的冲击,看起来摇摇欲坠。

在生成创世区块时,按自己设定的规则,中本聪获得了 50 个比特币奖励,这是最早的 50 个比特币。从创始区块开始,在比特币的账本上每 10 分钟就有新的数据区块被增加上去,新的比特币被凭空发行出来。比特币的去中心网络开始运转,扩展到现在的由数万个节点组成的全球网络。

在比特币的创世时刻,它的三个组成部分都出现了,即加密数字货币(cryptocurrency)、分布式账本(distributed ledger)、去中心网络(decentralized network),如下图所示。

Block Chain Learning Notes
图1:比特币的三个组成部分

2008 年 10 月 31 日,中本聪向一个密码学邮件列表的所有成员发送了一个电子邮件,标题为“比特币:点对点电子现金论文”。

他写道:“我一直在研究一个新的电子现金系统,它完全是点对点的,无须任何的可信第三方。”比特币的起源应远早于这个日期,中本聪曾说,他从 2007 年 5 月就开始为比特币项目编程。2008 年 8 月,他注册了 bitcoin.org 域名,这是现在比特币项目的官方网址。

在邮件中,他附上了比特币白皮书的链接,论文题为“比特币:一个点对点电子现金系统”(Bitcoin:A Peer-to-Peer Electronic Cash System)。中本聪在2008年发表的这篇论文可能是互联网发展史上最重要的论文之一,其他重要论文有利克里德写的开启互联网前身阿帕网的“计算机作为一种通信设备”(1968年)、蒂姆·伯纳斯-李写的万维网协议(WWW)建议书“信息管理:一个建议”(1989年)、谷歌联合创始人谢尔盖·布林与拉里·佩奇写的搜索引擎论文(1998年)等。

可以合理地推测,中本聪不是一个学院派的研究型学者,他可能是一个做实际软件工程开发的工程师,因为他不只设计了比特币系统,还把它开发出来,让它在互联网上运行起来。他可能是先开发了软件,才写了上面提到的重量级论文,来解释自己的设计。

2008 年 11 月 16 日,中本聪公布了比特币系统的源代码。在发布白皮书、将软件代码开源后,在 2009 年 1 月 3 日这一区块链的创世时刻,最终他在互联网上上线了比特币网络。之后,中本聪和几个开发者在网上一起讨论想法,继续开发迭代。随着比特币网络的成熟,他的活动开始减少,比特币系统逐渐进入自治运转的状态。最终,在发明比特币系统 3 年后,自 2011 年 11 月后,中本聪永远不再出现。他成了一个永远匿名的传奇,没人知道他是谁,他只留下了自己的创造。

中本聪为什么创造比特币

在创造比特币的过程中,中本聪发明了区块链技术,区块链是源自比特币的底层技术。那么,他为什么要创造比特币?他想解决什么难题?

现在,比特币常被称为一种“加密数字货币”,人们常很关注其中的“货币”二字。其实,比特币并不具备现在各国法定货币的特征,它只是一种数字形式的特殊商品。比特币现在的市场价格和暴涨暴跌也影响着人们对它的看法,人们把它类比为黄金、郁金香等各种投资、投机标的。

但如果回到中本聪创造它的时刻,我们会看到,比特币的出现是源于技术极客想解决的一个技术难题:“在数字世界中,如何创造一种具有现金特性的事物?”“比特币:一个点对点电子现金系统”这个标题体现出了中本聪想解决的难题:他想创造在数字世界中可用的电子现金,它可以点对点也就是个人对个人交易,交易中不需要任何中介参与。

来对比看看。在物理世界中,一个人可以把现金纸币给另一个人,不需要经过诸如银行、支付机构、见证人等中介机构。

但由于数字文件是可复制的,复制出来的电子文件是一模一样的,因而在数字世界中,我们不能简单地用一个数字文件作为代表价值的事物。同时,我们在支付机构中有多少钱,并没有像一张张钞票一样的数字文件可以代表,钱仅是中心化数据库中的记录。

在数字世界中,当一个人要把现金转给另一个人时,必须要有中介机构的参与。比如,我们通过支付宝转账的过程是:支付宝在一个人的账户记录里减掉一定金额,在另一个人的账户记录中增加一定金额。

在数字世界中,如何创建一个无须中介或者说去中心化的数字现金,一直是一个难题。由于数字文件可以完美复制,如果没有一个中心化数据库做记录,那如何避免一个人把一笔钱花两次?

这就是所谓的双重支付或双花问题(double spending)。在比特币出现之前,我们熟悉的主要电子现金系统(如PayPal、支付宝等)都是依靠中心化数据库来避免双花问题,这些可信第三方中介不可或缺,见图 2。

Block Chain Learning Notes
图2:比特币是点对点的现金,无须任何中介

但在另一条道路即去中介或去中心化的电子现金这条路径上,有很多技术极客一直在做着各种尝试,只是一直未能获得最终的成功。

到了 2008 年,中本聪借鉴和综合前人的成果,特别是现在常被统称为密码朋克(cypherpunk)的群体的成果,改进之前各类中心化和去中心化的电子现金,加上自己的独特创新,创造了比特币这个点对点电子现金系统,在无须中介的情况下解决了双花问题。

特别地,比特币这个电子现金系统是同时去中介化和去中心化的:

  • 个人与个人之间的电子现金无须可信第三方中介的介入,这是去中介化。
  • 这个电子现金的货币发行也不需要一个中心化机构,而是由代码与社区共识完成,这是去中心化。

要注意的是,这个“电子现金”中的现金指的并非货币,它只是在解决难题的过程中被借用来在数字世界中代表价值的说法。这样说是为了便于理解,在现实中,最常见的代表价值的事物是现金。

最初,比特币这个用以表示价值的电子现金并没有价格。比特币系统只是在逻辑上可行的系统,是解决了一个难题的技术玩具。2010 年 5 月 22 日,在一个网络论坛上,有一个程序员用 1 万枚比特币换了两张棒约翰比萨的代金券,比特币第一次有了一个公允价格:1 万枚比特币价格为 25 美元。为了纪念这一天,每年的 5 月 22 日变成了区块链世界的一个节日——比特币比萨节。

此后,比特币虽然从来都不是货币,但逐渐地有了价值与价格。比特币的价格在*市场交易中被确定,又持续、反复地大幅波动。但是,不管是从早期的 1132 美元跌掉一半,还是在 2017 年年底快速上涨到接近 2 万美元,又在几个月内跌到只有三分之一,比特币系统和它底层的区块链技术都保持稳定。

中本聪设计和编码实现的比特币电子现金系统至今已运转近十年。比特币系统已经从一个技术玩具变成一个运转得近乎完美的系统,并且看起来还将长期稳定地运转下去。

从比特币系统中发现区块链

在物理世界中,现金是一张张纸币,但其背后有着一整套与货币相关的金融体系:*银行、银行、印钞厂、信用卡组织,以及后来出现的第三方网络支付机构等。

在数字世界中,想要创造一种去中介化、去中心化的“电子现金”,同样要设计一套完整的系统。这一系统要能解决以下一系列问题:

  • 这种“现金”如何公平、公正地发行出来,不被任何中心化的机构或个人控制?
  • 如何实现像在物理世界中一样,一个人可以直接把现金递给另一个人,无须任何中介的协助?
  • 这种电子现金如何“防伪”?在数字世界中,这个问题可转换为,一笔电子现金如何不被花费两次?

中本聪设计和开发了比特币系统,完美地解决了这些问题。说起比特币,人们常指的是比特币这种做价值表示的电子现金。其实,作为电子现金的比特币只是比特币系统的表层,比特币系统包括三层,见图3:

  • 最上一层是比特币这种电子现金。这是整个系统的应用层。
  • 中间一层的功能是发行比特币与处理用户间的比特币转移。这一层也叫比特币协议(bitcoin protocol),是整个系统的应用协议层。
  • 最底层是比特币的分布式账本和去中心网络。这一层也被称为比特币区块链(bitcoin blockchain),是整个系统的通用协议层。

比特币系统的三层命名(应用层、应用协议层、通用协议层)源自知名区块链研究者梅兰妮·斯万,她也提出了被广泛引述的一种阶段划分:区块链 1.0 是货币、区块链 2.0 是合约、区块链 3.0 是应用。

梅兰妮·斯万(Melanie Swan)著有《区块链:新经济蓝图及导读》(Blockchain:Blueprint for a new economy)。应用层、应用协议层、通用协议层的分类参见她的演讲。

Block Chain Learning Notes
图3:一张图看清比特币与区块链

比特币系统实现的去中心化的点对点电子现金,其发行与转账靠的是中间的比特币协议层。类比现实货币系统,这一层的角色相当于*银行(发行货币)与银行(处理转账)等金融机构。

来深入看看名为“比特币协议”的这一层。比特币系统架构图又常被进一步细分为五层(见图4),它对应的是比特币协议和比特币区块链两个部分。在这个五层架构中,比特币协议层被细分为:应用层、激励层和共识层。

Block Chain Learning Notes
图4:比特币系统架构图

在设计比特币系统时,中本聪创造性地把计算机算力竞争和经济激励相结合,形成了工作量证明(proof-of-work,POW)共识机制,让挖矿计算机节点在计算竞争中完成了货币发行和记账功能,也完成了区块链账本和去中心网络的运维。这就形成了一个完整的循环:矿机挖矿(算力竞争),完成去中心化记账(运转系统),获得比特币形式的经济激励(经济奖励)。

比特币的工作量证明共识机制是承上启下的一层,连接了上层应用与下层技术:在其上的层次为电子现金的发行、转账、防伪;在其下的层次,去中心网络的节点达成一致,更新分布式账本。

之后在讨论区块链的现在与未来时,我们会不断地回到比特币系统的设计上来,它是一个简单又精妙的系统,融合技术和经济因素,是区块链所有创新的源头。

区块链的定义

至此,相信读者已经大概能明白了区块链是什么了,最后,再让我们从不同的角度给区块链下一个定义吧。

第一种区块链的定义(比较通俗)

比特币:一种加密数字货币;区块链:一种基础技术。

区块链是一种源自于“比特币”的底层技术。换句话说,比特币是区块链技术的第一个大获成功的应用。

第二种区块链的定义

区块链是数字世界中进行“价值表示”和“价值转移”的技术。区块链硬币一面是表示价值的加密数字货币或通证,另一面是进行价值转移的分布式账本与去中心网络。

分布式账本与去中心网络也常被称为“链”,它可被视为一个软件平台;而表示价值的通证常被称为“币”。

通证存储在链上,通过链上的代码(主要形式的智能合约)来管理,它是可编程的。

Block Chain Learning Notes
图5:区块链的两种定义

【讨论】当我们说区块链时,我们在说什么

比特币系统包括三层:比特币、比特币协议、比特币区块链,即比特币的分布式账本与去中心网络。那么,从比特币系统来对照看,说区块链时,我们说的可能是什么?

Block Chain Learning Notes
图6:从比特币系统看区块链是什么

区块链这个说法包括四种可能性,所覆盖的范围逐步变大,见上图:

  • 可能性之一,区块链指的是比特币的数据结构,即由数据块(block)连接形成的链(chain),这也被称为“分布式账本”。在比特币白皮书中,中本聪分别提及了区块和链,但后来它们才被组合成了区块链(blockchain)这个新词。
  • 可能性之二,区块链指的是比特币的分布式账本和去中心网络的组合。对应于比特币系统,它指的是整个第三层比特币区块链。
  • 可能性之三,区块链指的是比特币系统的第二层(比特币协议)和第三层(比特币区块链)的组合。它包括分布式账本、去中心网络和比特币协议。
  • 可能性之四,区块链指的是整个比特币系统,包括所有三层,既包括价值表示的比特币,也包括了背后支撑的整个系统。从这个范围看,是把区块链看成一个既包括技术部分,又包括经济部分的完整系统。

大众在提及区块链时,常指的是第四种最大的范围,即“账本+网络+协议+货币”。在产业中,人们在提到区块链时,通常指的是第三种范围,即“账本+网络+协议”。而很多软件开发者在说起区块链时通常指的是第二种范围“账本+网络”,即分布式账本加去中心网络。

现在,包括我在内的很多人都有一种看法是,将基于区块链的价值表示物都称为通证,并把比特币等代币(coin)视为通证的一个特定种类。通常而言,提及加密数字货币、通证、代币时,我们指的都是基于区块链的、在数字世界中进行价值表示的事物。如果采用“通证”说法,区块链的最大范围包括的则是“账本+网络+协议+通证”。

加密数字货币前传

加密数字货币有着非常漫长的历史,这个冷知识专栏用几个主要人物和他们的创造,来展示一个简明的加密数字货币前传。

区块链:技术驱动金融》一书的前言“通往比特币的漫长道路”(杰里米·克拉克/文)从技术与历史的角度对加密数字货币的历史进行了详细的阐述,这里参考了他的梳理分析。

1) 1983年,大卫·乔姆(David Chaum)最早提出把加密技术用在数字现金上

在物理世界中,现金可以非常简单,它需要的是防伪功能。现金是一张纸条,我可以在一张纸条上写“拿到这张纸条的人可以找我领取一只羊”,然后签上自己的名字。签名就是防伪措施。我把纸条拿给你,纸条到你手中,我就没有了。

在数字世界中,情况开始变得复杂:这张纸条和上面的签名是一个数字文件,而电子文件可以被无数次地完美复制。把这个电子文件给你之后,我还可以再把这个电子文件给第三个人。这就是所谓的双重支付(double spending)问题。

大卫·乔姆提出了一个创造性的方案,在数字世界里解决了这个难题。他的方法是采用这样的逻辑:在一张纸条上,你选择一个只有你知道的序列号,然后我在上面签名。由于我不知道这个序列号,因此我没法再复制一份这张纸条给另一个人。这就是密码学上所谓的盲签(blind signature)。这个思路形成了“第一个真正意义上的电子货币方案”。1989年,大卫·乔姆还创建了数字现金公司(DigiCash)来把自己的想法商业化,但未能被大规模接受。

这个方案的缺点是,它要运转起来,就必须有一个所有参与者都信任的中心化服务器来进行这些“数字纸条”的验证。

2) 1997~1998年,亚当·贝克(Adam Back)与哈希现金(HashCash)、戴伟(Wei Dai)与B币(B-Money)、尼克·萨博(Nick Szabo)与比特黄金(bit gold)、哈尔·芬尼(Hal Finney)与工作量证明(POW)

在比特币白皮书中,中本聪引用了1997年亚当·贝克设计的哈希现金、1998年华裔密码学家戴伟设计的B币等前人的成果。2010年,由于*试图删除比特币词条,因此中本聪与人讨论了如何修改词条描述以让*接受,他建议这样写:“比特币是戴伟在1998年在密码朋克中所提到的B币构想和尼克·萨博提出的比特黄金的具体实现。”他说是具体实现,是因为B币和比特黄金都只是停留在构想中。

这就引出了区块链领域的一个重要人物——计算机科学家尼克·萨博。他在1998年提出了名为比特黄金的方案。在现在的区块链世界中,尼克·萨博有着更为重要的位置:萨博是“智能合约”(smart contract)的提出者,1993年他写出了“智能合约”论文。智能合约是区块链处理交易的核心方式,区块链应用的实质可被看成是一个个智能合约的组合。

这一阶段的第四个重要人物是知名密码学家哈尔·芬尼,他是著名的PGP加密中的“G”,是密码朋克圈中的前辈。他在2004年推出了自己版本的采用工作量证明(POW)机制的电子货币。在比特币开发过程中,哈尔·芬尼与中本聪有很多互动,比特币的第一笔转账就是中本聪转了10个比特币给哈尔·芬尼。

他们四人的具体设想各有不同,但有一个共同点,即都是让计算机进行计算,从而“创造”电子现金,它们是比特币系统让计算机进行加密计算的工作量证明和“挖矿”的创意来源。这非常重要,有了这个想法,中心化服务器才可以被去中心网络所取代,困扰数字货币的难题被解决了。

再往前,这个想法可追溯到1992年密码学家辛提亚·沃克(Cynthia Dwork)、摩尼·纳欧尔(Moni Naor)提出来的用于减少垃圾邮件的一个方案,对此杰里米·克拉克在《区块链:技术驱动金融》一书中解释说:“设想你每次发送邮件时,计算机都不得不花几秒钟解决一道数学计算题目。如果你没能附上答案,收件人的邮箱会自动忽略这封邮件”。

3) 2008年10月,中本聪发布论文“比特币:一个点对点电子现金系统”

最终,中本聪把前人的创新综合起来,实现了一种在发行和交易上都去中心化的电子现金。

对于前人的数字货币系统(比如乔姆的系统)为什么会失败,中本聪曾经写道:自20世纪90年代以来所有的虚拟货币公司全都失败了……我希望,人们可以看到,这些系统之所以失败,显然是因为它们的中心化控制这一特性。我想,我们正在首次尝试建立一个去中心化的、非基于信任的系统。

这里他提到了两个相关的词,一是去中心化(decentralized),二是非基于信任的(non-trust-based)。去中心网络一定是非基于信任的。

以太坊创始人维塔利克·布特林(Vitalik Buterin)在以太坊白皮书中也很好地概述了这段历史,他是围绕“去中心化”这个关键词展开论述的:“去中心化的数字货币概念,正如财产登记这样的替代应用一样,早在几十年以前就被提出来了。

20世纪八九十年代的匿名电子现金协议,大部分是以乔姆的盲签技术为基础的。这些电子现金协议提供具有高度隐私性的货币,但是这些协议都没有流行起来,因为它们都依赖于一个中心化的中介机构。

1998年,戴伟的B币首次引入了通过解决计算难题和去中心化共识创造货币的思想,但是该建议并未给出如何实现去中心化共识的具体方法。

2005年,芬尼引入了“可重复使用的工作量证明”(RPOW)概念,它同时使用B币的思想和亚当·贝克提出的计算困难的哈希现金难题来创造密码学货币。但是,这种概念再次迷失于理想化,因为它依赖于可信任的计算作为后端。

2009年,一个去中心化的货币第一次被中本聪实现,它通过已有公钥加密方式来管理所有权,并用一个名为工作量证明的共识算法来记录谁拥有货币。”

什么是去中心化

中本聪解决了自己定义的难题“点对点的电子现金”,在这个过程中,他“发明”了区块链技术。比特币系统融合密码学、博弈论和软件工程等三个领域的技术与理论,区块链技术是已有技术巧妙地组合形成的创新。中本聪不是凭空解决“点对点电子现金”这个难题的,他沿着前人的足迹前进,只是他完成了最后一跃。

接下来,我们来具体地看中本聪是如何解决他定义的难题,创造一个在数字世界中做价值表示的事物的。在讨论中我们会特别关注,他是如何实现“去中心化”的?

什么是去中心化?

在说“货币”时,我们讨论的是数字世界中的价值表示。在互联网上的数字世界中,人们曾设计出各种各样的电子现金或数字现金方案,在为《区块链:技术驱动金融》一书撰写前言时,杰里米·克拉克收集了约 100 种支付系统。他写道:“在通往比特币的道路上,布满了无数失败的尝试。”在所列的各种系统中,他认为大众所知道的只有 PayPal。当然,在移动支付超前发展的中国,我们都很熟悉支付宝与微信支付。

一直以来,数字世界中的“货币”有三种形式(见下图):

  • 中心化的在线支付;
  • 中心化的计算机点数或互联网积分;
  • 去中心化的电子现金。
Block Chain Learning Notes
图1:数字世界中“货币”的三种形式

第一种形式:中心化的在线支付

我们常用的 PayPal、支付宝、微信支付都是中心化的在线支付,在这些支付系统中流转的是映射到数字世界的各国的法定货币(也称法币)。

法币(fiat money)是“法定货币”或“法偿币”的简称,它依靠*的法令成为合法流通的货币。法币是各国*发行的纸币,发行者没有将货币兑现为实物(如黄金)的义务。

法定货币的价值来自拥有者相信货币将来能维持其购买力,本身并无内在价值。历史上,在*强制规定纸钞为法定货币之前,大多数流通的货币具有一定的内在价值,例如金币、银两,它们又被称为商品货币(commodity money)。

在布雷顿森林体系中,35美元能兑换1盎司(1盎司=28.35克)黄金,因而当时的美元不是法币。之后,当美元与黄金脱钩后,美元就变成了法币。

第二种形式:中心化的计算机点数或互联网积分

中心化的互联网积分/计算机点数是指 Q 币、游戏币、航空里程等,它们还曾有一个更为大众所熟知的名字——虚拟货币。通常,它们不与物理世界的法币对应,而是由商业公司中心化发行,仅可以在一家公司的体系中使用。

第三种形式:去中心化的电子现金

去中心化的电子现金已经被计算机密码学家探索了多年,沿着前人的探索路径,中本聪最终将这条路径变成了现实。中本聪设计和开发了比特币系统,并催生了众多加密数字货币和区块链技术项目。

下面来分别看看这三种形式。三种形式与物理世界中的现金的对比如图 2 所示。

Block Chain Learning Notes
图2:一组对比:是否去中心化与是否自行发行

第一种形式:PayPal、支付宝、微信支付

现在,被互联网用户广泛使用的主流支付系统是 PayPal、支付宝,以及后来出现的移动支付 Square、微信支付等。这些第三方在线支付系统依赖于物理世界中的货币系统与金融体系,它们在数字世界中为用户提供支付、转账等服务。在使用它们时,我们所用的钱是物理世界中的法币,如美元、人民币、欧元、日元等,钱从银行账户中被映射到网络支付账户中。

过去,信用卡、储蓄卡等塑料卡片实现了纸币现金的数字化,把纸币现金变成了卡片账户中的数字现金。现在,在线支付系统将信用卡和储蓄卡的功能转移到互联网数字世界中来了。

在这些系统中流转的都是与法币一一对应的电子现金,变化的仅仅是“账户”,而非“货币”。这些系统所起的作用是,在账户和货币上连接物理世界与数字世界。

这些系统都是中心化的。它们背后所依赖的传统金融系统是中心化的,法币是由各国央行发行的。它们自身是完全中心化的,由单一机构运转网络支付系统。它们在交易中担任中心化的中介角色,进行账户的记账,是用户间数字现金流通的中心。当两个用户进行转账时,在线支付系统在中间担任可信第三方的中介角色。这就是为什么称之为“中心化的电子现金”。

第二种形式:Q币、游戏币等互联网积分或计算机点数

在互联网上,除了在线支付系统之外,还有一种过去常被称为“虚拟货币”的货币现象。

比如,用户可以用人民币购买腾讯公司的Q币,腾讯自称它是“统计代码”。Q币可以在腾讯的产品如QQ即时通信工具、网络游戏、音乐文学等中使用,兑换各种在线服务。

关于“什么是Q币,它有什么用处”的问题,腾讯网站上的解释是,Q币是用于计算机用户使用腾讯网站的各种增值服务的种类、数量或时间等的一种统计代码,并非任何代币、票券,不能用于除腾讯网站增值服务以外的任何商品或服务。

又比如,在游戏中,用户可以付钱购买道具,也可以通过战斗赢取游戏币。这些道具和游戏币的形态与价值各不相同,在一个游戏中都很难确定价格、进行兑换,在多个游戏之间几乎不可互换。当然,游戏玩家还是可以找到办法进行交换,在一定条件下甚至还可以将它们变现换回法币,例如,曾流行的“游戏打金”就是指有些玩家专门在游戏中获得金币,然后卖出获得现金收入。

正如腾讯用“统计代码”的说法所表明的,Q币等是中心化机构(通常是一家公司)发行与管理的互联网积分或计算机点数。它们是中心化的,其发行和交易都是中心化的。

一般来说,在不需要用户付费购买时,它们常被称为“积分”,在需要用户付费购买时,它们常被称为“点数”。

但近年来出现了很有意思的混合产物。在打车软件中,用户可以存入现金,如存 100 元得 150 元;也可以介绍其他人成为打车软件的用户从而获得奖励,如介绍一个新用户双方各获得 50 元余额。在这种情况下,在打车软件钱包中的余额就变成了一定程度上的点数与积分的混合物。在打车软件钱包中的余额一般是不能提现的,也不能在用户之间直接转账,至多只能帮其他用户代付车费。

我们还可以进一步对比在线支付系统和计算机点数。

  • 一个视角是,它们是否映射物理世界中的货币。在线支付系统是映射物理世界中的货币的,电子现金价值就是货币的价值。而对于游戏迷来说,游戏币、游戏道具通常是不映射物理世界中的货币的。对游戏迷而言,游戏道具既有价值也有价格;对其他人而言,游戏道具可能毫无价值。在线支付系统与法币无缝连接,而这些互联网积分/计算机点数系统只与现实世界中的货币系统有很少的连接点,并且由于法律、商业等方面的原因,一般没有畅通的渠道将它们兑换回法币。
  • 另一个是视角是“电子现金”或“点数/积分”是如何发行的?与在线支付系统不同,点数/积分是由一家公司自行发行的,用户付费获得点数,可被认为是向这家公司购买一种数字商品,用户稍后可用这些点数兑换成该公司体系内的虚拟商品或服务。

直到最近,与现实世界相连的在线支付系统和不与现实世界相连的互联网积分/计算机点数都是互联网中的主流。变化始于比特币的出现。

第三种形式:去中心化的电子现金

在这两个主流之外,一直还有着另外一种探索:能不能创造一种完全去中心化的点对点电子现金?其中最终极的设想是,在数字世界中,货币的发行和交易都不需要中心化机构介入,是由计算机自动执行的:在发行时,无须类似各国央行的中心化机构;两个人在相互转移电子现金时,也无须中心化机构的参与。

按前面的对比表格,这种理想化的去中心化的电子现金几乎在每个方面都试图进行突破:不映射线下的货币,而在数字世界中自行发行;发行去中心化,不需要一个类似*银行的角色;像物理世界中的现金交易一样,交易无须中介介入。

这个问题很难,因为它的要求与数字世界中的技术基础设施的能力相悖。其中重要的一点是,在物理世界中,表示价值的现金纸币是不能复制的。但在数字世界中,数字化文档是可以复制的,每一个复制出来的文档都一模一样。因而过去在数字世界中,要用数字文件表示价值(比如表示一笔电子现金),我们需要一个中心化机构来确保数字文件是唯一的。假设这笔电子现金现在属于我,当我把它转给你时,我们需要一个中介来协助记录所有权的变更,我不能直接把数字文件复制给你。

计算机密码学家们探索的是,在无须中心化介入的情况下,如何通过密码学的方法,用可复制的数字文件来代表价值。

这是一个漫长的探索过程,其开端甚至比互联网商业化都还早,最早可追溯到 20 世纪 80 年代。总的来说,由于这种探索是基于加密技术的,因此各种去中心化数字现金也被称为加密数字货币(crypto-currency),其中 crypto 是密码学(cryptography)的词根。

最终在 2008 年,匿名的中本聪在密码朋克的邮件列表中发布了比特币的设计。他发明的比特币系统几乎集合了第三类探索的所有智慧结晶,他又加入了新的创新,最终在电子现金的发行和交易上都实现了去中心化。

正如我们所知,中本聪不只是设计和实现了这个最理想化的去中心化电子现金,他还“发明”了区块链技术。区块链的价值表示和价值转移功能让它可能成为新一代互联网的技术基础。

比特币实现了极致的“去中心化”

对照前文图表,与现有中心化的电子现金系统(在线支付系统)相比,比特币是与之完全相反的:

  • 在线支付系统的货币发行是中心化的,比特币的发行是去中心化的;
  • 在线支付系统的货币流动是中心化的,比特币的交易是去中心化的;
  • 在线支付系统映射物理世界中的货币,比特币不映射任何现有的货币;
  • 在线支付系统自己不进行货币的发行,比特币是在数字世界中凭空发行出来的。

在去中心化的程度上,比特币系统达到了极致。去中心化的初级阶段是自动化(automatic),即根据人设定的规则自动运行,而去中心化的高级阶段是自治(autonomous),也就是完全自治、自发。而比特币系统作为一个电子现金系统,达到了极致的去中心化状态(见图 3):

  • 作为一个货币应用,它不只交易是自治的,它的发行也是自治的。
  • 作为一个计算机网络,它是完全去中心化的,而不仅仅是分布式网络。
  • 作为一个组织,它是完全的社群自治,不需要有一个领导者居中协调。

去中心化处于区块链的思维模式的最内核,而比特币实现了极致的去中心化。

Block Chain Learning Notes
图3:比特币去中心化的层次

不过,之后在发展区块链技术和将之应用的过程中,我们又不得不从最极致的理想状态往实用方向调整,比如:

  • 现在多数区块链项目都是由基金会管理的。以太坊是由创始人维塔利克·布特林(人称“V神”)和以太坊基金会居中协调的,而不像比特币社区那样是完全自治的。
  • 常在金融系统中使用的联盟链,以及部分节点数量不多的基础公链,如小蚁(NEO)、EOS,更应被视为分布式网络,没有实现完全的去中心网络
  • 通过以太坊发行基于 ERC20 标准的通证,通证的发行规则是由项目方确定的,在运行过程中会酌情更改规则。它们的发行不是自动的或自治的。
  • 常被视为区块链 3.0 代表的 EOS 在智能合约部分引入了李嘉图合约和社区仲裁机制,也即交易部分不再是完全交给机器自动执行,在需要时人可以参与和干涉。

我们反复讨论比特币系统的设计,是因为它早已经把最极致的情况展现在所有人面前。而在将区块链技术落地应用的过程中,从最极致的去中心化往实用主义方向调整并不是倒退,而是事物发展的必然过程。

比特币是如何实现去中心化的?

那么,比特币系统具体是如何实现极致的去中心化的呢?

在比特币白皮书《比特币:一个点对点电子现金系统》中,中本聪详细地解释了他是如何设计这个系统的。在其中,他确立了此后所有区块链系统的主要设计原则。

  • 一个真正的点对点电子现金应该允许从发起方直接在线支付给对方,而不需要通过第三方的金融机构。
  • 现有的数字签名技术虽然提供了部分解决方案,但如果还需要经过一个可信的第三方机构来防止(电子现金的)“双重支付”,那就丧失了(电子现金带来的)主要好处。
  • 针对电子现金会出现的“双重支付”问题,我们用点对点的网络技术提供了一个解决方案。
  • 该网络给交易记录打上时间戳(timestamp),对交易记录进行哈希散列处理后,将之并入一个不断增长的链条中,这个链条由哈希散列过的工作量证明(hash-based proof-of-work)组成,如果不重做工作量证明,以此形成的记录无法被改变。
  • 最长的链条不仅仅是作为被观察到的事件序列的证明,并且证明它是由最大的CPU处理能力池产生的。只要掌控多数CPU处理能力的计算机节点不(与攻击者)联合起来攻击网络本身,它们将生成最长的链条,把攻击者甩在后面。
  • 这个网络本身仅需要最简单的结构。信息尽最大努力在全网广播即可。节点可以随时离开和重新加入网络,只需(在重新加入时)将最长的工作量证明链条作为在该节点离线期间发生的交易的证明即可。

威廉·穆贾雅在《商业区块链》一书中对比特币白皮书摘要进行了分析,他总结了四个要点:

  1. 点对点电子交易;
  2. 不需要金融机构;
  3. 加密证据而不是中心化的信用;
  4. 信用存在于网络,而不是某个中心机构。

而从这个摘要中,我们提炼出了比特币系统设计的五个要点(见图 4):比特币的区块链系统是由分布式账本(即狭义的区块链)和去中心网络(点对点网络)组成的,形成链条的方式是工作量证明共识机制。最长链是由网络中的算力共同决定的,因而它是可信的,节点离开和加入依据的是最长链是可信的这一原则。这些组合起来形成了比特币系统。

Block Chain Learning Notes
图4:比特币系统设计的五个要点

1) 去中心化的点对点电子现金系统

比特币要做的是一个“点对点的电子现金系统”,发送方和接收方直接交易,它们之间不需要中介机构的介入。

要去掉可信第三方等中介机构,就需要解决“双花问题”。在摘要中,中本聪给出了点对点网络的解决方案,并介绍了这个方案的核心——区块链。他并没有提到区块链(blockchain)这个词,但在论文中分别提到了区块(block)和链(chain)这两个概念。

2) 分布式账本

比特币的区块链是基于工作量证明形成的带时间戳、存储数据的数据块和由哈希指针连接成的链条。

这个链条或者说账本以分布式的方式存储在比特币网络的各个节点上,因而也被称为分布式账本。

3) 工作量证明

比特币网络中的节点按照规则进行加密哈希计算,以竞争获得生成新区块的权利。节点在竞争获胜后就获得记账权,它生成区块成为最新区块后,就获得与新区块对应的挖矿奖励。

工作量证明也是区块链账本的安全机制。如果不重做“工作量证明”所需的大量计算则此链条不可修改,这一共识机制保证了区块链上的数据的可靠性。

4) 最长链原则

在任何时刻,最长的链条是所有人都接受的最终记录。

由于最长链是由网络中的主要算力完成的,因而只要它们不都与攻击者合作,那么它们生成的最长链就是可信的。这个原则被称为“最长链原则”。

5) 去中心网络

比特币的去中心网络的架构非常简洁,本身需要的基础设施很少。它可以在互联网网络上运行。计算机节点可以随时离开或加入这个去中心网络,在加入时它们只需遵守最长链原则即可。

比特币是如何转账的

“互联网上的商务交易,几乎都需要借助金融机构作为可信赖的第三方来处理电子支付。”比特币白皮书的第一句话这样写道。中本聪是如何把可信第三方从比特币的交易中去掉的呢?

通过两个人之间的转账交易,我们来看看比特币系统是如何实现交易的去中心化的?

假设我是甲,要把自己的钱包地址中的 8 个比特币转给你(乙),即转到你的钱包中去。详细讨论这一转账交易过程,我们可以看到比特币区块链是如何工作的五个技术性细节(见图 1):

由于篇幅限制,我们将分五节讲解以上五个技术细节,大家可以点击链接进入对应的章节。

在沿着比特币系统所开创的路线开发各类基础公链时,开发者们从各个角度调整与改进以上五个技术性细节,形成新的区块链系统。

Block Chain Learning Notes
图1:一笔比特币转账交易的过程

分布式账本和去中心网络

所有的区块链系统都包括“分布式账本和去中心网络”这一对必备要素。

比特币网络没有一个中心服务器,它是由众多全节点和轻节点组成的,这些节点形成一个去中心网络。其中:

  • 全节点包含所有比特币区块链的区块数据;
  • 轻节点仅包括与自己相关的数据。

比特币网络是完全开放的,任何服务器都可以接入、下载全部区块数据成为全节点。

所有用户持有的比特币信息都存放在一个分布式账本之中。这个账本是一个不断增长的由数据块组成的链条,这个数据块组成的链条是狭义的“区块链”。比特币账本可被认为同时存储在所有的全节点之中。

基于分布式账本与去中心网络,比特币系统实现了去中心化的价值表示和价值转移,它与中心化在线支付系统有很大的不同。用两个人之间的转账来对比看一下。

中心化在线支付系统的交易流程

中心化在线支付系统的转账过程是:假设你我二人要通过支付宝进行转账。我们都在支付宝开设有账户(account),账户上有多少钱是支付宝账本上记录的数字。当我转账 100 元给你,支付宝在我的账户记录上减掉 100 元,在你的账户记录上增加 100 元,形成新的账本。到此,转账交易结束。

如图 1 所示,中心化在线支付系统维护一个中心化的账本。用户在账本上开设账户,通过密码来与之交互。

Block Chain Learning Notes
图1:中心化在线支付系统vs比特币系统

比特币系统的交易流程

对比而言,比特币系统使用的是一个分布式账本,用户在其中开设“账户”,严格地说是地址(address)。每个人都可以在比特币区块链上建立“账户”,获得一对公钥与私钥,地址是公钥的哈希值,我们通过私钥与地址进行交互。

我们每人有一个钱包,钱包中存储的是私钥。两个人在相互转账比特币时,可以通过各自的钱包软件直接进行。

在这里,比特币的去中心化体现在:不再有一个中心化机构来集中管理账本。账本存放在由众多节点组成的去中心网络中;不再有一个中心化机构来帮我们管理账户、处理交易,每个人管理自己的钱包,交易由分布式账本来记录。

有人会往下追问,我们地址中的比特币是记录在账本中的,看起来还是有一个“中心”存储我们的资产。其实,这个账本是分布式地存储在去中心网络中的,因而从这个层面看,它可以看成是去中心化的。

对比而言,对于中心化在线支付系统,它通常是由中心化的服务器来管理集中式账本。对于比特币系统,它背后的系统是一个去中心网络,网络节点共同维护一个分布式账本(见图 2)。

Block Chain Learning Notes
图2:分布式账本与去中心网络

UTXO

在比特币系统上其实并不存在“账户”,而只有“地址”。只要你愿意,你就可以在比特币区块链上开设无限多个钱包地址,你拥有的比特币数量是你所有的钱包地址中比特币的总和。比特币系统并不会帮你把这些地址汇总起来形成你的账户。

从我(甲)到你(乙)的一笔比特币转账,是从我的一个钱包地址转到你的一个钱包地址上去。

接下来的讨论就涉及比特币系统的一个关键技术性细节:UTXO(未使用的交易输出)。通证经济专家孟岩曾撰写一篇文章,标题是“其实没有什么比特币,只有UTXO”,这个标题指出了,对于计算机来说比特币是什么——比特币是区块链账本上的交易输出。

我们来看一个两个人进行转账交易的过程,以深入理解UTXO:

假设我有 8 个比特币,这其实意味着,之前有一个交易把这些比特币转入我的地址,这个交易的输出(即 8 个比特币)未被使用,我拥有了这 8 个比特币。

现在,我要发起一个转账交易,这个交易中的输入是让我拥有这些比特币的上一个交易。

我要转账给你,我做的是,对让我拥有这些 8 个比特币的上一个交易进行签名,把这一新转账交易的输出地址设为你的钱包地址。

这样,我就发起了一个转账支付交易。等矿工将这一交易打包进新的区块,转账交易完成,这 8 个比特币就属于你了。你拥有的是你我这个交易的未使用的交易输出。

对于一个交易签名所涉及的比特币的公钥和私钥的非对称加密机制,之后再讨论。为便于理解可类比看,钱包地址相当于房间号和锁,私钥则相当于钥匙,钥匙可以打开对应的锁。

以上两个人的转账交易过程是:我用私钥(从一个输出是我的地址的交易中)取出比特币,并用私钥对从我的地址转到你的地址的新交易进行签名。一旦交易完成,这些比特币就转到你的钱包地址中去。你的钱包中新交易的未使用交易输出,只有你的私钥才可以打开。

从以上讨论中我们可以看到,的确不存在比特币,只有未使用的交易输出(UTXO)。每一笔比特币都源自上一个交易,可以一直向上追溯上去。而一直向上追溯,在每一笔比特币的源头,都有一种特殊的交易,即比特币矿工因挖矿获得奖励的创币交易,每一个比特币都是通过挖矿被创造出来的。假设我作为比特币矿工挖矿成功赢得了 25 个比特币,那么这个特殊交易是,它的输入是 0,而输出是 25 个比特币进到矿工的钱包地址中。

未使用的交易输出(UTXO)和我们熟悉的银行账户有着很大的不同。为什么要采用这样的设计?对比银行账户和比特币的 UTXO,我们可以看到 UTXO 的优点。

1) UTXO设计易于确认比特币的所有权

如果采用传统的账户设计,当我要转账 8 个比特币出去时,为了完全避免造假,我们就需要逐一向上追溯,确认之前的每一笔交易,从而证明我的确拥有 8 个比特币。

采用现在的 UTXO 设计,要确认我拥有 8 个比特币,只要确认上一个交易我的确获得了它们即可。通常只要上一个交易是真实的,我就的确拥有这些比特币。而我们都知道,一个区块经过 6 次确认,其中的交易可被认为是真实无误的。

2) UTXO设计与区块链账本是完全融为一体的

区块链账本存储的是状态。以太坊是对比特币区块链的改进,在白皮书中,以太坊创始人维塔利克分析了比特币,他认为,“比特币账本可以被认为是一个状态转换系统(state transition system)”。以太坊也是采用这种状态转换系统的设计,但对之进行了改进。

微观地看,每一个区块链中的交易都是一个状态转换函数,以太坊白皮书就用“以太坊状态转换函数”(Ethereum state transition function)来讨论在区块链上一个交易的进行过程。

几乎所有的区块链都是采用这一设计,每一个新区块和它之前的所有区块一起形成了一个新的状态,如此重复、持续下去。在确认之后,之前的状态就不可篡改,即不可随意更改。UTXO(未使用的交易输出)是与这种状态的设计相对应的。

加深对 UTXO 的理解

UTXO 是 unspent transaction outputs(未使用的交易输出)的缩写,每一个比特币其实都是 UTXO,它是比特币的最核心概念之一。

参考资料:《区块链:技术驱动金融》中相应的讨论,及文章“比特币和以太坊的记账方式——UTXO 和账户余额”(黄世亮/文)。

你的比特币就是 UXTO

比特币的挖矿节点获得新区块的挖矿奖励,比如 12.5 个比特币,这时,它的钱包地址得到的就是一个 UTXO,即这个新区块的币基交易(也称创币交易)的输出。币基交易是一个特殊的交易,它没有输入,只有输出。

当甲要把一笔比特币转给乙时,这个过程是把甲的钱包地址中之前的一个 UTXO,用私钥进行签名,发送到乙的地址。这个过程是一个新的交易,而乙得到的是一个新的 UTXO。

这就是为什么有人说在这个世界上根本没有比特币,只有 UTXO,你的地址中的比特币是指没花掉的交易输出。

详看从甲转账给乙的过程

假设甲(Alice)向乙(Bob)转账,则转账过程可以分成三个阶段(见图1):

1) 假设Alice之前通过挖矿获得了 12.5 个比特币,在她的地址中,这些比特币是某个币基交易的 UTXO。

2) Alice 发起一个交易,输入是自己的上一个交易,输出是 Bob 的地址,数量是 12.5 个比特币,Alice 用自己的私钥对交易进行签名。

这里简化了交易过程,只讨论了将上一个交易的输出全部转帐的情况。如果试图转出上一个交易的输出的一部分比特币,则要进行略复杂的处理。

按照比特币系统的设计,比特币交易还要遵循一个原则:每一次交易的输入值都必须全部花掉,不能只花掉部分。比如,我要转出比特币给你的钱包地址中只有 8 个比特币,那么很简单,我发起一个交易,把这 8 个比特币转到你的钱包地址中,我签名确认这个交易。但假如我的钱包地址中有 25 个比特币,那我发起的交易就不是转给你 8 个比特币,然后自己的钱包地址中还剩下 17 个比特币。这时,我发起的交易是:从我的钱包地址中转 8 个比特币给你,同时转 17 个比特币给我的同一地址。

3) 当交易被区块链确认后,Alice 的 UTXO 就变成了 0。而在Bob的地址中就多了一个 UTXO,数量是 12.5。

Block Chain Learning Notes
图1:比特币转账的三个阶段

存在 Bob 的钱包地址中的这些比特币只有用 Bob 的私钥才可以签名转账给其他人。

如果Bob要将这些比特币转账给其他人,则重复上述过程。

简单地说,从一个地址向另一个地址转账比特币的过程,是用这个地址对应的私钥打开,再加密到另一个地址的过程。这个私钥的打开和加密就是签名的过程。在这个过程中,接收比特币的一方并不需要动用自己的私钥。

我的比特币是什么样的?它们存在哪儿

初次接触比特币的人会问:我的比特币是什么样的?它们存在哪儿?

如果你头脑中参照的是在物理世界中购买金币,那么这里很不一样,你的比特币并不是存在家中或金库中,并不存在一个数字文件表示“你的比特币”。

如果你头脑中参照的是银行的存款,那么你可以假设,你的比特币就“存在”于一个账本上,我们已经知道了,在数字世界中,价值是账本中的“记录”。

不同的是,对比特币来说,这个账本不是一家银行的中心化数据库,比特币的账本是一个分布式账本,存在于一个去中心化的网络上。任何人都可以接入这个网络,把这个账本下载下来。但是,只有用你的私钥才能动用你的地址中的比特币。

我们还可以再换一个角度看,你的比特币在哪儿?按前面说的,比特币就是 UTXO,那么比特币可以被看成是上面的物理世界金币和银行存款两种概念的混合:

  • 一方面,你的比特币是有一个“物理存在”的——对应着一个数据文件。比特币以一个交易的UTXO的形式存在着,每个交易都可被看成是一个数据文件。
  • 另一方面,所有这些交易被打包进区块链的区块中,后一个区块连着前一个区块,形成一条链,也就是独特的账本。这么看,你的比特币是这个账本上的记录。

为什么采用UTXO的形式

UTXO 与我们熟悉的账户概念的差别很大。我们日常接触最多的是账户,比如,我在银行开设一个账户,账户里的余额就是我的钱。

但在比特币网络中没有账户的概念,你可以有多个钱包地址,每个钱包地址中都有着多个 UTXO,你的钱是所有这些地址中的 UTXO 加起来的总和。

中本聪发明比特币的目标是创建一个点对点的电子现金,UTXO 的设计正可以看成是借鉴了现金的思路:我们可能在这个口袋里装点现金,在那个柜子角落里放点现金,在这种情况下不存在一个账户,你放在各处的现金加起来就是你所有的钱。

采用 UTXO 设计还有一个技术上的理由,这种特别的数据结构可以让双重花费更容易验证。对比一下:

  • 如果采用账户和账户余额设计,Alice 要转账给 Bob,为了确保 Alice 的确有钱,我们需要核查她之前所有的交易。随着时间的推移,比特币的交易越来越多,这个验证的难度会持续上升。
  • 采用 UTXO 设计,我们只要沿着每个交易的输入逐级向上核查,直到查到这笔比特币的创币交易即可。随着时间的推移,这个核查也会变难,但变难的速度要远低于采用账户和账户余额设计。

这种设计使得比特币系统作为一种电子现金系统有着非常大的可扩展性。当然,我们很快会看到,通常被认为是区块链 2.0 的以太坊没有继续采用 UTXO 设计,而是考虑到其他因素,采用了账户余额的设计,其代价正是中本聪可能已经考虑到的复杂性。

比特币区块链的数据结构

我们回到两个人转账交易的过程中,去理解比特币区块链数据结构

我发起一笔交易,即我向整个区块链网络广播,我和你两个人想进行这笔交易:我向你的地址中转入一笔比特币,无须你的许可。

但只有当这笔交易被打包进最新的比特币区块中时,这笔交易才真正完成。通常来说,当在一笔交易所在的区块之后又增加 5 个区块,即包括它自己在内一共经过 6 次确认时,这笔交易可认为被完全确认。按比特币每个区块的确认时间 10 分钟估算,即一笔交易最终确认要经过约 1 小时。

这里包括了两步:一是交易被打包进候选区块,每个节点可以按规则生成不同的候选区块;二是节点挖矿成功,候选区块被成功地加到区块链的尾部,成为最新的正式区块。

那么,把一笔交易打包进区块是什么意思呢?这涉及区块链最基础的数据结构,这也是它不可篡改的基础。

以下讨论可能略显枯燥,但却是认识比特币与区块链的最基础的知识,我尽量以通俗的语言来解释。

区块链之所以被称为 blockchain,是因为它的数据块以链状的形式存储着。从第一个区块即所谓的创世区块开始,新增的区块不断地被连到上一个区块的后面,形成一条链条。

每个区块由两个部分组成——区块头部和区块数据。其中,区块头部中有一个哈希指针指向上一个区块,这个哈希指针包含前一个数据块的哈希值。哈希值可以被看成是数据块的指纹,即在后一个区块的头部中均存储有上一个区块数据的指纹。如果上一个区块中的数据被篡改了,那么数据和指纹就对不上号,篡改行为就被发现了。要改变一个区块中的数据,对其后的每个区块都必须相应地进行修改。

比特币区块链设计有一种机制让这种修改难以发生,我们稍后在谈到“工作量证明”和“比特币挖矿”时再详细讨论。

一个区块中的数据是被打包进这个区块的一系列交易。这些交易按照既定的规则被打包形成特定的二叉树数据结构——梅克尔树(Merkle trees)。按目前的比特币区块的大小,一个区块中能容纳的交易数量在 2000 个左右,比如在第 526957 个区块中容纳了 1804 个交易。

可通过如下网站查看比特币区块链的数据信息:https://blockchain.info/

比特币区块链的数据结构中包括两种哈希指针,它们均是不可篡改特性的数据结构基础。一个是形成“区块+链”(block+chain)的链状数据结构,另一个是哈希指针形成的梅克尔树(见图 1)。链状数据结构使得对某一区块内的数据的修改很容易被发现;梅克尔树的结构起类似作用,使得对其中的任何交易数据的修改很容易被发现。

Block Chain Learning Notes
图1:比特币区块链的“区块链”与梅克尔树

工作量证明共识机制

比特币的去中心网络采用的是工作量证明共识机制。

去中心网络之所以需要共识机制,是因为这是一个非基于信任(non-trust-based)的网络,任何人无须许可都可以接入这个网络。并且,这些节点分散在网络条件差异非常大的全球互联网之中。在完全无中心的情况下,这些节点要同步一致,共识机制即为这些节点达成一致的机制。

关于分布式网络的共识机制,有著名的“Fisher-Lynch-Paterson 不可能结果”,即在一定条件下达成共识是不可能的。而比特币的工作量证明共识机制在实践中被验证是有效的。这是因为它采用了一个实用主义的解决方案。

比特币的工作量证明的关键特点是,它巧妙地融合技术和经济因素,不只是纯粹通过技术本身来达到这一点,而是纳入了与自身作为一个数字现金系统相关的挖矿奖励。按《比特币:技术驱动金融》一书的分析,比特币的共识机制有两个与过去不同的特点,我们略做引申讨论。

一、它引入了奖励机制

在这样一个加密数字货币应用中引入了经济激励,维护网络的节点就可以得到有价值的比特币作为奖励。

为什么比特币网络中的节点们愿意打包交易、维护账本?它们并非出于“善意”,而是因为,它们能因这些挖矿行为获得比特币形式的经济激励。这是一个自行发行的电子现金系统的独特优势,如果所开发的是其他没有自行发行代币的 IT 系统,我们就无法设计矿工挖矿奖励这样的经济激励机制。

激励挖矿节点参与挖矿的,除了与新区块相关的奖励之外,挖矿节点还可以得到区块中包含的所有交易付出的交易费。但到目前为止这个数值还较小,大概为新区块奖励的 1%。

二、它包含了随机性的概念

比特币系统形成的共识不是完全可靠的,但是在等待了 6 个区块约 1 个小时之后,出问题的概率呈指数级下降。在 6 个区块之后,一个交易发生双花情况的概率可被认为是零。从纯理论上看,完美的共识不可能达成,但从实用的角度看,这个共识是可信的。

比特币挖矿机制

这篇文章从本质上讲解了矿工挖矿是什么意思,需要读者具备以下基础知识:

挖矿节点计算机在挖矿时要做两个任务:

  • 第一个任务是把比特币网络中未确认的交易按梅克尔树组装成候选区块,未被纳入的交易则往下顺延。
  • 在创建候选区块时,除了普通的交易之外,矿工在其中增加一个特殊的交易:币基交易(coinbase transaction)。如果挖矿成功,则币基交易会凭空转出新区块的奖励比特币到矿工的钱包地址中,从而发行这些比特币出来。这个特殊交易也被叫作“创币交易”,新的比特币是在这一交易中被创造出来的。

挖矿节点计算机的第二个任务是真正的挖矿,即进行加密哈希计算,解决一个计算难题,进行算力竞争。在众多争夺记账权的节点中,谁最先完成这个计算,它打包的区块就被加到了区块链的最后,成为最新的区块。率先完成计算的矿工会赢得新区块的挖矿奖励。最初,成功挖出一个区块,矿工可以获得 50 个比特币的奖励,按规则,这个挖矿奖励每四年减半一次,分别为 25 个、12.5 个,以此类推。

我们再讨论两个问题,以深入了解比特币的工作量证明共识机制与它的挖矿机制。

第一,先向内看,比特币矿工挖矿是在做什么?

在候选区块的头部有一个 32 位的随机数区域,矿工需要反复调整随机数并计算,目标是让整个区块的哈希值小于一个“目标值”。如果试过所有的 32 位随机数可能性后,计算仍未能成功,那么就要改变币基(coinbase)的一个随机数,接着进行反复计算。

这个计算是加密哈希计算(对比特币来说是 SHA-256),除了反复计算别无他法。这个计算量非常大,比如在 2015 年年底,在大约 2 的 68 次方个随机数中,只有一个可以成功,这个数字比全球总人口的平方还要大。

有意思的是,这种挖矿计算是非对称的,你挖矿需要经过 2 的 68 次方个哈希计算,而我要验证你的确找到有效的随机数,只需要一次就可以。

第一个完成这个计算难题的节点所打包的区块就成为有效区块,它向全网广播告知自己已经完成,由其他节点确认后(即有别的挖矿节点在这个区块的基础上进行下一个区块的挖矿,生成新的区块)。在等待 6 个区块后,该挖矿节点就可以获得这次比特币奖励。

比特币的去中心网络能够长期运行下来,现在有 1 万多个全节点,正是因为有这样的挖矿奖励机制。出于对自己的利益考虑的矿工运维着这个不属于任何人、完全去中心化的网络。

第二,再向外看,比特币的挖矿机制在加入挖矿的计算机的算力不断增加的情况下,这个挖矿机制是如何保持稳定的?

比特币挖矿的芯片已经经过几轮演变,其计算能力越来越强:从 CPU 演变到 GPU(显卡),再到现场可编程门阵列(FPGA),再到现在的专用集成电路技术(ASIC),即只能进行比特币挖矿所需的哈希计算的专用芯片中。并且随着矿机的升级迭代和数量增多,接入比特币区块链网络、参与挖矿竞争的计算算力越来越大。

相应地,比特币系统有这样一个对应的机制设计:随着算力的增长,调整目标值的难度使得挖出一个区块的时间始终是 10 分钟左右。

这形成了一种动态的平衡,维持区块链网络经济激励的有效与稳定。这个决定难度的公式非常简单明了,每挖出 2016 个区块,也就是经过约两个星期,挖矿难度会进行一次调整,该公式是:

下一个难度 = 上一个难度 × 2016 × 10分钟 / 产生2016个区块所需的时间

如果算力突然大幅度上升,产生上一组 2016 个区块所需的时间变短,那么难度就会上升。在某些特殊情况下,如果产生上一组 2016 个区块所需的时间变长,那么难度也会下降,但这样的情况并不多见。

因此,比特币矿工节点的挖矿是它在运行分布式账本与去中心网络。同样重要的是,它也是比特币的发行机制和整个社区的激励机制。

比特币的挖矿是比特币的唯一发行机制,从中本聪挖出第一个区块获得 50 枚比特币开始,比特币这个加密数字货币就以这样的去中心化方式不断地发行了出来。

比特币区块链网络是由众多节点组成的去中心网络,而这些计算机节点加入这个网络,维护分布式账本,是因为中本聪在设计系统时巧妙地加入了经济激励:众多比特币矿工(即挖矿节点)在竞争获得记账的权利,矿工每增加一个新的区块能获得对应的记账奖励。

比特币的经济系统是以“竞争-记账-奖励”循环为核心的(见图1),其中“竞争”非常重要,即挖矿节点进行的算力竞争。在比特币系统这样一个去中心网络中,节点参与是出于获得经济奖励的自利动机,而记账权利和对应的奖励需要通过竞争来获得。

在区块链的相关探讨中,有把“挖矿”一词的含义扩大的倾向,在这里我们认为,只有生成区块的计算行为,即运维分布式账本与去中心网络的行为,才是真正意义上的挖矿。简单地说,只有生产区块,才是挖矿。即便放宽要求,不再强求只有计算机节点生产区块才是挖矿,我们也仍想强调,竞争获得对应的权利和奖励,仍是必须的。没有竞争的奖励,是很难真实有效的。

Block Chain Learning Notes
图1:比特币的“竞争-记账-奖励”循环

通过讨论比特币区块链的五个技术性细节,我们再一次看到,比特币系统在发行和交易层面都实现了完全的去中心化:

  • 一个交易的确认,被写入分布式账本记录下来,是由去中心网络中互不信任的节点为了自己的利益相互以算力进行竞争而确认的。
  • 在竞争挖矿的过程中,比特币的发行是“凭空发行货币”,它的货币发行也是靠这个去中心网络的算力竞争来完成的,是去中心化的。

比特币作为区块链 1.0 的典型,完成了价值表示和价值转移的概念验证(见图2)。

比特币区块链是非常精妙的设计,它无须任何人的居中协调与领导就能持续发展。比特币可能是迄今为止最成功的加密数字货币,比特币区块链在加密数字货币的应用上堪称完美。

比特币区块链即“区块链1.0”是专为去中心化的电子现金设计的,而要在各个领域中广泛应用,我们需要有更通用、性能更好的区块链系统。

Block Chain Learning Notes
图2:比特币作为区块链1.0的典型,完成了价值表示和价值转移的概念验证

在比特币系统之后出现了常被认为是“区块链 2.0”代表的以太坊。现在,更多项目在竞争成为“区块链 3.0”,我们在后续章节中会分别讨论它们。

区块链将带来什么变革

区块链,是互联网的二次革命。”

“区块链,是互联网2.0。”

“区块链,让我们从信息互联网跨越到价值互联网。”

这是从互联网发展的视角出发,对区块链有什么意义做出的一些回答。

谈起区块链的前景,人们会列举它能改变金融、能源、零售、文化、社交、游戏、物联网等,但我觉得,以上回答更为有力。

从 1994 年互联网开始商业化,经过近 25 年的发展,互联网已经彻底改变了我们周围的一切——经济、产业、生活。互联网从 1995 年左右的“信息高速公路”的说法,变成了无处不在的力量。现在,如果区块链是互联网 2.0,互联网曾经带来的改变以区块链的方式再来一次,随着区块链技术的进步和相关基础设施的完善,各种意想不到的应用会涌现出来。

信息传递 VS 价值转移

之前,互联网处理的是“信息”;现在,互联网可以处理“价值”。从 2008 年到 2018 年,酝酿了近十年的区块链技术弥补了互联网与数字世界中一直缺失的另一半。区块链提供了在数字世界中处理价值所需的两个基础功能:价值表示与价值转移,让互联网跃迁到价值互联网(见图1)。

Block Chain Learning Notes
图:信息互联网 VS 价值互联网

1990 年,万维网协议发明者蒂姆·伯纳斯-李写道:“一旦我们通过万维网连接信息,我们就可以通过它来发现事实、创立想法、买卖物品,以及创建新的关系,而这一切都是通过在过往时代不可想象的速度和规模来实现的。”到现在,互联网上的各种应用和服务,包括门户、视频、社交、即时通信、电商、打车、B2B、网络支付等,都是基于信息传递的基础设施、沿着他的设想逐步发展起来的。

在区块链出现之后,对照之下我们发现,信息传递的一个关键特征让互联网很强大,但有一个我们之前并未曾特别关注的限制:信息传递的方式是复制。这一特征让我们在数字空间中进行价值转移时,必须依赖可信第三方的协助。那些可信第三方,即各种各样的中心化机构,比如亚马逊、淘宝、支付宝、优步、滴滴、爱彼迎、微信支付,一直以来像本来就应该有一样,存在于互联网产业之中。

不管是网络零售、生活服务交易,还是企业互联网,每个从事交易的互联网项目都需要价值转移的功能,而这些平台在交易中担任信用中介的角色。特别地,在互联网上进行金钱的转移时,我们需要信用中介来居中协调,为了进行在线支付,互联网上已经产生了专门的信用中介,如 PayPal、支付宝、微信支付等。

直到 2008 年,当中本聪在比特币系统中开发出区块链这个底层技术,当他尝试创造新的技术来去掉这些信用中介,让网络本身来扮演信用中介的角色时,我们开始发现,现在互联网中的各种信用中介并非必须存在。

经过十年的发展,比特币系统展示了,在数字世界中价值表示可以去中心化,价值转移同样可以去中心化。

现在,我们仍需要各种“信用中介”,因为到现在为止互联网数字世界中的所有基础设施都是为了信息传递而建的。

未来,我们不再需要这些“信用中介”。基于区块链技术,我们可能建立一个通过网络本身进行价值表示、价值转移的全新交易基础设施。

如果价值表示和价值转移可去中心化,直接通过网络本身来进行,那么我们就将从“信息互联网”跨越到“价值互联网”。

要理解价值互联网,我们可以从对比信息传递方式和价值转移方式的差异开始。

详解价值转移的方式:记录

信息和价值是完全不同的事物,信息传递和价值转移的方式完全不同。接下来,我们分别对比几组线下物理世界和线上数字世界的案例。

报纸 VS 纸币

在线下物理世界中,信息的典型代表是报纸,而价值的典型代表是纸币。每一张报纸都是一样的,报纸编辑完成后,印刷机复制它,然后它被送到我们的手中。

对比而言,虽然纸币也是由印刷机印制的,每一张 100 美元纸币代表的价值是相等的,但每一张纸币都是不一样的,每一张都有唯一的序列号。

信息是可复制的,我可以复印一份报纸给你。价值不可以复制,我必须把100美元现金真的给你,而不能复印了给你。

到了互联网上,数字化的信息可以完美复制,这加快了信息的流动。而和价值有关的事物在互联网中没有发生同样倍数的变化。

报纸和纸币的对比如图 2 所示。

Block Chain Learning Notes
图2:报纸 VS 纸币

纸币的电子化:信用卡与在线支付

我们接着讨论现金交易。在商店中购物,我们付纸币现金,看起来在我们和商店收银员之间并没有任何中介。当然在这背后,这些现金会变成商店在银行账户上记录的数字,在现金交易完成之后有一个庞大的金融体系在运转。

当信用卡开始普及,现金开始被电子化的塑料卡片取代时,我们在刷卡支付时,一个第三方中介就出现在我们和收银员之间,它可能是维萨、万事达、银联等。这些信用中介做的事是:当我付钱时,从我的银行账户中减去我付的钱,在商店的银行账户中加上这笔钱。

在互联网出现之后,当我们在线上或线下使用支付宝、微信支付等第三方在线支付时,它们扮演着与维萨、万事达等信用卡组织类似的角色。

信用卡组织和在线支付系统做的事都是进行可信的记录,即在账本上进行记录,确认金钱的转移。

价值转移依靠记录:房产与汽车的案例

在物理世界中,涉及除纸币现金之外的其他价值转移时,在多数情况下,我们转移价值的方式也是记录,而记录通常需要一个可信的第三方。

以房产的转移为例。我们把一个房产转让给别人,对方付了钱,我们怎么把房产这个价值转移给他?

他仅仅搬进这个房子住,并不能表示他已经拥有了这个房子的所有权。在古代,房屋买卖双方签订地契,在中文中,“契”字的含义是刻画记载,地契成为所有权的记录。

到了现代社会,我们的做法是,到不动产登记中心进行登记,在*部门管理的账本记录(不动产登记簿)上更改房屋所有权的归属,对方拿到有着他的名字的房产本——“不动产权证书”。房产这个价值的所有权转移依靠的是“记录”。

对比古代和现代的做法,我们可以看到,过去的地契是去中心化的,而现代的房产登记是中心化的。

类似地,我们要把一辆汽车这样的动产转让给他人,现代社会的做法也是要去交通管理部门进行记录的变更,并获得新的车辆证照,如车辆行驶证。

在多数现代国家中,房产与汽车这两种资产都是由国家的相关部门来进行统一登记的。我们会发现,这里有两种记录:一是中心化数据库中的记录,对中国的房产来说,这个记录存在于国土资源部门集中管理的账本——“不动产登记簿”;二是产权人拿到的附属证明,即俗称的房产证——“不动产权证书”。如果房产证与集中账本中的信息不一致,或者车辆行驶证的信息与交管局数据库中的信息不一致,那么通常的做法是以集中账本中的记录为准。

数字世界中的价值表示与价值转移

信息传递的主要方式是复制(见图3)。在互联网中不管是最基础的 TCP/IP 协议,还是 WWW(万维网)协议,都是专为信息传递设计的。并且,数字化的信息复制可以复制出一模一样的副本,复制效率更高,互联网给信息传递带来了巨变。

Block Chain Learning Notes
图3:信息传递方式 VS 价值转移方式

价值转移的主要方式是记录。从物理世界到数字世界,价值转移的方式都是记录。但是,用数据文件进行价值表示会遇到很多困难,可完美复制的数据文件和需要唯一性的价值表示形成冲突。如果表示价值的数据文件可以完美复制,那么我就可能把它支付给你,再复制一份支付给另一个人,造成双花问题。在数字世界中进行价值转移时,为了防止双花问题,我们要依赖可信第三方作为中介,由它作为交易中心进行记录。

这事实上成为互联网往下一步发展的隐形障碍。

在互联网上,与信息相关的产品高速发展、成本快速降低。但是,由于需要可信第三方进行协调,与价值转移有关的事依然处在成本高、效率低的状态。互联网上的价值转移仍局限在少数的价值类别上,比如在线支付系统处理的现金、在线证券交易、之前讨论的Q币与游戏币等互联网积分。

中本聪设计的比特币系统,给数字世界中的价值表示和价值转移这两个关于价值的关键问题都提供了解决方案。中本聪的解决方案去掉了处在中间的可信第三方,实现了完全的去中心化,让网络自身就可以表示价值,通过网络自身来转移价值和进行记录。

在互联网上,互惠经济是一种常被讨论的现象,比如开发者参与开源软件的开发,人们共同编撰百科全书,知识爱好者在社区问答社区中分享知识。过去很多人认为,这是缘于这些互联网用户有着无私和互惠的精神,这的确是这些社区得以发展的重要原因。但或许也可以说,过去人们为社区贡献了力量,而不给予相应的代表价值的事物,这可能是因为,在数字世界中一直没有方便的方法进行“价值表示”,更没有方便的办法进行“价值转移”。现在,在有了区块链和它底层的区块链技术以后,我们就有了相应的技术手段。

到现在来看,对数字世界的价值表示和价值转移,比特币系统都进行了完美的概念验证,并经受住了时间的考验。比特币系统是一个试验性的系统,是极客们为了解决技术难题而开发的“技术玩具”。但从 2009 年年初开始运转起,不管比特币所表示的价值折算成法币是价值很小的 1 美元,还是高达接近 2 万美元,这一系统都运转正常。通过这一系统,我们可以在数字世界中进行价值转移,无须任何信用中介介入,比特币系统无须中介的点对点价值转移交易,被证明是有效的。

当然,比特币系统和源自它的区块链技术目前才跨过概念验证阶段,要作为投入工程应用的系统,满足亿万用户的使用,仍存在较大的性能问题。但不管怎样,区块链可能成为互联网数字世界中“价值表示”和“价值转移”的基础性协议(见图4)。有了比特币系统这个样板和区块链技术,互联网和数字世界中关于价值的一切都开始发生变化。

Block Chain Learning Notes
图4:数字世界中的价值:价值表示与价值转移

价值表示功能:分布式账本改变了互联网上的价值表示方式

当从比特币系统中发现区块链技术时,人们首先看到的是,它是一个“分布式账本”,并将之称为分布式账本技术(distributed ledger technology,DLT)。分布式账本的核心功能是做价值的表示,比如一个人持有的比特币是分布式账本中的记录。这些被表示出来的价值,又是在交易中体现出来的,因而我们仍可从价值转移来讨论价值表示。

数据文件是可完美复制的,在数字世界里,我们要转移价值就需要有一个信用中介居中协调,它们的功能是做价值所有权的记录,它们也维护着一个集中的账本用以记录。在过去的数十年内,转移金钱的信用中介(如在线支付系统)越来越易用,支付宝、微信支付在线上、线下都带来了很大的便利,它们也越来越智能,比如能更好地识别欺诈。但是,它们的组成结构未曾发生根本性的变化,见图 5 a):

  • 信用中介处在交易双方之间,协助完成价值转移。
  • 它们通常提供一个供用户使用的应用界面。
  • 它们维护着一个集中的账本。
  • 金钱是集中账本中的记录。
Block Chain Learning Notes
图5:分布式账本改变了互联网上价值转移的流程

比特币系统彻底地改变了这个组成结构。通过各自掌握的比特币钱包软件,我们可以在个人与个人之间进行比特币转账。如图 5 b) 所示,在进行比特币转账时,不再有一个信用中介帮我们保存和维护一个集中的账本并处理所有权的记录。区块链的账本以分布式的方式存在于互联网上,由去中心网络中的节点共同维护。

市面上存在多种比特币钱包,只要我们掌握自己的私钥,任何比特币钱包软件都是一样的。我们的比特币被存储与记录在分布式账本中,即有人简单说的在链上。

这里还想澄清一个常见的误解。在讨论区块链的分布式账本时,常有人说每个人保存自己的账本,如果绘制成形象的图示,大体上如图 5 c) 所示。

那么,我们是保存自己的账本吗?通过这个形象的图示我们可以看到,“每个人保存自己的账本”这个说法既对又不对。说它对是因为,每个人的确可以把比特币的账本都下载下来;说它不对是因为,逻辑上我们接入了一个由包括众多节点的去中心网络维护的分布式账本,比特币账本的运转逻辑并不是每个人都保存自己的账本,然后在需要的时候拿出账本来对账,而是我们共享一个云端账本。

特别地,比特币钱包中并不保存“账本”。账本是由比特币网络中的全节点维护的,而钱包软件是所谓的轻量节点或轻客户端,也叫简单付款验证客户端(simple payment verification,SPV),里面只保存了向你的地址付款的交易与区块头部。

更进一步追问,在区块链上,我们的数字资产存放在哪里?我们还是对照现实中资产的存储方式来理解区块链的资产存储。

比特币系统的设计在一定程度上是模拟黄金的设计。要特别说明,这里讨论的并非比特币本身有黄金一样的财富价值。对比黄金和比特币我们可以看到,比特币系统模拟的并不是实体黄金。如果我们拥有实体黄金资产,我们会拿到实物的金条、金币,将之保存在自己的保险柜中。

比特币系统模拟的是我们在银行中购买的黄金资产。这些黄金资产背后有存放在某处的黄金作为支撑,但对普通人来说,我们并不能接触到这些实体的金条、金币,这些黄金资产只是我们账户中的记录而已。

类似地,在比特币系统中,你并不保存自己的比特币资产,即通常情况下你并非自己保存分布式账本和它所表示的比特币。你只是保存了比特币的私钥,你的数字资产还是存在链上的。

再观察银行等我们熟知的管理金钱的系统,我们存在银行的金钱资产其实是银行账本中的记录,由银行账本中的记录表示和确认我们对金钱资产的所有权。比特币系统的设计是与银行系统相似的,一个人的比特币资产是分布式账本中的记录。只不过与过去相比,这里已经发生了一个重大变化:这个账本是分布式的。

这是一个“分布式的、公开的、互联的大账本”。而比特币背后的去中心网络、工作量证明共识机制和“竞争-记账-奖励”循环确保了这个账本记录的可信度。

价值转移功能:区块链成为互联网的价值基础协议

从此,在数字世界中,我们可以在两个人之间直接进行价值转移,无须任何中心化信用中介的介入。如果从互联网应用的角度看,这个变化是,信用中介的角色被从各种互联网应用中剥离出来,下沉成为互联网更基础性的功能,即在基础层次上,区块链担任信用中介,协助我们进行价值表示和价值转移。

从比特币系统这样一个概念验证性质的系统开始,到其后的各种项目,区块链渐渐展现出对互联网的变革性意义:互联网在协议层有了价值表示和价值转移的功能,区块链成为互联网的价值基础协议。

通常来说,如图 6 所示,互联网可以大体分成三层。

Block Chain Learning Notes
图6:区块链给互联网的协议层带来巨变
 
  • 最上层,是普通用户看到网站与移动App等应用。
  • 中间层,是协议层,这一层过去主要是信息传递的 WWW 等协议。
  • 最底层,是网络传输硬件和网络传输协议如TCP/IP等。

WWW 协议和各种网站、App 应用都是建立在硬件网络基础上的。现在看来,区块链带来的变化不是发生在普通用户看得到的应用部分,网站和 App 可能仍将保持它们现在的模样,同时比特币、以太坊等各种区块链去中心网络也仍是运行在现有互联网硬件网络之上的。

区块链带来的变化发生在中间的协议层。区块链给互联网带来了进行价值表示和价值转移的新协议。由此我们发现,互联网的结构就发生了根本性的变化。

在《商业区块链》一书中,区块链专家威廉·穆贾雅将中间的协议层称为信用层(the trust layer)。我认为,由于现在尚处于发展早期,为了便于理解,如图 6 所示,将这个新协议层称为“区块链信用层协议”(blockchain trust layer protocol)可能更直观明了。

类似于 WWW 协议,区块链信用层协议由一组协议构成,在现有硬件网络之上,形成了一个协助我们进行价值表示和价值转移的新层次。这组协议目前仍未定型,也尚未被广泛认可,在持续发展中。

互联网上一次出现协议级的变化是蒂姆·伯纳斯-李发明了 WWW 协议。WWW 协议把互联网塑造成我们现在所知的互联网,给经济、社会、生活带来了巨大的变革,在这中间只发生过一些对信息传递的相关协议的修补和升级。

这一次,互联网增加了全新的一组协议——用于价值表示和价值转移的区块链信用层协议。

巨变才刚刚开始。

我们还可以用一个微观的事物类比来看:为什么把信用中介下沉到基础层次带来的变动是巨大的?为什么协议变化带来的变动是巨大的?

我们把互联网看成一个平台,把信用中介看成其上的一个应用。比如,在Facebook或微信这样的社交网络平台上,为了满足用户的需求,第三方公司可以开发某种特定的应用。但这些公司始终要面对一个艰难的问题:如果平台做了这个功能,全面开放这个能力,你怎么办?当平台在平台级别提供一种能力后,所带来的变化是:一方面,第三方开发的应用可能没有存在的必要;另一方面,当平台把一个能力开放给所有人时,更多人可以利用它开发新产品,甚至更多的个人可以直接利用这个能力。当微信从2017年开始提供小程序功能时,应用开发变得方便,大量的小程序应用涌现出来,大幅度改变了移动互联网的应用生态。

价值表示物:数字世界中表示价值的通证

比特币是区块链技术的第一个应用,也是到目前为止最重要的应用,虽然它还只是一个完成了概念验证的系统,比特币系统完成关于价值的两个功能的验证:价值表示和价值转移。

我们已经讨论了价值表示和价值转移两个功能,接下来讨论用区块链的这两个功能实现的价值表示物——通证。

要更好地理解通证,我们还是从比特币说起。通常,比特币被称为“加密数字货币”,它是一种数字商品,是被凭空发行出来的。从技术角度说,中本聪创造的比特币是一种在数字世界中可以代表价值的事物。作为技术极客,中本聪解决了一个技术难题:如何在数字世界中表示价值?

他的解决方案侧重在技术本身,而并没有考虑“比特币是不是有内在价值”,也没有考虑“人们会不会普遍接受它”。一枚比特币的价格是多少,是由*市场交易决定的。它逐渐被越来越多的人接受,是时间累积而来的。比特币的价格以及谁接受它都受到很多偶然因素的影响。现在看来,比特币是一种非常独特的价值表示,背后没有任何物理世界或数字世界中的对应价值作为支撑。

随着对比特币关注度的提升,更多人试图进一步改进比特币这个价值表示物、比特币系统和它底层的区块链技术。

2013 年年底,以太坊创始人维塔利克首次发布以太坊白皮书,他准备开发一个新的区块链项目,在前人尝试的路径上继续改进和发展。他对到那时为止的比特币的改进做了如下梳理,他写道,常被提及的应用包括:

  1. 使用链上数字资产来代表定制货币和金融工具(染色币,colored coins);
  2. 某种基础物理设备的所有权(智能资产,smart property);
  3. 如域名一样的不可互换的资产(域名币,Namecoin);
  4. 以及复杂的应用来直接控制转移数字资产,如采用事先制定的规则(智能合约,smart contracts);
  5. 甚至基于区块链的分布式自治组织(DAOs)。

现在再回顾我们可以看到,迄今为止,从比特币开始的区块链的开发和应用有以下四条主要路径:

1) 从比特币延展的各种替代币(altcoin),主要有莱特币等。通常,它们只是对比特币代码库的参数进行小修改,然后用这组程序代码运行自己的系统。它们和比特币系统一样包括三个部分:加密数字货币、分布式账本、去中心网络。在中文中,替代币也常被称为“竞争币”“山寨币”。

2) 借鉴比特币区块链的设计,开发所有人都可以接入的全新公有链,典型的有 Steem、以太坊、EOS 等。有意思的是,过去站在以比特币系统为世界中心的视角看,以太坊曾被视为替代链(alt chain)。

3) 借鉴比特币区块链的设计思想,开发适合单个企业或多个企业使用的区块链开源软件,这常被称为联盟链。典型代表是由 IBM 开发、现在由 Linux 基金会管理的超级账本项目(HyperLeger)。

4) 以比特币区块链为基础,开发基于它的协议(meta-protocol,又译为元协议、外设协议),提升性能,使之便于应用,比如钱包、侧链、跨链、支付、交易所等。

以上除了第一类以外,其他三类都已经超越比特币最初的加密数字货币(电子现金)的想法,凭空发行的加密数字货币可能只是价值表示物的一种早期特殊形式。

一个重大变化发生在 2017 年。这一年,除了竞争币和各类公有链发行的原生货币之外,以太坊的一个功能开始被广泛地使用。这个功能是,任何人都可以在以太坊上按其 ERC20 通证标准编写智能合约,发行通证。

这些通证可以在数字世界中表示某种价值,这些价值既可以是线上的,也可以是线下的;既可以是已经存在的,也可以是设想中的。有些人甚至在没想好用它代表什么价值之前,就已经在以太坊上将之发行出来,当然这造成了不少问题。以太坊还创造了一种常被称为代币众筹或首次代币发行(initial coin offering)的机制:人们可以用以太币(ETH)去参与众筹,换得相应的通证。

在后续章节中,我们会详细解释以太坊的原理、ERC20通证标准以及代币众筹。

创建通证的方便、用通证获取资金的便利以及随之而来的财富效应,使得市场上通证的数量暴增,再加上 2017 年比特币和以太币的价格暴涨,这些因素综合起来引发了一场投机狂潮。在 2017 年年底,在数字世界中代表价值的数字资产的总价值暴涨,然后在 2018 年年初又暴跌。

但不管怎样,从 2017 年年中到 2018 年年初发生的事,让区块链走出了极客圈子,变得广为人知。更多的人开始意识到它的价值,并认识到,区块链和在过去20年中带来巨变的互联网有着相似的结构,它既有技术的一面,又有经济的一面。

从比特币到以太坊,价值互联网的关键基础构件之一“通证”呈现在所有人的面前。

你可能注意到了,我们始终在用通证的说法,而没有用很多人常用的中文词“代币”。“代币”说法和“币”这个字,常让人们关注通证的货币特性。我赞同通证经济专家孟岩与中关村区块链产业联盟发起人元道等提出的中文翻译:token,可称为“通证”,指“可流通的加密数字权益证明”。

对区块链的经济一面,新的认知正在形成。延续过去的说法,很多人把比特币、以太币等基础公链的原生货币,以及通过以太坊等基础公链的智能合约发行出来的通证都称为加密数字货币。但人们逐渐发现,不是通证是加密数字货币的一种特殊情况,而是反过来,原生加密数字货币是通证的一种特殊情况。因此,在说通证时,我们采用了最广泛的含义,把数字世界中,基于区块链的各种价值表示物都称为通证。

我们还可以用 WWW 协议来类比理解区块链。WWW 协议包括三个部分:文本标记语言 HTML、文档传输协议 HTTP、指定文档网络地址的统一资源定位符 URL(见图7)。

Block Chain Learning Notes
图7:对比WWW协议与区块链信用层协议

大体上,区块链信用层协议进行记录的价值表示功能可类比为统一资源定位符 URL,进行价值转移的功能可类比为文档传输协议 HTTP,而区块链上的价值表示物(通证)可看成文本标记语言HTML(见图 8)。

Block Chain Learning Notes
图8:从比特币到以太坊:价值互联网的关键基础构件“通证”

过去,对于在 WWW 协议上可以构建什么样的应用,这个问题的答案是被逐步发现的。现在在价值互联网上,对于在区块链上可以开发什么应用,这个问题的答案也是等着在实践中被发现出来的。

总的来说,现在在数字世界中,类似于 HTML 的代表价值的语言(通证)已经准备好了。“怎么用通证,通证有什么用”等问题等待着创造性的回答。

在信息互联网中,基于万维网协议我们构建各类互联网应用;在价值互联网中,基于区块链信用层协议我们可能构建各种通证经济体(见图 9)。

区块链的第三、第四个定义如图 10 所示。

Block Chain Learning Notes
图9:对比WWW协议与区块链信用层协议:从互联网应用到通证经济体
Block Chain Learning Notes
图10:区块链的定义之三、之四

区块链将成为互联网基础协议

网络中的协议在技术上指的是,网络硬件、操作系统在进行通信时要遵守一些规则,这些规则被称为协议(protocol)。

互联网通信用的协议是所谓 TCP/IP 协议族。通常认为 TCP/IP 协议族包括四层:应用层、传输层、网络层、链路层。链路层将一些数据放在电线上;网络层对数据进行路由;传输层将数据持久化;应用层以应用的形式提供数据抽象,见图 1。

Block Chain Learning Notes
图1:网络通信协议的四层与WWW协议

TCP/IP 协议族包括一组协议:TCP 和 IP 两种基础协议,邮件传输的 SMTP 协议,超文本传输协议 HTTP、HTTPS,域名系统 DNS 等。

1989 年,蒂姆·伯纳斯-李提出了让学术界进行信息与知识共享的 WWW(万维网)协议。通常认为,WWW 协议包括三个部分:

  • 文本标记语言HTML。
  • 文档传输协议HTTP。
  • 指定文档网络地址的统一资源定位符URL。

在之前的讨论中,为简化起见,我们把信息在应用方面的相关协议称为 WWW 协议。如图 1 所示,在讨论信息传输时,我们常说的是 HTTP 协议,它位于通信协议的应用层。要注意,这里的应用层与讨论互联网应用时的“应用”是有区别的,指的并不是网站、App 等。

把互联网看成硬件网络、万维网协议、网站与 App 应用三个层次,而区块链技术带来的变化是,在现有硬件网络之上、WWW 协议旁边,构建一组用于价值表示和价值转移的新协议:区块链信用层协议。区块链仍然很新,相关的协议都在发展过程中,但现在,我们已经可以认为,它所发挥的角色类似于 WWW 协议。

如果从网络通信的应用层、传输层、网络层、链路层的分层逻辑上看,我们还可以有另一种看法:区块链可能从原应用层分离出来,形成一个价值层(见图 2)。当然,对网络通信协议的分层,在短期内还难以形成一致的修订意见。这里为了便于理解,我们试图绘制如图1-29所示的图示,在应用层、传输层、网络层、链路层四层上抽象出一个“价值层”。

Block Chain Learning Notes
图2:网络通信的第五层“价值层”:价值表示与价值转移

在信息传输时,原来的四个层次组合在一起良好地工作。但要在数字世界中表示价值、转移价值,互联网在基础协议层次并没有提供支持,我们需要在网站、App中做很多工作。并且特别地,我们通常需要一个中心化机构来担任可信第三方的角色,帮我们管理记录价值的账本,协助我们进行价值转移。

现在,正如比特币系统和其他区块链系统所展示的,区块链同时提供了关于价值的两个重要功能:价值表示和价值转移。

现在,我们不再需要可信第三方来协助进行价值表示和价值转移,用户可以通过区块链来进行点对点的价值交易。因此,我们可以认为,区块链对数字世界中与价值相关的应用功能进行了抽象,从原应用层独立抽离出来,形成了网络通信的第五个层次——价值层。

也有人认为,区块链给互联网带来的是与信用相关的功能,它担任的角色是过去的可信第三方的角色,这个从应用层分离出来的层次也可称为“可信层”。

之前我们尝试性地提出了“区块链信用层协议”的说法,以说明区块链给互联网带来了类似 WWW 协议的重大变化。这里我们又从网络通信层次的角度,尝试性地提出“价值层”的说法,因为这是互联网第一次可能在通信协议层次直接处理价值表示和价值转移。以上都是尝试性的提议,提出来供进一步探讨。

以太坊是什么?

通过深入了解比特币系统我们已经知道,区块链是源自比特币的底层技术,它让我们可以无须借助任何第三方中介直接进行价值表示和价值转移,它还给数字世界带来了价值表示物——通证。区块链将使互联网从“信息互联网”阶段跨越到“价值互联网”阶段。

但区块链技术要应用起来,还需要持续迭代升级。比特币系统和它的区块链都是专为创建一个去中心化的点对点电子现金而设计的。如果把比特币系统看成区块链 1.0,则以太坊是当之无愧的升级迭代版,是区块链 2.0 的典范。

在过去这些年中出现了很多对比特币系统的改进,如替代币(altcoin)、替代链(alt chain)、侧链与跨链等。曾被认为是替代链的以太坊,可能是对比特币系统的众多改进中被广泛接受的一个。

过去几年,基于以太坊区块链、以太坊的智能合约和通证标准,大量的通证涌现,这使以太坊变成仅次于比特币系统的热门生态。在软件层面,以太坊新加入的是智能合约,但在实际应用中,它真正带来巨变的是通证。

现在,有不少新项目在认可以太坊是区块链 2.0 的前提下,试图竞争成为所谓的区块链 3.0,试图成为应用开发的新一代平台,竞争才刚刚开始。

当下,对于区块链的发展阶段划分,一个被普遍接受的分类来自区块链研究者梅兰妮·斯万,在《区块链:新经济蓝图》一书中,她将区块链分为:区块链1.0,货币;区块链2.0,合约;区块链3.0,应用。从货币到合约、再到应用是一种阶段分类,以太坊白皮书的题目即宣称,它试图成为智能合约和去中心化应用的平台。

以太坊也在持续发展,随着它的自身技术与功能的优化,它被开发者选用于更广泛的应用开发,它或许可能往前进一步演化,成为用于应用的区块链 3.0 中的一员,毕竟以太坊最初的设计目标就是成为智能合约和去中心化应用的平台。

接下来,我们就来深入了解以太坊,并将之与比特币系统对比,以了解它的特点。以太坊的创始人叫维塔利克·布特林,常被昵称为“V神”。

详解以太坊之一:智能合约与去中心化应用的平台

维塔利克是如何逐步把以太坊发展起来的?从以太坊白皮书开始,我们来看看他的最初设想和之后一步步的历程。

在以太坊白皮书中,维塔利克在分析了比特币区块链之后认为,在比特币系统的基础上开发高级应用有三种可行路径:

  • 建立一个新的区块链。
  • 在比特币区块链上使用脚本。
  • 在比特币区块链上建立元协议(meta-protocol)。

维塔利克认为,比特币系统的主要设计 UTXO(未使用的交易输出)和其对应的脚本语言有缺陷,他总结认为它有以下四点不足(见图1):

  • 缺少图灵完备性(lack of turing-completeness)。尽管比特币的脚本语言可以支持多种计算,但是它不能支持所有的计算。
  • 价值盲(value-blindness)。UTXO 脚本不能为账户的取款额度提供精细的控制。
  • 缺少状态(lack of state)。UTXO 只能是已花费或者未花费状态,这意味着 UTXO 只能用于建立简单的、一次性的合约。
  • 区块链盲(blockchain-blindness)。UTXO 看不到区块链的数据,比如区块头部的随机数、时间戳和上一个区块数据的哈希值。

维塔利克得出了自己的结论,他认为应当开发一个“下一代智能合约和去中心化应用平台”。他把自己将要开发的系统命名为“以太坊”。

Block Chain Learning Notes
图1:一张图看清以太坊

在白皮书摘要部分,他这样描述以太坊的目标:

以太坊的目标是,提供一个区块链,内置有成熟的图灵完备的编程语言,用这种语言可以创建合约来编码,实现任意状态转换功能。

“状态转换”反映了维塔利克对比特币系统和区块链的认识。在白皮书中他认为,比特币是一个状态转换系统,而他为以太坊设计了一个更灵活的状态转换系统。

以太坊的目标描述可以细分成以下三个部分:

  1. 维塔利克要创建一个新的区块链。
  2. 这个区块链的特色是,有一个能实现所有计算,即所谓的图灵完备的脚本编程语言。
  3. 这个脚本语言可以用来创建复杂的“智能合约”,用以控制区块链的状态转换,也即进行链上数字资产的转移。

关于智能合约,在以太坊白皮书中,维塔利克用的词汇是“实现预先设定规则的一段代码”(implementing arbitrary rules)。在区块链上,这些代码的用途是控制链上的数字资产的转移。关于智能合约的更多介绍见相关冷知识专栏讨论。

在以太坊白皮书中,维塔利克认为,在以太坊上可以开发三大类应用(见图1):

  • 金融应用(financial):为用户提供更强大的的方法,用他们的钱去管理和参与合约。这些应用包括子货币、金融衍生品、对冲合约、储蓄钱包、遗嘱,甚至雇用合约。
  • 半金融应用(semi-financial):这里有钱的存在,但非金钱的方面所占的比例也很重。一个好例子是为了解决计算问题而设的自动执行的悬赏。
  • 非金融应用(non-financial):如在线投票和去中心化治理等。

以太坊的最初设计目标是建立一个智能合约和去中心化应用平台,它和比特币区块链的最大不同是,它包括了一个图灵完备的编程语言(Solidity)。利用 Solidity,我们可以在以太坊上更方便地编写“智能合约”,以太坊也提供了一个代码运行环境——以太坊虚拟机(EVM)。有了这些,在以太坊区块链上,逻辑上我们就可以开发去中心化应用(decentralized application)了。去中心化应用常被简写为 DAPP,现在它通常指利用了区块链技术的网站或移动 App 应用(见图2)。

Block Chain Learning Notes
图2:从比特币区块链到以太坊区块链

详解以太坊之二:用智能合约管理数字资产与 ERC20 通证标准

我们现在看到,以太坊并没有像最初设想的那样,从比特币区块链的加密数字货币功能跨出两大步,成为应用的平台。按梅兰妮·斯万的区分,区块链 1.0 是货币,区块链 2.0 是合约,区块链 3.0 是应用,而以太坊的初始目标是建立智能合约和去中心化应用平台。在实践中,它跨出了一步或者说半步:以太坊区块链上最常用的功能并非去中心化应用,而是编写智能合约,更符合实际情况的说法是,编写智能合约以管理用通证表示的数字资产。

这可能是区块链这个新兴技术在发展和应用过程中的必然阶段,一个新技术总会首先被用于当前条件下最适用的领域。

为了理解通证与数字资产,我们再来对比一下比特币和以太坊。

在比特币的二次开发或应用中,最广为人知的是众多的替代币。人们简单修改比特币开源代码的参数,然后就可以用这个代码运行一个新的区块链,创建新的替代币。

在以太坊的二次开发或应用中,最为广泛的是基于它的智能合约创建符合ERC20标准的通证。以太坊的智能合约将创建通证的门槛降到了很低(见图3)。

Block Chain Learning Notes
图3:从比特币到以太坊:智能合约与通证

以太坊还将进行代币众筹的门槛降到了很低。在以太坊区块链上,代币众筹的流程是,一个区块链应用项目的团队在以太坊上创建一种通证,然后投资者可以用自己的以太币按照规则兑换项目的通证。代币众筹与后来的名字(首次代币发行(ICO))在2017年大为盛行后又陷入巨大争议,这个机制被滥用了。

2017年9月4日,中国人民银行等七部委发布公告叫停首次代币发行(ICO),本书这里提及 ICO 仅为对以太坊区块链的技术进行探讨。

公告指出,“近期,国内通过发行代币形式包括首次代币发行(ICO)进行融资的活动大量涌现,投机炒作盛行,涉嫌从事非法金融活动,严重扰乱了经济金融秩序”。

公告认为,“代币发行融资是指融资主体通过代币的违规发售、流通,向投资者筹集比特币、以太币等所谓‘虚拟货币’,本质上是一种未经批准非法公开融资的行为,涉嫌非法发售代币票券、非法发行证券以及非法集资、金融诈骗、传销等违法犯罪活动”。

公告要求,“本公告发布之日起,各类代币发行融资活动应当立即停止。已完成代币发行融资的组织和个人应当做出清退等安排,合理保护投资者权益,妥善处置风险”。“本公告发布之日起,任何所谓的代币融资交易平台不得从事法定货币与代币、‘虚拟货币’相互之间的兑换业务,不得买卖或作为*对手方买卖代币或‘虚拟货币’,不得为代币或‘虚拟货币’提供定价、信息中介等服务”。

要真正了解代币众筹,我们可以回到以太坊的开始时刻。匿名的中本聪几乎靠自己一个人设计和开发了比特币系统,规划它的经济激励模型,然后让它在互联网上*生长。在比特币项目中,他花费了多少开发资金,资金来源于何处,现在我们都再也无从了解,但合理的猜测是,总投入并不大。

但是,当维塔利克和团队开发与运营以太坊时,它已经不太可能是一个宿舍里的作品,以太坊团队需要资金来运转。

在发布白皮书后,维塔利克吸引合伙人加入,建立了一个项目所需的商业和法律架构(一个瑞士公司以及后续的一个瑞士的非营利性基金会)。他和团队一起进行项目的设计与开发。在2014年4月,以太坊发布了由联合创始人加文·伍德(Gavin Wood)撰写的技术白皮书。

以太坊技术白皮书见:https://ethereum.github.io/yellowpaper/paper.pdf

为了获得所需的资金,在 2014 年 7 月到 8 月,以太坊进行了为期 42 天的在线众筹:参与者可以用比特币换取以太坊的通证——以太币(当时叫ether)。

这个代币众筹可以看成是,面向比特币持有者进行了一次以太币的预售。在 2008 年前后,KickStarter、Indigogo 等产品众筹网站开始逐渐建立,后来还出现了股权众筹等各种形式。以太坊的众筹可以说是这种产品众筹方式的延续,不同的是:

  • 它所筹集的不是法币(法定货币),而是比特币。
  • 人们获得的不是明确的商品或股权,而是换得了以太币。

这个以太币有什么用,代表什么权益,当时参与者均没有对此进行多少探讨。毕竟,这次代币众筹是在当时非常小的比特币社区中进行的,带有强烈的理想主义,很像是比特币社区的成员们用自己手上的比特币赞助了一个新区块链的开发。

通过这次代币众筹,以太坊获得了 31531 个比特币,按当时的比特币价格换算,它获得了 1843 万美元,这是当时排名第二的众筹项目。

2015 年 6 月 30 日,以太坊的首个版本正式上线,预挖的 7200 万枚以太币被分配给众筹参与者与项目团队(见图4)。在之前的众筹中,以太坊共售出了 6010 万枚以太币。到此,以太坊的代币众筹过程就完成了。

Block Chain Learning Notes
图4:以太币的供给:从7200万枚到1亿枚

资料来源:https://www.etherchain.org/charts/totalEtherSupply

由于之后比特币的价格大幅波动,众筹获得大量比特币的以太坊项目还经历了几个插曲。比如,由于比特币价格暴跌,而以太坊基金会没有在高点把手中的比特币换成法币,它用以支付各项费用的法币资金短缺,不得不大幅度削减预算。

2015 年 9 月,中国万向集团旗下的基金用 50 万美元向以太坊基金会“购买”了41.6万枚以太币。按2018年5月以太币处于较低点的价格计算,这批以太币的价值仍超过2亿美元。这常被认为是一次“赞助”,是对当时资金困难的以太坊基金会的支持。

在发展的一开始,以太坊有了这样一个成功的代币众筹,这一思路很自然地被发扬光大。

在 2015 年 11 月 19 日,以太坊的主要开发者费边·沃格尔斯特勒(F* Vogelsteller)向社区提议了 ERC20 标准。

ERC 是 Ethereum Request for Comment 的缩写,除了 ERC20 这个可互换通证标准之外,主要采用的标准还有 ERC721 不可互换通证标准(non-fungible tokens),它也被称为契约(deeds)。在 2018 年年底大为流行的加密猫(CryptoKitty)是基于 ERC721 通证标准发行的。

ERC20 最初的建议见:https://github.com/ethereum/eips/issues/20,最终标准文件见:https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md。ERC721标准地址见:https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md

这是一个用以太坊区块链智能合约发行可互换通证(fungible token)的方案。所谓可互换通证,指的是每一个通证都是一模一样的,比如任何两张 100 美元的价值是完全相同的,又比如你持有的一家上市公司的1万股普通股股票和我持有的 1 万股普通股是可互换的。

另一种方案是在 2018 年 6 月正式获得以太坊社区认可的 ERC721 通证标准,它是不可互换通证(non-fungible token)。不可互换通证的参照物是棒球卡、邮票等收藏品等,比如我的一本专门题名给我的签名书和你的同一本书是不同的,二者不可互换。

有了 ERC20 通证标准,我们可以在以太坊上很简单地编写一个智能合约,创建表示价值的通证。虽然这些通证所表示的价值是什么仍不明确,但大量的通证已经被创建出来。截至 2018 年 5 月,在以太坊上有 8 万多种创建 ERC20 标准通证的智能合约。

在 2017 年,这些符合 ERC20 标准的通证的重要用途是被用于首次代币发行的筹资,人们可以用以太币按照项目方设定的兑换率来换取这些通证,而项目方获得以太币形式的资金。

以太坊区块链及其智能合约、ERC20 通证标准提供了简单地创建代表价值的通证的技术方案,最终在 2017 年造成了通证的大爆发。这些通证在各个国家或地区的合规是一个引起激烈争论的议题。但不管怎样,从技术上讲,以太坊的实际功能是数字资产系统,因而从区块链 1.0 到区块链 2.0,是从“数字现金”到“数字资产”(见图5)。

Block Chain Learning Notes
图5:以太坊及其通证让区块链从数字现金系统演变为数字资产系统

V神是谁

“V神”的真名叫维塔利克·布特林,他以太坊的创始人,是区块链界真正的大佬。

1994 年 1 月 31 日,V神出生于俄罗斯,6 岁时,他跟随父母移民到加拿大。他的父亲是一个计算机科学家,因而他从小就接触计算机,在小学时,他被选入杰出儿童班,认识到自己对数学、编程和经济学充满了兴趣。2012 年,他赢得了国际信息学奥林匹克比赛的铜牌。以最传统的眼光看,V神就是天才少年。

在区块链世界中,V神的第一个角色是作者,他写文章探讨比特币和区块链。

17 岁时,V神从他父亲那里了解到比特币。在论坛上认识一些人之后,他被邀请为一个比特币博客写文章,当时,他写一篇文章可以得到 5 个比特币(价值 3.5 美元)。可惜的是,由于当时只有很少的人关注比特币,这个博客网站很快关停了。

2011 年 9 月,V神和网上认识的朋友一起创办了名为比特币杂志(Bitcoin Magazine)的网站,他是联合创始人和主要作者。在 2012 年年底,这个媒体还开始出版印刷版杂志,成为最早报道加密数字货币的杂志。比特币杂志后来被媒体机构 BTC Media 收购,直到 2014 年年中,V神都还在为它写文章。

在区块链世界中,V神很快有了第二个角色,一个做区块链规划与开发的程序员。

2013 年,V神周游全球,他曾有一段时间待在中国,他的中文也很好,常和中国网友在论坛上用中文交流。在这段时间内,他在全球与网上认识的朋友们见面交流比特币系统和区块链编程。

大约在这个过程中,他形成了要做名为“以太坊”(Ethereum)的项目的念头。他认为应该为比特币开发一个脚本编程语言,从而在比特币区块链上可以开发应用。但是,他的想法无法得到比特币社区的认可。因而他开始考虑,也许自己应该开发一个带有脚本编程语言的新平台。

2013 年年底,他在回到加拿大多伦多后,发布了一份白皮书形式的论文“以太坊:下一代智能合约去中心化应用平台”。他在详细地分析了比特币系统的设计、优点和不足后,提出要建立一条新的区块链,使之成为去中心化应用的平台。

以太坊白皮书的标题为:A Next-Generation Smart Contract and Decentralized Application Platform;网址为:https://github.com/ethereum/wiki/wiki/White-Paper

去中心化的想法很早就扎根在他的心中。在 13 岁的时候,V神沉迷于“魔兽世界”游戏不可自拔,但后来发生了一件事让他非常愤怒。开发魔兽游戏的暴雪公司取消了术士的“生命虹吸”技能,他写邮件和在论坛里与暴雪的工程师沟通,尝试要求恢复这个技能,但得到的回复都是,我们是出于游戏平衡才这么做的,不能恢复。V神认识到,玩家是很弱势的,像暴雪这样的游戏开发商是中心,它说了算。

后来,在为《商业区块链》一书写的序言中,V神把自己和以太坊所处的技术浪潮统称为“去中心化科技”(decentralized technologies)。他写道:“与其寄希望于我们打交道的对方能够诚实,不如建立一个能够内生包括我们想要的东西的技术系统。这样,即使里面的参与者是腐败的,系统本身也能保持正常运作,得到我们想要的效果。”

V神曾经在多伦多大学上了 8 个月学,但在拿到Facebook早期投资人彼得·蒂尔鼓励辍学创业的 10 万元蒂尔奖学金后,他从 2014 年开始全职开发以太坊项目,从此开创了一段传奇。

从 2013 年的白皮书开始,以太坊项目经过了 4 年多的发展,并最终在 2017 年大爆发:基于它的通证数量暴涨,以太坊自己的燃料货币“以太币”的价格在一年的时间里最高涨了 170 多倍,从 2017 年年初的 8 美元涨到年底的接近 1400 美元。

V神自此拥有了在区块链世界中的第三个角色——一个技术领袖。

V神引领着以太坊系统的开发,也带动着整个区块链技术的开发和应用。在中文网络论坛中,网友对他的称呼从“V生”变成了“V神”。在神秘的比特币发明者中本聪完全消失于网络后,V神成为区块链领域最重要的人物。

V神很早就表现出一个技术领袖的能力与魅力。在 2016 年出版的《区块链革命》一书中,数字经济专家唐·塔普斯科特写道,若要找一下历史上的例子做类比的话,下面这个类比是很明显的:V神之于以太坊,就如同林纳斯之于Linux系统一样。林纳斯与V神的对比如图 1 所示。

Block Chain Learning Notes
图1:林纳斯与V神:两个技术领袖

智能合约是什么

尼克·萨博最早于 1994 年提出了智能合约。他定义道:“一个智能合约是,一个计算机化的交易协议,它执行一个合约的条款。”

交易协议中的“协议”二字指的是计算机协议。尼克·萨博的智能合约论文见:http://www.fon.hum.uva.nl/rob/Courses/InformationInSpeech/CDROM/Literature/LOTwinterschool2006/szabo.best.vwh.net/smart.contracts.html

尼克·萨博是知名的计算机科学家、法学学者和密码学者,他的研究重点是智能合约和数字现金。1998 年,他还曾创建中心化的数字现金比特黄金。

为什么需要智能合约

尼克·萨博说:“智能合约的设计目标是,执行一般的合同条件,最大限度地减少恶意和意外的状况,最大限度地减少使用信任中介。”

他认为,我们需要一个这样的计算机协议:它能够完全保证,如果付款了,商品会被发送,或者商品寄出去了,就会收到钱。

在现实生活中,我们有很多办法来实现这一点。而计算机科学家的目标是,用事先确定的代码自动执行合约条款,无须人工干预和第三方中介。

智能合约中的“智能”可以理解为,按条件自动执行,无须人的干预,是自动的或自治的。

“合同”是智能合约的好类比吗

按其名字,智能合约的好类比是不是我们在商业活动中所签订的“合同”?其实不是。

智能合约贴切的形象类比,是我们在说起计算机术语“有限状态机”或“状态机”时常用的自动可乐售卖机:

  • 我们向可乐售卖机投入硬币,按一下出可乐的按钮。
  • 售卖机将一听可乐从出货口放出来。
  • 售货机恢复到最初的状态。

萨博在 1997 年的文章中也说,智能合约的原始祖先是不起眼的自动售货机。

以太坊白皮书中,维塔利克还特别指出,这里的“合约”不应被理解为需要执行或遵守的东西,而应看成是存在于以太坊执行环境中的“自治代理”(autonomous agents),它拥有自己的以太坊账户,它们收到交易信息后就相当于被捅了一下,然后自动执行一段代码。

维塔利克是以太坊的创始人,就是大名鼎鼎的“V神”。

我们还可以这么看:

  • 区块链存储的是“状态”,智能合约是它用于状态转换的方式。
  • 智能合约像一个特别的“时钟”,把世界从“同步”转向“异步”。

智能财产:用智能合约来控制实体资产

在智能合约论文中,萨博还讨论了如何把智能合约用于实体资产,形成所谓的智能财产(smart property)。

所谓智能财产,是智能合约程序按照设定的规则控制的财产。萨博举例说明如下:

  • 例如,为了防止一部车被偷窃,除非确定拥有者完成正确的“挑战响应协议”,否则车是不会启动激活的。
  • 例如,如果车是贷款买的,当拥有者无法偿还贷款时,智能合约将会自动启动扣押令,并将车钥匙的控制权交给银行。一旦拥有者还清贷款,智能合约就移除扣押令。

智能资产的概念后来被扩大了,在对比特币的相关介绍中有这样说法:由比特币区块链上的智能合约控制的资产,不管是实体的还是数字的,都叫智能资产(见图1)。

Block Chain Learning Notes
图1:智能资产:由区块链上的智能合约控制的线上或线下资产

尼克·萨博的关键论文:

    • 1994,Smart Contracts。
    • 1996,Smart Contracts:Building Blocks for Digital Markets。
    • 1997,The Idea of Smart Contracts。

以太坊智能合约是什么

以太坊是最早提出做智能合约的平台。由于以太坊区块链被普遍接受,因此多数区块链的智能合约采取与以太坊相似的设计。本文将详细介绍以太坊的智能合约:它是什么?它有什么用?

以太坊的智能合约是什么

以太坊的智能合约并非现实中常见的合同,而是存在区块链上,可以被触发执行的一段程序代码,这些代码实现了某种预定的规则,是存在于以太坊执行环境中的“自治代理”。以太坊的账户与合约如图 1 所示。

Block Chain Learning Notes
图1:以太坊的账户与合约

以太坊的智能合约设计很简明。

  • 任何人都可以在以太坊区块链上开发智能合约,这些智能合约的代码是存在于以太坊的账户中的,这类存有代码的账户叫合约账户。对应地,由密钥控制的账户可称为外部账户。
  • 以太坊的智能合约程序,是在以太坊虚拟机(Ethereum Virtual Machine,EVM)上运行的。
  • 合约账户不能自己启动运行自己的智能合约。要运行一个智能合约,需要由外部账户对合约账户发起交易,从而启动其中的代码的执行。

以太坊和比特币的一个重大不同是,前者提供了图灵完备的编程语言(Solidity)和相应的运行环境(EVM)。所谓图灵完备,指的是这个脚本编程语言可以运行所有可能的计算,而比特币的UTXO模型和脚本只能运行部分计算。

以太坊的智能合约有什么用

以太坊的智能合约被广泛应用的一个用途是创建通证,通证对应的多是以太坊区块链之外的资产。

图 2 是一个简明的图示,这是从 Komhar 咨询公司的一个图示重绘而来的。图示是一个典型的 ERC20 通证发行过程:一个项目通过智能合约创建通证,这个通证是实体资产或线上资产的价值表示物。投资者(用户)发起交易,向智能合约转入以太币(ETH),智能合约自动运转,在满足一定规则后,它向投资者账户转入相应数量的通证。

Block Chain Learning Notes
图2:以太坊的通证合约逻辑示意图

V神说以太坊的Token系统

以太坊的重要应用是在它上面用智能合约发行通证。在白皮书中,维塔利克(人称“V神”)详细地讨论了所谓的“Token 系统”。

他的讨论可以引导我们去思考:在区块链上,通证可以表示何种价值或资产?如何用通证来表示资产?以及用通证表示资产后如何形成应用系统?

以下是维塔利克在以太坊白皮书中的讨论。为了与一般性的“通证”说法区分,这里引述的中文翻译中称 token 为“令牌”。

令牌系统(token systems)

链上令牌系统有很多应用,从代表美元或黄金等资产的子货币到公司股票,代表智能资产的单独令牌,安全的、不可伪造的优惠券,甚至与传统价值完全没有关联的令牌系统,如积分奖励。

在以太坊中实施令牌系统非常容易。关键的一点是理解,所有的货币或者令牌系统从根本上来说都是带有如下操作的数据库:从A中减去X单位并把X单位加到B上。前提条件是:

  1. A在交易之前有至少X单位;
  2. 交易被A批准。

实施一个令牌系统,是把这样一个逻辑实施到一个合约中去。

区块链能方便地承载Token系统,是源于它特殊的存储机制——它存储的是状态。我们熟悉的数据库存储的不是状态,数据库的记录可以反复修改;而区块链中存储的是状态,也就是某一时刻所保存的信息。

在《商业区块链》一书中,区块链专家威廉·穆贾雅提出了一个可以用Token系统表示的事物的分类。他把区块链中可存储的事物的首字母组成了一个单词“ATOMIC”:

    • 可编程的资产(assets)。
    • 可编程的信任(trust)。
    • 可编程的所有权(ownership)。
    • 可编程的货币(money)。
    • 可编程的身份(identity)。
    • 可编程的合同(contracts)。

机器比人更需要通证

在讨论数字世界中表示价值的通证时,我们常会拿它和法定货币做比较,这会带来一个疑问:在很多情况下,延续数千年的人类货币已经工作得很好,在数字世界中,在线支付系统也工作得很好。至于它们是中心化还是去中心化的,对用户来说并不那么重要。那么,为什么我们还需要通证?

我们可以从很多个角度来探讨这个话题,其中一个可能很重要的观点是,机器比人更需要通证。

通证有什么用

如图 1 所示,我们可以用两个维度把自己所处的世界分成几个部分,一个维度是区分数字世界和物理世界;另一个维度是区分信息互联网和价值互联网。我们在这里把所有线下资产都视为一类,为第三类 ③。

Block Chain Learning Notes
图1:从四个象限看通证的用途

我们可借用这张图示来思考“通证有什么用”这个问题。

通证的作用是,在数字世界中,在区块链上表示价值。比特币、以太币等是凭空在区块链上发行出来的。

要把其他象限的价值映射到链上、用通证来表示,主要有两个路径:

  • 路径之一是,把原本在互联网上通过中心化机构的数据库表示的价值和价值转移,切换到去中心化的区块链上来。比如常见的有网络零售的支付、社交网络的积分、游戏里的道具等,反映在图中就是从象限 ② 到象限 ③。
  • 路径之二是,把实体中的资产映射到链上,通过区块链进行流通。比如常见的有:把线下的民宿、供应链金融、资产证券化(ABS)中的资产用通证进行表示,反映在图中就是从象限 ③ 到象限 ①。

这两个都是值得探索的方向,但在这两个方向上探索时,我们逐渐地感到困惑:通证除了可以更大范围地进行交易,似乎并没有带来多少独特优势。对于路径一,互联网上的各类点卡、积分、道具一直运作良好;对于路径二,用通证进行表示依然没有能解决线下资产如何数字化的问题,也没有解决它们的流通性问题。

问题可能出在,把线上、线下资产变成链上资产,用通证进行表示,通过*市场交易来发现其价格,这只是表面的变化。当我们意识到自己还在把它们折算为法币值多少钱时,我们发现,传统的法币在代表这类价值时已经做得足够好。

在如上这些领域中,用法币来表示这些价值以及相关的金融工具都非常成熟。把线下、线上资产用通证进行表示,可以带来一些优势,比如,过去在互联网上一个点赞 0.0001 美元的行为也许就被忽略了,而现在可能被通证记录下来了。但是,这带来的变化还是不那么大。出现这样的困惑是因为,我们始终站在人的视角来看通证的可能性,而通证能发挥作用的地方应当是法币不那么有效的地方。

当我们不再站在人的视角

当站到机器的视角去看通证时,我们会发现通证的独特价值,它的角色是法币无法替代的。

token 这个词在网络通信中的原始含义是令牌,只有有令牌的节点才能参与通信,令牌代表权利。当数字世界的范围扩大,在看机器相互交互的场景时,我们会看到,它们比人类更需要通证。

来看一种场景,在讨论中我们暂用 token 而不是通证。

假设,为了防止网络中的机器发出垃圾邮件,我们设定如下规则:个人电脑或手机在发出邮件时,需要消耗一个 token;发件邮件服务器也要消耗一个 token。如果这个邮件不被垃圾邮件规则拦截,或不被个人举报为垃圾邮件,那么在一定时间内,所消耗的 token 又会回到我们手中。

在这个过程中实际发生的是 token 的抵押,从而确保我们行为的正当性。系统可以预先给各个邮件账号和邮件服务器分配适量的 token,这样我们正常发送邮件就不会受到影响。对于那些需要大量发送推广邮件的人而言,他们发送的邮件有一定可能被认为是垃圾邮件,他们就需要用法币换取一定的 token,否则他们可能因为 token 数量为零而无法再发送邮件。

要让这样一个使用 token 的反垃圾邮件系统投入运营,我们的设计肯定不应是每个电脑、手机、服务器都需要存入法币,以购买 token,那只是特殊情况。我们的设计可能是,让这些机器可以自行以某种方式获取 token,比如这些计算机可以完成什么计算任务以获得 token。

从这样一个简单的例子中可以看到,机器在交互时比我们更需要 token。

放到物联网的场景中,每个传感器在和其他机器进行交互时,可能获得 token 或消耗 token。我们的做法也不应是给每个传感器开设一个和法币对应的账户。这时,我们应该设计机器专用的钱包和 token。

随着越来越多的物联网设备接入网络,我们需要有各种不同的机器 token。

在多数情况下,机器用自己类型的 token 就足够了。只有在极少数情况下,我们才需要根据一定的汇率,让这些 token 与其他数字货币进行转换,让它与法币进行转换。兑换并不频繁,转换的汇率也并不特别重要。

因此,当转换到机器视角时我们看到:在人的世界里,通证有意义,但不够大;在机器的世界里,通证不可或缺(见图2)。机器比我们人类更需要通证。机器如何使用通证,将可能是区块链和通证应用的主要探索方向之一。

Block Chain Learning Notes
图2:机器的世界 VS 人的世界

ERC20通证标准

ERC20 通证标准(ERC20 Token Standard)是通过以太坊创建通证时的一种规范。按照 ERC20 的规范可以编写一个智能合约,创建“可互换通证”。它并非强制要求,但遵循这个标准,所创建的通证可以与众多交易所、钱包等进行交互,它现在已被行业普遍接受。

ERC 是什么

ERC 是 Ethereum Request for Comment 的缩写,20 是编号。征求修正意见书(Request for Comment,RFC)是互联网工程任务组(IETF)发布的一系列工作备忘录,后来演变为用来记录互联网规范、协议、过程等的标准文件。比如,常见的互联网协议的RFC编号分别是:IP,791;TCP,793;SMTP,2821。

现在,以太坊已经沿用比特币的提法,对比特币系统的改进提案现在被称为 BIP(Bitcoin Improvement Proposals),然后加上编号。与通证相关的标准沿用 ERC 的形式,但均被纳入 EIP(Ethereum Improvement Proposals)序列之中,以太坊EIP 的标准序列包括 Core(核心改进)、Networking(网络层改进)、Interface(接口改进)、ERC(应用层意见征集)。

以太坊的改进提案网址为:https://eips.ethereum.org

ERC20 是什么

ERC20 通证标准最早由以太坊开发者费边·沃格尔斯特勒在开源社区中提出,后来以太坊创始人维塔利克(人称“V神”)撰写了第一版文档,当时名为“标准化合约API”(Standardized_Contract_APIs)。

最早的讨论文档见:https://github.com/ethereum/EIPs/issues/20

遵循 ERC20 标准,基于以太坊创建的通证是通用的,可以被以太坊和区块链世界的多数其他应用所使用。除了官方实现外,现在在以太坊网络中已经有了多种符合 ERC20 标准的软件实现。

详解 ERC20 通证标准

遵循ERC20通证标准可以编写智能合约。它需要实现的通证方法包括:可选的 name、symbol、decimals,必须有的 balanceOf、transfer、transferFrom、approve、allowance。它需要实现的事件响应包括 Transfer、Approve(见图1)。

Block Chain Learning Notes
图1:ERC20 智能合约程序的方法与事件

现在 ERC20 的文档见:https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md

除了 ERC20 之外,以太坊受关注的通证标准还有 ERC721。与 ERC20 不同,ERC721 是一种不可互换的通证标准(Non-fungible Token Standard,NFT)。

ERC20 的通证是可互换的、同质的,而 ERC721 的通证是不可互换的、非同质的;ERC20 通证是可无限分割细分的,而 ERC721 通证的最小单位是 1,无法再分割细分。

2018 年 6 月,ERC721 最终被以太坊社区正式接受,成为最终标准。之前大热的加密猫(cryptokitties,谜恋猫)所遵循的就是 ERC721 标准。

The DAO众筹事件与以太坊分叉

以太坊的代币众筹曾经历了一次大的灾难性事件,这次事件甚至导致了以太坊区块链的分叉。

2016 年 4 月 30 日,The DAO 项目在以太坊中进行代币众筹,到 5 月 28 日,这个项目筹集了 1150 万个以太币,以当时以太币的价格计算价值超过 1.5 亿美元,是当时最大金额的众筹。

但是,在 2016 年 6 月 9 日,有开发者发现 The DAO 的智能合约存在漏洞,他还在开源平台上提交了修复代码。

6 月 17 日,黑客利用漏洞向一个匿名的地址转移走了项目众筹来的 360 万枚以太币,占到总数的 1/3。

幸运的是,受限于 The DAO 的 28 日锁定期,要到 7 月 14 日,黑客才可以把这笔以太币转走。

关于如何处理这个漏洞和黑客攻击事件,挽回损失,以太坊社群分裂成了两个群体。当时,所有以太币的数量为 8000 多万枚,如果有 1150 万枚被黑客盗走,的确会对以太坊生态造成巨大的影响。

在各种方案都不能奏效后,维塔利克(人称“V神”)提出了硬分叉方案(即从某个区块开始以太坊区块链不向前兼容),从而把 The DAO 众筹来的以太币夺回来,转移到一个恢复地址上,再还给参与众筹的人。

硬分叉方案在社区中获得了 85% 的投票支持,在 2016 年 7 月 21 日分叉成功,损失被挽回了。

但是,有部分以太坊社区成员不认同这个硬分叉(他们认为没有人可以更改规则),他们仍留在最初的那条以太坊区块链上,并继续开发维护这条链。此后,以太坊区块链分叉成两支:

    • 一支是新的,叫以太坊(其代币叫 ETH);
    • 一支叫以太坊经典(Ethereum Classic,其代币叫 ETC)。

通证该如何设计?如何表示资产?

从比特币到以太坊,从区块链 1.0 的数字现金进展到区块链 2.0 的数字资产,人们关注的焦点在发生转移。在讨论比特币系统时,人们关注的是比特币、是加密数字货币,区块链是源自比特币的底层技术,比特币系统实现并验证了区块链的价值表示和价值转移这两个核心功能,并展示了这两者是可以完全去中心化的。

以太坊的重心则是区块链。以太坊也有类似于比特币的加密数字货币——以太币,但与中本聪没有为比特币设计用途不同,以太币被定位为以太坊区块链的燃料货币。以太坊白皮书说,以太币(ether,现在的代码为ETH)是以太坊的主要内部加密燃料(crypto-fuel),用于支付交易费。在价值转移上,以太坊延续了比特币的区块链设计,依靠分布式账本来进行去中心化、点对点的价值转移。

以太坊还进一步带来了智能合约和通证。通过对比我们可以看到,比特币系统只有一种加密数字货币,而在以太坊区块链上,在以太币之外出现了众多表示价值的通证。

有了智能合约和通证之后,以太坊就有了新的用途——进行数字资产的表示与交易。链上的数字资产也有了一种相对统一的价值表示形式。因而以太坊开始往前一步,超越作为数字现金系统的比特币,开始解决数字资产系统的三个问题(见图1):

  • 表示的资产是什么?
  • 如何发行?
  • 如何进行复杂交易?
Block Chain Learning Notes
图1:数字资产系统要解决的三个问题

在实际运行中,以太坊被主要用于解决前两个问题——表示的资产是什么以及如何发行。有了数字资产和相关工具之后,人们会很自然地发挥创意,创建关于数字资产的各类复杂应用。

用通证将资产表示为链上的“数字资产”

来看看通证是如何在链上表示各种资产的。

一般来说,通证是资产在区块链上的价值表示物,涉及的资产包括三类:比特币和以太币等链上的原生资产、映射到链上的线上资产、映射到链上的线下资产。当它们被在链上表示后,我们将之统称为“数字资产”。特别地,用以太坊区块链和它的智能合约可以创建与发行代表价值的通证,然后用它去关联资产,形成现在较为通行的数字资产表示物(见图2)。

在以太坊区块链上主要可以创建两种表示价值的通证:可互换的 ERC20 标准通证和不可互换的 ERC721 标准通证。可互换的通证可类比为现金,不可互换的通证可类比为房契。对表示为通证的数字资产,以太坊智能合约可以进行各种交易,如通证间的兑换、通证抵押、通证分配与消耗等,由此可以形成复杂的数字资产交易与应用。

Block Chain Learning Notes
图2:数字资产的表示与应用

正如以太坊白皮书所展示的,它的系统设计和智能合约是为了更好地进行数字资产的交易。

这里涉及三种资产:链上资产、线上资产、线下资产。其中线上资产与线下资产均不在链上,可认为是链下资产。通常,我们需要辅以预言机(oracle)等工具来连接线上、线下的资产,然后通过智能合约在链上交易。

链上与链下的交互包括两大部分:一是将链下资产与通证关联,进行通证的发行与分配;二是在链上进行通证交易后,对链下资产进行相应的变动,并将变动在链上确认。

将资产表示成通证,即转变成数字资产,带来的好处有:一是市场交易帮助发现价格,二是在流动周转中增加资产价值。其中,关于流动增加总体价值的例子,我们在现实生活中也可以体验到:二手物品的流动让买方和卖方都收益,车辆与房屋的共享提升了资源的利用效率。

我们来看数字资产的几个交易场景,然后再讨论通证的特性、分类与发行等话题。

数字资产系统的去中心化交易场景

比特币系统只能进行比特币这种数字现金的去中心化交易。而以太坊作为数字资产系统,基于它的智能合约创建的各种通证都可以进行中心化或去中心化交易。

我们来对比三种场景,看看如何通过以太坊智能合约进行链上与链下资产的去中心化交易(见图3)。

Block Chain Learning Notes
图3:“智能合约”取代中心化仲裁者

场景A:在数字世界中通过中心化中介进行交易

在数字世界中,当两个人要进行数字资产的交易时,他们之间需要一个可信第三方,这个中介完成:

  • 监督合约的执行。
  • 作为双方之间的担保。
  • 协助进行价值的记录。

以熟悉的电商购物(且特别的是购买一个电子文档)为例。假设我们在淘宝上进行交易,中心化的仲裁者又可细分为淘宝和支付宝两种角色:

  • 买家在淘宝上下单,这是通过淘宝来签订一个购买协议。
  • 买家通过支付宝付款,款项由支付宝代管,卖家发出文件,等买家确认后,支付宝将款项支付给卖家。
  • 支付宝进行结算,支付宝对双方的账户进行记录的修改,完成金钱价值的转移。

那么,如果在以太坊区块链上,通过智能合约进行一次去中心化交易,过程是什么样的?

场景B:通过智能合约进行链上数字资产交易

假设我们编写一个合约,售卖一种基于 ERC721 的不可互换通证,如性质类似于收藏卡的“加密猫”。每个加密猫通证各不相同,预先在智能合约中设定价格均为 10 个以太币,购买方式是先到先得。

这时,去中心化的数字资产交易过程如下:

  • 买方向智能合约地址转入 10 个以太币,即为发起购买邀约,智能合约担任第三方保管的角色。
  • 卖方把该收藏卡(基于 ERC721 的通证)转入买方地址。
  • 智能合约自动将以太币款项转入卖家账户。

由于这里仅涉及以太坊区块链上的数字资产(加密猫通证和以太币)的转移,因此在链上可以完成全部过程。

对比 A、B 两种场景我们看到,原本中心化的中介(如淘宝与支付宝)被按预先设定规则自动执行的智能合约所取代。中心化中介被区块链(即分布式账本和去中心网络)所取代。

场景C:通过智能合约进行涉及线下资产的交易

如果我们交易的标的不是一个链上的数字资产,比如交易是一个电子文档,甚至一个线下的房产资产,这时通常与智能合约联合起来使用的预言机就要出现了。

当交易的不是链上的数字资产时,智能合约和预言机是一对必备的组合。智能合约在链上,预言机在链下,它可以与链上的智能合约进行通信(见图4)。

比如,当卖家把数字文件传递给买家,买家确认之后,连接链上和链下的预言机就发出消息通知智能合约。在接到消息后,智能合约执行后续的步骤,把以太币转入卖家账户。

Block Chain Learning Notes
图4:智能合约在链上,预言机在链下

在涉及线下资产时,逻辑是相似的,只是过程更加复杂。比如,当购买一个实物商品时,买家要到线上的互联网界面中确认收货,而预言机会把消息传送到链上给智能合约,智能合约继续执行后续步骤。

通过这三种简单场景的对比,我们可以看到:

  • 第一,有了智能合约,用通证表示的数字资产就是可编程的;
  • 第二,它是可以由计算机自动处理的,也就是自动化的;
  • 第三,如果数字资产交易各方形成一定的规则与逻辑,那么这些交易方之间可以进行完全自治的交易,可不需要人类的参与。

这些特性组合起来,可以大幅度降低资产流转交易的成本,提高效率,并可以实现智能化。

通证的四个特征

中关村区块链产业联盟理事长元道在与孟岩的对谈文章“通证是下一代互联网数字经济的关键”中指出,通证有三个要素,缺一不可。他讨论的三个要素如下:

  • 第一是数字权益证明。通证必须是以数字形式存在的权益凭证,它必须代表的是一种权利,一种固有和内在的价值(intrinsic value)。
  • 第二是加密。通证的真实性、防篡改性、保护隐私等特性,由密码学予以保障。每一个通证都是由密码学保护的一份权利。这种保护比任何法律、权威和枪炮提供的保护都更坚固、更可靠。
  • 第三是可流通。通证必须能够在一个网络中流动,从而随时随地都可以验证。其中一部分通证是可以交易、兑换的。

通证是下一代互联网数字经济的关键——元道区块链对话之一,孟岩/文,2017年12月4日,见 https://blog.csdn.net/myan/article/details/78712506。元道原名陈升,是世纪互联数据中心的创始人、董事长。

他还说:“事实上,通证可以代表一切权益证明,从身份证到学历文凭,从货币到票据,从钥匙、门票到积分、卡券,从股票到债券,人类社会的全部权益证明都可以用通证来代表。”

根据之前的讨论,值得补充的一点是:通证是可编程的(见图5)。在区块链上,智能合约可以自动地或自治地处理通证,这是通证不同于过去的货币、证券、积分、收藏品等价值表示物的基本特征。比如,由于通证是可编程的,如果通证由一个社区内的成员持有,那么我们可以利用区块链和通证进行社区的链上治理。

Block Chain Learning Notes
图5:通证的四个特征

通证经济系统设计和通证的发行与分配

比特币系统是一个最理想化的情形:它的通证发行是完全去中心化的,由计算机算力按规则竞争完成。但当用通证表示数字资产时,我们不得不从最理想化的发行去中心化往回退了一点,这步回退是让区块链投入使用的必要妥协。

回看以太坊最初的代币众筹过程,严格地说,以太币的发行是中心化的,是由以太坊基金会将以太币售卖给比特币的持有者。但这个过程是自动化的,由预先确定规则、编写后不能修改的智能合约自动执行。

用区块链上的通证来表示链上资产、线上资产、线下资产时,完全的去中心化,甚至完全无人介入的自动化通常是不可行的。资产的设计、发行的设计以及后续项目的运行,都需要有机构来发起。这个机构在一定程度上是区块链项目的中心。

这个发起机构的角色是进行协调,将线上资产、线下资产与通证进行对应。

这个发起机构的角色是发起和发行通证。当然与过去相比,这个机构是相对去中心化的,它并不掌握社区百分之百的“股权”,也不具有绝对的话语权,而必须是做社区的协调者。

这个发起机构的角色也是持续运行项目和社群,直到社区能够自行运转。在项目的发展过程中,随着社区的扩大与强大,中心才可能开始弱化,甚至最终达成去中心化社区状态。

要仔细地辨析发起机构的角色,因为要利用通证来表示资产,构建名为“通证经济体”的产业生态圈,它是关键的驱动者。之前各种理想化的讨论是故意弱化这些发起机构的角色,与事实有很大差异。

同时,在实践中,区块链项目的发起方多为注册在新加坡等地的非营利基金会,在一些国家与地区,这是一条合规的路径。但我们认为,区块链要实现商业落地,较为现实的路径仍是与现有各国的公司注册制度形成某种连接,并强调公司在项目实际运作地的注册和合规运转。因而我们建议将区块链项目的发起机构称为“自商业公司”(Decentralized Autonomous Company,DAC),由它来利用区块链技术与经济手段促成运用通证的产业生态圈。

通过以上讨论,我们可以看到通证经济体通常采取的设计如下:通证经济体是一个产业生态圈或社区;用通证来表示一个生态或社区的广义资产;借助通证来进行分配、交易。它包括各方共同推进三个核心事务(见图6):

  • 链,区块链技术的落实。
  • 通证,通证的建立、分配与管理。
  • 社群,用户社区与投资社区等以价值共识形成的社群。
Block Chain Learning Notes
图6:名为“通证经济体”的产业生态圈和它的发起者自商业公司(DAC)

发起通证的区块链项目实体(非营利性基金会或自商业公司)是社区和资产的创建者、协调者。

一个通证经济体的发起机构的关键任务之一是设计这个产业生态圈的“通证经济系统”。

通证经济系统设计包括两面,一面是和通证的价值相关的设计,另一面是和通证的数量相关的设计(见图7)。

Block Chain Learning Notes
图7:通证经济系统设计:价值设计与数量设计

一个通证所表示的价值是什么?如何与现有资产对应?可因什么贡献而获得?如何用它投资社区?如何确定它的价格?这些是通证的价值设计关心的问题。

通证的数量设计则包括初始分配、流转和总量控制等。下面我们重点讨论一下通证的数量设计。

通常,通证在四个群体中进行发行和分配:①投资者;②团队与顾问;③生态成员;④留存。留存的通证并不进入流通,除非它的状态被改变了。团队与顾问、生态成员这两方的通证会随着时间的流逝逐步进入流通:团队与顾问的通证按预设规则逐步解除锁定;生态成员通过贡献获得通证奖励,并按规则逐步解锁与流通(见图8)。

Block Chain Learning Notes
图8:通证的数量随时间的变化

假设用通证经济系统来改造一个线下社区,那么可能有一个初始分配:投资方、团队各获得一部分通证;现有社区的成员按照规则获得一部分通证;同时将一部分通证留存,以备社区发展之需。

其中,社区成员按一定规则获得通证,就是把线上资产映射到链上,用通证表示出来。

之后,通证将根据社区成员的贡献进行分配。项目团队要设计一个通证在社区内的使用场景:

  • 生态成员如何获得通证?
  • 生态成员如何消耗通证?从项目角度说,也即如何回收通证?
  • 如何安排项目回收的通证?是再次发放与流通,是销毁,还是变更为留存状态?

另外,由于通证是一个经济系统,还会涉及其他与数量相关的经济逻辑,主要包括两点:

  • 总量。通证的总量如何变化?是增多,是不变,还是因逐步销毁而减少?
  • 解锁。被锁定的通证以什么样的速率和规则逐步释放?

确定一个通证的数量逻辑之后,我们就可以编写智能合约用代码实现它,并在区块链上自动甚至自治地运行了。

通证经济系统的设计清单如图 9 所示。

Block Chain Learning Notes
图9:通证经济系统设计清单

最后特别讨论一个尚没有明确答案的话题:如果通证是对应的某种线上或线下资产,那么所有人都期待它是持续上涨的。而如果通证是代表某种功能的使用权,则它的价格应保持相对稳定,因为如果预计它将上涨,那么谁会提前使用它呢?

在讨论通证价值设计时,人们通常将通证分成两大类:一种代表权益,价格是波动的,并且从长期看是上涨的;一种代表功能使用权,用于消费,价格应该保持相对稳定(见图10)。

Block Chain Learning Notes
图10:通证经济系统设计清单

最后特别讨论一个尚没有明确答案的话题:如果通证是对应的某种线上或线下资产,那么所有人都期待它是持续上涨的。而如果通证是代表某种功能的使用权,则它的价格应保持相对稳定,因为如果预计它将上涨,那么谁会提前使用它呢?

在讨论通证价值设计时,人们通常将通证分成两大类:一种代表权益,价格是波动的,并且从长期看是上涨的;一种代表功能使用权,用于消费,价格应该保持相对稳定(见图11)。

Block Chain Learning Notes
图11:从价值设计的角度看通证:表示权益和表示功能

从目前看,这是一种天然存在的矛盾,虽然二者可以在实践中进行一些调和。目前在进行通证价值设计时,有一种新的思路是,在一个通证经济系统中采用双通证:一个用于表示权益,一个用于表示实用功能。当然,这样做的复杂性大大增加,目前还没有被广为接受的设计思路。在附录B中,我们会讨论 Steem 区块链的通证设计,这个早期区块链项目的多通证设计是已经在实际中运行的案例,经过多轮起起伏伏,虽然有很多问题,但有真实的运行数据可供分析。

孟岩在通证经济系统设计的相关演讲中认为,币值逻辑有四种:比特币模式、稳定模式、以太坊模式和双层代币模式。我们在讨论时统一采用通证说法,称为“双通证设计”。

以太坊:数字资产的基础设施

让我们把目光转回以太坊。以太坊区块链是当下用区块链表示数字资产的基础设施。一方面,它为价值表示提供了通证;另一方面,它也为通证数量逻辑的实现提供了编程语言、工具(智能合约)、标准(ERC20等)和运行环境(EVM)。

以太坊区块链和它的智能合约、通证为数字资产的发行与交易提供了一整套去中心化的基础设施。之前,在以太坊的 ERC20 标准被广泛接纳之前,要发行一个原生数字资产需要自行开发一条链,而现在我们可以基于以太坊这条公链来创建一个数字资产的价值表示物。随着在以太坊上发行的通证越来越多,它吸引了更多的人在其上发行通证。

总的来说,以太坊让我们能方便地创建代表数字资产的通证,这使得通证变成一个基础功能,涌现出大量的在区块链上的、通证表示的数字资产。随着使用门槛和成本的降低,很多原本无法进行的应用会涌现出来。

通证的分类

通证是全新的事物,目前人们对于通证的分类仍未达成共识。这里将所见的各种分类列举如下,供你参考。

瑞士金融市场监管局(FINMA)将通证分成以下三种:

  • 支付类通证(payment)。
  • 实用类通证(utility)。
  • 资产类通证(asset)。

其中,资产类通证可视为“证券类”(security),有时,实用类也被翻译成“功能类”。

按美国 SEC 的分类方式,通证被分成属于证券与不属于证券两类。SEC 通常用“Howey Test”来判定某一金融工具是否为“投资合同”进而构成“证券”,“Howey Test”包含了四要素:

  • 资本投入;
  • 投资于一个共同事业;
  • 期待获取利润;
  • 不直接参与经营,仅仅凭借发起人或第三方的努力。

在一次分享中,知名区块链专家、万向区块链董事长肖风将通证分为功能类、证券类和基金类。也有人从产业的角度将通证分为基础公有链、行业生态类、公司证券类。

通证宝创始人王玮将通证按有发行人和无发行人分成两大类。

  • 有发行人的三种是:价值型、收益型、权利型;
  • 无发行人的一种是:计算型。计算型是一个有意思的说法,这一名称表明诸如比特币、以太币等都是基于数学计算产生的。

现在通常认为,比特币、以太币等是接近于瑞士金融市场监管局中的支付类型通证分类。除此之外的通证可以按美国 SEC 分类(证券与非证券)延展进行分类。

在 2018 年 7 月的一个分类中,奥黛丽·奈斯比(Audrey Nesbitt)将通证分为两大类、四小类,我认为,这可能是易于在实际项目的通证模型设计中使用的一种分类(见图1)。其中,两大类之间要进行相对严格的区分,但小类间不必进行明确的区分,她的分类如下:

  • 第一大类:实用型通证(utility to ken)。
    • 产品或服务通证(use of product),代表公司的产品或服务的使用权。
    • 奖励通证(reward token),用户通过自己的行为获得奖励。
  • 第二大类:证券型通证(security token)。
    • 权益通证(equity token),类似公司的股权、债券等。
    • 资产通证(asset token),对应实体世界中的资产,如不动产、黄金等。
Block Chain Learning Notes
图1:通证的一种分类

当前市场中交易的通证,多数属于权益通证,但为了不受到当前各国法规中对证券的严格监管的影响,又往往通过各种设计将自己设计为实用型通证。

在相关通证设计中,最为独特的案例是 EOS 币,它是由 Block.one 公司发行的,但它被定义为“商品售卖”,而非公司“权益”。并且特别地,公司又通过免责条款免除了 EOS 币任何和实用性相关的特性。比如,EOS 的相关条款说:EOS 币没有明示或暗示的权利、用途、目的、属性、功能或特征。

以太坊智能合约的技术与组件

要在以太坊上编写一个智能合约,所涉及的技术和组件有:

  • Solidity,以太坊的图灵完备编程语言,用于编写智能合约。
  • 虚拟机(Ethereum Virtual Machine,EVM),即智能合约运营的环境。
  • 预言机(Oracle),用于链上和链下数据信息的交换。
  • Web3.js,与以太坊区块链节点进行交互的JavaScript API。

常见的以太坊通证标准有两种:

  • ERC20标准,可互换通证。
  • ERC721标准,不可互换通证。

2014 年 12 月 31 日,维塔利克曾画了一张名为“Silos”的图,展示了他理解的以太坊架构(见图1),从下而上分别是:共识、经济、链上与链下服务、互操作、浏览器、分布式应用(DAPPs)。

一般来说,以太坊的体系架构可分为六层,与比特币系统对比,它的重要特点是把合约层从共识机制中分离出来(见图2)。

Block Chain Learning Notes
图1:2014年版的以太坊架构(维塔利克绘制)
Block Chain Learning Notes
图2:以太坊的体系架构

ERC721标准与加密猫

2017 年 11 月 28 日,“加密猫”游戏出现在互联网上。这是基于以太坊的 ERC721 标准(不可互换通证)发行的加密数字宠物,每一只猫咪各不相同。

加密猫的正式中文名叫“谜恋猫”,游戏的官网称这些加密猫是“可收藏、可繁殖、讨人喜欢的”。用户可以用以太币换购这种猫咪。这个简单的游戏吸引了大量的用户,甚至使得以太坊区块链网络出现了大拥堵。

在此之前,人们对以太坊的认识是,它的主要应用是用它的智能合约发行符合 ERC20 标准的可互换通证,同一种通证的一枚和另一枚是完全一样的。

对比而言,基于 ERC721 的这种加密猫的每一只都是独一无二的。加密猫极大地扩展了以太坊的通证用途。有不少分析文章讨论了加密猫的意义,在一篇文章中,作者萨曼莎(Samantha Radocchia)用电子邮件做类比说:

我认为在互联网的早期,没人想到它会变成今天的样子。我们那时仍在试图弄清楚如何使用互联网。然后,E-mail 出现了。突然间,这个非常强大而重要的工具改变了人们对互联网的看法。

我记得爸爸在我的小时候给我看家里发的电子邮件时,我们都很惊讶。你可以立即给世界各地的人发送一张数字便条。

我们知道(区块链)这项技术有着不可思议的潜力,但我们还无法把握所有的可能性。但像加密猫这样的应用帮助增长了用户基础,增加了我们对于什么是可能的理解。”

加密猫的关键信息如下:

  • 加密猫是一种非替代性代币,它是不可分割且独一无二的。
  • 智能合约拥有 40 亿种表型性变体(你可以看到)和基因型(你无法看到)。
  • 加密猫的架构在以太坊网络之上,加密猫的购买和育种都需要用到以太币。
  • 两只加密猫可以繁殖一只全新的后代。

资料来源:https://www.cryptokitties.co/Technical-details.

以太坊的账户

以太坊是有账户的,每个用户都可以开设账户,账户余额是我们拥有的以太币或其他基于 ERC20 标准的通证。账户的设计使得以太坊与比特币不同,根据之前的讨论我们知道,比特币只有钱包地址和未使用的交易输出。

以太坊的两种账户:外部账户和合约账户

以太坊有两种账户,如下图所示:

  • 外部账户(externally owned accounts),由密钥控制。
  • 合约账户(contract accounts),由智能合约的代码控制。
Block Chain Learning Notes
图1:以太坊的两种账户

以太坊的账户包括四个字段:一个随机数、账户的余额、合约代码(如果有的话)、存储(通常为空)。

只有合约账户才有代码,其中存储的是 codeHash(这个账户的以太坊虚拟机代码的哈希值)。这个字段在生成后是不可修改的,这意味着智能合约代码是不可修改的。

外部账户可以触发交易,而合约账户不能主动发起交易,只能在被触发后按预先编写的智能合约代码执行。

合约账户可以设置多重签名(multisign),比如一个简单示例是:现有一个合约账户,它要求一个转账由发起转账的人(Alice)和另一个人(Charles)签名均可。因此,当 Alice 通过这个合约向 Bob 转账 20 个 ETH 时,合约会通知 Charles 签名,在他签名后,Bob 才可以收到这 20 个 ETH(见图2)。

Block Chain Learning Notes
图2:以太坊合约账户的多重签名

以太坊的交易和它的区块中存的是什么

和比特币一样,以太坊的区块中存储的也是交易(transaction),它包括的字段主要有:接受者(接受的账户)、发送者的签名、发送者发给接受者的以太币金额等。

与比特币的区块中存储的是交易不同,以太坊的区块中以梅克尔帕特里夏树(Merkle Patricia Tree,MPT)形式存储的是相应的以太坊账户的状态。

以太坊的交易是所谓的状态转换函数,一个交易触发它的执行,它将相应的账户从一个状态转变成新状态,然后新状态被存储在区块链的数据区块中。

参考资料:https://github.com/ethereum/wiki/wiki/White-Paper

区块链的四大特征

在对比特币和以太坊这两个主要系统,讨论了区块链的价值表示和价值转移这两个基础功能,探讨了数字资产、通证与通证经济系统之后,我们再来看看区块链的特征与用途,尝试回答“区块链有什么用”这个问题。答案就藏在区块链的四个基础特性中。

在观察了以太坊带来的变化后,区块链特征以及与这些特征相关的应用已经较为清晰地展现在我们面前。这四个基础特征分别是:不可篡改,不可复制的唯一性,智能合约,去中心自组织或社区化(见图1)。

区块链不只是技术,它还将从经济、管理、社会层面带来变化,它可能改变人类交易的方式,它将改变货币、账本、合同、协同等方面,这是我们将在后续章节中讨论的。

Block Chain Learning Notes
图1:一张图看懂区块链:从基础到应用

接下来,我们先分别讨论区块链的这四个基础特性。

区块链的四大特征之一:不可篡改

区块链最容易被理解的特性是不可篡改的特性。

不可篡改是基于“区块+链”(block+chain)的独特账本而形成的:存有交易的区块按照时间顺序持续加到链的尾部。要修改一个区块中的数据,就需要重新生成它之后的所有区块。

共识机制的重要作用之一是使得修改大量区块的成本极高,从而几乎是不可能的。以采用工作量证明的区块链网络(比如比特币、以太坊)为例,只有拥有 51% 的算力才可能重新生成所有区块以篡改数据。但是,破坏数据并不符合拥有大算力的玩家的自身利益,这种实用设计增强了区块链上的数据可靠性。

通常,在区块链账本中的交易数据可以视为不能被“修改”,它只能通过被认可的新交易来“修正”。修正的过程会留下痕迹,这也是为什么说区块链是不可篡改的,篡改是指用作伪的手段改动或曲解。

在现在常用的文件和关系型数据中,除非采用特别的设计,否则系统本身是不记录修改痕迹的。区块链账本采用的是与文件、数据库不同的设计,它借鉴的是现实中的账本设计——留存记录痕迹。因此,我们不能不留痕迹地“修改”账本,而只能“修正”账本(见图2)。

Block Chain Learning Notes
图2:区块链账本“不能修改、只能修正”

区块链的数据存储被称为“账本”(leger,总账),这是非常符合其实质的名称。区块链账本的逻辑和传统的账本相似。比如,我可能因错漏转了一笔钱给你,这笔交易被区块链账本接受,记录在其中。修正错漏的方式不是直接修改账本,将它恢复到这个错误交易前的状态;而是进行一笔新的修正交易,你把这笔钱转回给我。当新交易被区块链账本接受,错漏就被修正,所有的修正过程都记录在账本之中,有迹可循。

将区块链投入使用的第一类设想正是利用它的不可篡改特性。农产品或商品溯源的应用是将它们的流通过程记录在区块链上,以确保数据记录不被篡改,从而提供追溯的证据。在供应链领域应用区块链的一种设想是,确保接触账本的人不能修改过往记录,从而保障记录的可靠性。

2018 年 3 月,在网络零售集团京东发布的《区块链技术实践白皮书》中,京东认为,区块链技术(分布式账本)的三种应用场景是:跨主体协作,需要低成本信任,存在长周期交易链条。这三个应用场景所利用的都是区块链的不可篡改特性。多主体在一个不可篡改的账本上协作,降低了信任成本。区块链账本中存储的是状态,未被涉及的数据的状态不会发生变化,且越早前的数据越难被篡改,这使得它适用于长周期交易。

区块链的四大特征之二:表示价值所需要的唯一性

不管是可互换通证(ERC20),还是不可互换通证(ERC721),又或者是其他提议中的通证标准,以太坊的通证都展示了区块链的一个重要特征:表示价值所需要的唯一性。

在数字世界中,最基本单元是比特,比特的根本特性是可复制。但是价值不能被复制,价值必须是唯一的。之前我们已经讨论过,这正是矛盾所在:在数字世界中,我们很难让一个文件是唯一的,至少很难普遍地做到这一点。这是现在我们需要中心化的账本来记录价值的原因。

在数字世界中,我们没法像拥有现金一样,手上拿着钞票。在数字世界中,我们需要银行等信用中介,我们的钱是由银行账本帮忙记录的。

比特币系统带来的区块链技术可以说第一次把“唯一性”普遍地带入了数字世界,而以太坊的通证将数字世界中的价值表示功能普及开来。

2018 年年初,中国的两位科技互联网企业领袖不约而同地强调了区块链带来的“唯一性”。腾讯主要创始人、CEO 马化腾说:“区块链确实是一项具有创新性的技术,用数字化表达唯一性,区块链可以模拟现实中的实物唯一性。”

百度创始人、CEO 李彦宏说:“区块链到来之后,可以真正使虚拟物品变得唯一,这样的互联网跟以前的互联网会是非常不一样的。”

对于通证经济的探讨和展望正是基于,在数字世界中,在网络基础层次上区块链提供了去中心化的价值表示和价值转移的方式。在以以太坊为代表的区块链 2.0 时代,出现了更通用的价值代表物——通证,从区块链1.0的数字现金时期进入到数字资产时期。

区块链的四大特征之三:智能合约

从比特币到以太坊,区块链最大的变化是“智能合约”(见图3)。比特币系统是专为一种数字货币而设计的,它的 UTXO 和脚本也可以处理一些复杂的交易,但有很大的局限性。而维塔利克创建了以太坊区块链,他的核心目标都是围绕智能合约展开的:一个图灵完备的脚本语言、一个运行智能合约的虚拟机(EVM),以及后续发展出来的一系列标准化的用于不同类型通证的智能合约等。

Block Chain Learning Notes
图3:区块链2.0的关键改进是“智能合约”

智能合约的出现使得基于区块链的两个人不只是可以进行简单的价值转移,而可以设定复杂的规则,由智能合约自动、自治地执行,这极大地扩展了区块链的应用可能性。

当前把焦点放在通证的创新性应用上的项目,在软件层面都是通过编写智能合约来实现的。利用智能合约,我们可以进行复杂的数字资产交易。

在讨论以太坊的发展过程时,在冷知识专栏“智能合约”“以太坊的智能合约”中,我们对智能合约进行了很多讨论,在此不再赘述。这里再借维塔利克的讨论,重复一下我们认同的智能合约的软件性质——它相当于一种特殊的服务端后台程序(daemon)。在以太坊白皮书中,维塔利克写道:

(合约)应被看成是存在于以太坊执行环境中的“自治代理”(autonomous agents),它拥有自己的以太坊账户,收到交易信息,它们就相当于被捅了一下,然后它就自动执行一段代码。

智能合约的执行流程如图 4 所示。区块链的第五、第六个定义如图 5 所示。

Block Chain Learning Notes
图4:智能合约的执行流程
 
Block Chain Learning Notes
图5:区块链的定义之五、之六

区块链的四大特征之四:去中心自组织

区块链的第四大特征是去中心自组织。到目前为止,主要区块链项目的自身组织和运作都与这个特征紧密相关。很多人对区块链项目的理想期待是,它们成为自治运转的一个社区或生态。

匿名的中本聪在完成比特币的开发和初期的迭代开发之后,就完全从互联网上消失了。但他创造的比特币系统持续地运转着:无论是比特币这个加密数字货币,比特币协议即它的发行与交易机制,比特币的分布式账本、去中心网络,还是比特币矿工和比特币开发,都去中心化、自组织地运转着。

我们可以合理地猜测,在比特币之后出现了众多修改参数分叉形成的竞争币、硬分叉形成的比特币现金(BCH),可能都符合中本聪的设想。他选择了“失控”,失控可视为自治的同义词。

到目前为止,以太坊项目仍在维塔利克的“领导”之下,但正如本章一开始讨论的,他是以领导一个开源组织的方式引领着这个项目,就像林纳斯领导开源的 Linux 操作系统和 Linux 基金会一样。

维塔利克可能是对去中心自组织思考得最多的人之一,他一直强调和采用基于区块链的治理方式。2016 年以太坊的硬分叉是他提议的,但需要通过链上的社区投票,获得通过方可施行。在以太坊社区中,包括 ERC20 等在内的众多标准是社区开发者自发形成的。

在《去中心化应用》一书中,作者西拉杰·拉瓦尔(Siraj Raval)还从另一个角度进行了区分,他的这个区分有助于我们更好地理解未来的应用与组织。他从两个维度看现有的互联网技术产品:一个维度是,在组织上是中心化的,还是去中心化的;另一个维度是,在逻辑上是中心化的,还是去中心化的。

他认为:“比特币在组织上去中心化,在逻辑上集中。”而电子邮件系统在组织上和逻辑上都是去中心化的(见图6)。

Block Chain Learning Notes
图6:比特币在组织上去中心化,在逻辑上集中

在设想未来的组织时,我们心中的理想原型常是比特币的组织:完全去中心化的自治组织。但在实践过程中,为了效率和能够推进,我们又会略微往中心化组织靠拢,最终找到一个合适的平衡点。

现在,在通过以太坊的智能合约创建和发放通证,并以社区或生态方式运行的区块链项目中,不少项目的理想状态是类似于比特币的组织,但实际情况是介于完全的去中心化组织和传统的公司之间。

在讨论区块链的第四个特征去中心自组织时,其实我们已经在从代码的世界往外走,涉及人的组织与协同了。现在,各种讨论和实际探索也揭示了区块链在技术之外的意义:它可能作为基础设施支持人类的生产组织和协同的变革。这正是区块链与互联网是完全同构的又一例证,互联网也不仅仅是一项技术,它改变了人们的组织和协同。

总的来说,以太坊把区块链带入了新的阶段。在讨论以太坊时,如果要总结两个关键词的话,那么这两个关键词分别是智能合约和通证;而如果只能说一个的话,我会选择“通证”。我会更愿意从互联网的历史中找寻它的意义,重复之前的类比:作为价值表示物的通证,它的角色类似于 HTML。在有了 HTML 之后,建什么样的网站完全取决于我们的想象力。

现在,很多人迫不及待地试图进入区块链 3.0 阶段,即不再仅把区块链用于数字资产的交易,而是希望将区块链应用于各个产业和领域中,从互联网赋能走向区块链赋能,从“互联网+”走向“区块链+”。继续拿信息互联网的发展历程作为对照来展望未来,信息互联网最早是传递文本信息,但它真正的爆发是后来出现的电商、社交、游戏以及和线下结合的 O2O——也就是应用。未来,真正展现区块链价值的也将是各种现在未知的应用。

区块链3.0是什么样子的

依据区块链实际发展的情况我们认为,区块链 1.0 是数字现金,区块链 2.0 是数字资产,而期望区块链 3.0 能成为应用的平台。

那么,区块链 3.0 究竟是什么样的呢?之前,曾有人类比说,区块链 3.0 可能是像操作系统一样的应用平台。在仔细分析 EOS 等典型的区块链 3.0 项目后,我们提出,区块链 3.0 可能是价值交易的云服务平台。也即,不是把区块链看成运行应用的操作系统,而是将之看成类似亚马逊云(Amazon Web Services,AWS)、阿里云等的云服务平台。

区块链3.0的三种类比:操作系统、网站与云服务

1) 类比为操作系统

有人曾以移动互联网类比认为,区块链领域将可能出现类似苹果 iOS、谷歌研发的安卓等移动操作系统。在展望区块链的应用平台时,操作系统是合适的类比吗?

以操作系统来类比区块链容易得出的推论是,未来可能少数几个区块链系统会成为产业的主导,就像曾经在桌面计算机、服务器和移动操作系统上发生的一样:桌面系统是 Windows 与苹果的 macOS,服务器系统是 Windows Server、Linux 等,移动操作系统是 iOS 与 Android

苹果的 iOS 和谷歌开发的 Android 是一个有意思的类比:

  • iOS 是苹果专属的系统,特点是硬件和软件的紧密结合,大量的 iPhone 手机装机量,以及成熟的开发和应用生态;
  • Android 则是完全不一样的选择,谷歌将之开发出来后,它以近乎开源系统的方式运作,手机厂商自己定义硬件规格和屏幕尺寸,市场上出现了多种对之进行深度改造的系统,如小米的 MIUI。

以太坊选择的路径可认为相当于 iOS。而 EOS 的路径则相当于 Android,除了支持社区运行一个 EOS 主网之外,它鼓励其他人采用它开源的 EOSIO 开源软件架设自己的区块链网络。

在 2016 年出版的《商业区块链》一书中,区块链专家威廉·穆贾雅以“数以百万计的区块链”(Getting to millions of blockchains)作为一个小节的标题。从整体上,他展望的未来图景是:“随着公有、私有、半私有、特殊目的以及其他类型的区块链的增长扩散,数以百万计的区块链世界将会实现。”这个说法可能展现了最可能的区块链未来图景。

比特币区块链的大量替代币与后来比特币的多个分叉币让很多人担心,他们认为多条链是错误的发展方向,只应该有一条区块链,也就是最初的那条比特币区块链。站在比特币中心的视角,以太坊等众多新区块链项目也曾被认为是“替代链”(alt chain),虽然以太坊是一个参考比特币区块链的思路开发的全新项目。之后,虽然以太坊成为被接受的主要区块链之一,且看起来至少有多条区块链存在,但人们仍在不断地按操作系统类比来预测,哪条区块链会成为新的主导者。

但我逐渐意识到,威廉·穆贾雅的“数以百万计的区块链”可能才是区块链的未来。反过来,数百万条不同的区块链——这个正在涌现的图景又暗示了,操作系统的类比可能无助于我们更好地思考区块链的应用可能。

2) 类比为网站

再来看另一种类比:网站。

威廉·穆贾雅还做了一个虽然不甚准确但易懂的类比——“区块链将会成为新的网站”。在回顾了从 20 世纪 90 年代开始的网站发展史后,他类比指出:“每个公司一定会拥有或参与各种各样的区块链,无论它们是私有的、半私有的或公共的。”

让我们沿着区块链至今为止的发展路径继续观察。它是由分布式账本去中心网络组成的,它能在数字世界中做价值表示和价值转移,通证使得区块链上的数字资产开始大量涌现。

区块链并非一个纯粹的软件系统,它的应用也并非软件,对它的未来的合理类比可能并非“操作系统”。当下的区块链还不是面向普通用户的应用,它可能也不是“网站”。

3) 类比为云服务平台

未来的各个区块链可能更类似于互联网上的云服务平台,和现有云服务平台不同的是,它们的核心功能是价值交易(见图1)。

Block Chain Learning Notes
图1:区块链3.0的可能:价值交易应用的云服务平台

作为云服务的区块链3.0

让我们回到区块链的技术演进历程中去看作为云服务的区块链 3.0。

在区块链 1.0,即比特币的时期,为了创建一种新的数字货币,开发者修改比特币源代码,形成新的区块链和替代币。

在区块链 2.0,即以太坊占据主导的时期,区块链的主要应用依然是创建数字货币,但不再需要建立自己的区块链,而是可以编写以太坊的智能合约、在其上创建通证。

这些通证在技术上的有效性是靠以太坊的分布式网络来保障的。以太坊曾把自己定位为一台“全球分布式计算机”。在《区块链革命》中,商业思想家唐·塔普斯科特这样写道:“区块链上运行的所有计算资源可以在整体上视为一台计算机。”

对区块链 3.0 我们期待,除了管理链上原生的、映射自线上的、映射自线下的各种数字资产之外,在区块链上能运行复杂的价值交易应用,也即从区块链 2.0 的一个个通证进化到区块链 3.0 的一个个应用(见图2)。

区块链 3.0 要成为“应用的平台”,会使得它的基础模型可能和已知的以太坊模型有着很大的差别。

Block Chain Learning Notes
图2:区块链如何应用:从区块链1.0到区块链3.0

现在,从区块链 2.0 到区块链 3.0,人们关注的焦点往往是性能问题,比如以太坊计划通过改用 POS 共识机制(casper)和分片技术(sharding)来提升性能,又比如人们关注 EOS 采用委托权益证明机制(DPOS)来提升性能。

但是,为了让区块链可以变成应用的平台,架构的变化同样重要。

要看待这一个个应用(App),可以有两种方式:既可以把它们看成是区块链操作系统上的软件,它们用的是一条区块链的分布式账本和去中心网络;也可以把这些应用看成类似于一条条链,它们有着自己的分布式账本与去中心网络。

但这两者的差别可能没那么大。类比地看,在云服务出现之前,要开发一个网站或应用,我们要自己架设和运维服务器;而有了云服务之后,我们可以在云服务上开发自己的应用。在采用云服务时,一个个应用就有自己的一组专用服务器,像之前一样。类似地,如果采用类似的架构来开发区块链的应用,则可以认为,一个个应用也像有着自己的一条条独立的区块链。

因此,未来区块链 3.0 的整体构成方式可能类似于现在的云服务。现在的各个作为基础公链的区块链项目,做的正是云服务:以开源软件系统、分布式账本、去中心网络为基础,提供一系列和价值有关的云计算服务(见图3)。

Block Chain Learning Notes
图3:云服务VS区块链:同样的构成方式

诸如亚马逊云等云服务的出现,是亚马逊把自己的基础设施通用化,向所有人开放:

  1. 开发亚马逊云的软件系统;
  2. 部署和维护一个包括数十万台服务器的计算机网络;
  3. 为其他公司与开发者提供云计算软件服务。

现在,对试图在各个领域或产业中实际应用区域链的人来说,要在区块链上开发应用,需要的正是一个类似的云服务架构:区块链的软件系统、分布式账本与去中心网络,从及一系列云计算软件服务。

因此,我们可模仿网络服务或云服务(web services),称这一系列的软件服务为价值网络服务或区块链云服务(value web services)。

当然,区块链云服务与现有的云服务也有很多不同:

  1. 它提供的云计算软件服务是基于分布式账本与去中心网络的。
  2. 软件系统通常不是由一家公司开发,而是由社区开发的,以开源方式发布。
  3. 去中心网络不是由一家公司运维,而是由不同主体出于经济激励而自主提供的。
  4. 一系列云计算软件服务也不是由一家公司提供,而是由社区提供的。

走向应用的五条路径

让区块链变成应用的平台有多种思路,下面来分别看看。

以超级账本(HyperLedger)为代表的联盟链软件是重要思路之一,它由 IBM 最初提出与研发,现在由开源软件组织 Linux 基金会管理,是开发区块链应用的重要软件平台。

与比特币、以太坊等公有链完全开放,任何人都可以接入不同,联盟链需要经过许可才可以接入,亦称为许可链(permissioned blockchain),参与到区块链系统中的每个节点都需要经过许可,未经许可的节点无法接入。联盟链有其特定的用途,较为适合大型公司在自己的内部部署使用,或部署后在自己的产业链生态中邀请合作伙伴接入,也可以由产业联盟共同部署。

但以互联网的发展经验看,要让区块链真正成为应用的平台,主航道还是比特币与以太坊所开辟的道路,这条主航道常被为“基础公链”或“底层公链”。它们的目标是开发一条通用功能或专一功能的公有链,并同时做三件事:开发软件、运行系统、运营社区。

基础公链:通用类(general)

在这条路径上,以太坊已经做了开创性尝试且仍在持续发展。它是完全通用的,是通用类的基础公链。类似的项目还有不少,其中最热门的是 EOS,以及现在市值处于前 20 名的小蚁(NEO)、新经币(XEM)等。其中,按到现在为止的产品情况看,对 EOS 的设计思路最简单的描述或许是:一个更快、更好、更适合应用开发的以太坊。

基础公链:功能类(functional)

基础公链的路径之二是开发专用于某类功能的区块链,比如市值处于前20名的有专用于物联网的 IOTA 等。区块链的经典项目之一是 Steem 区块链和它的博客平台 Steemit,它是专用于数字内容的,在中国有类似的数字内容项目,如币乎。又比如,中国区块链社区巴比特开发的比原链(Bytom)是专用于数字资产交换的,按白皮书披露的信息它要做到的是,连通比特世界与原子世界,实现“比特资产”(原生的数字货币、数字资产)和“原子资产”(有传统物理世界对应物)的交互与流转。

基础公链:行业类(sectoral)

基础公链的路径之三是开发专用于某个行业的区块链,充分考虑该行业的特点提供相关的功能,比如保险、供应链金融、游戏、政务等。

除以上内容之外,还有一大类新区块链项目的目标是做技术的基础设施,可称为基础服务(basic services)。这里列举两组可能的方向。

其中一组是,这些项目看到的事实是,在区块链的世界中必然有着多条链,甚至有非常多条链共存,链与链之间的功能或资产的连接就变得很重要。它们关注的焦点是跨链的资产交易。

2018 年年初,新区块链项目区块基石(ArcBlock)自称是区块链 3.0,它的核心是提供跨链的协议,并以云服务的形式为开发者提供便利。另一个新项目梵塔网络(Penta)则定位在做“区块链世界的连接器”,要实现三大连接——链与链的连接、链与中心化系统的连接、链下与链上价值的连接,即为了推进区块链的应用,不只是连接不同的链,连接链上与链下,更要在需要时连接链与中心化系统。

在鲸准研究院与节点资本研究中心的“侧链跨链研究报告”(2018年)中,它认为侧链与跨链在技术上大体相似,只有在谈到它们的服务对象时才需做细致的区分:一般来说,侧链服务于主链,而跨链试图改进的是链之间价值和功能的连通。其实,现在区块链领域的主要应用之一“币币交易所”实质上做的也是跨链资产的交易,只是目前采用的主要还是中心化的方式。目前,主要的交易所都推出了自己的通证(一般称平台币),并公布基础公链计划,也即准备用区块链技术来改进自身业务。

在基础服务方面另一组可能的方向是,随着去中心化应用的出现,各种基础性技术服务成为刚需。比如,文件存储就是一个需要解决的问题,星际文件系统(InterPlanetary File System,IPFS)等项目备受关注。随着区块链应用的发展,在周边将出现更多的技术需求,分布式文件存储仅是其中之一。

综合以上讨论,在通向区块链 3.0 即应用平台的路上,大体上出现了五条路径:通用类基础公链、功能类基础公链、行业类基础公链、联盟链开源软件及基础服务(见图 4)。

我们还可以再回到云服务的视角展望区块链的发展路径。通常,云服务可分成不同的层次:IaaS(基础架构即服务)、PaaS(平台即服务)、SaaS(软件即服务)。

Block Chain Learning Notes
图4:区块链3.0:通向应用平台的五条可能路径

类似地,有的基础公链提供的是最底层的区块链服务,如通用类基础公链;有的提供的是 PaaS,有的提供的则是 SaaS,它们所覆盖的范围是功能类基础公链和行业类基础公链,当然要注意的是,现有云服务和区块链的分类方式不是一一对应的关系(见图 5)。

Block Chain Learning Notes
图5:作为云服务的区块链

「讨论」从多个网到多条链

雷纳特·卡桑辛(Renat Khasanshyn)曾展示他基于联盟链理解的区块链应用未来。现在的各类系统,比如相互连接在一起的金融系统,是由多个中心化的数据库组成的。用区块链技术来改造这些系统,他的设想是,在合适的地方用相应的区块链来取代原来的数据库(见图 6)。从图 6 中可以看到,中心化的数据库被去中心化的区块链所取代。

我们也可以看到,就像现有的系统由多个数据库以分散的方式连接在一起,新的系统是由多条区块链组成的,它们也以分散的方式连接在一起。要注意的是,这里所绘制的是几乎所有的中心化数据库都被去中心化的区块链所取代,而实际情况可能是,适合区块链的会被区块链取代,适合中心化的仍保留原有的状态。比如现在在区块链中,多条链之间的资产交换的主要有效方式是高度中心化的交易所。

Block Chain Learning Notes
图6:未来的可能图景

EOS是什么

现在从加密数字货币的市值看,除了比特币、以太坊等之外,市值最高的项目是企业操作系统(Enterprise Operating System,EOS)。从关注度看,EOS 也是 2017~2018 年的明星项目,并常被认为是区块链 3.0 的主要竞争者。

EOS 是由 Block.one 公司开发的一个新的区块链软件系统,它的目标是将一切去中心化(decentralize everything)。从 2017 年年中开始,经过一年的代币众筹后,它于 2018 年 6 月 15 通过由数十个区块生产者(block producer,BP,又称超级节点)组成的社区上线了主网,EOS 主网这条主要的区块链开始正式运转。

通过 EOS Tracker 可以查看 EOS 区块链网络(EOS 主网)的情况,网址为:https://eostracker.io/。对应地,以太坊的网络可通过如下网址查看:https://etherscan.io/;比特币网络可通过以下网址查看:https://blockchain.info/

要注意,虽然有一个 EOS 主网,但实际情况要复杂得多,任何人都可以用 EOS 提供的 EOSIO 开源软件建立自己的一条链,且 EOS 鼓励开发者这么做。

接下来,我们分几个主题介绍 EOS 这个基础公链和它的应用开发。EOS 这个基础公链可说是为应用而生的。

EOS VS 以太坊

了解 EOS 的方式之一是拿它与以太坊、比特币进行比较。

从开发目标上来讲,比特币、以太坊、EOS 是渐进的,分别是区块链 1.0、区块链 2.0、区块链 3.0,重心分别是货币、合约、应用。以太坊在实际应用中是以通证为主的。以太坊、EOS 均是借鉴与延续之前的思路重新开发,以太坊是比特币的改进,EOS 是以太坊的改进。

这里先用比喻的方式来对比比特币、以太坊、EOS,见下图。

Block Chain Learning Notes
图1:比特币、以太坊、EOS的对比

比特币的设计思路类似于黄金。在数字世界中,按工作量证明共识机制,挖矿节点进行加密计算,获得比特币形式的挖矿奖励。挖矿节点也可以获得交易费收益,不过,虽然在比特币网络中的资产价值高,但交易并不频繁,交易费收益目前在矿工收益中的占比并不高。

以太坊的设计思路类似于高速公路。在这条收费高速公路上,车辆行驶需要付费。它早期募集资金,建设“高速公路”,早期投资者享有“高速公路”的主要权益。之后,一起建设与维护“高速公路”的挖矿节点也可以获得挖矿奖励与交易费收益。在以太坊网络中,由于各类项目已经基于它生成了大量的通证,以太坊网络的交易量相对较多,挖矿节点获得的交易费收益占比高于比特币。

EOS 的设计思路则类似于房地产开发。Block.one 公司在将土地售卖出去之后,逻辑上它用获得的资金进行基础的开发,此后每年再以类似填海造田的方式增加 5% 的土地出来。

EOS 的繁荣主要取决于,已经竞购得到大量土地的开发商是不是开发和经营好自己的地块?EOS 网络要依靠超级节点(即区块生产者)来各自建设、共同运营,按现在的设计,这些节点共同获得每年 1% 新增发的 EOS 作为回报。

与以太坊不同,EOS 网络的设计是不再收取网络交易费,持有 EOS 通证则拥有对应的网络使用权利。但是,如果一个应用的开发者不持有足够的 EOS 通证,可能就要从市场中购买和付费租用,以获得使用主网的权利。类比来看,这种设计类似于购买或租用办公楼。

当然,以上用比喻的方式讨论只是为了便于理解。EOS 实际的情况是:Block.one 公司募集资金开发一个名为 EOSIO 的开源软件。EOS 社区用这个软件来运行 EOS 主网,且从逻辑上来讲,这个主网并非由 Block.one 公司运行,而是由社区运行的。另外,其他人也用 EOSIO 这个开源软件建立替代网(altnet)。

替代网(altnet)是一个模仿替代币(altcoin)而创造出来的新词。在社区运行的 EOS 主网(mainnet)之外,EOS 鼓励其他人用 EOSIO 开源软件架设新的区块链网络,这些区块链网络是类似于替代币的替代网。比特币的替代币是与比特币的价值无关的,类似地,替代网也与 EOS 主网无关。

EOS 是对以太坊的改进,各个用 EOSIO 开源软件运行起来的区块链网络,可以做几乎所有以太坊能做的事,如编写智能合约、发行通证。

为什么 EOS 有超级节点竞选

EOS 所采用的共识机制是 DPOS(委托权益证明),即一些节点在获得足够多的投票支持后,成为见证人(witness)节点或 EOS 中所说的区块生产者(BP,也称超级节点),负责区块链的区块生成。

对于比特币系统,任何人都可以接入网络,以算力竞争记账权利,生成区块。而对于 EOS,只有超级节点才有资格生产区块。这是因为两者所采用的共识机制不同:比特币和以太坊采用的是工作量证明共识机制,而 EOS 采用的是 DPOS(委托权益证明)共识机制。

围绕 POW 与 DPOS 的比较,讨论主要集中在能源消耗、效率、安全等方面。但我们也可以从去中心网络形成的角度来看,为什么 DPOS 是一种可行的选择。

基于区块链的思路开发的软件系统有以下三个关键要求:

  • 一是性能。它的去中心网络的整体性能能否支撑大量应用?
  • 二是网络。它的共识机制、经济激励和社区运营能否吸引足够多的节点加入,形成一个安全、可靠的去中心网络?
  • 三是功能。无论目标是通用类、功能类还是行业类,它是否提供了应用开发所需要的必备功能?

一个基础公链的成败关键正是以上三点:性能、功能与网络(见图2)。EOS 已经在性能和功能上做了很多努力,而 DPOS 共识机制与超级节点竞选是 EOS 在“网络”这个角上所做的努力。

Block Chain Learning Notes
图2:基础公链的三角:功能-性能-网络

对比特币和以太坊网络来说,在较长的周期内,它们以挖矿经济激励的方式,逐渐地吸引了足够多的节点加入。对于一些基础公链区块链项目,由于各种原因,它们的主要节点是由基金会或关联方运行的。其中较为典型的是小蚁(NEO),它拥有较大的交易吞吐量(TPS),但官方节点只有不到 10 个。

在 2017 年 12 月的报告中,NEO 理事会提到了其网络的去中心化计划,并解释道:“我们希望至少有 3 个节点由外部的实体运行……去中心化的初期阶段:2个节点将由 City of Zion 运行,1 个节点将由社区运行,并将由社区资助(独立于基金会),2 个节点将由以盈利为目的的区块链公司运行,2 个节点将由NEO理事会运行。”

NEO 的共识机制是 DBFT,全称为 Delegated Byzantine Fault Tolerant,是一种通过代理投票来实现大规模节点参与共识的拜占庭容错型共识机制(见NEO白皮书:http://docs.neo.org/zh-cn/)。

EOS 则用超级节点竞选的方式来刺激形成一个活跃的去中心网络,并且,超级节点竞选是与其共识机制 DPOS(委托权益证明)高度匹配的。按现在的设计,获得投票的 21 个活跃生产者和 179 个候补生产者一起生产 EOS 这条区块链的区块,即运行这个区块链网络。这些区块生产者是动态的,时刻根据投票动态调整。

EOS 的区块链生产者的收益分配机制是,区块生产者一共可获得每年新增出来的 1% 的 EOS 通证作为回报,其中 0.25% 按每个区块来进行奖励,0.75% 按所获投票来进行分配。可参见 2018 年 5 月 12 日项目发布的信息。

从 2018 年年初到 6 月 15 日 EOS 主网上线,围绕超级节点(BP)的竞争已经显示了,这个机制相对成功地调动了众多参与者竞争,促成了 EOS 去中心网络的形成。这是一条务实、有效的路径。

从另一个相关的机制设计上,我们也可以看到 EOS 团队的精心设计。与其他代币发行的项目不同,EOS 通证的发行持续了一年之久,这一方面吸引关注,另一方面或许更重要的是,这种做法使得 EOS 通证相对分散地存在于众多持有者手中,在一定程度上保障了它所使用的委托权益证明共识机制的有效性。

EOS 的体系架构:与比特币、以太坊的对比

在讨论以太坊时,我们对比了比特币和以太坊的架构差异,现在,EOS 被认为是区块链 3.0 的有力竞争者,我们再来看下这三者体系架构的差异。其中,EOS 的体系架构参考了唐煜的文章“从 EOS 系统架构看 BM 的野心”,如图3所示。

从 EOS 系统架构看BM的野心,唐煜/文,2018 年 4 月 24 日,https://mp.weixin.qq.com/s/pJQmZngnginnQL-OwcVMag

Block Chain Learning Notes
图3:EOS体系架构

在最基础的层次——数据层和网络层上,EOS 和比特币、以太坊并没有多大的区别。

EOS 的共识机制采用了与之前较为不同的 DPOS(委托权益证明)共识机制。由于采用 DPOS 共识机制,EOS 网络的激励层就可以看成不再单独存在(图中也未表示出来)。EOS 网络每年新增发 5% 的 EOS 币,其中 1% 按一定的规则分配给区块生产者,另外 4% 进入社区的提案系统(worker proposal system)资金池待分配。

EOS 的智能合约和以太坊略有差异,但基本上采取了相似的设计。EOS 的应用也与以太坊相似。因此,对于合约层和应用层,两者是相似的。

EOS 的体系设计的创新在于工具层和生态层。

为了让 EOS 适用于应用开发,EOS 团队为它设计了账户、持续化数据库(Multi-Index DB)等工具与接口。因此,这里延续唐煜的分类,认为在合约层和应用层之间存在一个工具层,这使得在 EOS 区块链上开发应用更为便利。

EOS 的另一个特殊设计在于,它将自己的 EOS 主网和 EOSIO 软件分开,鼓励开发者采用 EOSIO 软件建立行业专用、领域专用的区块链网络(应采用新的网络名),并建立自己的一系列应用。在体系架构的最上层可能出现一个生态层,这一层是采用 EOSIO 软件的区块链,比如专为游戏、物流、金融、社交、能源、医疗开发的公链。

EOS的共识机制与区块生成

在《EOSIO 技术白皮书》中,对 EOS 的共识机制 BFT-DPOS(拜占庭容错算法+权益委托共识机制)进行了说明。其中拜占庭容错算法(Byzantin eFault Tolerance)的用途是:

所有的出块者都要对所有区块签名,以确保在同一时间戳或者同一区块高度上,没有区块生产者能够同时在两个区块上签名。一旦一个区块有了 15 个区块生产者的签名,该区块就被认为是不可逆的。任一区块生产者如果想在同一时间戳或者同一区块高度的两个区块上签名,就会留下密码学证据。在这一模式下,一秒之内就可以达成不可逆的共识。

在白皮书中,EOS 对其区块的出块机制进行了介绍,转摘如下:

根据这一算法,在使用 EOSIO 软件构建的区块链上持有通证的人,可以通过一个持续进行的投票系统来选择区块生产者。任何人都可以选择参加区块生产,只要能够说服通证持有人为其投票,就会有机会参与区块的生产。

EOSIO 软件可以让区块每 0.5 秒生成一个。在任何时刻,只有一个生产者被授权生产区块。如果在计划的某个时间内没有成功出块,则跳过该块。如果有一个或更多的区块被跳过,则在区块链上会有 0.5 秒或者更久的空白。

使用 EOSIO 软件,区块的产生以 126 个区块(每个出块者六个区块,乘以 21 个出块者)为一个周期。在每个出块周期开始时,软件会根据通证持有人所投票数选出 21 个区块生产者。被选中的区块生产者的出块顺序要获得 15 个及以上的区块生产者的同意。

如果出块者错过了一个块,并且在最近 24 小时内没有产生任何块,则这个出块者将被剔除在考虑范围之外,直到他们通知区块链可以重新开始产生区块。这确保了网络的顺利运行,把被证明为不可靠的区块生产者排除在出块排序之外,这一方式使得错过区块的数量最小化。

资料来源:

关于EOS的主要开发者BM

EOS 的主要开发者是区块链的传奇人物丹尼尔·拉瑞莫(Daniel Larimer),他的网名为 ByteMaster,在网上他也被称为 BM。BM 个人参与创建了三个主要的区块链公链项目,EOS 是第三个,如下图所示。

Block Chain Learning Notes
图1:丹尼尔·拉瑞莫开发了三个主要区块链项目与一个共识机制

BM 开发的第一个主要区块链项目是比特股(Bitshares X,BTS),这个项目创建了一个去中心化的银行和交易所,使用区块链账本来创造可互换数字资产,这些资产可以市场化锚定美元、黄金、汽油等任何东西的价值。

这个区块链的共识机制正是所谓的 DPOS 共识机制(https://bitshares.org/technology/delegated-proof-of-stake-consensus/)。DPOS 是 BM 于 2013 年 12 月 8 日提出的,在同年的 7 月他已经利用这一共识机制开发了比特股。比比特股的DPOS共识机制被抽象成了石墨烯(graphene)框架,在业界被广泛使用,技术文档参见:http://docs.bitshares.org/。

BM 开发的第二个主要区块链项目是内容区块链 Steem 和基于它的博客平台 Steemit。在加密数字货币发展的初期,这个博客平台激励了很多关于数字货币、区块链的内容写作。Steem 区块链所采用的共识机制也是 DPOS。

BM 曾经与中本聪在邮件组进行交流,并提出要改变比特币的工作量证明共识机制,以让交易进行得更快。中本聪在回应了去中心化的重要性后,给 BM 的回应成为比特币与区块链世界中的名言:如果你没理解或者不相信,我也没空去说服你,抱歉。(“If you don’t believe me or don’t get it,I don’t have time to try to convince you,sorry.”)在中文世界中,这几句话也被戏谑地翻译并戏称为区块链世界的信条:“爱信信,不信滚。”

BM 曾透露,自己的理想是“找到一个能够保障人们生活、*和财产安全的*市场方案”(to find free market solutions to secure life,liberty,and property for all.)。

BM 的故事还可参考如下报道文章:DAN LARIMER:Visionary Programmer of BitShares,Steem and EOS,网址为:https://hackernoon.com/dan-larimer-visionary-programmer-of-bitshares-steem-and-eos-7e6d94b241d7

EOS 创始人 BM(Dan Larimer)的小传见:https://zhuanlan.zhihu.com/p/33771609

一张图理解EOS

从比特币到以太坊,再到 EOS,它们背后的组织渐趋复杂。比特币处在完全自运转的状态。以太坊由以太坊基金会开发软件和运转该区块链网络。出于各种原因,EOS 显得更为复杂。初看,它至少包括以下三个部分。

  • 第一,EOSIO 软件。这个开源软件是由 Block.one 公司开发的。当然严格来说,这是一个社区开发的开源软件,任何人都可以参与开发、提交代码。
  • 第二,EOS 币(EOS 通证)。EOS 币由 Block.one 公司在以太坊上按 ERC20 通证标准发售。按发售条款,发售获得的 ETH 资金归属 Block.one 公司。历时一年的发售于 2018 年 6 月 2 日结束,之后,EOS 币被映射到上线的 EOS 主网上,它现在是 EOS 主网的原生数字货币。
  • 第三,EOS 主网。通过竞选,一批区块生产者(BP,超级节点)被选出来,它们启动 EOS 主网。EOS 主网于 2018 年 6 月初由 EOS 社区上线。但可以合理地推测,在 EOS 社区中,Block.one 公司有着非常大的影响力。

在主网之外还出现了一些未获得 EOS 社区广泛认同的,可视为 EOS 替代网(altnet,这是我们造的一个与之前的替代币(altcoin)、替代链(alt chain)相对应的词)。

EOSIO 是一个开源软件,Block.one 公司也支持各方使用这个开源软件来架设自己的区块链网络。不过也出现了一些有争议的替代网,比如有的替代网试图混淆自己与 EOS 主网。开发者还可以用 EOSIO 软件建立单节点测试网、多节点测试网。

到此我们可以看到,EOS 的组成部分与多数基础公链项目一致,包括三个部分(一条链、一个通证、一个软件):EOS 主网、EOS 通证、EOSIO 开源软件。EOS 主网也是由分布式账本去中心网络组成的。与其他基础公链的一个较大不同是,它鼓励更多的人在主网之外使用和运行 EOSIO 开源软件。

如图 1 所示,EOS 的主网包括三层:最核心层是由区块生产者(BP)组成的 EOSIO 核心网,中间层是 EOSIO 接入网,外层是 EOSIO 用户。

EOSIO 开源软件包括一系列软件,其中主要有三个:nodeos、cleos、keosd。

  • nodeos:即 EOS 的核心程序,它是 EOS 节点的后台程序。
  • cleos:管理 EOS 区块链和钱包的命令程序。
  • keosd:管理 EOS 钱包的程序。

EOS 主网的账户包括两种:外部账户(由私钥控制的外部账户)和合约账户。和账户相关的概念是钱包与权限,钱包是保存密钥的客户端,而权限包括两个基础权限类别(owner 与 active),应用可自定义各种权限。

Block Chain Learning Notes
图1:一张图看懂EOS区块链与EOSIO开源软件

EOS 的智能合约

EOS 的智能合约是关联在各个合约账户上的。在 EOSIO 系统中,“合约”是沿用了区块链的专业术语,但其含义非常接近于 Linux 操作系统的后台应用,比如节点在启动时会包括四个缺省合约,如 eosio.bios、eosio.token 等。

EOS 的智能合约可以通过两种方式调用,一是用户通过命令调用,二是通过 EOSIO 软件的 send 方法调用。一个账户通过转账等动作触发另一个合约账户中的合约运行之后,这个合约可以通过软件代码调用其他的合约(见图3-11)。

EOS 智能合约现在是用 C++ 语言编写的,文件格式分别为*.hpp/*.cpp,编译后变为 WebAssembly 格式文件 WASM(*.wast)与应用头文件(*.abi)。

区块链“不可能三角”

在前面的讨论中我们提到,一个基础公链要同时兼顾功能、性能、网络三个要素。在区块链的设计中,还有一个更知名的“不可能三角”(见图1),它指的是,一个区块链项目无法同时满足三个条件,最多只能同时满足两个条件:

  • 可扩展性(scalability)
  • 去中心化(decentralization)
  • 安全(security)
Block Chain Learning Notes
图1:区块链的“不可能三角”

对比一下比特币和 EOS:比特币系统看重的是去中心化和安全,而牺牲了可扩展性;EOS 在一定程度上牺牲了去中心化,而去追求可扩展性与安全。

在很多领域中都有这样的不可能三角,我们要在三个因素间权衡:

  • 比如在软件工程中的时间(time)、成本(money)、功能性(scope)。
  • 比如在分布式系统中的一致性(consistency)、可用性(availability)、网络分区(partition tolerance)。
  • 比如在货币汇率政策中的三元悖论或保罗·克鲁格曼所画的永恒的三角形,即调节性(adjustment)、置信度(confidence)、流动性(liquidity)(见图2)。
Block Chain Learning Notes
图2:保罗·克鲁格曼的永恒的三角形

区块链应用是什么样的

EOS 的技术白皮书给出了应用所需的六个条件(如下所示),而 EOS 的软件设计的确是对应这些条件而设计的。本节我们将重点讨论 EOS 的其中三个为应用而做的特别设计:用户免费、账户体系、存储。

区块链应用的六个条件:

  1. 支持百万级别的用户,需要能够处理数千万日活跃用户的区块链技术。
  2. 使用免费,应用开发人员需要具备灵活性,能够为用户提供免费服务;用户不必为了使用平台或从平台的服务中受益而付费。
  3. 轻松升级和故障修复,区块链平台必须对软件和智能合约的升级提供支持。
  4. 延迟低,及时地反馈是良好用户体验的基础。
  5. 串行性能,有些应用程序由于必须顺序执行命令,无法用并行算法进行实现。区块链需要提供强大的串行性能支持。
  6. 并行性能,大型应用程序需要在多个CPU和计算机之间分配工作负载。

《EOSIO技术白皮书》翻译版:http://blog.eosdata.io/index.php/2018/04/28/eos-io-whitepaper-v2/;英文版:https://github.com/EOSIO/Do-cumentation/blob/master/TechnicalWhitePaper.md#accounts

区块链应用要去中心化到什么程度

类似于互联网,让区块链变得有用的所有期待都寄托在应用上,通常人们也称之为去中心化应用(DAPP)。在讨论 EOS 为应用所做的特别设计之前,我们先讨论区块链应用或所谓去中心化应用的架构,这是区块链落地应用的最前沿,众人仍在探索。

对于应用的前景,在《区块链革命》一书中,唐·塔普斯科特曾展望道:“我们在进入数字化革命的一个新纪元,人们可以进行分布式软件的编程和分享。就如区块链协议本身是分布式的那样,一个分布式的应用程序或 DAPP(去中心化应用程序)会在很多计算机上运行,而不是在一个单一的服务器上运行。”

经过 20 多年的发展,我们都已经很熟悉信息互联网的网站或移动应用是什么样的,那么,和区块链相关的去中心化应用究竟是什么样的呢?

要理解区块链应用或去中心化应用,我们还是要从熟悉的事物谈起。

现在被认同的发展前景是,互联网将从信息互联网跨越到基于区块链的价值互联网。信息互联网的应用是网站与移动 App。在展望应用时,很多人自然地认为,在区块链上将出现原生的区块链应用或去中心化应用。

这样形成的结构是如图 1 a) 所示:网站、移动 App 对应的是信息互联网,而所谓的区块链应用/去中心化应用对应着区块链。早期应用的确呈现这样的状态,比如区块浏览器、每个区块链自己的钱包等。每一条区块链都是分布式账本去中心网络,它们提供数据与功能。早期应用与这些区块链进行交互。

但我们很快发现,当普通用户要使用区块链时,应用可能变成类似于图 1 b) 的样子:网站与移动 App 中有一个与区块链进行数据和功能交互的“区块链应用”,而普通用户看到的其实还是网站与移动应用。我们甚至可以说,对于普通用户来说,可能根本没有什么区块链应用或去中心化应用,只有应用。

Block Chain Learning Notes
图1:区块链应用

如果单独看一条区块链的应用,情形可能如图 2 所示。

  • 这条区块链是分布式账本与去中心网络,它提供着一系列与价值相关的数据和功能。
  • 多个应用接入区块链网络。在这些应用中,有的可能是普通用户可以使用的,是网站/移动 App 与区块链应用的组合;有的可能是纯粹的区块链应用。
Block Chain Learning Notes
图2:区块链应用的可能性

有的应用可能接入多个区块链,比如现在常见的应用交易所、钱包就接入多个区块链。

基于 Steem 区块链的 Steemit 博客应用是少有的普通用户可以使用的应用。在 Steem 区块链上,上述这样的应用架构就展现得较为明晰:

  • Steem 区块链上存储价值(STEEM 币、SP、SBD 等三种通证),并按照内容贡献进行价值的分配。
  • 基于这条区块链建立有多个应用:普通用户可用的 Steemit 博客平台、视频平台 DTube 等;常备的应用如区块链浏览器 steemd.com 网站。它的社区算是较为活跃的,还有其他的很多应用。

Steem 的主要开发者也是 EOS 的主要开发者丹尼尔·拉瑞莫(BM),EOS 是将 Steem 区块链通用化,并做了很多改进。比如,对比 Steem 与 EOS 我们可以看到,EOS 不再采用把内容存放在区块链上这个不合理的设计,但它继续扩展了 Steem 中已经有的账号与权限体系。

比特币系统完成了用区块链进行价值表示和价值转移的概念验证,而 Steem 区块链和 Steemit 博客平台这个早期项目可能完成了区块链应用的概念验证。现在,EOS 将其之前的很多设计发扬光大。

在《去中心化应用》一书中,开发者西拉杰·拉瓦尔对去中心化应用的去中心化程度进行了一番讨论。他认为,区块链可能在四个过去集中化的方面完成去中心化:

  • 将数据去中心化(decentralized data)
  • 将财富去中心化(decentralized wealth)
  • 将身份去中心化(decentralized identity)
  • 将计算去中心化(decentralized computing)

我认为,区块链的核心功能是去中心化的价值表示和价值转移,它们分别对应的是以上分类中的财富与计算。当试图构建应用时,我们应把重点放在这两者上面。和其他主要的区块链一样,EOS 在这两个方面做得很好。它还试图大幅度改进区块链本身的核心性能,即每秒事务处理量(TPS)。

或许同样重要的是,与其他区块链相比,EOS 为开发一个普通用户可用的应用,提供了更多的功能与特性。接下来我们讨论 EOS 为应用而做的三件事:用户免费、账户与权限体系、存储系统。

用户免费

在讨论应用所需的条件时,EOS 白皮书写道:“用户不必为了使用平台或从平台的服务中受益而付费。”

用户免费是 EOS 与比特币、以太坊相对而言的显著差别。在比特币、以太坊系统中,普通用户如果进行转账交易等操作,需要支付相应的交易费。而 EOS 把承担这个费用的压力转移给了应用的提供者。

用户免费是和 EOS 的通证经济设计紧密相关的。使用一个区块链的应用通常需要三种资源,这三种资源是由维护这个去中心网络的计算机提供的,对 EOS 来说,这三种资源是由区块生产者(BP)提供的。这三种资源分别是:

  • 带宽资源:带宽和日志存储(磁盘)(Bandwidth and Log Storage(Disk))。
  • 计算资源:计算和计算积压(CPU)(Computation and Computational Backlog(CPU))。
  • 状态资源:状态存储(RAM)(State Storage(RAM))。

这三种资源(带宽资源、计算资源和状态资源)对应的是一个计算机网络的三种能力。对于熟悉计算机的人来说,带宽资源和计算资源容易理解,而状态资源是区块链的专用术语。正如之前讨论的,区块链账本中存储的是状态,比如交易账本、账户余额等,按其名字缩写为 RAM,它的性质大约相当于内存。

EOS 还特别举例说明,什么应该存入状态,什么不应该存入状态。例如,一个区块链应用程序的逻辑不需要读取博客文章的内容和评论,因此它们不应该存储在区块链的状态中。但是,博客文章或评论是否存在、投票数以及其他属性,需要存在区块链的状态之中。

特别地,BM 之前设计与开发了内容专用的区块链 Steem,在 Steem 中,博客文章和评论的文本是存储在区块链的区块(区块链账本)中的。BM 在实践中可能意识到,正确的做法应当是只在区块链账本中存储与交易相关的信息。

简单地说,区块链是用于交易的,区块链的状态是交易账本,那么,与交易相关的信息应该存入交易账本,而与交易无关的信息不应存入交易账本。

EOS 区块链的这三种资源的消耗机制是这样的:区块生产者(BP)公布可用的带宽(bandwidth)、计算(computation)和状态(state)的容量。

EOSIO 系统允许每个账户消耗一定比例的可用资源,这个比例是根据账户将自己持有的通证存入“三天抵押合约”的数量决定的。

例如,假设有一个基于 EOS 的应用,如果一个账户持有总通证的 1%,那么这个账户可利用 1% 的状态存储容量。

因此,对于如何做到对用户免费,EOS 的设计关键是如下两点。

第一,用户不用直接向区块链付费,而由应用来处理。

在以太坊区块链网络中,我要将以太币或其他基于 ERC20 标准的通证转移给别人,我作为交易的发起人,需要自己设定一个交易费(gas),给区块链网络直接付费,从而让以太坊网络能处理这一交易。

EOS 的设计逻辑是基于这样的假设:“没有任何网站要求访问者为维护服务器而支付小额费用。因此,去中心化应用程序不应该强迫它的客户为使用区块链而向区块链支付直接费用。”

EOS 虽然以“接收方付费”作为一个讨论部分的小标题,但它的思路其实是,由应用自己来决定采取什么样的方式。通常为了应用能够便于用户使用,它的基本逻辑应当是,应用自行解决费用,最终用户使用区块链网络是免费的。

第二,将交易成本与通证价值区分开。

在以太坊区块链网络中,我们支付交易费支付的是以太币,随着以太币价格的涨跌,交易成本就随着这个通证价格波动。而 EOS 的设计逻辑是:“将交易成本与通证价值区分开。”

EOS 区块链网络的做法是,一个应用拥有的带宽、计算、状态等资源,是与其持有的通证数量有关的,但由于不需要消耗,因此在一定程度上可视为与该通证的价值或价格无关。

如果我们作为应用开发者,并不持有足够多的通证,则 EOS 区块链网络还提供一种租用机制,这个机制是“将资源能力授权出去”(delegating capacity):通证的持有人可能不需要立即消耗可用带宽的全部或部分资源,他们可以选择将未消耗的带宽委托或租赁给他人。

但要注意的是这句话:“带宽和计算可以授权给他人,但是对应用程序状态的存储需要开发者持有通证,直至状态删除为止。如果程序的状态永不删除,那么这部分通证就退出了流通。”

根据 EOSIO 文档,这里的状态可认为指的是一个应用所占用的区块链网络的 RAM 存储空间。原文为:Storage of application state will require an application developer to hold tokens until that state is deleted.If state is never deleted,then the tokens are effectively removed from circulation.

对比以太坊和 EOS 我们可以看到,在以太坊中进行交易,个人用户需要支付交易费,而在 EOS 中进行交易,则是应用提供者需要承担成本,现在看来其中主要的成本是与 RAM 存储空间相关的。

账户与权限体系

EOS 与比特币、以太坊的一大不同点是,它允许用户创建一个不超过 12 位长的用户名,这个用户名代表的是我们的账户。

以太坊的账户

比特币区块链根本就没有账户的概念,比特币只有地址;以太坊设计了账户,但远没有 EOS 这么完备的账户权限相关功能。为了便于理解,我们先看从比特币到以太坊的“从地址到账户”,再看 EOS 的账户设计。

比特币是没有账户的,所有的比特币交易都是地址之间的交换。我们所持有的比特币是自己的各个地址中比特币的总和,在比特币系统中是没有账户、余额这种东西的。

以太坊引入了账户的概念:以太坊账户。每个账户包括四个信息:一个随机数、账户的余额、合约代码(如果有的话)、存储(通常为空)。

以太坊包括两类账户:

  • 外部由私钥控制的账户。
  • 合约控制的账户。

对比特币来说,它只有由外部的私钥控制的地址。在以太坊外部账户中没有代码,它可以创建和签署一个交易,也就是发出消息,而一个合约账户在收到消息后可以执行相应的代码和处理存储。这里的“合约”代码相当于存在于以太坊执行环境中的“自治代理”,它拥有自己的以太坊账户,它在收到交易信息后就相当于被捅了一下,然后自动执行一段代码。

和比特币一样,以太坊的区块中存储的也是交易,它包括的字段主要有:接受者(接受的账户)、发送者的签名、发送者发给接受者的以太币金额等。

EOS 的账户

EOS 的账户系统则要复杂得多,它更像银行的账户系统或者我们在互联网应用(比如谷歌、微信等)中的账户系统。

下面来看看 EOS 账户系统的构成。

一个 EOS 账户系统可以发送动作(action)给另一个账户,而每个账户都可以设定一个处理器(handler)来自动处理发送给自己的动作。动作和处理器的结合,就是 EOS 的智能合约(见图3)。

每个账户都有自己的内部数据库(private database),这个账户内部的内部数据库只有自己的动作处理器可以访问。

Block Chain Learning Notes
图3:EOS账户的交互:动作与处理器

EOS 系统提供了一个标准的基于角色的权限系统(role based permission management),这使得所有基于 EOS 开发的应用都可以采用这个账户体系与权限系统,而不必自己重新造*。

在 BM 之前开发的 Steem 区块链中,基于角色的权限系统就被引入区块链中,他在 Steem 中硬编码了三种用户权限:owner、active、posting。

EOS 白皮书在讨论 Steem 时说:“posting 权限只能执行诸如投票和发布等社交行为,而 active 权限除了更改所有者之外,还可以做其他任何事情。owner 权限用作冷存储,它能够做所有事情。”

EOS 对此进一步改进,对这个基于角色的权限系统进行了通用化,“允许每个账户持有者定义自己的权限层次结构以及动作的分组”。这样做给了应用开发者更多的*度。

在 EOS 开发者文档中,有关于账户与权限的开发信息,见 https://developers.eos.io/eosio-nodeos/docs/accounts-and-permissions

在 EOS 的账户权限系统中有两个缺省的权限组:*别的缺省权限组是 owner,第二个缺省权限组是 active,它可以做出除更改所有者之外的所有事。其他的权限组都可以由 active 派生出来,这些权限组用户可以自行定义。比如,我开发一个博客应用,我就可以自己定义一个 publish 权限组出来(见图4)。

Block Chain Learning Notes
图4:EOS白皮书中的一个权限系统示例

存储系统

我们都已经知道,只有与交易相关的信息应该存储在区块链的区块中,那么,对于去中心化的应用,其他的数据应该存储在何处呢?

EOS 存储的白皮书见:https://github.com/EOSIO/Docum-entation/blob/master/EOS.IO%20Storage.pdf。其中,它强调区块链的区块中不应存储文件。

绝大多数基础公链都没有解决这个周边问题,而聚焦于区块链的核心任务——交易。但为了让 EOS 可以更好地用于开发应用,EOS 在 2017 年 9 月就发布了 EOS 存储的独立白皮书,解释了它在存储方面的开发设想。

在讨论了星际文件系统(IPFS)、分布式存储项目(Filecoin、Maidsafe、Siacoin、Storj),以及现有的中心化存储(如DropBox、GoogleDriver、苹果的iCloud)等后,它提出了用自己的通证与 IPFS 结合,形成一个用于 EOS 应用开发的存储。

有了基于 IPFS 的文件存储系统之后,在 2017 年 12 月 12 日,EOS 团队发表文章给出了它建议的 EOS 应用开发架构(见图5)。从图中可以看到,在它建议的应用开发框架中,EOS 的应用是被建议存储在基于 IPFS 的 EOS 存储中的(即图中的 IPFS File Storage)。到目前为止,EOS 在存储方面还仅仅提供了一个设想,离真正落实还有一定的距离。

总的来说,区块链将价值表示和价值转移这两个与价值有关的核心功能去中心化了,区块链应用可通过接口与区块链交互数据(通证)和计算(通证交易)。EOS 作为当下最热门的新区块链系统,它的特色在于,在这两个核心功能之外,它为应用的开发提供了各种便利,可能促进更多应用的出现。

Block Chain Learning Notes
图5:EOS应用开发框架(2017年12月)

区块链的第七、第八个定义如图6所示。

Block Chain Learning Notes
图6:区块链的定义之七、之八

EOS密钥被盗后的恢复

EOS 的账户体系还有一个与绝大多数区块链项目不一样的特征,它提供了“密钥被盗后的恢复”。对其他的区块链项目而言,密钥丢失,则一切都丢失了,无法恢复,而 EOS 基于它的用户权限机制提供了恢复功能。

这有很大争议,但可能是需要的。过去,区块链项目假设,你得管理好自己的密钥,没人为你负责。但在现实生活中,当丢掉了银行的密码之后,我们希望在提供相关证明之后,银行能帮忙找回密码,帮我们找回自己的钱。

当然,EOS 提供的恢复功能只有在非常严格的情况下才可以做到:假设你的私钥被黑客盗走了,在这种情况下,你可以用过去 30 天中有效的 owner 权限对应的私钥,和你预先设定的账户恢复合作伙伴(account recovery partner)重置账户的私钥。这样你可能夺回了账户的所有权。

EOS 白皮书讨论说:“这个过程与简单的多重签名机制有极大的不同。通过多重签名的交易,有一个对象会执行并参与每一笔交易。然而,账户恢复合作伙伴仅参与了恢复的过程,并没有权力参与日常的交易。这极大地降低了相关参与者的成本和法律责任。”

按照 BM 之前设计的 Steem 区块链,要保证你的账户中的数字资产不被盗走,还需要其他机制的协同。如果黑客获得你的账户的所有权,可以立刻将你的账户中的数字资产转走,那么,你的数字资产就丢失了,你即便恢复了账户也毫无用处。

在 Steem 区块链中有这样的机制的示例。比如,如果我们把 STEEM 币存入一个储蓄账户(也就是转化所谓的 STEEM Power),那么我们要从中把 STEEM 币取出来,首先要经过一个 7 天的等待期,然后在接下来的 13 周中,每周可以取出 1/13。如果有这样的机制,那么只要在一定的时间内进行了账户恢复,重新获得账户的控制权,我们的数字资产就还没有被全部盗走。

上一篇:Wordpress主题中常用代码总结


下一篇:linux环境变量LD_LIBRARY_PATH