Repository files navigation

cloud-cli

CIBook CISecurity Audit

CITA-Cloud命令行工具。

安装

有几种不同的安装方法。

直接下载预编译的二进制文件

cldi有预编译好的二进制可执行文件,可以根据使用环境下载对应的文件。 https://github.com/cita-cloud/cloud-cli/releases

如果你不知道如何选择,那么一般来说:

  • cldi-x86_64-pc-windows-msvc.zip,如果你是在Windows下
  • cldi-x86_64-unknown-linux-gnu.tar.gz,如果你是在Linux下
  • cldi-x86_64-apple-darwin.tar.gz,如果你是在MacOS下(非M1)
  • cldi-aarch64-apple-darwin.tar.gz,如果你是在MacOS下(M1)

如果出现libc相关问题,可以使用musl版。

如果在ARM上,使用aarch64版。

从源码编译

1. 安装Rust

如果你没有Rust环境,可以执行以下命令,通过rustup安装。

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

2. 编译并安装cloud-cli

更新Rust版本。

# cloud-cli requires rust 1.58 or above
$ rustup update

可以通过GitHub安装。

$ cargo install --git https://github.com/cita-cloud/cloud-cli --branch main

也可以先把项目clone到本地。

$ git clone https://github.com/cita-cloud/cloud-cli
$ cargo install --path cloud-cli

验证安装

$ cldi --version
cldi 0.5.5

快速入门

配置

1. controller和executor的地址

想要与链交互,首先要知道如何访问链。

CITA-Cloud有两个rpc地址,分别是controller和executor微服务。

假设controller的地址为"localhost:50004", executor的地址为"localhost:50002"。

那么我们可以通过-r-e来告诉cldi如何访问链:

# 注意-r和-e必须在子命令之前
$ cldi -r localhost:50004 -e localhost:50002 get block-number

2. 账户名称

发送交易的命令需要对交易进行签名,我们需要指定签名所使用的账户。 cldi在第一次使用的时候会创建一个名为default的默认账户,用户可以通过-u来指定账户:

# 同样地,-u必须在子命令之前
$ cldi -u Alice send --to <to> --value <value> --data <data>

创建和导入账户相关的命令请参见account

使用Context管理配置

每次都指定微服务的访问地址和使用的账户名称不太方便,我们可以通过context命令来管理这些配置。

# 创建一个Context
$ cldi -r localhost:50004 -e localhost:50002 -u Alice context save Wonderland
# 将这个Context设为默认
$ cldi context default Wonderland
# 也可以使用-c来切换Context,-c也必须在子命令之前
$ cldi -c Wonderland get block-number
# 列出当前Context信息和已保存的Context
$ cldi context list

交互模式

cldi提供了命令行模式和交互模式,在未传入子命令的时候cldi会进入交互模式。

交互模式与命令行模式的命令是等价的,例如:

$ cldi get block-number

等价于

$ cldi
cldi> get block-number

在交互模式下,用户可以通过-c, -r-e来改变当前会话的Context配置。

# 修改当前会话的全局配置
cldi> -r localhost:50004
# 仅针对这条命令应用这个配置
cldi> -r localhost:50004 get block-number

Q: How to quit cldi?
A: :q
A: CTRL-D

缩写

cldi提供了很多命令的缩写,这里列举一些:

cldi> get block-number
cldi> get bn
cldi> get system-config
cldi> get sc
cldi> context list
cldi> ctx ls
cldi> ctx l
cldi> account generate --name Alice
cldi> account gen --name Alice
cldi> account g --name Alice
cldi> a g --name Alice
cldi> bench send
cldi> b send
cldi> watch
cldi> w

这些缩写仅为方便用户操作,不作稳定性保证,不建议在脚本中使用。

命令行模式下的补全

cldi completions <shell-name>命令会输出补全脚本,需要添加到, 例如.profile, .bashrc里才能生效。目前支持的shell有:bash, zsh, powershell, fish, elvish

以bash为例,将下列脚本添加到.bashrc里即可。

source<(cldi completions bash)

使用示例

1.生成账户

如果需要更好的安全性,请加上-p <password>为私钥进行加密。 有密码的账户在硬盘上会进行加密存储,并且不会在生成时显示明文私钥。 加密后的账户需要经过-p <password>解密才能使用。

cldi> account generate --name Alice
{
"crypto_type": "SM",
"address": "0xb7768b2f989eeb9a1c7315aa38fb5fbd68333b8a",
"public_key": "0x325ef60c3d8a94dd363a83f8b9a1ecbe3583b41aa204709eb0d2a19e7e323571d6d4015e5a049bfd04d3ff661385c36fe2066f9aaf72c943ff4ad1fc15e03e73",
"secret_key": "0x9d08b671a8f12141c45edbd59e81eaf282a2534505ad0545bb46bf64d642b071"
}

2.创建环境配置

cldi> -r localhost:50004 -e localhost:50002 -u Alice context save Wonderland
# 设为默认环境
cldi> context default Wonderland

3.查询块高

cldi> get block-number
406030

4.查询系统配置

cldi> get system-config
{
"admin": "0x29222738252b748e4d20a20073d05cd26e87cc00",
"admin_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000",
"block_interval": 4,
"block_interval_pre_hash": "0xe010952e2bf9a2da305af49c2598230e0ecbb37c7ece7dbef55031b775dba64f",
"chain_id": "0x204c9a3301e7e698c45febb5e177ef35a656bb8feb355b6aca85beef5d248c14",
"chain_id_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000",
"emergency_brake": false,
"emergency_brake_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000",
"validators": [
"0x43a8f6a2abd2782e06506695a19693589a53e38a",
"0x4025800dc70684abd1e3eb89086d21d94f1dbfd8",
"0x3b0829e9f547cfecfae7fb3d527e8405d4304222"
],
"validators_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000",
"version": 0,
"version_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000"
}

5.创建合约

我们通过cldi create <data>发送创建合约交易。其中<data>是合约的数据,这里以一个计数器合约为例。返回结果为这个创建合约交易的哈希。

cldi> create 0x608060405234801561001057600080fd5b5060f58061001f6000396000f3006080604052600436106053576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306661abd1460585780634f2be91f146080578063d826f88f146094575b600080fd5b348015606357600080fd5b50606a60a8565b6040518082815260200191505060405180910390f35b348015608b57600080fd5b50609260ae565b005b348015609f57600080fd5b5060a660c0565b005b60005481565b60016000808282540192505081905550565b600080819055505600a165627a7a72305820faa1d1f51d7b5ca2b200e0f6cdef4f2d7e44ee686209e300beb1146f40d32dee0029
0xbdeabf94a31c503deb4400fc63aee2a89e8f43d6570ed7ad5cd4f6f2898be0a2

等待交易上链后,通过cldi get receipt <tx-hash>获取交易回执,在交易回执中的contract_addr项查看创建出来的合约的地址。这里为0xf064e32407b6cc412fe33f6ba55f578ac413ecdc

cldi> get receipt 0xbdeabf94a31c503deb4400fc63aee2a89e8f43d6570ed7ad5cd4f6f2898be0a2
{
"block_number": 406069,
"contract_addr": "0xf064e32407b6cc412fe33f6ba55f578ac413ecdc",
"cumulative_quota_used": "0x0000000000000000000000000000000000000000000000000000000000018ed3",
"error_msg": "",
"legacy_cita_block_hash": "0x265386a6afc6072f0acb5d32e0fe079e101129041dbfed2bee8872a849e8f7a3",
"logs": [],
"logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"quota_used": "0x0000000000000000000000000000000000000000000000000000000000018ed3",
"state_root": "0x96899ff87f9bed55fd880750c2c51661ee24e14f672a1c9d7ac9573536b8c3f0",
"tx_hash": "0xbdeabf94a31c503deb4400fc63aee2a89e8f43d6570ed7ad5cd4f6f2898be0a2",
"tx_index": 0
}

6.调用合约

查询合约数据。当前计数器的值为0。

cldi> call 0xf064e32407b6cc412fe33f6ba55f578ac413ecdc 0x06661abd
0x0000000000000000000000000000000000000000000000000000000000000000

发送交易,使得计数器加一。

cldi> send 0xf064e32407b6cc412fe33f6ba55f578ac413ecdc 0x4f2be91f
0x99e57fdfed555059fa143ad0bc4d8ddc8764f8024fb3b28e880a84667414dec5

等待交易上链后,再次查询,可以看到结果为一,符合预期。

cldi> call 0xf064e32407b6cc412fe33f6ba55f578ac413ecdc 0x06661abd
0x0000000000000000000000000000000000000000000000000000000000000001

更详细的文档参见cloud-cli book

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

