A look into the voting mechanism

As a first step to ongoing DAO part of the project we already have an on-chain voting mechanism.

We have already held two polls (actually the second is going currently) and let users to make several decisions. Here I’d like to shortly dive into how it works and how flexible it can be.

Firstly we can take a look at current contracts in the master branch

  • there is pollAddress state variable in GameManager.sol
    – it usually contains zero address - no poll then
    – after deploying a poll contract we link GameManager to the Poll with this variable
    – if it is linked, then a getPollData() method returns info on the poll from the Poll contract
  • there is Poll.sol contract with voting logic
    – each voting - a new deployed individual Poll contract. So we keep the results forever in this contract and we can implement any sophisticated voting logic for each new poll (for example whitelists, or one land – one vote, or square root of land count = votes, or avatar count/CLNY/…, any other fantasies)
    – to start a vote we need to deploy new typical (or changed for a new logic) contract with needed options, caption, description and link it with GameManager – frontend app automatically will see it and offer users to vote

Next step will be to let users see the results of voting in the app (currently users have to go to a block explorer for it) and to hold multiple votings at time and some automatic deploy via fabric or just a contract which will handle multiple votings.

Any ideas on it? How can we improve a fair community decision making?