[Ethereum] How to get a refund for the The DAO tokens that was split into a child DAO

etherthe-daothedao-refundtokens

The DAO token holders that split away from the main The DAO into a child DAO will have moved the tokens (DAO) and the corresponding ethers (ETH) into the child DAO.

As these DAO token holders have a zero DAO balance in The DAO, the Withdrawal contract cannot be used to convert the DAOs into ETHs.

How do I get a refund for my The DAO tokens that was split into a child DAO?


The DAO Refunds


See also:

Best Answer

Summary

At the hard-fork block #1,920,000 , the ETH balance from The DAO and it's child DAOs (which includes the balance from the extraBalance account) were transferred into the Withdrawal contract.

Immediately after the hard-fork, at block #1,920,090, the Withdrawal contact's trusteeWithdraw() function was called in this transaction to transfer 463,798.08818109 ETH into TheDAOCurator multisig wallet.

The current TheDAOCurator wallet balance is 463,859.030790534 ETH ($5,802,876.48).

If you have executed a legitimate split from The DAO, your DAO balance has been moved to the child DAO and your DAO balance in The DAO is zeroed. As your DAO balance in The DAO is zero, you will not be able to convert your DAOs to ETHs using the procedures described in How do I convert my The DAO tokens into ethers using the withdrawal contract after the hard fork?.

A proposal for refunding the child DAO splitters can be found at github.com/dsystems-io/childDaoRefund. And the first refund has taken place for an initial test.

See also The DAO’s Edge Cases Multisig (Post Hard Fork).



UPDATE 15:03 Aug 11 2016 UTC

A few split DAO refunds have occurred - 0x422fbb5913e5c5a2cbd731246b62d9fbba0aadffb4f3e91540b76bbb528ee19b. 5.001 ETH refunded from TheDAOCurator to 0x0e0e733dd24168d85ecb5a62bb13385d31edf761.

For a sample contract see Refund for proposal #52.



UPDATE 01:06 Aug 21 2016 UTC

@ledgerwatch has been working hard in #child_dao_community@thedao.slack.com on progressing split DAO refunds and has the following message If You Were in the DAO and split, and your childDao was affected by hardFork:

If you were in splits from one of these proposals: 7, 10, 20, 23, 26, 28, 31, 37, 54, 57, 61, 65, 66 (pre-attack), please send me a private message here ASAP, quoting the proposal number. I will respond with instruction on how to receive your Ether back.

If you were in splits from proposals 35, 36, 53, 62, 67, 68, 70, 71, 73, 76, 87, please watch out for my next post in this subreddit, in the next couple of days I will post what the plan is for returning Ether.

If you were in 69, 74, 78, 81, 94 (child DAOs containing contributions from reentrant splits), please watch out for my posts too, the post about those will come a bit later on, most probably in few days.

Lots of info gets published on slack, but I appreciate that a lot of people don't go there, so I will in touch with you here.



UPDATE 06:28 Aug 23 2016 UTC

Second message from @ledgerwatch If You Were in the DAO and split, and your childDAO was affected by HardFork (2):

If you were in splits from one of these proposals: 20, 26, 31, 37, 57, 61 (pre-attack), please follow the instructions here to perform a self test: https://docs.google.com/document/d/1kD-K-TAz2be8rI737zc_-xpfKdnFlWrcQbHJop1Zwzs/edit?usp=sharing When done, send me a private message, quoting the proposal number, and Ether will be send to your refund contract shortly.

If you were in splits from proposals 35, 36, 53, 62, 67, 68, 70, 71, 73, 76, 87, please follow the instructions in this document to check how much you will get back (and let me know in a private or public message if something looks incorrect): https://docs.google.com/document/d/1qIudT496M--pmavVXaQC4cVgJQG0XkDY-3crglPDjrI/edit?usp=sharing The checking needs to be carried out within the next 14 days, after that time, if no issues found, the 'Mass-Refund' contract described in the document, will be loaded with Ether and available for withdraw. Therefore, provisional date for loading is 6th of September.

If you were in 69, 74, 78, 81, 94 (child DAOs containing contributions from reentrant splits), please watch out for my posts in this subreddit, the post about those will come a bit later on, most probably in few days.

