Sui Client CLI 命令行详解

本文详细介绍了 Sui 命令行界面(CLI)客户端常用命令,使用场景以及操作说明。

Sui 命令行界面(CLI)客户端命令提供了在命令层级与 Sui 网络进行交互的途径。“sui client” 的常见用途包括发布 Move 智能合约、获取某个对象的信息、执行交易或管理地址。

1. Commands命令

以下列表详细列举了 “sui client” 命令所有可用的子命令。

Usage: sui client [OPTIONS] [COMMAND]

Commands:
  active-address              获取默认使用的地址(当未指定地址时)。
  active-env                  获取默认使用的环境(当未指定环境时)
  addresses                   获取客户端管理的地址列表。
  balance                     列出某地址的代币余额。
  call                        调用 Move 函数。
  chain-identifier            从 RPC 端点查询链标识符。
  dynamic-field               通过地址查询动态字段。
  envs                        列出所有 Sui 环境。
  execute-signed-tx           执行已签名的交易。适用于用户在其他地方签名后,通过此命令执行交易。
  execute-combined-signed-tx  执行组合的已签名 SenderSignedData 字符串
  faucet                      向 Faucet 请求 Gas 代币(默认使用当前活跃地址和网络)。
  gas                         获取地址拥有的所有 Gas 对象(地址别名可替代地址)。
  merge-coin                  将两个代币对象合并为一个
  new-address                 生成新地址及密钥对,可指定密钥对算法类型 {ed25519 | secp256k1 | secp256r1} 和派生路径(默认为标准路径)。
                              支持助记词词组长度设置 { word12 | word15 | word18 | word21 | word24},默认 word12。
  new-env                     添加新的 Sui 环境。
  object                      获取对象信息。
  objects                     获取某地址拥有的所有对象(地址别名亦可)。
  pay                         使用输入的代币向收款人支付指定金额,收款人和金额数量必须相等。
  pay-all-sui                 将剩余的所有 SUI 代币支付给收款人(扣除 Gas 费用)。输入代币包括支付 Gas 的代币,无需额外 Gas。
  pay-sui                     支付 SUI 代币给收款人,输入代币包括支付 Gas 的代币,无需额外 Gas。收款人和金额数量必须相等。
  publish                     发布 Move 模块。
  split-coin                  将一个代币对象分拆为多个代币。
  switch                      切换活跃地址和网络(如 devnet、本地 RPC 服务器)。
  tx-block                    获取指定交易区块的执行效果。
  transfer                    转移对象。
  transfer-sui                转移 SUI 并用同一 SUI 代币支付 Gas。如果指定金额,则仅转移该金额;否则转移整个对象。
  upgrade                     升级 Move 模块。
  verify-bytecode-meter       运行字节码验证器检查程序包。
  verify-source               验证本地 Move 程序包是否与链上程序包及其依赖项匹配。
  profile-transaction         分析交易的 Gas 使用情况。若未指定输出路径,则生成文件 gas_profile_{tx_digest}_{unix_timestamp}.json,可用如 speedscope 等火焰图工具查看。
  replay-transaction          重放指定交易以查看效果。设置环境变量 MOVE_VM_STEP=1 可用于调试。
  replay-batch                重放文件中列出的多笔交易。
  replay-checkpoint           重放某一检查点范围内的所有交易。
  help                        打印此消息或指定子命令的帮助信息。

Options:
      --client.config <CONFIG>  设置用户账户状态存储的文件(若文件不存在,将自动创建一个空文件)。
      --json                    以 JSON 格式返回命令输出。
  -y, --yes                     自动确认操作提示。
  -h, --help                    打印帮助信息。

2. 示例

以下示例展示了一些最常用的命令。本文的操作环境是windows 11, RustRover 2024.2.4

2.1 列出可用的网络环境

使用 sui client envs 命令可以查看在 CLI 中设置的网络环境。这些环境的信息也会存储在 Sui 配置目录中的 client.yaml 文件里(路径为 ~/.sui/sui_config)。

PS D:\data\web3\letsmove> sui client envs         
╭─────────┬─────────────────────────────────────┬────────╮
│ alias   │ url                                 │ active │
├─────────┼─────────────────────────────────────┼────────┤
│ testnet │ https://fullnode.testnet.sui.io:443 │        │
│ mainnet │ https://fullnode.mainnet.sui.io:443 │ *      │
╰─────────┴─────────────────────────────────────┴────────╯
PS D:\data\web3\letsmove> cd ~/.sui/sui_config
PS C:\Users\Administrator\.sui\sui_config> 

注意: 我本地有两个环境地址 testnet 、mainnet, windows路径地址比较长下文的地址都有$替代,这些命令基本上实操一遍基本上就记住了。

2.2 创建新的网络环境

使用 client new-env 命令可以为新网络环境添加详细信息。设置 alias 值可以减少引用该环境时发生拼写错误的可能性。运行该命令后,Sui 会在 ~/.sui/sui_config 目录下的 client.yaml 文件中更新新的环境信息。

$ sui client new-env --alias=devnet --rpc https://fullnode.devnet.sui.io:443
Added new Sui env [devnet] to config.
$ sui client envs                                                           
╭─────────┬─────────────────────────────────────┬────────╮
│ alias   │ url                                 │ active │
├─────────┼─────────────────────────────────────┼────────┤
│ testnet │ https://fullnode.testnet.sui.io:443 │        │
│ mainnet │ https://fullnode.mainnet.sui.io:443 │ *      │
│ devnet  │ https://fullnode.devnet.sui.io:443  │        │
╰─────────┴─────────────────────────────────────┴────────╯

