15 个版本 (8 个重大更新)
0.10.0 | 2023年4月4日 |
---|---|
0.9.0 | 2023年3月25日 |
0.8.0 | 2023年3月9日 |
0.3.0 | 2022年12月16日 |
0.2.0-rc.1 | 2022年11月29日 |
#21 in #entry-point
在 7 crate 中使用
130KB
3K SLoC
BOOT
多环境 CosmWasm 智能合约脚本库。文档可在 boot.abstract.money 查找。
BOOT 受 terra-rust-api 启发,并使用 cosmos-rust 进行 protocol buffer gRPC 通信。
boot-cw-plus 使用 BOOT 为与 cw-plus 合约交互提供标准类型安全的接口。
BOOT 使得快速部署和迭代合约变得更容易。它提供了一系列宏,允许您以更接近 Rust 语法的方式定义合约。这允许您利用 Rust 的类型系统确保您不会向合约发送无效消息。
工作原理
通过使用该端点适当的消息(ExecuteMsg
、InstantiateMsg
、QueryMsg
、MigrateMsg
等)与 CosmWasm 合约的端点进行交互。
为了对合约执行操作,您可以定义一个与合约的接口,将合约的入口点类型传递给 contract
宏
#[contract(InstantiateMsg, ExecuteMsg, QueryMsg, MigrateMsg)]
pub struct MyContract;
该宏为结构体实现了一组特质。这些特质包含可以用来与合约交互的函数,并防止我们在合约上执行错误的消息。
例如,您可以查看 CW20 令牌的实现 这里。
然后,您可以使用此接口与合约交互
...
let cw20_base: Cw20<Chain> = Cw20::new("my_token", chain);
// instantiate a CW20 token instance
let cw20_init_msg = cw20_base::msg::InstantiateMsg {
decimals: 6,
name: "Test Token".to_string(),
initial_balances: vec![Cw20Coin {
address: sender.to_string(),
amount: 1000000u128.into(),
}],
marketing: None,
mint: None,
symbol: "TEST".to_string(),
};
cw20_base.instantiate(&cw20_init_msg, None, None)?;
// query balance
// notice that this query is generated by a macro and not defined in the object itself!
let balance = cw20_base.balance(sender.to_string())?;
您可以在以下链接找到完整的cw20实现:这里。在 cw-multi-test
中如何与合约交互的示例可以在 这里找到,而与真实节点的相同交互可以在 这里找到。
高级功能
BOOT提供了两个额外的宏,可用于提高脚本体验。
ExecuteFns
可以将 ExecuteFns
宏添加到您的合约的 ExecuteMsg
定义中。这将生成一个特质,允许您直接调用消息的变体,而无需自己构建结构。
示例
#[cw_serde]
#[derive(ExecuteFns)]
pub enum ExecuteMsg{
/// Freeze will make a mutable contract immutable, must be called by an admin
Freeze {},
/// UpdateAdmins will change the admin set of the contract, must be called by an existing admin,
/// and only works if the contract is mutable
UpdateAdmins { admins: Vec<String> },
/// the `payable` attribute will add a `coins` argument to the generated function
#[payable]
Deposit {}
}
#[contract(Empty,ExecuteMsg,Empty,Empty)]
struct Cw1
impl<Chain: CwEnv> Cw1<Chain> {
pub fn test_macro(&self) {
self.freeze().unwrap();
self.update_admins(vec![]).unwrap();
self.deposit(&[Coin::new(13,"juno")]).unwrap();
}
}
我们建议将
ExecuteMsgFns
宏放在功能标志后面,以避免默认拉入boot-core
。生成的 derive 会像这样:#[cfg_attr(feature = "boot", derive(boot_core::ExecuteFns))]
对于嵌套执行消息,您可以添加一个 impl_into
属性。这期望消息实现提供类型的 Into
特质。
QueryFns
QueryFns
derive 宏与 ExecuteFns
宏的工作方式相同,但它还使用来自 cosmwasm-schema
的 #[returns(QueryResponse)]
属性来生成具有正确响应类型的查询。
贡献
我们非常欢迎您的帮助!请阅读我们的 贡献指南 以开始。
文档
文档使用 mdbook 生成。编辑 docs/src
文件夹中的文件,然后运行
cd docs && mdbook serve --open --port 5000
以查看更改。
参考
轻松享受编写智能合约的乐趣?通过使用 Abstract 轻松构建您的合约。
免责声明
此软件按原样提供,没有任何保证。
依赖关系
~9–28MB
~471K SLoC