00:00
刚才弹出交易成功的那个框的时候,其实如果直接点的话,我们会直接跳到就是easter sky ROS的一个ER sky里面去看到那个交易信息,现在我们已经退出来了,所以如果要看的话,我们就还是去到easter sky里边,可以直接另外一种方式粘我们的以太坊的地址,刚才我做的操作大家再重新看一下啊,很简单,就在这里点一下copy,然后粘到这里来,然后够好,大家可以看到这里边详细的记录了我刚刚申请的这个钱包里边这个账账户。到目前为止发生的四笔交易,第一笔交易我们都知道从水龙头那里拿了一个以太坊,第二笔交易我们基本上也可以确认了啊,有一个好心的同学给我转了,转了五个以太坊,但是事实上这个数转的不是五个啊,是4.999979是故意这么设置的是吧?呃呃,哎,大家觉得这个转过来的东西是因为扣了手续费所以少了吗?大家觉得是吗?还还记得咱们一开始想要去发一个以太的时候是什么样吗?是这个手续费应该扣谁的发送方的对吧?对谁发扣谁的,那大家看到这个好像这个同学发出来的这个以态,看起来好像是要给我发五个的样子,那这位同学他一开始是发五个给到我,然后扣被扣了手续费扣成我收。
01:42
到的就是4.99个吗?是这样吗?咱们回忆一下,我一开始要发一个到水龙头的时候发生了什么事情,对吧?我本来是有一个以太的,但是发的时候他直接不让我发,他不是说我可以发一个,然后你算了手续费之后,从我发的一个里面去扣。
02:02
然后水龙头那边收到0.99,没有这么算,所以这笔交易几乎可以确定,这位好心的同学,他肯定是自己输了这样一个数字发给我的,呃,但是如果这个同学不是这么干的话,可以跳出来就是反驳我啊,说我刚才就是就给了你五个,但是从区块链这个查询,从它的原理上来讲,就不是这个查到的数据一定当时就是这个数字,我们刚才看到如果你要是有一个以太,你要是可以从里面扣的话,我们那个交易明明就可以发出去的。是这样对吧?好,第三笔交易又是一个0.2个以态,这又是另外一个好心的同学转给我的,呃,大家这个确实我们大家直接有mad math的同学直接就在这里跟我可以做互动啊,就是我们可以看到,就是大家随时发过来,这些信息都可以在这里查得到,然后最上面这个大家看,这就是我们刚才发给水龙头的这两个以太这个地址,就是第一个给我们以太一个以太的这个水龙头地址,这里只不过不在from,是在to这里,而且后面的VALUE2没有没有什么问题,这里标志是out,就是因为我们是按照我们的账户地址去查询的,所以他会明确的列出来,是我们发出去的还是别人发进来,一目了然,全部都能看到。大家比较关心手续费,那我们在这里,它其实这里已经直观的把这个手续费列出来了啊,我们看一下水龙头给我们发一个以态的时候耗了多少手续费。
03:35
耗了0.000105个,而我们这一次的交易发给水龙头的两个逆态反而好像更少一点对吧?是0.00004个042少了一半还多,所以我们就可以肯定可以确认这就是我们设置的那个GA price,设小了之后确实有效果,那在这里比对的时候,我们就可以看到第一个给我发4.99个以态的这个同学,明显他是知道设置de price,或者说他自己默认的这个里边的设置可能就会小一点,或者是这样,他的明显这个手续费非常非常少,对不对?大家从这个直观的看,还记得我刚刚才的该price设设了几个纪委吗?两个纪委对吧?那这个同学他的比我这个少一半。
04:29
大家觉得他可能设的GA price是多少,就是一个机位,好,咱们看进去看一下是不是,这是刚刚那个同学发的这个交易,我们确认一下它里边的详情,Value4.99个LIMIT21000柚子21000GA price一个级别。跟我们刚才看到的那些和分析出来的东西完全一致,所以这就是以太坊里边我们用钱包也好,或者之后我们学了更多东西之后,我们用程序控制,用合约转账也好,或者说我们调用接口去转账也好,其实原理都是一样的,转账和收钱就是这样一个过程,好,那接下来我们还是完成一下哦,我现在为什么这么多以态了,好,大家既然愿意转,我们就再看看到底有几个好心的同学,哇,这个这个同学是有钱人啊,一下子给我转了十个以态,谢谢这位同学,好,接下来我们来就是测试一下,这个确实之前我也没有测过啊,刚才这个同学其实说的非常好,我们可以测一下,如果把该price设为零会怎么样,因为在我的就是在我的想法里面,如果我设计一个钱包的。
05:49
话,可能我会不允许别人说该price是零,但是mama不允许的,那我们就看一看,这个交易肯定是可以可以发的,比方说我们还是发一个以太,呃,这个我还。
06:05
这个地址是水龙头的地址吗?好吧,这个是自己的地址,大家觉得给自己转币可以吗?应该可以啊,咱们没关系,咱们试试,好,我们先给自己转一个转一个币试试啊,然后GAP。呃,我们为了先测试自己给自己能不能转,我们先发一个看看啊,直接去next。呃,刚才我们明确可以看到我们自己的账户到自己的账户,对吧,然后这个又开始判定了,好我们再去发起一笔交易,就这个没关系,那边判定其实我们已经广播出去了,就等着矿工打包就可以了,好我们这里找一个发给我的同学的地址吧,我们第一个发给我的同学,我复制一下他的地址在这里可以,也是很方便的,可以复制啊。这个同学刚才刚刚发了两笔,这个测试仪态的。
07:01
好,我们现在做一个三好这个同学,我们给这个同学发五个以态,我们在该费这里,哦,现在的这一个该price非常的高,设成零,试一下c confirm。好,大家可以看到发生什么事情啊,啊,这里报了一个异常alert,这里的是ethg s rpc error with pilo,他的他的理由message给的是transaction underped。所以呃,当然这个其实就是看起来这个应该是RPC调用的时候,是本身是以太坊节点那边反馈的一个信息,所以这应该就是以太坊本身就会拒绝这样的交易发出去,所以大家可以确认了,就是如果该price给零的话,这个是不可行的,呃,至少要给给呃,或者咱们如果不在这里去艾的话,因为它这里的单位就是纪委嘛。
08:16
我们可以看一下这里是不是可以手输啊,我假如说要用0.0001这个他是不是可以,大家觉得这个可以吗?可以是吧,好confirm一下。诶,果然这次没有报错发出去了,呃,但是我们可以看看会不会有好心的矿工给我们把这笔交易打包进去,因为大家可以想到,如果我们把本身的GA price设的那么小的话,这笔交易可能旷工它,诶我们看到这个两个都已经都已经确认了,好,那所以我们在测试网络里边可能还是比较幸运的,因为大多数矿工他可能不太在意这一个手续费的问题啊,但是根据我们在主网上,大家如果在主网上转过账的话,应该会有体会,主网上如果说我们把该price设的很低很低的话,很有可能就一直到不了账了,那至于GA price。
09:17
到底应该怎么设置,那这个可能就会就会涉及到另外一个就是我们可能需要查询当前以太坊区块的一个一个状态啊,我们可以看看这个网站,我们要记住它的全称啊,它的全称是叫station点英,这又是一个网站,可以查询一些基本资料的,它主要计的是什么呢?不像1ERSC那样,是统计所有的交易和区块的信息,它统计的是我们当前GA的一个信息,我们看一下前面的这些,第一个就是标准,这个std就是标准的一个standard,对吧,Standard cost for transfer,这就是当前的标准,花费每一笔以太坊上的交易需要零点零一起刀,当然这是折合成美元了啊。
10:17
那当前的平均的GA price是什么呢?标准的GA price4个机位,这是主网,这个这个网站它只监测主网,然后我们看这个Co cost for transaction,这是一个钱啊,然后它后面又有一个c flow的GA price。3.8这个c flow是什么意思,我们到下面来看一下,它下面这里有一个有一个图表,这个图表好像没有办法放大啊,大家应该看得到,看的清楚是吧?这就是确认的时间和GA price的一个关系,在主网上我们可以看到,如果要是高于四个机尾的话,那基本上就是秒确认,对吧?基本上你看后面的这个平均的确认时间,基本上就是零点几秒就确认了。
11:11
即使是三个纪位也就0.9秒就确认了,但是如果要是两个纪位的话,就是3.5秒,如果要是一个计尾的话,就是13秒,这里其实就是它的就是小于一的,这个数据一般是不够不够准确的,就是这里面啊,我的经验来看,一般是不够准确的,正常的看这个GA price和确认时间的一个关系,其实就是如果你的确认时间就是想要越短的话,一定就给足够大的GA price,如果要是你想想要尽量的节省该费用交易手续费的话,那你有可能就要等很久很久,这是一个正常正常的状况,好,这个网站也就是大概这么给大家介绍一下,好呃,接下来的时间可能不是很多了,我们呃。
12:11
因为接下来的话,我们还给大家安排了一个想要去跟大家一起去remix上面去构建一个简单的水龙头合约,那现在这个时间我看可能可能会稍微的不那么充分一些啊呃,我觉得就是我们先去单的到remix上去看一下它长什么样子吧,我觉得可可以做这个操作,剩下的那个合约的具体实现我们可以放到明天remix,它的网址很简单,就是remix.m.org,这是一个前面我们跟大家说过,这是一个在线的solid编辑器,大家可以看到这里边就是它的这这就是一个IDE的页面,对吧,看起来很像一个IDE这边的主页面,这当然就是我们的文件了,我们写代码,Coding就在这里,就在这里敲,然后左边这边是文件目录,他们。
13:11
默认打开就有一个,就有一个文件,呃呃,当然它默认打开的不是这个,就是因为我之前写过,所以保存在这里了,默认打开的它是这个文件叫做ballot的一个文件,Ball是什么意思,是投票的意思,所以大家可以看到这上来,它第一第一个就定义了一个一个结构叫vote或者怎么样,大家可以瞄一眼啊,跟大家简单的瞄一眼,呃,下面它就它就定义了各种各样投票的一些方法,呃,这是非常简单的一个投票的程程序,一个合约之后我们可以给大家再讲solidliity的时候,详细的跟大家分析一下这一个投票合约,呃,现在可能我们不讲啊,我们其实想要讲的是一个水龙头的合约,在这里这个代码我是已经敲上去了,所以呃,我我先这么说一下吧,先这么给大家就是比较泛泛的,泛泛而谈,说一下这个合约里边它会实现一个什么事情呢?很简单。
14:11
就是大家想,刚才我们看robsten的水龙头它是怎么做的呢?正常的想法应该是他可能自己在后台起了一个服务器,这里它有一个外部页面,然后我们点击的时候发一个请求发到后台服务器去,然后他去连接到自己的以太坊节点上,然后去处理我们的交易请求,对吧?这是一个正常的状态。但是我们想我们前面说了,以太坊本身就是一个世界计算机啊,那以太坊上面不就是直接可以当后端用吗?我们这里就是直接可以把以太坊当后端用,那把以太坊当后端用的方式就是去写合约,然后部署到以太坊上,这个合约就是我们想简单的实现一个水龙头合约,我们把把它布到以太坊上之后就可以通过它。
15:07
就像水龙头一样,点一下发一个B,点一下发一个B,就可以出现这样的一个状况,诶,呃,简单过一下啊,就是这个代码其实很简单,我先给大家讲一下代码吧,大家现在呃,如果没有翻墙软件的同学可能会发现remix remix可能打不开对吧?呃,所以我比较建议大家今天晚上最好就是包括咱们的那些资料,如果没看懂的可以下来之后再好好看,但是最好是先把这件事情能搞定,因为remix在我们这个一开始学习的时候是非趁用的一个工具,如果大家连不上这个的话,可能有一些东西就只能看我在这里演示,大家自己没办法去实际操作,这个是其实是很大的一个损失啊。呃,我比较建议大家今天晚上下去之后,先把这件事情搞定好,我简单跟大家说一下这个代码结构吧。首先前面有一句。
16:07
的这个trackma solidliity,然后有一个这样的一个符号,0.4.19,呃,它的这个就相当于我们一开始去写JS,如果去,呃大大家想要去inport什么东西啊,或者是大家写Python或者Java,对吧,去去做一些前面的一些声明一样,这个主要还是一些声明,它主要声明的是什么呢?版本S里的编译版本这个后面的这一个0.4.19就是它要求的最低版本,前面这个小符号就是表示这是最低是这个版本,所以我我们可以看这个合约的编译过程,在右边就可以看到这里有一个选项叫comba,就是编译,它下面会选择我们对应的编译器的版本号,现在我们用到的就是一个00.4.25。
17:05
当然我们可以选别的版本,大家可以看到啊,现在最新的已经是0.5.0了,但是我这里不是很建议大家用最新的,因为5.0 0.5.0还没有正式发布,这里相当于都是一个就是station阶段的一个commit,所以它不是正式发布的话,用起来可能就不太稳定。还有很大的一个问题就是5.0.5.0solid的语法标准有了很多改变,所以可能会出现我们写的代码,或者甚至就是大家复制过来的代码,大家照着就是我给大家的代码,直接敲的代码跑到这里编译报错。如果直接报错的话,一方面检查自己是不是敲错了,另外一方面要看版本,编译版本,就是先跟大家提一个醒,之后我们遇到问题会再给大家去去解决这些问题。呃,然后接下来我们就看一下这个代码结构啊,代码结构很简单,就是一个contract for水龙头嘛,所以这是一个合约的名字,前面contract当然就是它的类型了,我们就直接可以把contract当成是class。
18:18
就可以,大家如果习惯,就是像其他的一些编程语言里面,Java或者其他的一些编程语言定义类的时候都是class吧,所以大家可以认为这就是一个类contract,然后下面这是一个大括号,所有的括住,所以这个合约名字和它的文件的名字是要相同的。这是一个也也算是一个标准了,很和很多的编程语言其实规定都是一样的啊呃,另外多说一句,就是说solidility文件,它的原文件后缀名是点so,也就是solid select的缩写简称,里边实现我们这个水龙头的代码呢,核心代码其实就这么几行,上面一个function叫做withdraw withdraw大家知道是那个提取的意思,所以这个方法就是我们水龙头发币的可以点一下,让他发个B的一个一个核心代码function withdraw,这很明显就是定义了一个方法,定义了一个函数嘛,后面呢,跟的自然就是函数的参数了,传入的参数我们可以看到它有一个UN,然后withdraw amount,大家熟悉编程语言,其实一眼就能看出来,前面明显就是数据类型,对吧,类。
19:43
Unitt是什么呢?就是ign的,呃,Int就是我们所说的无符号数,应该叫对无符号数,无符号整形,无符号整形数,然后后面withdraw amount,这当然就是我们定义的入参的变量名了,所以function withdraw,然后后面是它的传入的参数,后面注意跟了一个public。
20:11
Public这个代表代表的意思就是说整个的这个函数是公共可见的,那在其他的一些编程语言里面都有类似的定义,所以这个就不详细讲了,大家一看一说就都知道下面有一句叫做require,后面跟了一一个表达式,它这是里边一个内置的用法,就是require是它固定的一个关键字,这是属于错误判断,异常判断里边异常处理里边的一个关键词require,它表示是要求什么呢?就是说一定要后面这个条件为真。所以后面其实是一个就是布尔类型的一个判断的一个表达式,对吧,大家熟悉就能看得出来,是要求提现的金额要小于一个数,大家看这个数好大啊,这个为为什么这么大,是说我们提现不能超过这么大一个数吗?那不跟那个没没确定都不是,是不能超过这么多个以态吗?那跟没规定不是没什么区别吗?单位是伪对大家都都能想起来,所以这里我可以直接告诉大家啊,这里面给的是后面是17个零,17个零就是0.1个以态,就是一次,人家那个水龙头是一次给一个以态,咱们这个就一次0.1个以态就好了,下面是一个,就是如果说要求的这个金额小于0.1个以太的话,那下面就去transfer。
21:43
当然就是去发币对吧?呃,所以这里这个语法都是非常的明确,就是可以说是非常直白的,前面还有一个message点三这个这个又是什么东西,这个这两个也都是solid里边,算是就是以太坊定义的关键字了,Message就是我们整个函数调用的时候发过来的一条消息,Mes sender呢,就是我们谁调这个消息,这里的这个3ER就是谁的地址,所以就是这样,然后用它的这个地址去调一个transfer函数,这个时候就会把后面对应的这个金额转到这个地址上面,这就是最简单的一个用法,就是给别人转币,在合约里边才给别人转币,最简单的一个用法就穿语法也非常直白啊。呃,下面下面这个会稍微有点麻烦,我觉得我只写在这里,不给大家详细解释了。
22:43
呃,这个是是一个什么东西呢?这是一个是一个函数,但是大家发现它没有函数名字后面直接跟了一个括号。这叫什么呢?呃,有些同学可能在别的一些编程语言里面见过,就有有匿名函数或者什么的,但这个不是匿名函数,这个一般在so里边被叫做回退函数,一般是这么说,它的调用的时间是什么时候,它是它表示什么意思呢?它是说假如用户发出的消息没有调用到。
23:19
就是要要调用的那个方法,在我们的合约里边没有实现的话,那就调用这个就相当于是最后一步回退,回到这一步去处理这件这件事情,所以在我们想要去给就是这个合约想要去给一个地址发一个以态的时候,那其实我们是不会调用它的任何方法的,就是这个时候,就是没有没有任何参数的去去处理的时候,那它就会调用到这个回退函数里面,那这个回退函数就必须是一个,后面有一个关键词叫payable,就必须是一个可支付的回退函数。
24:02
然后他才能接收以态,就是这样的这样的一个状态,就假如说我们想要给这个合约发送以太的话,他就必须要有一个可以payable的一个回退函数,这个这个有点有点声涩啊,这个之后再给大家详细讲吧,就是讲到那个solidliity的时候,我们再给详细讲回退函数啊,还有这样payable类型,这这些一些特殊的一些概念,总之就是这个东西是我们的一个简单实现。呃,好,代码的结构先说这么些,然后我给大家简单的介绍一下这个remix,它的这个页面布局的其他东西怎么用,嗯,明天来之后,我们可能还会再再跟大家再去去重复去讲解一下这个合约啊,我们看一下下面这个其实很正常的一个就是lo输出嘛,一个控制台输出是大家很很容易能够想到的,这边非常重要这么多个选项,我们最先进来的时候,第一个选项是编译,刚才已经说了,上面可以选择编译版本,下边大家如果要是拍这个自动编译的话,可以把这个勾上,就是我这里边只要是这个做了改动之后,然后他这边就自动编译他,他可以去自动处理这件事情,如果大家要觉得这个会就是网比较慢,也比较卡的话,就可以把这个勾掉啊,下面就这个很简单啊,就是说我一点这个,你就开始给我编译。
25:31
如果下面编译成功的话,就会显示一个蓝绿色的条,然后把我们的合约名称显示在这里fo,这就是表示编译成功,那如果要是编译失败呢?那比如说我在public后面多加一个,多加一个,随便加一个,加一个打错的一个符号,我们就看到它编译的结果就是一个红色的框,里面就会报错,告诉我们哪里有问题,这就非常直白了,他就说你这个,呃,定义声明的时候出了错,这是一个没有声明的一个标志符,所以,而且它指明了位置,我们一看就可以能看得出来它在哪里出错,这也就是remix非常好用的一个地方。
26:19
啊,大家可以看你不开那个自动编译的话,如果我这里边点一个CTRL加S保保存的话,它这里也会自动编译一下,然后这里就已经变成一个可用的一个状态,好这是就是。编译的这一部分后边还有常用的一个,就是第二个选项说,呃,先先跟大家简单的看一下,具体的使用我们还是放到放到明天吧,比较整整的一个时间可能会好用一些,更何况大家很多同学现在还没有翻墙工具,就不能在这里实际操作,所以就给大家看一看,呃,上面是可以选择环境的环境,这里就是有各种各样的选择,可以有javascript vm。
27:03
这是什么东西呢?这是remix本身就自带了一个JS的VM,就相当于它自己就给我们起一个测试用的以太坊节点,当然它不会连接到任何的真正的以太坊网络上去,不会连接到主网,也不会连接到测试网络。这是第一个选项,第二个选项叫inject的WEB3这是什么东西啊?这是它会自动检测当前浏览器里边有没有插件。给它插入了一个WEB3对象,也就是说有没有像ma MAS这样的东西去给我们能够做,呃,是是出了什么状况吗?哦,是风比较大是吧?哇,我们我们在在在屋里边已经完全不知道外面发生了什么事情了。
28:01
好,大家就是如果挨窗户的同学可以把窗户检查一下,关上,不要让它,呃,好,我们还是就是就就把这块说完,我觉得大家就先自己看一看吧,因为很多同学可能还还得急着去弄一些翻墙的东西,对吧,明天我们就真正要用这些东西了,但不能没有,呃,第三个叫WEB3PROVIDER,这个的话其实就是我们可以去去,就是自己本地起一个以太坊的节点,要连接的话就用这个选项,这个之后我们用到的时候再去再去说就可以,只是大家看到有这样这样一个东西啊,然后这里有合约的地址account,然后这里有GA limit又是很熟悉的东西,对吧,有value,所以我们看到这里也是可以直接去转B的,也是可以直接去发的,但是呢。
29:02
它只能是我们下面让是要让合约去给合约发币,可以在这里发给普通用户的账户去发的话,那就不用了,我们还是用钱包去发吧,然后下面就看到我们要run的是哪个合约,可以去选,然后这里有deploy,还有at addresslo语是什么意思呢?部署的意思。就是说我们要把我们的这个合约真正的放到以太网上去,这里我们把它写好之后,这只是一个文本的代码,我们点。com的时候只是把它编译成自解码,真正要上到以太网上去执行,就一定要点这个deploy,所以这相当于就是一个运行的环境啊,部署的环境啊,这也是我们经常要用的一个东西啊。
我来说两句