00:00
好,那我们现在呢,就是在mi里边,我们先来看一下remi为我们生成一个,呃,就是部署完一个这个合约之后,他为我们创造的跟合约交互的这些东西是什么,回顾一下这里好像。不能做部署是吧。它就是需要我切换一下,好大家可以看到这里,我们如果直接点deploy的时候,下面这里是会报错的,因为我们本身是需要有一个。构造构构造函数是需要有一个参数的,对吧?好,那么我们把刚才的这算了,我们直接自己重新手输一下吧。大家还记得我们刚才给了一堆什么东西啊,我就直接给了ABC,好了,这个没关系,好A和B这里。
01:04
Deploy。诶,大家看这里其实是会就是是会给我们报错的对吧。哎,我这里是多加了一个什么东西吗。我看一下他有可能是不让用单引号,我看是不是这个问题。哦,这个还是还是不行对吧,所以大家看到他是说这不是一个合法的best,呃,BASE32的一个value,呃,但是我们看到我们前面在部署的时候,直接部署就成功了,对吧?啊,所以那其实BEST32和这个string。那大家可以想到,从理论上来讲,其实存储那不就都是一个字节一个字节的数字,或者说本质上不都是二进制0101的存储嘛,所以它的数据格式只是说我们用什么样的方式去认为它是用什么样的方式组合起来的,只是这样一个一个东西而已,那对于我们的存储来讲,其实本身BASE32和string是可以直接去做转换的,肯定是没什么问题的,但是呢,在这个人mi里面,它就会做这样的限制,那我们呃知道,就是stream本身它的存储方式是UTF8的这个。
02:44
呃,编码格式对吧,所以如果要用BA32直接去处理的话,肯定就是有一点问题,呃,当然我们在这里的话,既然这里没有问题,我们就不说了啊,在这里我们可以给他一个,呃,比如说我们给一个16进制字符之类的,这个应该是可以的。
03:13
好,我们看一下,不加看可不可以。这个单数里边,它不允许单引号的这个。啊,这里还是有问题,我们应该得加0X哦,所以大家可以看到这个remix里面这个限制还是很严格的,所以我们如果要是。Havestream。哦,好吧,太严格了四位。
04:03
我们给到四位应该是可以的啊啊,现在终于成功了,这确实不容易对吧?所以其实这个人运词里边这么多的限制,也就是为了就是防止我们做一些误操作,呃就是本来这个东西我们应该是一个string类型,但是我们这里如果要是说呃定义好了是外三二的话,自己又没有做转换,那肯定到这里的时候就会有各种各样的问题,因为大家也记得我们一开始做那个就是呃自己汽车car那个合约的时候,我们输这个,如果把它改成Y2之后输BMW就是不行的,对吧?我们还专门找了一个这个转换的呃地方,我们去呃把这个his转换,把UTF8转换成his,然后才实现的这个功能啊,那我们现在先不管这些了,我们看一下这里能看到什么东西吧,我们这里能看到的,其实。
05:04
有两个是因为public变量自动生成的,那这个可能我们不是太关心,我们最关心的就是两个,一个是vote。投票,另外一个是votes,呃,应该是total votes for对吧,其实我们就是大家能够想到,如果我们创建一个网页的话,跟用户交互的时候。就能想到,那应该是每一个人对应后面应该有一个投票,为他投票的一个按钮,然后我们点一下,就应该相当于我们在这里输入了一个人的名字,然后点。对吧,大家应该能够想到这样的一个动作是不是,然后还有一个就是total host for,这只是一个查询,那如果放在网页上的话,那它应该就是实时的,我们随时都应该把当前的这一个更新出来,当前的状态更新出来,显示在后面,当前他的票数是多少,然后有一个按钮,你可以去投票,大家能想象出来这个我们最后的这个网页是什么样子的,对吧?所以我们现在要做的对应的操作呢?在控制台要做的模拟,其实也就是首先要完成像我们刚才看到remix里边那两个按键能够完成的功能,首先我们要能为一个人投票。
06:27
其次我们投完了之后,还要能看到他的票数的变化,好那么我们前面应该已经有了这个contract instance了,对吧,我们现在确认一下啊,Address有,所以我们要调用它的方法,现在其实是我们要用控制台调用它的方法。那其实很简单,就是后边直接跟上方法名就可以了,对不对,那我们的方法名是vote,呃,我们再瞄一眼它的参数是什么。啊,参数就是这个一个can内,但是这里边我们本来定义的是BEST32,那我们看看是不是它能直接转换,因为我们前面定义的时候,给这个初始值的时候,就直接就给的是字符串,对吧?啊,我们在这里直接给一个字符串,我们定义过Alice对吧?啊这个大家可能我我这边好像这个是一开始试的一个东西。
07:29
对,大家可能看到不是我们定义好的那个Alice什么的,我这儿给了一个什么rap这个,这个大家不要管啊,大家肯定知道这个我们应该怎么。应该怎么用这个东西,好,Vote直接给一个Alice,那这个就是一个同步调用的方式,去发送一个消息,看一下这个结果,诶他说invalid invalid的address,这是为什么呢?对,他不知道谁投对吧,所以我们要。
08:04
三点。好,现在我们看到已经生成了一个交易,那在GALA这里我们看一下,大家看刚才这个交易已经是已经是已经是进块了,对吧?Block number都已经显示出来了,所以GA纳就是相当于我们跟刚刚DV模式下的GA是一样的,就是我们只要发一笔交易,他就立刻进框,所以相当于我们就什么都不用走,不用什么都不用操心,不用担心,就是我们那边要启动挖矿啊,或者怎么样的问题,好,我们已经投了一票,那我们现在来看一下。我们是不是可以调用另外的一个方法来查看一下当前它的投票数量呢?它有一个方法叫total votes for,应该也是Alice,对吧,那这个其实我们它其实只是一个查询,不是交易,我们就不需要from了,对吧,我们直接这样就可以。
09:11
好,给大家看到这个,它就返回了这个,我们如果看不懂它是什么东西的话,这我们给大家说过,它就是S代表的是符号正负对吧,然后E后面这个代表的科学计数法的那个十的几次幂,那这是十的零次幂,那就是没有了,对吧,没有后面没有0C,这就是真实它的有效数位,所以大家能想到这个其实就是一对不对。好,所以就是1ALICE得了一票,所以大家看在这里其实我们直接调用去传一个string,尽管我们定义的是BEST32,但是这里传一个string其实是可以的,对吧,但是呃,当然了,就是在从这个安全性角度来讲,或者说从别的一些角度来讲,似乎我们应该是还是对这个数据格式自己就是心里面有数做一个限定,这样会比较好一点,因为大家可以想象得到我们这里给的爱丽丝。
10:12
到了合约里边处理的时候,他肯定就转换成了一个我们认不得的一个状态了啊,但是呢,我们只要是一开始给他放的也是一个这样的状态,之后查的时候也是这样的一个状态啊,那其实还是一样的对吧,所以一样还是能查出来啊,只不过就是说这个大家从这个直观角度上好理解,但是从这个本身mi这个限制来讲,我们好像做不了这件事情。好啊,这个大家可以想象到它,它本身这个内部是替我们做了一个这样的替换的啊,就是WEB3这边是做了一个这样的替换的,好,那么我们这里还涉及到两个就是比较,呃,就是当时给大家提过的一个点,就是说call和send transaction啊对,大家可以看到,如果我们去。
11:07
如就是没电了吗?喂喂,哦,好像是没电了,没关系没关系,就这是充电电池是吧。没关系,我我我就先不用,先先先这么说,这么说应该大家也听得到对吧,只不过可能后面的同学稍微有一点就是听不太清楚,我声音稍微大一点就好了啊呃,所以前面我们提到了call和s transduction这两种调用方式的区别,所大家可以看到这里,如果我们要去查询这个给爱ice丝投的票数,总票数的话,或者我们不查爱ice丝了,我们查一个别人啊,这个时候我们应该用call还是用对,谢谢。
12:05
这个时候我们是应该用call还是用transaction呢?对,这里只是一个普通调用啊,所以这这里只是一个消息调用,对吧,就没有发送交易,所以这里如果要调的话是用套,那前面这个如果我们为他去投票这一个方法,大家觉得如果我们要去这样写的话,应该怎么写呢?Won't点什么呢?对,这里应该是sun transaction对吧?所以大家要注意这两种写法啊,我们现在给carry也投一票,所以它返回的就是一个。交易哈希,我们现在再查一下凯瑞的票数,看看是不是好。也是一。啊,所以大家看到就是我们刚才给Alice丝投票的时候,直接就是用了instance.vote然后Alice其实它是自动判断了我们这一个方法是什么类型,然后它自动调用了点duction。
13:14
呃,而我们后面调这个total Bo four的时候,它其实是自动判断了一下,自动调用的是点com,对吧,是这样的一个状态。
我来说两句