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数据的方式输出编译结果。
发表回复