00:00
接下来我们就准备部署合约了,那部署合约大家会看到,其实这个跟之前我们在这个窗户里边去做部署的话,其实非常简单的,部署的时候需要去注意什么呢?需要去改一个文件,对吧。大家还记得改哪个吗?我们部署的时候编译,其实我们有有这个扫原文件就可以了,这个不用管,那部署的时候需要去改哪个呢?因为travel里边它的部署是用migrations脚本去做的,所以我们在部署的时候需要改这里面的脚本,部署脚本,那大家知道第一个这个initial migrt,这个我们一般情况是不动的,对吧?它是我们第一次创建这个合约的时候会去布一下,那接下来大家注意,我们肯定就要改这个,第二个这个呃,脚本deploying contracts对吧,之前我们部署这个voting的时候啊,那现在其实我们还是voting,对吧,我这里是直接在上之前的这个项目基础上去改,那这个就比较简单,还是voting,那大家注意我voting当时deploy的时候传的参数,第一个是voting这个合约对。
01:17
然后后边是我们constructor的传参,对吧,给了一组这个,呃,Candidate list,把它这个作为一个数组传进去,后边是一个交易的一个对象。那我们现在是不是传的参数就不只是这些了,大家看一下啊,直接在这看吧,合约是mration voing,这里我们的constructor里边会看到除了最后的candidate names前面还有一个total supply。然后还有一个price对吧?所以我们这里就首先voting后面应该给一个total supply,比方说我们给个1万个吧,啊,这就是我们提供的token总数,然后我们还要给一个单价对吧,每一个呃,就是每一个我们的token到底值多少以态,那我们这里边啊,就就按照这个教案里面给的是0.01是吧,看一下好,0.01以态对吧?所以我们就给一个0.01以态,这里大家注意这里要给的值,其实我们给的还是。
02:34
尾的值,因为大家还记得我们在合约里边是怎么去用的这个token price吗?是直接用value除以token price对吧?那这里的value是什么单位的,是稳对,所以我们的token price也得是尾,大家这里注意一下,好,那么我们这里如果是0.01的话,0.01,那大家就要注意了,我们这里0.01单位应该是以态而不能是尾,所以就是web3.to尾对吧,0.01对一,好,那这样就可以完成我们这一个部署的脚本。
03:21
那接下来大家就就都知道了,这个就很简单了,我们直接在窗口里边去运行一下,好,我们应该还是在这个目录对吧,没改过,好大家可以新建目录啊tri,首先comp。这个是把我们的合约重新编译一下,对吧。多听点,Jason,哦,这个太多了。这真是非常多,我们想看他的API,呃,这样吧,大家如果要是对这个不太确定的话,我们还有一一个非常简单粗暴的方法,我们直接把它删了就完了,对吧?对整个build下面的东西对于我们来来讲没有什么用途,好把它删了,然后我们穿。
04:26
好,大家可以看到现在是在编译的,呃,这里是有一些warning,这个是因为migration,这里没有用我们constructor去定义,对吧,这个大家都熟了,好,那接下来我们就可以travel migrate MIG,我们先看一下这个这里是不是起了,好,我们去开启一下这个挖矿。这边应该哇,已经挖了这么多块了,好,那么我们这里去启动一下trouble migrate。
05:08
去部署一下,哎,报错了,我们看一下报错了哦,我们又知道什么问题了,对吧,没有解锁账户personal unlock,我这边默认定义发送交易都是COUNT0,所以我们去把它解锁一下出,呃,我比较习惯,大家可以看到我的习惯啊,我是习惯在对这个区块链上发送交易的时候,一边就就是看着我们这边这个law。就是防止这边出什么幺蛾子对吧。稍微有点慢,但是看起来还是正常的,在一个一个部署。
06:06
嗯,这个可能相对会有一点慢,我们可以先稍微等他一下,然后我们哦,这里已经话音未落,他就他就搞完了。但是好像还没有完是吧?呃,这个就是整个的部署的这个过程相对来讲还是会稍微麻烦一点,因为我们本地起了这么多东西的时候,大家会发现它其实很耗资源的,诶,不够对吧,大家看到这个这个呃,Please check your GA amount,这个明显就是我们GA给少了,所以这个我们到哪里去改呢?我们把这里再改一下对吧,这里盖给了50万,看来这个还是给少了,我们给个200万吧,给了2000万是吧。好,那么我们重新来migrate一下,那这个确实会比较花时间啊,好,我们可以继续来。
07:04
呃,大家可以看到第二次我们重新部署的时候,前面已经部署过的第一个脚本就没有再去部署了,对吧,没有再去调用,所以他只会把我们,呃,就是需要重新部署的东西再重新再去发一遍好。好,现在这个状态,这是正常部署完毕的一个状态,对吧,为了节省一点我这个系统资源,还是把挖矿停掉了。好,现在的话我们就已经真正的把呃整个的这一个合约完整的部署到了区块链上,那接下来已经部署好了之后,我们该干什么了呢?常规操作,那我们部署完合约之后,先做一个控制台的测试,做一个控制台的交互,对吧?先看看合约有没有问题,所以控制台交互的话,我们怎么交互呢?Pencil对吧?好,这个我们还是把这边应该打开啊,继续打开吧,好,我们交互的时候主要去呃用什么样的方式交互呢?大家一定还记得,我们是不是现在就可以直接用voting这个对象了,这个这整个这么大的这个对象都已经在我们里面了,对吧?voting.address大家也可以看到它现在的这个地址是什么,这就刚刚我们部署部署好的这个地址,那我们要调用的时候,怎么去调用呢,Voting点。
08:32
Deploy的,这是查的固定写法对吧?然后点the,然后里边,呃,大家知道,就是我们可以把这个instance拿出来,然后instance就可以直接调它的方法了,对吧?比方说我们我们当时定义了什么方法来着,我们先整一个简单一点的,比方说total for,对吧,我们可以total vote没写错吧,我们去查一下爱丽丝的。
09:10
呃,然后这个就我们直接可以点赞了,对吧?conso.log.to string,因为大家还记得返回的应该是一个big number对吧?诶出了问题啊,String不能to string哦,大家看我这个就很容易写这么一长串,很容易犯这个错误对吧,这个括号的问题。大家可以看到现在是零对不对,返回的是零,所以说这个是没问题的啊,我们再查一下Bob是什么,Bo也是零,没问题,我们刚刚部署吗?再查一下carry是什么,也是零,那大家肯定就想到我们还可以给他去投票,对吧,我们可以投票的方法叫做。
10:17
Vote for candidate,所以我们这里vote for candidate carry,呃,然后我们这里的话就不能直接to string了,对吧?直接把它打印出来好了,这个投票的结果它是一个比较大的一个,呃,就是整个交易的收据,对吧?所以我们可以直接投看看啊,又有什么问题,Invalid number of arguments,我们这里边的好,大家会发现我们肯定不能只给一个名字,对吧?因为我们现在是不是还需要有token啊啊,那大家这就想到我们后面如果要想给token的话,我们这里调用肯定还是有问题的,对吧?假如说我给十个token,大家会发现哦,这里还有一个password unlock,但大家会想到我即使解锁之后,是不是这个也不会成功,因为我现在还没有token,对吧?所以大家会想到,那我们应该怎么做呢?还是得按标准流程,就是先去买toke。
11:17
然后我们再去把它,呃去做这个投票,然后再去查询,好,我们这里边其实是给大家控制台交互,是呃给大家提了这么十个问题的,那在这里我我是希望大家能够。就是自己先不看下面我们的那个给出的参考的这种控制台操作,大家直接自己按照自己的理解去查一下,看能不能部署完了这个交易之后,大家部署完合约之后,大家能够自己实现这些在控制台里边的查询啊,那我们现在就先把这个流程先先给大家跑通啊,然后等一下大家再来来做这样的一个动作啊,这个clear不行是吧?在这个里边哦,CTRLL可以好,那么我们如果要想去给这个给别人投票的话,首先我们得去买对吧?首先得去买,那么我们要买的时候,大家注意应该给什么样的一个参数呢?买这个拜,这个方法其实没有任何参数,对吧。
12:30
那我们去买的时候应该怎么做呢?什么参数都不需要吗啊。呃,对,这个大家肯定想得到,就是我们这里得去把自己的value给给到对不对,比方说我这里给十个以太吧,呃,这里得web3.two尾对吧啊。一下一下就没了,我呃,我们的整个的数量是1万个,然后一个是0.01,所以还好对吧,十个以太应该还好,十个以太应该能买1000个对吧?好啊好,我们发送这么多,那大家肯定想到直接这么发,肯定还是不行,诶这里边又少括号了吗。
13:28
直接在这里看,确实是经常就会有问题,对吧?突围少了一个括号对吧?大家会哦,这里又又是没有解锁啊,这个确实很烦,大家如果要是不想这么麻烦的话,对,我们可以在后边加一个时间,大家见过我这么操作对吧?后边比方说给一个3600,那其实就是相当于一个小时,至少就不用再说了。
14:00
好,我们这里去看一下,是不是我们没挖矿,刚才我们又把挖矿停了吗?没停啊。好,那大家可以看到我们这里已经返回了这一个交易的信息,对不对,呃,就是我们刚才去买这么多,那我买完了之后到底有没有呢,到底有没有买到呢?那我们肯定还得再去查一下。查每个人有多少余额,我们应该怎么查?我们看一下之前定义的方法对吧。我们是不是可以去看一个vote的details啊,对,所以我们可以用这个vote details details。然后它的参数应该是一个地址,所以我们这里就只需要去传入,我们需要传什么WEB3点Eth.ACCOUNTS0对吧,我们刚刚就是用了抗S0去去啊败了一些它的这个数据,那现在我们把这个直接去打印出来看一下。
15:27
大家可以看到这是一个big number,然后后面还有一个数组对吧,那大家可以看到这个big number应该是多少啊。大家看得懂吗?一是表示它后面几个零对不对,是是那个指数好,我们为了大家看的清楚一点,我们这样吧,呃,Cons consultant log,我们可以把他的,因为后面那个是空数组,他没给人投过票,所以那个我们可以不管,对吧,那我们直接REST0是不是可以to string啊对,我们知道它的结构之后,就就很容易能把它打印出来,所以值1000对不对,所以这是当前它的余额,那么我们看一下就是当前的这个,大家会想到我们是不是整个的这个就少了1000个呢?总共1万个,现在是不是剩9000了呢?那我们是不是去可以查一下。
16:24
Token so对吧?啊,当然这个token so的应该是就是只只是1000对吧,好,我们就直接调一下好了,Balance,其实balance也是可以直接看的,对吧,因为是一个public变量,所以我们这里先看一下ton so。Token so。诶,应该没错吧,这好像有点问题啊,这里又少了括号对不对?大家这样敲的时候就得稍微注意一点,还是错deployed.the。
17:02
点token so,哦,Token so的点赞对吧,这确实刚才是对的啊,结果我敲了一个,所以token so也是1000,那大家肯定就想到我还可以直接去查BA什么叫什么来着。Token balance,对吧?我可以直接去查token balance来,大凡是9000,所以没问题,一点问题都没有对吧?完全符合我们的预期,如果我们在网页里边拿到这些数据,直接就可以及时的显示在网页上了,对吧?大家就可以看到,好,那么我刚才是买了这么些,那我们现在现在终于可以去投票了,对不对?Vote for candidate k,比方说我买了1000 1000个token,我给凯投十个。投的有点少是吧,觉得凯瑞不应该得那么多票啊,好,我们投一下试试。
18:03
这看起来有点慢啊啊还可以,所以大家可以看到这直接返回的,像我们直接发起交易的时候,直接的返回都是一个交易的返回对象,对吧,Transaction哈希和它的,呃,这个收据,所以这是窗给我们包好的它的一个返回,那我们得看这个投票到底到底成功了没呢?我们先看看我们现在的details里边到底还剩多少多少票,对吧。诶,这里还是1000,我们看一下是不是我们我们先看一下这个carry的,我们先看一下凯瑞的余额。Total vote for carry对吧?哎,这里已经有了十票,那我们得再看一下这个,刚才我们看到vote details里边。
19:02
哎,这个怎么还是1000呢,这个他他怎么没少呢。这个好像有问题对吧?啊,这个大家要想到我们之前就给大家说过,我们设计这个这个数据结构的时候,给的这个数其实是他已经买到的token数量,对吧,你要看他的balance的话,是不是还得减啊,对,所以这个这里边还是有个坑啊,就是想看剩下多少余额的时候,这个有点有点麻烦,那我们怎么看呢?是不是得把所有的rest都打出来啊,那这个就不能去to string了,对吧,我们把所有的rest打出来,所以大家可以看到我们这里边好,这个下面这个可读性还不好,对吧?所以我们还得把这个RISE1。它下边的我们看一又是一个数组对吧,我们可以一个一个拿一下啊,他点兔子军,这是给第一个人投的票对不对。
20:09
这个是零,好,我们看给第二个人,这是Bo,诶好,我们这二已经是第三个了,对吧,所以这个给凯瑞的十票已经看到了啊一的话,这是第二个人Bob是零票,所以在这里我们是能看到他给每个人投出来的票,所以他的余额的话,我们计算的时候是还得用他第一个这个1000要把这三个数加起来减掉,对吧?所以这样才能算出来九千九他的余额,所以这是我们整个的一个控制台测试和这个大家看到这个返回值的一个过程,好那接下来时间留给大家,大家先把这一部分就是我们的合约写完,然后部署,然后在控制台里边能把这些都跑的没有问题,然后我这里边是给大家提了十个问题,大家最好是把把这十个就全一个一个先敲一遍,对吧,这里面最后一个问题可能稍微有点奇怪啊,大家看看。
21:10
呃,不看大家能不能自已想到怎么去去找这个,就我们当前合约里面有多少ETH呢?对,有的同学可能想到这个其实更简单,对吧。
我来说两句