目录 |
---|
一、需求描述
去中心化公司治理协作平台。类似Web2的钉钉和飞书。功能包括:
...
扩展点接口通过protobuf定义,实现应用扩展点的插件为应用插件,主要用于扩展DAOSpace功能。
注意:
由于Move不支持合约动态调用合约代码,所以扩展点定义的接口都是通过JS实现。所有动态调用需求都由前端中转。
四、详细设计
1、扩展点管理
1.1 扩展点资源定义
代码块 | ||
---|---|---|
| ||
module ExtensionPoint { struct ExtensionPoint<ExtT> has key { id: u64, //扩展点的ID,按注册顺序自增 name: vector<u8>, //名字,例如 DAOSpace.IApp/v1 describe: vector<u8>, //描述 protobuf: vector<u8>, //扩展点接口定义,通过protobuf定义 created_at: u64, //创建时间 } struct ExtensionPointRegistry has key{ next_id: u64, } } |
...
2.5.3 上传插件
2.5.4 对插件点赞
2.5.5 对插件进行评论
3、应用插件开发
...
1个应用插件就是一个Dapp,包括前端页面和后端合约代码,扩展DAO的一个功能,例如成员管理、Grant管理等。
DAO的微应用就是一个Dapp,包括前端页面和后端合约代码,完成DAO的一个功能,例如成员管理、Grant管理等。每个DAO可以安装多个微应用,每个微应用安装时获取声明的能力,如果DAO中某种能力只有一个实例,那么只有获取对应能力的微应用才能安装,其他同类型的微应用由于获取不到需要的能力,所以不能安装。每个DAO可以安装多个应用插件,每个应用插件安装时获取声明的能力,如果DAO中某种能力只有一个实例,那么只有获取对应能力的应用插件才能安装,其他同类型的应用插件由于获取不到需要的能力,所以不能安装。
一个微应用可以将一个能力封装后,提供更多能力和扩展点。这样就可以安装其他微应用或者插件。一个应用插件可以将一个能力封装后,提供更多能力和扩展点。这样就可以安装其他插件。
3.1
...
应用插件的配置
所有实现了应用扩展点接口的插件为应用插件。
应用插件的 dao_plugin.json:json 配置:
代码块 | ||
---|---|---|
| ||
{ "id": 1, // 在DAOSpace注册的插件ID "name": "hello-world", // 插件名称 "version": "v0.1.1" // 插件版本 "icon": "ipfs://xxxxxxxxx/xxxxxxx.svg" "implements": [ "0x1::ExtensionPoint::IApp" // 实现应用接口实现应用扩展点接口 ], "required_caps": [ "0x1::DAOSpace::DAOUpgradeModuleCap", // 需要DAO升级能力 "0x1::DAOSpace::DAOMemberCap" // 需要DAO成员管理能力 ], "contact": "./constract/Move.toml", "web": "./web/package.json" } |
...