00:00
我们还有一部分没有给大家说,就是最后的这一部分总结,大家会发现在之前我们为了便于部署和测试,其实我们的以太坊节点用的都是galash对吧?啊,那galash这样一个呃节点呢,它的特点就是方便启启动,而且就是每一次我们启动都是一个非常干净的一个测试环境,所以说特别方便我们开发测试,呃,当然大家如果习惯有同学如如果习惯用呃超develop的话也是一样的,对吧?因为它内置了一个,所以大家会发现这样一个以太坊节点呢,我们开发是很方便,但是它跟真实的测试环境和生产环境明显还是不一样的。啊,所以大家应该也记得我们之前给大家讲过,就是工作流的三步,应该是开发阶段是放在本地的这个,呃,该纳或者是travel develop上面对吧?呃,或者大家可以起一个自己的思链,对不对?然后测试阶段,我们就应该把这样的一个以太网节点迁移到测试网络当中去,啊,就是这里给大家提到的ROS riy,或者是扣文,所以。
01:14
当大家真正把自己的DP已经做完的时候,那合约其实是肯定是要往测试网络上签的,对吧?啊,所以在这里我们不去跟大家做这样的一个一个工作,一个动作,但是大家已经明确这样一个工作流程就好,那当然了,最后一步,这是就是正式的上线测试的阶段,那最后真正的发布真正的上线应用,那肯定就还要迁移到主网,对吧?啊,那那个时候就已经是真金白银,我们所有的手续费都是真正要画以太的,所以在上线主网之前,我们一定要在测试网上面把这一个就是测试的完善一些,测试完整对吧?好,那么大家可以看到,就是我们这里边给大家提出了就是两点主要的步骤,什么步骤呢?其实主要的一个就是说,我们如果要往测试网络上去迁移,那你首先得保证有一个可用的测试网全全节点,对吧,所以。
02:14
你要不是用GA,要不是用parity,我们要起一个客户端,那这样一个客户端,呃,我们如果想要拿它去跟测试网络真正通信的话,你得保证它是一个完全同步的状态啊,所以就是你即使不是全节点也得是快速模式,把这个数据全同步好的,对吧?啊,或者是清洁点模式,数据同步好的,同步到最新状态,然后我们才能发交易,那另外还有一个就是说,我们可能需要把那相关的东西清除掉,然后要再次运行这个travel migrate。来travel comp就不用了,因为我们知道这个编译的过程其实跟区块链无关,对吧,只要有so模块,我们就能把它编译出这些文件,那migratet呢,它就是要真正按照我们travel里面travel JS里面的配置把它部署到区块链网络当中的,所以我们切换了网络之后,一定要再次运行插好那。
03:13
呃,另外下面还提到了一句,就是说,呃,如果说那大家都知道我们这个测试网络,包括我们本地还要起IPFS节点,对不对啊,这些动作其实是很复杂的,而且就是IPFS节点,大家会想到我本地起一个它很占资源,然后就是很麻烦,对吧?另外别人访问还不好访问,那大家就会想到,那我不是还有另外一种方式,我可以直接访问ips.oio吗?它那个网站不是可以嘛,但是我们会发现至少在国内访问的时候很慢,而且是经常就会打不开,对吧?那这样一个问题还是需要解决的,所以这里给大家提供了一个解决方案,就是说你可以。不去自己运行ippad节点,那用用什么呢?去用第三方的免费托管服务,比比方说像呃inura这样的免费服务,有些同学可能自己已经就是看了一些别的教程,或者是别的东西已经在用了,对吧?Ura它的免费托管服务还是很多的,但是大家可能没用过这个ipss的托管服务,呃,大家可能是用过这个它的以太坊的托管服务,对不对?呃,它对于这个各个测试网络其实都是有这样的托管服务的,比如说我们看下面第二点这个啊,就是这里说的是假如说用户没有这个mama的话,按照我们的业务逻辑,那应该是去连接,大家还记得我们那个判断,对吧,如果。
04:46
那个,呃,当前的这个window.web3是是存在的话,那么我们就去走当前的那个current provider,如果没有的话,就新建一个provider连接的,我这里的代码连接的是logo host8545对吧?那这个前提就是要求你本地一定要起一个以太坊节点,要不是跟纳,要不是超develop,要不就得是自链,或者是自己的本地起起来的测试网络的节点,对吧?那大家会发现我们要往测试网络布的时候,自己本地起那同步区块就同步好几个小时。
05:19
那怎么样用呢?大家会发现我可以直接指定前面还是一样对吧?你有web and providers htp provider,然后后边直接跟上,大家发现后边这个就是一个robson.in FA的一个一个链接URL,对吧?那么我们直接把这个引入,就相当于大家可以看到它后边给的不是端口,给的是一个apik,所以大家会发现我们得先在piia上去做注册对吧?做免费注册之后拿到这个apik,那么对应的ini这个网站,它就会给我们开放啊对应的接口服务,我们直接把这个URL写进来,就可以去调用它的测试网络服务接口了。呃,有些同学可能已经在用了,对吧,那不熟悉的同学可以再去,就是到这个,呃,Inurer的官网上去看一下,然后去注册一下,也可以用这个啊,呃,就是平常大家如果要是自己没有现成的这种环境。
06:19
自己同步好的节点可能都得用这种第三方的托管服务,那大家可能之前不知道的,就有些同学可能已经在用英菲尔的这个服务啊,节点服务那大家可能不知道的是,它不光提供以太坊的服务,还有IPFS的服务,所以大家会发现我们可以大家记得我们代码里边是不是定义了一个IPFS,它是调用这个IPFAPI的,对吧?后面就给了这个host是local host port,呃,我们是五,我们好像也是5001还是多少对吧?所以大家会看到这里的写法都一样,就把host改改成这个inura就可以了,我们以太坊这里的话,你连的测试网是rob,那就是robson.infa这里是IPFS的话就IPFS.inf呃,所以其实这个连接还是很方便的,大家可以试一试啊,就是这些部署的这一块,我们可能给大家还是主要是讲这个项目怎么设计,怎么实现部署这一块的话,就包括这。
07:19
这个呃,运维啊,对吧,这这些方面的东西大家就自己去去熟悉,去做一点尝试就可以,以后大家如果做开发的话,这些可能也不归大家管,呃,好,那后边还有一部分,呃,这里还有一部分啊,三和四这一部分,呃,大家这这就是相当于再给大家多说一句,大家可能会发现我们之前在这里部署服务器的时候,我们都没有真正的部署服务器,对吧,我们就是在本地,呃,N PM run,大家还记得我们的run它本身底层是执行了什么命令吗?呃,大家如果忘记的话啊,我这里可能这个关掉了就没有打开啊,大家可以打开我们的onepa这个,呃,打开我们的package.jason文件,看一下里边我们是怎么配的,那当时我们的run dev这个NTM脚本,它的启动命令是。
08:18
Webpeg div server对吧,所以大家会发现我们平常去跑这个应用的时候呢,那其实我们都是去跑了一个wepa内部的DV serve的。真正的生产环境,我们显然不能说是跑一个外派和DV server,对吧?所以我们还是要起一个真正的服务器的,那真正的服务器怎么去起呢?那这个方式就跟我们之前给大家讲的一样,自己去呃用一个express,对吧,或者是用Co,或者是自己直接用note原生的这个HTPP,或者大家如果要是习惯用Java,呃,大家用这个什么?呃,这个tomcat,或者大家用这个engines je或者什么样的外B服务器都可以,对吧,自己起一个web服务器,那我们之前已经做好的这些页面怎么样去在我们的服务器里边能够看到呢?就真正我们访问我们的外部服务器的时候能看到这些页面呢?那就要做打包了,对吧?啊,其实大家会发现这个打包也是非常简单啊,呃,大家会发现。
09:26
我这里给大家看一眼吧,我们还是回到我们之前的这个目录下边来,大家还记得我们的下边是有一堆东西的,对吧?呃,我当当时跟大家说过,我们其实可以就是把这个这个下边的这些文件都删掉,对不对,比方说我把这个JS都删掉,然后HTML都删掉。
10:02
还有一个点麦啊,好的家会发现诶。大家会发现我把这些东西都删掉之后,那怎么样才会把我们要用的这些页面能生成在这个build下面呢?啊,之前大家可能会发现我们本来在这个外派和fa.JS里边不是写了一堆东西嘛,大家还记得这个。上一层目录下来啊,大家会记得我们在里边是定义了它的入口和这个出口的,对吧?我们已经明确的定义了index.gs,我们要把它输出到build下面生成一个app.js,而且我们还定义了我们要把这个HTML要copy到,呃,大家看下面,下面没有指定目录,那我们就是直接就是在上面的这个output pass里面,对吧?我们要把它指定output到build下面的HTML,那为什么我们之前大家都有疑问对吧?为什么我们一次一次的n PM run d,为什么它就没效果呢?
11:18
这个我们是说过n PM run DV它的点,这次它的效果是相当于启动了这里的这个one派div server对吧,那这个div server呢,它是一个内存模拟的一个环境,所以说对于我们而言,它其实所有的这个server,所有的这些数据都是在我们内存里边模拟出来的,没有真正的把这些操作做出来,没有往我们的磁盘上去做这个文件的读写,所以大家会发现就是之前我们不管怎么样去跑,怎么样去绕。这里都不起不起作用,对吧,这个build下面都没东西。
12:01
那我们真正要打包的时候,显然是要用build下面的东西的,那怎么用呢?其实也都非常简单啊,就是大家会看到我们安装完了这个onepa之后呢,再点并下面就会有这个onepa,大家会发现有onepa有onepa。呃,Clean还有外派和d server对吧,我们之前用的是外派d server,现在我们用外派直接用这个去打包就可以,他默认会去找我们当前项目下面的WiFi con。那么我们的这个里面是不是把这个打包的规则都已经定义好了,那大家直接在这里run就可以了,但是这个时间也会比较长,对吧?因为大家记得我们当时起那个server的时候,打包就要很久,所以这个可能也要等几分钟,那等一下我们来看一下结果就可以,所以当我们把这一个真正的这个运行的ipad,然后打包出来之后,它就会把我们对定义好的那些文件输出到build文件下边,那我们最后要部署的时候是怎么样部署呢?那大家如果以前接触过web项目的话,应该就很熟悉了,对吧?大家如果要是起一个传统的web服务器的话,一般情况啊,就会有一个web目录,比方说像这个content这样的东西,对吧?它下面有一个呃web目录,或者是叫这个web content对吧,大家直接把对应的静态文件g s HTML copy到它的下面那个目录下边去之后就可以了,我们提起来这样一个服务器就可以直接访问啊,按照路径去访问就可以直接。
13:33
访问到这个目录里面的东西,对吧?啊,所以这个就是给大家简单的说一下真正应用上线的时候的一些部署的情况,好我们看这里边已经打包完成了,对吧?现在我们再来看一下build的下边。所以大家看到这里就真正的生成了我们想要的这些文件,对不对啊,当然大家可以看一下,就是它生成的时间,就是我们刚才生成的对不对,九点十几分对吧?呃,所以呃,大家可以就是把整个这个外派的打包流程,它的使用也稍微的熟悉一下,这就是我们这一部分,相当于也是工具方面的东西,对吧?好。
14:13
呃,那么我们前一个项目基本上就到这里了,呃,那另外就是给大家这里还提出了几个练习的建议,对吧?呃,一方面大家会发现我们的页面上有很多值得改进的地方,那页面上有一个最直观的就是我们可以在这个呃页面上应该能点我们那边那个种类的链接,对吧?然后根据点击了这个链接之后,右边我们展示的商品应该要按照种类去做筛选啊,这个大家可以去作为一个练习去去尝试一下。另外这里还提出了几个练习,这主要就是跟我们的业务逻辑有关,跟我们的合约相关了,对吧?大家会看到这些跟合约相关,其中一个就是说当资金释放之后,我们可能需要发送金额1%给仲裁人作为服务费,大家会发现现在我们的这个DF里边,这仲裁人好像没什么好处,对吧,也没手续费,然后就是他要去终结一下这笔交易,然后给别人做一。
15:13
跟仲裁,然后去决定这笔钱可以给到谁去投票对不对,那这个过程当中大家会发现我既没有好处,我要辛苦去去做这些操作,然后我还得发起交易,还得覆盖呢,对吧?呃,这个过程那没有好处的话,真的是可能没有人会去做啊,大家可能就想到我们一开始如果上线的话,那可能就只有自己平台的官方,这这些相当于客服人员去做这件事情了,对吧?那同样也是出力不讨好,也是在不停的花钱的,那这里我们就可以提出一个改进,就是我们在这个资金释放的过程当中,提1%给仲裁人啊,这个应该比较简单对不对啊,大家能想到就是我们在发送金额,真正要发送金额的时候,是不是把它做一个计算,分成两部分对吧?然后调两个transfer,我们可能有一个是就是buy2.transfer,那另外一个就是abi transfer对吧,那两个金额transfer过去就可以了,好呃,那么第二点大家看到目前。
16:13
所有人是都可以去终结拍卖或者成为仲裁人的,对吧,就现在除了这个买家和卖家之外,所有人都可以,那在这个机制下面,大家就会想到真正实际应用的过程当中,那首先是可能因为我们这个没有好处,没有人愿意去做,那其次带来的问题就是什么呢?本来这一项没有好处,没有人愿意去做,那假如有人真的去愿意去做的话,那有可能他就是想作弊了,对吧,想要用其他的方式去得到好处了,比方说我们这里可以怎么样呢?他可以去跟买家或者卖家。勾结起来对不对,然后去,哎,我我跟你先商量好,我去给你做这个交易的仲裁,然后我就把这个钱直接拿给你,哎,你是卖家,你发不发货,或者说这个货的质量没关系,我这笔钱给你一仲裁打过去就没事儿,或者你是买家,你这个钱,呃,就是说到底怎么样,这个都都没关系,我直接就是要求把这个钱退给你,对吧,你的货收到没有我不管,我跟你商量好给你退给你,这种情况怎么避免呢?人家就会想到我们实际应用,一方面仲裁是要。
17:24
呃,就是要要有收入的对吧?另外一方面你还得提高他的门槛,不能随便来一个人你就去仲裁,那这个就太容易去跟这个买家或者卖家共谋了,对吧?所以我们可以实现的一个改进就是要求用户必须发五个ETH啊,当然这个五个ETH有点高啊,呃,当然大家可以说我们发一个或者发0.0.5个对吧,才能够成为这样一个仲裁人,所以呃,那同时大家就会发现这个功能其实还比较容易实现,就是我们在finalize那一个步的那一步,对吧,我们必须要带上五个ETH过去,然后才能终结这一个交易,这个大家应该能够想到,那另外大家就会注意啊,他们还可以在任何时候改变心意,将保证金撤回,那所以我们的合约里面是不是还得再加一个方法,就是仲裁人还可以退出,对不对?
18:21
那这个退出之后,是不是就相当于我们的这个托管合约又得回退回去啊。那相当于又得等待另外一个仲裁人来,才可以再去把它托管起来,对不对?那这个功能就稍微复杂一些了,大家想实现的话,可以实现,就是实现到前面这个稍微简单一点来,大家可以思考一下,后边这一步就是如果要是随时还可以撤回,这怎么去做啊?另外就是还有添加,如果发现仲裁人有恶意行为的话,可以销毁保证金,那就是说大家会想到他这个发了五个ETH保证金是拍在这儿了,然后他还可以随时撤回,但是如果要可以随时撤回的话,这个对他就没有约束力啊,对吧?那所以我们还得有约束,就是说在某种情况下,我们要能够把他,当然这一定是有特殊权限的人才能做这种事情,对吧?我们可以把他的保证金要销毁掉。
19:19
那而且最后就是说大家会发现,作为一个商城,作为一个这个电商系统,我们现在还没有任何的服务评价的这个环节,对吧?啊,那在这一部分里边,卖方是没有任何收到任何评价的,那我们需要买方给卖方实现一个打分的功能,那大家可能就会想到这个是不是也应该给这个产品绑定在一起啊,然后我们每个卖家的地址对应的是一个一个商商店对吧?一个商家的我们在stores里边能查到他的所有产品,然后就能查到它所有产品里边的这个评分,对吧?所以其实这就是一个,呃,相当于是一个添加一个数据结构,然后我们要留出一个接口,让这个卖家去给卖家做评价。
20:08
大家可以把这样几点都做一个实现,那么我们这里就就已经完全结束了。好呃,这里给出了几个进阶阅读的link,大家会发现就是这里是我们solidity的一个官方文档,下面是travel的官方文档,然后这里是以太坊黄皮书,下面是IPFS官方文档,Mango官方文档,其实我们在给大家讲的时候,我这里很多内容也就是从这里面扒出来的啊,大家想看的话,可以去读一下这个英文的官方文档,确实还是会写的比较好。好,那么我们这个项目就已经彻底结束了。
我来说两句