00:00
讲到的最后一部分内容就是监听,大家可能想到我们这里是实现了基本的转账啊,查询啊,啊就这些东西我们都会了,调用啊,函数调用啊,这些都会了,那假如说我们现在想要知道,诶,我们的这个代币是不是有人转了账,是不是有人给我给我转了钱了。我是不是,嗯,大家应该想到,就是假如说自己要做一个钱包应用的话,肯定是需要有一个类似于监听的服务的,对吧?呃,如果说我们账户发生了变化,那这个时候我们不可能是一直在一个轮询的状态,不停的去查,不停的去查,我们一定是要有一个事件去做这样的处理,那事件监听的话,我们昨天其实也已经给大家。介绍过了,非常简单,其实就是同样,如果是合约里面的事件的话,我们就还是要把合约先定义出来,然后直接去启动合约的那个监听的过程,那我们实现一下吧,前面都一样啊,呃,这个这个还是再再敲一遍吧,大能给大家多一点时间,就是大家能跟着我来走,对吧。
01:14
快三,我的习惯是这个后面总打分号啊,因为大家知道很多编程语言就是末尾是要求有分号的,那JS的话它是有没有分号都行,但是我建议大家还是就是养成好的这种习惯。当然有一些变成语言是是没有分号的,对吧,是不能加分号的,所以大家也要搞清楚,别搞混了就行,WEB3这个大家敲熟了之后就会发现其实还是挺快的啊,这个点providers。点http provider。
02:01
HTTP。Local host85好,这个我们的provider就定义好了,然后接下来好这这个没法手敲了啊。我们还是从这去复制一下。直接把这一行复制了吧。好,API定义好,同样我们要去用合约上面的事件方法,那当然就也要把合约定义出来嘛,所以有了API,然后我们的contract,诶,Contract。呃,我们先定义地址吧,大家把这个变量跟刚才不一样一点啊,把地地址先定义出来,Contract address等于。看一下。这个。好,把它复制在这里,大家地址肯定跟我不一样,对吧,然后我们玩一个我们自己的Co contract,我们的这个Co contract是什么呢?就是web3.17.contract好。
03:21
里边的内容就是abi,对吧?这是我们前面说的,主要就这么两步,上面其实我们是定义了一些常量,相当于是那contract contract我们定义了这是一个抽象的合约对象,然后就是我们的实实例instance,大家的名字都可以简短一点啊,我为了让大家看清楚这个是是什么东西,所以名称定义的很长,contract.at然后它这里就是要地址了,对吧,Contract。啊,主要就是这么两步,定义一个抽象的合约对象,然后创建一个就是具体的合约实例,好,那我们这个脚本最关键的内容在哪呢?最关键的内容肯定就是监听了,大家还记得怎么监听吗?
04:15
Contract instance。如果要监听它的事件的话,直接点它的事件名称对吧,大家还记得我们那个事件叫什么叫cent对吧?对,大写啊,注意我们当时定义事件的时候给的是大写,所以这里也要给同样的这个名字。那sent大家还记得我们可以给他的各种各样的选项对吧,比方说我们给就最常见的吧,Latest,这就是说明只要出现这个sa这个事件,Latest块里边有这个,我们就去去把它这个检测出来,就有了这个监听的事件发生,大家还记得我们当时是可以前面先R定义一个even等于它,然后再去watch。
05:05
那还有一种更简单的写法,我们可以直接给它定义回调,对不对?对,这里定义回调就相当于我们直接启用了这个事件监听啊,那这个就非常的简单了,大家可以看到,还是我们定义一下error console.log,把它打印出来。Else,我们就把它的结果打印出来。呃,这个我们就可以说这是一个。对吧。好瑞好,这就是我们非常简单的一个,我还是先不存了啊,直接copy过去,这就是我们非常简单的一个监听的一个脚本,那大家看其实最关键的也就是我们讲过的这个cent,对吧,它已经就在这里放出来了,那大家可以想象得到,就是它执行的时候会是一个什么状态。
06:23
好,我们来看看他执行的效果吧,我把它copy出来。在这里我们重新定义一个这个叫什么吧,叫呃,Sent,这个叫一个监听吧,Listen listener,对,这样。好,这就是我们的完整。这就是我们的完整代码,好,现在大家看,我直接去note执行我们的这个代码listener啊,还有别的文件。
07:08
大家会发现好像就卡在这,诶他为什么卡在这儿呢。因为他要注意我们的脚本,它如果在执行状态的话,肯定就是不会退回到我们的shell这个界面,直接可以执行命令的这个状态的,对吧,这个状态就代表我们的脚本还在执行过程中,因为我们是启动了一个监听器,所以它其实是在不停的发送请求,不同不停的接收我们监听的信息的,所以这个状态它一定是不能不能停下来的啊,所以大家可以注意啊,就是这里它是它是这个样子,那大家如果说想要让它在后台执行的话,当然也可以就是后面跟上这个对吧,他这样的话就在后台执行了。大家可以看到。Grade。
08:02
呃,这个1198这个进程,它就是去执行了我们的一个监听器。呃,那当然了,就是如果我们在这里只是把它起在后台的话,可能我们就没有办法看到它的结果,对吧?所以我们还是先在前台起一下,等一下大家如果要是想要去做这些操作的时候,大家再做这些就是改动啊好,我们前天天哎,又起了。这个是1213应该没了,好,我们就在前台起。因为我们这里还会输出,所以说那我们就再打开另外一个flash,进入到我们当前的这个目录下面来,大家可以看到。
09:01
那大家说这个起起来之后,我们怎么样去校验它呢?我们肯定得转个有转币对吧,有散的调用散的方法它才会出发,所以我们看一下no的,我们不是有那个send token嘛,对吧,Send token,还有这个我还得去查那个地址啊,这是有点麻烦。好,我们再给这个第二个转弯。转上23000。好转。好,这个交易已经提交了,但是这边好像没反应啊。因为我们给的参数是latest,所以它是要等最新的块出来才有,对吧,所以我们还是到这个GA里面去启动一个START1。
10:01
好,这边启动之后,我先看它这个出块了没有啊一点block number813,诶我们已经其实这边不用看,这边都已经检测到事件了,对吧,大家看到刚刚出块的时候,这边就已经检测到了,然后大家可以看到这个交易,哈希76935,跟我们刚才这里提交的这个是一样,所以我们刚才提交的这个交易就造成了这里触碰。那大家可以看到我们这里出号肯定还在不停的出,对吧,但这个事件就只调用了一次,所以其实就是因为我们监听的就是单独的这个sent event,所以大家可以看到这个状态啊,然后它的地址,这里的地址是谁。他有个address,这里的地址是谁?能想到吗?大家如果对比的话,好像都不是这儿的地址对吧,那他是谁。
11:03
合约地址对不对。这个是我们的合约地址,就是send,它在哪个合约上执行,所以我们可以看到下面,这就是from谁,To谁,然后amount是多少,我们的交易参数都在里面。大家注意,这里的from to是什么呢?我们当时定义事件S的时候,是不是后面还跟着参数的。所以啊,我们回过头来看一看,大家可能忘记我们的事件怎么定义了,还有这个,靠,好,原文件没有了啊。那我们还是到这里来contract,下边大家看一下这个point原文件。大家看清楚吗?原文件里边我们定义事件的时候,定义的就有三个参数,Address from address to unit amount,然后我们在发射一个事件的时候,就是触发一个事件的时候,又会传入message center receiver和amount,所以大家就看到了我们在这里的显示的这个内容有这三个参数。
12:17
From to about,就是我们刚才那笔交易传进来的东西,所以这些就是跟我们之前的内容都串起来了啊,当然我们这里其实还是一直在在挖币的,在在挖矿的,那我现在如果要是在转一个别的,大家看看是不是诶,Error。看一下啊。好,因为我现在在contract下面,所以没有找到这个目录,对吧,我们去另外转一笔,好大家看这里直接提交交易成功,那大家可以看到。诶,这里稍微等了一会儿,他在等待出块对吧,所以这里也检测到了这个事件,这里的交易哈西AB03,大家可以看到AB03一样的,然后我们这里的这个big number,因为没有给他转码,所以说就是大家可以如果打印这个amount是不是也可以打印出来呢。
13:14
因为这就是我们输出的那个result,对吧,大家可以直接解析这个内容,因为这就是我们输出的那个,呃,Result前面加了一个叫做sent curs嘛,后边就整个是result这个对象,所以大家愿意的话,可以去提取result里面的arguments这个as,然后再去提取它的want转成to three。好,接下来大家把这个脚本实现一下。实现完了之后也做一个验证,大家可以自己去转币,用我们自己的脚脚本去转币,然后能够监测到这个事件。这个基本上我们脚本这一部分,WEB3这一部分就可以告一段落,就是大家能够做的事情。就是简单的实现都已经做完了,当然就是说我们做的不复杂,但是类型是都已经涵涵盖完全了。
我来说两句