# Aragon DAO
Aragon DAO smart contracts allows one to create a Decentralized Autonomous Organization with custom rules. They have also provided common and easy to use DAO templates which greatly helps DAO creators to spin-up DAOs. They are :
**CompanyTemplate** : It helps one to represent ownership stake in organisation. Basically they allow stake-weighted voting.
**MembershipTemplate** : It will allow the mint of non-transferable DAO tokens. So essentially decisions are made based on one-member one vote governance.
**ReputationTemplate** : It also uses non-transferable DAO token. Decisions are usually made using reputation-weighted voting.
For the purpose of assignment, we would track **MembershipTemplate** based DAOs.
## Membership Template DAOs contract :
To launch a new DAO with token, members and voting config, **newTokenAndInstance** method is called. Caller of the method is assigned the role of DAO creator.
Each DAO created has its own DAO address. There are no public state variables in the contract.
### Events :
1. **DeployDAO** : Emits newly deployed DAO address
DeployToken : Token used for DAO
InstalledApp : If id is equal to Vote app ID hash, then voting app is enabled for the DAO. It emits app id and address of app created.
2. **Address** : https://mumbai.polygonscan.com/address/0x58520f9087761d60dcf9895bd5dad7f2bb76f01d
Start Block : 18134174
3. **More methods** :
**newToken** : It only creates DAO token and cache it for future use.
**newInstance** : It creates DAO with an already cached token address.
**newInstance** : There is another overloaded version of the method which is used if you have payroll app enabled.
## Voting Proxy contract :
It is created dynamically whenever the membership template is used. Each membership DAO is associated with a Voting contract.
### Events :
1. **StartVote** : It is emitted whenever a new vote proposal is created for members to vote.
2. **CastVote** : It is emitted whenever a DAO token holder eligible for voting on a proposal, casts a vote.
3. **ExecuteVote** : It is emitted when required quorum is achieved for a proposal
### Methods :
1. **Forward** : It allows DAO creator to create vote proposal for a DAO
newVote : There are two overloaded methods with this name which helps one to create vote proposal.
2. **changeMinAcceptQuorumPct** : It helps DAO creators/maintainers to update minimum number of votes required to execute vote.
3. **executeVote** : Call for execution of vote determined by vote id.
### State variables :
1. **votesLength** : It determines the total number of votes proposals created.
2. **votes** : It is mapping of vote id vs Vote struct having details like number of yes, no casted, users who casted vote, etc.
---
### Subgraph Github URL : https://github.com/gulshanvas/aragon-dao
---
## **Metrics** :
1. **Token Holder Distribution for each DAO created** :
We can get total holder distribution for each DAO using totalHolders field available for each created DAO in MembershipDAO entity schema. Participants for each DAO can be fetched using a User entity.
2. **Voter % - How many token holders vote per proposal, or a snapshot average** :
We can determine % of voters who have voted on a proposal :
a. Querying totalHolders from MembershipDAO entity – **X**
b. Querying totalYes and totalNo from Vote entity(Sum) – **Y**
c. **(Y / X)** * **100**
3. **Determining when vote was passed/executed** :
We can determine how quickly the vote was executed :
Difference between `executionDate` and `startDate` field from **Vote** entity. Lesser the difference bewteen, faster it has got executed.