您的位置: 首页 > DAPP开发 > 正文

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

时间: 2021-10-04 12:54:27 浏览: 分类: DAPP开发
DApp,发音为dee-app,滴爱普。

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

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

WPS图片-修改尺寸.jpg

DApp相比传统App的优势

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

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

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

如何构建一个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语法和详情,简单介绍一下内容:

  1. 用字符串来表示节目
  2. 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数据的方式输出编译结果。



来源: https://dapp.skpseo.com