Ethereum Fork: Step-by-Step Guide to Safely Splitting your ETH/ETC

in #ethereum8 years ago

Background

Recently the Ethereum network successfully forked it's protocol so as to return the compromised funds taken from the DAO smart contract and return them to DAO token holders.

While there was a healthy amount of debate and disagreement, eventually most of the Ethereum network switched to the hard fork. However those strongly against the hard fork have decided to maintain the pre-fork chain and reject the new chain. Thus the Ethereum Classic project (ETC) was born.

As of yesterday Poloniex, the largest ETH exchange, announced that they have added market support for Ethereum classic.

What this means is that if you were holding ETH before the hard fork, your tokens now exist in 2 separate realities: ETH and ETC. Markets exist for both so you are free to hedge your bets on whichever version of the chain you think will be successful. You can essentially sell all of your ETC while maintaining all of your ETH, or vice-versa.

The problem is that separating your tokens on each chain carries risk. Specifically something called a replay attack. A number of solutions have been proposed and this post aims to walk you through one such method. While I make no guarantees for this method, I can confirm that I have used this method successfully using 5+ accounts. I'll be making use of smart contracts which you need to trust for this procedure, but I'll give a brief explanation of how they work.

Prerequisities

  • Mist Wallet 0.8.1 with the Hard Fork option activated (when prompted on startup, select 'Yes')
  • Loaded Mist account(s) with ETH that you wish to split between the chains.
  • Separate accounts for each chain. You can either create new accounts in Mist, or use another wallet provider/exchange. I would highly recommend only using Mist for one chain, and some other provider for the other (another computer will work as well). Otherwise you will need to switch between chains and re-sync Mist every time. I used Mist for ETH and Poloniex for ETC.

Step 1: Adding the Split Contract

In order to split the same ETH into ETH/ETC on two separate accounts, we'll make use of a contract designed to split funds between chains and which was deployed before the hard fork. It is now in a different state on each chain and will send to a different address in each version. The contract details can be found here. I encourage you to look over the code yourself and not trust my word for it. If you are unsure, have someone you trust check the code for you to ensure it's doing what you intend and that I'm not simply stealing your funds ;)

  • In Mist, navigate over to the 'CONTRACTS' tab.
  • Under 'CUSTOM CONTRACTS', click 'WATCH CONTRACT'
  • Fill in these details:
    • CONTRACT NAME: ReplaySafeSplit
    • CONTRACT ADDRESS: 0xaa1a6e3e6ef20068f7f8d8c835d2d22fd5116444
    • JSON INTERFACE
[{"constant":false,"inputs":[{"name":"targetFork","type":"address"},{"name":"targetNoFork","type":"address"}],"name":"split","outputs":[{"name":"","type":"bool"}],"type":"function"}]
  • Click OK

You should now have a new contract listed under CUSTOM CONTRACTS called 'ReplaySafeSplit'.

Step 2: Calling the Split Function on the Contract

Now that we've added the contract let's click on it. It should look something like this:

Under 'WRITE TO CONTRACT' there's a dropdown with only 1 option called 'Split'. Let's select it.

**THIS IS THE IMPORTANT PART**

  • The 'Target fork' field is the address of the ETH account you will use
  • The 'Target no fork' field is the address of the ETC account you will use

DON'T MIX THESE UP!!!!!

Fill in these fields with your two separate accounts. Double check that they are correct. Send whatever amount of ETH you would like to split between the chains.

Step 3: Keep Them Separate

You now have ETH/ETC in separate accounts on each chain. In order to avoid confusion and mistakes keep these separate going forward. Don't send ETC into your ETH account or vice-versa.

Hope this was useful to some of you and that you can now make your own decisions about which version of Ethereum reality you choose, or choose not, to participate in.

Sort:  
There are 2 pages
Pages

Congratulations! Vitalik Buterin just linked your post to his post: https://blog.ethereum.org/2016/07/26/onward_from_the_hard_fork/

Steemit became popular

Hi!I am deng,Welcome to my space
https://steemit.com/@changli-deng

I should be able to down vote... and in so doing take money from you. Hey, @steemit... make it so! That will make people think twice before they spam, don't you think?

Referrals don't get any better than that!

This is really great and is living proof that all other Crypto and Socialmediaplatforms are monitoring our Steemit Family very carefully. They should, because there will only be one form of socialmediaplatform, the usergenerated and compensated one ;)