Lots of info gets published on slack (channel #child_dao_community), but I appreciate that many people don't go there, so I will in touch with you here.

Please contact him on reddit or slack if you are involved in one of the splits listed above!



UPDATE 21:55 Sep 5 2016 UTC

From @ledgerwatch on The latest on the childDAO and extraBalance refunds:

Disclaimer: Information below is the current plan, to the best of my knowledge, but this plan can change, and there might be changes or delays.

PRE-ATTACK childDAOs: Only 4 non-refunded childDAOs left: 20, 31, 37, 57. The total amount to be refunded is 87 ETH. If you have tokens in any of these childDAO, please send me a private message quoting the number

POST-ATTACK childDAOs without reentrancies: 35, 36, 53, 62, 67, 68, 70, 71, 73, 76, 87. The refund is currently planned for tomorrow. The refund contract is here: http://etherscan.io/address/0x3da71558a40f63b960196cc0679847ff50fad22b In order to use it, you need call 'withdraw' function, passing the address of your childDAO as argument. You can look up the address of your childDAO in the source code. The new feature of etherscan, on the tab 'Read contract', allows you to quickly lookup how much you would get back. The total amount to be sent to this contract is around 21'395 ETH

POST-ATTACK childDAOs with reentrancies: 69, 74, 78. There are only 5 addresses that qualify for the refund, those are the addresses that did not use reentrancy in their split. The owners of the 2 of them have already cryptographically confirmed that they are OK for the refund to be sent directly to these addresses (they are confident that these addresses are not vulnerable to any possible replays). The remaining 3 addresses are:

0x5b5d8c8eed6c85ac215661de026676823faa0a0c
0xab9acc3c451e43e18dd61ab11048c07b74c99eee
0xe1e278e5e6bbe00b2a41d49b60853bf6791ab614

If you control any of these 3 account, send me a private message and I will ask you for a confirmation. Currently there is no set date for these refunds, but they will be initiated very soon after the previous round of refunds, so soon after 6th of September.

You may want to transfer your ETHs after you have withdrawn them. To prevent the replaying of your ETH transfer transaction on the non-hard-forked Ethereum Classic chain, see How to conditionally send ethers to another account post-hard-fork to protect yourself from replay attacks.



Details

Quoting GrifffGreeen in reddit.com/r/ethereum - Curator Multisig: extraBalance & childDAO tokens announcement Early next week dated 21 July 2016:

Expect an update detailing how the people that sent ether to the extraBalance and childDAO token holders will be able to claim their ether early next week.

For the extraBalance: It will likely be a smart contract that will allow any one who paid into the extraBalance to claim the ether they sent to it, with or without DAO tokens.

The childDAO token holders can also join the #child_dao_community in The DAO's Slack to stay up to date on the developments.

So if you have executed a legitimate split from The DAO, join the #child_dao_community at thedao.slack.com and contact @griff to provide details of your split including:

  1. Split DAO's you joined (proposal numbers).
  2. Address of your childDAO
  3. Addresses that you used to split.
  4. How many DAO tokens each address burned.
  5. Best way to contact you :slightly_smiling_face:
  6. Any other relevant info that will help (did you send ETH as a proposal deposit? Is there one address you want all of the ETH to be sent to?)

Source: @griff in #child_dao_community at thedao.slack.com



UPDATE 06:56 06 Aug 2016 GMT

Here's an updated DRAFT refund proposal for refunding the child DAO splitters from github.com/dsystems-io/childDaoRefund:

childDaoWithdraw

A set of contracts to withdraw ETH from the childDAOs which split innocently from the main DAO contract. Based on these contracts the estimated ETH owed to innocent splitters (those who called splitDAO() without reentry) is 112,164.96789251 ETH

Resources

5 Classes of childDAOs

  1. Safe Children: Splits that were able to execute proposals to withdraw their ETH prior to the hardfork at block 1920000. We don't need to worry about these as their ETH was successfully withdrawn.
  2. Trusted Token Children: Splits that occurred prior to the first reentry attack and were never joined via a reentry attack. We can therefore trust that their tokens represent 1:100 ETH/cDAO.
  3. Untrusted Token Ratio Children: Splits with tokens that can't be trusted to represent 1:100 ETH/cDAO. They each called split() after the reentry attack and therefore have a ratio < 1:100 ETH/cDAO. They were however NOT joined via reentry attack.
  4. Untrusted Token Ratio With Reentry Children: Splits with tokens that don't represent 1:00 ETH/cDAO but were also joined via reentry attacks.
  5. Invalid Token Children: childDAO tokens created entirely via reentry attacks and therefore have no ETH value.

Class 1 - Safe Children

We can safely assume Class 1 DAOs are safe and are not in need of a solution. This includes the following Splits:

Class 2 - Trusted Token Children

Since these splits have a consistent ETH/cDAO token ratio, we can simply whitelist these DAOs and withdraw the token holder's ETH appropriately, similar to the main DAO withdrawal contract.

Based on this contract, the included childDAOs are owed: 69,704.90047138669 ETH

trustedChildWithdraw.sol

Uses a whiteList of trusted childDAOs to withdraw ETH by destroying tokens in each child. These addresses were compiled by running getNewDAOAddress() on the original DAO for proposals 1-300 and examining the transactions for each childDAO. Only childDAOs unable to execute Proposals to withdraw ETH before the hardfork were included. All calls to splitDAO() were credited 1 ETH for destroying 100 DAO tokens.

WhiteList includes:

Class 3 - Untrusted Token Ratio Children

As these tokens are not consistent in their ETH/cDAO ratio, we can determine each individual childDAO's rightful cDAO/ETH ratio based on how many DAO tokens they initially destroyed when calling splitDAO(). These childDAOs were not joined via any reentry attacks so their tokens are valid except for the ratio of ETH they represent.

Based on this contract, the childDAOs included are owed 14,973.629251125047 ETH.

untrustedChildWithdraw.sol

Based upon trustedChildWithdraw.sol with the added complication that each childDAO has an individualized token multiplier. This multiplier was determined using the following formula ( (DAO / 100) / ETH ). Where DAO is the number of DAO tokens burned to create the split and ETH represents the amount of ETH sent to the childDAO as a result of the split, calculated to 9 decimal places. All subsequent splits in a childDAO have the same multiplier.

List of splits that need an individualized calculation of ETH based on DAO tokens burned when calling splitDAO():

Class 4 - Untrusted Token Ratio With Reentry Children

These childDAOs also have a an untrusted token ratio, and were further joined via a reentry attack. Here we attempt to withdraw ETH from these splits individually based on the amount of DAO tokens they burned.

The total value of ETH owed to the splitters in this contract is 27,486.438169998 ETH.

infiltratedChildWithdraw.sol

This contract compiles the list of innocent (no-reentry) splitters from childDAOs that were joined via other reentry splitters (black and white hats). It then withdraws each innocent account when sufficient ETH is sent from the curator address. The contact accomplishes this as follows:

  1. Whitelists the 7 addresses which split innocently in reentry-attacked DAOs using an array.
  2. Builds a corresponding array that associates the amount (in Wei) that each address is owed from burning DAO tokens in the splitDAO() process. Here we calculate 100 DAO burned = 1 ETH owed.
  3. Uses a single function withdraw() that iterates over the whiteList and sends each address the appropriate amount of ETH.
  4. After successfully calling withdraw() the contract state isWithdrawn is changed permanently to true so as to prevent an accidently duplication.
  5. Restricts the call of withdraw() to only the Curator multisig address and only if the amount sent is sufficient to pay ALL recipients. Otherwise the entire transaction will fail with throw. Failure of any single send() will also throw.

The following is a list of infiltrated childDAOs and corresponding innocent splitDAO() transactions within each of them that were used to build the contract:

** NOTE: The values the transactions in Proposal 78 have been summed within the contract because they all belong to the same address. **

Class 5 - Invalid Token Children

The following children have been explicitly excluded because all split transactions were reentry attacks and therefore all tokens are invalid.

If you notice any errors with these lists, please bring it to my attention. Any other feedback much appreciated.

Contributors

Could not have been possible without the help and validation of everyone over at the #child_dao_community channel in The DAO Slack



Further References