cloud-cli

CIBook CISecurity Audit

CITA-Cloud命令行工具。

安装

有几种不同的安装方法。

直接下载预编译的二进制文件

cldi有预编译好的二进制可执行文件,可以根据使用环境下载对应的文件。 https://github.com/cita-cloud/cloud-cli/releases

如果你不知道如何选择,那么一般来说:

  • cldi-x86_64-pc-windows-msvc.zip,如果你是在Windows下
  • cldi-x86_64-unknown-linux-gnu.tar.gz,如果你是在Linux下
  • cldi-x86_64-apple-darwin.tar.gz,如果你是在MacOS下(非M1)
  • cldi-aarch64-apple-darwin.tar.gz,如果你是在MacOS下(M1)

如果出现libc相关问题,可以使用musl版。

如果在ARM上,使用aarch64版。

从源码编译

1. 安装Rust

如果你没有Rust环境,可以执行以下命令,通过rustup安装。

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

2. 编译并安装cloud-cli

更新Rust版本。

# cloud-cli requires rust 1.58 or above
$ rustup update

可以通过GitHub安装。

$ cargo install --git https://github.com/cita-cloud/cloud-cli --branch main

也可以先把项目clone到本地。

$ git clone https://github.com/cita-cloud/cloud-cli
$ cargo install --path cloud-cli

验证安装

$ cldi --version
cldi 0.5.5

快速入门

配置

1. controller和executor的地址

想要与链交互,首先要知道如何访问链。

CITA-Cloud有两个rpc地址,分别是controller和executor微服务。

假设controller的地址为"localhost:50004", executor的地址为"localhost:50002"。

那么我们可以通过-r-e来告诉cldi如何访问链:

# 注意-r和-e必须在子命令之前
$ cldi -r localhost:50004 -e localhost:50002 get block-number

2. 账户名称

发送交易的命令需要对交易进行签名,我们需要指定签名所使用的账户。 cldi在第一次使用的时候会创建一个名为default的默认账户,用户可以通过-u来指定账户:

# 同样地,-u必须在子命令之前
$ cldi -u Alice send --to <to> --value <value> --data <data>

创建和导入账户相关的命令请参见account

使用Context管理配置

每次都指定微服务的访问地址和使用的账户名称不太方便,我们可以通过context命令来管理这些配置。

# 创建一个Context
$ cldi -r localhost:50004 -e localhost:50002 -u Alice context save Wonderland
# 将这个Context设为默认
$ cldi context default Wonderland
# 也可以使用-c来切换Context,-c也必须在子命令之前
$ cldi -c Wonderland get block-number
# 列出当前Context信息和已保存的Context
$ cldi context list

交互模式

cldi提供了命令行模式和交互模式,在未传入子命令的时候cldi会进入交互模式。

交互模式与命令行模式的命令是等价的,例如:

$ cldi get block-number

等价于

$ cldi
cldi> get block-number

在交互模式下,用户可以通过-c, -r-e来改变当前会话的Context配置。

# 修改当前会话的全局配置
cldi> -r localhost:50004
# 仅针对这条命令应用这个配置
cldi> -r localhost:50004 get block-number

Q: How to quit cldi?
A: :q
A: CTRL-D

缩写

cldi提供了很多命令的缩写,这里列举一些:

cldi> get block-number
cldi> get bn
cldi> get system-config
cldi> get sc
cldi> context list
cldi> ctx ls
cldi> ctx l
cldi> account generate --name Alice
cldi> account gen --name Alice
cldi> account g --name Alice
cldi> a g --name Alice
cldi> bench send
cldi> b send
cldi> watch
cldi> w

这些缩写仅为方便用户操作,不作稳定性保证,不建议在脚本中使用。

命令行模式下的补全

cldi completions <shell-name>命令会输出补全脚本,需要添加到, 例如.profile, .bashrc里才能生效。目前支持的shell有:bash, zsh, powershell, fish, elvish

以bash为例,将下列脚本添加到.bashrc里即可。

source<(cldi completions bash)

使用示例

1.生成账户

如果需要更好的安全性,请加上-p <password>为私钥进行加密。 有密码的账户在硬盘上会进行加密存储,并且不会在生成时显示明文私钥。 加密后的账户需要经过-p <password>解密才能使用。

cldi> account generate --name Alice
{
"crypto_type": "SM",
"address": "0xb7768b2f989eeb9a1c7315aa38fb5fbd68333b8a",
"public_key": "0x325ef60c3d8a94dd363a83f8b9a1ecbe3583b41aa204709eb0d2a19e7e323571d6d4015e5a049bfd04d3ff661385c36fe2066f9aaf72c943ff4ad1fc15e03e73",
"secret_key": "0x9d08b671a8f12141c45edbd59e81eaf282a2534505ad0545bb46bf64d642b071"
}

2.创建环境配置

cldi> -r localhost:50004 -e localhost:50002 -u Alice context save Wonderland
# 设为默认环境
cldi> context default Wonderland

3.查询块高

cldi> get block-number
406030

4.查询系统配置

cldi> get system-config
{
"admin": "0x29222738252b748e4d20a20073d05cd26e87cc00",
"admin_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000",
"block_interval": 4,
"block_interval_pre_hash": "0xe010952e2bf9a2da305af49c2598230e0ecbb37c7ece7dbef55031b775dba64f",
"chain_id": "0x204c9a3301e7e698c45febb5e177ef35a656bb8feb355b6aca85beef5d248c14",
"chain_id_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000",
"emergency_brake": false,
"emergency_brake_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000",
"validators": [
"0x43a8f6a2abd2782e06506695a19693589a53e38a",
"0x4025800dc70684abd1e3eb89086d21d94f1dbfd8",
"0x3b0829e9f547cfecfae7fb3d527e8405d4304222"
],
"validators_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000",
"version": 0,
"version_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000"
}

5.创建合约

我们通过cldi create <data>发送创建合约交易。其中<data>是合约的数据,这里以一个计数器合约为例。返回结果为这个创建合约交易的哈希。

cldi> create 0x608060405234801561001057600080fd5b5060f58061001f6000396000f3006080604052600436106053576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306661abd1460585780634f2be91f146080578063d826f88f146094575b600080fd5b348015606357600080fd5b50606a60a8565b6040518082815260200191505060405180910390f35b348015608b57600080fd5b50609260ae565b005b348015609f57600080fd5b5060a660c0565b005b60005481565b60016000808282540192505081905550565b600080819055505600a165627a7a72305820faa1d1f51d7b5ca2b200e0f6cdef4f2d7e44ee686209e300beb1146f40d32dee0029
0xbdeabf94a31c503deb4400fc63aee2a89e8f43d6570ed7ad5cd4f6f2898be0a2

等待交易上链后,通过cldi get receipt <tx-hash>获取交易回执,在交易回执中的contract_addr项查看创建出来的合约的地址。这里为0xf064e32407b6cc412fe33f6ba55f578ac413ecdc

cldi> get receipt 0xbdeabf94a31c503deb4400fc63aee2a89e8f43d6570ed7ad5cd4f6f2898be0a2
{
"block_number": 406069,
"contract_addr": "0xf064e32407b6cc412fe33f6ba55f578ac413ecdc",
"cumulative_quota_used": "0x0000000000000000000000000000000000000000000000000000000000018ed3",
"error_msg": "",
"legacy_cita_block_hash": "0x265386a6afc6072f0acb5d32e0fe079e101129041dbfed2bee8872a849e8f7a3",
"logs": [],
"logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"quota_used": "0x0000000000000000000000000000000000000000000000000000000000018ed3",
"state_root": "0x96899ff87f9bed55fd880750c2c51661ee24e14f672a1c9d7ac9573536b8c3f0",
"tx_hash": "0xbdeabf94a31c503deb4400fc63aee2a89e8f43d6570ed7ad5cd4f6f2898be0a2",
"tx_index": 0
}

6.调用合约

查询合约数据。当前计数器的值为0。

cldi> call 0xf064e32407b6cc412fe33f6ba55f578ac413ecdc 0x06661abd
0x0000000000000000000000000000000000000000000000000000000000000000

发送交易,使得计数器加一。

cldi> send 0xf064e32407b6cc412fe33f6ba55f578ac413ecdc 0x4f2be91f
0x99e57fdfed555059fa143ad0bc4d8ddc8764f8024fb3b28e880a84667414dec5

等待交易上链后,再次查询,可以看到结果为一,符合预期。

cldi> call 0xf064e32407b6cc412fe33f6ba55f578ac413ecdc 0x06661abd
0x0000000000000000000000000000000000000000000000000000000000000001

更详细的文档参见cloud-cli book

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

