栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > Cocos2d-x

以太坊之DAPP开发(完整例子)

Cocos2d-x 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

以太坊之DAPP开发(完整例子)

开发以太坊dapp首先可以用官方框架
安装truffle

npm install -g truffle

环境依赖

NodeJS v8.9.4 或 之后的版本

Windows, Linux or Mac OS X

安装过程中可能遇到问题解决办法如下:

安装命令:sudo npm install -g truffle 安装过程中可能遇到问题解决: sudo npm install -g n
sudo n stable 安装完成检车是否成功:truffle -v

接下来说一下怎么使用truffle 开发属于自己的dapp

一:创建相关文件夹下载模板

1.cd Voting
2.truffle unbox webpack

二:创建合约

cd contracts
rm meta.sol Lib.sol
vim Voting
把写好的代码拷贝到其中

三:修改模板配置文件(trufflevotingwebpack-boxmigrations2_deploy_contracts.js)

//const ConvertLib = artifacts.require("ConvertLib");
//const MetaCoin = artifacts.require("MetaCoin");
const Voting = artifacts.require("Voting");

module.exports = function(deployer) {
  //deployer.deploy(ConvertLib);
  //deployer.link(ConvertLib, MetaCoin);
  //deployer.deploy(MetaCoin);
  
  deployer.deploy(Voting,["0x4100000000000000000000000000000000000000000000000000000000000000","0x4200000000000000000000000000000000000000000000000000000000000000"]);
};

四:编译合约

cd trufflevotingwebpack-box
truffle compile

五:部署合约
启动ganache-cli(如果失败,则重新安装npm install -g ganache-cli)
注意:启动以太坊模拟区块链,默认端口8545


// const HDWallet = require('truffle-hdwallet-provider');
// const infuraKey = "fj4jll3k.....";
//
// const fs = require('fs');
// const mnemonic = fs.readFileSync(".secret").toString().trim();

module.exports = {
  

  networks: {
    // Useful for testing. The `development` name is special - truffle uses it by default
    // if it's defined here and no other network is specified at the command line.
    // You should run a client (like ganache-cli, geth or parity) in a separate terminal
    // tab if you use this network and you must also set the `host`, `port` and `network_id`
    // options below to some value.
    //
     development: {
      host: "localhost",     // Localhost (default: none)
      port: 8545,            // Standard Ethereum port (default: none)
      network_id: "*",       // Any network (default: none)
     },
    
    //develop: {
     // port: 8545
    //},

    // Another network with more advanced options...
    // advanced: {
      // port: 8777,             // Custom port
      // network_id: 1342,       // Custom network
      // gas: 8500000,           // Gas sent with each transaction (default: ~6700000)
      // gasPrice: 20000000000,  // 20 gwei (in wei) (default: 100 gwei)
      // from: ,        // Account to send txs from (default: accounts[0])
      // websockets: true        // Enable EventEmitter interface for web3 (default: false)
    // },

    // Useful for deploying to a public network.
    // NB: It's important to wrap the provider as a function.
    // ropsten: {
      // provider: () => new HDWalletProvider(mnemonic, `https://ropsten.infura.io/v3/YOUR-PROJECT-ID`),
      // network_id: 3,       // Ropsten's id
      // gas: 5500000,        // Ropsten has a lower block limit than mainnet
      // confirmations: 2,    // # of confs to wait between deployments. (default: 0)
      // timeoutBlocks: 200,  // # of blocks before a deployment times out  (minimum/default: 50)
      // skipDryRun: true     // Skip dry run before migrations? (default: false for public nets )
    // },

    // Useful for private networks
    // private: {
      // provider: () => new HDWalletProvider(mnemonic, `https://network.io`),
      // network_id: 2111,   // This network is yours, in the cloud.
      // production: true    // Treats this network as if it was a public net. (default: false)
    // }
  },

  // Set default mocha options here, use special reporters etc.
  mocha: {
    // timeout: 100000
  },

  // Configure your compilers
  compilers: {
    solc: {
      // version: "0.5.1",    // Fetch exact version from solc-bin (default: truffle's version)
      // docker: true,        // Use "0.5.1" you've installed locally with docker (default: false)
      // settings: {          // See the solidity docs for advice about optimization and evmVersion
      //  optimizer: {
      //    enabled: false,
      //    runs: 200
      //  },
      //  evmVersion: "byzantium"
      // }
    }
  }
}

部署

truffle migrate

部署完检验方法
打开truffle console控制台

truffle console
let instance = await Voting.deployed()
instance

六:修改前端页面



  
    MyVoting 投票DAPP测试
  
  
  
    

MyVoting 投票DAPP测试

Jerry : loding... tickets

Amy : loding... tickets

七:修改index.js

import Web3 from "web3";
import votingArtifact from "../../build/contracts/Voting.json";

const aInBytes32="0x4100000000000000000000000000000000000000000000000000000000000000";
const bInBytes32="0x4200000000000000000000000000000000000000000000000000000000000000";

const App = {
  web3: null,
  account: null,
  voting: null,

  start: async function() {
    const { web3 } = this;

    try {
      // get contract instance
      const networkId = await web3.eth.net.getId();
      const deployedNetwork = votingArtifact.networks[networkId];
      this.voting = new web3.eth.Contract(
        votingArtifact.abi,
        deployedNetwork.address,
      );
      // get accounts
      const accounts = await web3.eth.getAccounts();
      this.account = accounts[0];
		
      //this.refreshBalance();
	  this.ready();
    } catch (error) {
      console.error("Could not connect to contract or chain.");
    }
  },
  refresh : async function (id,nameInBytes32){
	  const {LookForCandidate} =this.voting.methods;
	  const tickets = await LookForCandidate(nameInBytes32).call();
	  const element = document.getElementById(id);
	  element.innerHTML = tickets.toString();
  },
  ready: async function(){
	  try{
		  this.refresh("Jerry",aInBytes32);
		  this.refresh("Amy",bInBytes32);
	  }catch(err){
		  console.log(err)
	  }
  },
voteForCandidate: async function(){
	try{
		const {voteForCandidate} = this.voting.methods;
		const candidateName = document.getElementById("candidate").value;
		console.log(candidateName);
		if(candidateName == "Jerry"){
			await voteForCandidate(aInBytes32).send({from:this.account});
			this.refresh("Jerry",aInBytes32);
			
		}else if(candidateName == "Amy"){
			await voteForCandidate(bInBytes32).send({from:this.account});
			this.refresh("Amy",bInBytes32);
		}
	}catch(err){
		console.info(err)
	}
}
};

window.App = App;

window.addEventListener("load", function() {
  if (window.ethereum) {
    // use MetaMask's provider
    App.web3 = new Web3(window.ethereum);
    window.ethereum.enable(); // get permission to access accounts
  } else {
    console.warn(
      "No web3 detected. Falling back to http://127.0.0.1:8545. You should remove this fallback when you deploy live",
    );
    // fallback - use your fallback strategy (local node / hosted node + in-dapp id mgmt / fail)
    App.web3 = new Web3(
      new Web3.providers.HttpProvider("http://127.0.0.1:8545"),
    );
  }

  App.start();
});

八:运行即可

npm run dev

浏览器输入对应网站

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/952082.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号