00:00
好,接下来我们,呃,就是给我们第一个自己写的第一个智能合约收购,就是我们这个智能合约的目的到底是什么?回顾一下,我们本来是想要实现一个水龙头的功能,水龙头我们都是在那个测试网络里边,我们去想要拿币的时候才接触到了这个概念,它的功能是什么呢?就是他那里边有很多币,然后我们想要币的时候从他那里点一下。它就给我们发一个B,点一下就发一个币,它这个功能就像水龙头,就像我们想要的时候拧开水龙头它就流出来一样,所以我们的这个合约的功能是什么呢?就是实现了一个withdraw,就提现的函数。然后我们作为用户,只要是在外面一点这个withdraw提现,然后他就给我们发一个发一些币,这个是要我们自己去输的数字,对吧。只要我们一点,他就给我们发,只要一点就给我们发,这是我们希望它实现的一个功能。
01:01
刚才我们已经把就是前面我们也趟过了各种各样的坑,发现各种各样失败的状况,现在都已经把它改完了,那最后而且我们刚才已经给他转了币,对吧,都已经里面有币了,那现在。最后一步,那就是我们怎么样看看它是不是真正实现我们的要求了,是不是点一下能转B,这样吧,我这里好像我看了一下是18个零啊,那应该是一个以态,那我这边少一个零,提0.1个试试。大家看到withdraw的时候还要提起一笔交易,对吧?但是这笔交易这是从谁到谁的?谁提起来的?是是水龙头合约提起来的,还是我们自己提起来的,我们自己提起来的对吧?是我们请求水龙头给我们发币,那水龙头不知道我们,我们要币啊,他不会主动给我们发的,这个水龙头嘛,我们得主动去拧它再出水,所以大家就看。
02:12
这里有一个要要转账的一个数额,金额对不对,是零。哎,为什么我们明明前面说要提0.1个以太,这里怎么是零呢?就是因为这笔交易是我们发给水龙头合约的,这里显示的金额是谁发给别人,就是谁要给别人转的金额,那我们是想从水龙头那里拿币,不是要给他转币,所以这里当然是零。所以大家就是注意一下啊,就是我们每一次很多情况下都会看到这里跟我们的预期好像不太一样,为什么这里总是零呢?是因为这笔交易我们没想着给别人转币啊,它就会是零。好,然后我们可。
03:06
好,这笔交易应该已经生效了,我们看一下这边的控制台应该有输出,对,但是现在这个状态应该是pen的一个状态啊,因为呃,大家熟悉mak之后,就发现它真正交易成功之后都会有提示的,好,现在这个应该是已经已经交易成功了,诶ma mask居然没有提示啊,我们看一下ma mask。好,这个已经confirmed。Withdraw。好,接下来我们就是要确认一下,刚才我们是要求提现0.1个以态,那这个0.1个以太到底提出来没有啊,这个这到哪去查呢?这好像什么信息都没有,而且前面我们确认的时候还都是零,这个怎么看呢?呃,如果大家要是能记得刚才自己的余额是多少的话,那应该还是能看的出来是明显增长的,但是我我当时还真没看,真不记得余额是多少了,那怎么办呢?
04:02
啊,没关系,区块链上所有的信息不是在网上都有吗?去查呗。好,我们把自己的地址拷过来,然后去查询一下,好大家看这里还有一个,就之前的那一笔交易还在那里判定啊,这我我我当时提的这笔交易出了一些状况,矿工英好像把它给忽略掉了,好像。呃,这个不重要啊,但是大家想要看到的是,我们明明刚才应该是有一笔交易是要提币的嘛,怎么现在没有呢?这个这个是为什么。大家大家能想到这个是为什么吗?如果如果说我们这里看看不到就是我们想要的东西的话,这是我们自己的地址吧,我们再去看看合约地址。
05:00
合约地址。呃,我们在这个remix里面考还方便一点啊这个。好,我们看到。Remix,呃,就是在那个合约的地址里边,我们是看到一个一分钟以前发出的交易,这个看起来就是我们刚才提的那个,对吧,但是这笔交易看起来是从别的地方发到合约的。大家看是从9FD0,这应该是我自己的这个地址,刚才大家应该有印象啊,9FD0TWO合约地址6241。然后value是零个仪态,诶大家觉得这个对吗。这个对不对啊,如果大家回想起来刚才我们ma mask确认的那个页面的话,大家就能够想到当时的那个交易其实就是从我们自己的账户提起发起的一笔交易,然后是要发送到合约账户,而且转的币就是林根以泰。
06:13
是这样的对吧,所以所以这个其实是没毛病的,但是呢,我们提要想要提现的,那0.1个以太到底提了没有呢?这个到底去哪看呢。我们其实从这个合约的余额上看,好像是。至少这个水龙头是已经发出来了,他真的少了。本来我们不是给他转了两个以太吗?前面转了两个以态,现在只剩1.9了,对吧,那那0.1个到哪去了呢?他这里的转账都没有往出转的呀。对,有,有些同学自己都已经找到了,就是在这个后面的这个选项internal transactions。这笔交易我们看一下它是,呃,也是一分钟以前的,看起来一样啊,从合约地址到9F0D,这是我自己的账户,然后Y60.1个一台。
07:09
所以这才是我们真正内部调用的那个那笔转账对吧,所以在这里查到的,诶大家大家说为什么他要说一个internal transactions。为什么这是一个内部交易,而不能够在这个正常的交易里面查到?就是因为合约水龙头合约给我们发币的这个过程,不是某一个账户,就像我们点这个ma mask一样,直接从一个账户发到另外一个账户的这个操作,而是它内部的一个函数的行为,所以这样的行为,这样的转账就会写在内部交易里面。所以大家可以看到啊,如果在这里看到内部交易里边有一个从水龙头账户到我们自己账户的一个0.1个以太的话,那是不是我们这里应该也有内部交易呢。
08:07
我们点开看一下。诶,大家看到也有一个内部交易,大家看这个首先有一个是之前失败的一笔交易啊,就是我们之前曾经想要去尝试提币,还没有币的时候,想要去尝试提币的,这个肯定是失败了,所以前面有一个红色的叹号,Error,真正有效的,刚才我们发生的是这笔交易。哎,他这个57秒,这应该是没有刷新啊,刷新一下啊,这五分钟之前了,这笔交易是从合约账户到我们自己的账户0.1个以太。完全都可以对应上了,就是我们想要的行为,点一下发了0.1个一。大家如果觉得这一个水龙头觉得不过瘾的话,那我们可以多点几下。但是大家注意,这样的一个水龙头,我们点的时候是得花费花费盖的,对吧,就是每一次我们其实还是有一些支出的,他尽管能给我们0.1个,但是但是每一次都得我们确认的时候都得花费一些,该好我们又提了一下,看看是不是符合我们的预期,等一下看他确认之后是不是又多了一笔,刚才我们看到我们的余额是多少,我们直接看余额就好了。
09:20
16.849等一下我们看如果要是诶已经变了是吧。话音未落,他就变了,已经变成了16.949,所以我们点一下提0.1个B实现了。所以这就是大家看起来非常简单的,就这么几行代码啊,可能就就这么七八行代码,呃,就这还是算上大括号什么的,这么简单的一个合约,其实里边还是有很多东西的,这个这样一个水龙头合约,我们实现了之后,就会让我们搞清楚这个交易的过程当中是我们想要发给谁。我们想要提币的话,这个交易是是什么样的一种情况,然后什么样的东西,它是一个内部交易。
10:04
啊,当然了,尽管我们已经接触到了这么多概念,我们其实还没有深入的了解,就是深入了解还是我们之后的事情,我们之后再给大家详细讲解这里面的交易是怎么样一回事,现在就是我们先先做出了一个能用的东西,我们相当于自己已经,就是如果说我们自己想要囤测试仪态的话,大家如果说我有钱,我囤了1万个测试仪态,好,我自己就可以布一个合约账,呃,那个合约上去,水龙头合约,我自己就当一个水龙头了,大家都从我这里领地吧,这个还是挺拉风的一件事情是吧?好,这就是我们做的第一个。第一个智能合约水龙头合约,好,这一部分先到这里啊。
我来说两句