这里我们加的是开发网环境 devnet

2.3 切换当前网络环境

使用 sui client switch 命令可以切换当前的网络。这个示例将当前网络切换到主网(mainnet)。

$ sui client switch --env mainnet
Active environment switched to [mainnet]

2.4 获取当前活跃地址

使用 sui client active-address 命令可以显示当前的地址。当您没有提供 Sui 地址时,CLI 会使用当前的活跃地址来执行与地址相关的命令(如 sui client objects)。

$ sui client active-address
0x1546f533333b358a8edddd38a8e8967583883e82ca7de604d5bba15e20e493d2

2.5 从 水龙头(faucet,一般指获取测试币的服务)请求 SUI 代币

如果您使用的是标准的公共 RPC(例如 fullnode.testnet.sui.io:443),可以使用 faucet 命令请求 Gas 代币。如果您使用的是自定义的 faucet 服务,可以通过 --url 选项传入 faucet 的 URL。

$ sui client faucet               
Request successful. It can take up to 1 minute to get the coin. Run sui client gas to check your gas coins.

image.png

可以看到从主网请求代币是报错的。

2.6 获取某地址拥有的对象

使用 sui client objects 命令可以列出当前活跃地址拥有的对象的摘要信息。

$ sui client objects 0x1546f533333b358a8edddd38a8e8967583883e82ca7de604d5bba15e20e493d2
[warn] Client/Server api version mismatch, client api version : 1.37.1, server api version : 1.38.0
╭───────────────────────────────────────────────────────────────────────────────────────╮
│ ╭────────────┬──────────────────────────────────────────────────────────────────────╮ │
│ │ objectId   │  0x257294f8eba62c2933f6b81a61e4be002d8f0d6fb7a79ffd1e19637f28da3b70  │ │
│ │ version    │  206232112                                                           │ │
│ │ digest     │  rZnLlg1aobn2tJssx4Yz+Fln6loFhel7UxSjCR8oiLI=                        │ │
│ │ objectType │  0x0000..0002::display::Display                                      │ │
│ ╰────────────┴──────────────────────────────────────────────────────────────────────╯ │
│ ╭────────────┬──────────────────────────────────────────────────────────────────────╮ │
│ │ objectId   │  0x3207bba404f9851236769ff4074c903a24f6d5db671c2d9174402f393cdedf21  │ │
│ │ version    │  206232111                                                           │ │
│ │ digest     │  b1lKOhbUanvpDKuBuZQwZDZqj23n1BW7qiJRr1THJhs=                        │ │
│ │ objectType │  0x0000..0002::package::UpgradeCap                                   │ │
│ ╰────────────┴──────────────────────────────────────────────────────────────────────╯ │
│ ╭────────────┬──────────────────────────────────────────────────────────────────────╮ │
│ │ objectId   │  0x729b8951cfa5b1fc0341e61777a2a08f76ac59db9888a603025fd318873807c5  │ │
│ │ version    │  206232111                                                           │ │
│ │ digest     │  2nIVUikPmDZp6u+kraGRowvuranmvg05poDnn6mhIOs=                        │ │
│ │ objectType │  0x4ed9..79f1::hello::Hello                                          │ │
│ ╰────────────┴──────────────────────────────────────────────────────────────────────╯ │
│ ╭────────────┬──────────────────────────────────────────────────────────────────────╮ │
│ │ objectId   │  0x8022a00f250d39300e38387f13faacd071775cfd21acf37e6a5363bd68f802e8  │ │
│ │ version    │  206232112                                                           │ │
│ │ digest     │  W1M8dkIhrathlirNdnMUgbxWjQadfuvMf6pWLTwmmOQ=                        │ │
│ │ objectType │  0x0000..0002::coin::Coin                                            │ │
│ ╰────────────┴──────────────────────────────────────────────────────────────────────╯ │
│ ╭────────────┬──────────────────────────────────────────────────────────────────────╮ │
│ │ objectId   │  0x9128d0283773df8b90ff73ea54342ad44e0bda3f66c43c25ba90461bb06518ea  │ │
│ │ version    │  206232127                                                           │ │
│ │ digest     │  9zBvA/JYbT+7LLN4IH7tfXRwbc29eZxsXbkzNS6Vzb0=                        │ │
│ │ objectType │  0x0000..0002::coin::Coin                                            │ │
│ ╰────────────┴──────────────────────────────────────────────────────────────────────╯ │
│ ╭────────────┬──────────────────────────────────────────────────────────────────────╮ │
│ │ objectId   │  0x949c0740fb14de48cfd2b170d3cf3fbf0d52bbef0bc1b56705c0122c433975b9  │ │
│ │ version    │  206232112                                                           │ │
│ │ digest     │  yP9KUHdkRqg6KclvkFbCIJ8aYgMN8kv+PKFOKvCXc1E=                        │ │
│ │ objectType │  0x0000..0002::package::Publisher                                    │ │
│ ╰────────────┴──────────────────────────────────────────────────────────────────────╯ │
│ ╭────────────┬──────────────────────────────────────────────────────────────────────╮ │
│ │ objectId   │  0xaf890febac8aa68b0bc732e7d9b90d59ab7baf5dd1e1bfde46f0ff0230708f7c  │ │
│ │ version    │  206232112                                                           │ │
│ │ digest     │  v+4bXhqElbQka+VQn8juklvJ7j6VDbkxGVksXtttCtc=                        │ │
│ │ objectType │  0x0000..0002::package::UpgradeCap                                   │ │
│ ╰────────────┴──────────────────────────────────────────────────────────────────────╯ │
│ ╭────────────┬──────────────────────────────────────────────────────────────────────╮ │
│ │ objectId   │  0xb91f1fa09a6e4c944b5bba7b9b04adbfe1c93e45f9d5e8075ac08f2baaef7b03  │ │
│ │ version    │  236172857                                                           │ │
│ │ digest     │  qrkWgFHKoRVJzhXAqVebVEgxhFmN763OsyYQsBA65GY=                        │ │
│ │ objectType │  0x0000..0002::coin::Coin                                            │ │
│ ╰────────────┴──────────────────────────────────────────────────────────────────────╯ │
╰───────────────────────────────────────────────────────────────────────────────────────╯
PS D:\data\web3\letsmove>

