ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

dapp开发过程之一

2021-10-12 20:03:48  阅读:243  来源: 互联网

标签:之一 web3 abi ganache dapp 开发 candidateName var Voting


1,环境安装

linux下安装nodejs和npm,再用npm安装ganache-cli,web3和solc
mkdir simple_voting_dapp
cd simple_voting_dapp
npm init
npm install ganache-cli web3@0.20.1 solc

这里安装的ganache-cil不是全局的,所以在使用的时候会加目录

1.2 使用ganache启动一个私有链

在控制台 输入 ./node_moduls/.bin/ganache-cli

2,合约编写

pragma solidity >0.4.22 ;

contract Voting {
    mapping (bytes32 => uint8) public votesReceived;
    bytes32[] public candidateList;
    bool isValid;
    
    constructor(bytes32[] memory candidateListName)  public {
        candidateList = candidateListName;
    }
    function validateCandidate(bytes32 candidateName) internal view returns(bool){
        for(uint8 i = 0 ; i < candidateList.length; i++){
            if(candidateName == candidateList[i])
                return true;
        }
        return false;
    }
    function vote(bytes32 candidateName) public{
        require(validateCandidate(candidateName));
        votesReceived[candidateName] += 1 ;
    }
    function totalVotersFor(bytes32 candidateName) public view returns(uint8){
        require(validateCandidate(candidateName));
        return votesReceived[candidateName];
    }
}

3,编译合约

1,启动一个新的控制台
2,把写好的合约Voting.sol放在simple_voting_dapp文件下
3,在控制台输入node命令
4,

// 1, 创建一个web3对象
var Web3 = require('web3')
var web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545'))
// 2, 创建一个solc对象,负责编译合约
var solc = require('solc')
// 3, 读取合约内容
var sourceCode = fs.readFileSync('Voting.sol').toString()
在这一步可能会出现文件无权限读取的问题。
可以新开一个控制台进入simple_voting_dapp文件下
输入 sudo chmod 666 Voting.sol,即可完成修改
若要看一个文件的权限,可以输入ls -l
// 4, 编译合约
var compiledCode = solc.compile(sourceCode)
// 5, 获取编译后得到的abi和bytecode
var abi = compiledCode.contracts[':Voting'].interface
//然而这个不是我们真正需要的abi
//真正的abi是一个对象
var abi	  = JSON.parse(compiledCode.contracts[':Voting'].interface)
var byteCode = compiledCode.contracts[':Voting'].bytecode
// 6, 通过abi创建一个合约对象
var VotingContract = web3.eth.contract(abi);
// 7, 创建一个交易实例
var deployTxObj = {data:byteCode,from: web3.eth.accounts[0], gas:3000000}
// 8, 创建一个合约实例
var contractInstance = VotingContract.new(['Alic','Bob','Cary'],deployTxObj)

5, 可以在ganache控制台看到已部署的合约的交易信息,并且可以在控制台输入

contractInstance.address
0xfa9fef4b968f51a6c14910eb502b411c689ad575

可以看到实例合约的地址

3,调用合约中的方法

1,调用vote方法

contractInstance.vote("Alic",{from:web3.eth.accounts[0]});

使用ganache很方便的可以在控制台看到交易的细腻些,并且,这笔交易直接进块了

2,调用totalVoteFor

contractInstance.totalVoteFor("Alice").toString()
'1'

标签:之一,web3,abi,ganache,dapp,开发,candidateName,var,Voting
来源: https://blog.csdn.net/qq_40403273/article/details/120624131

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有