首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

做区块链不懂DAPP就Out了

启迪云-高级开发工程师 严刚

前言

2018年以来,区块链(blockchain)无疑是最火的科技之一,新闻媒体大量报道,宣称它将创造未来。我们该怎样参与?买几个币算不算呢?其实也算。不过,作为技术人,我们还可以更加深入一点,例如DAPP。

什么是DAPP

在了解"DAPP"之前,大家一定都知道APP。APP就是我们手机上经常用的程序,DAPP和APP有点类似,但是又有很大的差别。

DAPP(Decentralized Application) 即去中心化应用。也有人称之为分布式应用。将基于IOS和Android开发的APP放在区块链系统上,结合智能合约,就成了DAPP。

DAPP的特点:

DAPP是完全开源、自治,且没有一个实体控制者。

必须能够根据用户的反馈及技术要求进行升级,且应用升级必须由大部分用户达成共识之后,方可进行。

应用的数据加密后存储在公开的区块链上,所有对基础区块链技术的安全性、稳定性及持续性要求较高。

应用必须拥有Token机制。

DAPP的应用场景

可以把区块链看作是一个无人管理的分布式数据库,为了保证数据的可靠性,区块链也付出了代价。

一是效率,传统的区块链,数据写人至少需要等待十分钟;

二是能耗,新区块的生成需要矿工进行数亿次无意义的运算,非常消耗能源。

所以,DAPP的应用场景,其实非常有限。

不存在所有成员都信任的管理当局;

不要求实时写入数据;

挖矿的收益能弥补自身成本;

如果无法满足上述条件,则传统数据库是更好的解决方案。

图一:DAPP应用场景

以太猫

以太猫(CryptoKitties)是首次在以太坊推出的一款区块链游戏,也是一款典型的DAPP。在游戏中,玩家可以创建、照顾、购买、喂养并出售存储在以太坊区块链中的数码猫。以太猫本身具有虚拟货币的功能,每只猫都是“独特的、交易于区块链的不可变更物体”。

图二:以太猫

与传统游戏不同,没有任何中央管控,游戏不受营运公司影响。假设营运CryptoKitties的工作室关门大吉,玩家的虚拟小猫还是会活在以太坊上,这是区块链游戏与传统游戏最大的不同,也是区块链游戏最吸引人的地方和价值、魅力所在。

开发一个极简版以太狗

大家可能很好奇,以太猫是如何实现的呢?如果没有后端数据库,虚拟小猫该如何存取?如何保持一致性?

其实我也一样好奇,恰好,这里有一个完整的DAPP实例分享给大家(出自tuffle suite),我们暂且把它叫作“以太狗”吧。我会一步一步地操作,帮助理解DAPP中的相关概念与涉及的工具。

应用效果

Pete有一个宠物店,养了16只宠物狗狗,他想开发一个去中心化应用,让大家来领养宠物。

注意:后端没有数据库,也不存在一个大家都信任的管理当局,Pete只负责提供宠物狗,狗狗信息存储在公开的区块链上,大家通过智能合约领养,领养过程真实并可溯源。

图三:Pete的宠物狗店

环境搭建

安装nodejs

安装truffle

安装ganache-cli

安装MetaMask

创建项目

感谢truffle unbox,你不必从头开始创建项目。

这一步需要稍等一会,truffle会自动下载pet-shop项目,项目目录如下:

contracts存放智能合约;

migrations存放部署脚本;

test存放测试用例;

truffle.js配置文件,例如区块链地址和端口;

图四:项目目录

编写智能合约

在contracts目录下,添加合约文件Adoption.sol:

编译智能合约

启动以太坊客户端

注意这里的Mnemonic和Accounts,后面MetaMask需要用到。

部署合约(migrate)

在migrations目录下,创建一个部署脚本2_deploy_contracts.js:

注意这里的写法,artifacts.require("Adoption")的参数为合约名称。

此外,为什么部署脚本要以数字开头呢?这是truffle部署时用的ID。接下来执行部署命令:

使用--reset来强制重编译并部署所有合约。

测试合约

在test目录下,新建测试案例TestAdoption.sol:

接下来,运行测试案例:

实例化合约

在pet-shop项目中,已经包含了前端代码,主要逻辑在src/app.js。

Adoption部署成功后,在build/contracts目录下会生成Adoption.json文件,记录合约部署信息;

initContract函数读取Adoption.json文件,创建一个合约实例contracts.Adoption.

markAdopted函数使用合约实例,调用getAdopters()方法,获取所有领养者列表,回到页面上,把对应宠物的领养按钮置灰,改名为Success。

图五:领养宠物

处理领养

handleAdopt函数处理领养按钮,首先获取区块链用户账号,然后调用合约实例的adopt(petId)方法,领养宠物。

在浏览器中领养以太狗

MetaMask是一款插件形式的以太坊客户端,我们可以使用基于firefox浏览器的版本。

图六: 以太坊客户端插件

选择可供连接的网络:

图七: 选择网络

因为ganache-cli的监听端口为8545,所以我们选择“Localhost 8545”:

点击“Restore from seed phrase”,

图八: 配置钱包

注意,"Wallet Seed"框中填入ganache-cli的Mnemonic:

设置密码,确认即可,下次登录直接使用该密码。

图九:账户

登录后,能看到用户及相关交易信息,默认用户名为Account 1,查看该用户地址:

与ganache-cli的用户列表相比:

发现什么了吗?其实就是第一个用户。

安装和配置lite-server

接下来需要本地的web服务器提供服务的访问,Truffle Box pet-shop里面,提供了一个lite-server可以直接使用,我们看看它是如何工作的。

bs-config.json指示了lite-server的工作目录:

与此同时,在pckage.json的scriptes中添加了dev命令:

这样,当运行npm run dev的时候,就会启动lite-server.

启动服务

会自动打开浏览器,显示我们的DAPP:

图十:DAPP主界面

现在领养第四只宠物狗Melissa看看,当我们点击Adopt时,MetaMask会提示我们交易的确认:

图十一:交易确认

点击submit确认后,如图所示,交易29执行成功了。

图十二:交易成功

图十三: 领养成功

回到DAPP主页面,我们可以发现,Melissa已经被领养了。

DAPP思考

目前来说,DAPP尚且处于早期探索状态,还没有大规模实际应用价值的DAPP出现。但是不可否认的是,区块链技术带给我们巨大的想象空间以及无限的可能性。

加入我们

请关注启迪云公众号了解更多更详细的内容,同时也欢迎各位有志之士加入启迪云大家庭。我们期待您的加盟,共创启迪云美好的明天。

互动区

* 你对以上内容有什么看法?你最关注云计算哪个趋势?如果你还有想了解的技术话题,欢迎留言分享。

*「启迪云技术栈」每周️由启迪云研发部提供技术干货,敬请期待。如需转载请联系小编。

-热门阅读-

启迪云计算有限公司 | 依托于清华启迪控股集团雄厚的资本和强大的科技创新及产业服务能力| 国际领先的私有云及行业云解决方案提供商 | 企业数字化转型首选平台

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190104A12QAP00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券