介绍Move开发需要安装的配置以及如何在Sui上用Move写一份HelloWorld智能合约
进行Move开发必备的安装项包括Git,Sui CLI以及一个IDE,VSCode或者RustRover都可以,其他的工具都比较常见,下面仅展示Sui CLI的安装过程
Sui CLI可以用于编译、部署和测试Move智能合约,但它不仅仅是Move编译器,它可以管理Move合约的编译、发布、交互等操作,并执行其他与Sui节点交互的命令。这套工具是Sui生态系统中的官方CLI工具,提供了一个集成的开发环境。
Sui CLI可以使用Homebrew或是Chocolatey,本文使用最简单的二进制文件进行安装
在sui-cli的github地址中找到对应系统的最新的release版本(文件后缀为.tgz
)下载后使用windows系统自带解压的功能,将文件解压到你需要的路径中,解压结束后的文件有以下几个exe程序组成
名称 | 描述 |
---|---|
move-analyzer | 语言服务器协议实现。 |
sui | Sui 主二进制文件。 |
sui-bridge | Sui 原生桥接。 |
sui-data-ingestion | 捕获全节点数据供索引器存储到数据库中。 |
sui-faucet | 在本地网络上铸造代币的本地水龙头。 |
sui-graphql-rpc | Sui RPC 的 GraphQL 服务。 |
sui-node | 运行本地节点。 |
sui-test-validator | 在本地网络上运行测试验证器以进行开发。 |
sui-tool | 提供 Sui 实用工具。 |
下面是Windows系统和Mac系统的环境变量配置的方式
Path
变量,然后点击“编辑”。D:\Program Files\sui-cli
(你的 Sui CLI 文件夹路径)。sui --version
,以测试是否正确安装nano ~/.bashrc
export PATH="path-to-sui"
(你的 Sui CLI 文件夹路径)Ctrl+O
保存文件,然后按下 Enter
确认文件名。Ctrl+X
退出编辑器。source ~/.bashrc
sui --version
查看配置是否生效在需要创立项目的目录下打开cmd命令行,输入sui move new hello_move
,这个命令创建一个新的Sui Move项目文件夹,随后在vscode中打开该项目
此时move代码为灰白色,我们需要vscode的拓展中安装move syntax,来获得高亮的、可调试的move代码
在source
文件夹下的hello_move.move
文件中复制以下的hello word代码
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));
}
}
这个代码定义了一个简单的模块 hello_move::hello
,可以用来初始化一个“Hello”对象,并将其转移给当前交易的发送者
use std::ascii::{String, string};
等行代码是导入必要的库和模块
之后,程序定义了一个名为 Hello
的结构体,具有 key
特性。这是一个 Move
中的自定义对象,表示它可以用作链上资源
init
是一个公开函数,用于初始化 Hello
结构体对象并将其转移给交易发送者
ctx: &mut TxContext
:ctx
是一个可变引用类型的交易上下文,它用于获取创建对象所需的上下文信息
TxContext
是一个结构体,它包含了有关交易的上下文信息ctx
是 TxContext
类型的一个变量,表示当前交易的上下文&mut
表示一个可变引用(mutable reference),在sui中&
表示一个 不可变引用let hello_move= Hello{}
的部分创建了一个新的 Hello
对象
id
通过 object::new(ctx)
函数生成
object::new
表示调用 object
模块中的 new
函数。new
函数接收一个 TxContext
参数,根据交易上下文生成一个独特的 ID,确保不同的对象不会拥有相同的 ID。say
字段则通过 string(b"move")
设置成 "move"。transfer
函数将 hello_move
对象转移给交易的发送者,sender(ctx)
返回的是交易的发送者地址。
在 Sui 区块链中,TxContext
是一个重要的结构体,它包含了与当前交易相关的一些关键数据和操作,可以帮助智能合约安全地创建对象、获取交易发送者地址等。
TxContext
可以理解为是交易的“环境记录”,用来存储和追踪有关交易的一些重要信息。在一个智能合约(比如 Move 合约)运行时,TxContext
就像是一个助手,帮我们处理和保存交易过程中所需要的各种数据和上下文。
TxContext
通常包括了:
谁发起了这笔交易:
交易的发送者是谁(也就是账户地址)?通过 TxContext
,合约可以获取到发起交易的用户地址,这样合约就可以知道该把资产或信息分配给谁。
生成独一无二的 ID:
在区块链上,每一个资产或对象都需要一个独特的“身份证”(ID),以保证它是唯一的。TxContext
提供了生成这些独特 ID 的工具,以确保即使很多用户同时创建同种类型的资产,它们之间也不会混淆。
交易的其他信息:
TxContext
还会包含一些额外的交易信息,比如交易的时间、交易的标识等。这些信息虽然不是直接操作资产时必须的,但在一些复杂的合约逻辑中可能会有帮助,比如记录操作历史等。
接着我们就可以把刚刚编写的合约发布到链上啦
sui client faucet
获取测试用的sui代币sui move build
编译move合约
sui client publish
部署合约
区块链浏览器可以帮助我们查看链上交易、账户和智能合约的状态。Sui浏览器地址为 https://suivision.xyz/ ,
首页默认显示Sui主网,我们需要切换到刚刚部署的testnet上
通过过浏览器,我们可以查看到刚刚部署的合约啦!
在部署时遇到了严重的卡顿,使用了以下方式解决
$env:HTTPS_PROXY = "http://127.0.0.1:7897
set HTTPS_PROXY=http://127.0.0.1:7897
set HTTP_PROXY=http://127.0.0.1:7897
Move.toml
中依赖项的下载源从github换成gitee使用了以上步骤后还是遇到同样的问题,在文件资源管理器中打开了一个新终端执行命令设置代理,并把VPN开至全局模式后成功部署
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!