本文做者为万向区块链旗下万云平台首席技术官奚海峰。他从以太坊第三届DevCon大会回来后,对这趟会议之旅的所见所闻进行了总结,就以太坊的生态现状和将来发展进行了全方位解读。算法
做者简介:奚海峰,万云首席技术官。清华大学自动化专业硕士,马里兰大学电器及计算机工程硕士。前后担任IBM研究院工程师和高级咨询顾问,Sempra Commodities主管架构师,Tudor Investment软件开发主管等。荣获了包括“IBM研究成就奖”在内的屡次嘉奖。在一流国际会议和杂志上发表过多篇学术论文,并持有美国发明专利。如下为正文,enjoy!编程
01 以太坊基础概念安全
以太坊做为一个区块链产品和技术平台,初衷是但愿区块链能够像手机操做系统同样,当开发者想构建应用时没必要重复创造和维护区块链,直接使用以太坊便可。如下是以太坊的一些基础概念。网络
帐户数据结构
区块链最基本的结构是帐户体系,以太坊在原比特币的外部控制帐户基础上增长了合约帐户。合约帐户是由一段代码(智能合约)控制的帐户。不一样的帐户间经过交易来实现交互,交易能够从一个外部控制帐户发到另外一个外部控制帐户,实际上就是简单的转帐。架构
若是从外部帐户发一个交易到合约帐户,就是对这个合约帐户里包含代码的某个函数进行调用。此外,一个合约帐户也能够嵌套式地调用另一个合约帐户的代码。并发
Gas和Gas Price异步
为避免智能合约被恶意使用形成死循环,以太坊加入了燃料(Gas)的概念。执行智能合约的某个操做,或者存储一些数据都要花费相应数量的Gas;在执行一个智能合约时,必须在必定Gas限度内完成,不然程序就会终止。Gas Price是智能合约调用者指定的,表示他愿意为每一个Gas支付多少以太币,这种成本因素进一步约束黑客滥用以太坊资源的冲动。编程语言
交易函数
一个交易由若干关键字段构成:
Nonce:随机数,它可用来避免交易被重放。
Startgas:指调用方愿意为此次调用支付的Gas上限,在调用以前从帐户里扣除。若是调用结束时,Startgas没有花完,剩下的就会退回到调用者帐户。若是执行过程消耗的Gas超越了预先支付的Startgas,执行就停止。
To:指这个交易的目标地址。
Value:转帐的以太币数量。
Data:目标为合约帐户时,对调用函数名和参数的编码。
状态机
每一个帐户实际上都维护一个状态,这个状态在执行代码的时候发生转移,能够理解为以太坊每一个节点都在维护一个巨大的状态机。就是经过执行交易去触发代码的执行,代码会修改帐户的内部状态,包括代币里面存储的值,这样使得整个以太坊从一个状态转到另外一个状态。
以太坊虚拟机(EVM)
智能合约运行在虚拟机里面,虚拟机至关于模拟的计算机,它有堆栈、内存、存储、环境变量、日志,因此它叫图灵完备。用这个虚拟机能够写任意复杂的逻辑,这也正是为何要引入Gas机制的缘由。
高级编程语言
虚拟机运行的智能合约代码,是编译为EVM能够理解的二进制码部署在智能合约当中的。可是做为编程人员直接用这种代码写程序较难,由于它是一个低级语言。因此以太坊提供了高级语言如Solidity、Viper、LLL、Bamboo来写智能合约,而后编译成EVM代码。
ABI
应用二进制接口ABI是智能合约函数调用的二进制编码格式。在向一个合约帐户发送交易时,须要指明调用合约代码里的哪一个函数,若是这个函数带参数,还要把参数值传递过去,这些东西都要有一个二进制编码。
Merkle Tree
在以太坊里有一个很是重要的概念“Merkle Tree”。在Merkle Tree里,从根结点向下(叶子节点除外),每个节点的值都是下面节点的值合并后算哈希的结果。这样的好处是能够很容易造成对于叶子节点上的交易数据的验证。以太坊对Merkle Tree作了改进,以便高效地进行插入和删除操做。
02 以太坊面临的安全挑战
智能合约风险
以太坊做为一个带有图灵完备虚拟机的区块链平台,它的优点很明显,但优点每每也是它的劣势。对于以太坊来说,由于它的虚拟机支持任意编程逻辑,在写智能合约的时候颇有可能会引入bug,好比以前的The DAO事件形成以太坊的硬分叉,Parity钱包7月份和11月份两次bug被黑客利用形成的资产损失等。因此面对这些安全风险,应该怎么办?
一是能够经过以太坊的协议和EVM自己的升级来增强安全性。二是能够应用代码审计公司或者是本身编制严格的审计流程对本身的代码进行审计。另外,可使用形式化验证工具来增强安全性,如区块链安全公司Zeppelin开发的工具,可使得区块链上部署的智能合约代码修改起来更方便。苏黎士联邦理工大学软件可靠性实验室开发的安全审查工具Securify,给开发人员提供了一个简单的界面,能够对输入的智能合约代码进行形式化验证,而后找出里面存在的漏洞。
隐私风险
咱们都知道,在区块链社区中特别注重隐私保护,而zk-SNARKs(“简明非交互零知识证实”)是这次DevCon上一个很是热门的话题。这个机制是让一个证实者,在不提供任何额外的有用信息的状况下,使验证者相信某个论断是正确的,是一种几率证实而不是肯定性证实。
好比Alice有一把开门的钥匙,她须要向Bob证实她拥有这个钥匙。有两种作法,第一种是Alice把钥匙给Bob,Bob拿这个钥匙开了门进去,Bob知道Alice确实拥有进门的钥匙。另一种作法是,Bob知道这个房子里有同样东西,他告诉Alice,Alice到房间里把这个东西拿出来给Bob看。因为Alice能作到这一点,Bob知道Alice有开门的钥匙。第二种方法就是所谓的零知识证实,能够在不泄露钥匙的状况下,向Bob证实Alice拥有它。现阶段,对隐私保护作得最好的是Zcash,Zcash对零知识证实应用得很是纯熟。
03 以太坊面临的扩容挑战
以太坊面临的另一个重大问题,就是它的性能扩展。以太坊上面如今已经部署了成百上千的智能合约,但它之初的设计是基于PoW共识机制,每秒只能处理几十个交易,没法知足不少应用对交易性能的实际要求。以太坊被认为是第二代区块链,如今第三代区块链的崛起势头对以太坊造成了某种竞争压力,因此当务之急是如何在保持以太坊平台平稳运行的前提下,尽快把它切换到PoS的共识机制下,提升平台的性能。
如今以太坊面临的在性能扩展上的问题是,每个节点都要处理每个交易,这意味着整个区块链的容量是被单一节点的处理能力和存储能力所限制。另外,以太坊设计之初就不支持交易的并行处理,这些都限制了其性能的进一步提高。
04 以太坊的扩容之路
为了解决扩展性,Vitalik提出了Sharding(分片)方案,即“一个区块链,两套系统”。Sharding具体方案是将以太坊网络状态分解为众多分片(shard),分片间仅能异步通信,每个分片仅处理全网络的一部分交易,分片也分为主分片与新分片。Vitalik 称新分片为“宇宙星系”。
主分片与新分片在共识与治理上会有不一样处理方式,主分片采起保守的方式,依然是PoW,而后进入一种混合的PoS模式,实际上就是PoW加PoS,以保障网络稳定性;新分片采起积极改进的方式,以便进行更多的试验,但不影响主分片,新分片则直接使用PoS模式,实现权益证实。若是能实现这样的治理构架,系统将会更稳定。
在新老分片中间的同步状态是经过一个叫无状态的客户端来作的。所谓无状态就是,当把新分片的一些局部状态想要同步到主分片的时候,共识节点不须要存储全部网络状态,仅存储区块头部信息便可。另外发送交易时,提交Merkle 证实便可以改变状态。由于Merkle是自洽的数据结构,它能够向主分区证实这个交易确实是在新分区上发生过了。这样在新分区上能够作不少的优化,好比并发处理,包括区块的大小,就再也不是个问题。若是要想尝试不一样区块大小带来的性能方面的影响,它能够建立不一样的新分片,在不一样的新分片作不一样的设置。
总结来讲,这套机制使把以太坊将来的开发分红两层。第一层是现有的主分片,强调安全和保守。另一层是新的分片,直接用PoS协议,它能够实现快速的算法和功能迭代。
若是要想实现分片制的设想,PoS扮演了很是重要的做用。不管是主分区里从混合模式过渡到最终模式仍是新分区一步到位,PoS在以太坊接下来的发展中就很是重要。PoS是一种公有链的共识算法,是权益证实,它和PoW工做量证实不同的是,它不是解一个加密算题来给参与者进行奖励的挖矿机制,而是在它的机制里有一些验证人,这些验证人本身要持有区块链上的代币。这些验证人按照必定的算法轮流提议出块,全部的验证人为这个新的块进行投票。在投票的时候,每个投票人的投票权重跟它的代币数量成正比。若是验证人的投票行为是正确的,他就会获得奖励。若是他做弊,那么他会被断定为以不符合协议的方式进行投票,他的代币会被惩罚没收。因此PoS基于经济机制来得到共识,而且得到网络的安全性。
PoS的优势有三个。第一是明确的经济安全性,由于它再也不是经过挖矿的竞争实现共识,因此在链上治理这块就能够制定很是明确并且有针对性的奖惩措施。在PoW的机制里,要想进行51%攻击,代价很低,仅需电力消耗和设备损耗。但PoS不一样,它的惩罚很是严重,当你进行51%的攻击,治理算法就会发现,你全部的代币就会被没收。因此它的经济安全性,比PoW高。第二,减小集中化风险。由于PoW挖矿机制使得它有集中化倾向,在PoS里面1块钱就是1块钱,你的钱和股份是平等的,减小了集中化风险。第三,提升能源效率。咱们都知道,比特币挖矿消耗的能量至关于厄瓜多尔整个国家一年的耗电量。但切换到PoS上,绿色环保,很是值得提倡。
以太坊经过Casper的机制来实现PoS。Casper由两个项目组成:Casper由两个项目组成:Casper CBC和Casper FFG。FFG以保守的方式,在PoW 基础上实施了权益证实。简单地说,依然经过PoW 算法增长区块,可是每50个块有一个PoS “检查点”,经过网络验证人来评估区块的最终有效性。FFG解决的是短时间内将主链迁移到PoS上,实现混合的PoS模式,只是过渡方案。而CBC是最终方案,从形式化的设计和形式化建设方面都是正确的算法。