本文详细介绍了 Sui 命令行界面(CLI)客户端常用命令,使用场景以及操作说明。
Sui 命令行界面(CLI)客户端命令提供了在命令层级与 Sui 网络进行交互的途径。“sui client” 的常见用途包括发布 Move 智能合约、获取某个对象的信息、执行交易或管理地址。
以下列表详细列举了 “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 打印帮助信息。
以下示例展示了一些最常用的命令。本文的操作环境是windows 11, RustRover 2024.2.4
使用 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路径地址比较长下文的地址都有$替代,这些命令基本上实操一遍基本上就记住了。
使用 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
使用 sui client switch
命令可以切换当前的网络。这个示例将当前网络切换到主网(mainnet)。
$ sui client switch --env mainnet
Active environment switched to [mainnet]
使用 sui client active-address
命令可以显示当前的地址。当您没有提供 Sui 地址时,CLI 会使用当前的活跃地址来执行与地址相关的命令(如 sui client objects
)。
$ sui client active-address
0x1546f533333b358a8edddd38a8e8967583883e82ca7de604d5bba15e20e493d2
如果您使用的是标准的公共 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.
可以看到从主网请求代币是报错的。
使用 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>
使用 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>
使用 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>
如何将 SUI 进行转账或者将一个对象从一个地址转移到另一个地址。首先,用于发送 SUI 或转移对象有两个主要命令:pay(支付)和 transfer(转移)。pay 和 transfer 都有几个相关联的命令:pay - sui、pay - all - sui、transfer - sui。
这些命令之间的区别如下:
$ 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>
$ 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>
$ 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>
使用 “sui client replay - transaction --tx - digest < 交易摘要>” 命令在本地重新执行一笔交易,并展示该交易的影响效果。此命令会从客户端环境中指定的全节点(fullnode)获取交易依赖项。对于发生在较久远过去的交易,建议将客户端的全节点设置为存有该交易未被修剪的链上数据的节点。这样做还能验证本地执行交易产生的影响效果是否与链上存储的该交易的影响效果相匹配。
你可以为此命令添加额外的标志 “--gas - info” 和 “--ptb - info”,以便查看有关该交易的更多信息。
重放上一个例子里面的交易
$ sui client replay-transaction --tx-digest CucyBczJKQuzabfR1uq17efKTCfwcBEn2UT6VbPU9rp3
使用 sui client profile-transaction --tx-digest <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 </PATH/OUTPUT.json>
来将配置文件写入指定路径,格式为 /PATH/OUTPUT_{tx_digest}_{unix_timestamp}.json
。使用 speedscope
来检查该配置文件。
要安装 speedscope
,请运行:
npm install -g speedscope
要在 speedscope
中打开配置文件,请运行:
speedscope <PATH/PROFILE-OUTPUT-FILE>
在 speedscope
中查看配置文件时,顶部左侧菜单提供三种不同的视图:Timer Order、Left Heavy 和 Sandwich。在每种视图中,每个条形图的垂直宽度表示函数消耗的 gas 百分比,你可以将鼠标悬停在条形图上或点击条形图查看该函数调用所消耗的计算单位。事务的总计算单位与存储计算单位一起乘以 gas 价格,根据分层系统来确定交易的 gas 成本。
观察事务的 gas 消耗可以提供有关智能合约预期 gas 成本的有用见解。在开发智能合约时,你可以运行本地区块链网络并将包发布到该网络。然后,创建一个调用已发布智能合约的事务,最后对该事务运行 profiler,查看 gas 成本的详细分解。
“sui client” 命令的主要用途之一是在 Sui 网络上发布智能合约。在这个示例中,先将当前环境切换到开发网(Devnet)网络,然后构建、测试并发布 Sui 代码库(sui/examples/move)中现有的一个 Move 示例。
fork sui到自己的github里面,https://github.com/MystenLabs/sui,切换到sui/examples/move目录下面
$ cd examples/move
$ cd first_package
切换到开发网(Devnet)网络。
sui client switch --env devnet
使用 sui move build
命令来构建软件包
$ sui move build
INCLUDING DEPENDENCY Sui
INCLUDING DEPENDENCY MoveStdlib
BUILDING my_first_package
使用 sui move test
命令来运行单元测试。
sui client verify-bytecode-meter
命令可以检查模块是否通过了字节码计量器的检查。控制台会返回最大允许的值以及该包实际使用的值。使用 sui client gas
命令可以验证当前活动地址是否拥有用于支付交易手续费的 gas 代币。
如果你需要代币,可以使用 sui client faucet
命令(该命令在 Mainnet 上不可用)。
使用 sui client gas
命令可以验证当前活动地址是否收到了 gas 代币。
使用 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<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 │
│ └── │
╰───────────────────────────────────────────────────────────────────────────────────────────────────╯
每个命令都有自己的帮助部分。例如,sui client call --help 会显示以下提示:
$ sui client call --help
Call Move function
Usage: sui.exe client call [OPTIONS] --package <PACKAGE> --module <MODULE> --function <FUNCTION>
……
<!--StartFragment-->
关注《HOH水分子》公众号,我们将持续分享和制作变成语言教程,让大家对编程产生化学反应。
<!--EndFragment-->
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!