关于 sui-move
面向 Sui Move 开发者的语言参考技能,按任务加载 Move 基础及事件、代币资料。内容聚焦资源安全、类型系统与对象模型,并提供常见规则和错误提示。
主要功能
- 01Move 类型、能力与资源安全参考
- 02事件与 Coin 操作指南
- 03按任务路由参考文件
- 04常见错误与安全规则提示
适用场景
- 01编写 Move 模块和结构体
- 02创建可替代代币并处理事件
- 03检查访问控制与对象销毁逻辑
MCP 相关
环境支持时,可查询 Sui 文档 MCP 服务以核实信息并补充参考文件未涵盖的细节。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ mystenlabs/ skills --skill sui-move安装后在 Claude Code 中输入/sui-move确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
events-coins.mdmove.mdevals/code-evals.jsonevals.json详细介绍
Sui Move
**MCP 工具:**如果你的环境中可以使用 Sui 文档 MCP 服务(
https://sui.mcp.kapa.ai),也请查询以获取最新答案。请使用它进行验证,并了解这些参考文件未涵盖的详情。
**来源限制:**本技能的所有信息仅来源于 docs.sui.io 和 move-book.com。扩展或更新本技能时,只能从这些来源获取内容。请勿使用第三方博客、教程或非官方文档。
Move 是 Sui 的智能合约语言,围绕资源安全和以对象为中心的数据模型设计。本技能涵盖核心 Move 语言:类型系统、能力、资源安全、事件和 Coin。
本技能会指向专门的参考文件。只加载与当前任务相关的文件。
参考文件(本技能)
move — Move 语言基础
路径: move.md
**适用场景:**编写 Move 代码、使用能力、TxContext、时间/Clock、init 函数、One-Time Witness、internal::Permit<T>、type_name 弃用项、包、模块、结构体、资源安全、访问控制模式、管理员轮换、拒绝列表、安全审查或高级设计模式(能力分级、幻影事件、共享对象并发、接收器语法、错误属性、transfer::receive、字段隐私、宏)。
**涵盖内容:**四种能力及常见组合、TxContext 方法、Clock 对象、init 函数、OTW 模式、internal::Permit<T> 类型级授权、type_name 弃用项、包和升级、模块、结构体、资源安全和对象销毁、完整的 Greeting 示例、管理员轮换(两步转让)、受监管的 Coin 和拒绝列表、安全审查清单、高级设计模式(能力分级、幻影类型事件、事件反规范化、共享对象 & 与 &mut、接收器语法顺序、#[error] 常量、transfer::receive 隐私、字段隐私、宏陷阱)。
events-coins — 事件和 Coin
路径: events-coins.md
**适用场景:**发出事件、在链下订阅事件、创建同质化代币,或使用 Coin 操作(铸造、销毁、拆分、合并)。
**涵盖内容:**事件发出、事件结构体要求、coin::create_currency、TreasuryCap、CoinMetadata、标准 Coin 操作。
相关技能(从单独的技能目录加载)
| 主题 | 技能 | 适用场景 |
|---|---|---|
| 对象模型、所有权、动态字段、集合、Display、转移模式 | object-model/ | 设计数据模型、选择所有权类型、使用动态字段或集合、设置 Object Display |
| 可编程交易块、命令、双花冲突 | ptbs/ | 构建 PTB、组合交易、赞助交易、排查交易错误 |
| 前端 dApp 开发、dApp Kit、钱包连接 | frontend-apps/ | 构建 React/Vue 前端、集成钱包、从浏览器查询链上状态 |
| 项目设置、Move.toml、依赖项、发布 | sui-move-project/ | 创建 Move 项目、配置 Move.toml、解决构建错误、发布包 |
| Move 2024 语法、方法语法、宏 | modern-move-syntax/ | 使用 Move 2024 版本功能,例如方法语法、vector 字面量、option/loop 宏 |
| 可组合函数设计 | composable-move-functions/ | 设计可组合到 PTB 中的函数、参数顺序、返回模式 |
| 单元测试惯例 | move-unit-testing/ | 编写 Move 单元测试、测试模式、expected_failure、清理 |
| 命名惯例 | naming-conventions/ | 命名错误、常量、能力、事件、getter、动态字段键 |
路由指南
| 任务 | 加载 |
|---|---|
| 编写带有 abilities 的 Move 结构体 | move |
| 使用 TxContext 或 Clock 对象 | move |
| 编写 init 函数或 OTW | move |
使用 type_name 函数 | move |
使用 internal::Permit<T> 证明模块权限 | move |
| 发布或升级包 | move |
| 销毁没有 drop 的对象 | move |
| 发出或订阅事件 | events-coins |
| 创建同质化代币 | move + events-coins |
| 设计对象数据模型 | object-model/ skill |
| 选择共享对象还是自有对象 | object-model/ skill |
| 使用动态字段或集合 | object-model/ skill |
| 设置 Object Display | object-model/ skill |
| 构建 PTB | ptbs/ skill |
| 实现赞助交易 | ptbs/ skill |
| 构建前端 | frontend-apps/ skill |
| 设置 Move.toml | sui-move-project/ skill |
| 编写完整的智能合约 | move + events-coins + object-model/ + naming-conventions/ + modern-move-syntax/ |
| 代码审查 | move + events-coins + composable-move-functions/ + naming-conventions/ + modern-move-syntax/ |
| 安全审查 / 访问控制审计 | move + object-model/(模式)+ events-coins |
| 高级设计模式 / 性能调优 | move |
规则
- 始终使用
object::new(ctx)创建 UID。没有其他方法。 - 当对象具有
store且调用来自定义模块之外时,使用public_transfer(而非transfer)。 - 事件结构体必须具有
copy和dropabilities。 - 不要对数值类型使用
as强制转换。使用from/into或try_from/try_into。 - 要销毁没有
drop的对象,请解包结构体,并对 UID 调用object::delete(id)。
常见错误
- 混淆
transfer和public_transfer。 非公开变体只能在定义它的模块内使用。从其他模块调用会导致编译错误。 - 忘记删除 UID。 销毁对象时,必须对 UID 字段调用
object::delete(id)。 - 误以为
ctx.epoch_timestamp_ms()的精度足够。 它返回 epoch 的开始时间。需要实时时间戳时,请使用 Clock 对象(0x6)。