一、区块链概述
区块链概念在近两年成为了金融、科技行业人群探讨的热点,其首个并且是目前应用规模最广泛的案例就是比特币。
在比特币系统中,存储比特币交易记录的部分被称为区块,所有区块的集合包含了比特币从第一笔交易至最近一笔交易的所有记录,这个包含所有记录的账本是比特币中的区块链。我们认为广义的区块链代表的是规模化的分布式共识系统。
1、雅浦岛石币:小范围内的分布式共识系统
在太平洋上的雅浦岛,当地居民把一种石灰岩制成的石轮当作货币,这种石灰岩需要到400英里远的帕劳岛才能开采到。岛上的居民在决定用多大的石币付费后,甚至不用带走,只需在该石币上做个标记即可。最有趣的是,岛上的首富拥有一块体型巨大、质量上乘的石币,该石币是这户人家的祖辈出外探险得到的,在运回来的过程中遭遇了暴风雨,不得不遗弃在了海里。探险队回去之后,通过其他队员的作证,岛上的居民都承认了这块石币的价值。虽然这块石币永远被留在了海底,但是并不影响首富家的人使用它来达成交易。
在雅浦岛上,所有岛上居民对石币达成了共识,石币的价值因为居民的共识而被赋予。每一个居民关于石币归属的记忆可以理解为一个区块,所有居民链接起来就形成了整个雅浦岛的区块链。历史上这种简易的区块链是小范围,不稳定的,由于石币的归属由每个人记忆决定,并不能完全解决信用问题。
二、区块链——密码学、经济学、计算机科技的混合产物
1、区块链的意识形态:去中心化
区块链在思想层面代表了创造者去中心化的愿景,这种思想在凯文•凯利《失控》一书中也被提及,大自然生态文明的进化暗合分散到中心化再到去中心化的规律。
单独的一只蜜蜂或是蚂蚁几乎不存在智慧,而当它们形成蜂群和蚁群的时候,群体的智慧远远超出个体的累加,蜂群和蚁群是自然界去中心化团队的典型案例。
对于人类社会而言,从远古时期的原始人到后来的游牧名族、城邦再到现在的国家,中心化进程几乎已经结束,下一步可能会向去中心化发展。区块链的诞生到应用,像是一个历史拐点,标志着人类开始由中心化的集群向去中心化演进。
2、区块链的物理结构:分布式共识系统
通过前文雅浦岛石币的案例,我们大概了解了分布式共识系统。所谓分布式共识,主要包含两点:分布式与共识,分布式指的是系统运作由参与该系统的所有个体分工合作进行,共识就是所有参与者达成的一致决定。分布式共识系统简单来说就是所有参与者共同决策、共同运作、共同维护的系统。我们认为实现该系统的广泛应用,需要解决四大问题:存储问题、传输问题、拓展问题、共识问题。
存储问题主要指如何实现区块中数据记录安全、稳定的存储。区块链中的数据存储于计算机的存储介质中,并且基于密码学的应用,存储数据均被加密处理,保障了用户数据的安全性、隐私性。
传输问题主要指数据信息如何实现快速、安全的传输。传输问题的解决得益于互联网传输速度、稳定性的提升。通过网络传输速度的不断升级以及各国通信基础设施的不断完善,数据的全球快速稳定传输逐渐将成为现实。
拓展问题主要指如何扩大该系统的规模。在这里,不得不感叹比特币创造者中本聪的高明之处,他利用经济激励鼓励人们参与到该系统中,每一个合格的参与者(参与决策、运维的人员)都能从中获得经济收益即比特币,这类合格参与者被称作节点。一个分布式共识系统拥有节点数量的多少基本代表了其规模的大小。
共识问题属于该系统的核心问题。当共识系统在小范围运行时,每一个节点我们认为是基本可信的,所以达成共识并不需要很多复杂的条件。但当系统的应用范围扩展到全球,每一个节点的诚实性不能被保证,如何验证节点的真实可靠就成为了难点。对此人们研究出了多种共识证明机制,主要有工作量证明(PoW)、权益证明(PoS)、股份授权证明(DPoS)、拜占庭容错算法(pbft)。
工作量证明的意思是你需要提供工作量来证明自己的可靠性,最早被应用在比特币区块链中。具体工作量的界定在比特币中体现为寻找一个随机数,使其能满足生成新区块的规则。最先找到合适随机数的人拥有生成新区块的权利,同时也会获得一定数额的比特币造币权,这个过程就是大家熟知的挖矿。若是该节点记录的数据信息有误,这个新区块将不会被其他节点接纳,同时运算随机数消耗的电力将被浪费。
基于人都是逐利者的经济学原理,节点记录信息会保持真实可靠以获得奖励。工作量证明在比特币运作初期几乎没有问题,任何人都可以参与比特币中新区块的生成,也可以随时退出。但是随着科技的发展,计算设备由最初的CPU、GPU发展到中心化的大型ASIC矿机,个人节点的算力与矿机相差甚远,比特币的节点分布呈现中心化趋势。另外,随着计算难度的上升,比特币挖矿还造成了大量的能源浪费。
权益证明是近几年新兴的证明机制,根据每个节点持有虚拟货币的比例以及时间,决定拥有生成新区块权利的节点,奖励是根据其持币数量和时间给予对应的利息。权益证明不再需要节点进行算力比拼,节省了能耗,并且可以大大缩短共识时间。
股份授权证明与权益证明类似,所有持币者票选出一定数量的节点轮流行使记账、验证交易的职能,类似议会制度。
拜占庭容错算法与之前提到的PoW、PoS等不同,属于传统分布式一致性算法的改良版,主要解决了拜占庭将军问题。
拜占庭将军问题主要讲述的是假设存在十位将军要共同发出军事指令例如进攻或撤退,但是又没法当面讨论决定,便通过信使传递信息。如果其中存在叛徒,故意发出错误信息干扰,就无法达成全体一致的决定。通过复杂的数学证明,当有n个内奸时,总成员数>3n+1才能找出内奸,pbft算法就基于此原理运作。
简单来说pbft算法中推举出一个主节点来记录信息并形成新区块,再将新区块广播至所有其他节点(pre-prepare阶段);其他所有节点验证新区块并广播(prepare阶段);进行该当总节点数为3n+1时,若节点受到2n个节点的信息与自己的相符,则继续全网广播(commit阶段);当节点收到2n+1个节点的commit信息,便确定新区块的生成(reply阶段)。pbft算法不需要虚拟货币作为经济激励,并且由于验证的时间远远小于运算随机数的时间,达成共识几乎只需要2-5秒。但是pbft算法一定程度上要求了节点的真实可靠性,即错误节点需要少于总节点的三分之一,并且又没有算力壁垒,所以只适用于有限范围、大部分节点可靠的分布式共识系统。值得一提的是,中国央行计划推出的数字货币就采用了pbft算法。
总的来说,区块链是以去中心化思想为基础,能够实现规模应用的分布式共识系统。根据其应用范围的大小,区块链可以被分为公有链、联盟链、私有链三大类。
公有链是区块链广义上的表现形式,完全公开开放,任何人都可以参与其中成为节点、读取数据记录、使用该系统。具有完全去中心化、公开透明、数据不可篡改的特征,目前规模最大的公有链是比特币区块链。
联盟链是由若干个机构结成联盟,共同参与管理的区块链。每个机构拥有一个或多个节点,记录的数据资源只允许在联盟链内部交流,不完全公开透明,各方权限由联盟成员共同决定。
私有链是指某个机构或组织内部运作的区块链,参与决策的节点由机构自己决定。私有链能够实现在企业内部数据的公开透明,并且安全性、运行效率远远高于公有链及联盟链。综合来看,私有链对大型企业特别是金融机构很适用。
三、区块链的起源与发展
1、区块链1.0阶段:虚拟货币
2008年,中本聪在比特币论坛发表了论文《Bitcoin:A Peer-to-Peer Electronic Cash System》阐述了一种新型的数字货币:比特币。比特币是一种P2P电子现金系统,用户无需通过银行系统就能进行点对点的线上交易。
1.0阶段的区块链是注明交易时间的比特币交易记录的账本。其中的区块是数据记录集合,链是在每个区块头部存储着父区块通过哈希运算得出的哈希值,用于追踪、溯源到上一区块,由此每个区块都能与前一区块保持联系。
首先我们来看区块链结构中的区块,下图描绘了区块中的主体部分数据记录的储存方式。这种类似二叉树的存储结构被称作“梅克尔树”,梅克尔树的最底层由两两分组的比特币交易记录即数据构成,一组交易数据通过哈希运算得出对应的输出值,两组输出值再一次进行哈希运算得出上一层输出值,最终形成一个最终的哈希输出值,该输出值被称作“梅克尔树根值”。
区块中除了储存“交易数据”,还有“区块大小”、“区块头部”、“交易计数器”三个部分。整个区块的核心部分是“区块头”以及数据记录。
区块头主要包括:父区块哈希值、梅克尔树根值、时间戳、目标值和随机数,是将每个区块链接起来的关键,区块头中的父区块哈希值引用的是前一区块的哈希值,用于定位到前一区块。而梅克尔树根值则是上文提到的由两两分组的数据哈希运算得出的最终值,用来验证区块内数据是否被篡改。
比特币的运作原理:
比特币的流通主要分为三个部分:造币、交易、维护。比特币造币与传统的国家央行发行货币不同,不依赖于任何一个货币发行机构,符合要求的每个新区块的记录人都可以获得造币权。从创世区块产生,每生成一个新区块会拥有发行50个比特币的权利,这个数量在每21万个区块产生后会减半,在2012年和2016年已经经过两次奖励减半,目前矿工挖到一个新区块只有12.5个比特币的发行权。因为这样的特性,导致比特币最终总量只有大约2100万个。
比特币交易涉及两个部分:交易双方和所有节点。首先,比特币存放在一个由数字与字母组成的地址中,一个比特币地址对应一个公钥与私钥(公钥通过私钥生成,地址又通过公钥生成,并且整个过程不可逆)。当发生比特币交易时,例如小明要转给小红10个比特币,小明会全网广播一条要将自己一个地址(假设该地址中有20个比特币)上的10比特币转到小红的地址的消息,并且用对应的私钥签名,整个交易的输出的是设定好的比特币脚本,通过该脚本来验证交易的有效性。另外比较重要的一点是,每个地址中的比特币在交易中是必须被清零的,剩余的钱会转到一个属于自己的新地址。
沿用上文的例子,小明从一个储存有20比特币的地址中转移10比特币给小红,并将剩余的10比特币转移到自己的新地址中,这也是为了自己比特币钱包的安全考虑(泄露公钥后有可能会被量子计算机破解)。这是交易双方之间的交易流程,但是比特币作为一个没有中央机构授权的电子货币,需要所有节点达成共识,该交易才能被确认。达成共识的主要流程是每个矿工在接收到该交易广播后,先验证该输入地址是否有足够的余额(通过追溯到该地址涉及的上一笔交易),验证成功后就将该交易纳入到自己打包的区块中,同时运算合适的随机数(挖矿),最先找到合适随机数的人就可以全网广播自己找到了新区块,该区块会被接入区块链的主链(累计难度最大的链)。当这笔交易被接入主链,就表示交易成功了。
比特币维护主要指对区块链的维护。比特币的核心是分布式账本,这个账本由所有节点共同维护。在比特币诞生初期,全网算力非常低,并且只有极少量的节点在进行挖矿,所以整个区块链非常脆弱,相应的比特币的价值也很低。随着十年的发展,比特币全网算力激增,矿工也日益增多,比特币的主链越来越难以被攻破,其价值在近几年也飞速增长。可以说区块链是比特币的根基,如果区块链出现问题,比特币会变得毫无价值。
根据比特币区块链的结构、运作原理,我们可以把区块链1.0的技术架构分为数据层、网络层、共识层、激励层、应用层。数据层指的是区块链底层架构,网络层主要指信息的传输、验证机制,共识层即比特币运用的共识机制,激励层指的是比特币采用的经济激励机制,应用层则是比特币的应用领域。
总的来说,比特币融合了密码学、经济学、去中心思想、分布式共识等理论,并通过至今接近10年的发展证明了P2P电子货币体系的可行性和稳定性,而支撑比特币体系的关键技术就是区块链。比特币拥有去中心化、去信任、数据不可篡改等特征,但是作为区块链初级阶段的应用,也有许多难以改善的缺陷,例如挖矿带来的能源浪费、区块的大小限制(1MB大小)、交易确认的效率低下等。
2、区块链2.0阶段:智能合约的衍生
2015年上线的以太坊拓展了区块链中智能合约的应用。以太坊官网给出的定义是运行智能合约的分布式平台。以太坊区块链上不仅存储着以太币的交易记录(以太坊中的虚拟币),还存储着所有在以太坊上创建、执行的智能合约。区块链的2.0阶段是储存智能合约并通过电脑编码自动执行的分布式计算机。
具体来说,以太坊通过一套图灵完备的脚本语言EVM语言来建立应用,同时用户可以直接使用如今主流的高级语言例如C语言、Python、Java,再通过以太坊的编译器转成EVM语言。其中智能合约的编译使用的新语言如Solidity、Serpent使用的都是主流语言的语法,易于上手。
因此,以太坊的区块链结构相比比特币要复杂。根据前文的讲解,我们知道比特币区块链的每个区块中都包含一个梅克尔树,用于储存用户的交易记录。而在以太坊区块链中,每个区块储存有三个梅克尔树交易树、状态树、收据树分别对应包含交易记录、账户、交易收据。交易记录即以太币的交易记录;账户中包含外部账户与合约账户,外部账户代表对应的以太坊用户、节点的身份,合约账户即智能合约,一般储存着该合约的代码;交易收据主要指的是每笔交易完成后返回的结果,例如执行合约消耗的费用记录,合约日志等。
例如执行合约消耗的费用记录,合约日志等。以太坊中的费用不止包括每笔交易的交易费,而是囊括了合约创建、合约执行等一系列活动中消耗的资源,以Gas(燃油)命名。具体来说以太坊中的外部账户通过发送交易激活合约账户,合约账户之间又可以发送消息产生联系。同时所有交易、智能合约的运行需要消耗费用即以太币,每一份智能合约在以太坊节点上同时运行并储存结果,这些消耗的以太币就被奖励给了矿工,剩余的燃油则被返还给发送交易方。
以太坊与比特币一点很大的差异在于记账模式的不同。根据前文对比特币的介绍,我们知道在使用比特币时,每发生一次交易都需要用光该账户中所有余额,所以在每次交易中,你的输入(余额)不仅会产生一笔花费的输出(需要交易给别人的数额),还会把未被花费的部分输出给你的新地址,这部分被称为UTXO(未花费过的交易输出)。所以一个用户当前拥有的比特币数其实等于他所有UTXO的累加值。这与我们普通的银行系统或是金融机构的记账方式截然不同,而以太坊中基本沿用的是我们传统银行机构使用的账户方式,即每一个用户对应拥有一个账户,主要是因为以太坊为智能合约设计,账户中不仅有以太币余额还存有智能合约代码、交易序号等内容,这些内容不适合采用UTXO模式。但该模式存在极大的弊端,以太坊中的所有节点需要同时验证所有交易,当交易量增大后势必会带来效率的极大降低。为此,以太坊正在研究一项“分片”技术,以解决交易效率及扩展性的问题。
分片技术简单来说就是将整个以太坊系统分为独立的几片,每片由专门的节点维护,并且要保证每个分片之间能够沟通交流,这就可以让以太坊中的节点同时处理更多的交易。目前分片技术仍旧处在概念阶段,关于如何实现片上交流、如何确保单片的可靠性等问题还在研究中。
对比区块链1.0的结构,区块链2.0做了调整,总体分为数据层、网络层、共识层、激励层、智能合约层,智能合约层对应1.0结构的应用层。
总的来说,以太坊给了区块链爱好者一个开放平台,基于智能合约图灵完备的编程语言,能够开发出许多应用场景,常见的有房屋租赁、远期合约、金融借贷、博彩等,拥有广阔的想象空间。
3、区块链3.0阶段:区块链社会
区块链概念最早作为比特币底层网络在2008年被提出,到2017年经过接近10年的发展,数字货币不再是研究的主体,作为能够解决人们信用问题的新一代价值传输网络,区块链技术的未来被人们寄予了厚望。
未来可能所有个体信息包括健康情况、身份、工作、家庭关系都被储存于区块链之上,这些信息可以即时调用,并且公开与否都由个人自己决定,整个社会体系相当于基于区块链搭建。陌生人之间可以自由的进行交易而不需要第三方中介的信用背书,许多现在因为信用不对称付出的额外成本都可以被节省下来。
若是以太坊的分片技术研究进展顺利,上述的这些构想可能会成为现实。整个人类社会的结构基于多条区块链,其中主链由类似联合国的组织控制,每个国家都拥有自己的区块链,再往下又会细分到各个省市,各个行业。最关键的是所有区块链都可以传递信息,每条区块链又承担着不同的职能,由不同的人群维护,形成最终的区块链社会。