00:00
大家可以看到我们接下来这个项目名称是基于token的投票,所以大家可以看到它首先是在我们之前简单投票的基础上又加入了token的概念,那这个token在投票里边到底要怎么样来用呢?呃,这个一开始我们先把这个放一放,大家可以先先去思考一下,就是这个加入脱之后到底是要干什么,那我们现在先不讲这个产品相关的东西,我们先熟悉一下插,所以大家可以看到这是我们这个继续投肯投票的第一部分,也就是说用trouble来构建简单投票,所以这一部分里边可能我们的合约没什么新奇的地方,我们主要是拿它作为一个例子来熟悉。好,那么我们看一下啊,接下来的这个学习当中,我们首先看一下这个大纲,接下来我们要做什么呢?首先我们安装这样一个D的开发框架,它会被用于编译和部署我们的合约,然后呢,第二步就是我们在安装完窗口之后,那第二步我们就是在之前写完的简单投票D上面做一些小的更改。
01:14
来适适配一下窗,就是在trouble里边把这个简单投票玩起来,跑起来啊,第三步当然就是要在trouble里边去编译合约,然后把它部署到我们的测试思链上面啊,就是我们在这个过程当中是用自己本地的一个思链来作为例子来部署的,当然大家如果要是大家如果愿意的话,也可以起起这个测试网络,连连到测试网络上,甚至可以连着,呃,我们只要是大家自己有钱想去发送一下这个测试一下也是可以的,对吧?第四步就是我们会通过插的控制台去跟合约进行交互,插口也是有一个控制台的,当然对于我们之前已经熟悉了,S的控制台也熟悉了,就是起一个node,然后直接。
02:02
实例化一个WEB3实例对吧,然后去去跟我们的节点以太网节点进行交互,大家熟悉了这些控制台操作之后,这窗口控制台就非常简单啊,就基本上是一样的,然后还有就是我们要把网页做出来,我们的HTMLJS照样要要写好,然后用网页跟合约进行交互,所以这样的四步做完,我们基本上就可以说是完成了,用基于travel搭建一个基本的D项目,所以这篇文章里面我们主要做的就是一到四这四步。所以就相当于我们是先把这个之前的简单投票在插跑上先跑一遍,然后呢,我们要做的事事情是什么呢?就是把之前的合约进行扩展,我们真正要去分析一下加入token之后的投票到底要做什么事情,这个产品做一个分析,然后把合约做一个扩充和完善,我们把合约要写的更复杂,然后最后我们的前端合约扩充了之后,我们的前端肯定也要扩充很多功能,我们要添加进去,所以说我们的HTML和JS也要进行一个一个更新和完善,所以最后我们会实现一个完整的一个页面,大家在上面可以看到,就是我们怎么样啊,这里边已经说了,就是大概要做什么事情啊,就是我们可能需要在网页上,需要在从前端可以购买token。
03:39
让用户可以购买token,然后用token基于token去为候选者投票,所以就不是我们之前所说的一人一票这种模式了,对吧?那当然这个就产品的相关功能我们后续再说,呃,当然同样这一个项目里边,因为我们主要还不是在玩玩转前端的相关的东西,所以就是最好的这个CSS啊,就是页面的这个设计和和这个长什么样,可能不会那么好看,大家如果想要完善的话,呃,下来之后大家再去手写CSS,把它页面布局调一调,对吧?我们只管那个实现前后端的功能,这个先跟大家说一下啊,所以整体来讲,这就是我们接接下来要做的事情。
04:23
好,那首先我们看一下我们这个D的一个流程图啊,把这个缩小一点。能看到这个图的全貌,好,我们这个DF的整个的这个框架,这个结构图,其实大家应该也很熟悉了,对吧?这个就是大家可以看到整体来讲,我们下面的这个虚线框里边的这一部分,就是我们完整的投票VO voting d APP的这个全貌,那么它里边包括什么内容呢?它里边包括下边就是我们的这个区块链的部分,大家看到一个block接一个block,对吧?啊,上面有这个以太坊的虚拟机EVM整个的这呃,当然它这里边列出来的是我们需要部署到测试网络上去,那我们在这里边介绍的话,可能还是基于我们本地本地四列。
05:15
呃,大家可以看到,有了这个区块链,我们首先起了这个以太坊节点,连接到区块链上之后,我们真正要开发的部分,我们要跟他交互的部分是什么呢?啊,一部分是这个note JS这里的这个控制台,对吧,我们会用WEB3去跟他做一个交互,有接口去跟他做这次RPC的通信。另外一端,我们会在前端用JSHTMLCSSJS,他们是我们的web前端对吧,所以会用他们也是同样用WEB3的接口去跟区块链去做一个交互,所以这两种交互方式大家就可以看到我们人在操作的时候是怎么操作呢。
06:01
那node这一部分,控制台的这部分操作,我们就直接是命令行了,对吧?命令行里面去做交互,另外一部分是web browser交互,也就是我们真正要把网页构建出来,真正真正在浏览器里面去做交互。所以接下来的内容里面大家也可以看到,首先我们写合约,部署到区块链上,把这一部分做完,呃,当然了,对,最一开始我们肯定是先把这个节点要起起来,对吧,环境要先配好,然后我们是写合约。然后编译部署放到区块链上去,接下来要做什么呢?我们可能用这个控制台,先做一个基本的单元测试,或者说交互式的测试,去跟我们的合约做一个交互,先走这条流程,然后我们去写HTMLJS,我们构建起一个外部应用,我们从浏览器去访问我们的合约,然后调用合约去发布我们的命令。所以当然他们内部的这个就是通信的方式,其实都是JRPC,对吧?
07:08
大家先这个图先有一个直观的印象,脑子里边先知道我们要做什么,好,这是这一部分啊,接下来就是准备工作了,准备工作这这一部分我们就是用盖先起一个撕链,可以用来连接到以太网网络,那我们用之前的方法先把自己的丝链搭好,如果我们之前搭好的那个还在的话,那我们直接提起来就可以了,对吧?那启动丝链的方法,这个命令我在这里是详细的写了这么一条命令,大家可以看到这个命令就似乎是很复杂,对吧?那这个里边先给大家解析一下,这个里边到底是说的是什么对吧?大家一个一个看啊,No HUB这个啊,当然这个是说就是我们的这个空产里不要挂起,对吧?大家如果要是在自己的虚拟机上的话,可能这个也不需要。如果要,呃,如果是在自己的云服务器上的话,这个可能也不需要,但是我这里连接自己虚拟机的时候,可能需要敲这个命令啊,呃,就是自己退出这个控制台的时候,不要让它这个进程给挂起,好那接下来是我们的GA命令,GA杠杠,Data DR,这个大家还记得是什么吗?记得对吧?对,这个就是指定我们区块链数据的存储目录,后面的点就是当前目录对吧?
08:28
大家这里要注意,之前我们如果说大家在一个地方是已经配好了丝链,已经起过的话,那大家当时启动的时候指定的这个data DR下面其实是有数据的,对吧?就会生成一个叫做gas的文件夹,然后下面大家可以看到会有我们各种各样的数据存在,里面包括kiss,包括data的一些数据,呃,还包括love,那那么大家注意,如果我们还想起一个相同的丝链的话,大家还想用之前的那个丝链的话,一定这个data塔D要指定成同样的。
09:06
因为你如果指定到另外一个空的目录下面,或者说没有我们之前盖目录的另外一个新目录的话,它相当于找不到我们之前的头文件,所以它默认还是要从其他的节点那里去下载区块啊,但是当然了,我们知道自己的S店别人那里肯定是没有的,下不到的,所以这个时候自己本地数据相汇装,呃,所以大家稍微注意一下,就是一定要跟我们之前配的那个四链的数据目录是一样的。好接下来那大家这个都知道杠杠network和ID,呃,这个大家知道,就是当时自己在je Jason里边初始化的那个网络ID是什么,我们就就给什么,对吧?后面刚刚RPC大家还记得吗?这个是要启用HTTPRPC这个服务,对吧?相当于我们开启刚刚RPC的时候,就会在本地起一个HTPRPC的。
10:07
服务器。所以大家肯定还记得,一开始我们没指定这个的时候,在外面用WEB3去直接连连不上啊,就是这个没开启啊,然后杠杠RPCAPI这个大家还记不记得。对,指定HTPRPC这个开放了服务器之后,指定外部访问可以访问哪些接口对吧?哪些模块的接口大家还记得,就是我们之前如果要没有指定这个的话就会发现,比如说在外部如果去调用的时候,有些模块就不能用,比方说personal默认它是不开的,我们在guess的控制台里边可以访问,但是在noe里边就访问不了,对吧?所以大家注意这里是要把这个全部打开的。当然大家还得注意,就是有些同学,呃,当时试的时候就发现刚刚RRPCAPI,然后后面直接只用了一个personal,然后发现note控制台里面连连这个EETH都访问不了了,对吧,都都没有这个对象了,所以大家注意,就是默认RPCAPI开放的是有ETH net这几个接口的,但是如果大家这里要指定的话,就得把它们全指定出来,因为如果这里指定的话,默认。
11:21
就没有那些,就是大家必须是显示指定的这些才有才会加载,没有指定的它就不开放,那后面这个rpc po,这大家知道8545,这里是显示的写出来了,如果不显示的写出来默认也是8545对吧,那大家如果要是本地起了好几个端口,或者这个端口已经被调用的话,自己可以改一下,另外就是杠杠rpcddr address对吧,这是我们指定的本地主机地址。所以我们默认这里127.0.1,这其实是默认值,这里显示的定义出来,其实也就是说local ho对吧?啊,那大家如果要是自己用到了云服务器的同学,这个主机地址就得改了,对吧,是在外部要访问的那个地址,这这些大家用云服用云服务器的同学肯定这个都已经很熟了啊,其他没有用云服务器,用云服务器,云服务器的同学,大家可能自己稍微注意一下这个参数,就是之后如果自己在配的时候,呃,可能直接你每次都都认为是local host肯定是不行的。
12:30
后面这个参数大家还有印象吗?我们之前其实也写过一次,对吧?对,这个是rpc Co domain,这是跨域的一个配置,所以它是指定什么呢?它是指定说允许跨域请求的一个地址列表,我们后边直接如果指定芯的话,那就是所有所有的请求都可以允许,大家如果之后在这个生产环境里面,肯定这个不可能所有的都都开放,对吧?出于安全性的考虑,大家后面会指定一串地址,那这个到时候就是把地址放在后边用逗号隔开。
13:04
就是这样的一一串参数啊,当然后边这个参数就是我们要把这个log输出对吧,输出到这个文件里面,然后后边这个呢,就是在后台静默去调用。不要在我们前台把这个BA这个这个shell环境给设计好,那我们先启动一下吧。我在这里给大家。还是启一下啊,我这里是我曾经启动过的这个思链的一个环境,所以我们现在还是在这里边去做一个启动,No HUB gas,杠杠data DR本地启动,因为我这里就有这个gas和keyto这个文件夹,对吧?看到这个GA下面就是我们所有的文件啊,所有的数据文件,杠杠network ID我指定的是15,所以我还是放在这里,杠杠RPC,杠杠rpca API我们要指定的可能很多,对吧?DB用逗号隔开,ETH这里好像还指定了web,然后net amin,大家能想到的其实都可以写上去啊,Personal minor,当然如果要是大家实际生产环境里边,出于这个安全考虑,大家肯定是你需要什么写什么,不要把它都放上去,对吧?
14:27
比如说这里这个minor,这个挖矿,这个其实正常来讲其实是不应该开放的,我们只是为了方便这个开启,所以在这里面把它也写进去,好,那后边大家记得还有RPC,呃,Port对吧们尽管是默认的,我们也写上去,杠杠RPC还有什么地址127.0.0.1,还有号都没芯好,那么大家可以看到这样的话,我们就用后台静快启动的方式启动了,我们这个一个一个GA对吧,大家可以看到这个PID,哎,好像已经退出来了是吧。
15:20
可能是有某一个命令出错了啊,看一下这个log。哦,这个我我已经起了对吧?呃,所以呃,所以我这里边其实是已经起了一个这个这个GA,所以大家可以看到这个PID,这这是47对吧?那如果大家要想把它干掉的话,那就是直接Q就可以对吧?好,我已经把它Q掉之后,然后重新再启一下,我看应该是能正常启动的才对,看一下这个好大家看到如果在OUTPUT2LOVE里边能看到这样一个正常启动信息,这就没问题了,对吧?好,大家应该还记得我们之前怎么样在进到控制台里面还记得吗?杠杠和Tech对吧?来回顾一下之前可能想过的,大家忘记了local host8545。
16:23
那这样就进到了我们大家熟悉的,如果大家一开始启动是用guest cons的话,进到就是这里对吧?对,这个就相当于我们是静默在后台启动,大家之前印象应该有印象就是GA pencil so进来的时时候,假如我FCI1退出去,是不是整个这个节点就相当于关掉了,所以我们现在就就不用那么就是那么费事儿,每次都得重新退出去,重新启动,我们这里已经启动了之后想进去的时候get get attach进去看一下,看一下现在的这个block number啊,已经到809了,所以大家可以看,就是我这里的这个,呃,这个正常已经是连接到我之前的这个状态了,对吧?好,那么我先退出来啊,现在有什么必要用,好继续往后说,这是我们的环境,呃,注意一下啊,这里就是咱们课程里面提到的一些概念,会提到比方说以太坊节点note,比方说会提到guess客户端。
17:22
有些时候可能还会提到区块链软件。或者叫区块链客户端,区块链软件,或者提到区块链服务器blocking server,或者是叫客户端,其实绝大多数情况下指的都是同一个事情,也就是说我们所说的这个guess,有时候会把它叫成是节点,那大家可以知道以太坊节点的话,如果把它叫成node的话,这个概念是什么意思?我们的guess如果认为它是一个node的话,这是一个什么意思?嗯,是一个什么意思?如果它是一个node的话,我们是认为他是在以太坊的p two p网络当中的一个一个角色,对吧?就是跟别人要去相互连接的时候,启动的监听端口是30303,大家还记得吗?它会在我们本地起一个监听接口,监听接端口30303,这个端口就是所有的node之间彼此发现和监听访问的这样的一个端口。所以从这个角度去说的话,我们在以太网的p two p网络当中一个guess客户端系起来,他的角色就是一个node,一个节点,那他跟别人之间有时候就会这个关系,叫做per,对吧?Perno,那guess呢,是平平常我们用的这个软件了,对吧?直接提起来这个东西就叫guess,这个大家都熟悉,然后。
18:54
过平常有时候有些地方文章里面会把它叫做区块链软件,这个大家看到的话,这个不常见啊,但是如果看到也可以知道它说的其实就是这个意思,那另外它还有一个名称,大家知道叫做客户端client,对吧,那这个client是是什么意思呢?Client这里说的其实指的就是说我们的GA是我们自己在本地。
19:23
和以太坊网络交互的一个媒介,一个一个入口。所以大家能能想到有客户端,那就应该有服务器嘛,那对于以太坊系统而言,服务器是什么?服务器其实就是整个以太坊网络对吧,因为它是一个世界计算机嘛,所以对于这个世界计算机把它当成服务器,我们想要访问它上面的数据的时候,访问区块链上数据的时候,这个时候我们用GA去访问,GA就是一个客户端。我们启动一个gas cons对吧,一个控制台,我们其实就是启动了这个客户端的一个控制控制台,利用它我们就可以访问,呃,Block number啊,发送交易啊,就可以跟区块链进行交互,所以这是所谓客户端的一个概念,那这里边怎么还会有一个服务器的概念呢?他怎么可能又是客户端又是服务器呢?这是个什么玩意儿?
20:24
啊,这个这个大家知道是什么意思吗?哎,对,大家想到我们启动了这个GA客户端之后,它还起了一个本地的8545端口,对吧?那这个是不是他又给别人提供了一个访问服务,所以我们在别的地方可以直接访问这里的8545端口,通过它来去访问以太坊区块链,所以相当于在我们的这个GA里边还起了一个外部服务器啊对,当然这个不是web服务器啊,它是一个HHTPRPC的服务器,对吧?就是我们的8545,这是一个HTPRPC的服务器,所以它给我们外部还提供了这样的一个访问服务。
21:10
所以对于我们外部来说,假如我们在插里边去访问,假如我们在note里面去访问,假如我们在浏览器里面去访问,访问到它,那它其实就是一个服务器,对吧,就是一个sir啊,所以这里面的这个几个概念给大家稍微的介绍一下,有时候我们说到它的时候会说它是,诶,它是服务器,我们在浏览器里边要连接到我们的区块链服务器,大家在ma mask里边可以选logo host8545,对吧?那对于ma mask来说,我们的这个节点就是个服务器,但是对于整个以太坊的这个区块链来说呢,它又是一个客户端,我们起的一个GA客户端,能够在pencil里面去直接交互,而对于以太坊的这个p twot网络里面,它又是一个节点。通过303端口去跟其他节点做节点发现和监听啊,大家把这些概念就是理清楚,因为这是一个比较庞大的一个一个系统,就是杂糅了各方面的知识在里面,呃,有时候大家去看一些技术文章或者一些教程的时候,可能也会发现他们用的术语不一样。
22:16
有时候叫客户端,有时候叫server,叫区块链服务器,有时候可能说这是一个load,是一个节点啊,大家知道它其实都是一回事,但是他们是一回事,但是一回事里边它分了不同的功能,对吧,这是不同的功能模块。
我来说两句