cloud-cli

CIBook CISecurity Audit

CITA-Cloud命令行工具。

安装

有几种不同的安装方法。

直接下载预编译的二进制文件

cldi有预编译好的二进制可执行文件,可以根据使用环境下载对应的文件。 https://github.com/cita-cloud/cloud-cli/releases

如果你不知道如何选择,那么一般来说:

  • cldi-x86_64-pc-windows-msvc.zip,如果你是在Windows下
  • cldi-x86_64-unknown-linux-gnu.tar.gz,如果你是在Linux下
  • cldi-x86_64-apple-darwin.tar.gz,如果你是在MacOS下(非M1)
  • cldi-aarch64-apple-darwin.tar.gz,如果你是在MacOS下(M1)

如果出现libc相关问题,可以使用musl版。

如果在ARM上,使用aarch64版。

从源码编译

1. 安装Rust

如果你没有Rust环境,可以执行以下命令,通过rustup安装。

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

2. 编译并安装cloud-cli

更新Rust版本。

# cloud-cli requires rust 1.58 or above
$ rustup update

可以通过GitHub安装。

$ cargo install --git https://github.com/cita-cloud/cloud-cli --branch main

也可以先把项目clone到本地。

$ git clone https://github.com/cita-cloud/cloud-cli
$ cargo install --path cloud-cli

验证安装

$ cldi --version
cldi 0.5.5

快速入门

配置

1. controller和executor的地址

想要与链交互,首先要知道如何访问链。

CITA-Cloud有两个rpc地址,分别是controller和executor微服务。

假设controller的地址为"localhost:50004", executor的地址为"localhost:50002"。

那么我们可以通过-r-e来告诉cldi如何访问链:

# 注意-r和-e必须在子命令之前
$ cldi -r localhost:50004 -e localhost:50002 get block-number

2. 账户名称

发送交易的命令需要对交易进行签名,我们需要指定签名所使用的账户。 cldi在第一次使用的时候会创建一个名为default的默认账户,用户可以通过-u来指定账户:

# 同样地,-u必须在子命令之前
$ cldi -u Alice send --to <to> --value <value> --data <data>

创建和导入账户相关的命令请参见account

使用Context管理配置

每次都指定微服务的访问地址和使用的账户名称不太方便,我们可以通过context命令来管理这些配置。

# 创建一个Context
$ cldi -r localhost:50004 -e localhost:50002 -u Alice context save Wonderland
# 将这个Context设为默认
$ cldi context default Wonderland
# 也可以使用-c来切换Context,-c也必须在子命令之前
$ cldi -c Wonderland get block-number
# 列出当前Context信息和已保存的Context
$ cldi context list

交互模式

cldi提供了命令行模式和交互模式,在未传入子命令的时候cldi会进入交互模式。

交互模式与命令行模式的命令是等价的,例如:

$ cldi get block-number

等价于

$ cldi
cldi> get block-number

在交互模式下,用户可以通过-c, -r-e来改变当前会话的Context配置。

# 修改当前会话的全局配置
cldi> -r localhost:50004
# 仅针对这条命令应用这个配置
cldi> -r localhost:50004 get block-number

Q: How to quit cldi?
A: :q
A: CTRL-D

缩写

cldi提供了很多命令的缩写,这里列举一些:

cldi> get block-number
cldi> get bn
cldi> get system-config
cldi> get sc
cldi> context list
cldi> ctx ls
cldi> ctx l
cldi> account generate --name Alice
cldi> account gen --name Alice
cldi> account g --name Alice
cldi> a g --name Alice
cldi> bench send
cldi> b send
cldi> watch
cldi> w

这些缩写仅为方便用户操作,不作稳定性保证,不建议在脚本中使用。

命令行模式下的补全

cldi completions <shell-name>命令会输出补全脚本,需要添加到, 例如.profile, .bashrc里才能生效。目前支持的shell有:bash, zsh, powershell, fish, elvish

以bash为例,将下列脚本添加到.bashrc里即可。

source<(cldi completions bash)

使用示例

1.生成账户

如果需要更好的安全性,请加上-p <password>为私钥进行加密。 有密码的账户在硬盘上会进行加密存储,并且不会在生成时显示明文私钥。 加密后的账户需要经过-p <password>解密才能使用。

cldi> account generate --name Alice
{
"crypto_type": "SM",
"address": "0xb7768b2f989eeb9a1c7315aa38fb5fbd68333b8a",
"public_key": "0x325ef60c3d8a94dd363a83f8b9a1ecbe3583b41aa204709eb0d2a19e7e323571d6d4015e5a049bfd04d3ff661385c36fe2066f9aaf72c943ff4ad1fc15e03e73",
"secret_key": "0x9d08b671a8f12141c45edbd59e81eaf282a2534505ad0545bb46bf64d642b071"
}

2.创建环境配置

cldi> -r localhost:50004 -e localhost:50002 -u Alice context save Wonderland
# 设为默认环境
cldi> context default Wonderland

3.查询块高

cldi> get block-number
406030

4.查询系统配置

cldi> get system-config
{
"admin": "0x29222738252b748e4d20a20073d05cd26e87cc00",
"admin_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000",
"block_interval": 4,
"block_interval_pre_hash": "0xe010952e2bf9a2da305af49c2598230e0ecbb37c7ece7dbef55031b775dba64f",
"chain_id": "0x204c9a3301e7e698c45febb5e177ef35a656bb8feb355b6aca85beef5d248c14",
"chain_id_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000",
"emergency_brake": false,
"emergency_brake_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000",
"validators": [
"0x43a8f6a2abd2782e06506695a19693589a53e38a",
"0x4025800dc70684abd1e3eb89086d21d94f1dbfd8",
"0x3b0829e9f547cfecfae7fb3d527e8405d4304222"
],
"validators_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000",
"version": 0,
"version_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000"
}

5.创建合约

我们通过cldi create <data>发送创建合约交易。其中<data>是合约的数据,这里以一个计数器合约为例。返回结果为这个创建合约交易的哈希。

cldi> create 0x608060405234801561001057600080fd5b5060f58061001f6000396000f3006080604052600436106053576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306661abd1460585780634f2be91f146080578063d826f88f146094575b600080fd5b348015606357600080fd5b50606a60a8565b6040518082815260200191505060405180910390f35b348015608b57600080fd5b50609260ae565b005b348015609f57600080fd5b5060a660c0565b005b60005481565b60016000808282540192505081905550565b600080819055505600a165627a7a72305820faa1d1f51d7b5ca2b200e0f6cdef4f2d7e44ee686209e300beb1146f40d32dee0029
0xbdeabf94a31c503deb4400fc63aee2a89e8f43d6570ed7ad5cd4f6f2898be0a2

等待交易上链后,通过cldi get receipt <tx-hash>获取交易回执,在交易回执中的contract_addr项查看创建出来的合约的地址。这里为0xf064e32407b6cc412fe33f6ba55f578ac413ecdc

cldi> get receipt 0xbdeabf94a31c503deb4400fc63aee2a89e8f43d6570ed7ad5cd4f6f2898be0a2
{
"block_number": 406069,
"contract_addr": "0xf064e32407b6cc412fe33f6ba55f578ac413ecdc",
"cumulative_quota_used": "0x0000000000000000000000000000000000000000000000000000000000018ed3",
"error_msg": "",
"legacy_cita_block_hash": "0x265386a6afc6072f0acb5d32e0fe079e101129041dbfed2bee8872a849e8f7a3",
"logs": [],
"logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"quota_used": "0x0000000000000000000000000000000000000000000000000000000000018ed3",
"state_root": "0x96899ff87f9bed55fd880750c2c51661ee24e14f672a1c9d7ac9573536b8c3f0",
"tx_hash": "0xbdeabf94a31c503deb4400fc63aee2a89e8f43d6570ed7ad5cd4f6f2898be0a2",
"tx_index": 0
}

6.调用合约

查询合约数据。当前计数器的值为0。

cldi> call 0xf064e32407b6cc412fe33f6ba55f578ac413ecdc 0x06661abd
0x0000000000000000000000000000000000000000000000000000000000000000

发送交易,使得计数器加一。

cldi> send 0xf064e32407b6cc412fe33f6ba55f578ac413ecdc 0x4f2be91f
0x99e57fdfed555059fa143ad0bc4d8ddc8764f8024fb3b28e880a84667414dec5

等待交易上链后,再次查询,可以看到结果为一,符合预期。

cldi> call 0xf064e32407b6cc412fe33f6ba55f578ac413ecdc 0x06661abd
0x0000000000000000000000000000000000000000000000000000000000000001

更详细的文档参见cloud-cli book

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

cloud-cli

