在 Sui 区块链上创建、部署与测试自定义 move _coin合约的完整教程

系列文章目录😊

Task1:hello_move🍀
Task2:move_coin🍀
Task3:move_nft🍀

目录

  • 系列文章目录😊
  • 引言
  • 一、更新本地代码
    • 1、查看当前项目的远程仓库信息。
    • 2、将远程仓库的最新代码同步到本地的代码分支
  • 二、创建一个新的 Move 项目
  • 三、编写合约代码
    • 1、编写yoona333Coin.move合约
  • 四、部署合约(测试网部署)
    • 1、在my_coin目录下,输入命令进行部署(测试网部署)
    • 2、查看部署到Sui区块链的信息
    • 3、进入Changes页面找到Object Changes
    • 4、调用 coin 模块中的 mint_and_transfer 函数
      • ①查看packageId
      • ②查看铸造代币的资金池对象
    • 5、查看铸造的代币
    • 6、再创建一个yoona333FaucetCoin合约
      • ① 进行编译
      • ②在my_coin目录下,输入命令进行部署(测试网部署)
  • 五、部署合约(主网部署)
    • 1、创建一个新的客户端环境,指向 Sui 主网的 RPC 节点
    • 2、切换当前的 Sui 客户端环境到主网
    • 3、查看当前所有环境
    • 4、检查账户余额
    • 5、检查主网账户余额
    • 4、将当前目录中的 Move 合约部署到主网,同时跳过依赖验证
  • 六、验证部署结果
    • 1、查看链上模块,找到你发布的模块 ID。
    • 2、调用 coin 模块中的 mint_and_transfer 函数
  • 总结

引言

本教程将带您完成在 Sui 区块链上创建、部署和测试自定义 Move 合约的全过程。从初始化一个新的 Move 项目到定义代币模块,再到在测试网和主网环境中部署合约,以及铸造和转移代币。通过这一系列操作,你将学会如何在区块链环境下高效开发并验证智能合约,完成完整的任务需求。

一、更新本地代码

1、查看当前项目的远程仓库信息。

找到你task1 Fork下来的代码,然后再任意目录下都可以。会列出项目中配置的所有远程仓库的名称及其对应的 URL。
origin: 是默认的远程仓库名称(可以配置其他名字)。
URL: 是远程仓库的地址
(fetch): 表示用于拉取代码的 URL
(push): 表示用于推送代码的 URL
常见的有:

添加远程仓库:git remote add origin 远程仓库名例如:git remote add origin https://github.com/yoona333/huan.git修改远程仓库:
git remote set-url origin 远程仓库名删除远程仓库:
git remote remove origin设置上游:
git remote add upstream 仓库名

如图,查看我们的远程仓库。
在这里插入图片描述

2、将远程仓库的最新代码同步到本地的代码分支

在这里插入图片描述
解释:
git fetch upstream
从名为 upstream 的远程仓库获取最新的更新。fetch 只是将远程仓库的更新下载到本地的 远程跟踪分支,不会自动与本地分支合并。
比如,upstream/main 会更新,但本地分支 main 还是原样。

git merge upstream/main
将 upstream/main 分支的最新代码合并到你当前所在的分支。upstream/main 是 fetch 后更新的远程跟踪分支。merge 会将这些更新应用到当前所在的分支,比如本地的 main。如果没有冲突,Git 会自动完成合并;如果有冲突,需要手动解决。

二、创建一个新的 Move 项目

初始化基本的文件和目录结构:
在文件夹 my_coin 中,工具会生成一个标准的Move 项目模板,包括:

Move.toml:项目的配置文件,定义项目的依赖项、模块名称等。
sources/:存放你的 Move 源代码文件。
tests/:存放测试用例代码的目录。
在这里插入图片描述

三、编写合约代码

1、编写yoona333Coin.move合约

创建一个自定义的代币,我这里是 YOONA333COIN,并初始化相关的元数据与初始代币分发。
在这里插入图片描述

以下是我的代码,可供参考。

