帖子
分享您的知识。
在 Sui Network 上精通动作:初学者和开发者完整指南
如果你参与过区块链开发,你可能会注意到Sui Network及其独特的编程语言——Move越来越受关注. 这不仅仅是另一种争夺开发者注意力的 “智能合约语言”. Move 为区块链编程带来了一种完全不同的思维方式——一种快速、安全且非常适合基于资产的应用程序的方式.
在这篇文章中,你将全面深入了解Move on Sui**——它是如何工作的,它有何不同之处,以及如何开始在此基础上进行构建. 我们还将探讨常见错误、最佳实践和实际成功秘诀.
##1. 什么是 Move,Sui 为什么要使用它?
Move是一种基于字节码的编程语言,最初由Meta(前身为Facebook)为Libra/Diem区块链开发. Sui 采用了 Move,但对其进行了扩展和优化以适应其以对象为中心的数据模型.
从本质上讲,Move旨在安全地管理数字资产. 像Solidity这样的传统智能合约语言将资产视为账户余额中的数字——但在Move中,资产是头等公民. 这意味着:
- 资产不能意外复制.
- 除非明确销毁资产,否则资产无法丢失.
- 资产必须有明确的所有权.
这种理念使推理资产安全变得更加容易,并防止了常见的错误和黑客攻击.
为什么 Sui 选择 Move:
***安全:**资产所有权在语言层面强制执行. ***速度:**使程序快速运行,避免不必要的计算. ***灵活性:**除了简单代币之外,您还可以创建自定义资产类型. ***并行执行:**Sui 的架构允许 Move 代码并行处理事务,从而提高吞吐量.
##2. Move 在 Sui 上的运作方式
当其他区块链按顺序执行交易时,Sui 将数据组织成对象. 每个对象:
- 拥有所有者(可能是用户、其他对象或系统).
- 只能由其所有者或特定的 Move 功能进行修改.
- 具有唯一的 ID.
Move on Sui 有三个主要概念:
- 对象
- 存储在链上的所有东西都是对象.
- 对象由 Move 模块存储和修改.
- 示例:硬币、NFT、游戏角色.
- 模块
- 用于存放移动代码的容器.
- 为对象的行为定义类型、函数和规则.
3.交易
- 用户采取的行动.
- 调用 Move 函数,传入它们拥有的对象.
##3. 将 Move 与 Solidity 进行比较
| 专题 | 移动(Sui)| Solidity(以太坊)| | ------------------------------------------------------------------| -------------------------------------------| |主要关注点| 资产安全、所有权 | 通用智能合约逻辑 | |数据模型| 基于对象 | 基于账户 | |执行| 并行化(当没有对象冲突时)| 顺序 | |类型安全| 类型强,无法复制/删除资源 | 松散型系统 | |安全| 防止双重支出和意外资产损失 | 常见问题:可重入、整数溢出 |
如果你来自 Solidity,你会注意到 Move强制你明确资产处理. 起初这有时令人沮丧,但这也是Move程序更难利用的原因.
##4. 在 Sui 上编写你的第一步模块
让我们来看一个基本的 Move 示例:一个创建和转移自定义代币的模块.
###创建代币
module my_project::my_coin {
use sui::coin;
use sui::transfer;
use sui::tx_context::{self, TxContext};
/// Create a new coin type
struct MyCoin has drop, store {}
/// Initialize a new coin and send it to the transaction sender
public entry fun mint(ctx: &mut TxContext) {
let coin = coin::mint<MyCoin>(1000, ctx);
transfer::transfer(coin, tx_context::sender(ctx));
}
}
解释:
struct MyCoin
定义新的硬币类型.mint
函数创建 1,000 个单位MyCoin
并将其传输给发件人.TxContext
允许访问交易详情(例如谁发送的).
##5. Move 的资源类型 — 秘密调味料
此举引入了资源类型,即不可复制、不可复制的数据结构. 用日常的话来说:如果你有一张10日元的钞票,你不能只是 “复制” 它——要么持有,要么赠送. 资源的运作方式相同.
在移动中:
struct MyCoin has key, store {
value: u64
}
key
**— 可以存储为顶级对象.store
**— 可以存储在另一个对象中.
如果你尝试复制资源,编译器将拒绝编译你的代码. 这样可以防止意外克隆资产的错误.
##6. Sui 专属移动扩展程序
Sui 对 vanilla Move 进行了几处更改,以使其针对基于对象的执行进行优化:
***动态对象字段:**创建对象后,您可以向其添加字段. ***共享对象:**多个用户可以与同一个对象进行交互. ***可变引用:**允许以受控方式更改对象数据. ***事件发射:**移动模块可以为链下监听器发出事件.
例如,创建共享游戏排行榜:
struct Leaderboard has key {
scores: vector<u64>
}
这可以由多个玩家更新,而不会造成区块链范围的瓶颈.
##7. 开发工作流程
以下是使用 Move on Sui 进行开发的基本工作流程:
- 安装 Sui CLI
curl -fsSL https://sui.io/install.sh | bash
- 创建新的 Move 套餐
sui move new my_project
3.sources
在文件夹中写下你的模块.
- 创建您的包裹
sui move build
- 发布到 Sui
sui client publish --gas-budget 100000000
- 使用以下方法调用函数:
sui client call --package <PACKAGE_ID> --module my_module --function my_function
##8. 测试您的移动代码
Sui Move 支持直接使用该语言进行单元测试.
示例:
#[test]
fun test_mint() {
let ctx = test::new_tx_context(@0x1);
my_project::my_coin::mint(&mut ctx);
// Add assertions here
}
运行测试:
sui move test
##9. 初学者常犯的错误
&mut TxContext
*忘记传递 txContext — 许多函数需要创建或传输对象.
*误解对象所有权— 如果你不拥有它,就无法对其进行变异.
*不处理资产销毁问题— 您必须明确地 “销毁” 不再需要的资源.
*无版本控制发布— 更新模块意味着发布新版本.
##10. Move on Sui 最佳实践
*使用明确的命名规范— 使代码可读. *限制共享对象的使用— 它们比拥有的对象慢. *针对状态更改发出事件— 帮助进行链下索引. *编写详尽的测试— 编译器捕获了很多,但逻辑错误仍然会发生. *记录您的模块— 将来你会感谢你的.
##11. 现实世界用例
*游戏资产— 每把剑、皮肤或宠物都可以是独一无二的物品. *NFT 市场— 内置所有权检查的安全转移和拍卖. *DeFi 协议— 使用安全资产处理进行贷款、质押和互换. *供应链跟踪— 将货物表示为在系统中移动的物体.
##12. Move on Sui 的未来
Sui's Move 语言仍在不断发展. 目前的工作包括:
- 更好开发者工具. *常见模式的标准库. *与其他区块链的互操作性.
随着采用率的提高,我们可以期待更丰富的文档、更大的开源项目以及与 Web3 基础设施的更深入集成.
##最后的想法
如果你真的想构建安全、高性能的区块链应用程序,那么 Move on Sui 值得你关注. 其严格但合乎逻辑的设计可帮助您避免所有类别的错误,同时实现传统基于账户的链上无法实现的创新用例.
无论你是在创建 DeFi 协议、游戏还是复杂的 NFT 生态系统,Move 都能为你提供构建更安全、更快的区块链未来的基石.
- Move CLI
- Move
- Smart Contract
答案
1你知道答案吗?
请登录并分享。
Move is an executable bytecode language used to implement custom transactions and smart contracts.