CIBook CISecurity Audit

CITA-Cloud命令行工具。

安装

有几种不同的安装方法。

直接下载预编译的二进制文件

cldi有预编译好的二进制可执行文件,可以根据使用环境下载对应的文件。 https://github.com/cita-cloud/cloud-cli/releases

如果你不知道如何选择,那么一般来说:

  • cldi-x86_64-pc-windows-msvc.zip,如果你是在Windows下
  • cldi-x86_64-unknown-linux-gnu.tar.gz,如果你是在Linux下
  • cldi-x86_64-apple-darwin.tar.gz,如果你是在MacOS下(非M1)
  • cldi-aarch64-apple-darwin.tar.gz,如果你是在MacOS下(M1)

如果出现libc相关问题,可以使用musl版。

如果在ARM上,使用aarch64版。

从源码编译

1. 安装Rust

如果你没有Rust环境,可以执行以下命令,通过rustup安装。

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

2. 编译并安装cloud-cli

更新Rust版本。

# cloud-cli requires rust 1.58 or above
$ rustup update

可以通过GitHub安装。

$ cargo install --git https://github.com/cita-cloud/cloud-cli --branch main

也可以先把项目clone到本地。

$ git clone https://github.com/cita-cloud/cloud-cli
$ cargo install --path cloud-cli

验证安装

$ cldi --version
cldi 0.5.5

快速入门

配置

1. controller和executor的地址

想要与链交互,首先要知道如何访问链。

CITA-Cloud有两个rpc地址,分别是controller和executor微服务。

假设controller的地址为"localhost:50004", executor的地址为"localhost:50002"。

那么我们可以通过-r-e来告诉cldi如何访问链:

# 注意-r和-e必须在子命令之前
$ cldi -r localhost:50004 -e localhost:50002 get block-number

2. 账户名称

发送交易的命令需要对交易进行签名,我们需要指定签名所使用的账户。 cldi在第一次使用的时候会创建一个名为default的默认账户,用户可以通过-u来指定账户:

# 同样地,-u必须在子命令之前
$ cldi -u Alice send --to <to> --value <value> --data <data>

创建和导入账户相关的命令请参见account

使用Context管理配置

每次都指定微服务的访问地址和使用的账户名称不太方便,我们可以通过context命令来管理这些配置。

# 创建一个Context
$ cldi -r localhost:50004 -e localhost:50002 -u Alice context save Wonderland
# 将这个Context设为默认
$ cldi context default Wonderland
# 也可以使用-c来切换Context,-c也必须在子命令之前
$ cldi -c Wonderland get block-number
# 列出当前Context信息和已保存的Context
$ cldi context list

交互模式

cldi提供了命令行模式和交互模式,在未传入子命令的时候cldi会进入交互模式。

交互模式与命令行模式的命令是等价的,例如:

$ cldi get block-number

等价于

$ cldi
cldi> get block-number

在交互模式下,用户可以通过-c, -r-e来改变当前会话的Context配置。

# 修改当前会话的全局配置
cldi> -r localhost:50004
# 仅针对这条命令应用这个配置
cldi> -r localhost:50004 get block-number

Q: How to quit cldi?
A: :q
A: CTRL-D

缩写

cldi提供了很多命令的缩写,这里列举一些:

cldi> get block-number
cldi> get bn
cldi> get system-config
cldi> get sc
cldi> context list
cldi> ctx ls
cldi> ctx l
cldi> account generate --name Alice
cldi> account gen --name Alice
cldi> account g --name Alice
cldi> a g --name Alice
cldi> bench send
cldi> b send
cldi> watch
cldi> w

这些缩写仅为方便用户操作,不作稳定性保证,不建议在脚本中使用。

命令行模式下的补全

cldi completions <shell-name>命令会输出补全脚本,需要添加到, 例如.profile, .bashrc里才能生效。目前支持的shell有:bash, zsh, powershell, fish, elvish

以bash为例,将下列脚本添加到.bashrc里即可。

source<(cldi completions bash)

使用示例

1.生成账户

如果需要更好的安全性,请加上-p <password>为私钥进行加密。 有密码的账户在硬盘上会进行加密存储,并且不会在生成时显示明文私钥。 加密后的账户需要经过-p <password>解密才能使用。

cldi> account generate --name Alice
{
"crypto_type": "SM",
"address": "0xb7768b2f989eeb9a1c7315aa38fb5fbd68333b8a",
"public_key": "0x325ef60c3d8a94dd363a83f8b9a1ecbe3583b41aa204709eb0d2a19e7e323571d6d4015e5a049bfd04d3ff661385c36fe2066f9aaf72c943ff4ad1fc15e03e73",
"secret_key": "0x9d08b671a8f12141c45edbd59e81eaf282a2534505ad0545bb46bf64d642b071"
}

2.创建环境配置

cldi> -r localhost:50004 -e localhost:50002 -u Alice context save Wonderland
# 设为默认环境
cldi> context default Wonderland

3.查询块高

cldi> get block-number
406030

4.查询系统配置

cldi> get system-config
{
"admin": "0x29222738252b748e4d20a20073d05cd26e87cc00",
"admin_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000",
"block_interval": 4,
"block_interval_pre_hash": "0xe010952e2bf9a2da305af49c2598230e0ecbb37c7ece7dbef55031b775dba64f",
"chain_id": "0x204c9a3301e7e698c45febb5e177ef35a656bb8feb355b6aca85beef5d248c14",
"chain_id_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000",
"emergency_brake": false,
"emergency_brake_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000",
"validators": [
"0x43a8f6a2abd2782e06506695a19693589a53e38a",
"0x4025800dc70684abd1e3eb89086d21d94f1dbfd8",
"0x3b0829e9f547cfecfae7fb3d527e8405d4304222"
],
"validators_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000",
"version": 0,
"version_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000"
}

5.创建合约

我们通过cldi create <data>发送创建合约交易。其中<data>是合约的数据,这里以一个计数器合约为例。返回结果为这个创建合约交易的哈希。

cldi> create 0x608060405234801561001057600080fd5b5060f58061001f6000396000f3006080604052600436106053576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306661abd1460585780634f2be91f146080578063d826f88f146094575b600080fd5b348015606357600080fd5b50606a60a8565b6040518082815260200191505060405180910390f35b348015608b57600080fd5b50609260ae565b005b348015609f57600080fd5b5060a660c0565b005b60005481565b60016000808282540192505081905550565b600080819055505600a165627a7a72305820faa1d1f51d7b5ca2b200e0f6cdef4f2d7e44ee686209e300beb1146f40d32dee0029
0xbdeabf94a31c503deb4400fc63aee2a89e8f43d6570ed7ad5cd4f6f2898be0a2

等待交易上链后,通过cldi get receipt <tx-hash>获取交易回执,在交易回执中的contract_addr项查看创建出来的合约的地址。这里为0xf064e32407b6cc412fe33f6ba55f578ac413ecdc

cldi> get receipt 0xbdeabf94a31c503deb4400fc63aee2a89e8f43d6570ed7ad5cd4f6f2898be0a2
{
"block_number": 406069,
"contract_addr": "0xf064e32407b6cc412fe33f6ba55f578ac413ecdc",
"cumulative_quota_used": "0x0000000000000000000000000000000000000000000000000000000000018ed3",
"error_msg": "",
"legacy_cita_block_hash": "0x265386a6afc6072f0acb5d32e0fe079e101129041dbfed2bee8872a849e8f7a3",
"logs": [],
"logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"quota_used": "0x0000000000000000000000000000000000000000000000000000000000018ed3",
"state_root": "0x96899ff87f9bed55fd880750c2c51661ee24e14f672a1c9d7ac9573536b8c3f0",
"tx_hash": "0xbdeabf94a31c503deb4400fc63aee2a89e8f43d6570ed7ad5cd4f6f2898be0a2",
"tx_index": 0
}

6.调用合约

查询合约数据。当前计数器的值为0。

cldi> call 0xf064e32407b6cc412fe33f6ba55f578ac413ecdc 0x06661abd
0x0000000000000000000000000000000000000000000000000000000000000000

发送交易,使得计数器加一。

cldi> send 0xf064e32407b6cc412fe33f6ba55f578ac413ecdc 0x4f2be91f
0x99e57fdfed555059fa143ad0bc4d8ddc8764f8024fb3b28e880a84667414dec5

等待交易上链后,再次查询,可以看到结果为一,符合预期。

cldi> call 0xf064e32407b6cc412fe33f6ba55f578ac413ecdc 0x06661abd
0x0000000000000000000000000000000000000000000000000000000000000001

更详细的文档参见cloud-cli book

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

cloud-cli

