创建对象
现在我们有了 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
函数