1 个不稳定版本
0.1.0 | 2022年12月30日 |
---|
#9 在 #secret-network
43KB
901 行
Warp CLI
用于构建、测试和部署Secret智能合约的全能型生产力工具链。
要求
此工具是为了支持当前的工具栈而构建的,因此您仍然需要为开发智能合约所需的所有内容
- Rust 1.50+,
- SecretCLI
- 如果您想运行测试,则需要Node & Npm,
- 构建合约和运行节点时需要Docker
我计划在未来减少此列表,但目前这不是优先事项。
安装
您可以从此仓库的主要分支构建二进制文件
cargo install --git https://github.com/secret-warp/warp-cli.git
或者,还有crates.io选项
cargo install warp-cli
用法
Usage: warp <COMMAND>
Commands:
init Initialize a new Warp project
build Build the current workspace
deploy Execute the 'Auto Deploy' script for the workspace (see Warp.toml)
new Scaffold a new contract
node Start the local secret validator node
test Run the JavaScript tests from the '/tests/' directory
help Print this message or the help of the given subcommand(s)
Options:
-h, --help Print help information
-V, --version Print version information
初始化一个新的工作空间
使用warp init <WORKSPACE_PATH>
命令创建一个预配置为与Warp CLI一起使用的新的Cargo工作空间。
此命令将克隆warp-template仓库并执行一些基本设置。工作空间默认支持以下功能
- 带有
ts-mocha
和chai
的Node.JS测试环境(tests/目录 - 在其中运行npm i
&yarn
以获取所有包) - 基本的
Warp.toml
文件,用于管理项目配置(部署脚本、测试设置等) - 一个共享库,可以轻松地共享工作空间中所有合约的
ExecuteMsg
和QueryMsg
模型(一切均由Warp CLI处理)
智能合约模板搭建
使用warp new <CONTRACT_NAME>
,您可以快速将新合约添加到工作空间中。该命令会克隆合约并为您处理所有样板设置
- 将
msg.rs
模块添加到共享库中,以便其他合约可以轻松访问 - (目前正在开发中) 在
Warp.toml
中的AutoDeploy脚本中添加条目,以准备合约进行部署(当然,您很可能需要稍后对其进行修改以使其与您的合约兼容)
构建合约
要构建您的合约,您可以使用warp build
命令
Usage: warp build [OPTIONS]
Options:
-o, --optimized Build for production with 'workspace-optimizer' docker image
这相当简单直接,正如广告中所说的那样工作。此外,一些其他命令可以在执行前使用一个 -r
(重建)标志调用此命令。
启动本地秘密节点
您可以使用 localsecret
镜像,通过使用 warp node
命令快速启动一个新开发节点。这一功能仍只部分经过测试,但正在内部使用以允许 test
子命令工作。
测试您的智能合约
如果您曾经与 EVM 链和 Hardhat 或 Solana 与 Anchor 框架一起工作过,您可能会觉得这个命令非常熟悉。warp test
允许您运行完整的测试套件,并随后使用 Node.JS 为您的合约执行集成和端到端测试。
Run the JavaScript tests from the '/tests/' directory
Usage: warp test [OPTIONS]
Options:
-r, --rebuild Rebuild the contracts before running tests
-s, --skip-environment Don't start a new instance of localsecret for this testing session
此外,虽然我不是 TypeScript 的专家,但我还提供了一个小的实用模块(tests/src/utils/localsecret.ts
),以便尽可能轻松地编写您的测试。目前,实用模块包含以下实用函数
getLocalSecretConnection()
- 返回连接到 localsecret 节点的 LCD API 的连接getGenesisWallets()
- 返回一个包含在 LocalSecret 中可用的预加载创世钱包的数组(您不需要记住或查找助记词)storeAndInitContract()
- 将您的wasm
合约上传到链并创建其实例的快捷方式。当您只需在测试中使用给定合约的一个实例时非常有用。
最后,将您的合约部署到 Secret 网络
这是 CLI 工具中最复杂且实际上仍然是最不完善的命令。它与本地 secretcli
安装和配置接口,以将您的智能合约发布到主网或测试网。现在它可能运行得比较慢,但我会在未来几周内努力提高部署脚本的性能和用户体验。
warp deploy
命令使用在 Warp.toml
文件中定义的 autodeploy
脚本。部署步骤按顺序从上到下执行,队列中的脚本实际上可以引用之前部署的合约的地址。这是我在自己的项目中需要的最重要的功能,也是创建 Warp CLI 的主要原因。
示例自动部署脚本
以下脚本将使用 deployer
账户(secretcli keys show deployer
)将三个合约部署到网络。第一个脚本仅指定所有者参数,而其他两个则依赖于部署者账户以及彼此
[autodeploy]
account_id = 'deployer' # The account to use for deployment
make_labels_unique = true # Append the labels with pseudo-random numbers
[[autodeploy.steps]]
id = '$_acl' # Internal id for use in `init_msg` parameters of later contracts
contract = 'artifacts/acl.wasm' # Path to the compiled file
init_msg = '{ "default_role": "CALLER", "owner": "$account_id" }' # `$account_id` will be parsed into the actual secret address of the deployer wallet
label = 'Dapp: ACL'
coins = '' # Optional: Attach a deposit to the Instantiate call
[[autodeploy.steps]]
id = '$_system'
contract = 'artifacts/system_manager.wasm'
init_msg = '{ "acl": "$_acl", "owner": "$account_id" }'
label = 'Dapp: System Manager'
[[autodeploy.steps]]
id = '$_factory'
contract = 'artifacts/factory.wasm'
init_msg = '{ "acl": "$_acl", "system": "$_system", "owner": "$account_id" }'
label = 'Dapp: Factory'
关于前端呢?
目前不包括在内。我不是前端开发者,因此我无法就前端世界的舒适度提出意见。在将来,将通过 CLI 提供选项来包括各种前端。
路线图
这个工具能工作,但绝对不能被认为是“稳定”的。因此,除了添加一些杀手级特性外,还有很多重构和错误修复要做。请报告您发现的任何问题!
长期目标
请记住,在这个早期阶段,计划可能会根据最需要的功能而大幅变化。目前这更像是一个指南。
- 改进用户体验 - 修复错误并消除/减少尴尬的等待时间
- 添加对各种前端模板的支撑
- 支持模板功能 - 包括不同版本的
cosmwasm
合同模板,或者预配置的 SNIP 标准合约(例如:warp new main_token -t snip20-staking
) - 寻找尽可能自动生成合约消息模式的方法
- 使与 Docker 化的
localsecret
的接口更简洁 -docker exec -it secretdev secret cli blah blah
- 编写适当的文档
- 自动配置
localsecret
节点,以减少测试目的的区块时间 - 可能移除对本地安装的
secretcli
的依赖,以实现更易于“即插即用”的设置
#待办:实际编写详细的路线图
依赖项
~4–14MB
~156K SLoC