部署 Sui 本地或 devnet 开发环境

  • 安装 Rust 由于 Sui 是用 Rust 开发的,现阶段还没有独立的安装包,必须安装 Rust 的运行环境为前提,安装命令可参考:https://www.rust-lang.org/tools/install ,根据自己的操作系统选择不同的命令, 例如我的环境是 windows + wsl2(Ubuntu22.04), 选择: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh 安装 rust 后,执行如下命令验证其版本: rustup show

    显示结果 rust 的版本是 1.61.0 :

    .......
    stable-x86_64-unknown-linux-gnu (default)
    rustc 1.61.0 (fe5b13d68 2022-05-18)
    
  • 安装 Sui binaries

    安装 Rust 完成后,进入 Sui 本身的安装,Sui官方开发文档有详细介绍:https://docs.sui.io/build/install

    2.1 安装 curl 工具包,检查系统是已安装curl: which curl,如果已经安装 curl 会显示如下信息:/usr/bin/curl

    如果没有可以通过命令 sudo apt install curl 安装 curl,安装成功后可以重新运行which curl 验证是否安装成功。

    2.2 安装 clang 系统包 sudo apt install clang

    2.3 可选安装 build-essential 系统包,sudo apt install build-essential,如果 cargo 编译 rust 代码时出现如下错误就需要安装:the error linker 'cc' not found 。

    2.4 安装 Sui 开发网版本:cargo install --locked --git https://github.com/MystenLabs/sui.git --branch "devnet" sui,目前 Sui devnet 已经release 0.5.0了,但安装时显示 0.2.0, 不影响使用。 注意,在国内网络安装 Sui 时,可能会遇到如下连接github错误:fatal: unable to access 'https://github.com/MystenLabs/mysten-infra/': GnuTLS recv error (-110): The TLS connection was non-properly terminated. 我是重试超过10次才安装成功。安装成功后,执行验证命令:

    which sui-move which wallet which rpc-server

    至此 Sui 安装成功。

    wallet 连接 Sui devnet 或 本地网络

    安装好 Sui binaries 后,可以通过 wallet 命令与 Sui 网络交互,无论是 devnet 还是 本地开发网络, Sui官方开发文档有详细介绍:https://docs.sui.io/build/wallet。 第一次启动 wallet 命令,会默认连接 devnet,连续两次回车使用默认设置连接 devnet,默认的钱包配置文件路径是:~$HOME/.sui/sui_config/wallet.key和wallet.yaml两个文件。 注意新版本的 Sui 配置文件使用yaml格式,不是文档中说的conf。

    如果不想使用 devnet,可以指定配置参数启动本地开发网络(记得修改配置配置参数路径以适配所在电脑的文件路径):sui start --config /home/lshoo/.sui/network/config , Sui 网络启动后,可以看到配置参数上当创建了network,wallet,gateway,genesis, validator等配置文件,以及存储网络数据的目录:

sui started info
sui started info
sui config dir
sui config dir
 之后可以通过指定网络配置文件重启本地网络:`sui start --config ~/.sui/network/config/network.yaml`

  wallet 连接 Sui 网络有两种模式,一种是interactive shell(交互式):`wallt -i`,启动后不用再输入 wallet 命令,用输入子命令就行,还有自动补全功能,推荐此模式。例如获取当前地址,效果如下:
wallet interactive shell
wallet interactive shell

一种是Command line mode(命令行),每次都输入wallet + 子命令,例如: wallet active-address

wallet command line
wallet command line

wallet 连接到 devnet 后,需要到 discord 上的 dev-faucet (俗称水龙头)频道领取 gas,格式为:!faucet 0x7f9237bda5c21b44f2071cc659df7b8a27f9c4b1 (记得修改为自己的address),每个address只能领一次, devnet 升级会 把原来的数据清空,devent 升级后需要重新领取 gas,可以用创建地址命令 wallet new-address 生成个地址,然后再用新地址去领。

get faucet
get faucet
  • 本地创建 Move-lang pacakge

    首先下载 sui 的源码:git clone https://github.com/MystenLabs/sui.git, 官方推荐目录是: ~/sui:

sui codes
sui codes

在用户目录下创建 sui_code_repos 存放所有 sui 的 package 代码,在其目录下创建 medieval_cavalier_package,目录结构如下:

package dir
package dir

注意: Move.toml 中的 sui dependencies 的路径必须与实际的 sui 代码一致,否则会编译错误:

post image

代码写完后在命令行执行编译命令:sui-move build,确保能编译成功:

sui-move build successuful
sui-move build successuful
  • 部署 Move-lang package 到 devnet 或 本地网络

    把当前目录的 package 部署到 Sui 网络:wallet publish --path . --gas-budget 30000,部署结果如下:

package published
package published

其中红框内的 object id 就是 package 在网络的上 id,调用package的功能需要引用此 id。

  • 调用已经部署的 Smart contract

    例如调用module m1 中的 sword_create entry 函数后,数据已经变化:

wallet call entry function
wallet call entry function

可以看到 wallet call 命令中 --package 参数的值就是刚才部署后 package的 object id 。

源码如图:

function code
function code

至此,部署 Sui 本地或 devnet 开发环境全部完成!

欢迎引用!备注出处!感谢支持!