Truffle创建一个Dapp的三大步#区块链#solidity#Truffle#Dapp#以太坊

简单介绍Dapp的制作过程。
补:最重要的第零件事是你需要有一个idea
解释:以$+语句 开头的都需要在命令行输入。
解释://后面的话表示注释
需要:Node、Truffle、Ganache、MetaMask、会solidity的你
制作Dapp的三步:

step1:准备

建立项目目录并进入

$ mkdir 项目名/
$ cd 项目名/

使用 truffle unbox 创建项目

$ truffle unbox pet-shop
//这里的pet-shop是一个官方经典实例,该实例已将Dapp开发框架写好。
//为了更方便的开发,我们将借助官方的框架。
//因此,我们需要借助pet-shop的框架,修改pet-shop的源代码,使其变成我们自己的Dapp。

认识目录结构:

build/ 合约编译后将以json自动存放于此
contracts/ 所有智能合约的文件夹,包含一个部署合约 Migrations.sol
migrations/ 所有部署脚步的文件夹
src/ 前端代码
test/ 智能合约测试用例文件夹
truffle.js/ 配置文件

写自己的智能合约

把你的想法用solidity语言写出来。
放在contracts文件夹中。

step2:编译部署测试

编译

$ truffle compile
//将智能合约编程成json文件

部署

创建一个自己的部署脚本 2_deploy_contracts.js

var 合约 = artifacts.require(“合约名字.sol”);

module.exports = function(deployer) {
  deployer.deploy(合约);
};

打开Ganache

//Ganache将运行一个私有区块链节点
//为了将我们的代码运行在区块链节点上,我们先试试运行在Ganache上,再考虑运行在以太坊区块链上。

$ truffle migrate
//将合约部署到区块链节点上

测试

test 目录下新建一个 Test.sol

pragma solidity ^0.5.0;

import "truffle/Assert.sol";   // 引入的断言
import "truffle/DeployedAddresses.sol";  // 用来获取被测试合约的地址
import "../contracts/合约名字.sol";      // 被测试合约

contract Test {
func{Assert.equal(a,b)}
}//断言基本语句

$ truffle test
//测试我们的合约。这一步请勿忽略。

step3:web3上构造Dapp

web3初始化

app.js:

initWeb3: function() {

  if (window.ethereum) {
    App.web3Provider = window.ethereum;
    try {
      await window.ethereum.enable();
    } catch (error) {
      console.error("User denied account access")
    }
  }
  else if (window.web3) {
    App.web3Provider = window.web3.currentProvider;
  }
  else {
    App.web3Provider = new Web3.providers.HttpProvider('http://localhost:7545’);//运行在7545端口上
  }
  web3 = new Web3(App.web3Provider);

  return App.initContract();
}

合约初始化

initContract: function() {
  $.getJSON(‘合约名字.json', function(data) {
    // 用|合约名字.json数据创建一个可交互的TruffleContract合约实例。
    var 合约Artifact = data;
    App.contracts.合约名字 = TruffleContract(合约Artifact);
    App.contracts.合约名字.setProvider(App.web3Provider);

    return App.mark合约();
  });
  return App.bindEvents();
}

合约功能使用

合约功能: function(adopters, account) {
  var 合约实例Instance;

  App.contracts.合约名字.deployed().then(function(instance) {
    合约实例Instance = instance;

    // 调用合约中的方法, 用call读取信息不用消耗gas
    return 合约实例Instance.合约方法.call();
  }).then(function(功能返回值) {
    使用功能返回值;
  }).catch(function(err) {
  });
}

Dapp已经创建完成,让他运行在本地吧。

$ npm run dev 打开http://localhost:7545

你可能感兴趣的:(solidity)