00:00
呃,接下来我们就看一看这个provider这个相关的东西,Provider呢,前面我们已经其实已经讲到了R,对吧,一开始我们去引入WEB3这个实例,引入WEB3模块,我们创建WEB3实例的时候就涉及到了provider,只不过我们当时不是在就是操作provider,我们直接是创建,我们就直接new web3,然后引入他的那个providers http provider对吧,是这样的一个方式,那这样的一个方式呢,同样也用在就是我们已经起了一个WEB3之后,也还可以改它的provider。大家想我们这种改provider是一个什么意思呢?这是要干什么呢?其实简单的就是说,呃,对,我现在已经创立创建好了一个WE3对象,那这个WEB3对象呢,不见得就一定是依赖于我们连接的那个以太网节点的,对吧?就像我们一开始煤气以太网节点的时候,我们WEB3对象也可以创立出来,也可以拿到它的version,也可以拿到它的基本信息,那所以既然你那个可以不连接,那我当然连接了之后也可以断开,也可以再去重新换一个连接,对吧,所以我们现在。
01:24
是连接的是LOGO8545,而且是http provider方式之后我们也可以再重新设,那重新设的这个命令就叫做web3.3provider。啊,这个基本上就是0.2.0和和1.0.0,就是0.20.1和1.0.0都是一样,都有这个方法就是set provider。那里边呢,就是跟我们在new一个provider的时候是一样的。写法是一样的,你有WEB3实例的时候是一样的,呃,我们。可以把本地的,假如说我们可以在另外一个端口再起一个不同的本地的四链,我们指定,比方说是9545,那我们就把它改了之后放进来就可以了,或者我们也可以不连本地,我们连一个远程的provider也是完全可以的,把它IP填进来就可以IP端口填进来。
02:19
又或者,我们还可以不用HTTP的形式。去连接。那还有什么样的连接方式呢?呃,其实之前我们在看这个,好,我们先把这个退出来啊。我们在看这个gas的启动选项的时候,其实大家已经看到了。我们除了RPC的方式,他说的是。启动就是能够能够使用一个HTTPRPC的server,对吧,Enable,一个这样的htp rpc server,这就是我们的http provider,所以它默认的端口是8545。
03:04
另外,除了RPC杠杠RPC这个选项之外,我们还可以杠杠WS。WS是什么呢?对we的协议吗?大家应该听说过对吧,So的协议,那它其实就是相当于是启用了一个WSRPC的一个serve,也就是说我们8545起的这个RPC杠,刚RPC起的是一个HTP协议,去连接,去发送RPCJRPC请求的这样的一种连接方式。而刚刚WS呢,它就会起一个用WS协议。去发送JRPC命令这样的一个。这样的一个连接,创建这样的一个连接,那WSRPC这样的一个就是它启动,我们启用这样的一个服务的话,它默认的端口是8546。
04:01
而且WS的这种启动方式是以太坊官方推荐的。因为我们知道HTP的方式。不太安全对吧,嗯,就是它不是HTPS,它还没有这个,就是加密的这一层,所以直接HTP,其实我们的所有的这种端口,其实直接开放出来,别人可以抓到我们所有发送的请求包的。呃,所以在官方的推荐里面,其实是就是不建议大家用刚刚RPC的方式,当然我们平常做测试,然后简单开发,其实就是APP没没问题啊,这个最简单,所以我们就先这么做了,另外还有一个就是它默认启动的一种方式叫做IPC方式,大家可以看到尽管没有杠杠IPC这个选项,但是因为它。之前默认启动就是用这种方式启动的,它没有杠杠IPC,但是有杠杠IPC disable,这是什么意思呢?这是disable IPC rpc server,所以就是说它默认是启动的IPC的这种方式。
05:12
进程间调用。那所以如果我们不想用这种方式的话,可以用这个选项把它禁掉啊,这就是我们为什么之前呃不用刚刚RPC也没有刚刚。WS我们照样可以启动一个节点,它是怎么样的通信的呢?用的是IPC的方式,好,我们在这里其实就呃这样啊,我把这个起起来之后大家看。我用这个选项集起来之后,如果我们另外启动一个。我们直接到这个目录来看一下,其实大家可以看到一些东西啊,这里比刚才好像多了一个东西是不是。对,多了一个ga.ipc这就是他进行进程间调用的接口文件。
06:02
所以大家可以看到前面我在LS的时候没有这个红色的文件,对吧。那现在就多了这个。所以这就是我默认的启动方式,IPC方式,好,给大家多多介绍一点。这个东西就是。可能我们暂时不会去用这些东西,但是以后大家一定会碰到。好,那呃,Provider这块呢,还有一些就是有两个东西叫做current provider和given provider,这是什么东西呢?Current provider是当前设置好的web and provider,也就是说如果我们在浏览器里边安装了ma mask的话,我们在浏览器里边跑一个JS。我们跑一个前端页面,里面嵌入JS,我们去检测当前的current provider就应该能够。获取到我们ma mask连接到的那个。
07:02
这就是当前provider。那呃,Current provider呢?不仅仅是应用于浏览器环境,我们也可以在别的一些环境里边去看current provider。那为了区别就是这个card provider是在各个各个版本里面应该都有的啊,为了区别这一个为了专门给浏览器环境,就是我们前端应用的时候,专门有一个明确指示,说现在是不是装了ma之类的东西。那1.0.0版本里边又专门设置了一个叫做given provider的东西,就是它是专门查看浏览器环境设置。好,我们还是来看一眼吧,这种东西就是说半天都不如瞄一眼,这边是0.20.1,我们看一下WEB3的current provider,大家可以看到这就是我们logo host8545对吧?好,我们看这个1.0.0这边有没有current provider啊,这个东西好像多一点,它定义不一样的,但是其实也基本上没怎么变,就是它的这个he provider这个对象,它的定义的东西多了,但是也是LOGO8545对吧。
08:19
好,那么我们再来看WEB3点,Given provider,好,大家看这边没有对吧,我用这个用table补补全,它是没有办法补全的,所以说0.20.1里边没有定义这个given provider,而这边是有的啊,当然现在他会发现没有provider是not,因为这不是浏览器环境。如果我们在浏览器环境里面跑这个JS的话,就能发现他有了。好,另外说到浏览器环境,我们再多说一句,就是我们现在比方说我这里打开浏览器,我这里有mama的钱包,然后已经登录进来,那他家其实可以看到,我们上节课给大家说的时候,就发现他那个WEB3对象看不到诶。
09:16
点到什么去了,其实在这里大家可以看到,如果我去敲打开F12,打开我们控制台的话,去敲万三,其实是可以找到这个对象。这个对象是什么呢?其实就是我们当前mama的钱包嵌嵌入到我们这个页面里面来的对象。之前我为什么敲的时候大家好像看那个没有看到呢?是因为我是直接打开的这个新标签页,新标签页里面如果去敲WEB3的话,大家就会看到它没有定义,那是因为这个页面它其实没有加载我们的浏览器环境,对吧,所以是这样的,这个这个新标签页页其实是没有上网的一个状态。
10:00
所以如果我们即使是不在,有些同学说,那你就可能是mix里边对吧,那我比方说我这是一个G转换的这个网页,它里边有WEB3对象吗。我看一下外三。还是有对吧,所以这就是我们ma mask,它会把一个WEB3对象创建出来,然后直接注入到我们浏览器里面,我们知道在浏览器里边最大的全局变量是window,对吧。所以我们可以看到在window里边直接就诶,它是一个大的三有。已经看到了是吗?哦,它是一个大的WEB3,按道理我们应该是一个小的WEB3啊。就是在这个全局变量window下面已经注入了一个我们的WEB3对象。我没有细细的找下面啊,应该是有的啊,我们看一下对,大家看到WEB3在这里,这就是我们注入的这一个WEB3,那大家其实可以看一看这个WEB3它里边到底包含什么东西。
11:17
它有handler,有target。Current provider,我们看一下current provider是什么,大家看ma mask in配provider,这是它的特殊的一个类型,对吧,所以他直接检测出来,这就是ma mask给我们的一个东西。那如果大家在这个细进去去看的话。这个好像那ma mask已经把这个包起来了啊,所以这个我们就看不到它具体的一些东西了,嗯,但是大家至少从这一点就可以看到我们在浏览器里边的WEB3对象,它其实就是一直嵌入在我们每一个页面里面的,对吧?只要我们打开浏览浏览器,只要在上网,这个WEB3对象就已经嵌入进来了。
12:05
那他的provider就是ma mak给我们提供,这是说到provider这一块,给大家多说一点这个,所以大家其实还记得我们前面一开始给大家讲的一个东西吗?就是我们一般情况检测的时候是怎么写的。所以检测的时候,我们就是说先看有没有WEB3。如果WEB3。已经被定义了,不等于奥迪三对吧,已经被定义了,那么我们就我们的这个WEB3直接就用,现在我创建一个JS里边的WEB3对象,然后我直接他的provider就用我当前的provider。那如果在ma mask,就是在浏览器环境里边,那就是刚才我们看到的ma mask那个叫什么来着,忘记了啊。叫做对配置R对吧,对mad ma配。
13:06
如果没有的话,我们就还按我们真正的创建去引入我们local host 8545,这就是provider这个处理这块我们一开始去接触的时候,可能会觉得它这个比较难理解,所以多说一点,呃,其实大家如果要是在用的过程当中的话,呃,用熟了之后可能会对它有越来越深的认识,一开始的话,大家可能就照着先抄过来,能用上就行了,对吧?接下来我们说一说这个WEB3的一些通用方法吧,这些通用方法呢,那其实大家有一些其实也已经用到过了,这些通用方法主要分这么几几类,一类是以太的单位的转换,web3.from轨,那就可以从尾去转换到一个以态,或者是其他的一些东西,对吧?大家应该记得就后面跟一个很大的数,那这个还是操作一下吧,这个。
14:00
我们举个例子,操作一下就好好3.from尾,然后我们可以把比方说这么大的一个数,把它变成以态,大家就知道肯定就是把后面的那个呃,就是18位嘛,对吧,就把它截取下来,但是大家可以看到这个其实精度还是有缺失的,对吧?对,所以说这就是为什么我们说一般情况还是要用big,呃,Big number去做这些处理,我们直接from轨的时候,其实呃还是会有一些问题的啊,当然如果说我们这个是把它转换之后,就是给用户看,那没什么问题,给用户显示的时候肯定也是要保留小数精度的嘛,所以我们这个转换还是没什么太大的问题啊,那当然有from尾,大家知道就肯定有兔尾。
15:00
兔尾的话,那一样就是。我们就是给一个数,然后。给一个一对吧,给一个单位,然后就把它后面加了18个零,这都是非常简单的一些操作,呃,那除了这个以太单位的转换之外呢,WEB3里边提供的工具链其实是非常的庞大的,还有就是to string。这是数据类型转换的,就可以to string to decimal,另外就是可以To Big number,我们可以把它转成一个大数字,那这个我们单独来说一下吧,web3.tobignumber,那它输入的是一个什么东西呢?比如说其实我们可以直接就就这么输一串,因为big number是一个对象嘛,对吧,你可以直接就输一个数,大家看就变成big number这种类型了。或者我可以输一个字符串。
16:04
这个不行啊,大家看也可以就是变成一个big number类型。呃,所以就是都是很简单很直观的一些工具类的使用,另外还有就是字符编码,那这大家可能之前我们在讲到就是paylo的时候应该用过这个对吧,我们用过就是paylo,它要用到的是16进制字符,那我们本身的字符形式呢,字符串是UTF8形式的,所以当时我们做了一个UTF8到ha的一个转换,所以大家可以看到这里可以to helps to ask,还可以变成ask to uf8,还可以from utf8,当然这里还有就是from helps,应该也有,这个我这里没列出来,大家就是自己下来之后一个一个都用,一用就好了。最后还有就是地址相关。WEB3里面提供了就是判定一个地址是不是合法地址的这样一个东西,这个叫WEB3点。
17:06
Is address也是非常直观啊,名字就是比如说我们随便输一串数,大家可以看到它就会返返回false。那我们如果要是这样说的话,还是false,怎么样就能处呢?啊对,20个字节对吧,哎,那大家想我这是输20个数就可以吗?是是二十二十位数就可以吗?我们数一数看看行不行啊,1234567,应该是二这个数啊,诶看还是false。零。应该得加零叉是吧,还是放那怎么办?
18:01
哎,这个时候大家其实可以看一下啊,我们。自己的这个地址。当时我们讲过,大家可能也没有细细的去想他这个到底是多少,我们看一下这个自己的地址到底是多少个。好,我们把它复制过来一张。这是怎么回事?这是为什么这么长啊,这是多少倍哦,目测长度感觉就是咱们刚才那个20倍的两倍是吧。哎,它怎么变40位了,咱们不是说它是20个字节的地址160位吗?它怎么变成40了呢。啊对,刚才有同学说16进制嘛,咱们是0X对不对对啊。对,那一一这个也是16进制,那大家想16进制一个字符展开是几位,二进制字符二进制位啊得是四位。
19:00
那20个这个16进制字符展开不就是80位吗?我们要160位了,对不对,自动填呃,它不会自动填补,所以咱们这个是is address,然后传的是一个一个字符串,所以它当然不会自动填补,对吧,咱们就是要判定它到底是不是吧,要自动填补那就全是了,所以大家稍微注意一下啊,这里是就是按字符数的话,那是40位,也就是40个X字符。40和16进制字符,所以这个是一个错,呃,这里要说明的一点是,如果大家用1.1.0的话,就会稍微有一点变化,大家可以看我这里如果要是web3.from尾的话,大家可能会发现这个有问题,这没这东西。它跑哪去了呢?所有的这些东西在1.1.0里边,全部放到了web3.us里面,我们就直接敲一下这个吧,大家看一下,有S里边,下面有to尾,From尾啊,它只有这两个,上面还有to us from u tf8,大家看到了对吧?它甚至还提供了更多的东西,直接UTF8 to help。
20:17
Hax to u tf8,所以其实呃,1.0.0还是扩展了很多功能的应用,而且他把这些更整齐的放在了这个WEB3点有这个这个里面。所以大家可以看一下,就是假如在要用1.0.081 1.0.0的时候,会发现好像我们直接WEB3怎么点后面什么东西都用不了了,不要着急,加上一个类就可以了,好接下来哎,都55了,我们还可以再讲一点东西吧。啊,这些东西就尽管比较比较简单,但是就是大家还是得全过一遍,就是还是一个熟悉的过程,熟悉了之后就用起来会比较方便,要不然大家听的时候觉得很简单。
21:07
就很容易,就是一敲的时候就会发现,特别是它有不同版本之间的差异,然后有同步调用,异步调用之间的差异,这两个是大家重点要去搞明白的啊。好,接下来我们就看到真正核心一些的问题了,比如说账户相关的一些问题,大家就想到了,首先我们有这个accounts对吧,这是我们一上来可能就会想到的,我怎么去查它accounts呢?呃,另外就是怎么查它的po base呢?所有的这些东西在,呃,就是整个的这个WEB3里边,它全部都放在ETH这个下面,所以接下来我们重点介绍就是ETH整个这个对象下面的所有内容。那我们就首先来看一看coin base啊。那在0.20.1里边就是WEB3点ETH点贝。
22:04
来大家可以看,就是很简单啊,直接这么一敲,然后返回一个地址,那这是什么样的一个调用方式,明显是同步对吧?啊怎么了哦,没版,对对,其实就是说在看明显就是不一样,同步它就直接显示这个绿色的直接就显示在这儿了,对吧?然后异步调用的时候,明显它就会返回一个on fun之类的东西,然后我我们看一下直接其实大家这个按table键补足的时候就可以看到这些就是我们想要的东西啊,比如说我们想现在想要找Co base,明显它就有get Co base对吧,那一样我们知道它是个异步调用,那我们得给一个还是一样的给一个回调了。
23:02
cons.log把它打印出来,我们就可以看到返回一个案例范,然后下面返回了同样的一个地址,对吧,5B23打头的地址,好,那么在1.0.0里边呢,它一样也有这个方法,Get Co base大家看到了,所以那它的调用方式肯定我们一般都是链式调用了,Can log把它打出来,我看一下是不是。没有问题对吧,那接下来我们就想了,那你这个,呃,我们先看一下这个里边我们的账户到底有多少啊,Account只有一个,那我们再扭一个吧,大家还记得这个new account是什么吗?对,Personal对吧,New account。
24:14
哎呦,好,现在有两个了,我们不要这个返回的account,跟con一样就没意思了啊,所以大家可以想到我这边能够直接ETH点个com,因为我们在这个gas控制台里边默认就有一个WEB3对象,对吧,所以我们直接可以敲这个ETH。那大家就想到了我的盖控制台,前面我都说了,它的版本跟我们这里的零点就是0.20.1对吧,所以0.20.1这里跟它的调用方式其实是一样的,所以怎么调用呢?那就是ETH点胖。大家就看到诶同步直接返回没有往尼粉两个,那同样有同步调用方式,我们就可以异步调用get和大家猜都猜到它的名字是什么样的,对吧?点log带诶。
25:13
出了什么问题啊?Get account?敲错命令了。好,正常来讲的话,应该是就是肯定不会出现这种很诡异的状态啊,那大家其实就可以想到了,如果我们在。就是如果我们的版本是一样,都是0.20.1的话,那是不是我们其实node这里边的这个环境跟我们的盖是完全一样的呀。
26:02
那我们在里面可以用一步调用吗。得能想到对吧,是不是觉得应该也可以,好我们试一下get.get诶大家看果然有get和count对吧?好,我怎么习惯打的就是点啊,很瘦点log。诶,大家看这里好像是有点问题的,对吧。Invalid left hand side inasign,所以就是在这个gas里边,它对我们的这个函数还是会有一些有一些限制,跟我们在真正的note环境里边的调用还是不一样的啊,啊,我们可以尝试一下,就是。把它如果写成大家习惯的方式。
27:05
大家可以看到用习惯的方式写的话,其实可以正常返回的,所以就是说呃,这其实是说明什么呢?是我们的这个盖环境里面对不支持ES6对吧,所以它用传统的方式直接去做异步调用的话,那大家看它这个异步调用就更夸张一点,这个异步调用比我们的返回时还快,对吧。直接这个地址是在前面就返回了,呃,所以这就是盖跟我们的这个节点是直接捆绑在一起的嘛,所以它的这个就是看起来就跟同步的这个速度是一样的,好我们就先好,我们顺便把这个1.1.0里面这个也也打了吧,多耽误点时间对吧。同样的啊,Get accounts点赞,因为这个很简单,所以跟大家过一遍看看这个结果。
28:02
没有问题,也是两个账户全列出来了,对吧。
我来说两句