00:00
我们有了solidity,用solidity去写智能合约的原文件,然后我们知道它可以编译部署到区块链上。那我们从外界到底去怎么调它呢?难道我们每一次都在我们的gas控控制台里边去敲那么一长串命令去调用吗?这个肯定是不方便的,如果我们想要构建自己的DAPP,想要构建自己的应用,我们肯定是需要有别的接口,而我们现在之前也给大家介绍过了,最方便的一个应用接口就是JS型,那这一组接口相当于形成了一个官方的接口库,这个库就叫做Y3。所以呃,我们的计划大概是这样啊,就是今天主要就是介绍WEB3,然后下午可能我们争取就是用WEB3多做一些实际的练习,跟大家一起去写几个简单的脚本,比如说我们可以自己写一个呃,自动转账的脚本,我们只要调用自己这个脚本就可以给别人发币。
01:07
然后我们可能还会试图去写,比方说我们自己去部署一个自己的子货币,我们之前不是写过这样的合约吗?我们把它布到区块链上去之后,我们怎么样调用我们自己的脚本?来控制我们的合约,去发币,发我们自己的子货币,就不光是以太了,对吧?呃,所以我们希望今天能够跟大家就是有这样一个概念,就是我们怎么样能把合约用起来,呃,这是我们今天的一个目的,好,然后大家应该人事都到了是吧,有一个请假哦,有人请假了是吧,有些同学请假了。哦好行,呃,所以我们今天这一部分内容可能就是不是很难,但是呢,它就是因为接口嘛,大家可能知道,就是需要实际去用,大家多多玩一玩,多用一用,可能就会有更多的了解,然后在今天内容开始之前,我先问一下大家,上一次我们让大家装那个so。
02:13
就是我们命令行的一个编译器,大家都装上了,装了都装了是吧?C装呃什么呃,就是那个C的它的那个client命令命令行是吧,什么杠G哦,就是把它全局安装是吧?对,只要装了so就可以,然后大家。我们在这里,呃,可以不装,大家如果想装的话。就是可能会跟我这边会不太一样,比如说大家可以看一下啊,应该。大家装完了之后,应该能看到他的版本的,对吧,刚刚我啊。
03:05
我这边的版本是0.4.25,就是我们平常在remix上面经常用的这个编译器版本,大家装完了之后可以看一下自己能不能看到它的这个版本。大家注意一下,就是如果当时大家装的时候啊,是直接用的这个命令,用这个命令装的话,就是nb n PM install,杠GSO用这个装。装出来之后,大家可能不能直接敲这个so命令,大家可能是需要敲drop,呃,SOSOGS的,大家注意一下,看一下你那边是用什么样的命令可以敲出来,就是你要不就JS刚刚version看这个版本跟你一样的S哦呃,大家是SS是吧?S哦,对,因为就是默认安装之后,应该它的命令调用是S的,可执行文件的名称是GS,而且装这东西的话应该要到,还有什么就是要切到,如果是的话,CNCNPM,就是那淘宝那一个C,哦哦,就是你要切换源是吧?呃,其实这个就是大家看网络情况,我当时是没有切换源,直接就就能装好的,当然咱们这边可能网络状况不太好的话,可能需要再配一下源,其他同学都装好了吧。
04:33
就确认一下。然后我跟大家说一下,是我这边之后敲,就是编译命令的时候直接就是so,因为我这边是相当于自己配了一个软链接的,我觉得GS太麻烦了,大家如果要是想要跟我这边操作完全一样的话,就也可以自己去配一下。那如果说大家觉得没什么,大家知道是怎么回事,那大家平常我敲so的时候,大家敲soft GS就可以了,这个大家知道就行了啊好,这是我们之前要装的这个,因为接下来我们可能就会用到了,好,那我们就正式开始我们今天要讲的这一部分内容吧。
05:17
今天我们要讲WEB3GS,首先WEB3GS是个什么东西呢?我们前面已经说过了,它是一个javascript的API库,就是简单说它就是让我们做接口调用来用的,而且它是用GS实现的,我们可以很方便的用JS来调用它的接口。我们如果想要开发D,想要开发出来D,在以太坊上正常的运行,调用我们的合约,那我们最方便的一种方法。到目前为止,最方便的一种方法就是直接用WEB3GS的库,它会给我们提供一个WEB3对象。好,那它基本底层的原理呢,就是我们前面讲过的RPC调用,所谓的远程过程调用,它其实就是说会连到一个以太坊节点上,然后用RPC的方式,一般是RPC的方式去跟连接上这个节点通信。
06:20
只要是暴露了RPC层的以太网节点,它都可以去连,就用这一个WEB3GS这一套接口都可以去连,这是标准的接口。那WEB3里边包含什么东西呢?它里边最主要的一个东西就是ETH对象。那这个对象里边其实就是在之前,其实在控制台里边已经看到过,因为我们的GA console控制台里边其实就是内嵌了一个WEB3对象的,对吧,所以在里边大家已经看到里边的ETH可以做很多的事情,比如说我们去,呃,查询区块信息啊,查询交易啊,发送交易啊,什么东西都能做,当时我们可能只是简单的给大家讲了几个命令。
07:07
那今天我们就会详细的把WEB3接口的一些标准都给大家再说一遍啊,其实之前的guest pencil命令如果大家都玩的很熟的话,今天大家可能就会觉得非常简单啊,呃,另外就是WEB3里边,WEB3是个非常庞大的东西,它除了ETH之外还包括SHSH对象,那SSH这个对对象,它其实主要是就是用于跟whisper交互的,Whisper是个什么东西呢?它whisper这个这个英文应该是叫悄悄话对吧,低语,所以它其实是整个以太坊这个生态系统的一部分,主要是用来做消息传递的。给大家可以理解成他他似乎就是想实现一个这种,呃,实时通讯的这样的一个一个功能,尽管跟我们现在大家所用的这个客户端guess,它是就是它主要的内容可能不太一样,就我们所谓的以太坊跟区块链交互的这一部分,它所实现的内容不太一样,所以我们平常可以不用它,我们这儿不做专门介绍,但是大家可以就是知道一下,这是以太坊里边很重要的一部分,另外除了whisper之外,以太坊里边还有一个组件叫SW。
08:22
不知道大家听说过没有啊,是一个分布式存储的,一一个就是以太网上的一个组件,所以呃,大家如果对IPFS有了解的话,可以认为索网就是以太坊整个生态系统里边基于以太坊原生的一个IPFS,大家可以这么理解,尽管它可能不太一样,好,这个。我这个MYQ应该是设了定时的,早上九点每天在更新,好呃,那么大家说到这里的话,我们其实就可以回到我们的控制台里面去先看一下,就是大家在回回忆一下我们之前跟大家说过的这个WEB3对象里边是什么样的,那大家打开我们之前。
09:11
曾经搭建好的丝链那个目录,我们进到丝链里边起一个丝链看一下,大家还记得命令吧,刚刚对DR对吧,来个ID。啊。好,那现在大家可以看一下啊,我们在这个里边其实直接就是有一个WEB3对象,那这个WEB3对象确实是非常庞大,我们敲完了之后,它有这么多东西,对吧,当时我们是很简单的过了一下,那现在就可以跟大家再详细的说一下,就是比如说像这个BCZ。BZZ这个组件就是前面我们说到的跟SWM相关的一些一些组件的这些对象。
10:06
然后下边这个DB是操作我们整个区块链底层数据库的,大家可能知道整个以太坊的底层数据库就是level DB给Google出的那个。KBA数据库level DB,所以他是提供了直接对数据库的操作的。那另外前面我们还提到最重要的ETH,这也是我们都很熟悉的啊,里边有很多操作应该大家都都已经很熟了,还有就是我们前面说到有一个SH,这就是跟whisper相关的一些组件,好大概的先就是了解一下。接下来我们会。讲一些更加就是基础和底层的东西啊,首先我们要用WEB3,那我们知道在GA conso里面,控制台里边它是内嵌了一个WEB3的,那我们自己想要在自己的项目里边用一个WE3的话,那肯定本身是没有的,那我们需要安装,我们怎么去安装呢?我们可以用也是很简单的一个n PM store in install的命令,N PM install web3。
11:18
就可以了,那当然我后面还加了一个版本。这个版本是0.20.1,呃,为什么要加这个版本呢?可以跟大家解释一下,就是如果大家直接敲n PM install web3的话,应该现在能够安装到的最新版本是1.0.0的贝塔版。因为贝塔版现在可能还不是特别的稳定,所以正常的就是我们在连接的时候,可能更多的用的还是就是0.20的这个版本,然后大家可能也是会看到很多包括文章,包括教材里边,他用到的可能也是0.20的版本,所以我们这一次跟大家介绍的时候,也还是以0.20作为一个标准,我们先以这个作为标准来讲。
12:07
那跟1.0.0,如果有哪些地方有区别的话,也会跟大家提一句,就之后我们做项目,接下来的几个项目可能主要是0.220.1,以它作为作为标准来用,最后一个项目我们到时候看看,就是如果可以的话,我们把它调成调成1.0.0。我们用一个新版本的,大家都熟悉一下,因为之后肯定是会切到1.0.0的,对吧,呃,那这个。呃,大家现在要不先装一下吧,因为我怕到时候那个又会出现各种各样网络的问题,全局装可以全局装,但是我其实现在建议大家可以就是就是根据我们的项目来,因为之后有可能我们会切换它的版本。全居装的话,可能等到我们要切1.0.0的时候就会有一些问题,所以我们现在这样吧,大家可以跟着我一起做一下,不知道我们的网络现在怎么样啊。
13:07
好,这边启动先退掉啊。好,我们现在大家,呃,怎么了,可以是吗?呃,这样啊,我现在大家找一个自己的工作目录,然后新建一个文件夹,比方说我现在就是新建一个叫做web test的一个文件夹。然后我进入到web test里边,大家一般如果要是在自己当前的目录去去管理,就是自己的项目,用NPM管理自己项目,一般怎么去管理呢?一般这样啊。
14:04
我们NPM一下。这就相当于啊,当然这这里要回车输很多东西啊,大家如果要是就是嫌麻烦的话,也可以直接杠怪,应该就可以跳过这些步骤,先初始化一下,大家看到下面就生成了一个package JA文件,所以在我们这个目录下面已经可以用NPM工具来帮我们做包管理了,那接下来我们就可以n PM install web3。呃,我这里的版本是0.20.1对吧?呃,我这里可以加一个参数,参数啊,大家可以加也可以不加,就比方说我刚杠C的话,就是把它加到我本地这个package Jason的就是开发环境依赖依赖里面去,就是所谓的这个DV,呃,Dependency。
15:04
加到这个里面去,所以大家可以看一下。不知道我们的网络给不给力啊?啊。哦,这个看起来好像会有点慢。这个可能会比较慢,那我这里就先先把它停掉了,大家可以先试着安装一下,如果要是非常慢的话,也可以就是尝试去用自己热点啊,或者是别的东西弄一下,这个如果不装上的话,确实之后咱们的这个很多命令没有办法随时的测。可能会有一点问题,我这边已经有已经装有装好的,所以我就直接切到这样一个目录来就好了,比方说我这个0.2X点零这个目录下面这是已经装好的,我可以到这个not module下面,大家可以看到这个WEB3是已经装好的啊。
16:06
本身外三里边它是包含很多组件的,大家可以。装,装完的时候可以看到它里面有很多东西。我这里面的版本是0.20.1,大家可以先先装一下。咱应该已经建好目录在装了,对吧。如果就是网络还凑合的话,大家就可以让他先放着,先慢慢装,然后我们先继续讲一讲,就是其他的一些理论性的东西。怎么样,大家都在装着了吧,哦哦,这么快很给力啊对,如果网络好的话,其实这个是很快的淘宝哦,淘宝镜像非常快,你可以跟大家分享一下你的那个镜像,让大家加到原理哦,好,那我们继续来看,就是剩下的一些这些理论性的东西啊。
17:11
大家可以看到,就是当我们安装好WEB3之后。我们如果要去用一个。就是把我们的WEB3要用起来的时候呢,必须在我们的程序里边创建一个WEB3实例,然后需要去设置一个叫做provider的东西。那providers大家可以理解,他是个什么东西呢?就是提供者,或者很多地方的提供商,供应商是用provider这个词的,所以大家可以理解成它是我们的一个服务的提供者,也就是说如果我们本地起了一个以太坊节点的话。那我们就要用这个以太坊节点来给我们提供相关的接口服务,所以大家可以想到我们提供provider,那应该是提供什么呢?它只要开放了。
18:09
就是暴露了这个RPRPC层的这个就是这些接口调用,那么它开放了8545端口,我们就可以直接连到他的8545端口上去访问,对吧?那应该以前有一点这样的印象,所以我们在这里所谓的provider,其实也就是我们的以太坊节点开放出来允许我们访问的那一个URL,包括端口。所以大家可以看,就是下边我们这个provider是怎么写的啊,这里写了一句叫WEB3等于new一个WEB3,然后当然这里边一长串啊,大家可以先不管它这一长串什么意思,主要就看后面主要它提供的是一个什么东西呢?一个HTTP的provider,然后它里面具体的内容是什么。就是把它括起来,引号http local host 8545。
19:04
所以实际上我们所谓的provider这个提供商服务的提供者,就是我们本地的以太坊节点开放出来的那个8545端口。大家可以看到,就是大概这个是做什么事情啊,然后前面呃,整个这一块,他说的是一个什么事情呢,他是说我们的mamas。本身它是会为我们内嵌创建一个WEB3对象的。他创建的WEB3对象在我们打开浏览器的时候,就包括我们打开remix或者是其他的一些页面上的时候,他就直接会把这个B3对象注入到我们的浏览器全局的环境里面去。所以我们如果这里给大家看一下啊,看一下浏览器。呃,大家应该知道,如果我们I f12的话,我们是可以打开这个开发者控制台的,对吧,那大家可以看到,如果我们在这里输入一个WEB3。
20:04
好,大家可以看到这个WEB30NOT DeFine啊,我们看一下是不是我没有登录,诶已经登录。大家看这个里边其实是。这里面都已经定义了,这个web三都可以找得到。但是可能这里。这个VM我之前的这个mad max登录的时候没有敢刷新,因为我们这个remix里边没有去下载编译器的话,我会比较麻烦,大家可以自己试一下啊,看看自己的浏览器里边有没有WEB3这个对象,我这我这里边就不再去刷新去去加载这个ma mask了。大家可以看一下自己那边有没有这个外对象啊,就正常的状况下,如果我们可以调用mama的话。大家的浏览器里边应该是内嵌入一个WE3对象,这其实就是我们这里所说的创建出来的一个WEB3实例,当然在我们用remix的时候,用mama的时候,那是mamak直接就帮我们做了这件事情了,或者我们用remix的时候,大家也注意到可以在wrong这一步的时候,在这里去选这个环境,对吧?
21:24
那他可以去选内嵌的这个WEB3,也可以自己去去选这个WEB3PROVIDER,那这个是什么意思呢?那如果我们切换到这个WEB3PROVIDER,其实就是要去自己去选择指定我们提供一个就是能创建WEB3对象的一个服务提供者,那这里其实大家就可以把我们之前已经接触过的各种各样的工具,各种各样的环境,现在全部杂糅到一起,有一个统一的印象和概念,所以我们在这里就看到,如果说我们不去检测我们当前的环境的话。
22:04
我们在程序里边直接上来就强制要求这个WEB3对象,我们新建一个WEB3对象,然后让他就是他的provider指定成是local host8545的话,那有可能ma mask已经设置好的那个东西就不起作用了。所以一般情况下,如果呃,就是别人如果想要用我们的这个开发出来的DF的话,他很有可能就是在浏览器环境里面装了ma mask,然后用我们的DF,那用的时候呢,他肯定就是用ma MAS管理自己的账号。他如果出现需要去付款,需要去提交交易的时候,肯定应该是由ma ma那边弹出框来让他确认,那所以说我们其实是需要检测它的ma mask里面到底是不是已经有了这个provider,所以大家看就是为了保证ma MAS设置好的这个provider不被覆盖掉,不被我们在程序里边手动的这个覆盖掉,所以一般情况程序里边是要有这样一个环境检查的过程的,所以大家看到它的写法是什么,就是如果type of web3。
23:14
不等于UN DeFine,也就是说,假如WEB3在我们当前的浏览器环境里边已经定义了,它已经存在,那我就直接用当前的current provider。那如果说他要是不存在呢,下面我们就自己去创建一个这样的provider。啊,简单说就是这样啊。
我来说两句