keep up the good posts coming!

Yeah, Steemit rocks!

This is so awesome!

Pauls, I just tried this today with 1 ether and...it didn't seem to work. Followed the steps exactly and had @lukestokes double check my work. The ETH was returned by the contract to the output address, but the ETC has never shown up. It's been over two hours. The contract shows as fully executed with dozens of confirmation but the ETC balance still shows as zero both in my wallet and on the ETC block explorer. Any thoughts? I'd be grateful for any guidance you could give. Perhaps it just takes a long time for some reason?

BTW, I'm using MyEtherWallet (with Trezor) for the ETC wallet and the latest version of Mist for the ETH wallet, both on the same computer.

This doesn't seem to work if I am trying to send from a multisig contract. Can anybody confirm?

I had a similar issue, but found the account approval/signature had to take place on both chains. I downloaded the non-fork chain on a different user account in my laptop. When I switched over to that user and booted up Ethereum-no-fork, there was an approval sitting there. Hope that helps someone. :)

when does the fork/nonfork option show up?

Can you confirm you have a balance on both chains?

Can you clarify 'this'? Multisig will require the correct amount of signatures to send Ether, on either chain.

good job!

I dont like the hard fork

what a mess

people screwing up the system

Me either. I bought into the Eth ICO because of terms like immutability, uncensorable, etc. In our case, we can sell our eth and with those funds, purchase a much higher percentage of the etc platform.

Thanks for sharing such knowledge with us, it is well needed! Namaste :)

Yes I didn´t know this too and I have some ETH... :) Thanks @pauls

It's retarded that we even have 2 chains at the same time. Both have the same functionality.

Thanks man, I was looking for this on google and didn't find anything. Looks like steemit could be a searching engine as well.


I love STEEMIT... oooh.. me too! is not impressive? yes yes yes yes yes!

thanks!
try it tomorrow.

Excellent guide!!
However, since it is now already post-fork. It is very likely people have different ETC and ETH amounts in their wallet (just like myself). It is better to have a reminder to people when splitting ETC and ETH.

For example, if Peter has 100 ETH and 99 ETC in his wallet.
Check ETH amount with http://etherscan.io/
Check ETC amount with http://gastracker.io/
Split only 98.99 ETH/ETC to avoid any potential error due to insufficient fund in ETC, taking into account of transaction fee.

This seems to work for now. Polo was doing this as well but ive heard that they no longer do.

I followed your guide. I tried it with 7 eth first. I send my 7 eth to a new adress in my mist browser and the etc to to my etc deposit adress on Poloniex. At first i saw in the Classic blockchain explorer that the 7 etc arrived. But they haven;t shown up in my poloniex account yet.

About 30 min later I checked the same eth adress on the Classic blockchain explorer and I see this:

ITS ALMOST EMPTY! What could have happened here?

My eth arrived fine in the new adress of my mist browser.

Did it arrive in your Poloniex account? After they receive the ETC it will likely move to their cold storage.

You are right. the 7 i send arrived after 2 hours. I then send the rest of my eth trough the same contract. It never arrived (its been 7-8 hours or so).

I think i might have messed up. Because i had more eth than etc (because of ETH comming back from the DAO).

So lets say I had:

50eth and 40etc on the same initial adres. I filled in the contract that i wanted to send 49 eth to a new eth adres and the etc to poloniex. But I think the etc transaction could never run because i didn;t have enough tokens. Sadly i can;t figure out were they are. Should consider them lost or are they floating around somewere?

I think I have the same problem. Now, re-executing the split sending like 39eth, (the 40etc should still be there), should work, right? I tried it and nothing happens to the remaining etc funds. Maybe my contract execution on the hf chain is not replayed anymore on the no-hf chain because I submitted an invalid transaction once?

First, check you can check your ETC balance here: http://gastracker.io/addr/0x....

Then try to send the amount of ETC you have using the split function. But keep in mind you'll need some gas for the transaction to go through, so try sending slightly less than the max balance.

