Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.Sign up
How to split the DAO
In the case a single token holder, or a group of token holders, does not a agree with decisions by the curator and following proposals to a certain address, he can split off the original DAO to a new DAO. This mechanism is primarily to avoid the "Majority robbing the minority attack" described in section 4 in the white paper.
This process will destroy all his tokens and move his portion of the Ether (note: the
extraBalance is not part of that) owned by the original DAO and his portion of the
rewardTokens (used to retrieve his portion of the future rewards) to the new DAO.
After completion, this can not be undone! Everyone participating in a split should know exactly what he is doing in order to avoid any losses.
In order to initiate a split, a token holder needs to create a proposal with the
newCurator flag as
true and the
recipient specifying the new curator of the new DAO (see https://github.com/slockit/DAO/wiki/How-to-create-a-proposal).
Every token holder who wants to join this new DAO, needs to vote in favour of the proposal (https://github.com/slockit/DAO/wiki/How-to-vote-and-execute-a-proposal).
After the debating period, which is at least 1 week, the token holder can then call the function
This function has 2 parameters:
proposalIDThe proposal ID of the new curator proposal
newCuratorthe address of the new curator account (or multi signature wallet)
In the function it is checked that the voting deadline is over, the new curator is different from the old one, the transaction sender has voted in favour of the proposal and that the sender of the transaction has not voted on another proposal with a deadline after the proposal to split the DAO.
The first token holder calling that function for this proposal will automatically create the new DAO. In this process the current balance of the original DAO, as well the current balance of reward tokens (see white paper section 7) of the DAO and the total supply of DAO tokens are stored in the
splitData section of the proposal and used to fairly split the DAO.
After this process, the portion of the ether and the portion of the reward token belonging to the sender of the transaction are moved to the new DAO. Finally, his DAO tokens are destroyed.
In order to find the address of the new DAO, one can use the
getNewDAOAdress function, which takes the
proposalID as input parameter and returns the new address.
The new DAO which has been created will now go through the same 27 day creation period as the original DAO. This is the time for every token holder who has voted on the proposal to join the new DAO by calling
After this time the new DAO is fully functional, and the curator can add addresses to the whitelist and proposals can be created, be voted on, and executed.
The new DAO will have a proposal deposit of 0. Therefore one of the first action after the creation period should be a proposal to raise this value to a reasonable number.
In the case of a solo split, a split where you simply want to split out alone and take your portion of the ether, then there is something that you should be aware of. Anyone can join you in this solo split. If someone with more tokens than you tries to join, he can make your life difficult by downvoting all your proposals. He will never be able to steal your ETH since you will be the curator but he can block you taking your ETH out by also blocking his ETH inside with yours. More details about this and why it's not a serious issue can be seen here
The way to avoid such a scenario is to check after the
votingDeadline if the proposal has any other votes except from yours. If it does and they hold more tokens than you then don't call
splitDAO(). If not then call
splitDAO() and be certain that nobody will follow you in your new solo DAO.