从2009年比特币的诞生到2013年的这段时间里,比特币一直稳定运行,用时间证明了区块链技术的可行性和安全性,比特币可谓开创了数字货币的先河,是区块链技术的开山之作。
但是比特币技术也有明显不足,最明显的缺陷是其扩展性不足。这体现在两个方面:
一是性能不足、交易速度慢、容量小,其出块速度是10分钟/块,并且需要6个区块的确认时间,整体时间需要1小时左右,而且每秒交易数(Transactions Per Second,TPS)只有7笔左右;
二是业务的扩展局限性,只能用来处理转账交易或者使用简单的脚本来添加业务属性,在比特币里发起一笔交易时,可以使用脚本来定义一些业务功能,如交易的多签名功能,但比特币的脚本语言具有局限性,非图灵完备,无法编写复杂的业务功能,如企业债券交易流通、去中心化的资产交易等。
1.以太坊的诞生
2013年,以太坊创始人维塔利克·布特林(Vitalik Buterin)受比特币的启发,提出并发布了以太坊(Ethereum)白皮书,并将其定义为“下一代加密货币与去中心化应用平台”(A Next-Generation Smart Contract and Decentralized Application Platform)。
以太坊也是一个开源的去中心化区块链系统,与比特币相比,最主要的特色是具备图灵完备的智能合约功能,是世界上领先的可编程区块链。
以太坊的底层使用以太坊虚拟机(Ethereum Virtual Machine,EVM)来执行去中心化的合约。基于以太坊,用户可以开发不同的去中心化应用(DApp)程序来管理数字资产。
与比特币一样,以太坊网络也是一个去中心化的系统,不受任何地域和中心化组织控制。
从以太坊诞生起,创始人维塔利克·布特林就把以太坊的开发规划为四个阶段和版本。
2015年,以太坊主网上线,版本代号为“边境”(Frontier)。这是以太坊的第一次版本发布,这个版本允许开发人员对以太坊进行挖矿,并提供开发工具,让用户可以基于以太坊进行DApp的开发和使用。
2016年,第一个稳定版本“家园”(Homestead)发布。以太坊发布了第一个生产环境版本,对许多协议进行了优化改进,为之后的升级奠定了基础,并且加快了交易速度。不幸的是,同年6月,以太坊上的去中心化组织The DAO被盗,市值5000万美元的以太币被转移到黑客的合约账户里,并被暂时锁定。2016年7月20日,以太坊进行硬分叉,让所有被盗的币回归原处,而一部分矿机不接受规则改变,这些矿机仍然维护着的区块链则成为以太坊经典(Ethereum Classic)。这一行为至今仍然受到很多人的质疑,因为这已经打破了去中心化的规则,并且直接导致链的分叉,形成两条不同的链—以太坊和以太坊经典。
2019年1月,君士坦丁堡版本升级。这个版本的升级,将减少挖矿奖励,并逐渐向权益证明(PoS)方式靠近,同时提升了以太坊系统的可扩展性,使得以太坊更轻量、更快速和更安全。
宁静版本(Serenity)是以太坊升级的第四个阶段。这个版本将使用权益证明替代挖矿证明,即根据每个节点的代币持有量与持有时间之积来决定记账权。这项升级注定充满困难,毕竟使用权益证明代替挖矿证明损害矿机的利益。很多投产的矿机在无法收回成本的同时,还要继续质押一部分资产才能投入生产,这势必受到很多矿机阻挠。
以太坊项目在GitHub上可以找到,搜索ethereum得到的结果如下图所示。
在以太坊的GitHub项目里包含很多工程,主要分为以下几类:客户端、EIPs(Ethereum Improvement Proposals,以太坊改进协议)、Solidity、Remix。
(1)客户端。以太坊的客户端源代码有多个语言版本,aleth是C++版本的,go-ethereum是golang版本的。目前,开发维护以及关注人数较多的版本为golang版本的go-ethereum。用户可以编译和部署客户端挖矿或者将其作为全节点钱包发起交易。
(2)EIPs。EIPs描述了以太坊平台的协议标准,包括核心协议规范、客户端应用程序接口(Application Program Interface,API)和智能合约标准等。全世界的开发者可以在这个项目中提出对以太坊的改善提案,如果提案被委员会审核通过,那么开发者可以基于此提案进行以太坊平台升级。
(3)Solidity。Solidity是以太坊智能合约的静态编程语言,这个工程是该语言的编译器,用于将智能合约代码编译生成以太坊虚拟机可以识别和执行的字节码。
(4)Remix。这是一个帮助开发者进行智能合约开发、编译、测试和部署的集成开发环境(Integrated Development Environment,IDE)工具。开发者使用Remix IDE可以快速开发DApp程序,可以部署该工具在本机环境里使用。当然,以太坊官方也提供了在线开发工具,省去了用户部署的麻烦,该工具网址可以在该工程的readme.md帮助文档里找到。
2.智能合约
与比特币相比,以太坊在区块链技术上最大的贡献是基于区块链设计并实现智能合约。
什么是智能合约呢?智能合约是一种特殊的计算机合同协议,使用信息化的方式传播、执行和验证,整个过程都通过计算机来实现。
智能合约的概念于1994年由计算机科学家和密码学专家尼克·萨博(Nick Szabo)首次提出,但是当时由于计算机技术的限制,智能合约的概念并没有得到太多的关注和回应,在多年之后也没有得到太大的发展。
直到以比特币为首的区块链技术诞生,人们才逐渐尝试将智能合约与区块链结合起来,基于分布式、去中心化的区块链技术,实现一个不受第三方控制且能自动执行的智能合约环境。2015年,以太坊的诞生可谓是智能合约的最佳实践。
以太坊实现的智能合约有以下4个特点:
(1)数字编码。将合约以数字的方式编码,通过交易发布到全网,全网节点达成共识部署到区块链里。
(2)不可被篡改。由于区块链的数据具有不可被篡改的特性,所以部署的合约也不可被篡改。
(3)自动执行。智能合约在部署到区块链之后,可以被交易触发执行,并按照数字编码设定的逻辑规则执行。智能合约可以事先指定业务规则,并暴露出相应的接口和参数。用户对智能合约账户发起一笔交易,同时携带相应的接口和参数,节点在存储这笔交易时,该智能合约将会按照设计的逻辑执行代码,并将代码存储到区块链上。
(4)可审计。区块链网络数据公开透明,意味着智能合约的内容可以被读取、查阅和审计。任何节点,只要连接到互联网,都可以连接到以太坊的环境里使用以太坊客户端,同步区块并且演算结果,达到审计数据的目的。
以太坊智能合约的执行环境,使用EVM实现。以太坊智能合约的执行原理如图1-4所示。
用户在编写完Solidity合约源代码(Solidity Code)之后,首先使用工具将智能合约代码编译(Compile)成EVM字节码(EVM Bytecode),并部署到区块链上。
当智能合约被触发执行时,EVM加载EVM字节码,并提供EVM字节码执行的沙箱环境。这个沙箱环境与外界完全隔离,在合约执行期间,仅能与区块链内部网络的数据(如账户、交易)交互,不能与外部网络的数据(如网络、文件)交互,目的是保证执行结果的一致性。
假设沙箱环境能够与外部网络的数据交互,那么有可能导致区块的不一致性,如每个网络获取的天气情况不一致,所以这个EVM的沙箱环境保证交互数据的一致性是非常重要的。智能合约的EVM字节码在沙箱环境中执行完成之后,有可能会改变区块链的状态,如账户、交易或者数据的删减,那么这些更改将会写入以太坊的区块链里。
其中,以太坊智能合约的开发语言是Solidity,这是一种高级静态类型的编程语言。关于这门语言的使用方法,可以在其官网相应的文档里找到。
如下图所示,目前Solidity的版本是0.7.1。在这个文档里,我们可以找到编译器的安装、合约示例代码、合约语法接口等信息。
以太坊的智能合约是在去中心化的点对点(P2P)环境中执行的程序,没有人或者任何机构对执行有特殊的权限,因此这种去中心化的机制能够让资产、投票等各种数据在链上不被随意篡改。正是基于这种去中心化、可编程的特性,在以太坊网络里出现了很多去中心化应用程序,即DApp(Decentralized Application)程序。
3.去中心化应用程序
去中心化应用程序,是指被部署在分布式网络中的程序,开源、透明、可执行,任何人都能参与并发起操作交互。要想深入了解去中心化应用程序,我们先回顾一下中心化应用程序,并在它们之间做一次对比,下图直观地阐述了中心化应用程序和去中心化应用程序的区别。
中心化应用程序在互联网世界里比较容易理解,如果用户(电脑、手机等设备)需要访问一个服务,那么必须要去连接服务商。服务商提供的服务对于用户来说是不可见的。用户只需要通过和固定的服务接口交互即可,且必须无条件地信任该服务。
例如,用户使用电脑访问企业的企业资源计划(Enterprise Resource Planning,ERP)系统,只需要输入网址即可与ERP服务交互,用户使用并且信任这些服务。
这个“中心化”的程序有一定的缺陷,例如管理员作恶,恶意修改后台的数据,而作为用户的使用者,则无法清楚后台数据是否已经被恶意篡改,只能“无条件”地信任服务提供者。
去中心化应用程序是指服务和数据由整个去中心化的网络提供,用户不必连接某个服务,网络中的任意节点都可以成为服务的提供者,甚至用户可以自己搭建一个服务来给自己使用,不用担心某个节点作恶给自己提供虚假数据。
如果有人恶意篡改数据,那么用户通过自己部署的节点,即可发现作恶行为。因此,基于去中心化网络搭建的程序可信任程度极高。
由于以太坊的去中心化特性,并且以太坊提供了智能合约的开发语言,因此开发者完全可以基于以太坊智能合约,开发和构建出任意去中心化应用程序。
目前,以太坊区块链网络里可用的去中心化应用程序数量有上千种之多,其应用的范围覆盖金融、物联网、游戏、版权等众多领域。当前较为著名的去中心化应用程序有以下几种:
(1)游戏。加密猫(CryptoKitties),是一个繁殖猫咪的虚拟休闲游戏。该游戏于2017年11月上线,曾占据以太坊网络16%以上的交易量,火爆程度极高,以至于以太坊网络发生严重阻塞。
(2)交易所。去中心化的以太坊资产交易所(Decentralized Ethereum Asset Exchange,IDEX)用于交易基于以太坊ERC-20的资产。这个交易所与传统的中心化交易所相比,完全去中心化,核心兑换算法都编写在以太坊智能合约链上,公开透明,可信任性高。
(3)发行证券。博学者(Polymath)制定了发行和监管证券规则,并提供了一个服务网络,旨在降低发行和监管证券的成本。
(4)域名。不停机的域名(Unstoppable Domains),是区块链上的域名服务,使用区块链域名来代替复杂难记的账户地址,让用户的交易更加方便,简化支付将提高普通非专业用户使用的可能性。
(5)广告。基本注意力资产(Basic Attention Token,BAT)是基于区块链的广告平台资产。基于该资产构建的在线广告体系,可以消除第三方广告交易商,同时保护用户隐私、减少广告欺诈,并且奖励用户观看广告的行为。这套系统由JavaScript之父布兰登·艾克(Brendan Eich)创建和运营。
4.未来规划
以太坊在区块链中引入智能合约是具有创新性的,打开了去中心化应用程序开发的市场,越来越多的开发者参与去中心化应用程序的开发。但以太坊仍然有不足之处:
第一,处理性能低。以太坊的TPS只有15~30个,这显然无法满足正常的去中心化应用程序的性能,甚至连普通的转账交易也难以满足。2017的CryptoKitties交易阻塞区块链网络,足以证明其性能之低。交易系统的TPS对比见表1-1。
无论是以太坊还是比特币,与传统的金融交易机构相比,它们的交易性能都非常低下,很难适应真正的商业应用领域。
第二,挖矿的共识机制导致能源浪费。以太坊目前采用的是PoW算法共识,即通过计算来获取挖矿的优先权,算力强则有利于获取挖矿权并获取区块奖励ETH(Ether,以太坊的原生数字资产)。据2018年统计数据显示,ETH所耗费的电量几乎等同于冰岛整个国家全年的耗电量,以太坊系统产出一枚ETH所耗费的电量,已经超过了一个普通美国家庭平均一天的耗电量!
为了解决这两个难题,开发者未来将会进行Ethereum 2.0的开发和升级。
Ethereum 2.0计划解决以下两个问题:
(1)引入PoS共识机制,消除PoW共识机制带来的能源消耗问题。
(2)引入分片机制,提高以太坊的交易速度和吞吐率。
根据以太坊百科文档(Ethereum Wiki)的描述,开发者为Ethereum 2.0规划了7个不同的阶段,需要至少几年时间才能实现。这些阶段大部分仍处于研究阶段,没有明确的技术规范。
开发者在真正构建最终态的Ethereum 2.0之前,需要至少完成4个阶段:
(1)阶段0。实现基于PoS共识机制的信标链(Beacon Chain),该信标链暂不实现分片功能。信标链的共识使用Casper FFG(Casper the Friendly Finality Gadget,友好的小精灵终结工具)完成,验证节点在区块提案中使用RANDAO(以太坊DAO随机数生成器)创建随机数,根据随机数形成组织委员会。
(2)阶段1。实现没有EVM的基础分片。在这个阶段中,分片的目的是通过在多个分片之间划分网络来帮助扩展事务,从而允许网络并发地处理许多事务。
(3)阶段2。实现EVM状态转换功能。在这个阶段中仅支持全节点,仅支持异步合约交叉调用,支持eWASM引擎执行合约,引入状态存储机和存储费用概念。
(4)阶段3。轻客户端协议。无须存储所有数据,即可快速校验数据的合法性并参与网络共识。轻客户端的数据从存储节点中获取。
Ethereum 2.0的升级涉及共识机制的改变,即由原始的PoW共识机制升级成PoS共识机制。PoS共识机制的升级将会触动矿工的利益,例如矿工已经购置机器进行挖矿,如果升级成PoS共识机制,就意味着前期投入的矿机钱白白浪费了,同时又将质押一笔资金才能有资格打包区块参与共识。在这种情况下,PoS共识机制的升级势必受到矿工的抵制和阻挠。
虽然Ethereum 2.0规划可以一步一步替代PoW共识机制,愿景很美好,道路依然崎岖。