Mooncats have a unique situation where each and every one of them are uniquely identified and distinct from all the other Mooncats. In most smart-contract-based voting systems/DAOs, Ethereum addresses hold some number of tokens/shares and get some proportional voting weight. But then care has to be taken that in a given voting period for any proposal, that someone cannot vote with their shares, transfer the shares to another address, and then vote again. By having the cats be the voting unit rather than the addresses, MoonCats can solve this issue very neatly.
Mooncats have Red, Green, and Blue values that range from 0-255. Based on those parameters, they can be separated into different groups and vote as a unit.
Three MoonCat Clubs, one for each of Red, Green, and Blue. They each act as a DAO, where the voting rights on proposals are determined by the Red/Green/Blue values of the Cats.
The Club contracts operate like a DAO in that any member can put forth a proposal (in the form of a transaction to be executed on the blockchain), and all members can vote on it for a time, and after a specified voting time has passed, if successful, the Club contract sends that transaction. The upshot is that then the Club contract can be made the "owner" of other contracts (who grant their owner special rights), which effectively makes the child contract "owned" by the Club.
In order to belong to the Club at all, the cat's color value for that color must be greater than 127. If their color value is less than this, they can't create proposals or vote at all in the Club.
Genesis cats are granted membership automatically.
A cat's vote counts for (x-127)/8+1
. Thus color values are grouped in chunks of 8, but a cat with a value of 255 gets one extra vote (17, compared to 254 which gets a vote weight of 16).
A cat gets an additional 5 points added to their vote weight if they are a named cat, and their name honors the mythical founder of the club (a specific string is found anywhere in their name).
Genesis cats have a vote weight of 20.
- Founder: Raskal Ratter-Ra
- Key string: "rat" or "Rat"
- Founder: Sir Giggums Gobo III
- Key string "gig" or "Gig"
- Founder: Bessie Belle
- Key string: "bel" or "Bel"
One global DAO where each Mooncat has one vote on each proposal the DAO considers. Genesis cats are not treated differently in this DAO; they have one vote just like all the rest.
This organization serves as the check-and-balance to the other clubs and can serve as a general consensus for the whole community.
It consists of two Contracts, the MoonCat "Liquid Democracy" contract (following the model of the "Liquid Democracy" example DAO from Ethereum.org) and the MoonCat "United Nations" contract.
The Democracy contract serves as the Executive branch of the MoonCat community. Each MoonCat can nominate either themselves, or another MoonCat to serve as representative of the whole community. After analyzing all the nominations, the MoonCat that has the most nominations (a plurality of nominations) is designated High Cat, and is recognized as the representative of the whole MoonCat community.
The United Nations contract serves as the Legislative branch of the MoonCat community. Each MoonCat can create Proposals and Vote on them. The weight of each MoonCat's vote is the weight of the nominations that MoonCat has received in the Democracy contract. So even if an individual MoonCat is not the High Cat (the one with the highest weight), it can still have a large influence on the proposals put forth at the United Nations contract if it has a large number of nominations as well. Proposals that get a majority of the votes cast will be acted upon (as long as a minimum quorum of MoonCats voted).
If you wish to extend upon this government foundation and create contracts that are able to be acted-upon by the MoonCat community, simply pick which type of action is most approprate for your use-case.
To create a function that should be able to be enacted by "executive order" (a single individual, with no other oversight other than the nominations of the community to act on their best interest) the function should give special permission to transactions coming from (msg.sender
) the Democracy contract (only the High Cat can make that contract trigger transactions, through the executiveOrder()
function).
To create a function that the whole MoonCat community should vote on (like a bill passing through Congress) the function should give special permission to transactions coming from (msg.sender
) the United Nations contract (the only way to trigger that contract sending a transaction is to have a Proposal be voted and approved by the community).