6 个版本
0.2.2 | 2022 年 8 月 22 日 |
---|---|
0.2.1 | 2022 年 8 月 22 日 |
0.1.4 | 2022 年 8 月 15 日 |
#5 in #composability
每月下载 28 次
22KB
357 行
胶水
对于文档,运行 cargo doc --open
。
lib.rs
:
一个库,使得 CosmWasm 合约中的可组合性和重用成为可能。
创建模块
要创建一个可重用的模块,必须创建一个实现了 Module 特质的 struct。只需定义关联类型,并为 instantiate、execute 和 query 提供实现,你将拥有一个可用于管理器的模块。
按照惯例,模块可以从其构造函数中接受对其他模块的引用。这允许模块轻松地进行组合。
使用模块
Manager 是一个用于动态分发消息到相应模块的 struct。使用 Manager::new 创建一个新的 Manager,然后使用 register 注册模块以进行动态分发。
当实现使用胶水构建的合约的入口点时,可以简单地调用相应的函数: execute
、query
和 instantiate
。
与您的合约交互的实体可以遵循一个简单的约定,以将消息寻址到您的合约中的特定模块。对于 execute
和 query
调用,Manager
预期一个结构如下所示的对象
{ "module_name": { /* payload object to be sent to the module */ } }
注意:根对象必须包含一个键。如果您在 execute
调用中尝试寻址多个模块,它将失败。
Manager
将自动移除根对象并将有效负载对象转发到相关的模块。模块返回的响应对象将被直接返回。
方法 instantiate
只有细微差别。与调用 execute
和 query
需要调用者发送一个只包含单个键的根对象不同,发送到 instantiate
入口点的对象可以包含与管理者注册的每个模块的键,例如:
{
"module_one": { /* payload for module one instantiation */ },
"module_two": { /* payload for module two instantiation */ },
/* and so on */
}
依赖关系
~3.5–5MB
~109K SLoC