在 Sui 链上开发第一个 Move 合约

  • 小符
  • 更新于 2024-10-03 23:47
  • 阅读 674

Sui 是一个基于 Move 语言开发的高性能、去中心化的 Layer 1 区块链,旨在为去中心化应用(DApps)提供高吞吐量和低延迟的支持。

Sui 是一个基于 Move 语言开发的高性能、去中心化的 Layer 1 区块链。它由 Mysten Labs 团队开发,旨在提供高吞吐量、低延迟的去中心化应用(DApps)平台。Sui 特别注重可扩展性和用户体验,目标是为开发者和用户提供一个高效的区块链生态系统。

image.png

Move 是 Sui 链上智能合约编程的核心语言,并通过 Rust 编译和运行,Rust 用于实现 Sui 区块链的底层协议以及 Move 编译器。

一、安装Sui

Sui CLI 是为了方便与 Sui 网络交互,包括查询余额、发布合约和发送交易等操作。它提供必要的开发工具,简化复杂操作流程,提高开发和使用 Sui 区块链应用的效率,Sui CLI 是开发和管理智能合约的重要工具。

Sui 官方为多个系统提供一组二进制文件,可以在官方仓库下载,本文以Ubuntu22.04作为环境示例。

image.png

下载后进行解压($HOME 目录):

mkdir sui
tar -xvzf sui-mainnet-v1.34.2-ubuntu-x86_64.tgz -C ./sui

解压后主要使用的是 sui 二进制文件,运行其他文件可能需要有 Rust 环境,参考官方文档

$HOME/.bashrc 中添加环境变量:

export PATH=$PATH:~/sui

然后使用 source ~/.bashrc 加载新的环境变量。

检查是否安装成功:

$ sui --version
sui 1.34.2-c9ae0f9282a0

输出版本则表明安装成功。

二、测试网领水

可以用 sui 提供的客户端钱包地址进行开发:

$ sui client addresses

image.png

可以使用以下命令领水,一次可以领1SUI,可以写个 Bash 脚本方便多次使用。

curl --location --request POST 'https://faucet.testnet.sui.io/v1/gas' \
--header 'Content-Type: application/json' \
--data-raw '{
    "FixedAmountRequest": {
        "recipient": "<YOUR SUI ADDRESS>"
    }
}'

注意:<YOUR SUI ADDRESS> 替换为你的Sui钱包地址。

查询余额:

$ sui client balance
[warn] Client/Server api version mismatch, client api version : 1.34.2, server api version : 1.34.1
╭────────────────────────────────────────╮
│ Balance of coins owned by this address │
├────────────────────────────────────────┤
│ ╭─────────────────────────────────╮    │
│ │ coin  balance (raw)  balance    │    │
│ ├─────────────────────────────────┤    │
│ │ Sui   1000000000      1 SUI   │    │
│ ╰─────────────────────────────────╯    │
╰────────────────────────────────────────╯

三、开发合约

创建 hello_move 项目

可以直接使用 sui 命令生成项目结构:

sui move new hello_move

会创建一个hello_move 项目,查看项目结构:

$ cd hello_move
$ tree -l
.
├── Move.toml
├── sources
│   └── hello_move.move
└── tests
    └── hello_move_tests.move

Move.toml: 文件是 move 项目中的一个配置文件,主要用于管理项目的元数据和依赖关系。 sources: move 合约文件目录。 tests: 测试文件目录。

编写合约

sources 目录中的 hello_move.move 文件写入以下内容:

module hello_move::hello {
    use std::ascii::{String, string};
    use sui::object::{Self,UID};
    use sui::transfer::transfer;
    use sui::tx_context::{TxContext, sender};

    public struct Hello has key{
        id:UID,
        say: String
    }

    fun init(ctx: &mut TxContext) {
        let hello_move = Hello {
            id:object::new(ctx),
            say: string(b"move"),
        };
        transfer(hello_move, sender(ctx));
    }
}

1、 模块定义

module hello_move::hello 

定义一个名为 hello_move::hello 的模块。这是一个命名空间,用于组织相关功能和数据结构。

2、导入库

  use std::ascii::{String, string};
  use sui::object::{Self, UID};
  use sui::transfer::transfer;
  use sui::tx_context::{TxContext, sender};
  • std::ascii::{String, string}:引入标准库中的 String 类型和用于创建字符串的 string 函数。
  • sui::object::{Self, UID}:引入 Self 和 UID,Self 代表当前模块的类型,而 UID 是唯一标识符,用于标识 Move 对象。
  • sui::transfer::transfer:引入 transfer 函数,用于转移 Move 对象的所有权。
  • sui::tx_context::{TxContext, sender}:引入 TxContext(事务上下文)和 sender(发送者地址),用于获取当前交易的上下文信息。

3、定义结构体

  public struct Hello has key{
        id:UID,
        say: String
  }

定义一个公共结构体 Hello,并且它是一个键结构体(has key),这意味着 Hello 的实例可以在 Sui 区块链上被唯一标识和存储。 结构体包含两个字段:

  • id: UID:表示这个结构体的唯一标识符。
  • say: String:一个字符串,存储与这个结构体相关的信息。

4、初始化函数

 fun init(ctx: &mut TxContext) {
        let hello_move = Hello {
            id:object::new(ctx),
            say: string(b"move"),
        };
        transfer(hello_move, sender(ctx));
 }
  • fun init(ctx: &mut TxContext):定义一个公共函数 init,接收一个可变的事务上下文 ctx。这个函数用于初始化和转移 Hello 结构体的实例。
  • let hello_move = Hello { ... }:创建一个 Hello 的新实例:
    • id: object::new(ctx):生成一个新的 UID,作为 Hello 的唯一标识符。
    • say: string(b"move"):将字节数组 b"move" 转换为字符串,并赋值给 say 字段。
  • transfer(hello_move, sender(ctx)):调用 transfer 函数,将 hello_move 对象的所有权转移到当前交易的发送者。这样,hello_move 实例将被发送给交易的发起者。

发布(部署)

sui client publish 

输出如下:

image.png

交易摘要(交易哈希)为: 88VdCQL6cNwkMLgVpuXjfa6SxfR5JnY92vGedbSCf6gM ,可以在 sui区块链浏览器中查看交易详情。

四、总结

Sui 链自推出以来,致力于提供高吞吐量和低延迟的去中心化应用平台,与 Sui 一同发展的 Move 语言,作为其智能合约的核心语言,强调安全性和灵活性,适应复杂应用需求。Move 语言的特点在于其资源管理和权限控制,为区块链开发提供了更强的表达能力,受到了越来越多的开发者的关注。随着开发者社区的不断壮大,Sui 和 Move 将共同推动区块链技术的创新与应用,期待未来在各个行业中的广泛落地与应用。

玩得开心☕

点赞 0
收藏 1
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
小符
小符
0x6737...76B6
web3 builder