#productivity #smart-contracts #cosmwasm #blockchain #secret-network

app warp-cli

比以往任何时候更快地搭建、构建、测试和部署Secret Network智能合约

1 个不稳定版本

0.1.0 2022年12月30日

#9#secret-network

MIT 许可证

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-mochachai的Node.JS测试环境(tests/目录 - 在其中运行npm i & yarn以获取所有包)
  • 基本的Warp.toml文件,用于管理项目配置(部署脚本、测试设置等)
  • 一个共享库,可以轻松地共享工作空间中所有合约的ExecuteMsgQueryMsg模型(一切均由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