区块链大本营出品
整理 | Aholiab
3月30日~3月31日,由CSDN、火星财经主办,中关村区块链产业联盟、柏链道捷、区块链大本营、TokenSky联合主办的区块链技术及应用峰会(BTA)·中国,在北京喜来登长城饭店盛大举行。
作为时下最热门的行业话题,区块链以其颠覆性的技术理念,正在对各个行业施以影响,吸引了全球技术圈、投资者、创业者的关注。为了深入理解区块链及其背后的技术本质,本次大会邀请了80+区块链技术领导人物、100+区块链投资商业大咖,就区块链的发展趋势进行探讨,让人们有机会全面了解这一全新的生态。
作为本届大会的重要嘉宾之一,以太坊智能合约 DApps「以太红包」作者、原ofo技术副总裁杨德升,在「区块链核心技术峰会」中分享了题为《深入以太坊DApp架构和开发实战》的主题演讲。
杨德升:毕业于上海交通大学,以太坊智能合约 DApps「以太红包」作者,原 ofo 技术副总裁、周伯通招聘联合创始人 CTO、曜辉科技联合创始人 CTO、开源社区 ThinkSNS 核心开发者,拥有一项互联网技术发明专利,在社交产品、互联网技术、高性能架构、区块链技术等方面有丰富的经验。
在演讲中,他以以太坊的核心设计理念、以太坊的能力边界和基础架构为出发,通过对区块链/以太坊的本质、智能合约的工作原理、DApps的架构拆解等话题的展开,对其进行深入解读。并提出,Dapp的应用场景,应该是从纯数字世界,到无人值守的物理设备(CDN、IoT),再到人类社会和现实世界的倒金字塔结构。
以下是杨德升的演讲实录:
前面几位嘉宾分享的都是比较前沿的技术,我之前的工作是比较偏落地、有实际业务承载的项目,现在在区块链方向发展。今天我想跟大家分享四个概念:
以太坊的核心概念、设计理念;
以太坊的能力边界;
以太坊应用的基础架构;
以太坊应用的发展方向。
希望我对以上四点的阐述,能帮助大家做出好的选择,并对DApps落地的常见做法,有简要的掌握。
区块链、以太坊的本质
区域链(Block chain)是一种利用去中心化和去信任方式集体维护一本数据簿的技术方案。该方案让参与系统中的任意多个节点,通过一串使用密码学方法相关联产生的数据块,每个数据中都包含了一定时间内的系统全部信息交流的数据,并生成数据指纹用于验证其信息的有效性和链接下一个数据库块。
而以太坊则是一个记录「以太币余额+链上代码+EMV虚拟机状态」的分布式账本,也可以看做一种编程语言,支持完备的公有链。开发者能够基于它建立和发布下一代分布式应用。
智能合约的工作原理
智能合约包含几个基本概念,理解这几个基本概念,我们就能搞清楚以太坊到底是怎么工作的。
账户
以太坊的账号系统分为两种:1)外部拥有账户(EOA),也称为「普通账户」;2)合约账户(Contract Account)。这两种账户与我们所熟知的账户概念有相似之处,却也有很大的区别,更不同与比特币中的UTXO。
普通账户:我们存放以太币的账户,可以随意生成、余额可以转账,与大家熟知的账户概念类似。它拥有以下特性:
拥有以太币余额的balance(以太币存放的地方,与比特币的UTXO模式不同);
用于确定每笔交易只能被处理一次的计数器(nonce);
发送交易(以太币转账、发布合约、调用智能合约);
通过私钥控制;
没有相关的代码。
合约账户:功能与数据的合集,存在于以太坊的特定地址。与普通账户类似,有自己的余额,有私钥和公钥,代码完全公开,人和人都可以对智能合约产生交互,并且在合约中做一些验证。它具有以下特点:
拥有以太币余额;
拥有相关的代码;
通过交易或消息调用的方式触发并由以太坊虚拟机(EVM)解释执行。
当被执行时:
运行在随机复杂度(图灵完备性);
只能操作其拥有的特定储存,例如可以拥有其永久的状态;
可以调用其他合约。
抽象来看,无论是那种账号的背后都是一个统一的以太坊的状态,以太坊也可以被看成是基于交易(Transaction)的状态机,一个一个的状态不断地变化着。
以太坊虚拟机(Ethereum Virtual Machine,EVM)
EVM是以太坊的一部分,是智能合约得以执行的一个运行环境,这一点做互联网技术的应该很好理解。EVM在执行每一步智能合约代码的时候,执行的结果都是每一个区块打包的重要部分,它被写在定义里。
除此之外,EVM也可以理解为一个以太坊的客户端,以及一个完全隔离的沙箱,它不能访问线程、文件系统和外部网络。
智能合约
智能合约就是代码+数据(功能+状态);Solidity(智能合约开发工具)在设计时参考 JavaScript、Python 等高阶语言。此外,如同现实中的合同一样,智能合约一旦发布是不可更改的,例如交易时间、交易金额、违约条款、补充协议等。
不过智能合同可以被销毁,再做一个新的。
交易和消息(Transactions & Messages)
交易(Transactions):通俗来讲,就是一个账户向另一个账户发送一笔被签名的消息数据包的过程,区块链会记录并存储相应的数据。包括:是谁发给谁、金额、有无其他额外消息等。交易需要花手续费。
智能合约是看得见摸得着的数据包,而交易只能用我们的肉身来发现。在整个以太坊网络里,交易只有两种类型:一种是通过普通账户发起一个对普通账户的交易;另一个是通过普通账户发起一个一个对合约账户的交易。
消息:所谓的「消息」是一个内部的概念,是一个永不串行且只在以太坊执行环境中存在的虚拟对象,我们是看不到的。不像交易还有一个结构,消息只能由合约发送到其他合约。
Gas
大家对于Gas应该不陌生,也就是我们常说的中介费/燃油费。由于每个网络中的全节点都会进行相同的计算并储存相同的值。由于合约执行会在所有节点中被多次重复,而且任何人都可以发布执行合约,这使得合约执行的消耗非常昂贵,所以为防止以太坊网络发生蓄意攻击或滥用的现象,以太坊协议规定交易或合约调用的每个运算步骤都需要收费。
Gas还涉及到三个概念——gasUsed、gasPrice、gasLimit。
gasUsed为该交易消耗的总Gas数量;
gasPrice为该交易中单位Gas的价格(用以太币计算),用户可以自行设置的gasPrice的价格,由于网络拥堵等多种情况,此价格会动态变化;
gasLimit是交易发起者愿意为本笔交易支付的最大Gas个数。
它们的关系为:Gas = gasUsed * gasPrice
由于Gas最终是给旷工,旷工打包交易区块的时候,从所有交易的池子里选择最高的,打包速度由市场来决定,出价越高打包的速度越快。
对于开发者来说,每一笔交易都需要精雕细琢:我该给多少Gas合适?我该怎么推荐给我的用户?哪个gasPrice最合适?大家可以通过 ETH Gas Station 网站(https://ethgasstation.info/)查看市场状况。
这里也交代一下Gas的消耗过程。按照操作,我们从发起方发起交易,代码一行一行执行,每执行一行代码或产生一个操作就扣一行Gas,直到交易完成。那剩下的Gas怎么办?答案是会原封不动返还给发起交易的人。
Dapps架构揭秘
Dapps是一个应用,与一般的互联网应用对比可以看出。互联网应用用户首先看到UI页面,往下是接口层,而所有代码在基础设施上完成,例如数据库、阿里云等。
区块链的Dapps也类似,只是基础设施变成了区块链,硬件变成了矿工的节点,再往上,业务层代码变成了智能合约,最上面是你自己本身的业务。
最上层没什么要讨论的,按照自己的业务去做就好了,我们主要讲讲中间这部分,也就是你的应用如何连接到区块链的节点上。有以下3种做法。
借助 DApps 浏览器(浏览器 + 外挂钱包),类比于互联网中借助微信支付、支付宝。
在自己的应用中内置钱包,类比于直连银行。
把服务器拉进来。需要服务器的情况往往有3种:
1)集成第三方服务;
2)作为缓存引擎;
3)存储大块数据存储。
说到这里,大家其实就可以动手做一些自己的应用了,推荐大家使用以下的工具:
Truffle:目前最流行的以太坊开发框架,用JavaScript编写,支持智能合约的编译、部署和测试;
Ganache:个人电脑上使用的区块链软件,它和以太坊主链的节点逻辑一致;
OpenZeppelin:一种构建安全智能合约的开源架构,遵循MIT许可,通过它可以构建大部分的合约;
MyEtherWallet:钱包应用,它的代码非常值得参考。
Dapps的场景与应用方向
我个人把整个人类社会分为三层:最下面一层是纯数字的世界,不需要有什么物理设备的存在——交易金融、跨境支付、玩游戏、天气等场景,都没有一个物理的实体存在。区块链在这一层表现的很好,尽管还存在一些小问题。
再往上是「无人值守的物理设备」,这一层里包含大家所熟知的IoT。最上面一层是人类社会,也是现实世界——租房、买车、衣食住行等场景。虽然之前很多ICO项目是关于这一类的,但我认为区块链往这里渗透还有很长的路要走。
区块链的技术发展趋势
参照以太坊的架构图,未来一年可以期待的方向有三个。
第一个是闪电网络。闪联网络有几种做法,而以太坊就做了两点,一个太慢,一个太贵,每笔交易支付Gas的费用的受不了。第二个是Whisper,是指去中心化的即时通信。第三个是Swarm,基于IPFS,理论上来说可以传送大块文件,价格非常低,在链上也不需要做服务器存储。
这三个方向加上现有的智能合约,未来的空间会非常大。
想跟区块链大咖蒋涛和孟岩一起工作吗?
快来快来,CSDN区块链大本营招采编 2 名 (待遇不低于行业水平)
邮件发送:[email protected](注明:姓名+区块链+采编应聘)
扫码加入区块链大本营读者群,群满加微信 17600222208 入群