CIBook CISecurity Audit

CITA-Cloud命令行工具。

安装

有几种不同的安装方法。

直接下载预编译的二进制文件

cldi有预编译好的二进制可执行文件,可以根据使用环境下载对应的文件。 https://github.com/cita-cloud/cloud-cli/releases

如果你不知道如何选择,那么一般来说:

  • cldi-x86_64-pc-windows-msvc.zip,如果你是在Windows下
  • cldi-x86_64-unknown-linux-gnu.tar.gz,如果你是在Linux下
  • cldi-x86_64-apple-darwin.tar.gz,如果你是在MacOS下(非M1)
  • cldi-aarch64-apple-darwin.tar.gz,如果你是在MacOS下(M1)

如果出现libc相关问题,可以使用musl版。

如果在ARM上,使用aarch64版。

从源码编译

1. 安装Rust

如果你没有Rust环境,可以执行以下命令,通过rustup安装。

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

2. 编译并安装cloud-cli

更新Rust版本。

# cloud-cli requires rust 1.58 or above
$ rustup update

可以通过GitHub安装。

$ cargo install --git https://github.com/cita-cloud/cloud-cli --branch main

也可以先把项目clone到本地。

$ git clone https://github.com/cita-cloud/cloud-cli
$ cargo install --path cloud-cli

验证安装

$ cldi --version
cldi 0.5.5

快速入门

配置

1. controller和executor的地址

想要与链交互,首先要知道如何访问链。

CITA-Cloud有两个rpc地址,分别是controller和executor微服务。

假设controller的地址为"localhost:50004", executor的地址为"localhost:50002"。

那么我们可以通过-r-e来告诉cldi如何访问链:

# 注意-r和-e必须在子命令之前
$ cldi -r localhost:50004 -e localhost:50002 get block-number

2. 账户名称

发送交易的命令需要对交易进行签名,我们需要指定签名所使用的账户。 cldi在第一次使用的时候会创建一个名为default的默认账户,用户可以通过-u来指定账户:

# 同样地,-u必须在子命令之前
$ cldi -u Alice send --to <to> --value <value> --data <data>

创建和导入账户相关的命令请参见account

使用Context管理配置

每次都指定微服务的访问地址和使用的账户名称不太方便,我们可以通过context命令来管理这些配置。

# 创建一个Context
$ cldi -r localhost:50004 -e localhost:50002 -u Alice context save Wonderland
# 将这个Context设为默认
$ cldi context default Wonderland
# 也可以使用-c来切换Context,-c也必须在子命令之前
$ cldi -c Wonderland get block-number
# 列出当前Context信息和已保存的Context
$ cldi context list

交互模式

cldi提供了命令行模式和交互模式,在未传入子命令的时候cldi会进入交互模式。

交互模式与命令行模式的命令是等价的,例如:

$ cldi get block-number

等价于

$ cldi
cldi> get block-number

在交互模式下,用户可以通过-c, -r-e来改变当前会话的Context配置。

# 修改当前会话的全局配置
cldi> -r localhost:50004
# 仅针对这条命令应用这个配置
cldi> -r localhost:50004 get block-number

Q: How to quit cldi?
A: :q
A: CTRL-D

缩写

cldi提供了很多命令的缩写,这里列举一些:

cldi> get block-number
cldi> get bn
cldi> get system-config
cldi> get sc
cldi> context list
cldi> ctx ls
cldi> ctx l
cldi> account generate --name Alice
cldi> account gen --name Alice
cldi> account g --name Alice
cldi> a g --name Alice
cldi> bench send
cldi> b send
cldi> watch
cldi> w

这些缩写仅为方便用户操作,不作稳定性保证,不建议在脚本中使用。

命令行模式下的补全

cldi completions <shell-name>命令会输出补全脚本,需要添加到, 例如.profile, .bashrc里才能生效。目前支持的shell有:bash, zsh, powershell, fish, elvish

以bash为例,将下列脚本添加到.bashrc里即可。

source<(cldi completions bash)

使用示例

1.生成账户

如果需要更好的安全性,请加上-p <password>为私钥进行加密。 有密码的账户在硬盘上会进行加密存储,并且不会在生成时显示明文私钥。 加密后的账户需要经过-p <password>解密才能使用。

cldi> account generate --name Alice
{
"crypto_type": "SM",
"address": "0xb7768b2f989eeb9a1c7315aa38fb5fbd68333b8a",
"public_key": "0x325ef60c3d8a94dd363a83f8b9a1ecbe3583b41aa204709eb0d2a19e7e323571d6d4015e5a049bfd04d3ff661385c36fe2066f9aaf72c943ff4ad1fc15e03e73",
"secret_key": "0x9d08b671a8f12141c45edbd59e81eaf282a2534505ad0545bb46bf64d642b071"
}

2.创建环境配置

cldi> -r localhost:50004 -e localhost:50002 -u Alice context save Wonderland
# 设为默认环境
cldi> context default Wonderland

3.查询块高

cldi> get block-number
406030

4.查询系统配置

cldi> get system-config
{
"admin": "0x29222738252b748e4d20a20073d05cd26e87cc00",
"admin_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000",
"block_interval": 4,
"block_interval_pre_hash": "0xe010952e2bf9a2da305af49c2598230e0ecbb37c7ece7dbef55031b775dba64f",
"chain_id": "0x204c9a3301e7e698c45febb5e177ef35a656bb8feb355b6aca85beef5d248c14",
"chain_id_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000",
"emergency_brake": false,
"emergency_brake_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000",
"validators": [
"0x43a8f6a2abd2782e06506695a19693589a53e38a",
"0x4025800dc70684abd1e3eb89086d21d94f1dbfd8",
"0x3b0829e9f547cfecfae7fb3d527e8405d4304222"
],
"validators_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000",
"version": 0,
"version_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000"
}

5.创建合约

我们通过cldi create <data>发送创建合约交易。其中<data>是合约的数据,这里以一个计数器合约为例。返回结果为这个创建合约交易的哈希。

cldi> create 0x608060405234801561001057600080fd5b5060f58061001f6000396000f3006080604052600436106053576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306661abd1460585780634f2be91f146080578063d826f88f146094575b600080fd5b348015606357600080fd5b50606a60a8565b6040518082815260200191505060405180910390f35b348015608b57600080fd5b50609260ae565b005b348015609f57600080fd5b5060a660c0565b005b60005481565b60016000808282540192505081905550565b600080819055505600a165627a7a72305820faa1d1f51d7b5ca2b200e0f6cdef4f2d7e44ee686209e300beb1146f40d32dee0029
0xbdeabf94a31c503deb4400fc63aee2a89e8f43d6570ed7ad5cd4f6f2898be0a2

等待交易上链后,通过cldi get receipt <tx-hash>获取交易回执,在交易回执中的contract_addr项查看创建出来的合约的地址。这里为0xf064e32407b6cc412fe33f6ba55f578ac413ecdc

cldi> get receipt 0xbdeabf94a31c503deb4400fc63aee2a89e8f43d6570ed7ad5cd4f6f2898be0a2
{
"block_number": 406069,
"contract_addr": "0xf064e32407b6cc412fe33f6ba55f578ac413ecdc",
"cumulative_quota_used": "0x0000000000000000000000000000000000000000000000000000000000018ed3",
"error_msg": "",
"legacy_cita_block_hash": "0x265386a6afc6072f0acb5d32e0fe079e101129041dbfed2bee8872a849e8f7a3",
"logs": [],
"logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"quota_used": "0x0000000000000000000000000000000000000000000000000000000000018ed3",
"state_root": "0x96899ff87f9bed55fd880750c2c51661ee24e14f672a1c9d7ac9573536b8c3f0",
"tx_hash": "0xbdeabf94a31c503deb4400fc63aee2a89e8f43d6570ed7ad5cd4f6f2898be0a2",
"tx_index": 0
}

6.调用合约

查询合约数据。当前计数器的值为0。

cldi> call 0xf064e32407b6cc412fe33f6ba55f578ac413ecdc 0x06661abd
0x0000000000000000000000000000000000000000000000000000000000000000

发送交易,使得计数器加一。

cldi> send 0xf064e32407b6cc412fe33f6ba55f578ac413ecdc 0x4f2be91f
0x99e57fdfed555059fa143ad0bc4d8ddc8764f8024fb3b28e880a84667414dec5

等待交易上链后,再次查询,可以看到结果为一,符合预期。

cldi> call 0xf064e32407b6cc412fe33f6ba55f578ac413ecdc 0x06661abd
0x0000000000000000000000000000000000000000000000000000000000000001

更详细的文档参见cloud-cli book

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

cloud-cli

CIBook CISecurity Audit

