DApp是什么?如何创建自己的DApp

DApp是什么?如何创建自己的DApp

DApp,发音为dee-app,滴爱普。

在区块链这个领域,大家或多或少都会听说DApp。DApp的D表示的是Distributed或者Decentralized,不管是哪个单词,表示都是去中心化的意思。App不用多解释,是Application的缩写。而DApp可以翻译为中文去中心化应用。

DApp的第一次提出是由以太坊创始人维塔利克·布特林和他的合伙人在2015年提出的。初衷是希望以DApp的方式创建大家的区块链,这种方式可以解决大量的时间和金钱。

DApp相比传统App的优势

相比中心化App也就是传统的App,DApp没有一个中心点,也就意味着不会因为中心点服务器的宕机而停止服务。而且修改数据需要51%以上的节点一致同意才能真正的修改数据,这也就以为着没有人可以轻易的篡改数据。

总的来说,DApp有以下特点:

不被单个实体(个体、机构)所控制,因为他没有一个中心点,所以也没有任何第三方可以干扰。因为没有中心点信任问题,所以也就意味着不需要为第三方支付费用,这也就意味着比中心化App更加便宜、更加快速因为没有运行在任何一台中心化服务器上,所以不会有因为单台机器宕机而停止服务,不会有病毒或者人类关闭应用,比中心化App更加安全。使用智能合约,不可更改的合约,比传统交易更加快速、便宜。

如何构建一个DApp

接下来的内容将从以下几个问题入手阐述如何搭建一个自己的DApp:

如何搭建一个DApp开发环境?如何编写和测试智能合约?如何编译和部署智能合约?以下内容假设你是一个React开发者

Demo DApp将用来展示一个节目列表,节目列表来源于国外的烂番茄非官方API。书签栏目用来展示用户最喜欢的节目,这些信息将被储存在区块链中。用户可以从他们自己的收藏栏目中添加和删除,每次用户的删除和新增豆浆触发智能合约,并且将对应的变化存储到区块链中。

前端App使用React来开发,智能合约使用solidity开发,使用Javascript脚本来进行测试,使用truffle来进行部署。

搭建DApp开发环境

搭建之前需要以下几个工具:node、git。

先安装TestRpc和Truffle:

npm install -g ethereumjs-testrpc npm install -g truffle

从github上把对应的代码clone下来,并安装对应的依赖文件:

git clone git@github.com:liors/tvapp.git cd tvapp yarn install

使用智能合约

智能合约在DApp中用来作为后端逻辑和存储,在/contracts路径下,可以发现一个Bookmark.sol文件。

pragma solidity ^0.4.4; contract Bookmark { mapping (address => string) private bookmarks; address public owner; function Bookmark() { owner = msg.sender; } function bookmark(string show) public returns (string) { bookmarks[msg.sender] = show; return bookmarks[msg.sender]; } function getBookmarks() constant returns (string) { return bookmarks[msg.sender]; } }

这里不详细介绍solidity语法和详情,简单介绍一下内容:

用字符串来表示节目getBookmarks来返回每个账号的节目列表

测试智能合约

可以用Javascript或者solidity来写测试,对于Javascript的测试,可以使用Mocha测试框架。

const Bookmark = artifacts.require(Bookmark) const assert = require(assert) contract(Bookmark, accounts => { const MeMyselfAndI = { “title”: “Me, Myself & I”, “img”: “http://static.tvmaze.com/uploads/images/original_untouched/127/319519.jpg” } const TheGifted = { “title”: “The Gifted”, “img”: “http://static.tvmaze.com/uploads/images/original_untouched/121/303442.jpg” } it(should get Bookmark when blockchain has one show, () => { Bookmark.deployed() .then(instance => { instance.bookmark(JSON.stringify(MeMyselfAndI), {from: accounts[0]}) return instance.getBookmarks.call() }) .then(bookmark => { assert.equal(bookmark, JSON.stringify(MeMyselfAndI)) }) }) it(should get Bookmarks when blockchain has few shows, () => { Bookmark.deployed().then(instance => { instance.bookmark(JSON.stringify([MeMyselfAndI, TheGifted]), {from: accounts[0]}) return instance.getBookmarks.call() }) .then(bookmark => { assert.equal(bookmark, JSON.stringify([MeMyselfAndI, TheGifted])) }) }) })

运行测试前需要现有一个本地的testrpc实例,实例运行起来后可以运行

yarn test

编译智能合约

solidity是一种编译语言,需要实现编译后才能在以太坊虚拟机上运行(Ethereum Virtual Machine)。

新开一个终端,启动testrpc:

testrpc

编译智能合约

truffle compile

这个命令会编译.sol文件,然后以json数据的方式输出编译结果。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注