创建一个DAPP的全流程

写在前面

1.对以太坊、智能合约有所了解。

2.有一些编程基础,看得懂简单的代码逻辑和HTML。


环境安装

首先,我们要安装项目代码的运行环境

1. Node 安装

进入Node官网:https://nodejs.org/en/download/,下载适合你电脑的版本。

2. Truffle安装

安装完Node之后,使用命令行输入下面的命令

npm install -g truffle

安装完成后,输入命令truffle version 显示下方信息就说明环境安装完成了。


3.安装Ganache

进入Ganache官网:https://trufflesuite.com/ganache/,下载适合你电脑的版本。

下载项目模板pet-shop

接下来就是下载truffle提供的项目模板。

项目介绍:Pete有一个宠物店,有16只宠物,他想开发一个去中心化应用,让大家来领养宠物。

在truffle box中,已经提供了pet-shop的网站部分的代码,我们只需要编写合约及交互部分。

新建一个空文件夹,使用命令行进入其中,输入下载命令:

truffle unbox pet-shop

下载完成

添加合约和部署代码

使用代码编辑软件打开项目(我用的是vscode),下面是文件截图

1.添加Adoption合约

在contracts文件夹下,新建Adoption.sol文件,输入以下代码:

pragma solidity ^0.5.0;

contract Adoption {

    address[16] public adopters;


    function adopt(uint256 petId) public returns (uint256) {

        require(petId >= 0 && petId <= 15);         adopters[petId] = msg.sender;

        return petId;

    }

    function getAdopters() public view returns (address[16] memory) {

        return adopters;

    }

}


2. 添加部署合约文件

在migrations文件夹下,新建adoption.js文件,输入以下代码:

var Adoption = artifacts.require("./Adoption.sol");

module.exports = function (deployer) {

  deployer.deploy(Adoption);

};

编译、部署合约

打开Ganche,点击第一个“QUICKSTART”,Ganche会自动开启一条本地私链,并提供10个钱包地址。

打开控制台(终端),开始编译部署合约:

编译命令:truffle compile

编译完成会生成build文件夹。

部署命令:truffle migrate

创建用户接口和智能合约交互

我们已经编写和部署及测试好了我们的合约,接下我们要编写项目中的交互逻辑代码。

打开src/js/app.js文件,修改下面函数:

initWeb3: async function () {

    // Modern dapp browsers...

    if (window.ethereum) {

      App.web3Provider = window.ethereum;

      try {

        // Request account access

        await window.ethereum.enable();

      } catch (error) {

        // User denied account access...

        console.error("User denied account access");

      }

    }

    // Legacy dapp browsers...

    else if (window.web3) {

      App.web3Provider = window.web3.currentProvider;

    }

    // If no injected web3 instance is detected, fall back to Ganache

    else {

      App.web3Provider = new Web3.providers.HttpProvider(

        "http://localhost:7545"

      );

    }

    web3 = new Web3(App.web3Provider);


    return App.initContract();

  },


initContract: function () {

    $.getJSON("Adoption.json", function (data) {

      var AdoptionArtifact = data;

      App.contracts.Adoption = TruffleContract(AdoptionArtifact);



      App.contracts.Adoption.setProvider(App.web3Provider);


      return App.markAdopted();

    });

    return App.bindEvents();

  },


markAdopted: function (adopters, account) {

    var adoptionInstance;


    App.contracts.Adoption.deployed()

      .then(function (instance) {

        adoptionInstance = instance;



        return adoptionInstance.getAdopters.call();

      })

      .then(function (adopters) {

        for (i = 0; i < adopters.length; i++) {

          if (adopters[i] !== "0x0000000000000000000000000000000000000000") {

            $(".panel-pet")

              .eq(i)

              .find("button")

              .text("Success")

              .attr("disabled", true);

          }

        }

      })

      .catch(function (err) {

        console.log(err.message);

      });

  },


  handleAdopt: function (event) {

    event.preventDefault();


    var petId = parseInt($(event.target).data("id"));


    var adoptionInstance;


    web3.eth.getAccounts(function (error, accounts) {

      if (error) {

        console.log(error);

      }


      var account = accounts[0];


      App.contracts.Adoption.deployed()

        .then(function (instance) {

          adoptionInstance = instance;


          return adoptionInstance.adopt(petId, { from: account });

        })

        .then(function (result) {

          return App.markAdopted();

        })

        .catch(function (err) {

          console.log(err.message);

        });

    });

  },

};



配置私链信息和导入钱包账户

编写完交互逻辑,现在我们要让项目跑起来。

首先,我们要安装钱包插件,推荐使用chorme浏览器的metamask钱包插件,这是metamask钱包安装教程:https://www.chainpip.com/article/4/4

安装完成后,我们要配置私链信息和导入钱包账户。

1.配置私链信息

Network Name:私链名称,随便设置

New RPC URL:这是私链的交互接口,填Ganache顶部的RPC SERVER的值

Chain ID:这是Ganache私链的ID,默认是1337

Currency Symbol:主币的符号,就填ETH,方便学习


点击Save保存网络

2. 导入钱包账户

在Ganache中,左侧有个钥匙符号,点击它,弹出账户私钥(PRIVATE KEY)信息,复制私钥。


打开钱包,点击头像,选择下方的“Import Account”


将之前复制的私钥粘贴到输入框中,点击Import,这样就完成账户导入了。


测试DAPP

接下来就可以测试DAPP了,在vscode终端输入命令:npm run dev

项目就运行起来了。

接下来,连接刚刚导入的钱包账户

测试领养功能,点击Adopt,确认上链请求,领养完成,显示Success。


最后

这样一个DAPP就部署完成了,想要了解更多的区块链知识或是有什么相关的问题和想法,可以来我的交流社区CHAINPIP提出来,欢迎你的到来哦。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容