WOOHOO. I solved my problem by myself. I Booted a VM (Virtual machine, but you can also use a seperate computer and loaded ethereum wallet with the NO DAO FORK. Took about 2 hours to sync.

After I Loaded my keystore files into this new wallet and PRESTO! my missing etc appeared. I'm over the moon! I send some to shapeshift and it worked!

I checked the balance and executed a split with an amount of 5 ETC less than available. Still nothing. Other ideas?

Thank you Paul for the great breakdown. I was wondering if you (or anyone else) could just give me some quick advice. Im a very active day trader of crypto but my tech side is lacking. I still have my ETH on the genesis block and safely tucked away (off my computer) on the file I got from the ico.
I do have mist 0.7.2 synced to my computer and looking to load up these coins and claim ETC. I looked on gas tracker (with /addr/xxx my eth address xxx after the url) and I get 404 error to my genesis block coins but can see on other address I have it says I have Ether? I guess Im doing it right and that means my genesis block coins have no ETC?? Does anyone know why? Cheers

Not sure if I understand correctly. But first of all if you're using Mist 0.7.2, you're working on the pre-fork chain. However if you have genesis coins and haven't moved them, you most definitely have both ETH and ETC. You can check on etherscan.io for your ETH balance on the forked chain. These should be identical if you haven't moved the ETH around.

You may want to consider moving those coins to a new wallet like Mist sooner rather than later, as the key format has changed since the early days. The keys are safe but in the future you might have an issue finding tools to make importing easy. If you'd like to discuss further, hit me up on twitter @paulszczesny0

Thanks very much paul thats great news, I'll be following your work and consider me a regular upvoter on your good content to come.
Although only being a very small amount of coins you have eased my mind, thnx. Good tip on moving sooner than later too, I was wondering if they may become incompatible someday. I'll be looking more into the above process that you have laid out so well... and follow you on twitter.
Cheers mate.

thanks for this very informative post,thou it as been Posted since last year but sincerely this reLLY HELP..KUDOS

Noob Question: If I have ETH in a GDAX account/wallet and it existed prior to the fork, is it still possible to split using Mist? I assume I have to send my ETH from GDAX to a Mist account/wallet??

Sorry for the dumb question, but I'm really just interested in splitting my ETC and getting it onto an exchange so I can sell it. But I've never done anything even halfway complicated with coin, and have never used Mist...

Any help would be appreciated!

Same dumb question :). I downloaded Mist, synced, deposited 2 ETH from my GDAX account which I haven't touched since weeks before the fork and not associated with the DAO, and ran the split contract for 1.5 Ether. 1.5 ETH (less gas) deposited back into the mist wallet and nothing in Polo yet. Can anyone who has used this method sending funds from GDAX to Mist to Polo confirm?

Great post! Doesn't apply to me as I sold all of my eth before the hard fork because I just knew there was going to be trouble, but this is needed information for those still holding eth and now etc. This also demonstrates how far crypto has to go before it is ready for the masses. There is no way most people could do this ^^^ on their own.

With all of it's growing pains, Ethereum continues to lead the pack and looks to be the choice of Crypto and other Digital products. Companies like YOCoin, (https://steemit.com/crypto-news/@mrmel/yocoin-safe-secure-and-stable) and Steemit are full speed ahead with Ethereum.... the future is now!

I try to follow the tutorial and make a split...I did it yesterday, but nothing happend. Please help me with this. Thanks in advance.
http://etherscan.io/tx/0x1623c96f69598d1b1cda871a3f76aa13de0808cf469e0207b5ee7cb65f0b87ce

I would love to see article like this with myetherwallet.com using as an example. MyEtherwallet is easy and quick for someone who does not know programming.

Sorry for this question, I know is a newbie question, but at the end I don't understand exactly what I need to do for split.

I have 2 ETH and 7 ETC in the same account.