CITA-Cloud命令行工具。

安装

有几种不同的安装方法。

直接下载预编译的二进制文件

cldi有预编译好的二进制可执行文件,可以根据使用环境下载对应的文件。 https://github.com/cita-cloud/cloud-cli/releases

如果你不知道如何选择,那么一般来说:

  • cldi-x86_64-pc-windows-msvc.zip,如果你是在Windows下
  • cldi-x86_64-unknown-linux-gnu.tar.gz,如果你是在Linux下
  • cldi-x86_64-apple-darwin.tar.gz,如果你是在MacOS下(非M1)
  • cldi-aarch64-apple-darwin.tar.gz,如果你是在MacOS下(M1)

如果出现libc相关问题,可以使用musl版。

如果在ARM上,使用aarch64版。

从源码编译

1. 安装Rust

如果你没有Rust环境,可以执行以下命令,通过rustup安装。

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

2. 编译并安装cloud-cli

更新Rust版本。

# cloud-cli requires rust 1.58 or above
$ rustup update

可以通过GitHub安装。

$ cargo install --git https://github.com/cita-cloud/cloud-cli --branch main

也可以先把项目clone到本地。

$ git clone https://github.com/cita-cloud/cloud-cli
$ cargo install --path cloud-cli

验证安装

$ cldi --version
cldi 0.5.5

快速入门

配置

1. controller和executor的地址

想要与链交互,首先要知道如何访问链。

CITA-Cloud有两个rpc地址,分别是controller和executor微服务。

假设controller的地址为"localhost:50004", executor的地址为"localhost:50002"。

那么我们可以通过-r-e来告诉cldi如何访问链:

# 注意-r和-e必须在子命令之前
$ cldi -r localhost:50004 -e localhost:50002 get block-number

2. 账户名称

发送交易的命令需要对交易进行签名,我们需要指定签名所使用的账户。 cldi在第一次使用的时候会创建一个名为default的默认账户,用户可以通过-u来指定账户:

# 同样地,-u必须在子命令之前
$ cldi -u Alice send --to <to> --value <value> --data <data>

创建和导入账户相关的命令请参见account

使用Context管理配置

每次都指定微服务的访问地址和使用的账户名称不太方便,我们可以通过context命令来管理这些配置。

# 创建一个Context
$ cldi -r localhost:50004 -e localhost:50002 -u Alice context save Wonderland
# 将这个Context设为默认
$ cldi context default Wonderland
# 也可以使用-c来切换Context,-c也必须在子命令之前
$ cldi -c Wonderland get block-number
# 列出当前Context信息和已保存的Context
$ cldi context list

交互模式

cldi提供了命令行模式和交互模式,在未传入子命令的时候cldi会进入交互模式。

交互模式与命令行模式的命令是等价的,例如:

$ cldi get block-number

等价于

$ cldi
cldi> get block-number

在交互模式下,用户可以通过-c, -r-e来改变当前会话的Context配置。

# 修改当前会话的全局配置
cldi> -r localhost:50004
# 仅针对这条命令应用这个配置
cldi> -r localhost:50004 get block-number

Q: How to quit cldi?
A: :q
A: CTRL-D

缩写

cldi提供了很多命令的缩写,这里列举一些:

cldi> get block-number
cldi> get bn
cldi> get system-config
cldi> get sc
cldi> context list
cldi> ctx ls
cldi> ctx l
cldi> account generate --name Alice
cldi> account gen --name Alice
cldi> account g --name Alice
cldi> a g --name Alice
cldi> bench send
cldi> b send
cldi> watch
cldi> w

这些缩写仅为方便用户操作,不作稳定性保证,不建议在脚本中使用。

命令行模式下的补全

cldi completions <shell-name>命令会输出补全脚本,需要添加到, 例如.profile, .bashrc里才能生效。目前支持的shell有:bash, zsh, powershell, fish, elvish

以bash为例,将下列脚本添加到.bashrc里即可。

source<(cldi completions bash)

使用示例

1.生成账户

如果需要更好的安全性,请加上-p <password>为私钥进行加密。 有密码的账户在硬盘上会进行加密存储,并且不会在生成时显示明文私钥。 加密后的账户需要经过-p <password>解密才能使用。

cldi> account generate --name Alice
{
"crypto_type": "SM",
"address": "0xb7768b2f989eeb9a1c7315aa38fb5fbd68333b8a",
"public_key": "0x325ef60c3d8a94dd363a83f8b9a1ecbe3583b41aa204709eb0d2a19e7e323571d6d4015e5a049bfd04d3ff661385c36fe2066f9aaf72c943ff4ad1fc15e03e73",
"secret_key": "0x9d08b671a8f12141c45edbd59e81eaf282a2534505ad0545bb46bf64d642b071"
}

2.创建环境配置

cldi> -r localhost:50004 -e localhost:50002 -u Alice context save Wonderland
# 设为默认环境
cldi> context default Wonderland

3.查询块高

cldi> get block-number
406030

4.查询系统配置

cldi> get system-config
{
"admin": "0x29222738252b748e4d20a20073d05cd26e87cc00",
"admin_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000",
"block_interval": 4,
"block_interval_pre_hash": "0xe010952e2bf9a2da305af49c2598230e0ecbb37c7ece7dbef55031b775dba64f",
"chain_id": "0x204c9a3301e7e698c45febb5e177ef35a656bb8feb355b6aca85beef5d248c14",
"chain_id_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000",
"emergency_brake": false,
"emergency_brake_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000",
"validators": [
"0x43a8f6a2abd2782e06506695a19693589a53e38a",
"0x4025800dc70684abd1e3eb89086d21d94f1dbfd8",
"0x3b0829e9f547cfecfae7fb3d527e8405d4304222"
],
"validators_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000",
"version": 0,
"version_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000"
}

5.创建合约

我们通过cldi create <data>发送创建合约交易。其中<data>是合约的数据,这里以一个计数器合约为例。返回结果为这个创建合约交易的哈希。

cldi> create 0x608060405234801561001057600080fd5b5060f58061001f6000396000f3006080604052600436106053576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306661abd1460585780634f2be91f146080578063d826f88f146094575b600080fd5b348015606357600080fd5b50606a60a8565b6040518082815260200191505060405180910390f35b348015608b57600080fd5b50609260ae565b005b348015609f57600080fd5b5060a660c0565b005b60005481565b60016000808282540192505081905550565b600080819055505600a165627a7a72305820faa1d1f51d7b5ca2b200e0f6cdef4f2d7e44ee686209e300beb1146f40d32dee0029
0xbdeabf94a31c503deb4400fc63aee2a89e8f43d6570ed7ad5cd4f6f2898be0a2

等待交易上链后,通过cldi get receipt <tx-hash>获取交易回执,在交易回执中的contract_addr项查看创建出来的合约的地址。这里为0xf064e32407b6cc412fe33f6ba55f578ac413ecdc

cldi> get receipt 0xbdeabf94a31c503deb4400fc63aee2a89e8f43d6570ed7ad5cd4f6f2898be0a2
{
"block_number": 406069,
"contract_addr": "0xf064e32407b6cc412fe33f6ba55f578ac413ecdc",
"cumulative_quota_used": "0x0000000000000000000000000000000000000000000000000000000000018ed3",
"error_msg": "",
"legacy_cita_block_hash": "0x265386a6afc6072f0acb5d32e0fe079e101129041dbfed2bee8872a849e8f7a3",
"logs": [],
"logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"quota_used": "0x0000000000000000000000000000000000000000000000000000000000018ed3",
"state_root": "0x96899ff87f9bed55fd880750c2c51661ee24e14f672a1c9d7ac9573536b8c3f0",
"tx_hash": "0xbdeabf94a31c503deb4400fc63aee2a89e8f43d6570ed7ad5cd4f6f2898be0a2",
"tx_index": 0
}

6.调用合约

查询合约数据。当前计数器的值为0。

cldi> call 0xf064e32407b6cc412fe33f6ba55f578ac413ecdc 0x06661abd
0x0000000000000000000000000000000000000000000000000000000000000000

发送交易,使得计数器加一。

cldi> send 0xf064e32407b6cc412fe33f6ba55f578ac413ecdc 0x4f2be91f
0x99e57fdfed555059fa143ad0bc4d8ddc8764f8024fb3b28e880a84667414dec5

等待交易上链后,再次查询,可以看到结果为一,符合预期。

cldi> call 0xf064e32407b6cc412fe33f6ba55f578ac413ecdc 0x06661abd
0x0000000000000000000000000000000000000000000000000000000000000001

更详细的文档参见cloud-cli book

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

cloud-cli

CIBook CISecurity Audit

