创建对象

现在我们有了 Castle 结构体,让我们在本课中创建一个城堡对象。

首先在 castle.move 中添加 build_castle 入口函数。

entry fun build_castle(size: u64, name_bytes: vector<u8>, desc_bytes: vector<u8>, ctx: &mut TxContext) {

}

输入参数:

  • size: 城堡大小,1 - 小型,2 - 中型,3 - 大型。
  • name_bytes: 以字节形式表示的城堡名称。类型 u8 向量是接受链外调用的字符串的方式。
  • desc_bytes: 以字节形式表示的城堡描述。
  • ctx: 当前事务上下文。

城堡对象具有唯一 ID,可以通过 sui::object::new 函数创建。

let obj_id = object::new(ctx);

然后我们需要生成城堡的序列号。调用我们在前一课中编写的函数。

use move_castle::utils;

let serial_number = utils::generate_castle_serial_number(size, &obj_id);

现在我们有了城堡需要的所有属性,创建城堡对象。

use std::string::{Self, utf8, String};

let castle = Castle {
    id: obj_id,
    name: string::utf8(name_bytes),
    description: string::utf8(desc_bytes),
    serial_number: serial_number,
};

最后,将城堡对象转移给事务发送者(城堡所有者)。

use sui::transfer;

let owner = tx_context::sender(ctx);
transfer::public_transfer(castle, owner);

一个完整的 build_castle 函数