做区块链不懂DAPP就Out了

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

前言:

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

什么是DAPP

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

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

DAPP的特点:

  • DAPP是完全开源、自治,且没有一个实体控制者。
  • 必须能够根据用户的反馈及技术要求进行升级,且应用升级必须由大部分用户达成共识之后,方可进行。
  • 应用的数据加密后存储在公开的区块链上,所有对基础区块链技术的安全性、稳定性及持续性要求较高。
  • 应用必须拥有Token机制。


DAPP的应用场景

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

  • 一是效率,传统的区块链,数据写人至少需要等待十分钟;
  • 二是能耗,新区块的生成需要矿工进行数亿次无意义的运算,非常消耗能源。


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

  • 不存在所有成员都信任的管理当局;
  • 不要求实时写入数据;
  • 挖矿的收益能弥补自身成本;

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


做区块链不懂DAPP就Out了_第1张图片

图一:DAPP应用场景

以太猫

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


做区块链不懂DAPP就Out了_第2张图片

图二:以太猫

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

开发一个极简版以太狗

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

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

应用效果

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

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


做区块链不懂DAPP就Out了_第3张图片

图三:Pete的宠物狗店

环境搭建

安装nodejs

安装truffle

安装ganache-cli

安装MetaMask

创建项目

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


做区块链不懂DAPP就Out了

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

  • contracts存放智能合约;
  • migrations存放部署脚本;
  • test存放测试用例;
  • truffle.js配置文件,例如区块链地址和端口;
做区块链不懂DAPP就Out了_第4张图片

图四:项目目录

编写智能合约

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

做区块链不懂DAPP就Out了_第5张图片

编译智能合约
做区块链不懂DAPP就Out了


启动以太坊客户端
做区块链不懂DAPP就Out了_第6张图片


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

部署合约(migrate)

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


做区块链不懂DAPP就Out了_第7张图片


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

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


做区块链不懂DAPP就Out了


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

测试合约

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


做区块链不懂DAPP就Out了_第8张图片


接下来,运行测试案例:

做区块链不懂DAPP就Out了

实例化合约

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

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

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

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


做区块链不懂DAPP就Out了_第9张图片

图五:领养宠物

处理领养

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

在浏览器中领养以太狗

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


做区块链不懂DAPP就Out了_第10张图片

图六: 以太坊客户端插件

选择可供连接的网络:

做区块链不懂DAPP就Out了_第11张图片

图七: 选择网络

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

点击“Restore from seed phrase”,

做区块链不懂DAPP就Out了_第12张图片

图八: 配置钱包

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

做区块链不懂DAPP就Out了_第13张图片

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

做区块链不懂DAPP就Out了_第14张图片

图九:账户

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

做区块链不懂DAPP就Out了

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

做区块链不懂DAPP就Out了_第15张图片

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

安装和配置lite-server

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

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

做区块链不懂DAPP就Out了_第16张图片


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

做区块链不懂DAPP就Out了_第17张图片


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

启动服务
做区块链不懂DAPP就Out了


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

做区块链不懂DAPP就Out了_第18张图片

图十:DAPP主界面

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

做区块链不懂DAPP就Out了_第19张图片

图十一:交易确认

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

做区块链不懂DAPP就Out了_第20张图片

图十二:交易成功


做区块链不懂DAPP就Out了_第21张图片

图十三: 领养成功


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

DAPP思考

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

本文为启迪云原创文章,如需转载请联系授权。

你可能感兴趣的:(做区块链不懂DAPP就Out了)