在Sui 区块链上创建、部署和管理 NFT 的完整教程
系列文章目录😊
Task1:hello_move🍀
Task2: move_coin🍀
Task3: move_nft🍀
目录
- 系列文章目录😊
- 前言
- 一、新建move项目
- 二、编译move合约
- 三、编写合约代码
- 四、部署合约到主网
- 1、切换当前的 Sui 客户端环境到主网
- 2、查看当前所有环境
- 3、查看当前地址
- 4、检查主网账户余额
- 5、将当前目录中的 Move 合约部署到主网,同时跳过依赖验证
- 五、在区块链浏览器查看NFT
- 六、转赠NFT
- 总结
前言
区块链技术正在逐渐深入各个领域,而 Sui 作为新一代高性能区块链,其独特的架构和 Move 编程语言吸引了大量开发者和爱好者。在本教程中,我们将从零开始,指导你完成一个简单的 NFT 铸造项目。通过创建、编译和部署一个 Move 智能合约,我们不仅能够在主网上实现 NFT 的铸造,还可以通过区块链浏览器 Suiscan 进行可视化查询,并使用 Suiet 钱包完成转赠操作。无论您是初学者还是有一定经验的开发者,这篇文章都将帮助您快速掌握相关技术要点。
一、新建move项目
sui move new my_nft
二、编译move合约
记得切换到新建的项目目录下噢。
sui move build
检查项目模板和环境配置,可以尽早发现潜在问题,确保后续开发流程顺畅无阻。
三、编写合约代码
如果大家完成task3的话,里面的一些信息需要改成自己的嗷。
module my_nft::display_nft {
// 引入标准库和 Sui 框架中的模块
use std::string; // 提供字符串相关功能
use std::string::{utf8, String}; // 提供 utf8 转换和 String 类型
use sui::tx_context::{sender}; // 获取交易的发送者
use sui::package; // 提供对象声明相关功能
use sui::display; // 提供对象展示功能
// 定义一个具有 key 和 store 能力的结构体,用于表示 NFT
public struct MyNFT has key, store {
id: UID, // 唯一标识符,标记 NFT 对象
name: String, // NFT 的名称
image_url: String, // NFT 的图片 URL
}
// 定义一个仅具有 drop 能力的空结构体,用于初始化 NFT 展示信息
public struct DISPLAY_NFT has drop {}
// 初始化函数,用于设置 NFT 的展示属性
fun init(otw: DISPLAY_NFT, ctx: &mut TxContext) {
// 定义展示信息的键(字段名)
let keys = vector[
utf8(b"name"), // 名称字段
utf8(b"link"), // 详情链接字段
utf8(b"image_url"), // 图片链接字段
utf8(b"description"), // 描述字段
utf8(b"project_url"), // 项目链接字段
utf8(b"creator"), // 创建者字段
];
// 定义展示信息的值(字段内容)
let values = vector[
utf8(b"{name}"), // NFT 的名称占位符
utf8(b"https://sui-heroes.io/hero/{id}"), // NFT 详情链接
utf8(b"{image_url}"), // 图片链接占位符
utf8(b"A true Hero of the Sui ecosystem!"), // 描述信息
utf8(b"https://sui-heroes.io"), // 项目官网
utf8(b"Unknown Sui Fan"), // 创建者信息
];
// 声明一个包对象,用于发布展示数据
let publisher = package::claim(otw, ctx);
// 创建并初始化展示信息对象
let mut display = display::new_with_fields<MyNFT>(
&publisher, keys, values, ctx
);
// 更新展示对象的版本信息
display::update_version(&mut display);
// 将发布者和展示对象转移到交易发送者名下
transfer::public_transfer(publisher, sender(ctx));
transfer::public_transfer(display, sender(ctx));
// 创建一个 MyNFT 对象,表示 NFT
let nft = MyNFT {
id: object::new(ctx), // 创建 NFT 的唯一 ID
name: string::utf8(b" display nft"), // 设置 NFT 名称
image_url: string::utf8(b"https://avatars.githubusercontent.com/u/167958904?v=4"), // 设置图片 URL
};
// 将 NFT 对象转移到交易发送者名下
transfer::public_transfer(nft, sender(ctx));
}
// 铸造 NFT 的入口函数
public entry fun mint(name: String, image_url: String, ctx: &mut TxContext) {
// 创建新的唯一 ID
let id = object::new(ctx);
// 初始化 MyNFT 对象
let nft = MyNFT { id, name, image_url };
// 将 NFT 对象转移到交易发送者名下
transfer::public_transfer(nft, sender(ctx));
}
}
四、部署合约到主网
因为我在上一篇文章已经创建一个新的客户端环境了,所以这里直接切换环境,大家可以看下这篇,来创建,在第五点。
1、切换当前的 Sui 客户端环境到主网
所有客户端操作(如发布合约、查询账户状态等)都会连接到主网
sui client switch --env mainnet
2、查看当前所有环境
3、查看当前地址
sui client active-address
4、检查主网账户余额
sui client gas
5、将当前目录中的 Move 合约部署到主网,同时跳过依赖验证
五、在区块链浏览器查看NFT
这里选择的suiscan区块链浏览器。
查到之后,点击package的Object ID
点击Digest哈希,就可以查看到具体的nft信息。
在suiet钱包里可以查看到我刚刚mint的nft。
六、转赠NFT
点进suiet钱包,找到你铸造的nft,点击send按钮,发送给这个地址就好啦。
总结
通过本教程,你已经学会了如何在 Sui 区块链上开发、部署并交互一个 Move 智能合约。从环境配置到合约编写,从主网部署到 NFT 铸造和管理,每一步都为您展现了 Move 语言的灵活性和强大功能。此外,通过 Suiscan 区块链浏览器和 Suiet 钱包的结合,能够方便地查看和操作资产。这不仅提升了对 Sui 生态的理解,也为你进一步开发区块链应用奠定了坚实的基础。