00:00
应该是讲客户端的时候,有一个点没有讲到,大家看PPT的时候是不是也发现了,我们有这个没有讲啊,对Jason rpc这这个明显,呃,这到底是一个什么东西呢?这是这其实就是说我们外部启动,就是用guest启动了一个客户端之后,我们从外部要去连接这个客户端,然后去访问以太坊的时候,我们用什么样的方式去去连接客户端呢?去访问以太坊呢?那其实我们肯定是要给这个客户端发一些消息吧,发一些固定格式的消息,发什么样的命令,或者说发什么样的格式的东西呢?我们发送的是就是编码成Jason的一串命令,以太客户端是提供了这样的一套API的,然后这一套API一般我们又把它称称为是远程调用命令。就是在我们客户端里面,客户端的控制台里面,我们去输的那些命令,其实它底层就会去发一个远程调用命令,这就是我们所说的它编码之后是Jason。
01:15
这就是我们所说的Jason rpc,那JARPC是是一个就是本质上呢,大家可以理解成它就是一个接口,所以一般情况也会把这个叫成Json rpc API。大家就理解成就是就是我们外部去调用服务的时候,去调一个接口,可以理解,简单理解成这样。大家可以回想起来,我们当时启动我们的呃,客户端的时候。如果要是指定了杠杠RPC的话,它会启动一个本地的8545端口,对吧,会开放一个8545端口,所以它就相当于是起了一个服务器。起了一个服务器,它的调用方式,我们要去访问的方式是Jason rpc,然后呢,它开放的端口是8545,所以我们在外部其实是可以直接用访问它的8545端口来去做这3RPC调用的。
02:18
好,那接下来啊,当然这里就是大家再明确一下就是。RPC接口通常它是作为一个HTP服务的,所以我们看到启动的时候会有一行,大家会看到启动RPC服务,然后后面给的IP,呃,给的那个就是呃,就是我们的那个资源的URL是HTTP,然后后边local host冒号8545对吧,所以默认的端口是8545。出于安全的考虑,默认情况下它仅限于接收localho。所以大家看,就是我们如果要在外部有这个跨域访问请求的话,还需要加一些别的参数,当时我们其实做过这样的配置啊啊在这里可以多提一句,就是说如果我们要访问这次RPC的话。
03:09
我们可以用。编程语言写的专门的库,这个是非常方便的,当然我们也可以直接在控制台里面去输命令,因为那个我们的控制台其实也是用Jason写的一套东西,它里面不是有一个大的WEB3对象嘛,所以它的底层其实也就是我们这里说的JS的WEB3JS。这就是整个就是用JS写的一个API库,这就是我们所说的WEB3,之后我们再可能会用一个整块的时间去给大家介绍一下这个WEB3这个这个东西啊,这个库其实主要也就是一些API调用,呃,这个说了这么多,可能大家还是比较懵啊,这些东西,这这是什么乱七八糟玩意儿,我们实际来做一下操作,大家看下面我已经列出了一个命令啊,我们实际来来敲一下看一看。
04:02
首先我们启动bash啊,然后我们找到之前我们在这里应该启了我们自己的一个思链,那我现在就去启动我们自己的思念,大家还记得这些命令吗?盖刚刚对吧,指定我们的对,然后我们要指定network ID对,当时我建的是15对吧。然后我们还是给一个吧,然后把输出他的log。诶啊,我这里是应该是已经在用着了。好,我这里已经起了一个了,我先把它退了吧。好,我们在这里起啊。
05:01
好,我们现在已经进来了,首先我们先大概的看一看它里边的一些基本的情况啊,Block number这个没什么问题,对吧,然后看看accounts。好,里边有一个com,好,现在大家看一下我们所说的这个Json rpc。要调用,到底是要调用什么呢。我们是可以另外起一个控制台,这个大家随便啊放,放在哪里都可以,我还是把它分屏放过来,我们在另外一个控制台里边可以直接用刻命令,大家知道克命令吗?呃,它就是对我们简单的可以发送网络请求,对吧?比方说我们这里用刻命令去发送一个host请求。然后我们指定它的请求头。
06:05
呃,应该指定。我我们这个要发送的是Jason rpc的调用命令,远程调用过程调用的命令,所以我们的请求头一定要把它指定成application Jason对吧?这个大家如果要是做过这方面开发的话,可能这个就会比较比较熟悉一些,Contact type应该是applicationson。好,然后接下来我们就要发送我们真正的数据,发送什么样的数据呢?这个时候我们就要发送一个Jason数据。这个Jason数据要符合Jason rpc的调用规范,它是一一串特定的Jason,什么样的特定的就是包含四个参数,哪四个,一个叫做Jason rpc,而且它还有要求,就必须要指定成2.0,这是它的版本啊,GRPC的版本,然后还有一个是method,就是我们远程过程调用嘛,我们要调用哪个命令的哪个方法呢?
07:23
去调用一个,呃,这个具体的方法我记不太清楚了啊,还是看一下我们这里面列出来的这个。好,这里是web3.clientversion,好,我们就用它啊。WEB3好啊,这里大家注意啊,不是不是点在我们控制台里边可能调用一些方法,就直接用用那个点去调用,对吧,因为它是对象,但这里是万三,它就是编编码好的这种结构,我们是需要用下划线来指代它的这一个方法名字,有方法名那就肯定有这个参数,这个参数没有啊,有一个这个后面大家注意还有一个ID,这个这个ID是干什么用的呢?
08:13
这个ID的用途主要是要去指明我们这一条调用,呃,相当于就是给他分配一个标志符。这个ID发送到服服务端那边,就是发送到我们的节点那边,客户端那边,他那边又会返回的信息里边也会带上这个对应的ID,所以说这就是一个固定的,相当于是我们互相之间连接的一个一个标志符。我们打电话的时候,这是这是我们的一个专线,相当于是这样,我们这是这个通信,这这一趟电话,我们这叫一号通道,所以我发送的时候带上ID1那边就知道啊,你这是ID1的,我回的时候我也回回你一个,这是ID1响应你这个请求,所以这个就能实现我们并发的去发很多请求,对吧,然后知道他返回的是到底这是哪一条的请求。
09:06
当然有了这些之后,ID后面我们给个一,呃,这个给个数啊,不是应该是数吧,对,后面我们加上http local host,就是我们要。要访问的地址和端口号,大家可以看一下,大家说这是为什么?对,这边没有开RPC端口,对一想就想到刚刚RPC。好,我们现在再来复制一下刚才的这个命令,我们发一下诶大家大家能看清楚吗。能看清楚是吧。JRPC它的返回这里就是它的返回JRPC2.0,这还是这标准对吧?嗯,我们发JRPC2.0,它也回G3RPC2.0,然后呃,ID1对,我们发的是一排返回是一啊,我们看后面报错了啊,它的返回是个错误,Code method,说什么呢?Method web好,我们这个调用不是web web3对吧,我们给错名字了,所以它返回说does not exist就是不存在,或者说它不可用,我们刚才说错了啊。
10:33
博士也起错了是吗?哦,是version是吧。确实写错了。确认一下version对吧,是这样好,我们再看一下返回,诶,他现在返回一个结果,Jason rpc2.0ID1RESULT,这个不是error了,终于不是error了,盖为1.8.17sta。
11:03
然后后面是Linux的环境,呃,AMD64共1.9.3,那这些东西我们知道在这个gas version里面我们都能看到,对吧,1.8.7 stable,我们的go版本1.9.3,所以大家可以看就是它的这样的一个Jason r PC的一个命令调用,其实就相当于我们去。给控制台发一些命令啊,这个如果大家看的还不是很清楚的话,我们再来看看别的啊,比如说我们随便找吧,我们看看ETH里边应该有啊对,我们不是有get block number吗。我刚才刚用了对吧,那怎么调用它呢?我们改一下这个method ETH下划线。Block number好,看一下又挂了。
12:06
没有这个,没有这个服务名称,我们看一下啊。嗯,这个不是很确定,可能是这个我写错了啊,没有没有get是吗?小B是吧。诶对,诶非常好啊,对block number大家看,只要这一一定要用ETH_block number就可以看到返回了正确的结果。JRPC2.0IDE result0x19,诶这个为什么好像跟咱们这边的那个不一样的啊,对你要求就是16进制的25对吧?对对对,好,所以这个就没有问题,所以大家可以看到我们这里的控制台发送这些命令的时候,大家可以想到这是一个Json,这是一个JS的一个接口。
13:03
那其实它的背后应该也就是发送了一串这样的这子对吧,这就是控制台,它肯定会做这件事情,把我们的JS调用的命令转换成对应的GRPC的命令去给到我们的客户端上面,所以我们可以看到这边的响应其实跟我们这边拿到的东西都是一样的。如果我们要是熟悉这个JRPC的话,甚至我们可以不用这个客户端的控制台,我们自己就每次发这个命令去调用,都可以把它所有的参数搞定,呃,但是当然我们一般不会这么去做啊,就控制台里面还是比较方便一些,JS的对象操作比较方便,我们每次都用客命令的话,这个就太痛苦了,大家感兴趣可以试试看,就是把这里面的每一个就是方法,或者说每一个操作,大家都看看能不能在这个对应的里面用,用G3RPC本地调用的方式去把它实现。
我来说两句