00:00
呃,首先我们先把之前还剩下一个什么呢,我们要把这个回款给买家的这个合约也得实现一下,对吧,我们已经实现过这个就是release amount to sell之后那这个函数就非常简单了,我们迅速的把它敲一遍,这个叫refund refund啊,Refund amount To Buyer。Public,呃,那接下来大家会想到就是我们这个过程当中跟上边几乎完全一样,对吧?Require,首先这个是不是也得要求这个放dispersed,不能是不能是零,呃,不能是那个true对不对,首先要保证它是false,所以说我们直接把这个可以考虑过来。好,那么接下来大家会想到,我们同样也得保证,他得是三个这个参与人里边的一个,对不对啊,所以这个其实我们都没什么稀奇的啊,直接把它copy过来好了。
01:17
好,那接下来大家会想到我们是不是就要判断当前的这个me sander是不是已经调用过我们这个,呃,Refund amount To Buy,那么它的那个是不是等于true了,对吧?如果要已经等于true的话,我们就不应该做对应的操作,所以跟上面完全一样啊,这个就是,呃,Refund的amount是叫这个对吧,Messenger sender,假如说他是true的话,呃,他是true的话,我们就直接不执行了,对吧?只有在它是false的时候,我们才去把这个amount对应的它的ther那个值定义成true。
02:07
啊,大家注意一下,我上节课好像这里写成两个等号了啊,大家不要就是照着一起写成两个等号,一个等号赋值对吧?好,那么接下来同样就是refund count这个计数器就得加等于一,加等于一,好那接下来我们是不是还是像上面一样发射一个事件对吧?Unlock amount这个事件都是一样的,对不对?我们上下定义的时候就没有把它定义成不同的视线,那这两个怎么区别呢?其实就是在这里是不是可以给一个不同的类型。呃,这个不同的操作对吧?那这个就叫做refund的服务fire,然后它的调用者是MESSAGE3的,好,那这一部分我们就写完,然后下来一样也是要判断这个计数器是不是已经大于等于二,然后我们就要把它转出去了,对吧?呃,跟上面几乎就是完全一样啊,If refund count。
03:16
大于等于二,那么我们这里是要把钱给谁了,稍微不一样一点,对不就是给买家了对吧?呃,给buy尔对吧,退款buy尔点transfer amount,我们直接把这个退给buy,然后同样这个放D,哦,上面这个disper的写错了是吧,大家没看出来。所以这个很容易在这个写的过程当中出现这种拼写错误啊,漏掉单单词里面的一个字母什么的,这个等于。好,那最后还是发射一个事件,Disperpere amount,那这个事件里面会包含什么呢?还是product product ID amount,这里的受益人就变成了buyer,对吧?大家会发现就是把上面的这个center变成buyer,然后release account变成refund account就完了,对吧?
04:24
呃,大家检查一下,这个没有什么问题的话,我们这个合约就已经搞定,那现在大家会想一下,我们刚才其实直接上手去敲这个托管合约,但大家没有去,就我们没有详细的去讨论,我们是什么时候去调这个合约呢?大家想这个合约应该什么时候去调?什么时候创建?要调用的话,大家可能想到我在这边直接去,呃,就是对吧,他这个不是public函数吗?我直接那个他已经部署之后,我直接把它那个调一下就可以了,那它这个创建什么时候创建呢?Constructor什么时候调呢。
05:08
这个大家就应该想到,这是不是就跟我们之前的这个一可store应该有关系了,因为它这里边的钱,他这里边的这个value是应该他的amount是这个value带过来的,对吧,他的这个value是不是不是某个人传给他的,而是应该是我们的1STORE传过来的呀,因为只有1STORE这里边是存了我们一开始竞拍人打过来的那个以太对吧。在这边竞拍结束之后,我们可以拿得到他的high bitter是谁,然后能够知道他的竞拍价是多少,而且我们知道他要支付的那个竞拍的价格是second highest币,对吧?所以这些东西全是在e com store里边实现的,那所以大家就应该能想到我们在这个as pro这个合约里边什么时候去调呢?我们应该在e commercial store这里。
06:08
去调用这个合约。啊,那所以大家这里边把这个要要捋清楚一下,对吧,想清楚我们这个过程应该是怎么样去处理,那接下来大家可能就会想到我们在e com store里边现在还缺一个函数,就是把我们所拥有的这个钱。要转出去对吧,转到托管账户里边,另外大家还应该能够想到我们是不是这里边还缺一个,就操作上还缺一个步骤,大家还记得我们之前这个把这个显示出来之后,这个结束之后,我们这里就什么都不显示了,对吧,我现在这个状态就还是就是结束的那个,就这边拍卖结束,然后可以去揭示报价的过程,然后我们是定义了一个时间,过了一段时间之后,这个就。
07:03
揭示报价也不能揭示了,对吧。那大家应该能想到,我们应该还缺一个动作,缺一个时间节点是什么呢?就是某一个时间节点我们就不能揭示报价,那不能揭示报价之后,是不是就应该把这个拍卖完全关闭,把这个钱就打到托管账户上去啊,所以我们缺一个这样的步骤,对吧?好,那么现在呢,看一下我们课件,我们所以接下来我们要做的就是这这一单元的第三部分,就是我们要去宣布赢家。怎么样宣布赢家呢?那大家会发现我们是要在store这个合约里边去创多增加一个函数去关闭拍卖,然后宣布赢价,那这个当然这个时间是我们自己可能自己去全局定义一个,就是呃,在这个用户定义的拍卖时间结束之后,多长时间内,我们整个这个拍卖就关闭了,就你也不能再去揭示报价了,对吧?然后这个时候我们就宣布赢家是谁,然后我们把拍卖整个全结束掉,它里边对应的这个赢家,他就对应的那个竞拍的钱数就要打到我们的托管账户上面去。
08:20
所以大家看到这里边我们有哪两个需要考虑的点呢?首先我们就会想到,那这个结束由谁来结束呢?我们这里边的定义是就是拍卖就是仲裁人来结束,所以这里就跟我们在刚才的托管合约里边的那个阿BI特就就就相当于就结合起来了,对吧?我们之前都知道你塞尔拜尔这个都是确定的,但是这个仲裁人阿比特是谁呢?那我们就应该能想到谁去创建这个托管合约,谁就应该是仲裁人,对不对?那什么时候创建呢?他不是直接我们就去重新在这个区块链上去发一个交易,去创建这个合约,不应该是这样的状态,因为他得把这个钱带过去嘛,我们不可能说把这个仲裁人让他自己去出钱充到那个里边去,这是不合理的,所以我们的仲裁人怎么去操做操作呢?仲裁人在我们原始的这个1STORE这个合约里边。
09:23
结束拍卖。然后。在我们这个合约里边对应的那个函数就创建出对应的托管合约,把钱就打到那个里面去,那既然你现在调用那个函数的时候是仲裁人去调用的,那我们创建的托管合约当然也就知道@是谁了,对吧?啊,这个就全部都把这个流程就串起来了。那另外还有一点就是我们向这个买方收取的费用是什么呢?他竞价成功的,竞价成功的出价是他的那个highest币,但是我们最后收取的费用是second highest对吧,第二高价。
10:03
啊,那当然大家知道维氏拍卖里面,在eBay上面,它是还要加一个小的那个阶梯的那个价格,我们这里就不做那个操作了,对吧,大家想实现也可以把那个再加上,但我们这里就不做了,我们这个时候大家会注意我们本身给这个。竞价成功的人high BI,这个时候还是把他所有的那个余额都扣在这里的,对吧,那竞价成功的时候,我们是要把它第二高价的那个数额要扣下来,转移到。托往合约上面去,这是他最后真正要支付的价格,剩下的钱我们还要给他还回去,对吧?所以这是我们整个的这个处理流程啊,首先这里大家会看到,这里呢,是给大家先把这个product HTML里面先加了一个东西,这是加了一个什么东西呢?大家就会想到我们是不是对,在这个过程当中,一旦我们这个review be也结束之后,把它关闭之后,我们这里就整个全空了,对吧?大家还记得当时那个页面,那这个肯定是不对,所以我们要加一个表单,这个表单是干什么呢?就是我们的仲裁人能够在这个上面去直接把它点掉,对吧,就是结束这个拍卖,然后点掉的这个人不能是买家或者卖家啊,那他就是第三方托管人。
11:25
啊,当然大家在具体实现的时候,可能就想到这个,我们就不要这么去中心化,不要是任何一个人都能够点,你万一要是他他他这个找找了他哥们儿对吧,这个这个买家找了他哥们儿整一下这个到时候应别人这肯定也不行,所以那大家可能就是还是我们平台去做这件事情,对吧?那这是大家优化的一些考量了,我们这里面就直接用这种方式啊,大家会发现我们在HTML里面加这么一个表单,我把它复制过来加在哪里呢?这个是在product HTML对吧。加在哪里呢?是不是我们前边已经有了。
12:03
呃,大家看到已经有了两个表单对不对,一个叫be,一个叫reviewing,那接下来我们是不是在这里把这个添加进去啊,来一个final option对吧,那这样这样的三个表单我们就都已经放在了这里。
我来说两句