2.7 获取完整的对象信息

使用 sui client objects 命令可以列出当前活跃地址拥有的对象的摘要信息。

$ sui client object 0x8022a00f250d39300e38387f13faacd071775cfd21acf37e6a5363bd68f802e8
╭───────────────┬─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ objectId      │  0x8022a00f250d39300e38387f13faacd071775cfd21acf37e6a5363bd68f802e8                                                 │
│ version       │  206232112                                                                                                          │
│ digest        │  79ViUFB8xQd3D9PxTX3168UfQm568e8ovynZAXdPbbDu                                                                       │
│ objType       │  0x2::coin::Coin<0x2::sui::SUI>                                                                                     │
│ owner         │ ╭──────────────┬──────────────────────────────────────────────────────────────────────╮                             │
│               │ │ AddressOwner │  0x1546f533333b358a8edddd38a8e8967583883e82ca7de604d5bba15e20e493d2  │                             │
│               │ ╰──────────────┴──────────────────────────────────────────────────────────────────────╯                             │
│ prevTx        │  EdDcDRFa4roqykWbgPfEfxbjB6EDodQ9gfeg7Y68nS7K                                                                       │
│ storageRebate │  988000                                                                                                             │
│ content       │ ╭───────────────────┬─────────────────────────────────────────────────────────────────────────────────────────────╮ │
│               │ │ dataType          │  moveObject                                                                                 │ │
│               │ │ type              │  0x2::coin::Coin<0x2::sui::SUI>                                                             │ │
│               │ │ hasPublicTransfer │  true                                                                                       │ │
│               │ │ fields            │ ╭─────────┬───────────────────────────────────────────────────────────────────────────────╮ │ │
│               │ │                   │ │ balance │  973569040                                                                    │ │ │
│               │ │                   │ │ id      │ ╭────┬──────────────────────────────────────────────────────────────────────╮ │ │ │
│               │ │                   │ │         │ │ id │  0x8022a00f250d39300e38387f13faacd071775cfd21acf37e6a5363bd68f802e8  │ │ │ │
│               │ │                   │ │         │ ╰────┴──────────────────────────────────────────────────────────────────────╯ │ │ │
│               │ │                   │ ╰─────────┴───────────────────────────────────────────────────────────────────────────────╯ │ │
│               │ ╰───────────────────┴─────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰───────────────┴─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
PS D:\data\web3\letsmove>

2.8 获取对象的动态字段

使用 sui client object <OBJECT-ID> 命令可以列出您提供的对象 ID 的详细信息。此示例显示一个 Coin 对象的信息。

PS D:\data\web3\letsmove> sui client dynamic-field 0x5
╭─────────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ hasNextPage │  false                                                                                                                                   │
│ nextCursor  │  0x5b890eaf2abcfa2ab90b77b8e6f3d5d8609586c3e583baf3dccd5af17edf48d1                                                                      │
│ data        │ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│             │ │ ╭────────────┬─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │ │
│             │ │ │ name       │ ╭───────┬───────╮                                                                                                   │ │ │
│             │ │ │            │ │ type  │  u64  │                                                                                                   │ │ │
│             │ │ │            │ │ value │  2    │                                                                                                   │ │ │
│             │ │ │            │ ╰───────┴───────╯                                                                                                   │ │ │
│             │ │ │ bcsName    │  LQM2cdzDY3                                                                                                         │ │ │
│             │ │ │ type       │  DynamicField                                                                                                       │ │ │
│             │ │ │ objectType │  0x0000000000000000000000000000000000000000000000000000000000000003::sui_system_state_inner::SuiSystemStateInnerV2  │ │ │
│             │ │ │ objectId   │  0x5b890eaf2abcfa2ab90b77b8e6f3d5d8609586c3e583baf3dccd5af17edf48d1                                                 │ │ │
│             │ │ │ version    │  252902182                                                                                                          │ │ │
│             │ │ │ digest     │  BF25ojsa2WAPCjgpW5CE6RR9sT4H6SonsSP5tFRsUbdE                                                                       │ │ │
│             │ │ ╰────────────┴─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │ │
│             │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰─────────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
PS D:\data\web3\letsmove>

2.9 发送 SUI 或对象

如何将 SUI 进行转账或者将一个对象从一个地址转移到另一个地址。首先,用于发送 SUI 或转移对象有两个主要命令:pay(支付)和 transfer(转移)。pay 和 transfer 都有几个相关联的命令:pay - sui、pay - all - sui、transfer - sui。

