At Intercoin, we have been building all kinds of distributed applications on the Ethereum blockchain, that would be useful for communities, governance, voting, etc. (You can read about them at <a href="https://intercoin.org/applications" rel="nofollow">https://intercoin.org/applications</a>)<p>One of the building blocks was the ControlContract. It was designed to be a drop-in replacement for any address that might have some ability to manage a balance or call some methods of other contract. Like a multisig wallet on Bitcoin, but much enhanced.<p>ControlContract basically referred to an existing CommunityContract (which was responsible for managing roles and permissions), and the owner could call something like<p><pre><code> addMethod(contractAddress, method, rolesForInvoking, rolesForEndorsing, minimum, fraction=0)
</code></pre>
Basically, it would let some roles in the community invoke the calls, and others to endorse the all. As long as the minimum number of people with the right role endorsed (including the invoker) and at least the right fraction of people with that role, the contract would then CALL that method with the parameters of the invoker. We even allowed people with simple wallets to send a tiny amount of ethereum, like 0.0000001928 where 1928 was the invokeId, to endorse a call.<p>Anyway, we then said, what if we had "succession". So the owner of the contract could itself be a ControlContract. Or they might set up some groups and then renounceOwnership(). The first group would call the shots, but if they didn't successfully call a method in a certain timeout, not even calling heartbeat() before the timeout ,then the second group became empowered. If the first group came back later then they could still get everything done immediately, and the second group would be depowered until the next time. And so on down the line. This would be like a "vice president" etc.<p>So yeah, we built an entire system for governing communities, that would basically be flexible enough for any sort of things like that.<p>And you can see the code here: <a href="https://github.com/Intercoin" rel="nofollow">https://github.com/Intercoin</a>