启迪云-高级开发工程师 严刚
前言:
2018年以来,区块链(blockchain)无疑是最火的科技之一,新闻媒体大量报道,宣称它将创造未来。我们该怎样参与?买几个币算不算呢?其实也算。不过,作为技术人,我们还可以更加深入一点,例如DAPP。
什么是DAPP
在了解"DAPP"之前,大家一定都知道APP。APP就是我们手机上经常用的程序,DAPP和APP有点类似,但是又有很大的差别。
DAPP(Decentralized Application) 即去中心化应用。也有人称之为分布式应用。将基于IOS和Android开发的APP放在区块链系统上,结合智能合约,就成了DAPP。
DAPP的特点:
DAPP的应用场景
可以把区块链看作是一个无人管理的分布式数据库,为了保证数据的可靠性,区块链也付出了代价。
所以,DAPP的应用场景,其实非常有限。
如果无法满足上述条件,则传统数据库是更好的解决方案。
以太猫
以太猫(CryptoKitties)是首次在以太坊推出的一款区块链游戏,也是一款典型的DAPP。在游戏中,玩家可以创建、照顾、购买、喂养并出售存储在以太坊区块链中的数码猫。以太猫本身具有虚拟货币的功能,每只猫都是“独特的、交易于区块链的不可变更物体”。
与传统游戏不同,没有任何中央管控,游戏不受营运公司影响。假设营运CryptoKitties的工作室关门大吉,玩家的虚拟小猫还是会活在以太坊上,这是区块链游戏与传统游戏最大的不同,也是区块链游戏最吸引人的地方和价值、魅力所在。
开发一个极简版以太狗
大家可能很好奇,以太猫是如何实现的呢?如果没有后端数据库,虚拟小猫该如何存取?如何保持一致性?
其实我也一样好奇,恰好,这里有一个完整的DAPP实例分享给大家(出自tuffle suite),我们暂且把它叫作“以太狗”吧。我会一步一步地操作,帮助理解DAPP中的相关概念与涉及的工具。
应用效果
Pete有一个宠物店,养了16只宠物狗狗,他想开发一个去中心化应用,让大家来领养宠物。
注意:后端没有数据库,也不存在一个大家都信任的管理当局,Pete只负责提供宠物狗,狗狗信息存储在公开的区块链上,大家通过智能合约领养,领养过程真实并可溯源。
环境搭建
安装nodejs
安装truffle
安装ganache-cli
安装MetaMask
创建项目
感谢truffle unbox,你不必从头开始创建项目。
这一步需要稍等一会,truffle会自动下载pet-shop项目,项目目录如下:
编写智能合约
在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:
现在领养第四只宠物狗Melissa看看,当我们点击Adopt时,MetaMask会提示我们交易的确认:
点击submit确认后,如图所示,交易29执行成功了。
回到DAPP主页面,我们可以发现,Melissa已经被领养了。
DAPP思考
目前来说,DAPP尚且处于早期探索状态,还没有大规模实际应用价值的DAPP出现。但是不可否认的是,区块链技术带给我们巨大的想象空间以及无限的可能性。
本文为启迪云原创文章,如需转载请联系授权。