目录 |
---|
一、需求描述
去中心化公司治理协作平台。类似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, } } |
...
代码块 |
---|
module PluginMarketplace { struct PluginRegistry has key{ next_plugin_id: u64, } struct PluginVersion<AppT> has key{ number: u64, // 数字版本号,例如1,2,3 version: vector<u8>, //插件版本号,例如v0.1.1 required_caps: vector<vector<u8>>, //依赖的能力 export_caps: vector<vector<u8>>, //导出的能力 implement_extpoints: vector<vector<u8>>, //实现的扩展点 depend_extpoints: vector<vector<u8>>, //依赖的扩展点 installsetup_functionfun: vector<u8>, // 安装函数合约端安装函数, 格式:${address}::${module}::${func_name} webteardown_entryfun: vector<u8>, // 插件JS代码入口,例如:"https://cdn.xxxx.xxxx/xxxx/xxxxx.js" 合约端卸载函数, 格式:${address}::${module}::${func_name} gitjs_entry_repouri: vector<u8>, // git仓库代码前端JS代码资源URI,例如:"https://cdn.xxxx.xxxx/xxxx/xxxxx.js" } struct PluginStarStar has key{ addr: address, // Star人的钱包地址,可以是短地址,例如 zhangsan.stc created_at: u64, //创建时间 } struct PluginCommentComment has key{ addr: address, // 评论人的钱包地址,可以是短地址,例如 zhangsan.stc content: vector<u8> //评论内容 created_at: u64, //创建时间 } struct PluginInfo<AppT> has key{ id: u64, //插件ID name: vector<u8>, //插件名称 describe: vector<u8>, //插件描述 next_version_number: u64, //下一个版本号 versions: vector<PluginVersion>, //插件的所有版本 stars: vector<PluginStar>vector<Star>,// 插件的所有star comments: vector<PluginComment>vector<Comment>, // 插件的所有评论 git_repo: vector<u8>, // git仓库代码 created_at: u64, //插件创建时间 update_at: u64, //插件最后一次更新时间 } } |
...