BTA | 杨德升:掌握这些技术点,现在就能做一个Dapp!

区块链大本营出品

整理 | 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种做法。

  1. 借助 DApps 浏览器(浏览器 + 外挂钱包),类比于互联网中借助微信支付、支付宝。
  2. 在自己的应用中内置钱包,类比于直连银行。
  3. 把服务器拉进来。需要服务器的情况往往有3种:

1)集成第三方服务;

2)作为缓存引擎;

3)存储大块数据存储。

说到这里,大家其实就可以动手做一些自己的应用了,推荐大家使用以下的工具:

  • Truffle:目前最流行的以太坊开发框架,用JavaScript编写,支持智能合约的编译、部署和测试;
  • Ganache:个人电脑上使用的区块链软件,它和以太坊主链的节点逻辑一致;
  • OpenZeppelin:一种构建安全智能合约的开源架构,遵循MIT许可,通过它可以构建大部分的合约;
  • MyEtherWallet:钱包应用,它的代码非常值得参考。

Dapps的场景与应用方向

我个人把整个人类社会分为三层:最下面一层是纯数字的世界,不需要有什么物理设备的存在——交易金融、跨境支付、玩游戏、天气等场景,都没有一个物理的实体存在。区块链在这一层表现的很好,尽管还存在一些小问题。

再往上是「无人值守的物理设备」,这一层里包含大家所熟知的IoT。最上面一层是人类社会,也是现实世界——租房、买车、衣食住行等场景。虽然之前很多ICO项目是关于这一类的,但我认为区块链往这里渗透还有很长的路要走。

区块链的技术发展趋势

参照以太坊的架构图,未来一年可以期待的方向有三个。

第一个是闪电网络。闪联网络有几种做法,而以太坊就做了两点,一个太慢,一个太贵,每笔交易支付Gas的费用的受不了。第二个是Whisper,是指去中心化的即时通信。第三个是Swarm,基于IPFS,理论上来说可以传送大块文件,价格非常低,在链上也不需要做服务器存储。

这三个方向加上现有的智能合约,未来的空间会非常大。

原文发布于微信公众号 - 区块链大本营(blockchain_camp)

原文发表时间:2018-04-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏区块链+系列

智能合约——运作方式

智能合约是基于二代区块链平台正在研发的内置模块,实现自动化的掌控资产的转移。其原理是根据事先制订的协议,在某一事件触发时能够自动地执行合约条款。

11600
来自专栏区块链大本营

当Google大数据遇上以太坊数据集,这会是一个区块链+大数据的成功案例吗?

区块链技术和加密货币在吸引越来越多的技术、金融专家和经济学家们眼球的同时,也给与了他们无限的想象空间。从根本上来说,加密货币只是底层区块链技术的应用之一,而伴随...

20950
来自专栏圆方圆学院精选

【董天一】IPFS:Filecoin和复制证明

这篇文章主要来讲一下Filecoin协议里面的复制证明(Proof of Replication),由于协议涉及到很多概念,可能看起来有点晕乎乎的,小编尽量把...

17110
来自专栏耕耘实录

区块链核心概念注解

版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢

18830
来自专栏区块链应用系统开发

上海区块链交易系统开发|虚拟资产交易平台搭建|交易网站搭建

在数十年之间,物联网已大幅扩展并连接各种装置与网络,包括住家、工作场所、运输系统,甚至整座城市。另一方面,已问世十年的区块链将透过其加密及分布式分类账 (以建立...

28960
来自专栏企鹅号快讯

以太坊推出百万美元扩容补贴

? 负责监管以太坊发展进程的非盈利组织以太坊基金会近日正式公布了两项补贴计划,将用于支持关于如何增加其区块链所能处理的交易数量的研究。 在本周二发布的博客中,...

216100
来自专栏企鹅号快讯

比特币的SegWit2X分叉将于12月28日重新启动

比特币备受争议的SegWit2X硬分叉的支持者刚刚宣布拆分将会重新启动。比特币的Segwit2x(又称NYA协议)要求对比特币区块链规则进行具体的修改,该规则将...

24250
来自专栏智能计算时代

区块链101:莱特币和比特币的区别是什么?

2009年,中本聪(Satoshi Nakamoto)推出比特币,成为世界上第一个加密货币。代码是开源的,这意味着它可以被任何人修改,并且可以自由地用于其他项目...

325130
来自专栏极客编程

Blockchain和Tangle哪一个是未来?

2017年是加密货币热潮令人难忘的一年。从那时起到现在世界没有任何改变,但今天我们对加密货币仍然很兴奋。乐观主义者认为,比特币将从根本上改变世界各地的支付,经济...

8810
来自专栏企鹅号快讯

Bitcoin团队宣布开发区块链操作系统

原标题:Bitcoin团队宣布开发区块链操作系统 今年最火热的事物莫过于“比特币”、“以太坊”以及各种各样五花八门的加密数字货币了,火热到了连大叔大妈们都快要开...

23960

扫码关注云+社区

领取腾讯云代金券