目录 |
---|
DAO和插件的关系
DAO是主体,可以安装插件和使用插件
插件来完成具体的功能的扩展
...
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
...
1. 如何安装插件
插件的安装方式有两种:
当 DAO 被创建安装 被创建时安装 (静态安装)
当 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,
) |
安装插件
DAOSpace::install_plugin_with_root_cap
调用此函数可以在 DAO 创建的同时 安装插件,无需投票安装
...
代码块 |
---|
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 dao_signer = DAOAccount::dao_signer(&dao_account_cap); 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); } } |
...
action_delay:u64
多久后可以执行提案
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) |
...
代码块 |
---|
public (script) fun create_grant_config_proposal<DAOT: store, TokenT:store>(sender: signer, description: vector<u8>, old_grantee: address, new_grantee: address, total: u128, period: u64,start_time:u64, action_delay:u64) |
2.2 StakeToSBT插件
发起提案,接口:
代码块 | ||
---|---|---|
| ||
/// 发起质押类型的提案 /// 模板参数: /// 1. DAOT,DAO类型 /// 2. TokenT,Token类型 /// 普通参数: /// 1. sender 发起者签名 /// 2. description 描述信息 /// 3. action_delay,投票成功后多长时间才可以执行动作 fun StakeToSBT::create_token_accept_proposal<DAOT: store, TokenT: store>( sender: signer, description:vector<u8>, action_delay: u64); /// 发起质押参数的提案 /// 模板参数: /// 1. DAOT,DAO类型 /// 2. TokenT,Token类型 /// 普通参数: /// 1. sender 发起者签名 /// 2. description 描述信息 /// 3. lock_time 锁仓时长 /// 4. weight 倍率 /// 5. action_delay,投票成功后多长时间才可以执行动作 fun StakeToSBT::create_weight_proposal<DAOT: store, TokenT: store>( sender: signer, description:vector<u8>, lock_time: u64, weight: u64, action_delay: u64); |
...