{"content":{"title":"sui move开发实战-dao(1)","body":"## 引言\r\n经过之前的学习，我准备进行实战开发一个简单的dao项目demo，实现一个去中心化自治组织，用于管理共享资金、社区任务、提案和投票等功能，这篇文章分享了开发前期的系统设计。  \r\n## 功能描述  \r\n\r\n### `dao` token\r\n#### 关于`dao` token\r\n`dao`使用了社区代币`dao`来治理社区，并进行社区激励，社区成员需要使用`dao`代币来发布提案，参与投票，从而参与社区治理，它的总供应在`dao`被创立时已经被固定，初始状况下dao代币将会全部锁在金库中。  \r\n\r\n#### 如何获取dao代币？\r\n`dao`组织会发布社区任务，设置一定的dao代币奖励，完成者可获得相应凭证，可以申请`dao`代币。  \r\n社区成员发布的提案如果被接受，会根据提案的等级，分发一定的`dao`代币奖励。  \r\n\r\n### 成员角色\r\n**社区中有三种成员角色：**  \r\n#### 1.InitCoreMember\r\n`dao`组织的初始核心成员  \r\n可以授权的角色：InitCoreMember,CoreMember。  \r\n#### 2.CoreMember  \r\n`dao`组织的核心成员:\r\n可授权的角色: Member.\r\n权利：\r\n1. 发布社区任务\r\n2. 分发任务奖励\r\n3. 授权普通社区成员\r\n4. 关闭提案\r\n5. 修改提案等级\r\n#### 3.Member\r\n`dao`组织的普通成员  \r\n权利：  \r\n1. 发布提案  \r\n2. 收获提案奖励  \r\n3. 参与投票  \r\n\r\n### 如何运行\r\n1. DAO组织的初始成员发布社区任务  \r\n2. 通过参与社区任务，持有dao代币，可以申请加入DAO组织  \r\n3. 加入DAO组织后，可以发布社区提案，提案如果被接受，可以获取一定代币收益。可以参与提案投票。\r\n\r\n## obj设计\r\n#### Dao\r\n```rust\r\n    struct Dao<phantom T> has key{\r\n        id: UID,\r\n        total_members: u64, //Total Number of DAO Members\r\n        total_supply: Supply<T>, //Total Supply of DAO Tokens\r\n    }\r\n```\r\ndao组织的元数据，储存了dao组织的成员数量，和dao代币的总供应  \r\n  \r\n#### Treasury\r\n```rust\r\n    struct Treasury<phantom T> has key,store{\r\n        id:UID,\r\n        supply: Balance<T>, //Balance Stored in the Treasury\r\n    }\r\n```\r\ndao组织的金库，用于支付代币收益分配  \r\n\r\n#### 初始核心成员权限凭证\r\n```rust\r\n    struct InitCoreCap has key{\r\n        id: UID,\r\n        role_address:address,\r\n    }\r\n```\r\n由于没有store能力，不能通过dao module外的方式转移\r\n\r\n#### 核心成员权限凭证\r\n```rust\r\n    struct CoreCap has key{\r\n        id: UID,\r\n        role_address:address,\r\n    }\r\n```\r\n由于没有store能力，不能通过dao module外的方式转移\r\n\r\n#### 成员权限凭证\r\n```rust\r\n    struct MemberCap has key{\r\n        id: UID,\r\n        role_address:address,\r\n    }\r\n```\r\n\r\n#### 社区任务  \r\n```rust\r\n    struct CommunityTask has key{\r\n        id:UID,\r\n        describe: String,\r\n        reward_amount: u64,\r\n        distribute_ended: bool,\r\n    }\r\n```\r\n包括任务描述，奖励金额，是否停止奖励等字段  \r\n\r\n#### 任务奖励凭证\r\n```rust\r\n    struct TaskRewardCap has key{\r\n        id:UID,\r\n        reward_amount: u64,\r\n        owner: address,\r\n    }\r\n```\r\n确认完成某社区任务下发的奖励凭证，以便任务完成申请奖励  \r\n\r\n#### 提案\r\n```rust\r\n    struct Proposal has key,store{\r\n        id: UID,\r\n        title: String, //The title of the proposal\r\n        describe: String, //Content of the Proposal\r\n        level: u64,\r\n        proposer: address, //Initiator of the Proposal\r\n        lock_balance: u64, //DAO Tokens Locked by the Proposal\r\n        support: u64, //Number of votes in favor of the proposal\r\n        against: u64, //Number of votes against the proposal\r\n        is_closed: bool, \r\n        is_passed: bool,\r\n        is_claimed_reward: bool,\r\n    }\r\n```\r\n提案obj，包括提案标题，描述，等级，提案者，投票总额，支持票，反对票，是否关闭，是否通过，是否被领取奖励字段  \r\n#### 选票凭证\r\n```rust\r\n    struct VoteCap has key{\r\n        id: UID,\r\n        proposal_id: ID,\r\n        voter: address,\r\n        is_support: bool,\r\n        votes: u64,\r\n    }\r\n```\r\n由于投票后会先收取选票，所以下发投票凭证，以便在提案结束后赎回选票  \r\n## 结语  \r\n我们初步构想了一个去中心化的dao组织，对其中重要的结构体进行设计实现。接下来，我们将会用代码一步步实现先前的设计，通过动手实践学习sui编程。"},"author":{"user":"https://learnblockchain.cn/people/18488","address":null},"history":"bafkreidwe2thuwjx4qjdugcugusae7tkvhi542jcz6qwzenxc3p3wf2lve","timestamp":1710667132,"version":1}