这些命令之间的区别如下:

  • 以 - sui 结尾的命令处理的是 Sui 的原生货币,它们使用输入的货币来支付 gas 费用以及用于转移 SUI 或对象。
  • pay - 系列命令通常处理货币并为你处理 gas 费用的扣除,而 transfer 命令可以处理任何具有公开转移属性的对象的转移,也就是说任何具有存储能力的对象。
  • pay 命令允许你将货币发送给多个接收者,而 transfer 命令只接受一个接收者。
  • pay - all - sui 是 pay - sui 的一种特殊情况,它提供了一种在扣除 gas 费用后转移全部余额的方式。
  • transfer - sui 是一个旧命令,并且根据是否指定了金额,它已经完全被 pay - sui 或 pay - all - sui 所取代。
    1. 需要有两个账号,我只有一个地址用 sui client new-address ed25519 leon-dev1024 创建一个地址并定义别名
$ sui client new-address ed25519 leon-dev1024
╭─────────────────────────────────────────────────────────────────────────────────────────╮
│ Created new keypair and saved it to keystore.                                           │
├────────────────┬────────────────────────────────────────────────────────────────────────┤
│ alias          │ leon-dev1024                                                           │
│ address        │ 0x01bb23d746e9483ef4820a218b54b1650eca4f86c5ad8659189fce2df9f800fa     │
│ keyScheme      │ ed25519                                                                │
│ recoveryPhrase │ scale stairs rug false place enlist notable close road near item gloom │
╰────────────────┴────────────────────────────────────────────────────────────────────────╯
$ sui client addresses                                                             
╭──────────────────────┬────────────────────────────────────────────────────────────────────┬────────────────╮
│ alias                │ address                                                            │ active address │
├──────────────────────┼────────────────────────────────────────────────────────────────────┼────────────────┤
│ leon-dev1024         │ 0x01bb23d746e9483ef4820a218b54b1650eca4f86c5ad8659189fce2df9f800fa │                │
│ interesting-sunstone │ 0x1546f533333b358a8edddd38a8e8967583883e82ca7de604d5bba15e20e493d2 │ *              │
╰──────────────────────┴────────────────────────────────────────────────────────────────────┴────────────────╯
PS D:\data\web3\letsmove>
  1. 地址 interesting-sunstone 有一些coins
$ sui client gas 0x1546f533333b358a8edddd38a8e8967583883e82ca7de604d5bba15e20e493d2
[warn] Client/Server api version mismatch, client api version : 1.37.1, server api version : 1.38.0
╭────────────────────────────────────────────────────────────────────┬────────────────────┬──────────────────╮
│ gasCoinId                                                          │ mistBalance (MIST) │ suiBalance (SUI) │
├────────────────────────────────────────────────────────────────────┼────────────────────┼──────────────────┤
│ 0x8022a00f250d39300e38387f13faacd071775cfd21acf37e6a5363bd68f802e8 │ 973569040          │ 0.97             │
│ 0x9128d0283773df8b90ff73ea54342ad44e0bda3f66c43c25ba90461bb06518ea │ 1000000000         │ 1.00             │
│ 0xb91f1fa09a6e4c944b5bba7b9b04adbfe1c93e45f9d5e8075ac08f2baaef7b03 │ 1000000000         │ 1.00             │
╰────────────────────────────────────────────────────────────────────┴────────────────────┴──────────────────╯
PS D:\data\web3\letsmove> 
  1. 给新建的地址转一些钱
