Update Jun 02 2017
From WARNING: Do NOT Use SafeConditionalHFTransfer! Or Use It Correctly:
The SafeConditionalHFTransfer saved a lot of ethers being moved incorrectly on the wrong chain after The DAO hard fork. So far there has been 20549 txns + 16022 internalTxns passing through the SafeConditionalHFTransfer at 0x1e143b2588705dfea63a17f2032ca123df995ce0. The author contacted me this morning about 67,317.257581981046981598 ETH ~ USD 14,892,596.89 (@ $221.23/ETH) sent incorrectly to the contract.
When using this contract, you have to call the classicTransfer(...)
or transfer(...)
functions to direct your ETH or ETC to the intended chain. If you send ETH (or ETC) DIRECTLY to the contract address, your ETH (or ETC) will not be redirected to the destination address on the destination chain, but will instead be trapped in this contract FOREVER.
As the recent clients on both the ETH and ETC chains have EIP155 Replay Protection built in, you do NOT have to use this SafeConditionalHFTransfer
any more. Just make sure you are using a recent client, with EIP155!
Here are the main clients and the versions implementing EIP155:
This warning has also been placed at the top of the answer to How to conditionally send ethers to another account post-hard-fork to protect yourself from replay attacks.
Update Nov 26 2016 - See @eth's answer to the question above as geth
1.5.3 has implemented replay attack protection.
Summary
Update Aug 25 2016
Ethereum Wallet and Mist Beta 0.8.2 now has replay prevention:
Replay prevention
We added an advanced feature to prevent your transactions on being replayed on other chains, like ethereum classic. This allows you either to prevent that transfer on happening on classic at all, or use that transaction to send the same amount to a different contract, like a newly created account or an exchange. If you want to fully separate all your transactions we recommend you create two new accounts, one for Ethereum proper and the other for Classic, and then move all your funds into them (remember that you need ether to move tokens), making sure that each account has 0 ether on the other chain - doing this once would prevent any future transaction from being replayed. To use this, use the "more options" button on the send page.
This feature also supports splitting tokens, but it's very experimental and will not work on all tokens. Since all of this is done using a contract then first you need to allow that contract to move tokens in your behalf by clicking "Approve token transfer".
As always, these features are experimental and should be tested with small amounts first. Although most transactions are replayed on both chains, some may not for multiple reasons. Also, some exchanges have issues receiving ether from a contract address - if that's your case, contact the exchange.
We've also removed all Fork code from the Mist app, so if you want to use it Ether Classic you'll have to either download Classic Mist directly from their repository or use your own node as the backend for your wallet (both Ethereum Wallet and Mist can connect to any node) as you would do for a private network.
The replay protection contract can be found at 0x1ca4a86bba124426507d1ef67ad271cc5a02820a.
Method 1 - Using geth
And SafeConditionalHFTransfer
Contract
Make sure that you are running geth version 1.4.10 or later. And run your geth commands with the --support-dao-fork option so that you are on the hard-forked blockchain. To transfer using the transfer(...)
or classicTransfer(...)
functions:
user@Kumquat:~$ geth console
// Allow chain to sync
var fromAccount = "{from account}";
var toAccount = "{to account}";
var amount = web3.toWei(1.123, "ether");
personal.unlockAccount(fromAccount, "{password}")
var safeConditionalHFTransferAddress = "0x1e143b2588705dfea63a17f2032ca123df995ce0";
var safeConditionalHFTransferABI = [{"constant":false,"inputs":[{"name":"to","type":"address"}],"name":"transfer","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"}],"name":"classicTransfer","outputs":[],"type":"function"},{"inputs":[],"type":"constructor"}];
var safeConditionalHFTransfer = eth.contract(safeConditionalHFTransferABI).at(safeConditionalHFTransferAddress);
// WARNING - Run the next statement to transfer ETH on the hard-forked chain
// This will only cost some gas on the non-hard-forked ETC Classic chain
// Test with a small amount first
var transfer = safeConditionalHFTransfer.transfer(toAccount, {from: fromAccount, value: amount});
console.log(transfer);
// WARNING - Run the next statement to transfer ETC on the non-hard-forked Classic chain
// This will only cost some gas on the hard-forked ETH chain
// Test with a small amount first
var classicTransfer = safeConditionalHFTransfer.classicTransfer(toAccount, {from: fromAccount, value: amount});
console.log(classicTransfer);
Method 2 - Using geth
And ReplaySafeSplitV2
Contract
Make sure that you are running geth version 1.4.10 or later. And run your geth commands with the --support-dao-fork option so that you are on the hard-forked blockchain. To transfer using the split(...)
function:
user@Kumquat:~$ geth console
// Allow chain to sync
var fromAccount = "{from account}";
var toAccountFork = "{to account on forked chain}";
var toAccountNoFork = "{to account on non-forked chain}";
var amount = web3.toWei(1.123, "ether");
personal.unlockAccount(fromAccount, "{password}")
var replaySafeSplitV2Address = "0xaBbb6bEbFA05aA13e908EaA492Bd7a8343760477";
var replaySafeSplitV2ABI = [{"constant":false,"inputs":[{"name":"targetFork","type":"address"},{"name":"targetNoFork","type":"address"}],"name":"split","outputs":[{"name":"","type":"bool"}],"type":"function"}];
var replaySafeSplitV2 = eth.contract(replaySafeSplitV2ABI).at(replaySafeSplitV2Address);
var transfer = replaySafeSplitV2.split(toAccountFork, toAccountNoFork, {from: fromAccount, value: amount});
console.log(transfer);
Method 3 - Using Ethereum Wallet And SafeConditionalHFTransfer
Contract
Note that the ReplaySafeSplitV2
contract below has more safety features built in.
Make sure that you have downloaded Ethereum Wallet 0.8.1 or later.
The first time you start Ethereum Wallet 0.8.1, select "Yes" to the question "Do you want to activate the chain in which funds linked to the exploit are restored to a contract where they can be withdrawn by The DAO token holders?". You have now made the choice to use the hard-forked Ethereum chain.
In Ethereum Wallet, select the CONTRACTS page in the top menu. Click on WATCH CONTRACT.
- Enter a CONTRACT NAME of
SafeConditionalHFTransfer
- Enter a CONTRACT ADDRESS of
0x1e143b2588705dfea63a17f2032ca123df995ce0
- Enter in JSON INTERFACE the following text
[{"constant":false,"inputs":[{"name":"to","type":"address"}],"name":"transfer","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"}],"name":"classicTransfer","outputs":[],"type":"function"},{"inputs":[],"type":"constructor"}]
- Click OK. Your Watch Contract should look like:
![enter image description here](https://i.stack.imgur.com/1h3Qz.png)
To Transfer Only On The Hard-Forked Chain
This will transfer your ETH to the destination account on the hard-forked chain and will only cost you gas on the non-hard-forked Classic chain.
Select the CONTRACTS page in the top menu. Click on SAFECONDITIONALHFTRANSFER. On the right hand side of the page under WRITE TO CONTRACT, Select function Transfer
. Enter your destination address on the hard-fork chain in the To - address field. In Execute from, select your account. Enter the number of ETH under the Send ETHER field. Click on the EXECUTE button, enter your password and confirm. Here is a screen image:
![enter image description here](https://i.stack.imgur.com/nQsKz.png)
To Transfer Only On The Non-Hard-Forked Classic Chain
This will transfer your ETH to the destination account on the non-hard-forked Classic chain and will only cost you gas on the hard-forked chain.
Select the CONTRACTS page in the top menu. Click on SAFECONDITIONALHFTRANSFER. On the right hand side of the page under WRITE TO CONTRACT, Select function Classic Transfer
. Enter your destination address on the non-hard-fork chain in the To - address field. In Execute from, select your account. Enter the number of ETH (ETC) under the Send ETHER field. Click on the EXECUTE button, enter your password and confirm. Here is a screen image:
![enter image description here](https://i.stack.imgur.com/ni25M.png)
Method 4 - Using Ethereum Wallet And The ReplaySafeSplitV2
Contract
UPDATE 22:27 Sep 4 2016 This is a new safer version of ReplaySafeSplit
as discussed by @chevdor on thedao.slack.com/messages/general in Safer version of the ReplaySafeSplit Smart Contract. This new version has checks that the addresses you specify are not 0x0000...0000 before sending your ethers to the addresses. This section has been updated with the new contract details.
Make sure that you have downloaded Ethereum Wallet 0.8.1 or later.
The first time you start Ethereum Wallet 0.8.1, select "Yes" to the question "Do you want to activate the chain in which funds linked to the exploit are restored to a contract where they can be withdrawn by The DAO token holders?". You have now made the choice to use the hard-forked Ethereum chain.
In Ethereum Wallet, select the CONTRACTS page in the top menu. Click on WATCH CONTRACT.
- Enter a CONTRACT NAME of
ReplaySafeSplitV2
Enter a CONTRACT ADDRESS of 0x8201...
(this old address was on the ETH chain only. If you used this contract, please delete your Watch Contract and recreate the Watch Contract with the new address below.)
- Enter a CONTRACT ADDRESS of
0xaBbb6bEbFA05aA13e908EaA492Bd7a8343760477
- Enter in JSON INTERFACE the following text
[{"constant":false,"inputs":[{"name":"targetFork","type":"address"},{"name":"targetNoFork","type":"address"}],"name":"split","outputs":[{"name":"","type":"bool"}],"type":"function"}]
- Click OK. Your Watch Contract should look like:
![enter image description here](https://i.stack.imgur.com/0UQDl.png)
To Transfer
This will transfer your ETH to two accounts, the first being the destination account on the hard-forked chain and the second being the destination account on the non-hard-forked Classic chain.
Select the CONTRACTS page in the top menu. Click on REPLAYSAFESPLITV2. On the right hand side of the page under WRITE TO CONTRACT, Select function Split
. Enter your destination address on the hard-fork chain in the Target fork - address field. Enter your destination address on the non-hard-fork Classic chain in the Target no fork - address field. In Execute from, select your account. Enter the number of ethers under the Send ETHER field. Click on the EXECUTE button, enter your password and confirm.
Here is a screen image:
![enter image description here](https://i.stack.imgur.com/ZAkCM.png)
SafeConditionalHFTransfer
Contract
Note that the ReplaySafeSplitV2
contract below has more safety features built in.
Following is the source code for the SafeConditionalHFTransfer contract (suggested by @shoraibit
26/07/2016). This contract does not depend on the WithdrawDAO contract having a balance over 1,000,000 ethers in the future.
contract ClassicCheck {
function isClassic() constant returns (bool isClassic);
}
contract SafeConditionalHFTransfer {
bool classic;
function SafeConditionalHFTransfer() {
classic = ClassicCheck(0x882fb4240f9a11e197923d0507de9a983ed69239).isClassic();
}
function classicTransfer(address to) {
if (!classic)
msg.sender.send(msg.value);
else
to.send(msg.value);
}
function transfer(address to) {
if (classic)
msg.sender.send(msg.value);
else
to.send(msg.value);
}
}
This contract depends on the ClassicCheck contract:
contract ClassicCheck {
bool public classic;
function ClassicCheck() {
if (address(0xbf4ed7b27f1d666546e30d74d50d173d20bca754).balance > 1000000 ether)
classic = false;
else
classic = true;
}
function isClassic() constant returns (bool isClassic) {
return classic;
}
}
When the SafeConditionalHFTransfer
contract was deployed, it used the ClassicCheck
contract to determine whether the code was being deployed to the hard-forked or non-hard-forked chain. And this check was done when the WithdrawDAO had a balance over 1,000,000 . SafeConditionalHFTransfer
should always work as it no longer has to check the balance of the WithdrawDAO balance.
ReplaySafeSplitV2
Contract
UPDATE 22:27 Sep 4 2016 This is a new safer version of ReplaySafeSplit
as discussed by @chevdor on thedao.slack.com/messages/general in Safer version of the ReplaySafeSplit Smart Contract. This new version has checks that the addresses you specify are not 0x0000...0000
before sending your ethers to the addresses.
Following is the source code for the ReplaySafeSplitV2 contract:
contract RequiringFunds {
modifier NeedEth () {
if (msg.value <= 0 ) throw;
_
}
}
contract AmIOnTheFork {
function forked() constant returns(bool);
}
contract ReplaySafeSplit is RequiringFunds {
// address private constant oracleAddress = 0x8128B12cABc6043d94BD3C4d9B9455077Eb18807; // testnet
address private constant oracleAddress = 0x2bd2326c993dfaef84f696526064ff22eba5b362; // mainnet
// Fork oracle to use
AmIOnTheFork amIOnTheFork = AmIOnTheFork(oracleAddress);
// Splits the funds into 2 addresses
function split(address targetFork, address targetNoFork) NeedEth returns(bool) {
// The 2 checks are to ensure that users provide BOTH addresses
// and prevent funds to be sent to 0x0 on one fork or the other.
if (targetFork == 0) throw;
if (targetNoFork == 0) throw;
if (amIOnTheFork.forked() // if we are on the fork
&& targetFork.send(msg.value)) { // send the ETH to the targetFork address
return true;
} else if (!amIOnTheFork.forked() // if we are NOT on the fork
&& targetNoFork.send(msg.value)) { // send the ETH to the targetNoFork address
return true;
}
throw; // don't accept value transfer, otherwise it would be trapped.
}
// Reject value transfers.
function() {
throw;
}
}
Following is the VM code from the non-hard-forked Classic blockchain which matches the verified VM code + source code on the hard-forked chain.
user@PussyWillow:~$ geth -exec 'eth.getCode("0xaBbb6bEbFA05aA13e908EaA492Bd7a8343760477")' attach
"0x6060604052361561001f5760e060020a60003504630f2c93298114610028575b6100005b610002565b6100406004356024356000348190116100e157610002565b60408051918252519081900360200190f35b80547f16c72721000000000000000000000000000000000000000000000000000000006060908152600160a060020a0391909116906316c727219060649060209060048187876161da5a03f11561000257505060405151905080156100d25750604051600160a060020a038416908290349082818181858883f193505050505b1561010f575060015b92915050565b82600160a060020a0316600014156100f857610002565b81600160a060020a03166000141561005257610002565b600060009054906101000a9004600160a060020a0316600160a060020a03166316c727216040518160e060020a0281526004018090506020604051808303816000876161da5a03f11561000257505060405151159050801561018c5750604051600160a060020a038316908290349082818181858883f193505050505b15610023575060016100db56"
This contract depends on the AmIOnTheFork contract:
contract AmIOnTheFork {
bool public forked = false;
address constant darkDAO = 0x304a554a310c7e546dfe434669c62820b7d83490;
// Check the fork condition during creation of the contract.
// This function should be called between block 1920000 and 1921200.
// Approximately between 2016-07-20 12:00:00 UTC and 2016-07-20 17:00:00 UTC.
// After that the status will be locked in.
function update() {
if (block.number >= 1920000 && block.number <= 1921200) {
forked = darkDAO.balance < 3600000 ether;
}
}
function() {
throw;
}
}
I'm using the same unmodified script from How many ethers have been drained through the recursive call attacks on The DAO? to calculate the balance of The DAO and it's child DAOs.
For a finer categorisation of the different child DAOs, see the latest update from How do I get a refund for my The DAO tokens that was split into a child DAO?. There are several child DAOs with innocent splitters AND malicious drainers.
Here is the data generated from the ETC chain @ 05:58 02/08/2016 GMT:
Type # Balance ExtraBalance Tokens Address
---------- --- ---------------------------- ---------------------------- ---------------------------- ------------------------------------------
The DAO 0 63.178156790000000001 0.000000000089472700 1153816598.7024669647216797 0xbb9bc244d798123fde783fcc1c72d3bb8c189413
child DAO 1 0.110000142499690430 0.000000000000000000 11.0000142499690430 0xd4fe7bc31cedb7bfb8a345f31e668033056b2728
child DAO 4 0.008519214441755701 0.000000000000000000 79.8519214441755594 0x2c19c7f9ae8b751e37aeb2d93a699722395ae18f
child DAO 7 989.001281201758472346 0.000000000000000000 98900.1281201758538373 0x1975bd06d486162d5dc297798dfc41edd5d160a7
child DAO 8 0.000000000000090658 1.428573279216753537 202867.2384762869332917 0x319f70bab6845585f412ec7724b744fec6095c85
child DAO 10 0.000000000000000000 0.000000000000000000 20500.6432347392910742 0x5c8536898fbb74fc7445814902fd08422eac56d0
child DAO 13 0.100000000000000000 0.018693039890011849 105482.6948358116351301 0x779543a0491a837ca36ce8c635d6154e3c4911a6
child DAO 14 0.000000000000000001 0.000000000000000000 74635.9658653056685580 0x5c6e67ccd5849c0d29219c4f95f1a7a93b3f5dc5
child DAO 16 1250.001619314659344457 0.000000000000000000 125000.1619314659328666 0x200450f06520bdd6c527622a273333384d870efb
child DAO 18 0.000000000854763543 0.000000000000000000 3457503.6590232858434319 0x6b0c4d41ba9ab8d8cfb5d379c69a612f2ced8ecb
child DAO 19 0.018387737083543350 0.000000000000000000 1686497.8387737083248794 0xd1ac8b1ef1b69ff51d1d401a476e7e612414f091
child DAO 20 10.000012954517274755 0.000000000000000000 1000.0012954517275148 0x51e0ddd9998364a2eb38588679f0d2c42653e4a6
child DAO 22 0.000000000000000000 0.000000000000000000 240000.3009084016666748 0xf0b1aa0eb660754448a7937c022e30aa692fe0c5
child DAO 23 0.000000000000011277 0.000000000000000000 9999.8647723253125150 0x9f27daea7aca0aa0446220b98d028715e3bc803d
child DAO 26 100.000129545172747556 0.000000000000000000 10000.0129545172749204 0xd9aef3a1e38a39c16b31d1ace71bca8ef58d315b
child DAO 27 41.173345768012804300 0.000000000000000000 4117.3345768012804911 0x6f6704e5a10332af6672e50b3d9754dc460dfa4d
child DAO 28 0.000000000000000000 0.000000000000000000 36738.0383063135377597 0x492ea3bb0f3315521c31f273e565b868fc090f17
child DAO 29 0.000000000000090010 0.000000000000000000 1583946.1690131428185850 0x9ea779f907f0b315b364b0cfc39a0fde5b02a416
child DAO 31 0.060000077727103648 0.000000000000000000 6.0000077727103651 0xcc34673c6c40e791051898567a1222daf90be287
child DAO 32 0.000000000000000000 0.000000000000000000 10705.0138678107414307 0xe308bd1ac5fda103967359b2712dd89deffb7973
child DAO 33 0.000000000000000001 0.000000000000000000 1313899.0176146971061826 0xac1ecab32727358dba8962a0f3b261731aad9723
child DAO 34 0.054104538362875475 0.000000000000000000 26685.4104538362880703 0x440c59b325d2997a134c2c7c60a8c61611212bad
child DAO 35 2.236999142516500888 0.000000000000000000 223.6999142516500854 0x9c15b54878ba618f494b38f0ae7443db6af648ba
child DAO 36 0.027428797178668633 0.000000000000000000 2.7428797178668631 0x21c7fdb9ed8d291d79ffd82eb2c4356ec0d81241
child DAO 37 76.761842290232377901 0.000000000000000000 7676.1842290232380037 0x1ca6abd14d30affe533b24d7a21bff4c2d5e1f3b
child DAO 39 0.000000000000056186 0.000000000000000000 212183.7249362469301559 0x6131c42fa982e56929107413a9d526fd99405560
child DAO 41 0.000000000000000001 0.000000000000000000 1254878.3143344640266150 0x542a9515200d14b68e934e9830d91645a980dd7a
child DAO 44 250.000323862931868891 0.000000000000000000 25000.0323862931873009 0x782495b7b3355efb2833d56ecb34dc22ad7dfcc4
child DAO 45 0.000000000000000001 0.000000000000000000 0.0000000000000001 0x3ba4d81db016dc2890c81f3acec2454bff5aada5
child DAO 52 0.000006477258637377 0.000000000000000000 500.0006477258637574 0xe4ae1efdfc53b73893af49113d8694a057b9c0d1
child DAO 53 7.144077587762826223 0.000000000000000000 714.4077587762826624 0x0737a6b837f97f46ebade41b9bc3e1c509c85c53
child DAO 54 0.002585721648041229 0.000000000000000000 199600.2585721648065373 0x52c5317c848ba20c7504cb2c8052abd1fde29d03
child DAO 56 5.000006477258637377 0.000000000000000000 500.0006477258637574 0x5d2b2e6fcbe3b11d26b525e085ff818dae332479
child DAO 57 0.009900012824972102 0.000000000000000000 0.9900012824972102 0x057b56736d32b86616a10f619859c6cd6f59092a
Baddies 59 0.000000000000000011 285.714295714285714286 364240852.7612792849540710 0x304a554a310c7e546dfe434669c62820b7d83490
child DAO 60 1256.101627216914882057 0.000000000000000000 125610.1627216914785095 0x4deb0033bb26bc534b197e61d19e0733e5679784
child DAO 61 15.276059789372406985 0.000000000000000000 1527.6059789372407067 0x35a051a0010aba705c9008d7a7eff6fb88f6ea7b
child DAO 62 934.889382511061152962 0.000000000000000000 93488.9382511061121477 0x9da397b9e80755301a3b32173283a91c0ef6c87e
child DAO 63 0.384900000000000000 0.000000000000000000 55938.4955979606020264 0x0101f3be8ebb4bbd39a2e3b9a3639d4259832fd9
child DAO 64 0.000000000124360133 0.000000000000000000 3069680.3822257122956216 0xbcf899e6c7d9d5a215ab1e3444c86806fa854c76
child DAO 65 5.000006477258637377 0.000000000000000000 500.0006477258637574 0xa2f1ccba9395d7fcb155bba8bc92db9bafaeade7
child DAO 66 1000.001295451727475566 0.000000000000000000 100000.1295451727492036 0xd164b088bd9108b60d0ca3751da4bceb207b0782
child DAO 67 0.068587370259945226 0.000000000000000000 6.8587370259945226 0x1cba23d343a983e9b5cfd19496b9a9701ada385f
child DAO 68 1409.336722195117395464 0.000000000000000000 140933.6722195117617957 0x9fcd2deaff372a39cc679d5c5e4de7bafb0b1339
child DAO 69 19173.240336954131945545 118.886510785155274580 1917324.0336954134982079 0x0e0da70933f4c7849fc0d203f5d1d43b9ae4532d
child DAO 70 5634.097608979247392143 0.000000000000000000 563409.7608979246579111 0xbc07118b9ac290e4622f5e77a0853539789effbe
child DAO 71 207.153967008322399135 0.000000000000000000 20715.3967008322397305 0xacd87e28b0c9d1254e868b81cba4cc20d9a32225
child DAO 73 6773.243673260677597543 0.000000000000000000 677324.3673260677605867 0x5524c55fb03cf21f549444ccbecb664d0acad706
Baddies 74 269.833661813680507459 0.000000000000000000 26982.3661813680519117 0xfe24cdd8648121a43a7c86d289be4dd2951ed49f
child DAO 76 3.486036451558542464 0.000000000000000000 348.6036451558542240 0x253488078a4edf4d6f42f113d1e62836a942cf1a
Goodies 78 7277385.711515429122911683 0.000000000000000000 727738571.1515429019927979 0xb136707642a4ea12fb4bae820f03d2562ebff487
Baddies 81 2.123311222366559138 0.000000000000000000 212.3311222366559150 0xf14c14075d6c4ed84b86798af0956deef67365b5
child DAO 85 859.189750496835322093 0.000000000000000000 85918.9750496835331433 0xaeeb8ff27288bdabc0fa5ebb731b6f409507516c
child DAO 87 1.944767821345229848 0.000000000000000000 194.4767821345229777 0x6d87578288b6cb5549d5076a207456a1f6a63dc0
child DAO 94 23.997787866533545896 0.000000000000000000 2399.7787866533544729 0xaccc230e8a6e5be9160b8cdf2864dd2a001c28b6
Baddies 98 28927.603152430302650042 5192.307692307692307692 2892760.3152430304326117 0x4613f3bca5c44ea06337a9e439fbc6d42e501d0a
Goodies 99 598974.326560793095813484 73722.042576599901129491 59897432.6560793146491051 0x84ef4b2357079cd7a7c69fd7a37cd0609a679106
child DAO 101 0.000000000000000021 369.231179004682274248 26956559.1797974072396755 0xf4c64518ea10f995918a454158c6b61407ea345c
---------- --- ---------------------------- ---------------------------- ---------------------------- ------------------------------------------
Total 289 7945651.899439196102321148 79689.629520730901276693 2353135147.8047966957092285 Balance% ExtraBal% Tokens%
---------- --- ---------------------------- ---------------------------- ---------------------------- ------------------------------------------
Baddies 29199.560125466348836198 5478.021988021978359029 367160807.7738258838653564 0.3674911% 6.8741968% 15.6030480%
Goodies 7876360.038076222874224186 73722.042576599895255640 787636003.8076221942901611 99.1279273% 92.5114636% 33.4717708%
Maybies 40029.123080715187825263 489.564956108944272728 44521737.5208813324570656 0.5037865% 0.6143396% 1.8920179%
---------- --- ---------------------------- ---------------------------- ---------------------------- ------------------------------------------
NOTE that the baddies have drained 3641694.241898506992612606 ETH from child DAO #59
UPDATE 09:24 02/08/2016 GMT - What's happening within child DAO #59 on the ETC chain?
The balance from child DAO #59 has been moved by child DAO Proposal #10 into 0x10abb5efecdc09581f8b7cb95791fe2936790b4e that has an amount of 3642408.52761279270689932 ETC.
This is a grand child DAO that shares the same code as the original The DAO.
The same account has a balance on the ETH chain - 0x10abb5efecdc09581f8b7cb95791fe2936790b4e. Noticed by @DaxClassix on reddit.
From 2xC19LBZ on reddit:
38K ETH accidentally sent to TheDAO after fork, were finally moved to this address. That's why this address does have 38K ETH now on forked chain.
From comparison, here is the data with child DAO #59 generated from the ETH pre hard-fork @ Jun 26 at 13:33 GMT, with the full data available in How many ethers have been drained through the recursive call attacks on The DAO?:
Type # Balance ExtraBalance Tokens Address
---------- --- ---------------------------- ---------------------------- ---------------------------- ------------------------------------------
Baddies 59 3641694.241898506992612617 0.000010000000000000 364169424.1898506879806519 0x304a554a310c7e546dfe434669c62820b7d83490
And here is the data generated from the ETH chain @ 06:05 02/08/2016 GMT:
Type # Balance ExtraBalance Tokens Address
---------- --- ---------------------------- ---------------------------- ---------------------------- ------------------------------------------
The DAO 0 0.000000000000000004 0.000000000000000000 1153816598.7024669647216797 0xbb9bc244d798123fde783fcc1c72d3bb8c189413
child DAO 1 0.000000000000000000 0.000000000000000000 11.0000142499690430 0xd4fe7bc31cedb7bfb8a345f31e668033056b2728
child DAO 4 0.000000000000000000 0.000000000000000000 79.8519214441755594 0x2c19c7f9ae8b751e37aeb2d93a699722395ae18f
child DAO 7 0.000000000000000000 0.000000000000000000 98900.1281201758538373 0x1975bd06d486162d5dc297798dfc41edd5d160a7
child DAO 8 0.000000000000000000 0.000000000000000000 202867.2384762869332917 0x319f70bab6845585f412ec7724b744fec6095c85
child DAO 10 0.000000000000000000 0.000000000000000000 20500.6432347392910742 0x5c8536898fbb74fc7445814902fd08422eac56d0
child DAO 13 0.000000000000000000 0.000000000000000000 105482.6948358116351301 0x779543a0491a837ca36ce8c635d6154e3c4911a6
child DAO 14 0.000000000000000000 0.000000000000000000 74635.9658653056685580 0x5c6e67ccd5849c0d29219c4f95f1a7a93b3f5dc5
child DAO 16 0.000000000000000000 0.000000000000000000 125000.1619314659328666 0x200450f06520bdd6c527622a273333384d870efb
child DAO 18 0.000000000000000000 0.000000000000000000 3457503.6590232858434319 0x6b0c4d41ba9ab8d8cfb5d379c69a612f2ced8ecb
child DAO 19 0.000000000000000000 0.000000000000000000 1686497.8387737083248794 0xd1ac8b1ef1b69ff51d1d401a476e7e612414f091
child DAO 20 0.000000000000000000 0.000000000000000000 1000.0012954517275148 0x51e0ddd9998364a2eb38588679f0d2c42653e4a6
child DAO 22 0.000000000000000000 0.000000000000000000 240000.3009084016666748 0xf0b1aa0eb660754448a7937c022e30aa692fe0c5
child DAO 23 0.000000000000000000 0.000000000000000000 9999.8647723253125150 0x9f27daea7aca0aa0446220b98d028715e3bc803d
child DAO 26 0.000000000000000000 0.000000000000000000 10000.0129545172749204 0xd9aef3a1e38a39c16b31d1ace71bca8ef58d315b
child DAO 27 0.000000000000000000 0.000000000000000000 4117.3345768012804911 0x6f6704e5a10332af6672e50b3d9754dc460dfa4d
child DAO 28 0.000000000000000000 0.000000000000000000 36738.0383063135377597 0x492ea3bb0f3315521c31f273e565b868fc090f17
child DAO 29 0.000000000000000000 0.000000000000000000 1583946.1690131428185850 0x9ea779f907f0b315b364b0cfc39a0fde5b02a416
child DAO 31 0.000000000000000000 0.000000000000000000 6.0000077727103651 0xcc34673c6c40e791051898567a1222daf90be287
child DAO 32 0.000000000000000000 0.000000000000000000 10705.0138678107414307 0xe308bd1ac5fda103967359b2712dd89deffb7973
child DAO 33 0.000000000000000000 0.000000000000000000 1313899.0176146971061826 0xac1ecab32727358dba8962a0f3b261731aad9723
child DAO 34 0.000000000000000000 0.000000000000000000 26685.4104538362880703 0x440c59b325d2997a134c2c7c60a8c61611212bad
child DAO 35 0.000000000000000000 0.000000000000000000 223.6999142516500854 0x9c15b54878ba618f494b38f0ae7443db6af648ba
child DAO 36 0.000000000000000000 0.000000000000000000 2.7428797178668631 0x21c7fdb9ed8d291d79ffd82eb2c4356ec0d81241
child DAO 37 0.000000000000000000 0.000000000000000000 7676.1842290232380037 0x1ca6abd14d30affe533b24d7a21bff4c2d5e1f3b
child DAO 39 0.000000000000000000 0.000000000000000000 212183.7249362469301559 0x6131c42fa982e56929107413a9d526fd99405560
child DAO 41 0.000000000000000000 0.000000000000000000 1254878.3143344640266150 0x542a9515200d14b68e934e9830d91645a980dd7a
child DAO 44 0.000000000000000000 0.000000000000000000 25000.0323862931873009 0x782495b7b3355efb2833d56ecb34dc22ad7dfcc4
child DAO 45 0.000000000000000000 0.000000000000000000 0.0000000000000001 0x3ba4d81db016dc2890c81f3acec2454bff5aada5
child DAO 52 0.000000000000000000 0.000000000000000000 500.0006477258637574 0xe4ae1efdfc53b73893af49113d8694a057b9c0d1
child DAO 53 0.000000000000000000 0.000000000000000000 714.4077587762826624 0x0737a6b837f97f46ebade41b9bc3e1c509c85c53
child DAO 54 0.000000000000000000 0.000000000000000000 199600.2585721648065373 0x52c5317c848ba20c7504cb2c8052abd1fde29d03
child DAO 56 0.000000000000000000 0.000000000000000000 500.0006477258637574 0x5d2b2e6fcbe3b11d26b525e085ff818dae332479
child DAO 57 0.000000000000000000 0.000000000000000000 0.9900012824972102 0x057b56736d32b86616a10f619859c6cd6f59092a
Baddies 59 0.000000000000000000 0.000000000000000000 364240852.7612792849540710 0x304a554a310c7e546dfe434669c62820b7d83490
child DAO 60 0.000000000000000000 0.000000000000000000 125610.1627216914785095 0x4deb0033bb26bc534b197e61d19e0733e5679784
child DAO 61 0.000000000000000000 0.000000000000000000 1527.6059789372407067 0x35a051a0010aba705c9008d7a7eff6fb88f6ea7b
child DAO 62 0.000000000000000000 0.000000000000000000 93488.9382511061121477 0x9da397b9e80755301a3b32173283a91c0ef6c87e
child DAO 63 0.000000000000000000 0.000000000000000000 55938.4955979606020264 0x0101f3be8ebb4bbd39a2e3b9a3639d4259832fd9
child DAO 64 0.000000000000000000 0.000000000000000000 3069680.3822257122956216 0xbcf899e6c7d9d5a215ab1e3444c86806fa854c76
child DAO 65 0.000000000000000000 0.000000000000000000 500.0006477258637574 0xa2f1ccba9395d7fcb155bba8bc92db9bafaeade7
child DAO 66 0.000000000000000000 0.000000000000000000 100000.1295451727492036 0xd164b088bd9108b60d0ca3751da4bceb207b0782
child DAO 67 0.000000000000000000 0.000000000000000000 6.8587370259945226 0x1cba23d343a983e9b5cfd19496b9a9701ada385f
child DAO 68 0.000000000000000000 0.000000000000000000 140933.6722195117617957 0x9fcd2deaff372a39cc679d5c5e4de7bafb0b1339
child DAO 69 0.000000000000000000 0.000000000000000000 1917324.0336954134982079 0x0e0da70933f4c7849fc0d203f5d1d43b9ae4532d
child DAO 70 0.000000000000000000 0.000000000000000000 563409.7608979246579111 0xbc07118b9ac290e4622f5e77a0853539789effbe
child DAO 71 0.000000000000000000 0.000000000000000000 20715.3967008322397305 0xacd87e28b0c9d1254e868b81cba4cc20d9a32225
child DAO 73 0.000000000000000000 0.000000000000000000 677324.3673260677605867 0x5524c55fb03cf21f549444ccbecb664d0acad706
Baddies 74 0.000000000000000000 0.000000000000000000 26982.3661813680519117 0xfe24cdd8648121a43a7c86d289be4dd2951ed49f
child DAO 76 0.000000000000000000 0.000000000000000000 348.6036451558542240 0x253488078a4edf4d6f42f113d1e62836a942cf1a
Goodies 78 0.000000000000000000 0.000000000000000000 727738571.1515429019927979 0xb136707642a4ea12fb4bae820f03d2562ebff487
Baddies 81 0.000000000000000000 0.000000000000000000 212.3311222366559150 0xf14c14075d6c4ed84b86798af0956deef67365b5
child DAO 85 0.000000000000000000 0.000000000000000000 85918.9750496835331433 0xaeeb8ff27288bdabc0fa5ebb731b6f409507516c
child DAO 87 0.000000000000000000 0.000000000000000000 194.4767821345229777 0x6d87578288b6cb5549d5076a207456a1f6a63dc0
child DAO 94 0.000000000000000000 0.000000000000000000 2399.7787866533544729 0xaccc230e8a6e5be9160b8cdf2864dd2a001c28b6
Baddies 98 0.000000000000000000 0.000000000000000000 2892760.3152430304326117 0x4613f3bca5c44ea06337a9e439fbc6d42e501d0a
Goodies 99 0.000000000000000000 0.000000000000000000 59897432.6560793146491051 0x84ef4b2357079cd7a7c69fd7a37cd0609a679106
child DAO 101 0.000000000000000000 0.000000000000000000 26956559.1797974072396755 0xf4c64518ea10f995918a454158c6b61407ea345c
child DAO 272 38353.864815688889001225 0.000000000000000000 3835386.4815688887611032 0x10abb5efecdc09581f8b7cb95791fe2936790b4e
child DAO 273 98.123341111110998772 0.000000000000000000 9812.3341111110985366 0x39771e2d34eda36a49ff4fa4194d7fcb839165da
---------- --- ---------------------------- ---------------------------- ---------------------------- ------------------------------------------
Total 287 38451.988156799998250790 0.000000000000000000 2356980346.6204767227172852 Balance% ExtraBal% Tokens%
---------- --- ---------------------------- ---------------------------- ---------------------------- ------------------------------------------
Baddies 0.000000000000000000 0.000000000000000000 367160807.7738258838653564 0.0000000% 15.5775931%
Goodies 0.000000000000000000 0.000000000000000000 787636003.8076221942901611 0.0000000% 33.4171647%
Maybies 38451.988156799998250790 0.000000000000000000 48366936.3365613296627998 100.0000000% 2.0520721%
---------- --- ---------------------------- ---------------------------- ---------------------------- ------------------------------------------
Best Answer
Keystore
For all the different setup methods below except the last, copy the contents from your keystore directory under your hard-forked chain data directory to your Classic chain data directory. Your accounts from the hard-forked chain should then show up in your Ethereum Classic chain.
Geth Executable For A "Temporary" Installation
In Linux and OS/X,
geth
is packaged with the Ethereum Wallet under the Ethereum Wallet install directory in the subdirectoryresources/node/geth/geth
.In Linux I use a soft link as shown below so that I can run
geth
just by typinggeth
:In Windows, the
geth.exe
executable isresources\node\geth\geth.exe
. So to startgeth.exe
you will have to execute:Different Computer Or Different User On Same Computer
The easiest way to sync to the Classic chain is to run the Ethereum Wallet and/or
geth
on a different computer from your hard-forked chain, or as a different user on your same computer. Your chain data will then be kept separated.As @usukan on thedao.slack.com/messages/withdraw_support reminded me, if you use a different computer or a different user on the same computer, you can just fire up the Ethereum Wallet and it will ask you which chain you would like to sync to. As you are on a different computer or a different user's directory structure, you will not clobber your hard-forked chain data.
Running
geth
With A Different DirectoryIf you want to sync
geth
to the Classic chain in a different chain directory, just specify the following parameters:After the initial sync, you don't have to specify the
--fast
or the--oppose-dao-fork
parameter. To confirm you are on the Classic chain, you should see the following message when you startgeth
:Running Ethereum Wallet With
geth
Running With A Different DirectoryThe important factor here is that Ethereum Wallet communicates with
geth
using an IPC (interprocess communications) file.Linux
On Linux, you can run
geth
with a different chain directory but you have to specify the default location for thegeth.ipc
file.Start the Ethereum Wallet. It will then communicate with
geth
over the IPC file. Confirm this by runningps -ef | grep geth
and you should only see once instance ofgeth
running.OS/X
Same as for Linux, except that the location for
geth.ipc
is in~/Library/Ethereum
Windows
The Ethereum Wallet communicates with
geth
on Windows using a standard path so you do not have to specify a path for your IPC file.Start
geth.exe
with the following parameters:Then start the Ethereum Wallet.
Renaming Your
chaindata
subdirectoryIn Linux, if you are running your node on the hard-forked chain, to switch your node to the Classic chain:
In OS/X, you can use the instructions above but the location for the Ethereum chaindata subdirectory is in
~/Library/Ethereum