00:00
那接下来呢,我们当然这是有了基础数据结构了,对吧?在这个constructor里面构造函数里边直接上来计数器先给一个零做一个数值,这就是我们基本数据结构都已经放在这儿了,那接下来我们第一个要实现的功能,当然就是说你既然定定义好这个商品了吗?那我上来之后,我现在商场是一片空白,那是不是上来之后先得有商家,我上架商品了,所以第一步我们向商店里边去添加一个商品,实现这样一个功能,那大家可以看一下,就是我们这个功能主要是要做什么事,然后怎么样去做,呃,这里给把这个具体的流程都已经列在这里了,我们简单先过一下,首先就是呃,我们现在的想要做的事情是什么呢?就是项链上添加产品,然后要建立起它的索引,也就是我们的那个product ID,对吧,要把那个ID要写进去。呃,我们要做的这个具体步骤是什么呢?首先我们新建一个叫做a product to store函数,这就是我们要添加添加产品到商商店里边。
01:13
大家就会想到,如果一个商家要去真正上架产产品的时候,可能就是在网店网网页上去点一个按钮,然后这个按钮就会把它输入的产品信息提交到我们的后台,对吧?这里就提交到我们的以太坊节点那里去,那这里提交到以太坊节点我们要调的是哪个函数呢?就应该是调ADD product to store,对不对啊,这就是我们后台的处理啊,那它的参数是什么?就是要构建product数据结构所需要的内容。啊,所以就是大家会看到我们前面定义好的这些就应该是初始化的时候就应该都传进去了,对吧,商家上传图片那个产品信息的时候就应该都传进去,当然这里除了我们这里跟竞价相关的这些,对吧,最高的竞价者最呃第二高的这些,这些我们肯定不知道,所以这些我们初始化一下就可以,别的都可以传进去了。
02:11
好,那么大家就会发现第二步是什么呢?我们有了这个构造的参数之后,我们要做的事情是把product index加一计数器嘛,对吧,加一,然后这个就变成了它的product ID。就变成了这个产品唯一的标志ID,然后我们可能需要有一些前置的校验,用写一些require校验,这个你的竞拍时间要小于结束时间啊,这个其实大家如果做过开发的话,按道理我们在前端可能就需要做一下校验,对吧?前端你就不应该能让他输的那个结束时间能比这个开始时间还小,网页上就应该校验一遍,但是我们后台也应该再校验一遍,双重校验对吧?保证我们的逻辑没有错。然后我们会初始化这个product结构,那其实就是传进来的那些信息,我们都把它塞进去,对吧,填充进去,构建一个这样的product结构,然后存储到我们的stores这个mapping里边,对不对,这个里边我们就是要存对应的这个人上架的这个产品信息啊,把它存进去。
03:18
接下来大家就会发现,我们同时呢,在这一个product ID install,我们这个里边建立一个索引,就是我们的product ID对应哪个人,对应哪个商家,把这个索引添加进去,这里相当于于是一个产品的索引,这里是产品的具体信息,商家对应的产品具体信息。呃,最后我们就可能还会给一个这个get product对吧,就是你既然可以进去嘛,那我们要。添加进去的产品,我们怎么把它的产品信息获取出来呢?再添加一个get一个函数,这就是基本的一个想法,好,那么啊,另外这里有几个这个需要注意的点啊,就是一个拍卖的时候,我们是以秒为存储,呃,就是没为单位来存储开始和结束时间的,呃,大家这个这个注意一下,然后另外一个就是star price,它的单位我们这里用过,好这是两个基基本的单位定义,好那么接下来我们就来实现了,我们直接来敲代码吧。
04:24
呃,大家打开我们之前已经写好的这个合约文件,大家会看到我们定义的基本数据结构,还有这个基本的constructor都放在这儿了,对吧?在这个先把它先打开,然后我们就来看一下,首先要实现的应该是添加产品那一个函数对不对,Function。Function ADD叫什么来着?Product,对吧?Product to store,你就照着课件里边给的这个名称来写,呃,然后这个有哪些传入的参数呢?那大家可以想象得到,这个传入参数就多了,对吧?上面我们定义的这么一大串是不是都得传进来啊?好,那么大家就一个一个敲吧,String我们就用简单一点这种情况加一个下划线把它传进来,对吧?不要定义相同的这个变量,呃,一个name,然后string,一个category,然后string,一个image link,这个很多啊,String,一个description link。
05:36
然后下面还有一个you auction start time啊,当然这个大家如果要是太长的话,其实我们应该可以把它放下来,对吧?然后you in optionu,这个就比较枯燥啊,来就照着上面一个一个打就行了,呃,我我们这大家注意一下,还是不要给相同的这个变量名对吧,前面加一个下划线,把它分割开,Auction time,呃,然后大家就可以想到我们接下来剩下的。
06:20
是跟我们的竞价拍卖相关的数据,这里边有些我们就不应该传进来了,对吧?那首先看一下这个初始值,初始的静态价,诶这个应该是商家指定的,我们还应该传进来,对吧?所以再定义一个u start price,那后边这一个最高的竞价者竞价,呃,最高的竞价,最高出价,第二高出价,呃,所有的竞价数量,那这些当当然现在我们是不知道的,对吧?所以现在这些东西我们可以就没有了。另外大家看一下product status,这个是是否就是拍卖结束结拍卖的竞价状态,这个我们不需要传入,因为你创建之后应该默认就是开始拍卖,对吧?啊,但是它的这个是不是新新产新品牌是二手,这个我们应该传,所以后面还得去跟一个参数叫做production。
07:21
Product condition,好,那么我们这里去传入一个叫做,诶,这里我们真正传进来的其实不应该是一个这样的product condition的数据类型,对吧。大家注意一下,就是我们如果是这里接收数据的话,我们是不是都应该从前端调用的时候从那个页面传进来,对吧?我们在前端调用的时候,其实并不知道我们后台定义了这样一个枚举练习,所以我们要能传进来的其实只能是对应的012这样的一个状态,状态码,对吧?所以我们这里直接就给一个U的就可以,然后我们在合约里边把它转成我们对应的这个production这个condition的枚举类型,这样就可以了,Product condition,好,然后这是一个public变public类型的函数,好接下来我们看一下这个。
08:32
他这里会报错啊,我们看一下这个报错报什么哦,这是没有用的,呃,这个函数参数它直接会报错,这个我们就不用管它了,对吧?好,接下来我们看一下,首先我们是不是要有一些条件判断require啊,然后那肯定就是起拍的这个时间,Option start time1定要小于结束的时间,对吧,这边写错了啊好沈安好,呃,然后接下来大家会想到我们是不是要。
09:16
刚才我们说过的第二步是什么来着,要要把那个计数器要加一了,对吧,我们首先加进来这样的一个一个产品,一个商品,那我们的技术需要加一,这里为什么报这么多错看一下啊。哦,这里好像是这个缩进的这个。在这个Vs code里边他会报错,就是这个他认为这是一个呃,违反正常正常规则的这种缩进,对吧,放到这儿它可能就会好一点,果然这里就不报错了,那上面这里。好,这里还要爆是吧?啊,那我觉得这个应该不影响我们编译,对吧?这个它是一个缩性的错误,这个它的检查会比较严苛一点,呃,怎么了,应该没问题吧?好,接下来我们注意就是product index,我们要给它加一,大家知道原始的时候是零嘛,我们现在加一,所以新添进来的这个产品,它的ID就是一,好接下来我们是不是就可以先暂存一个product。
10:30
这样的一个数据结构,对吧?我们把传进来的这个东西,我们要构建一个真正的产品了,那这个产品我们现在还没想着要写到我们真正的状态变量里面,那我们其实这里应该定义一个memory类型,对不对啊,大家这里注意啊,如果我们不定义这个关键字,是不是它默认就应该是story类型啊,啊,我们这里其实是不需要的,要不然的话,这个就是它消耗的这个存储都是我们盖要浪费很高的GA,好,那么我们这里定义一个product。
11:01
它就应该等于构建一个我们对应的product对象,那他要的参数是什么呢?就会看到我们要把对应的所有的这些这些元素都传进去,对吧?好,那构建的时候I did应该是什么呢?那就是我们刚刚写好的product index,对吧?然后name是什么呢?那当然就是name了,Category那就是category,这都没什么好说的,对吧。然后image link,就是image link,同样description link我们也写进去,好,这里我们再给他多写几个啊,然后大家会想到接下来除了这个description link之之后的这个竞拍时间也是同样要写进去的option。
12:02
Start time啊,这个这会儿没有自动补补全,这个确实写的很痛苦,对吧?大家注意不要写错,手打的时候不要写错,And time同样写进去,然后还有start price,然后大家注意我们下边的这个最高的竞价者,最高竞价,第二竞价,然后总共的这个,呃,就是竞价的数量,是不是现在全没有啊,全没有对吧?全没有简单我们都给零就好了,几个零四个对吧?四个零好,然后接下来是它的产品状态,那么大家想到了这个产品状态,我们是不是直接给一个open就可以,那枚举类型大家应该知道怎么写对吧?呃,Product status。
13:01
然后点open,这是不是就是枚举类型,直接就把这个我们定义好的枚举类型写出来了,对吧?诶这里写错了,Product status.open然后最后还有一个condition,那是这个是我们前面已经传进来的,对吧?Product condition。好,所以大家看这这样的话,我们就已经定义好了一个这里有问题吗?Product又写错了对吧?好,接下来我们继续看,已经定义好这样一个product对象之后,那么我们是不是应该把它存到我们的商店里面去了啊?所以大家会想到我们应该存在什么地方呢?我们前面不是定义了商店吗?Stores它对应的那个mapping的key是什么呢?是我们当前的。
14:00
是我们当前的商家地址对吧?那我们当前的商家是谁?是messages.send好,那么它对应的是一个键,它对应的那个键又是一个mapping对吧?那个mapping是整个这个商家上架的所有产品的mapping,那这个mapping的K又是什么呢?K是它的ID,然后值才是我们对应的这个产品,对吧?所以我们这里再把它的ID传进去,是不是就应该是product index,好,那么这样取出来的这个值就应该是对应的我们的那个产品对吧?所以我们这里把product付给他,大家知道这里的product是一个memory类型,那这里的stores里边我们定义的这个状态变量应该是storage类型,对吧?这样的一个直接赋值是不是就会直接是一个值传递?不会只是是一个直拷贝,不会是引用拷贝,对吧?它就直接是。
15:01
把值要复制一份过去,那这个就实现了我们永久存储的一个一个目的,那memory这个执行完这个函数之后,Product这个memory类型的变量就会被系统回收掉,好,那最后我们还有一个就是还得添加在我们另外一个mapping里面添加索引,对吧,那个mapping我们叫pro。Product,呃,ID store对吧?S也是大写的啊,然后这里大家记得它的对应关系是product的ID对应到一个地址对不对,对应到一个商家地址,所以我们这里给到message点三好,这大家看到就是我们整个这个添加一个产品,添加一个商品上线的这样的一个函数,好,那刚才我们说了,你既然添加上去,我们还得能拿得到对不对,那最后呃,还得能查询得到,所以我们还要定一个get product这样一个函数,那这个其实大家会想到,我们要想去查一个产品的时候,我们需要传入什么样的参数呢?那最简单,其实就应该是给一个ID是不是就可以了,Product product ID。
16:22
也是public,这个我们不会改变什么东西,只是查,那应该是一个view,对不对,同样查询的话,肯定会有一个返回returns,那这个return可能东西就比较多了,那我们关心的很多东西是不是都应该有啊,首先我们应该想到这个,呃,是不是我们就整个的这个函数的数据类型,所有的这些东西我们正常来讲都应该返回啊,对吧?所以我们就直接把这个product它的这个数据类型全返回吧,首先ID返回,然后string返回。这个有点太多了啊,我直接从这里copy吧,看一下这边怎么写的,直接copy啊呃,大家会看到这其实就是把我们前面定义的这些数据类型都已经返回了,对吧?啊,当然好像还有点有点不够啊,四个string我们先复制过来看一下,最前面这个unit肯定是一个ID,然后后面四个string我们瞄一眼啊,这是哪四个string哦,这几个这肯定都对,对吧,然后接下来有有三个unit。
17:36
哦,那大家这个可以看到返回的应该只是这三个unit对吧,那看起来这个关于它的竞拍的信息,可能我们暂时不返回,到时候我们再返回对吧?现在刚刚上架这个不需要返回,那这个也是可以的啊,大家如果想返回也可以多定义几个数据结构啊,返回好,那么接下来我们已经定义好了要返回什么样的东西,接下来是不是我们就应该查到,根据这个ID在我们的状态变量里面查到对应的产品的信息,然后直接返回就可以了,所以我们这里product一个结构体,对吧?我们定义这样的一个变量,Memory product。
18:28
然后我们是要从数据库里边把它直接查出来,从我们的区块链的状态变量里面把它查出来,我们知道一个ID怎么样查这样一个这样一个product的数据类型呢?我们看到product数据类型应该是在我们的stores商店里边存在的,对不对?所以我们肯定是到stores里面去查,那stores stores查询的时候,我们需要的是什么东西呢?需要的是他的商店的,呃,就是那个商店商对商家的ID,对吧?所以前面我们要给的是商家的ID,有了商家的ID之后,我们再根据product ID就可以查到我们这个产品信息了,对吧?那前面商家的ID怎么拿到呢?
19:21
商家的ID,我们对应的信息又存到了一个叫做product ID in store里面,对不对?这个我们根据product ID就可以查到对应的商家ID,好,所以前面这一部分我们又是要用product ID in store对应的product ID把这个传进来,所以大家看一下写法稍微有点复杂对吧?但是我们搞清楚就是里边前面的这一部分,这就是商家ID,把这个拿出来之后,我们stores本身是一个嵌套,嵌套的VIP,那么stores后边商家的ID拿出来,就是这个商家上架所有产品,然后所有产品里边再根据product的ID就选取出来是对应的我们这个产品,对不对?好,这样就拿出来了,之后经常根据ID去查产品的时候,我经常要用这么一串东西,所以大家把这个先搞明白好,那接下来我们肯定就是。
20:22
就直接可以return了,对吧,都传查出来了嘛,那return的话,Return的是一组值啊,那大家就会看到我们首先是product.id这个是ID对不对,然后product.name。这是内,对吧?点categoryy,这是种类,同样product.image link,这是它的图片链接product点。Description link,这是这是它的这个描述的链接对吧?然后后面还有我们除了这四个string之外,接下来还有几个int,就是跟拍卖时间什么相关的,对吧?所以接下来是product哦,这个一回车之后它就不能自动补全了啊,那我们还是直接在后面先写着吧。
21:24
product.start应该叫option time对吧?product.option安排还有一个叫product.price对吧?然后我们还需要返回它的status和condition对吧?这个就大家就照着写就可以了,Condition好,但如果看着这个不太舒服的话,太长的话,我们把这个还是回撤回来吧好。
22:16
哎,我这个是不是上边多删了一个大括号对吧?好把这个补回来好,那么呃,这样一个我们都返回,其实这个函数就已经结束了,对吧,所以我们先存一下看看它这个状况啊,这里他报少了一个。啊,这里我们少了一个大括号。好,我们看一下这里还在报什么好,他说这个后边长度太长了,对吧?这个我们不用关心,大家看到的这个错误我们都看一下啊,这里应该是一个缩进的错误,我们也不用关心,这里是啊,八个缩进空格对吧?这个我们也不用关心,这里的warning大家也注意一下哦,他说你应该在require后面跟一个错误信息,对吧?那我们大家养成好习惯吧,我们根据他这个提示后边给一个错误信息,那这个如果说要报错的话,我们就应该说应该说什么?呃,Option start time should be,应该是更早一点,对吧,Earlier than an time,好,我们就报一个这样的一个错误,好,那接下来我们已经把这样的一个。
23:46
个简单的功能就是上传一个产品,然后把它进行查询,对吧?初始化之后进行查询,那接下来我们就可以做一些交互了,对吧?看一看我们现在这个状况怎么样好,呃,这里我先起一个gana啊,我们现在的这个测试大家可以也可以用那个穿develop,我这里因为GALA这边更方便的可以看到一些信息,对吧,它调用的一些信息,所以说用这个好,接下来我们要做的肯定就是compare。
24:20
先做一下编译好这边就可以看到这个了,对吧了,看一下。哦,所以大家会看到这个。呃呃,Invalid的conversion,那是我们这里直接把一个零转换成了这个我们的媒体类型,对吧?这个过程是有问题的,所以说我们在这里再改一下,我们在哪里做了这样的一个转变呢?啊,我们在这里对吧?啊这这里这个报错信息,我们刚刚它太偏后了,没看到我这个字体调的太大对吧?大家会看到这里是报了一个错的,就是说我们不能直做影视类型转换,从一个UN256直接转换到我们的枚举类型product condition对吧?所以我们要做的是什么呢?
25:18
我们做一个显示类型转换对不对,Product condition,好,我们把后边的个传进来的product condition,这个就应该是传进来一个零这样的值对不对,012这样的一个值,然后我们把这一个值直接用product condition做一个显示的强制类型转换,那么就把它转换成了我们自己定义的A类型,好,这个处理大家看现在没有错了对吧?好,我们这边好,这边改了,有可能还得进去一下,我们先穿compel一下看看。
26:05
好现在可以啊,好,现在我们这一个没有问题,对不对,那travel comp完了之后,我们是不是要migrate呀。这就是做部署了,对吧?我们已经熟悉窗口之后,会发现确实是窗口这边的做自动化的编译和部署确实还是很方便的,好,我这边已经搞定了,呃,那接下来我们部署好了之后应该做什么东西呢?我们是不是应该去首先先去控制台里边去做一下验证,对吧?我们部署的这个合约好不好使,能不能用,那接下来我们就开启一个tri pencil啊,其实大家如果要是不想在这边同时看到这个GALA这边的输出信息的话,自己直接起一个travel develop是不是在里边的所有的都能做了,对吧?呃,那我们我们现在还是用到的这个compel mgaratet conso这样的一个过程啊,好,接下来大家会看到,诶,大家这里要注意啊,大家看我们刚才这个好像有点问题,我们在M的时候好像有点问题,这个输出的是不是没有我们刚刚改的那个in commerce star。
27:20
对,因为我们大家知道为什么是吧,是不是我们的这个migration的脚本没改过啊,所以migration大家看这里边去做MIG的时候,还是migrations和voting这两个去做部署了,所以这个时候我们进去,如果大家这里想看这个e commerce store的时候,大家会发现如果他想要去deploy的话,肯定是会有问题的,对吧,我们还没有部署,所以好吧,我们先退出去。那大家还记得我们要做什么样的操作吗?我们是不是应该到migration这个下边去把我们的DEPLOY2DEPLOY contracts这个做一个更改啊,对,我这个就因为这个太容易敲错,我直接就从这边copy了啊e commerce。
28:11
好,我们把这个moting改成1COM store,同样前面我们这个定义也改了,对吧,改成in com store,这里的voing同样就变成了E,那当然我们这一个其实它的构造函数里边没有传任何参数,对不对啊,大家如果想给guess的话,可以指定guess,没有guess的话,我们直接就这样就好了,好,现在我们再来试一下啊,那这个时候我们如果要想想去做这样的一个migrate的话,最好后面就杠杠reset,对吧,重新来做一下,做一下这一个部署,做一下迁移,这就相当于刚刚reet表示就是重重新把之前的清理掉,对吧,不要再认之前的这种部署,我们重新做一个部署。
29:03
嗯嗯,好,这个还是比较快的啊,但这下就可以看到我们这里就是migrations和e store了,对吧?好,那现在我们再去进入到cons,就可以调用我们定义好的一个store这一个合约了。呃,那好,大家肯定还记得,就是我们在控制台里边,如果要想去调用这个合约,怎么去调用呢?呃,我们肯定就是e commerce store,对吧,然后点deploy,我们就直接这样就可以去调用了,对吧,Deployed,然后点Z,好,我们在这个调用之前先定义几个东西吧,因为我们经常要做那个数量转换的时候比较烦,对吧?大家可以看一下我们课件里边也给了这个,我们定义一个AMOUNT1,这个叫什么呢?叫WEB3点,呃,From to尾啊,我们用以态,这表示一个以态对不对?好。
30:06
那么这就表示一后面是呃,就是18个零这样的一个数,那这个数我们直接叫AMOUNT1之后我们直接转这个数就表示转了一个以态了,对吧?啊这个定义一个变量稍微简单一点,好,接下来另外我们还注意啊,还得需要一个当前时间对吧。呃,大家这个应该知道,那当前时间大家知道在JS里边怎么拿到当前时间吗。对,Date对吧,大家大家可能之前用过这里边new date的时候,大家会发现这是标准的这种,就是呃,标准时区的这种写法,对吧,叫叫呃,UUUTC还是叫什么我忘记了啊,就是世界标准时间这样的一种写法,它是一个字符串,呃,大家看到是年T后面然后时间,然后后面跟上对应的这一个就是毫秒对吧?那这里大家注意,我们如果要想把它转成一个时间戳,一个整形的话,可以直接给它除一或者乘一就可以了,对不对,这里就拿到了这个时间戳,但大家注意啊,这里JS里面我们直接用date拿到这个时间戳,它的单位是什么呢?
31:18
是毫秒,呃,大家可以这个我们随便开一个网页搜一下啊,上百度来看一下。呃,JS时间戳,诶这里有是吧,我们看看有没有对应的转换工具,我们看一下啊啊,我们我们不要敲GS了,直接敲这个时间戳。时间轴转换对吧。哎,我们网这么卡吗?哎哟,这个网络确实不行啊,呃,那那大家自己看看就可以了啊,这里我们随便可以敲一个,就是时间说转换,大家会。
32:04
这这是什么东西啊,大家会发现这个就是网络,如果要是不给力的话,确实是干什么都不给力,对吧。这打都打不开哈,大家可以去看,就是我们标准的这个UN time step,其实一般情况下,呃,定义的时候,那大家用的时候有两种方式,一种就是以毫秒为单位的,大家就会发现这里边这个位数是会比较多,呃,刚才我们这个弄了一下,大家现在再看一下,哎,这是我们刚才给的一个是吧,现在再给一下,大家会看到他的这一个。刚才我们很快的两次敲这个时间戳,大家会发现相隔已经是4000多了,对吧,所以它单位是毫秒,那我们这里在以太坊里边这个定义,我们应用里边不需要定义精确到毫秒对吧,你一个竞拍时间我还得精确到毫秒,我们又不是做这个什么精确。
33:04
又不是火箭发射对吧,这个肯定没必要,所以说我们这里怎么样把它变成一个。变成一个我们想要的一个就是以秒为单位的时间戳呢,其实很简单,我们既然能除一就能除1000,对不对啊,那这里大家会发现除了1000之后变成一个,变成一个浮点型了,带小数,那接下来怎么办呢?啊,我们有一个方法啊,我们定义一个current time,用什么方法呢?我们用math里边的一个wrong的函数,它是什么呢?直接四舍五入对吧?对,这就是四舍五入,所以我们把里边的这个date放在里边,然后给一个除以1000,好,你就看到现在是不是就拿到这个当前的时间戳了。好,那么大家可以再看一下,诶,我们现在就比刚才我敲的时候过了六秒对吧?呃,过了六秒对吧?对,所以这个其实是能看到这个时间的变化的,好,我们当前有了这个时间之后,我们现在是不是就可以定义我们一个对应的一个一个就是我们的一个product了,对吧?好,那么我们要调用emer store.deploy的点Z,那这个大家都知道了,我们首先拿到它的合约对象。
34:28
诶,然后在里边直接就可以调用它的方法对不对,我们的方法叫ADD product to store,然后后边就传参数,然后我们点赞就可以把它打印出来,对不对?呃,当然这是结果的一个打印啊,我们CTRl.log就可以,那前面这一串我就不单独敲了,大家可以参照我们这里边大家可以自己还是手敲一下啊,控制台交互我们传什么东西呢?传一串东西,就是我们定义好的名字叫什么,比方说我这里叫IPHONE6,然后它的类型是什么呢?是手机,然后我们这里随便给一个image link description link,然后后面传current time,对吧,这是我们的起拍时间对不对,然后之后这个是什么呢?加200,这是结束时间加200秒,那就是说三分三分多钟之后就结束了,对吧,然后后边AMOUNT1。
35:24
这是不是我们的起拍价格,然后后边注意这个condition直接穿一个零啊,这就是我们标准的这种用法对吧?好,我现在就直接把这个直接塞进去,大家看一下就完了啊,大家等一下自己试的时候自己去去手敲诶大家可以看到我这里面提交完了之后,异步呢,拿到了一个re received对吧,拿到了一个收据,交易的收据,那接下来我是不是可以去查询啊。查询的时候我就不需要这么复杂了,把这一串这个产品信息都删掉,后边点赞我就不给了啊,查询的时候我们是什么什么函数呢?Get product对不对?Get product后面给什么参数。
36:09
给一个ID对吧?大家还记得我们的函数对不对,大家忘记的话,我们反翻过来在这里再去看一眼,我们的A的时候给了一串,查的时候是不是只要给一个ID就能查出一串东西,好那么我们现在给一个ID,给一个一,刚才我们应该是第一个对不对,所以大家就会看到返回好第一个,这是它的一个big number,这是ID,它是big number类型,然后后面就是我们定义的IPHONE6,然后它是这个手机。下面是它的link对吧,然后下面的这几个也都是时间处,也都是big number的类型,所以我们在这里其实都可以看到的,那它的起拍价格这里是给的1万,但实际上它后面的零是18个零,对不对,所以是一个以态好,这是我们的这个查询过程,那大家想看的话还可以看到,那我可以查一,我们能查二吗?二应该能不能查出来,大家想一想,大家可以看一下,查出来全是零就是。
37:11
因为大家知道我们的这个数据状态变量的存储都是存在story里边的,对不对,它默认就全部都初始化了,零这样的一个数据结构,对吧?所以大家要查的话,其实也可以查,但是查出来就全是零,只是这样而已啊,这个我们既然定义的是mapping嘛,所以它不存在数组越界的问题,所以说这个你想想怎么查都可以好,那么这就是我们这一部分内容。
我来说两句