$ sui client pay-sui --recipients leon-dev1024 --input-coins 0x8022a00f250d39300e38387f13faacd071775cfd21acf37e6a5363bd68f802e8 --amounts 500000000 --gas-budget 5000000
Transaction Digest: CucyBczJKQuzabfR1uq17efKTCfwcBEn2UT6VbPU9rp3
╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Transaction Data                                                                                             │
├──────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Sender: 0x1546f533333b358a8edddd38a8e8967583883e82ca7de604d5bba15e20e493d2                                   │
│ Gas Owner: 0x1546f533333b358a8edddd38a8e8967583883e82ca7de604d5bba15e20e493d2                                │
│ Gas Budget: 5000000 MIST                                                                                     │
│ Gas Price: 1000 MIST                                                                                         │
│ Gas Payment:                                                                                                 │
│  ┌──                                                                                                         │
│  │ ID: 0x8022a00f250d39300e38387f13faacd071775cfd21acf37e6a5363bd68f802e8                                    │
│  │ Version: 206232112                                                                                        │
│  │ Digest: 79ViUFB8xQd3D9PxTX3168UfQm568e8ovynZAXdPbbDu                                                      │
│  └──                                                                                                         │
│                                                                                                              │
│ Transaction Kind: Programmable                                                                               │
│ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ Input Objects                                                                                            │ │
│ ├──────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │
│ │ 0   Pure Arg: Type: u64, Value: "500000000"                                                              │ │
│ │ 1   Pure Arg: Type: address, Value: "0x01bb23d746e9483ef4820a218b54b1650eca4f86c5ad8659189fce2df9f800fa" │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ ╭─────────────────────────╮                                                                                  │
│ │ Commands                │                                                                                  │
│ ├─────────────────────────┤                                                                                  │
│ │ 0  SplitCoins:          │                                                                                  │
│ │  ┌                      │                                                                                  │
│ │  │ Coin: GasCoin        │                                                                                  │
│ │  │ Amounts:             │                                                                                  │
│ │  │   Input  0           │                                                                                  │
│ │  └                      │                                                                                  │
│ │                         │                                                                                  │
│ │ 1  TransferObjects:     │                                                                                  │
│ │  ┌                      │                                                                                  │
│ │  │ Arguments:           │                                                                                  │
│ │  │   Nested Result 0: 0 │                                                                                  │
│ │  │ Address: Input  1    │                                                                                  │
│ │  └                      │                                                                                  │
│ ╰─────────────────────────╯                                                                                  │
│                                                                                                              │
│ Signatures:                                                                                                  │
│    WfGWMzTkii5AIOlqqwCPcea8sPk376+wfhbNMrqSrnJ25voD/UpDeK7vAdUXXv4AkYBOcK8yEqyJ6PHaaLQtAg==                  │
│                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭───────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Transaction Effects                                                                               │
├───────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Digest: CucyBczJKQuzabfR1uq17efKTCfwcBEn2UT6VbPU9rp3                                              │
│ Status: Success                                                                                   │
│ Executed Epoch: 564                                                                               │
│                                                                                                   │
│ Created Objects:                                                                                  │
│  ┌──                                                                                              │
│  │ ID: 0x313b15c852df15437f21518efc5101845aeef5d1ff5ebc967fcca9ad2de55d2c                         │
│  │ Owner: Account Address ( 0x01bb23d746e9483ef4820a218b54b1650eca4f86c5ad8659189fce2df9f800fa )  │
│  │ Version: 206232113                                                                             │
│  │ Digest: DFHpdkHk1vMNi98uEM94Zt94HVvvuWG9LdvbmBTDw18B                                           │
│  └──                                                                                              │
│ Mutated Objects:                                                                                  │
│  ┌──                                                                                              │
│  │ ID: 0x8022a00f250d39300e38387f13faacd071775cfd21acf37e6a5363bd68f802e8                         │
│  │ Owner: Account Address ( 0x1546f533333b358a8edddd38a8e8967583883e82ca7de604d5bba15e20e493d2 )  │
│  │ Version: 206232113                                                                             │
│  │ Digest: 7gmUAJebuT2bVJbD64c4d53faf2xxbFUrn8xJeWBZt5L                                           │
│  └──                                                                                              │
│ Gas Object:                                                                                       │
│  ┌──                                                                                              │
│  │ ID: 0x8022a00f250d39300e38387f13faacd071775cfd21acf37e6a5363bd68f802e8                         │
│  │ Owner: Account Address ( 0x1546f533333b358a8edddd38a8e8967583883e82ca7de604d5bba15e20e493d2 )  │
│  │ Version: 206232113                                                                             │
│  │ Digest: 7gmUAJebuT2bVJbD64c4d53faf2xxbFUrn8xJeWBZt5L                                           │
│  └──                                                                                              │
│ Gas Cost Summary:                                                                                 │
│    Storage Cost: 1976000 MIST                                                                     │
│    Computation Cost: 1000000 MIST                                                                 │
│    Storage Rebate: 978120 MIST                                                                    │
│    Non-refundable Storage Fee: 9880 MIST                                                          │
│                                                                                                   │
│ Transaction Dependencies:                                                                         │
│    EdDcDRFa4roqykWbgPfEfxbjB6EDodQ9gfeg7Y68nS7K                                                   │
╰───────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─────────────────────────────╮
│ No transaction block events │
╰─────────────────────────────╯

╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Object Changes                                                                                   │
├──────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Created Objects:                                                                                 │
│  ┌──                                                                                             │
│  │ ObjectID: 0x313b15c852df15437f21518efc5101845aeef5d1ff5ebc967fcca9ad2de55d2c                  │
│  │ Sender: 0x1546f533333b358a8edddd38a8e8967583883e82ca7de604d5bba15e20e493d2                    │
│  │ Owner: Account Address ( 0x01bb23d746e9483ef4820a218b54b1650eca4f86c5ad8659189fce2df9f800fa ) │
│  │ ObjectType: 0x2::coin::Coin<0x2::sui::SUI>                                                    │
│  │ Version: 206232113                                                                            │
│  │ Digest: DFHpdkHk1vMNi98uEM94Zt94HVvvuWG9LdvbmBTDw18B                                          │
│  └──                                                                                             │
│ Mutated Objects:                                                                                 │
│  ┌──                                                                                             │
│  │ ObjectID: 0x8022a00f250d39300e38387f13faacd071775cfd21acf37e6a5363bd68f802e8                  │
│  │ Sender: 0x1546f533333b358a8edddd38a8e8967583883e82ca7de604d5bba15e20e493d2                    │
│  │ Owner: Account Address ( 0x1546f533333b358a8edddd38a8e8967583883e82ca7de604d5bba15e20e493d2 ) │
│  │ ObjectType: 0x2::coin::Coin<0x2::sui::SUI>                                                    │
│  │ Version: 206232113                                                                            │
│  │ Digest: 7gmUAJebuT2bVJbD64c4d53faf2xxbFUrn8xJeWBZt5L                                          │
│  └──                                                                                             │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
╭───────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Balance Changes                                                                                   │
├───────────────────────────────────────────────────────────────────────────────────────────────────┤
│  ┌──                                                                                              │
│  │ Owner: Account Address ( 0x01bb23d746e9483ef4820a218b54b1650eca4f86c5ad8659189fce2df9f800fa )  │
│  │ CoinType: 0x2::sui::SUI                                                                        │
│  │ Amount: 500000000                                                                              │
│  └──                                                                                              │
│  ┌──                                                                                              │
│  │ Owner: Account Address ( 0x1546f533333b358a8edddd38a8e8967583883e82ca7de604d5bba15e20e493d2 )  │
│  │ CoinType: 0x2::sui::SUI                                                                        │
│  │ Amount: -501997880                                                                             │
│  └──                                                                                              │
╰───────────────────────────────────────────────────────────────────────────────────────────────────╯
PS D:\data\web3\letsmove> 

