|
1 | 1 | # Simple DAO with ERC20 Voting Mechanism
|
2 | 2 |
|
3 |
| -This project demonstrates a basic implementation of a Decentralized Autonomous Organization (DAO) using an ERC20 token for voting. The contract uses the `ERC20Votes` extension to track voting power. |
| 3 | +This project showcases a basic implementation of a Decentralized Autonomous Organization (DAO) using an ERC20 token as a voting mechanism. The `ERC20Votes` extension is used to track and manage voting power. |
4 | 4 |
|
5 |
| -## Features |
| 5 | +## Key Features |
6 | 6 |
|
7 |
| -- **ERC20 Token Voting**: Token holders can vote on proposals or delegate their voting power. |
8 |
| -- **Proposal Creation**: A minimum of 1000 tokens is required to create a proposal. |
9 |
| -- **Voting Options**: Users can vote: |
10 |
| - 1. **For**: In favor of the proposal. |
11 |
| - 2. **Against**: Opposing the proposal. |
12 |
| - 3. **Abstain**: Neither for nor against the proposal. |
13 |
| -- **Proposal Passing Criteria**: |
14 |
| - - A proposal must have more **For** votes than **Against**. |
15 |
| - - A quorum of 30% of the total token supply must be reached for the vote to be valid. |
| 7 | +- **Governance through ERC20 Tokens**: Token holders can participate in governance by voting directly or delegating their voting power to others. |
| 8 | +- **Proposal Creation**: A minimum of 1,000 tokens is required to submit a proposal. |
| 9 | +- **Voting Options**: |
| 10 | + - **For**: Support the proposal. |
| 11 | + - **Against**: Oppose the proposal. |
| 12 | +- **Proposal Approval Criteria**: |
| 13 | + - A proposal must have more **For** votes than **Against** to pass. |
| 14 | + - A quorum of 30% of the total token supply is required for a proposal to succeed. |
16 | 15 |
|
17 | 16 | ## Protocol Structure
|
18 | 17 |
|
19 |
| -- **`GovernanceToken.sol`**: Defines the ERC20 token used for governance, managing transfers, minting, and voting power via `ERC20Votes`. |
20 |
| - |
21 |
| -- **`Governor.sol`**: Handles the core governance logic, including: |
22 |
| - - Proposal creation |
23 |
| - - Voting |
24 |
| - - Proposal execution after the timelock period |
25 |
| - |
26 |
| -- **`Timelock.sol`**: Enforces a delay period after a proposal passes before it can be executed, ensuring time for review or challenge. |
| 18 | +- **`GovernanceToken.sol`**: Implements the ERC20 token used as the governance token, with support for voting power management via the `ERC20Votes` extension. |
| 19 | +- **`Governor.sol`**: Contains the core governance logic, handling: |
| 20 | + - Creation of proposals |
| 21 | + - Voting processes |
| 22 | + - Managing proposal stages, including queuing and execution. |
| 23 | +- **`Timelock.sol`**: Enforces a delay period after a proposal passes before it can be executed, ensuring a review window and safeguarding the protocol. |
27 | 24 |
|
28 | 25 | ## Proposal Lifecycle
|
29 | 26 |
|
30 |
| -1. **Voting Delay**: A 2-day delay after proposal creation before voting begins. |
31 |
| -2. **Voting Period**: A 3-day period where users can vote. |
32 |
| -3. **Outcome**: |
33 |
| - - If the proposal fails, it is considered **canceled**. |
34 |
| - - If passed, a 2-day **timelock** period follows before the proposal can be executed. |
35 |
| -4. **Execution**: After the timelock, the proposal is executed. |
| 27 | +1. **Voting Delay**: A proposal undergoes a 2-day delay period before voting can commence. |
| 28 | +2. **Voting Period**: A 3-day window during which users can cast their votes. |
| 29 | +3. **Outcome Determination**: |
| 30 | + - If the proposal fails to meet the required criteria, it is marked as **defeated**. |
| 31 | + - If successful, a 2-day **timelock** period follows, providing time for review before execution. |
| 32 | +4. **Execution**: Upon completion of the timelock, the proposal can be executed. Proposals that are not executed within 14 days will **expire**. |
36 | 33 |
|
37 |
| -At any point before execution, a **guardian** address can cancel the proposal. |
| 34 | +A designated **guardian** address has the authority to **cancel** a proposal at any stage before execution. |
0 commit comments