目录 |
---|
一、需求描述
去中心化公司治理协作平台。类似Web2的钉钉和飞书。功能包括:
...
用户可以对AppVersion和PluginVersion进行Star和评论
3、应用扩展点
扩展点名称:0x1::ExtensionPointDAOSpace::IAppApp
扩展点接口定义:
代码块 |
---|
package 0x1.ExtensionPoint; syntax = "proto3"; serviceimport React from 'react'; export interface IApp { rpc bootstrap();name: string, rpc mount(map<string, string>); rpc unmount(map<string, string>); activeWhen: string, entry: React.ReactNode } export interface IDAO { rpc updateregisterApp(map<string,app: string>IApp); } |
扩展点接口通过protobuf定义,实现应用扩展点的插件为应用插件,主要用于扩展DAOSpace功能。扩展点接口通过TypeScript Declaration files定义,实现应用扩展点的插件为应用插件,主要用于扩展DAOSpace功能。
插件运行在浏览器的VM中。
注意:
由于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 ${PluginName}{ // 安装插件 public(script) fun setup<DaoT>(sender: signer, dao: DaoT) // 卸载插件 public(script) fun teardown<DaoT>(sender: signer, dao: DaoT) } |
web端:
代码块 |
---|
// 所有前端插件JS加载后的对象,需要暴露下面两个方法 // 用于完成插件的初始化和卸载。 // 插件加载后运行在独立的VM中 // 前端VM技术参考:https://www.garfishjs.org/blog interface IPlugin { // 前端插件安装方法 void setup(depends: ExtensionPoint[]) // 前端插件卸载方法 void teardown() } |
2.6 插件市场界面
...