版本比较

密钥

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

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);
    }
}

...