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

    // 为了增加丰富性,这边接着增加 杂货店 及 杂货店老闆 两个结构    struct Grocery has key { id:UID, profits:Balance<SUI> } //杂货店    struct GroceryOwnerCapability has key { id:UID } //杂货店老闆

杂货店的结构中,有加入一个profits,代表杂货店在卖了火腿跟麵包后,会将赚来的钱放在这里。
这边有将profits定义类型为 Balance,这里所使用的Token为SUI。

因为有用到新的类型,所以要在上面加入 use sui::balance::Balance;

    // 常数部分 则接着新增错误讯息    const EInsufficientFunds: u64 = 001; //购买时,金额不足    const ENoProfits: u64 = 002; //老闆要从杂货店领钱时,杂货店没有钱

错误代码的名称表现可以在叙述前加上E,有些也会将其完整呈现
如: Error_No_Profits ,这就依照个人喜好。

以上这些部分,在个人编写时,也不一定是一次写完,可以先把有用到的先编写,等后续如果有要用到不同的结构或函数,以及调用,再来补上也可以。
在把所需要的结构及常数建立完成后,接下来开始编写函数的部分。

module sandwich::shop {        use sui::object::UID;    use sui::balance::Balance;        struct Ham has key { id:UID }    struct Bread has key { id:UID }    struct Sandwich has key { id:UID }    struct Grocery has key { id:UID, profits:Balance<SUI> }    struct GroceryOwnerCapability has key { id:UID }        const HAM_PRICE: u64 = 10;    const BREAD_PRICE: u64 = 2;    const EInsufficientFunds: u64 = 001;    const ENoProfits: u64 = 002;        //函数    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));    }

在sui中,使用初始一次性执行,都以init命名为主。init多半用于赋予合约部署钱包权限,让其有权限对此合约进行操作。
后面(),为这个函数中,有需要从外部引用 结构、常数、手动输入值 等...时,要在()内填入。

首先 ctx 是指引用物件时,我们给他一个函数中所使用的替代物,名称可依照个人编译习惯命名,以全小写为主。
&mut是引用的意思,依带入参数的用途不同而调整,有2种:

&mut - 可变引用,在引用带入参数时,有要将其值进行改变,如 我&mut我的英雄,然后在函数内帮他增加力量,此时就是需要改变。& - 不可变引用,此引用就只单纯引用,不进行改变。如 我&我的剑,要将它装备到我们英雄上,然后把他的力量加到我的英雄,但剑本身并没有改变。
如果都不输入时,代表这个带入参数是外部输入,如 钱包地址、拥有的NFT。 非现在要部署的内容物,此时:后面是在定义其类型,有时也会将其定义为某个我们的结构。
此处我们 &mut TxContext,代表这里带入的参数就是我们的钱包,让此函数的内容与钱包做绑定。

关于作者: 网站小编

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

热门文章