版本比较

密钥

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。
目录

一、需求描述

去中心化公司治理协作平台。类似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 扩展点资源定义

代码块
languagerust
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 插件市场界面

...