Disclaimer : This project was made during the ETHParis Hackathon, it is not a working/supported project.
The yellow vest movement happening all over France in the past weeks have shown that the citizens are not pleased with their current government, they are tired to be manipulated by politics and to be powerless about it. French citizens are eager to be involved in the system, our team think that a Liquid Democracy built on Ethereum could be a potential solution.
What it does
FranceDAO is a DAO operating on a National Level and backed and funded by the government to empower the french citizens, here's a quick summary of what it does :
- When a french citizen reaches his age of majority ( 18 years old ), a single and unique CZS (Citizenship) Token gets minted by the Organisation Avatar and assigned to the citizen wallet.
- With this token the citizen has the choice to vote on proposals by himself, or to delegate his token to another citizen.
- People can also delegate the tokens that have been delegated to them, therefore creating delegation trees.
- A member's voting power is increased by 1 for each token delegated to him.
- When you delegate your token to someone, you can't vote by yourself anymore.
- If a citizen has delegated his token, he can claim it back instantly
- As a friction system to limit malicious behaviors destined to alter the result of a vote, we implemented the following friction system :
- Once a vote has reached a certain duration, it will reach what we call a soft deadline, from which the system will wait for a "quiet period" during which the consensus is stabilized before putting a term to the vote.
- If no stable consensus can be reached, the vote can reach what we call a "hard deadline", upon which the vote will be discarded and will need to be resubmitted if appropriate.
How we built it
We had to create a new VotingMachine to manage Vote lifecycle, a new UniversalScheme to manage Delegation and our CitizenshipToken. To reduce gas cost, we used the ERC721X from Loom network specification to implement our CitizenshipToken, allowing us to operate batch transfers. This implementation originally using solidity 0.4.25, and the DAO stack running on solidity 0.5.4,we had to migrate ERC721X from 0.4.25 to 0.5.4. To build the Dapp, we used the Angular Truffle Box.
We intended to implement Portis and Gas Stations relays to allow a seamless experience for users using our Dapp but ran completely and utterly out of time.
Challenges we ran into
First one was to find something interesting to buidl, and wich technologies/protocols we were going to play with. When we decided to go with this DAO Liquid Democracy, we had to explore what was DAOStack, what would be useful to us, how we could achieve what we want etc... The DAOStack team has been a great help in that aspect but we still had to take a lot of time crawling through the dao stack code to try to understand how things worked.
Accomplishments that we're proud of
Learning new stuff, and participating, I guess !
What we learned
We learned next time we'll think about what you can buidl and explore sponsored technologies before the start of the event :).
What's next for FranceDAO
- Ensure participants are citizen. This could be done using already existing centralized systems like FranceConnect or maybe using future implementations of the DID specification.
- Add a government funded relay to give access to voting to all citizens without any entry barrier.
- Integrate portis for seamless ux and easier end-user adoption
- Implements semi-automatic classification of proposals by theme.
- Allow users to delegate their voting power depending on the theme of proposals
- Implement additional friction systems between a user votes to prevent malicious behaviour of members. Possible implementations could be :
- Additional costs to voting (relay won't pick up the transaction cost)
- Temporary Isolation (can't accept/use delegations)
- Create new schemes to manage proposals pre-vote lifecycle. One possibility could be to select and award people having contributed using another set of proposals. Another one would be to automatically transfer ETH from the owner's/the government's wallet that is used to fund the gas station.
Run the project
First, you need to get a Ganache running on port 8545. After that, we need to get Arc ready, to do so, enter the following :
$ cd node_modules/@daostack/arc/build/contracts/ $ npm install $ truffle migrate
Then let's get FranceDAO ready, go back to the project root and enter the following :
$ npm install $ truffle migrate
And finally, you can start the Dapp by entering :
$ npm run start