How to split the DAO
Introduction
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 this page, we'll describe the technical process. A step-by-step-instruction can be found here.
Process
In order to initiate a split, a token holder needs to create a proposal with the newCurator
flag astrue
and the recipient
specifying the new curator of the new DAO (see How to create a proposal). Every token holder who wants to join this new DAO, needs to vote in favour of the proposal (How to vote and execute a proposal via the Ethereum Wallet). After the debating period, which is at least 1 week, the token holder can then call the function splitDAO
. This function has 2 parameters:
proposalID
The proposal ID of the new curator proposalnewCurator
the 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 thesplitData
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 splitDAO
.
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.
Remarks
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.
Warnings
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](Why-The-Stalker-attack-is-a-non-issue)
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.