In the current ecosystem voting is either resolved off-chain (carbonvote.org) or requires a token lockup period, or snapshots (MiniMe Token). With this implementation our team has found to way to reach consensus in a reliable manner.
What it does
When an election is generated anyone with a token balance of a specific token is able to participate. Token holders may vote yes or no to the election, and their balance will be updated to reflect their choice. Anytime through the election period a token holder may transfer his token as he pleases.
There are a number of monitoring agents who are incentivized to maintain election results. these monitors will consistently check the blockchain for any change in token balance from previous voters. If a change occurs these monitors would then send a transaction to the blockchain to update the vote count that he previously chosen. Monitors have a reporting period that extends past voting period to certify votes are correct.
How we built it
Election contracts are deployed in Solidity within AragonOS, while monitoring agents are generating utliizing web3js
Challenges we ran into
Resolving race condiitons and double voting in an effective manner.