CITA-Cloud命令行工具。

安装

有几种不同的安装方法。

直接下载预编译的二进制文件

cldi有预编译好的二进制可执行文件,可以根据使用环境下载对应的文件。 https://github.com/cita-cloud/cloud-cli/releases

如果你不知道如何选择,那么一般来说:

  • cldi-x86_64-pc-windows-msvc.zip,如果你是在Windows下
  • cldi-x86_64-unknown-linux-gnu.tar.gz,如果你是在Linux下
  • cldi-x86_64-apple-darwin.tar.gz,如果你是在MacOS下(非M1)
  • cldi-aarch64-apple-darwin.tar.gz,如果你是在MacOS下(M1)

如果出现libc相关问题,可以使用musl版。

如果在ARM上,使用aarch64版。

从源码编译

1. 安装Rust

如果你没有Rust环境,可以执行以下命令,通过rustup安装。

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

2. 编译并安装cloud-cli

更新Rust版本。

# cloud-cli requires rust 1.58 or above
$ rustup update

可以通过GitHub安装。

$ cargo install --git https://github.com/cita-cloud/cloud-cli --branch main

也可以先把项目clone到本地。

$ git clone https://github.com/cita-cloud/cloud-cli
$ cargo install --path cloud-cli

验证安装

$ cldi --version
cldi 0.5.5

快速入门

配置

1. controller和executor的地址

想要与链交互,首先要知道如何访问链。

CITA-Cloud有两个rpc地址,分别是controller和executor微服务。

假设controller的地址为"localhost:50004", executor的地址为"localhost:50002"。

那么我们可以通过-r-e来告诉cldi如何访问链:

# 注意-r和-e必须在子命令之前
$ cldi -r localhost:50004 -e localhost:50002 get block-number

2. 账户名称

发送交易的命令需要对交易进行签名,我们需要指定签名所使用的账户。 cldi在第一次使用的时候会创建一个名为default的默认账户,用户可以通过-u来指定账户:

# 同样地,-u必须在子命令之前
$ cldi -u Alice send --to <to> --value <value> --data <data>

创建和导入账户相关的命令请参见account

使用Context管理配置

每次都指定微服务的访问地址和使用的账户名称不太方便,我们可以通过context命令来管理这些配置。

# 创建一个Context
$ cldi -r localhost:50004 -e localhost:50002 -u Alice context save Wonderland
# 将这个Context设为默认
$ cldi context default Wonderland
# 也可以使用-c来切换Context,-c也必须在子命令之前
$ cldi -c Wonderland get block-number
# 列出当前Context信息和已保存的Context
$ cldi context list

交互模式

cldi提供了命令行模式和交互模式,在未传入子命令的时候cldi会进入交互模式。

交互模式与命令行模式的命令是等价的,例如:

$ cldi get block-number

等价于

$ cldi
cldi> get block-number

在交互模式下,用户可以通过-c, -r-e来改变当前会话的Context配置。

# 修改当前会话的全局配置
cldi> -r localhost:50004
# 仅针对这条命令应用这个配置
cldi> -r localhost:50004 get block-number

Q: How to quit cldi?
A: :q
A: CTRL-D

缩写

cldi提供了很多命令的缩写,这里列举一些:

cldi> get block-number
cldi> get bn
cldi> get system-config
cldi> get sc
cldi> context list
cldi> ctx ls
cldi> ctx l
cldi> account generate --name Alice
cldi> account gen --name Alice
cldi> account g --name Alice
cldi> a g --name Alice
cldi> bench send
cldi> b send
cldi> watch
cldi> w

这些缩写仅为方便用户操作,不作稳定性保证,不建议在脚本中使用。

命令行模式下的补全

cldi completions <shell-name>命令会输出补全脚本,需要添加到, 例如.profile, .bashrc里才能生效。目前支持的shell有:bash, zsh, powershell, fish, elvish

以bash为例,将下列脚本添加到.bashrc里即可。

source<(cldi completions bash)

使用示例

1.生成账户

如果需要更好的安全性,请加上-p <password>为私钥进行加密。 有密码的账户在硬盘上会进行加密存储,并且不会在生成时显示明文私钥。 加密后的账户需要经过-p <password>解密才能使用。

cldi> account generate --name Alice
{
"crypto_type": "SM",
"address": "0xb7768b2f989eeb9a1c7315aa38fb5fbd68333b8a",
"public_key": "0x325ef60c3d8a94dd363a83f8b9a1ecbe3583b41aa204709eb0d2a19e7e323571d6d4015e5a049bfd04d3ff661385c36fe2066f9aaf72c943ff4ad1fc15e03e73",
"secret_key": "0x9d08b671a8f12141c45edbd59e81eaf282a2534505ad0545bb46bf64d642b071"
}

2.创建环境配置

cldi> -r localhost:50004 -e localhost:50002 -u Alice context save Wonderland
# 设为默认环境
cldi> context default Wonderland

3.查询块高

cldi> get block-number
406030

4.查询系统配置

cldi> get system-config
{
"admin": "0x29222738252b748e4d20a20073d05cd26e87cc00",
"admin_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000",
"block_interval": 4,
"block_interval_pre_hash": "0xe010952e2bf9a2da305af49c2598230e0ecbb37c7ece7dbef55031b775dba64f",
"chain_id": "0x204c9a3301e7e698c45febb5e177ef35a656bb8feb355b6aca85beef5d248c14",
"chain_id_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000",
"emergency_brake": false,
"emergency_brake_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000",
"validators": [
"0x43a8f6a2abd2782e06506695a19693589a53e38a",
"0x4025800dc70684abd1e3eb89086d21d94f1dbfd8",
"0x3b0829e9f547cfecfae7fb3d527e8405d4304222"
],
"validators_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000",
"version": 0,
"version_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000"
}

5.创建合约

我们通过cldi create <data>发送创建合约交易。其中<data>是合约的数据,这里以一个计数器合约为例。返回结果为这个创建合约交易的哈希。

cldi> create 0x608060405234801561001057600080fd5b5060f58061001f6000396000f3006080604052600436106053576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306661abd1460585780634f2be91f146080578063d826f88f146094575b600080fd5b348015606357600080fd5b50606a60a8565b6040518082815260200191505060405180910390f35b348015608b57600080fd5b50609260ae565b005b348015609f57600080fd5b5060a660c0565b005b60005481565b60016000808282540192505081905550565b600080819055505600a165627a7a72305820faa1d1f51d7b5ca2b200e0f6cdef4f2d7e44ee686209e300beb1146f40d32dee0029
0xbdeabf94a31c503deb4400fc63aee2a89e8f43d6570ed7ad5cd4f6f2898be0a2

等待交易上链后,通过cldi get receipt <tx-hash>获取交易回执,在交易回执中的contract_addr项查看创建出来的合约的地址。这里为0xf064e32407b6cc412fe33f6ba55f578ac413ecdc

cldi> get receipt 0xbdeabf94a31c503deb4400fc63aee2a89e8f43d6570ed7ad5cd4f6f2898be0a2
{
"block_number": 406069,
"contract_addr": "0xf064e32407b6cc412fe33f6ba55f578ac413ecdc",
"cumulative_quota_used": "0x0000000000000000000000000000000000000000000000000000000000018ed3",
"error_msg": "",
"legacy_cita_block_hash": "0x265386a6afc6072f0acb5d32e0fe079e101129041dbfed2bee8872a849e8f7a3",
"logs": [],
"logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"quota_used": "0x0000000000000000000000000000000000000000000000000000000000018ed3",
"state_root": "0x96899ff87f9bed55fd880750c2c51661ee24e14f672a1c9d7ac9573536b8c3f0",
"tx_hash": "0xbdeabf94a31c503deb4400fc63aee2a89e8f43d6570ed7ad5cd4f6f2898be0a2",
"tx_index": 0
}

6.调用合约

查询合约数据。当前计数器的值为0。

cldi> call 0xf064e32407b6cc412fe33f6ba55f578ac413ecdc 0x06661abd
0x0000000000000000000000000000000000000000000000000000000000000000

发送交易,使得计数器加一。

cldi> send 0xf064e32407b6cc412fe33f6ba55f578ac413ecdc 0x4f2be91f
0x99e57fdfed555059fa143ad0bc4d8ddc8764f8024fb3b28e880a84667414dec5

等待交易上链后,再次查询,可以看到结果为一,符合预期。

cldi> call 0xf064e32407b6cc412fe33f6ba55f578ac413ecdc 0x06661abd
0x0000000000000000000000000000000000000000000000000000000000000001

更详细的文档参见cloud-cli book

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

cloud-cli

CIBook CISecurity Audit

