/
插件功能、场景描述和使用文档

插件功能、场景描述和使用文档

DAO和插件的关系

  • DAO是主体,可以安装插件和使用插件

  • 插件来完成具体的功能的扩展

 

分几部分来描述插件

第一部分,插件功能,如何使用,以及插件API文档

1. 插件的功能

1.1 Grant插件

 

Grant 插件提供 :

  • 创建/执行颁发 Grant 的提案

  • 创建/执行修改 Grant 的提案

  • 创建/执行收回 Grant 的提案

  • 创建安装 Grant 插件的提案

 

1.2 Member插件

 

1.3 Stake插件

主要功能:根据质押时长和质押额度来质押Token以获得相应的SBT,例如: 在Token和SBT为1:1的DAO中来质押,质押10个Token 10分钟,可得100SBT

用户可以做什么:

  • 根据时间和质押额度来质押Token以获得相应的SBT

  • 查询当前质押Token的列表

  • 质押到期之后退回相应的Token

  • 针对插件中的一些参数进行投票,参数有:接收的Token类型,质押Token转成SBT的权重

DAO安装插件后可以做什么:

  • 初始化时指定接收Token的类型,质押Token转成SBT的权重

  • 执行投票结果

2. 场景:描述StarcoinDAO下插件的使用和对接

2.1 Grant插件

在Starcoin DAO 中其他项目可以创建 颁发 Grant 的提案,来为申请人获得 Grant 奖励

当 申请人拥有 Grant 时,任意成员可以提案要求撤销/修改 申请人的 Grant 奖励,当提案通过后,申请人的 Grant 将被撤销/修改

2.2 Member插件

 

2.3 Stake插件

StarcoinDAO中用户可以通过StakeToSBT插件来增加用户在DAO中的SBT

 

第二部分:在DAO里如何install插件,以及如何使用插件

 

1. 如何安装插件

插件的安装方式有两种:

  • 当 DAO 被创建时安装 (静态安装)

  • 当 DAO 已经创建好后通过 “安装插件的插件”提案 安装(动态安装)

插件被安装后暂时没有卸载方法

1.1 静态安装

DAO 初始化创建(合约 Write 接口)

在一个DAO被实例化创建时,需要先上传该 DAO 的 合约模块后执行 DAO 的 初始化函数(对应下方create_dao

参数

  • voting_delay

投票多久后开始

  • voting_period

投票的时间区间

  • voting_quorum_rate

投票成功的比例

  • min_action_delay

多久后可以执行提案

  • min_proposal_deposit

最小的提案质押 Token 数

public(script) fun create_dao( sender: signer, voting_delay: u64, voting_period: u64, voting_quorum_rate: u8, min_action_delay: u64, min_proposal_deposit: u128, )

安装插件

DAOSpace::install_plugin_with_root_cap 调用此函数可以在 DAO 创建的同时 安装插件,无需投票安装

DAOSpace::install_plugin_with_root_cap<X, InstallPluginProposalPlugin>(&dao_root_cap, InstallPluginProposalPlugin::required_caps());

例子XDAO

module creator::XDAO { use StarcoinFramework::DAOAccount; use StarcoinFramework::DAOSpace; use StarcoinFramework::MemberProposalPlugin::{Self, MemberProposalPlugin}; use StarcoinFramework::InstallPluginProposalPlugin::{Self, InstallPluginProposalPlugin}; struct X has store{} const NAME: vector<u8> = b"X"; /// directly upgrade the sender account to DAOAccount and create DAO public(script) fun create_dao( sender: signer, voting_delay: u64, voting_period: u64, voting_quorum_rate: u8, min_action_delay: u64, min_proposal_deposit: u128, ){ let dao_account_cap = DAOAccount::upgrade_to_dao(sender); let config = DAOSpace::new_dao_config( voting_delay, voting_period, voting_quorum_rate, min_action_delay, min_proposal_deposit, ); let dao_root_cap = DAOSpace::create_dao<X>(dao_account_cap, *&NAME, b"ipfs://description", X{}, config); DAOSpace::install_plugin_with_root_cap<X, InstallPluginProposalPlugin>(&dao_root_cap, InstallPluginProposalPlugin::required_caps()); DAOSpace::install_plugin_with_root_cap<X, MemberProposalPlugin>(&dao_root_cap, MemberProposalPlugin::required_caps()); DAOSpace::burn_root_cap(dao_root_cap); } }

1.2 动态安装(合约 Write 接口

动态安装适用于 DAO 已经创建好后 ,想要安装其他插件

需要被安装插件提供install_plugin_proposal 接口,或者其他类似功能的接口

public(script) fun install_plugin_proposal<DAOT: store>(sender: signer, description:vector<u8>, action_delay: u64)

参数

  • description:vector<u8>

要安装插件提案的描述

  • action_delay:u64

多久后可以执行提案

 

StakeToSBT安装插件时

StakeToSBT安装插件

备注:插件的安装和插件的配置是否需要分两个界面。应该有一个插件列表,用户选择插件后安装。

2. 使用插件

2.1 Grant 插件

Grant 授予:

合约接口:

public (script) fun create_grant_proposal<DAOT: store, TokenT:store>(sender: signer, description: vector<u8>,grantee: address, total: u128, start_time:u64, period: u64, action_delay:u64)

Grant 销毁:

合约接口:

 

 

Grant 修改:

合约接口:

 

 

 

2.2 StakeToSBT插件

发起提案,接口:

 

用户查看质押列表

左侧为按Token类型汇总,(接口@Jiefeng Yang 提供),点进去则是右侧的列表(接口@Jiefeng Yang 提供),即当前用户所质押的列表

  1. 赎回按钮未到时间不可点击

  2. 点击➕,则弹出“新增质押”界面

 

新增质押界面

 

Related content

DAOSpace全场景界面脑图
DAOSpace全场景界面脑图
Read with this
StarcoinDAO
StarcoinDAO
Read with this
Weekly meeting notes
Weekly meeting notes
Read with this
NonceGeekDAO
NonceGeekDAO
Read with this
DAO技术文档
DAO技术文档
Read with this
Starcoin DAOSpace:基于 SBT 的 DAO 框架
Starcoin DAOSpace:基于 SBT 的 DAO 框架
Read with this