# 部署 Sui 本地或 devnet 开发环境

By [Untitled](https://paragraph.com/@0x0cc0bcd03097f63fd60b85361d6d1b5a50986d52) · 2022-06-29

---

*   安装 Rust 由于 Sui 是用 Rust 开发的，现阶段还没有独立的安装包，必须安装 Rust 的运行环境为前提，安装命令可参考：[https://www.rust-lang.org/tools/install](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](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/](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。](https://docs.sui.io/build/wallet%E3%80%82) 第一次启动 `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](https://storage.googleapis.com/papyrus_images/86216c3bbcefaad99f215ef3d0cc7cd348e47336507bad7e0aeafaa5da2f619a.png)

sui started info

![sui config dir](https://storage.googleapis.com/papyrus_images/7d52bb69bf479543a637b09a8aa64591d46a74586f71fd9ef42b42f817eefcbb.png)

sui config dir

     之后可以通过指定网络配置文件重启本地网络：`sui start --config ~/.sui/network/config/network.yaml`
    
      wallet 连接 Sui 网络有两种模式，一种是interactive shell（交互式）：`wallt -i`，启动后不用再输入 wallet 命令，用输入子命令就行，还有自动补全功能，推荐此模式。例如获取当前地址，效果如下：
    

![wallet interactive shell](https://storage.googleapis.com/papyrus_images/314e21e585d03998039e1479be0a0da4c0a0dabd644133b9889d71bf44b4b09b.png)

wallet interactive shell

一种是Command line mode（命令行），每次都输入wallet + 子命令，例如： `wallet active-address`

![wallet command line](https://storage.googleapis.com/papyrus_images/bb133cc450bd31cd2d7356a1e3103e8892d7a85f1b84b743d441a62a2a1177c9.png)

wallet command line

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

![get faucet ](https://storage.googleapis.com/papyrus_images/27951f11242965975a3c6cc08512017fc0501c09430edccfdd1752440f9ed8c9.png)

get faucet

*   本地创建 Move-lang pacakge
    
    首先下载 sui 的源码：`git clone https://github.com/MystenLabs/sui.git`, 官方推荐目录是: ~/sui:
    

![sui codes](https://storage.googleapis.com/papyrus_images/476a19d1f7225283eaf602729bf4ab499404294544da70f288acf148e913c554.png)

sui codes

在用户目录下创建 sui\_code\_repos 存放所有 sui 的 package 代码，在其目录下创建 medieval\_cavalier\_package，目录结构如下：

![package dir](https://storage.googleapis.com/papyrus_images/1913b35b79565f9edd835d53ca93f35f7960d518dfe4af3dcd052115d9957000.png)

package dir

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

![](https://storage.googleapis.com/papyrus_images/7ba1aab347afc318f9326d70372c778cc57e24971d99e13f4e0c1c7e80edf9f8.png)

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

![sui-move build successuful](https://storage.googleapis.com/papyrus_images/0103386ff6a2113909567f74954f1301f41799bff2042e6253d2ddc25113ebd7.png)

sui-move build successuful

*   部署 Move-lang package 到 devnet 或 本地网络
    
    把当前目录的 package 部署到 Sui 网络：`wallet publish --path . --gas-budget 30000`，部署结果如下：
    

![package published](https://storage.googleapis.com/papyrus_images/6d7d85801aba39e8a777b03adad17eb344aa3df2842b41a447e5cb335b9a35d2.png)

package published

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

*   调用已经部署的 Smart contract
    
    例如调用module m1 中的 `sword_create` entry 函数后，数据已经变化：
    

![wallet call entry function](https://storage.googleapis.com/papyrus_images/a1d589336d6075c08e5c4eca7d1bab2418bccf7824910de13e5fe8152e4dc3d6.png)

wallet call entry function

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

源码如图：

![function code](https://storage.googleapis.com/papyrus_images/09325d2d842faf61e5cbf89880cffd95f2c2560532215d2d78d9fc01c72d9ffc.png)

function code

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

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

---

*Originally published on [Untitled](https://paragraph.com/@0x0cc0bcd03097f63fd60b85361d6d1b5a50986d52/sui-devnet)*
