区块链 实验十 DAPP开发

目的及要求

了解以太坊的基本逻辑,理解以太坊的运行机理。能正确进行DAPP设计开发和部署。

基本原理

了解DAPP设计开发和部署。熟悉工具安装。

实验环境

使用VMWare中的Ubuntu虚拟机进行实验。
参考教程:https://www.bilibili.com/video/BV1sJ411D72u?p=515

实验内容

1. 工具安装,在虚拟机中安装Nodejs和npm

首先先安装curl指令:sudo apt install curl
在这里插入图片描述
安装nodejs:curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
在这里插入图片描述
然后执行安装指令sudo apt-get install -y nodejs
然后报了一个错:

E: 无法获得锁 /var/lib/dpkg/lock。锁正由进程 69782(unattended-upgr)持有
N: 请注意,直接移除锁文件不一定是合适的解决方案,且可能损坏您的系统。
E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它?

这种无法获得锁的错误只要删除显示的文件夹就可以了,比如这里就删除/var/lib/dpkg/lock
通过输入

sudo rm /var/lib/dpkg/lock

就可以解决缓存锁了,再重新输入安装指令:

sudo apt-get install -y nodejs

输入node -v 就可以查看node的版本
在这里插入图片描述

2. 模拟环境ganache安装。截图。

因为访问npm网站会比较慢,所以先切换源:

npm config set registry http://registry.npm.taobao.org

安装ganache-cli: sudo npm install -g ganache-cli
安装web3:sudo npm install -g web3@^0.20.7(一定要这个版本用最新版的后面无法运行isConnected())
安装solc:sudo npm install -g solc@0.4.24 (一定要0.4的版本!不然后面compiledCode也会报错)
在这里插入图片描述
(搞得乱糟糟地于是又回头跟着视频一起走一遍,建议用上面的指定版本,感觉版本之前兼容有点问题)
在根目录下新建一个文件夹mkdir simple_vote
再进入这个文件夹cd simple_vote/
再输入npm init 一直按回车键
在这里插入图片描述
ls 就可以看到出现了一个新的文件夹
在这里插入图片描述
输入npm install web3@0.20.7 solc ganache-cli 安装web3(一定要是0.20版本的!)和solc和ganacje-cli(这一步可以不用做,就是为了验证一下这个文件夹下是可以用这三样的)
在这里插入图片描述
先cd进入simple_vote/node_modules/.bin,输入ganache-cli,如果是第一次安装就可以直接看到大串的结果,就不会有端口被占用的问题。但是我装了两次忘记把第一个删除了,所以需要重新设置端口ganache-cli -p 7878 设置为7878
再开一个终端输入cd ~/simple_vote
输入 vim Voting.sol
在vim中输入

pragma solidity >0.4.22;

contract Voting{
   
bytes32[] public candidateList;
mapping (bytes32 => uint8) public votesReceived;
constructor(bytes32[] 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 totalVotesFor(bytes32 candidateName) public view returns(uint8){
   
require(validateCandidate(candidateName));
return votesReceived[candidateName];
}
   }

粘贴后按esc键输入 :wq 保存退出
再输入

npm list web3
npm list ganache-cli
npm list solc

在这里插入图片描述
在这里插入图片描述
输入 node 进入nodejs环境
依次输入

var Web3=require('web3')
var web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:7878'))   

(没有改过端口的将7878改成8545)
再输入

web3.isConnected()

这个时候结果会变成true

在这里插入图片描述
如果是false的注意一下是不是写错了或者ganache-cli窗口关掉了。
ganache-cli窗口长这样:
在这里插入图片描述
继续在nodejs环境中输入

web3.eth.accounts

出来的结果应该和ganache-cli中的结果是一致的。
在这里插入图片描述
输入var solc = require('solc')
再输入

 solc

在这里插入图片描述
再另开一个终端输入进入~/simple_vote. sudo chmod 666 Voting.sol
回到node命令行下输入var sourceCode = fs.readFile并按tab键提示
输入var sourceCode = fs.readFileSync('Voting.sol').toString()
在这里插入图片描述
再输入sourceCode就会出现一大串
在这里插入图片描述
输入

var compiledCode = solc.compile(sourceCode)
compiledCode

然后报错了……
在这里插入图片描述
大概是solidity的版本要控制在0.4.所以又去卸载重装了0.4.24版本。(上面安装指令是修改后正确的安装指令)
安装完后重新将node环境下的代码都再输一次。输到compiledCode过后会出来一大串
在这里插入图片描述
输入

var abi = compiledCode.contracts[':Voting'].interface;
abi

在这里插入图片描述
输入

var abi = JSON.parse(compiledCode.contracts[':Voting'].interface);
abi

在这里插入图片描述
输入

var byteCode = compiledCode.contracts[':Voting'].bytecode
bytecode

在这里插入图片描述
输入

var VotingContract = web3.eth.contract(abi)
var deployTxObj = {
   data:byteCode,from:web3.eth.accounts[0],gas:3000000}
var contractInstance = VotingContract.new(['Alice','Bob','Cary'],deployTxObj);
contractInstance.address

在这里插入图片描述

3. 控制台投票交互。截图。

输入

contractInstance.vote("Alice",{
    from:web3.eth.accounts[0]}) //投给Alice
  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拔牙不打麻药

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值