2.10 重放交易

使用 “sui client replay - transaction --tx - digest < 交易摘要>” 命令在本地重新执行一笔交易,并展示该交易的影响效果。此命令会从客户端环境中指定的全节点(fullnode)获取交易依赖项。对于发生在较久远过去的交易,建议将客户端的全节点设置为存有该交易未被修剪的链上数据的节点。这样做还能验证本地执行交易产生的影响效果是否与链上存储的该交易的影响效果相匹配。

你可以为此命令添加额外的标志 “--gas - info” 和 “--ptb - info”,以便查看有关该交易的更多信息。

重放上一个例子里面的交易

 $ sui client replay-transaction --tx-digest CucyBczJKQuzabfR1uq17efKTCfwcBEn2UT6VbPU9rp3

2.11 分析交易

使用 sui client profile-transaction --tx-digest &lt;TRANSACTION-DIGEST> 命令可以重新执行一个事务并生成 Gas 使用分析报告。与 replay 命令类似,此命令从客户端环境指定的 Full node 获取执行该事务所需的事务依赖数据。在事务的本地执行过程中,该命令会记录所有 Move 函数的调用,并为每次调用提供 Gas 消耗的详细分析。

为了启用性能分析器,您需要安装或本地构建带有 --features tracing 标志的 Sui Client 二进制文件,前提是该版本未启用此功能。

$ cargo install --locked --git https://github.com/MystenLabs/sui.git --branch main  --features tracing sui

该命令将输出一个配置文件到当前工作目录,文件格式为 gas_profile_{tx_digest}_{unix_timestamp}.json。你可以使用可选标志 --profile-output &lt;/PATH/OUTPUT.json> 来将配置文件写入指定路径,格式为 /PATH/OUTPUT_{tx_digest}_{unix_timestamp}.json。使用 speedscope 来检查该配置文件。

要安装 speedscope,请运行:

npm install -g speedscope

要在 speedscope 中打开配置文件,请运行:

speedscope &lt;PATH/PROFILE-OUTPUT-FILE>

speedscope 中查看配置文件时,顶部左侧菜单提供三种不同的视图:Timer OrderLeft HeavySandwich。在每种视图中,每个条形图的垂直宽度表示函数消耗的 gas 百分比,你可以将鼠标悬停在条形图上或点击条形图查看该函数调用所消耗的计算单位。事务的总计算单位与存储计算单位一起乘以 gas 价格,根据分层系统来确定交易的 gas 成本。

  • Time Order:按调用顺序从左到右显示函数调用栈。
  • Left Heavy:将重复的嵌套调用序列合并为单个调用栈,并按每个合并调用栈的总 gas 消耗从左到右显示。当有成百上千次相同函数调用时,此视图有助于快速查看所有调用该函数的总 gas 消耗。
  • Sandwich:显示与每个函数的 gas 消耗对应的离散值,其中 Total 显示该函数调用所有调用的函数所消耗的 gas 成本,Self 显示仅由该函数消耗的 gas 成本。

观察事务的 gas 消耗可以提供有关智能合约预期 gas 成本的有用见解。在开发智能合约时,你可以运行本地区块链网络并将包发布到该网络。然后,创建一个调用已发布智能合约的事务,最后对该事务运行 profiler,查看 gas 成本的详细分解。

3. 发布 Move 程序包

“sui client” 命令的主要用途之一是在 Sui 网络上发布智能合约。在这个示例中,先将当前环境切换到开发网(Devnet)网络,然后构建、测试并发布 Sui 代码库(sui/examples/move)中现有的一个 Move 示例。

  1. fork sui到自己的github里面,https://github.com/MystenLabs/sui,切换到sui/examples/move目录下面

    $ cd examples/move
    $ cd first_package
  2. 切换到开发网(Devnet)网络。

    sui client switch --env devnet
  3. 使用 sui move build 命令来构建软件包

    $ sui move build
    INCLUDING DEPENDENCY Sui
    INCLUDING DEPENDENCY MoveStdlib
    BUILDING my_first_package
  4. 使用 sui move test 命令来运行单元测试。

image 1.png

  1. 使用 sui client verify-bytecode-meter 命令可以检查模块是否通过了字节码计量器的检查。控制台会返回最大允许的值以及该包实际使用的值。

