本文将帮助您理解 DAO 的概念,并帮助您构建一个基本的 DAO。
什么是 DAO?
您可以将 DAO 视为基于互联网的实体(比如企业),由其股东(拥有代币和比例投票权的成员)共同拥有和管理。在 DAO 中,决策是通过提案做出的,DAO 的成员可以对这些提案进行投票,然后执行它们。
DAO 完全由可公开查看/可验证的代码管理,没有一个人(如 CEO)负责决策。
DAO 如何运作?
如前所述,DAO 由代码管理,但是如果运行代码的机器的人决定关闭机器或编辑代码怎么办?
所需要的是让相同的代码在由不同实体托管的一组机器上运行,这样即使其中一个关闭,另一个也可以接管。区块链帮助我们解决了上述问题,基于 EVM 的区块链(如 Ethereum 和 Polygon)允许我们在公共去中心化分类账上运行智能合约。部署在这些网络上的智能合约将传播到网络上所有可以查看和验证它的节点,并且没有任何一方控制网络。
具有代币成员资格的 DAO 向其成员发行代币,代币代表系统中的投票权。根据所设置的治理,任何人都可以创建 DAO 更改提案,并将其提交给具有法定人数(通过所需的最低百分比/票数)和投票持续时间的投票。成员可以对提案进行查看和投票,投票权与成员拥有的代币数量成正比。投票期结束后,我们检查提案是否通过,如果通过,则执行。
下图显示了流程。
让我们开始建设
我们将在我们的代码库中使用OpenZeppelin合约,我还将使用 Patrick Collins 的DAO 模板中的一些代码。
先决条件
您将需要以下内容才能开始。
- Node.js :您可以从 Node.js网站下载最新版本。我在撰写本文时使用的版本是 16.14.2。
- Yarn:我们将使用 Y arn作为包管理器。
- Hardhat:我们将使用Hardhat作为本地开发环境。
资料库
我已经编写代码并将其推送到 GitHub,如果您想自己尝试,可以在此处获取代码,不过我建议您留下来,因为我会解释代码。
场景
我们将构建一个将执行以下操作的 DAO:
场景 1
- 添加初始成员。(让我们称他们为创始人)。
- 让创始人创建一个提案。(提出要在智能合约上执行的功能)。
- 让方正对上述提案进行投票,因为方正拥有 100% 的投票份额,因此它将通过。
- 执行提案。(以及智能合约中的功能)
场景 2
- 添加一个初始成员(我们称他们为 Founder)。
- 添加另一个成员并向他们发行价值 20% 的创始人份额的新代币。
- 让创始人创建一个提案(提出一个要在智能合约上执行的功能)。
- 让创始人和新成员对上述提案进行投票。法定人数设置为 90%。
- 执行提案(以及智能合约中的功能)。
合约
如前所述,我们将使用 OpenZeppelin 的治理合约。合同如下