Ok, I followed the tutorial, use my main account as Target Fork, (Vitalik said is his entry that it's possible) and uses my ETC account in polo in the "Target no fork" field.

Then I send 1 ETH to test.

My questions is.. I need to have the same ammount of ETH and ETC to split correctly and have all my 7 ETC in my Polo account?

At the moment I can't see any ETC in my Polo account, and I have the same ETH and ETC in my account.

To me the contract is confused, why you can't split the ETC only instead send ETH?. I don't understand this.

Thank you for the straight forward instructions for doing the split contract. I will give this a try tomorrow. Thanks again!

Beware, careful.. dont do something you'll regret.

I'm regretting it.

What happened?

I made three major newbie mistakes. I took for granted that my Mist Wallet was the correct version (it wasn't); I didn't test the contract by sending a few ETHs first - I went for the gusto and sent it all; and thirdly I sent the ETC to my Jaxx wallet thinking it would accept ETC - it didn't. I managed to fix it in the end and I got my ETH and ETC back but it was painful. The guide is perfect - the carbon based life form (me) using it wasn't.

Can you think of a way to check if your have been a victim of replay? As of the record block my ether was in my mist browser account, post fork i moved back to the exchange, I synced today to the old chain and my account shows empty. Is there a location where you can look up transactions on the ETHC chain that you know of?

Which exchange? If you sent ETH to an exchange post-fork that means both ETH and ETC were sent there. Poloniex splits it for you but I'm not sure about the other exchanges.

This is a PUMP and DUMP FUD It has no support of the ethereum community. The people pumping it seem to be bitcoin enthusiasts, not smart contract developers. This gives ETC absolutely NO long term value.

I think both ETH and ETC holders are in trouble

The replay would have been done by someone you sent your eth to, as i understand it, you can just check your own transactions and find who could have split off the classic. Thing is, it's theirs cause you gave it to them, accidentally yes but still, its crypto.
It's still worth asking for it back though, I think an exchange or reputable business would give it to you.

For some reason this is not working for me. I get the balance back in my ETH account but not in my ETC one. Any idea why?

same here!

with small amounts it worked, but when i tried bigger ones they never reached polo!

Check your balance on both chains. (Basic ETC explorer here: http://explorer.ethereumclassic.com/). It may be the case that your balances are not the same on both chains. For instance, if you've received any refunds from the DAO withdrawal contract those funds won't be valid on the ETC chain. Could also be that you received some ETH after the fork and someone has already split the funds.

It should not be a problem if balances do not match, right? At least as long as I have more ETH than ETC and try to send less ETC than I currently have. Unfortunately it worked that way for me a few times but not the last time, so I have some ETC stuck right now /:

Might be an issue with gas. Try sending slightly less ETC than you have to ensure the transaction goes through. -0.01 should be enough.

I'm having the exact same issue and my balance was most definitely the same on both chains. I just claimed both balances from the crowd sale earlier this week and had made no other transactions until I tried the split transaction with 1 ether. The ETH was returned by the split contract but the ETC was not. At least not yet. Been two yours plus.

This is a PUMP and DUMP FUD It has no support of the ethereum community. The people pumping it seem to be bitcoin enthusiasts, not smart contract developers. This gives ETC absolutely NO long term value.

That doesn't change the fact the ETC currently holds some market value. If people do not believe in the ETC chain then it would be a good idea to dump those ETC coins in order to accumulate more ETH.

There is a dev team forming around ETC, including former ETH developers. ETC has an immutable blockchain and still the same characteristics and functions as ETH, this gives ETC long term value.

I have a question. I am a miner but I don't know a lot about it. Now my question is, do I only send the amount of ethereum that I had at the time of the fork? Or can I submit it all to be split, even the extra ethereum that has been mined since the fork? I have been mining on the forked chain.

The newly mined coins will not be valid on the ETC chain. You can check your ETC balance here: http://explorer.ethereumclassic.com/

So I should only split the amount that is shown on the ETC chain? And leave the rest behind?

Yes I would recommend it.

Seems shady to me, too risky... I think if I try this I'll lose the ETH related to that account and stay with the ETC (or lose both).
Nice information though.

Im not happy with ETC. would like to hear others opinions.
https://steemit.com/ethereum/@thedoctor/what-the-fork-wtf-why-etc-is-killing-all-altcoins

well look. everyone has the freedom to create whatever they want to create! The classic guys seized the opportunity to create Ethereum classic. However, it too has a very dark stain since the thief stole some of their coins. I just hope that the white hat attack can resume and not let the thief take out the ETC.

I'm showing zero balances in both wallets. Shit.

So I followed the steps and have everything ready to split, but I"m a bit worried. Before the Hard Fork I had x ETH and after the fork and getting my refund I now have xx ETH (old balance plus refund). If I send xx ETH in the split contract will I still have xx ETH or will I loose some ETH.

So you'll want to use the split contract to send the amount you have in both ETH and ETC. You can check your ETC balance here: http://gastracker.io/addr/0x..... If you try sending more ETC than you have, the ETC transaction will fail.

So let's say you have 100 ETH and 10 ETC. You should call the Split function using 10 ETH (minus gas costs). Now that address will have 90 ETH and 0 ETC. You can then send the remaining 90 ETH normally, without needing to worry about replays.

Hey thanks, that makes sense. I ended up using a different method though.

How do I split when I have both pure and pre-fork ETH associated with my address? So on the ETC chain explorer it's showing I have X amount and the forked chain shows the address with more (because it does). Do I need to execute the split contract on the full post-fork ETH balance?

Let's say you have 100 ETH and 10 ETC. You should call the Split function using 10 ETH (minus gas costs). Now that address will have 90 ETH and 0 ETC. You can then send the remaining 90 ETH normally, without needing to worry about replays.

It doesn't seem to be working!!! I had few dozens ETH in my Mist Wallet before hard fork. I upgraded to 8.1 few hours after hard fork. I did two tests with spliting 1 ETH each time. 1 ETHs reached my other ETH address but nothing appeared in ETC address.

ETC won't show up in Mist. Check balance here: http://gastracker.io/addr/0x...

It's ok. It finally showed up in Poloniex after 14 hrs :-)

Hello, dear. If i mistake and confused "Target fork" and "Target no fork". How can i release my funds?

Ill help but thats not really a question, What problem are you having?

Wee bit of help please anyone??

I followed the guide to the letter, I used mist wallet 0.8.1 synced to forked chain and setup the contract and executed it, I tested using 1 ETH and split ETH to a second wallet on same laptop/chain and sent the ETC to poloniex, The ETH showed in my new wallet within 1 minute so i assumed all was well and would work poloniex end too as i tripple checked i defo deposited to polo ETC deposit address, This was done 16 hours ago from now and still no ETC in poloniex but i still have my ETH? I had planned to just split them then sell all ETC and buy more ETH,

It seems like Poloniex may take up to 12 hours to process it. I waited 12hrs to get my ETC deposited. I hope this helps

Well over 12 hours now man, Contract execution was 17 hours ago now..lol
How do i track them down to see who has my ETC? :-o
Wanna sell before it goes back to 0...

There is a warning message on the Poloniex deposits screen for ETC that says "The minimum amount for deposit is 1 ETC. Smaller deposits will be credited once they total this amount." If you used gas depositing your 1 ETC that might be the reason it's not showing in your account.

Check your ETC balance. It's possible you didn't have any: http://gastracker.io/addr/0x..... Then check the ETC address you sent to on gastracker to see if transaction was sent before. If it was and you haven't been credited, contact Poloniex with links to the transactions.

thanks paul.

gastracker.io doesn't seem to have search functionality tho, so no way to use it to check ETC balances. am i missing something?

Correct man, search function is missing, Assume this is due to the crappy code being wrote by the "developers" behind ETC

Just put /addr/ at the end of the URL then your wallet address

putting a / + address didn't work for me unfortunately

Ahhh yeah noticed that. Edited comment to reflect.

I'm glad somebody explained this on here. Thanks!

Anybody have an explanation as to why people still support ETC even when it was greatly outnumbered by supporters of ETH.

Some people believe ETH should not have forked to recover ETH lost to the DOW hacker. They may have other reasons but this is the most common I've seen.

Naaaa, both eth and etc are owned by Vitalik Buterin, but always is good to represents a liberty theather.

Does this work for ether stored in the DAO or do we lose out for not cashing out our tokens?

Anything that required the hard fork to retrieve out of the DAO will not be valid on the ETC chain.

Well, saying apart from anything.
I would recommend everybody stay out of ETC, in my opinion it is not trust-worthy coin, to invest safely.

very insightful thank you!!!!

very handy guide. thanks for putting this together. i have profited from the ETH split, as i had a huge amount of ETC today, even i already had sold my ETH .

When will it be possible to do this from Kraken ?

Ok i just got my answer from Kraken :)
"Kraken is opening new classic ether (ETC) markets and crediting ETC to any accounts that had ETH at the fork"

This is a perfect example of how ethereum has failed. They pledged themselves to live by code and autonomy. Then once there was a screw up they bailout like a central bank. No wonder classic is running. Cryptocurrency is about that power not being reversible, even if the majority wishes it. They have gone against the whole purpose of the project. ETC is the real ether

excelent post

There are 2 pages
Pages