image 2.png

  1. 使用 sui client gas 命令可以验证当前活动地址是否拥有用于支付交易手续费的 gas 代币。

  2. 如果你需要代币,可以使用 sui client faucet 命令(该命令在 Mainnet 上不可用)。

  3. 使用 sui client gas 命令可以验证当前活动地址是否收到了 gas 代币。 image 3.png

  4. 使用 sui client publish 命令可以发布包,确保为 gas-budget 标志设置了合适的值。

    $ sui client publish --gas-budget 100000000 
    INCLUDING DEPENDENCY Sui
    INCLUDING DEPENDENCY MoveStdlib
    BUILDING my_first_package
    Successfully verified dependencies on-chain against source.
    Transaction Digest: 3fHp8CHPnRjcURDeL5E9XPSorDBNAciNYVB38Wp4cJSh
    ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
    │ Transaction Data                                                                                             │
    ├──────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
    │ Sender: 0x1546f533333b358a8edddd38a8e8967583883e82ca7de604d5bba15e20e493d2                                   │
    │ Gas Owner: 0x1546f533333b358a8edddd38a8e8967583883e82ca7de604d5bba15e20e493d2                                │
    │ Gas Budget: 100000000 MIST                                                                                   │
    │ Gas Price: 1000 MIST                                                                                         │
    │ Gas Payment:                                                                                                 │
    │  ┌──                                                                                                         │
    │  │ ID: 0xc92a43cc67c30fb9c815a162c8656b144e9fe727188a8c179376c6eb24820630                                    │
    │  │ Version: 284                                                                                              │
    │  │ Digest: C5FTrJFRTBkbPR4ysPtp1ddGSGkjHcGdprY3Birf7LZw                                                      │
    │  └──                                                                                                         │
    │                                                                                                              │
    │ Transaction Kind: Programmable                                                                               │
    │ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
    │ │ Input Objects                                                                                            │ │
    │ ├──────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │
    │ │ 0   Pure Arg: Type: address, Value: "0x1546f533333b358a8edddd38a8e8967583883e82ca7de604d5bba15e20e493d2" │ │
    │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
    │ ╭─────────────────────────────────────────────────────────────────────────╮                                  │
    │ │ Commands                                                                │                                  │
    │ ├─────────────────────────────────────────────────────────────────────────┤                                  │
    │ │ 0  Publish:                                                             │                                  │
    │ │  ┌                                                                      │                                  │
    │ │  │ Dependencies:                                                        │                                  │
    │ │  │   0x0000000000000000000000000000000000000000000000000000000000000001 │                                  │
    │ │  │   0x0000000000000000000000000000000000000000000000000000000000000002 │                                  │
    │ │  └                                                                      │                                  │
    │ │                                                                         │                                  │
    │ │ 1  TransferObjects:                                                     │                                  │
    │ │  ┌                                                                      │                                  │
    │ │  │ Arguments:                                                           │                                  │
    │ │  │   Result 0                                                           │                                  │
    │ │  │ Address: Input  0                                                    │                                  │
    │ │  └                                                                      │                                  │
    │ ╰─────────────────────────────────────────────────────────────────────────╯                                  │
    │                                                                                                              │
    │ Signatures:                                                                                                  │
    │    7YDeK1VNpK129kqozWo8CCrtZFDS1Q8YFcvqlqbin6QzRo/6te/dfI+UC3dRFf+zw/A3szotCINuHAikJ+R9Ag==                  │
    │                                                                                                              │
    ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
    ╭───────────────────────────────────────────────────────────────────────────────────────────────────╮
    │ Transaction Effects                                                                               │
    ├───────────────────────────────────────────────────────────────────────────────────────────────────┤
    │ Digest: 3fHp8CHPnRjcURDeL5E9XPSorDBNAciNYVB38Wp4cJSh                                              │
    │ Status: Success                                                                                   │
    │ Executed Epoch: 97                                                                                │
    │                                                                                                   │
    │ Created Objects:                                                                                  │
    │  ┌──                                                                                              │
    │  │ ID: 0x6955d23796a24ac50aba789b24f54ecebb8c0130a8ff6230cc97b2f7db5118cf                         │
    │  │ Owner: Account Address ( 0x1546f533333b358a8edddd38a8e8967583883e82ca7de604d5bba15e20e493d2 )  │
    │  │ Version: 285                                                                                   │
    │  │ Digest: BdNJPeqhbQ6tZhLsrHfdfSM1HgiPAJoHBbGsUKjVLVyy                                           │
    │  └──                                                                                              │
    │  ┌──                                                                                              │
    │  │ ID: 0x6f93ecc29ec7887f599b3b331aaa8a4f3364974431c09f0fb7eda39e260535ff                         │
    │  │ Owner: Immutable                                                                               │
    │  │ Version: 1                                                                                     │
    │  │ Digest: 7vy1jHQevcfRBX1DV4cvYucDwAZjmBfTiULTnB1pjre1                                           │
    │  └──                                                                                              │
    │  ┌──                                                                                              │
    │  │ ID: 0xab5d7e638533805d660b8038ccc967dd98d64f6163d406a8d03d8fba15769ee4                         │
    │  │ Owner: Account Address ( 0x1546f533333b358a8edddd38a8e8967583883e82ca7de604d5bba15e20e493d2 )  │
    │  │ Version: 285                                                                                   │
    │  │ Digest: 5NiyyaEFjmFH2Kb1MzVpZSkbWsmaFrtu3ygvB93iT8wG                                           │
    │  └──                                                                                              │
    │ Mutated Objects:                                                                                  │
    │  ┌──                                                                                              │
    │  │ ID: 0xc92a43cc67c30fb9c815a162c8656b144e9fe727188a8c179376c6eb24820630                         │
    │  │ Owner: Account Address ( 0x1546f533333b358a8edddd38a8e8967583883e82ca7de604d5bba15e20e493d2 )  │
    │  │ Version: 285                                                                                   │
    │  │ Digest: 6KgKQp2xpCn51CTuMrrCw3pELdY2e2xAruJXczfJcNUB                                           │
    │  └──                                                                                              │
    │ Gas Object:                                                                                       │
    │  ┌──                                                                                              │
    │  │ ID: 0xc92a43cc67c30fb9c815a162c8656b144e9fe727188a8c179376c6eb24820630                         │
    │  │ Owner: Account Address ( 0x1546f533333b358a8edddd38a8e8967583883e82ca7de604d5bba15e20e493d2 )  │
    │  │ Version: 285                                                                                   │
    │  │ Digest: 6KgKQp2xpCn51CTuMrrCw3pELdY2e2xAruJXczfJcNUB                                           │
    │  └──                                                                                              │
    │ Gas Cost Summary:                                                                                 │
    │    Storage Cost: 10298000 MIST                                                                    │
    │    Computation Cost: 1000000 MIST                                                                 │
    │    Storage Rebate: 978120 MIST                                                                    │
    │    Non-refundable Storage Fee: 9880 MIST                                                          │
    │                                                                                                   │
    │ Transaction Dependencies:                                                                         │
    │    5GCSctHDcW7HCr33G8PUAzoj3b1KQfrAFaQDx39xCx5D                                                   │
    │    Eo6fqQZoxyJThGZpo9JYNxDNr73ZtJu6g4mMof65kZEh                                                   │
    ╰───────────────────────────────────────────────────────────────────────────────────────────────────╯
    ╭─────────────────────────────╮
    │ No transaction block events │
    ╰─────────────────────────────╯
    
    ╭────────────────────────────────────────────────────────────────────────────────────────────────────╮
    │ Object Changes                                                                                     │
    ├────────────────────────────────────────────────────────────────────────────────────────────────────┤
    │ Created Objects:                                                                                   │
    │  ┌──                                                                                               │
    │  │ ObjectID: 0x6955d23796a24ac50aba789b24f54ecebb8c0130a8ff6230cc97b2f7db5118cf                    │
    │  │ Sender: 0x1546f533333b358a8edddd38a8e8967583883e82ca7de604d5bba15e20e493d2                      │
    │  │ Owner: Account Address ( 0x1546f533333b358a8edddd38a8e8967583883e82ca7de604d5bba15e20e493d2 )   │
    │  │ ObjectType: 0x2::package::UpgradeCap                                                            │
    │  │ Version: 285                                                                                    │
    │  │ Digest: BdNJPeqhbQ6tZhLsrHfdfSM1HgiPAJoHBbGsUKjVLVyy                                            │
    │  └──                                                                                               │
    │  ┌──                                                                                               │
    │  │ ObjectID: 0xab5d7e638533805d660b8038ccc967dd98d64f6163d406a8d03d8fba15769ee4                    │
    │  │ Sender: 0x1546f533333b358a8edddd38a8e8967583883e82ca7de604d5bba15e20e493d2                      │
    │  │ Owner: Account Address ( 0x1546f533333b358a8edddd38a8e8967583883e82ca7de604d5bba15e20e493d2 )   │
    │  │ ObjectType: 0x6f93ecc29ec7887f599b3b331aaa8a4f3364974431c09f0fb7eda39e260535ff::example::Forge  │
    │  │ Version: 285                                                                                    │
    │  │ Digest: 5NiyyaEFjmFH2Kb1MzVpZSkbWsmaFrtu3ygvB93iT8wG                                            │
    │  └──                                                                                               │
    │ Mutated Objects:                                                                                   │
    │  ┌──                                                                                               │
    │  │ ObjectID: 0xc92a43cc67c30fb9c815a162c8656b144e9fe727188a8c179376c6eb24820630                    │
    │  │ Sender: 0x1546f533333b358a8edddd38a8e8967583883e82ca7de604d5bba15e20e493d2                      │
    │  │ Owner: Account Address ( 0x1546f533333b358a8edddd38a8e8967583883e82ca7de604d5bba15e20e493d2 )   │
    │  │ ObjectType: 0x2::coin::Coin&lt;0x2::sui::SUI>                                                      │
    │  │ Version: 285                                                                                    │
    │  │ Digest: 6KgKQp2xpCn51CTuMrrCw3pELdY2e2xAruJXczfJcNUB                                            │
    │  └──                                                                                               │
    │ Published Objects:                                                                                 │
    │  ┌──                                                                                               │
    │  │ PackageID: 0x6f93ecc29ec7887f599b3b331aaa8a4f3364974431c09f0fb7eda39e260535ff                   │
    │  │ Version: 1                                                                                      │
    │  │ Digest: 7vy1jHQevcfRBX1DV4cvYucDwAZjmBfTiULTnB1pjre1                                            │
    │  │ Modules: example                                                                                │
    │  └──                                                                                               │
    ╰────────────────────────────────────────────────────────────────────────────────────────────────────╯
    ╭───────────────────────────────────────────────────────────────────────────────────────────────────╮
    │ Balance Changes                                                                                   │
    ├───────────────────────────────────────────────────────────────────────────────────────────────────┤
    │  ┌──                                                                                              │
    │  │ Owner: Account Address ( 0x1546f533333b358a8edddd38a8e8967583883e82ca7de604d5bba15e20e493d2 )  │
    │  │ CoinType: 0x2::sui::SUI                                                                        │
    │  │ Amount: -10319880                                                                              │
    │  └──                                                                                              │
    ╰───────────────────────────────────────────────────────────────────────────────────────────────────╯

4. 帮助

每个命令都有自己的帮助部分。例如,sui client call --help 会显示以下提示:

$ sui client call --help
Call Move function

Usage: sui.exe client call [OPTIONS] --package &lt;PACKAGE> --module &lt;MODULE> --function &lt;FUNCTION>
……

<!--StartFragment-->

关注《HOH水分子》公众号,我们将持续分享和制作变成语言教程,让大家对编程产生化学反应。

b4AQIzN06730e45415811.webp

<!--EndFragment-->

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

0 条评论

请先 登录 后评论
LeonDev1024
LeonDev1024
0x98dE...1DB4
江湖只有他的大名,没有他的介绍。