44 个版本 (稳定版)

4.0.1 2023年2月25日
3.0.2 2022年12月14日
3.0.0 2022年11月21日
2.7.0 2022年10月24日
0.5.9 2022年7月27日

#2006 in 魔法豆

Download history 58/week @ 2024-03-11 138/week @ 2024-03-18 171/week @ 2024-03-25 189/week @ 2024-04-01 36/week @ 2024-04-08 62/week @ 2024-04-15 103/week @ 2024-04-22 49/week @ 2024-05-06 36/week @ 2024-05-13 194/week @ 2024-05-20 25/week @ 2024-05-27 128/week @ 2024-06-03 62/week @ 2024-06-10 128/week @ 2024-06-17 73/week @ 2024-06-24

每月下载量:395

Apache-2.0 协议

81KB
1.5K SLoC

Cosm-Orc

cosm-orc on crates.io Docs

Rust Cosmwasm 智能合约集成测试和燃气分析库。

存储、实例化、执行和查询基于配置的 Cosmwasm 智能合约。

可选地,分析智能合约操作的燃气使用。

如果你需要一个更通用的 Cosmos SDK 客户端库,请尝试 cosm-tome,这是我们在这里使用的库。

潜在用途

  • 集成测试
  • 部署/引导环境
  • 燃气分析
  • 实际的对抗性测试

此项目不适用于主网。

快速入门

// juno_local.yaml has the `cw20_base` code_id already stored
// If the smart contract has not been stored on the chain yet use: `cosm_orc::store_contracts()`
let mut cosm_orc = CosmOrc::new(Config::from_yaml("./example-configs/juno_local.yaml")?, false)?;
let key = SigningKey {
   name: "validator".to_string(),
   key: Key::Mnemonic("word1 word2 ...".to_string()),
   derivation_path: "m/44'/118'/0'/0/0".to_string(),
};

cosm_orc.instantiate(
   "cw20_base",
   "meme_token_test",
   &InstantiateMsg {
       name: "Meme Token".to_string(),
       symbol: "MEME".to_string(),
       decimals: 6,
       initial_balances: vec![],
       mint: None,
       marketing: None,
   },
   &key,
   None,
   vec![]
)?;

let res = cosm_orc.query(
   "cw20_base",
   &QueryMsg::TokenInfo {},
)?;
let res: TokenInfoResponse = res.data()?;

有关示例用法,请参阅 此处

优化和存储合约

如果 config.yaml 中没有预先存储的合约代码 ID,你可以调用 optimize_contracts()store_contracts()

let mut cosm_orc = CosmOrc::new(Config::from_yaml("./example-configs/juno_local.yaml")?, false)?;
let key = SigningKey {
   name: "validator".to_string(),
   key: Key::Mnemonic("word1 word2 ...".to_string()),
   derivation_path: "m/44'/118'/0'/0/0".to_string(),
};

// Build + optimize all smart contracts in current workspace
// This will save the optimized wasm files in `./artifacts`
cosm_orc.optimize_contracts("./Cargo.toml")?;

// NOTE: currently cosm-orc is expecting a wasm filed called: `cw20_base.wasm`
// to be in `/artifacts`, since `cw20_base` is used as the contract name in the instantiate()/query() calls below:
cosm_orc.store_contracts("./artifacts", &key, None)?;

cosm_orc.instantiate(
   "cw20_base",
   "meme_token_test",
   &InstantiateMsg {
       name: "Meme Token".to_string(),
       symbol: "MEME".to_string(),
       decimals: 6,
       initial_balances: vec![],
       mint: None,
       marketing: None,
   },
   &key,
   None,
   vec![]
)?;

let res = cosm_orc.query(
   "cw20_base",
   &QueryMsg::TokenInfo {},
)?;
let res: TokenInfoResponse = res.data()?;

燃气分析

let mut cosm_orc = CosmOrc::new(Config::from_yaml("config.yaml")?, true)?;

cosm_orc.instantiate(
   "cw20_base",
   "meme_token_test",
   &InstantiateMsg {
       name: "Meme Token".to_string(),
       symbol: "MEME".to_string(),
       decimals: 6,
       initial_balances: vec![],
       mint: None,
       marketing: None,
   },
   &key,
   None,
   vec![]
)?;

let reports = cosm_orc.gas_profiler_report();

燃气报告 Github Action

使用 cosm-orc-github-action 将 cosm-orc 的燃气使用情况作为 PR 注释查看。

Github action 还支持显示两个不同报告之间的差异。

示例

配置

请参阅 ./example-configs 目录中的示例 yaml 配置。

依赖项

~31–55MB
~1M SLoC