Tasks to fulfill the bounty are:
- Implement a "voting creation" form with parameters like title, description, voting type, and voting options being set by a proposal creator. This form shall be accessible through the Q Governance Frontend or through a self developed dApp.
- Use the Vocdoni SDK for creating this election while also logging the start and data (‘settings’) of the election to the Q blockchain in an uniquely identifiable way.
- Make sure that no double voting is possible.
- For token votes, this requires tokens being locked in the DAO Vault Smart Contract for the voting period. In this case, locking tokens will be required to enable casting a vote through the SDK.
- For Expert Votes, you can fetch the list of eligible addresses from the Expert Panel Membership contract. Make sure that each address can only vote once.
- For Experts and NFT based voting there should be a “1address1vote” implementation. Implementing ERC-20 based token voting requires a “1token1vote” implementation which is (not yet) supported natively by vocdoni and would require additional development effort
- Use the Vocdoni SDK for adding all the voting information to the Q Governance Frontend or your dApp and allow users to vote using this frontend.
- Upon completion of the voting, log the voting results to the Q blockchain to ensure immutability and transparency of the voting result. Unlock all tokens that have been locked in the Vault (unless another voting is taking place).
Potential Voting Flow
Prerequisite: Create a DAO with Expert Panel(s) using the Q GDK
Step 1) Launch
- Allow authentication through an Ethereum address using Metamask (in order to check eligibility for voting)
Step 2) Create Proposal
- Provide a proposal creation page, where a voting process is created through the Vocdoni SDK, from your metamask account, including in the process census the members of the expert (they can be retrieved panel using the getMembers() Q GDK function)
- Ensure that specific duration and Quorum norms of the Expert Panel Proposal apply
- (Community Vote: Get a list of token holders for eligibility.)
- Smart contract (amendments) to start a proposal with a transaction on chain. Enabling an option to logging each vote on-chain is optional.
Step 3) Off-chain Vote and On-chain Results
- Provide a page for voters (Voting through the Vocdoni SDK)
- (Community Vote: If an address votes, lock their token(s) in DAOVault.sol)
- Upon completion of the voting, log the voting results to the Q blockchain to ensure immutability and transparency of the voting result.