00:00
我们现在已经引入了一个我们的WEB3对象,呃,大家如果等一下吧,等一下就是大家中间休息的时候,大家如果有网的话,我建议大家可以就是在另外一个目录里边再去下载一个1.0版本的WEB3。然后我们同时可以去对比对比,因为之后就是如果大家之后就是已经学习完了之后,再去实际工作当中运用的时候,有可能那个时候就大家都用1.0.0了,现在的0.2几的这个版本可能就逐渐会被淘汰掉,所以我们现在学可能主要是0.2几之后的话,应该还是1.0.0为主啊。好,我们刚才已经讲到了。啊,我们讲完API了,对吧?好,接下来我们来说一下在这个WEB3里面的批处理请求,这个其实就是提一句就可以,大家如果呃感兴趣的话可以看一下,比如说这里边给大家一个例子,批处理请求,简单说的话就是我们把几个请求打包在一起。
01:17
然后把它一起提交,那它的执行是什么呢?其实他是会把我们的请求排个序。然后所谓的一起提交,只是我们的操作是一起提交,然后他执行的时候呢,其实就是串行,按照顺序一个一个执行,然后就是同步的这样执行的,所以说大家要注意一下,就是这个所谓的批量请求,它其实不会更快。所以事实上我们一般情况如果想要让它响应的更快的话,我们可能是需需要自己手动去做一些异步处理,这样反而会更快,那批量请求它更好的更重要的一个目的是在于保证我们的运行的顺序,就是如果说我们前面一步,比方说大家可能知道我们想要提交一个交易之前。
02:09
假如我们在盖里面提交一个交易,我们的账户如果没有被解锁的话,其实是不能提交的,对吧?大家遇到过这个问题吧,就unlock一个账户,所以我们很多时候可能就会就会想,那我是不是可以把这个打包在一起,对吧?我先去unlock unlock完了之后你再去做别的一些事情,再去转变啊,这也是一种方案。就是相当于是用一种同步的方案去解决我们的异步问题,大家可以看一下下面这个代码啊,我我们一起来跑一下吧,要不就是它的代码其实也很简单,就是我们直接WEB3里边有一个create batch的方法。它可以怎么样呢?我们这个create batch之后就可以ADD每一个请求,后面我们要发的这个操作都用一个ADD来加,添加在里边,然后最后一个execute就可以了。
03:06
呃,我觉得算了,这个下来之后大家自己试好了,因为这里边可能大家还不知道这里边里边的请求是什么意思,所以现在直接这么说的话,可能也没有太大用,大家只要知道它就是你建立了这个Bach之后,我艾特进来,然后XQ执行就完了,这有一点像,如果大家之前熟悉这个数据库操作的话,这有一点像那个CQ里边就是它,它可以让我们把这个就是好几条CQ排列出顺序来之后,然后打包一起提交去执行,对吧,有点像那个。所以大家如果对这种交易类的东西比较熟悉的话,就会发现它其实的处理思路是差不多的啊呃,然后我们再跟大家说一个就是需要注意的地方,这前面其实都是就是比较普遍的性的东西,需要注意的一些地方,后面是一些具体的API的应用,这一点需要注意的地方是什么呢?是在三里面的大树处理,这个是为什么有这么一说呢?是因为JS里边默认的数字精度其实是比较小的。
04:19
就比如说我们直接过来操作一下。在这儿是吧,No no的控制台,比如说我们这里边,呃,这样我我定义一个变量A啊,来一串数吧,我们现在看一下A是什么,大家能看到在JS里边控制台里边显示的这是一个科学计数法,对吧?那它的精度跟我们之前是一样的吗?这个科学计数法表示的就是三点这么多,然后末尾是3246乘以十的48次,对吧?应该是这个意思,是不是就是三后面得有48位,30,呃,48位数,那大家看到它的这个精度,其实保留的有效数字是不是只到这么多呢?这目测应该就十几位,对吧,对吧,大家可以数一下,看它能能保存多少,我这个看不太清楚,可能就是十。
05:27
56位的样子对吧,15位是吗。所以大家可以看到,这比我们前面敲的这40多将近50位数,比起来的话,精度明显就差了很多,所以我们如果要是在以太坊像这样的应用里面,我们知道那用伪这个数字的话,有可能会很大很大,那如果我们用JS默认的这个精度去处理大树,显然是不太不太好的一个选择。呃,它这么一科学计数法,它是科学了,我们的精东就都没了,所以在WEB3里边,它专门添加了一个依赖库,叫做big number。
06:11
这是我们在安装WEB3的时候,自动就会把这个库添加进来,大家如果就是感兴趣的话啊,我是出去之后可能就还得还得再看啊,我们再在这边出去看一下,呃,这边的目录应该是叫做0.2。好,我们进这个里边note modules里面来看一下,我们安装完WEB3之后,大家会发现我们可能只是安装了一个WEB3,但是它多了很多很多包,对吧,这个就有些可能并不是我们真正安装的东西,但是所有WEB3里边涉及到的依赖,它全会打包安装起来。
07:04
大家可以看到前面就有一个叫做big number的JS。那这个东西其实就是WE3里面默认的一个大数处理的一个工具,工具工具包,或者说一个库,那它主要的作用是什么呢?就是我们可以把这个所有的大树都转换成一个big number类型的对象,一个big number对象它的精度是非常的高的,是不会丢失的,那如果用它来处理我们的所有以太坊里面涉及到的数字,那基本上还是非常的保险的一件事情,不会出现问题。那对于所有的数值,我们在以太坊里边,就是在所有的WEB3相关的这种以太坊操作里边,我们应该把所有的数值在做数据处理的时候,最好都转换成big number。
08:01
这就是为了保证精度,那怎么保,怎么去转换呢?大家可以看啊,其实也很简单,就是直接,比方说我这里有一个数,有一个很大的一个一个数字,那我要转换的时候就是把它当成一个字符串。给到一个big number对象里面。给一个big number对象复复数值,那我直接可以new big number,然后加加进这一串。那下面用的时候怎么用呢?那那大家可以看到它加一个数,可以直接点plus,这是big number本身有这些加减乘除的运算方法的,后面只要to string,我们就可以直接把它。显示出来了,完整的显示出来。好,那我们看一下吧。嗯,大家可以看到就是啊,这number不需要我们起那个盖啊,但是我还是先切过去吧,我就直接copy了啊好,那我们在这里大家注意,我们可以随便定义一个balance,叫做new big number,在这里大家可能会发现可能会有问题,但大家觉得有问题吗?大家觉得我这么敲有问题吗?
09:32
我我这一句语法或者说别的地方有没有什么错误。好,我们看一下。哦,报错了,Big number is not DeFine,对,因为这是在node的环境里面,我们并没有require big number,对吧?你直接用这个肯定是不行的,所以呃,我们既然要用它,那我们就还是定义一下big number,大家注意啊,这个得跟我们这里的这个内裤名字要一样,对吧?Big number是小写的点JS。
10:16
再来看一下,诶,现在是on fun,它返回一个on fun,但是这个没关系啊,因为这个new的过程是一个是一个异步的一个过程,它没有返回值,我们看一下这个balance是什么吧。哎,再看是个这个东西,大家能看懂这个它显示的是什么意思吗?这其实我们之后在这个WEB3编程的过程当中,经常会遇到这样的数据类型啊,因为本身WEB3内置的就是用big number来处理大数的,给大家解释一下,这是一个big number类型的对象。它里边包含三部分,一个叫做S,一个叫E,一个叫C。
11:02
S表示一个符号,所以它其实就是正负号的意思,比如说我这里我在定义一个BALANCE2。我给一个负的这么多。大家来看一下BALANCE2,它的S就变成了负一,所以。一就代表正数,负一就代表负数,S就这么简单啊。那下面的E是什么呢?一大家可能已经有一点感觉,对,因为前面我们科学计数法里面就有一对吧,那我们来断定判定一下我们的想法,看看是不是这样啊,我后边加两位吧。然后看一下这个balance。诶,刚才37现在变39了,所以它就是位数对吧,如果大家愿意数的话,可以数一数,这个数应该就是40位的一个数。
12:05
呃,这个我没有详细数啊,但应该就是这样,就是它就代表我们科学计数法E后面乘的那个十的多少次幂,所以这两个都比较简单,S和E都比较简单,那C是什么东西呢?啊,C就是我们所有的数对吧,就是所有有效数字都在C这里,所以大家可以看到C并不是一个数,C是个数组。它的模式是什么呢?它是14位对切割一次,然后定义成我们这个数组里边的一个元素。每14位切割一次,从低位开始切起。高位的话,所以大家可以看到高位可能会少几个数,那它通过一个数组类型就把我们所有的有效数字全部囊括在内了。
13:01
就不会有精度上的缺失。好,所以这是big number这这样的一个处理啊,那大家如果说我我直接看这个big number,我这也看不清楚啊,它它的到底是什么东西呢?我们直接把它to string就可以了,调用它的to string方法,大家可以看到就会输出它的所有的有效数字,当然这还是一个。就是科学计数法显示的啊,就是后面E3939次对吧?啊,所以这是一个科学基数法的一个另外一种表达式,那大家说我我不想看科学计数法,我想直接处理这个数啊,能不能有别的方法呢?对to string的时候,你可以加一个它的转换的进制。就是balance,这就是本身big number,它定义的to string方法非常的强大啊,Two string10,这就是一个十进制,那有的同学可能说我就喜欢16进制,我还可你看16进制。
14:02
所以就是整个这个类库,为什么外B3把它内置在里面,确实是非趁用非常强大的一个东西啊,甚至大家想看可以看二进制啊。呃,大家可以自己玩一玩这个big number这些处理,另外要说的一句是big number啊,它的这个to string10这个东西对整数非常好使,但是对小数反而浮点型的数字,反而它的精度就缺失了,我们可以试一下,我们再好吧,重新定义一下,我们再定一个BALANCE3吧,你有一个big number,我们定义一个这么大的有敲到数字,谢谢,敲到字母,我们后面小数位多一点,好,这又是一个big number,我们看一下BALANCE3是个什么东西。
15:04
这种模式下,BALANCE3BIG number所有的有效位都是存进来的,对吧,大家看到,而且大家看到,呃,这个它是把这个整数和小数分开存储的是不是。对吧,整数和小数分开存储,这个如果我们看的不清楚的话,我们把前面位数再多一点啊,让它位数多一点好。三大家看整数到。09435对吧,前面两个是整数,后面是小数,那小数呢,他就开始从前往后14个,14个结了,最后不足的小数它全补。它是这样的一个写法,所以这个精度是没问题的,本身big number它的精度是没问题的,但是大家可能会发现,我如果习惯用这个to string的话,我还用to string10,这个可能就会有点问题,大家会发现它后面的小数位就少了。
16:08
所以如果是大家用这个土斯STRING10BIG number的to斯STRING10方法的话,它对小数肉是只保留20位的浮点精度的,这个大家需要注意一下。所以我们平常如果大家说,呃,当然了,大家如果要是用科学计数法的话,它是全能显示出来的,但是如果大家还想用十进制这样直观的显示,那就会有进度缺失,所以我们比较推荐大家的一个做法,还是就是因为我们处理的一般还是以太坊里面的数字嘛,那主要就是用伪做单位,你如果用以太做单位的话,那可能小数位很长,但是用伪做单位的话,那就一定是一个大整数。所以比较推荐的方法,我们永远用一个大整数去表示我们内部的这些余额,这些数字我们最好不要用浮点型,那这样的话用big number去做处理的时候就是没有任何问题的,我们实际制也非常好的转换,那只有在需要给用户看的时候,我们再给他转换一下,再给它,就是把这个维转换成仪态就可以了。
17:14
这就是这一部分内容了。
我来说两句