The ethereum core devs have repeatedly expressed that they are not interested in governance of the ethereum protocol. They want to implement features according to the will of the community.
Discussion around seemingly contentious proposals, like ProgPOW and StateRent, are dominated by vocal minorities and we still have no clear signal from the ethereum community as a whole (whoever they are) and our fear of another contentious hard fork leaves the core devs with little choice but inaction on any remotely contentious proposals.
What it does
Cygnus is a two-part mechanism for signalling and fund allocation designed to provide:
- Reliable signals that do not require arbitrary distinction of stakeholder groups and that are resilient to plutocracy.
- A reliable way for the community to allocate funds according to where the community thinks they will be best used, without relying on a central party.
During the hackathon, we implemented the signalling portion. This allows anyone to create a proposal on anything they like and then allows anyone to signal their preference for or against the proposal by sending any amount of ether to the respective receiving address for their preference.
How we built it
A Solidity proposal pool factory contract allows users to submit proposals. This deploys a proposal contract which, in turn, deploys another set of child contracts for each of the proposals outcomes; yes and no. We return the addresses of each option contract, to which users can send an arbitrary amount of ether to signal their preference. User's do not need to call any contract functions, they simply send ether to the address corresponding with their preference. The contract emits several events to provide information to our The Graph subgraph, including each time a new proposal is created and each time any address sends ether to their preference on a proposal.
Our frontend interprets signals quadratically (as in quadratic voting). For this PoC we assume that every ethereum address that signals is a unique user. In future iterations, we plan to use BrightID as our oracle for uniqueness within the context of our application.
Challenges we ran into
We realized early on that completing both parts of the mechanism was beyond the scope of what we could achieve during the hackathon, so we decided to focus in on just the signalling portion. Not enough time to polish the front-end :)
Accomplishments that we're proud of
--Creating a smart contract factory. Figuring out TheGraph, particularly the dynamic data sources feature to allow us to track events in all of the child contracts that we generate.
What we learned
If random bugs suddenly show up in code that hasn't changed, check your inputs.
What's next for Cygnus
- Integrate BrightID as an oracle for uniqueness.
- Spend some time tidying up the UI/UX.
- Start working on the fund allocation portion of the mechanism, likely using CLR matching.