CITA-Cloud命令行工具。

安装

有几种不同的安装方法。

直接下载预编译的二进制文件

cldi有预编译好的二进制可执行文件,可以根据使用环境下载对应的文件。 https://github.com/cita-cloud/cloud-cli/releases

如果你不知道如何选择,那么一般来说:

  • cldi-x86_64-pc-windows-msvc.zip,如果你是在Windows下
  • cldi-x86_64-unknown-linux-gnu.tar.gz,如果你是在Linux下
  • cldi-x86_64-apple-darwin.tar.gz,如果你是在MacOS下(非M1)
  • cldi-aarch64-apple-darwin.tar.gz,如果你是在MacOS下(M1)

如果出现libc相关问题,可以使用musl版。

如果在ARM上,使用aarch64版。

从源码编译

1. 安装Rust

如果你没有Rust环境,可以执行以下命令,通过rustup安装。

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

2. 编译并安装cloud-cli

更新Rust版本。

# cloud-cli requires rust 1.58 or above
$ rustup update

可以通过GitHub安装。

$ cargo install --git https://github.com/cita-cloud/cloud-cli --branch main

也可以先把项目clone到本地。

$ git clone https://github.com/cita-cloud/cloud-cli
$ cargo install --path cloud-cli

验证安装

$ cldi --version
cldi 0.5.5

快速入门

配置

1. controller和executor的地址

想要与链交互,首先要知道如何访问链。

CITA-Cloud有两个rpc地址,分别是controller和executor微服务。

假设controller的地址为"localhost:50004", executor的地址为"localhost:50002"。

那么我们可以通过-r-e来告诉cldi如何访问链:

# 注意-r和-e必须在子命令之前
$ cldi -r localhost:50004 -e localhost:50002 get block-number

2. 账户名称

发送交易的命令需要对交易进行签名,我们需要指定签名所使用的账户。 cldi在第一次使用的时候会创建一个名为default的默认账户,用户可以通过-u来指定账户:

# 同样地,-u必须在子命令之前
$ cldi -u Alice send --to <to> --value <value> --data <data>

创建和导入账户相关的命令请参见account

使用Context管理配置

每次都指定微服务的访问地址和使用的账户名称不太方便,我们可以通过context命令来管理这些配置。

# 创建一个Context
$ cldi -r localhost:50004 -e localhost:50002 -u Alice context save Wonderland
# 将这个Context设为默认
$ cldi context default Wonderland
# 也可以使用-c来切换Context,-c也必须在子命令之前
$ cldi -c Wonderland get block-number
# 列出当前Context信息和已保存的Context
$ cldi context list

交互模式

cldi提供了命令行模式和交互模式,在未传入子命令的时候cldi会进入交互模式。

交互模式与命令行模式的命令是等价的,例如:

$ cldi get block-number

等价于

$ cldi
cldi> get block-number

在交互模式下,用户可以通过-c, -r-e来改变当前会话的Context配置。

# 修改当前会话的全局配置
cldi> -r localhost:50004
# 仅针对这条命令应用这个配置
cldi> -r localhost:50004 get block-number

Q: How to quit cldi?
A: :q
A: CTRL-D

缩写

cldi提供了很多命令的缩写,这里列举一些:

cldi> get block-number
cldi> get bn
cldi> get system-config
cldi> get sc
cldi> context list
cldi> ctx ls
cldi> ctx l
cldi> account generate --name Alice
cldi> account gen --name Alice
cldi> account g --name Alice
cldi> a g --name Alice
cldi> bench send
cldi> b send
cldi> watch
cldi> w

这些缩写仅为方便用户操作,不作稳定性保证,不建议在脚本中使用。

命令行模式下的补全

cldi completions <shell-name>命令会输出补全脚本,需要添加到, 例如.profile, .bashrc里才能生效。目前支持的shell有:bash, zsh, powershell, fish, elvish

以bash为例,将下列脚本添加到.bashrc里即可。

source<(cldi completions bash)

使用示例

1.生成账户

如果需要更好的安全性,请加上-p <password>为私钥进行加密。 有密码的账户在硬盘上会进行加密存储,并且不会在生成时显示明文私钥。 加密后的账户需要经过-p <password>解密才能使用。

cldi> account generate --name Alice
{
"crypto_type": "SM",
"address": "0xb7768b2f989eeb9a1c7315aa38fb5fbd68333b8a",
"public_key": "0x325ef60c3d8a94dd363a83f8b9a1ecbe3583b41aa204709eb0d2a19e7e323571d6d4015e5a049bfd04d3ff661385c36fe2066f9aaf72c943ff4ad1fc15e03e73",
"secret_key": "0x9d08b671a8f12141c45edbd59e81eaf282a2534505ad0545bb46bf64d642b071"
}

2.创建环境配置

cldi> -r localhost:50004 -e localhost:50002 -u Alice context save Wonderland
# 设为默认环境
cldi> context default Wonderland

3.查询块高

cldi> get block-number
406030

4.查询系统配置

cldi> get system-config
{
"admin": "0x29222738252b748e4d20a20073d05cd26e87cc00",
"admin_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000",
"block_interval": 4,
"block_interval_pre_hash": "0xe010952e2bf9a2da305af49c2598230e0ecbb37c7ece7dbef55031b775dba64f",
"chain_id": "0x204c9a3301e7e698c45febb5e177ef35a656bb8feb355b6aca85beef5d248c14",
"chain_id_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000",
"emergency_brake": false,
"emergency_brake_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000",
"validators": [
"0x43a8f6a2abd2782e06506695a19693589a53e38a",
"0x4025800dc70684abd1e3eb89086d21d94f1dbfd8",
"0x3b0829e9f547cfecfae7fb3d527e8405d4304222"
],
"validators_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000",
"version": 0,
"version_pre_hash": "0x000000000000000000000000000000000000000000000000000000000000000000"
}

5.创建合约

我们通过cldi create <data>发送创建合约交易。其中<data>是合约的数据,这里以一个计数器合约为例。返回结果为这个创建合约交易的哈希。

cldi> create 0x608060405234801561001057600080fd5b5060f58061001f6000396000f3006080604052600436106053576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306661abd1460585780634f2be91f146080578063d826f88f146094575b600080fd5b348015606357600080fd5b50606a60a8565b6040518082815260200191505060405180910390f35b348015608b57600080fd5b50609260ae565b005b348015609f57600080fd5b5060a660c0565b005b60005481565b60016000808282540192505081905550565b600080819055505600a165627a7a72305820faa1d1f51d7b5ca2b200e0f6cdef4f2d7e44ee686209e300beb1146f40d32dee0029
0xbdeabf94a31c503deb4400fc63aee2a89e8f43d6570ed7ad5cd4f6f2898be0a2

等待交易上链后,通过cldi get receipt <tx-hash>获取交易回执,在交易回执中的contract_addr项查看创建出来的合约的地址。这里为0xf064e32407b6cc412fe33f6ba55f578ac413ecdc

cldi> get receipt 0xbdeabf94a31c503deb4400fc63aee2a89e8f43d6570ed7ad5cd4f6f2898be0a2
{
"block_number": 406069,
"contract_addr": "0xf064e32407b6cc412fe33f6ba55f578ac413ecdc",
"cumulative_quota_used": "0x0000000000000000000000000000000000000000000000000000000000018ed3",
"error_msg": "",
"legacy_cita_block_hash": "0x265386a6afc6072f0acb5d32e0fe079e101129041dbfed2bee8872a849e8f7a3",
"logs": [],
"logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"quota_used": "0x0000000000000000000000000000000000000000000000000000000000018ed3",
"state_root": "0x96899ff87f9bed55fd880750c2c51661ee24e14f672a1c9d7ac9573536b8c3f0",
"tx_hash": "0xbdeabf94a31c503deb4400fc63aee2a89e8f43d6570ed7ad5cd4f6f2898be0a2",
"tx_index": 0
}

6.调用合约

查询合约数据。当前计数器的值为0。

cldi> call 0xf064e32407b6cc412fe33f6ba55f578ac413ecdc 0x06661abd
0x0000000000000000000000000000000000000000000000000000000000000000

发送交易,使得计数器加一。

cldi> send 0xf064e32407b6cc412fe33f6ba55f578ac413ecdc 0x4f2be91f
0x99e57fdfed555059fa143ad0bc4d8ddc8764f8024fb3b28e880a84667414dec5

等待交易上链后,再次查询,可以看到结果为一,符合预期。

cldi> call 0xf064e32407b6cc412fe33f6ba55f578ac413ecdc 0x06661abd
0x0000000000000000000000000000000000000000000000000000000000000001

更详细的文档参见cloud-cli book

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages