#cosmwasm-contracts #module #reuse #composability #glue #withing

burnt-glue

一个库,使得 CosmWasm 合约中的可组合性和重用成为可能。

6 个版本

0.2.2 2022 年 8 月 22 日
0.2.1 2022 年 8 月 22 日
0.1.4 2022 年 8 月 15 日

#5 in #composability

每月下载 28

MIT 许可证

22KB
357

胶水

对于文档,运行 cargo doc --open


lib.rs:

一个库,使得 CosmWasm 合约中的可组合性和重用成为可能。

创建模块

要创建一个可重用的模块,必须创建一个实现了 Module 特质的 struct。只需定义关联类型,并为 instantiateexecutequery 提供实现,你将拥有一个可用于管理器的模块。

按照惯例,模块可以从其构造函数中接受对其他模块的引用。这允许模块轻松地进行组合。

使用模块

Manager 是一个用于动态分发消息到相应模块的 struct。使用 Manager::new 创建一个新的 Manager,然后使用 register 注册模块以进行动态分发。

当实现使用胶水构建的合约的入口点时,可以简单地调用相应的函数: executequeryinstantiate

与您的合约交互的实体可以遵循一个简单的约定,以将消息寻址到您的合约中的特定模块。对于 executequery 调用,Manager 预期一个结构如下所示的对象

{ "module_name": { /* payload object to be sent to the module */ } }

注意:根对象必须包含一个键。如果您在 execute 调用中尝试寻址多个模块,它将失败。

Manager 将自动移除根对象并将有效负载对象转发到相关的模块。模块返回的响应对象将被直接返回。

方法 instantiate 只有细微差别。与调用 executequery 需要调用者发送一个只包含单个键的根对象不同,发送到 instantiate 入口点的对象可以包含与管理者注册的每个模块的键,例如:

{
  "module_one": { /* payload for module one instantiation */ },
  "module_two": { /* payload for module two instantiation */ },
  /* and so on */
}

依赖关系

~3.5–5MB
~109K SLoC