sui move 学习 - 从头开始 教学 - 5

//函数    fun init(ctx: &mut TxContext) {        transfer::share_object(            Grocery{id:object::new(ctx),             profits:balance::zero<SUI>()});        transfer::transfer(            GroceryOwnerCapability {id:object::new(ctx)},tx_context::sender(ctx));    }

了解开头后,先来讲讲这个函数的用意,这个init的初始设定,是要将我们这个部署合约者,在之后拥有权限来卖材料以及,有权限把钱从杂货店里领走,如果没有设定,那就完蛋了,因为合约指认你的地址,所以我们必许告诉系统我们的钱包是现在这个,只有现在这个钱包拥有权限。
接着讲代码
transfer::share_object - 这里是调用了transfer,sui的预设模组,然后我们使用他的share_object的函数功能。
transfer 在sui中主要是传递相关的模组,主要传递object。
share_object 用于当我们要让任何人都有权限可以使用某个结构时,所要使用的。
这边会使用share_object的原因是,杂货店是公开上大家都可以来购买的,所以当后续要买火腿跟麵包时,是透过跟这间杂货店购买,这时会需要输入这间杂货店的ID,让系统知道我们是跟哪间杂货店买,所以需要分享他的关係。当然可能会有疑问,这样放在里面的钱,不就大家都可以拿? 这部分我们会在后续编写函数时,写一个提领杂货店款项的函数,而其中会有一个部分是,只有老闆才能执行这个动作的限制。

接着share_object(Grocery{id:object::new(ctx),profits:balance::zero()});
括号中,为share_object所需要给的参数,我们来看一下,原本sui预设的share_object他的样子

    public native fun share_object<T: key>(obj: T);     ///有需要可去官网看,连结在第一章的最后。找到transfer点进去找找。

我们可以看到,系统预设 share_object 的()中,只需要填入一个参数,也就是一个object。
object,就是我们在宣告结构时,如:Ham,Grocery中些,有UID的结构,在我们生成他时,他就是一个object。
而我们的所要放入的参数,就是Grocery。接下来{}的部分,则是另外我们要放入Grocery的参数,因为当我们要将Grocery分享出去时,代表他是必须被生成后,才能分享,所以这边等于是直接把它全部写在一行代码里。

Grocery 需要的参数,就是我们前面所些的有 id:UID , profits: Balance,这两个。
id:UID ,也就是赋予这个物件一个身份辨别Hash码,sui中要赋予就只需要,id:object::new(ctx),
我们调用预设 object的模组,其中new的函数。
我们一样看一下new预设的样子

 public fun new(ctx: &mut TxContext): UID {

这里面可以看到我们需要给他一个ctx,而他会返回一个UID,这也对应到我们要赋予id的值,而这个UID是系统随机生成的。而ctx就代表是我们部署者的钱包,他必须确认有一个地址去执行这个动作。(这部分我的理解是这样啦)

接着profits,我们所要给赋予他的是 balance::zero(),
这个意思是指,定义profits 是余额为0个SUI的意思。<>中的SUI是对应我们一开始在宣告他时,我们定义它是一个专门储存SUI的余额值。所以这边我们一样要输入。而zero就很直接代表他是0。
这边之所以要这么做,是因为sui中,当我们要生成每个物件时,如果他的定义中有几项内容,我们就一定要放入几个参数进去,不然系统会报错。

再来

transfer::transfer(   GroceryOwnerCapability{id:object::new(ctx)},tx_context::sender(ctx));

应该就比较好理解了,使用transfer模组中,transfer的函数,就是要传递的功能。
transfer的函数要有两个参数要填入,第一是要传递的object,第二是要传到哪个地址。
这边我们可以看到我们要传的是杂货店老闆的能力,那跟前面一样,生成他要给他一个UID,接着后面这段tx_context::sender(ctx),则是指,我们要传送到我们现在部署者的钱包的意思。

而这串代码,也就直接定义了我们的钱包是这间杂货店老闆的意思,之后要领钱时,只有我们这个钱包可以领。

因为这是init,初始函数,所以当我们部署合约时,这个函数将直接被启用,我们谁部署他,就直接获得身份。


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章