module my_coin::yoona333Coin{   //定义了yoona333Coin模块//导入依赖
use sui::coin::create_currency;  
use std::option::{none,some};   
use sui::transfer::{ public_transfer,public_freeze_object};   
use sui::url::{Self,Url};    public struct YOONA333COIN has drop{}fun init(yoona333Coin:YOONA333COIN, ctx: &mut TxContext) {// let no = none<Url>();let url = url::new_unsafe_from_bytes(b"https://avatars.githubusercontent.com/u/167958904?v=4");  let yes = some<Url>(url);  let (treasury,coin_metadata) =create_currency(yoona333Coin,8,b"YOONA333COIN",b"YOONA333COIN",b"This is YOONA333COIN",yes,ctx);public_freeze_object(coin_metadata);   //冻结 coin_metadata 对象,使其不可再被修改。public_transfer(treasury,ctx.sender())    //将 treasury 对象(初始代币)转移到当前交易的发送者地址。}
}

四、部署合约(测试网部署)

1、在my_coin目录下,输入命令进行部署(测试网部署)

sui client publish

在这里插入图片描述

Transaction Digest:是这次交易的唯一标识符(类似交易的“哈希”),可以用来在链上查找这次操作的具体信息。

如果出现这个报错,就手动删除lock文件或者以管理员权限运行命令行,因为我pubilsh了两次。
这个文件是 Move 项目中的一种“依赖锁定文件”,用来记录当前项目所依赖的 Move 包的具体版本或状态。如果文件被破坏、占用或不兼容,就可能引发部署失败的问题。
在这里插入图片描述

2、查看部署到Sui区块链的信息

部署之后,得到Transaction Digest,然后去 Sui 区块链浏览器上进行查看。
在这里插入图片描述

3、进入Changes页面找到Object Changes

在这里插入图片描述

4、调用 coin 模块中的 mint_and_transfer 函数

输入命令来查看帮助文档,包括支持的参数、选项以及它的功能描述。

sui client call --help

在这里插入图片描述
在这里插入图片描述
解释:

sui client call
表示调用链上模块的一个函数。

--package 0x2
模块所在的包 ID:指定要调用的模块所在的 Sui 包 ID。
0x2 是系统包 ID,其中包含一些标准模块,例如 coin

--module coin
模块名称:指定调用的是 coin 模块。

--function mint_and_transfer
函数名称:指定调用的是 mint_and_transfer 函数。
该函数通常用于铸造新的代币,并将铸造的代币直接转移给指定的账户。

--type-args 代币类型所在模块id::模块名称::代币的结构体名称

--args 铸造代币的资金池对象(Treasurycap的object id) 铸造的代币数量 接收代币的目标地址
我这里写的是给另一个帐户进行铸币。

①查看packageId

刚刚我们在Sui区块链浏览器哩查看哈希了,然后现在找到package这条,点击,进来之后,就能找到啦。
在这里插入图片描述
在url上,这个就是packageId了。
在这里插入图片描述

②查看铸造代币的资金池对象

点进来之后,找到Treasurycap的object id,也是在url里获取。
在这里插入图片描述
在这里插入图片描述

5、查看铸造的代币

去查看接收代币的目标地址,我的代币叫YOONA333COIN,数量是10的8次方,也就是100个代币。发送给这个地址了,这是他在sui钱包上查看到的记录。就完成了铸造指定数量的代币并将其转移给目标地址
在这里插入图片描述

6、再创建一个yoona333FaucetCoin合约

这个模块是一个基础的“水龙头”(Faucet)合约,用于生成自定义代币并分发给用户。调用 init 方法会创建一种名为 YOONA333FAUCETCOIN 的代币,并将初始代币发送给调用者,同时冻结代币的元数据以确保其不可篡改。
a'g'f'f

我的代码示例:

module my_coin::yoona333FaucetCoin{   //定义了yoona333Coin模块//导入依赖
use sui::coin::create_currency;  
use std::option::{none,some};   
use sui::transfer::{public_share_object,public_freeze_object};   
use sui::url::{Self,Url};    public struct YOONA333FAUCETCOIN has drop{}fun init(yoona333FaucetCoin:YOONA333FAUCETCOIN, ctx: &mut TxContext) {// let no = none<Url>();let url = url::new_unsafe_from_bytes(b"https://avatars.githubusercontent.com/u/167958904?v=4");  let yes = some<Url>(url);  let (treasury,coin_metadata) =create_currency(yoona333FaucetCoin,8,b"YOONA333FAUCETCOIN",b"YOONA333FAUCETCOIN",b"This is YOONA333FAUCETCOIN",yes,ctx);public_freeze_object(coin_metadata);   //冻结 coin_metadata 对象,使其不可再被修改。public_share_object(treasury);    //将 treasury 对象(初始代币)转移到当前交易的发送者地址。}
}

① 进行编译

在这里插入图片描述
在这里插入图片描述

②在my_coin目录下,输入命令进行部署(测试网部署)

在这里插入图片描述

五、部署合约(主网部署)

1、创建一个新的客户端环境,指向 Sui 主网的 RPC 节点

会在本地配置中新增一个名为 mainnet 的环境,连接到主网的 RPC 服务

sui client new-env --alias mainnet --rpc https://fullnode.mainnet.sui.io:443

new-env:创建一个新的环境。
--alias mainnet:为这个新环境起一个别名,方便以后切换。
--rpc https://fullnode.mainnet.sui.io:443:指定主网的全节点 RPC 地址。
在这里插入图片描述

2、切换当前的 Sui 客户端环境到主网

所有客户端操作(如发布合约、查询账户状态等)都会连接到主网。

sui client switch --env mainnet

--env mainnet:选择之前创建的 mainnet 环境
在这里插入图片描述

3、查看当前所有环境

sui client envs

在这里插入图片描述

4、检查账户余额

发布合约需要支付 SUI 费用,因此确保主网地址有足够的 SUI。
查看当前地址

sui client active-address

在这里插入图片描述

5、检查主网账户余额

sui client gas

如果余额不足,可以从交易所购买 SUI,并转入你的地址。
在这里插入图片描述

4、将当前目录中的 Move 合约部署到主网,同时跳过依赖验证

在主网发布前,确保 Move 合约已经在 Devnet 或 Testnet 上充分测试,行为完全符合预期。可以使用以下命令在测试环境中发布。Move 合约会直接部署到 Sui 主网,但跳过依赖验证可能存在风险,尤其是在主网环境中发布合约时需要非常小心,因为主网上发布是不可撤销的

sui client publish --skip-dependency-verification

在这里插入图片描述

六、验证部署结果

1、查看链上模块,找到你发布的模块 ID。

将刚刚的Transaction Digest,复制到Sui区块链主网上,查询信息。
在这里插入图片描述

或者在控制台输入命令查看。

sui client objects

在这里插入图片描述

2、调用 coin 模块中的 mint_and_transfer 函数

在这里插入图片描述
然后去主网上查看此交易。

在这里插入图片描述
就可以看见你给这个账户铸造的代币啦。根据task2的需求,提交相应的id和hash,再提交代码就好啦。

总结

总结
通过本文的指导,我们成功完成了以下任务:初始化了 Move 项目、编写了自定义代币模块(包括 yoona333Coin 和 yoona333FaucetCoin),在测试网和主网上部署了合约,并通过实际调用验证了合约的正确性。借助详细的代码示例和部署流程,不仅掌握了基础的 Move 编程技巧,还体验了区块链合约开发的完整生命周期,为后续的任务或主网操作奠定了坚实的基础。

相关新闻

《Python编程实训快速上手》第九天--调试技巧

《Python编程实训快速上手》第九天--调试技巧

一、抛异常 异常类型分为两类&#xff0c;第一类是Python自带的异常类型&#xff08;见《Python编程快速上手》第一天---前三章打基础&#xff09;&#xff0c;第二类是自定义异常。 面对自定义异常类型&#xff0c;使用raise抛异常&#xff0c;类型值默认为Exception&#x…

2026/7/19 3:53:37 阅读更多 →
P4-1【应用数组进行程序设计】第一节——知识要点:一维数组

P4-1【应用数组进行程序设计】第一节——知识要点:一维数组

视频&#xff1a; P4-1【应用数组进行程序设计】第一节——知识要点&#xff1a;一维数组 项目四 应用数组进行程序设计 任务一&#xff1a;冒泡排序 知识要点&#xff1a;一维数组 目录 一、任务分析 二、必备知识与理论 三、任务实施 一、任务分析 用冒泡法对任意输入…

2026/7/17 12:21:32 阅读更多 →
深度学习笔记之BERT(二)BERT精简变体:ALBERT

深度学习笔记之BERT(二)BERT精简变体:ALBERT

深度学习笔记之BERT——BERT精简变体:ALBERT 引言回顾&#xff1a;ResNet对于反向传播的作用BERT的配置BERT的问题/缺陷ALBERTALBERT的策略BERT VS ALBERT 引言 上一节从 Word2vec \text{Word2vec} Word2vec上下文信息的局限性角度出发&#xff0c;介绍了 BERT \text{BERT} BE…

2026/7/18 8:18:27 阅读更多 →
2026 蜀山区回收行业整治,易奢福成合肥合规黄金回收示范门店 - 奢侈品回收实体店

2026 蜀山区回收行业整治,易奢福成合肥合规黄金回收示范门店 - 奢侈品回收实体店

前言:2026 合肥蜀山区回收整治浪潮,合规门店成市民首选 2026 年合肥市市场监管局联合公安、商务部门全面启动蜀山区黄金、奢侈品回收行业专项整治行动,依据《黄金以旧换新经营服务规范》团体标准、合肥市贵金属回收…

2026/7/19 19:49:13 阅读更多 →
欧米茄夜光手表维修保养服务指南权威公示(2026年7月最新) - 欧米茄服务中心

欧米茄夜光手表维修保养服务指南权威公示(2026年7月最新) - 欧米茄服务中心

欧米茄夜光手表的官方维修保养服务在2026年7月迎来最新更新:全国统一客服热线400-877-2083(在线时间为每日8:00至22:00)和官方售后地址均已正式启用,基础保养费用为2080元起,保养完成需3至5个工作日,更换配件一般…

2026/7/19 19:49:13 阅读更多 →
上海静安区电路维修怎么选?3 家主流服务商深度对比 - 匠心24小时快修

上海静安区电路维修怎么选?3 家主流服务商深度对比 - 匠心24小时快修

进入 2026 年梅雨季,上海静安区老旧小区线路受潮老化问题集中爆发,频繁跳闸、插座断电、线路漏电等故障不仅打乱日常起居节奏,更暗藏电气火灾等安全隐患。据本地家居安全调研数据显示,静安区房龄超 15 年的住宅中,…

2026/7/19 19:48:55 阅读更多 →
计算机科学学习路径与工程实践指南

计算机科学学习路径与工程实践指南

1. 当代大学生计算机科学学习现状分析计算机科学作为21世纪最具影响力的学科之一&#xff0c;正以前所未有的速度改变着我们的生活方式和产业结构。作为一名在IT行业摸爬滚打十余年的从业者&#xff0c;我见证了无数计算机专业学生的成长轨迹&#xff0c;也深刻体会到学习方法对…

2026/7/19 19:48:30 阅读更多 →
Android Handler消息机制详解与优化实践

Android Handler消息机制详解与优化实践

1. Handler消息机制概述在Android开发中&#xff0c;Handler是线程间通信的核心组件之一。它允许我们在不同线程之间发送和处理Message对象&#xff0c;实现异步消息传递。这种机制特别适用于需要在工作线程执行耗时任务后更新UI线程的场景。Handler的工作流程主要涉及以下几个…

2026/7/19 19:48:30 阅读更多 →
深入解析ISP核心:统计收集与SBL数据流管理

深入解析ISP核心:统计收集与SBL数据流管理

1. 项目概述&#xff1a;深入ISP的“大脑”与“交通枢纽”在任何一个现代相机系统&#xff0c;无论是你手中的智能手机&#xff0c;还是专业的单反相机&#xff0c;其成像质量的核心引擎&#xff0c;都离不开一个名为图像信号处理器&#xff08;ISP&#xff09;的专用硬件。它就…

2026/7/19 19:48:30 阅读更多 →
鸿蒙 ArkTS 实战:Emoji Idiom Guess 从表情成语猜谜到交互闭环完整解析

鸿蒙 ArkTS 实战:Emoji Idiom Guess 从表情成语猜谜到交互闭环完整解析

鸿蒙 ArkTS 实战&#xff1a;Emoji Idiom Guess 从表情成语猜谜到交互闭环完整解析 前言 Emoji Idiom Guess 是一个基于鸿蒙 ArkTS 编写的单页互动应用&#xff0c;核心围绕 表情线索、答案输入、首字母提示和收藏关卡 展开。项目没有依赖复杂服务端&#xff0c;也没有把逻辑…

2026/7/19 0:00:03 阅读更多 →
Unity与Python本地通信:基于Flask的跨语言数据交换实战

Unity与Python本地通信:基于Flask的跨语言数据交换实战

1. 项目概述&#xff1a;为什么我们需要一个本地通信服务器&#xff1f;在游戏开发、数字孪生、仿真训练等众多领域&#xff0c;Unity作为强大的实时3D内容创作平台&#xff0c;其核心逻辑通常由C#驱动。然而&#xff0c;当我们需要进行复杂的数据分析、机器学习推理、科学计算…

2026/7/19 0:00:04 阅读更多 →
科研课题设计全流程:从选题到成果落地的实战指南

科研课题设计全流程:从选题到成果落地的实战指南

1. 课题设计全流程解析&#xff1a;从选题到成果落地的实战指南课题设计是科研工作者、高校师生以及企业研发人员日常工作中的核心环节。一个优秀的课题设计不仅决定了研究的方向和质量&#xff0c;更直接影响最终成果的学术价值和应用前景。作为在科研一线摸爬滚打多年的从业者…

2026/7/19 0:00:04 阅读更多 →
鸿蒙 ArkTS 实战:Emoji Idiom Guess 从表情成语猜谜到交互闭环完整解析

鸿蒙 ArkTS 实战:Emoji Idiom Guess 从表情成语猜谜到交互闭环完整解析

鸿蒙 ArkTS 实战&#xff1a;Emoji Idiom Guess 从表情成语猜谜到交互闭环完整解析 前言 Emoji Idiom Guess 是一个基于鸿蒙 ArkTS 编写的单页互动应用&#xff0c;核心围绕 表情线索、答案输入、首字母提示和收藏关卡 展开。项目没有依赖复杂服务端&#xff0c;也没有把逻辑…

2026/7/19 0:00:03 阅读更多 →
Unity与Python本地通信:基于Flask的跨语言数据交换实战

Unity与Python本地通信:基于Flask的跨语言数据交换实战

1. 项目概述&#xff1a;为什么我们需要一个本地通信服务器&#xff1f;在游戏开发、数字孪生、仿真训练等众多领域&#xff0c;Unity作为强大的实时3D内容创作平台&#xff0c;其核心逻辑通常由C#驱动。然而&#xff0c;当我们需要进行复杂的数据分析、机器学习推理、科学计算…

2026/7/19 0:00:04 阅读更多 →
科研课题设计全流程:从选题到成果落地的实战指南

科研课题设计全流程:从选题到成果落地的实战指南

1. 课题设计全流程解析&#xff1a;从选题到成果落地的实战指南课题设计是科研工作者、高校师生以及企业研发人员日常工作中的核心环节。一个优秀的课题设计不仅决定了研究的方向和质量&#xff0c;更直接影响最终成果的学术价值和应用前景。作为在科研一线摸爬滚打多年的从业者…

2026/7/19 0:00:04 阅读更多 →
ai agent框架spring ai/alibaba 源码原理分析(六) agent和组件

ai agent框架spring ai/alibaba 源码原理分析(六) agent和组件

简介 saa是java的ai agent框架&#xff0c;本系列将深入剖析 Spring AI Alibaba 的源码实现与核心原理&#xff0c;不仅可以指导agent的开发&#xff0c;更可以改造框架&#xff0c;增加新特性 系列内容&#xff1a; 系列(一) 架构 完成 系列(三) 调用 I 工具 完成 II M…

2026/7/19 0:01:20 阅读更多 →
终极指南:如何用Steam-auto-crack实现Steam游戏自动破解

终极指南:如何用Steam-auto-crack实现Steam游戏自动破解

终极指南&#xff1a;如何用Steam-auto-crack实现Steam游戏自动破解 【免费下载链接】Steam-auto-crack Steam Game Automatic Cracker 项目地址: https://gitcode.com/gh_mirrors/st/Steam-auto-crack Steam-auto-crack是一款功能强大的Steam游戏自动破解工具&#xff…

2026/7/19 9:10:31 阅读更多 →
移动端游戏功耗测试实战:电流、功率、亮度和场景对比

移动端游戏功耗测试实战:电流、功率、亮度和场景对比

移动端游戏功耗测试:先控制变量,再比较优化是否真的省电 摘要:功耗测试最容易犯的错误,是拿两次不同温度、不同亮度、不同场景的平均功率直接比较。本文给出一套可复现的游戏功耗测试方法,覆盖引擎特性验证、版本回归和黑盒体验测试,并说明如何把功耗与帧率、温控、CPU/G…

2026/7/19 19:29:48 阅读更多 →