2018 is the year of the Hard Fork and wouldn’t you know it, 3 different hard forks started trading recently on some exchanges. In this article, I’m going to lay out what these forks are, where the software is published and how to claim them if you dare.
A few caveats before we get started. I’m only going to examine Hard Forks that are actually open source, have a running blockchain and are traded on at least a few exchanges. If there are more forks that you think I should consider that fill these criteria, please tweet at me and let me know.
First up is Bitcoin Diamond (BCD) which probably gained the most support across exchanges before they launched. They have some code that’s clearly based on Bitcoin Core. There apparently isn’t much wallet support, though there’s a wallet called BitPie that supports it. I can’t vouch for that wallet, but they do support some different currencies and it’s more or less the only game in town if you don’t want to run a full BCD node.
The main difference with Bitcoin Diamond is that they multiplied the supply by 10. If you had 1 BTC before block 495866, you now have 10 BCD. This is done by moving the decimal point rather than making the coin more divisible. That is, with Bitcoin, 100 million satoshi = 1 BTC. With Bitcoin Diamond, 10 million satoshi = 1 BCD. It’s really just pure marketing.
Nobody really knows who the developers are but the code is relatively similar to Bitcoin Core, so there’s not too much to worry about. I would still run the code in a separate machine, physical or virtual.
For the technical geeks out there, the main difference in the transaction is that version is now 12 instead of 1. Version 12 requires that you put a block hash as the field right after version, which takes care of replay protection. The block hash can be any block hash that has already occurred as far as I can tell. Unlike BCH and BTG which use the BIP143 standard for signing all transactions, BCD uses the legacy signing for non-segwit transactions (subject to quadratic hashing and difficulty assessing value of transaction for offline signing) and BIP143 for segwit transactions.
This is an odd choice for replay protection as there is a perfectly good forking id standard pioneered by BCH and BTG, but alas, BCD decided to do its own thing. The hash type is the same as Bitcoin (usually SIGHASH_ALL) and unlike BTG or BCH, the SIGHASH_FORKID stuff is not used at all.
Bitcoin Diamond is trading at around $20/BCD as of this writing, which ends up being about $200/BTC or 1.3%.
Super Bitcoin (SBTC) forked on block 498888 and is a 1:1 fork, no special decimal point manipulation needed. The coin purportedly will have Lightning, zero-knowledge proofs and smart contracts, none of which I saw in their code repository.
Ambitions aside, the developers of this fork are at least known and on their website. Again, it’s mostly Bitcoin Core code with a few modifications. There are several exchanges that already support this or are planning to support this, so it’s at least got some potential for liquidity.
Main technical difference is that transactions are version 2, though version 1 is still accepted. The signing does use SIGHASH_FORKID, but not an actual fork number. Instead, the entire Signature Hash has the string “sbtc” appended at the end. This sounds easy, but after debugging this for about 12 hours, I discovered that there’s actually the length of the string prepended to this string, so it’s actually something like 0473627463 in hex, not 73627463 as you would expect. By the way, I’m seeing something very similar in the United Bitcoin repo, so for all you wallet developers, keep in mind that you may need to put the length of the string that gets appended at the end.
Again, this is an odd way of doing replay protection as a perfectly good way that BTG and BCH pioneered is available, but such is the way of forks. Much like BCD, SBTC uses legacy signing for non-segwit transactions (subject to quadratic hashing and difficulty assessing value of transaction for offline signing) and BIP143 signing for segwit transactions. Again a puzzling choice since using a single signing algorithm would make wallet code vastly simpler. Not everyone will make choices that are going to be convenient for wallet developers.
The only SPV wallet I could find was BitPie and it’s a toss up as to whether this wallet is safer or the SuperBitcoin core wallet is safer. SBTC is trading at around $155 as of this writing which gives you about 1%.
Lastly is something that’s between a hard fork and an airdrop. BitCore (BTX) basically took the UTXO set from Bitcoin, compressed the outputs for each address and distributed on their chain. In layman’s terms, they cleaned up the ledger (blockchain) so that it’s a lot smaller.
This is the most clever of the hard forks in that it doesn’t require the Bitcoin blockchain like other hard forks do (120GB+!) and at least innovates by cleaning things up a little. Unfortunately, distribution on this coin is a bit stingier as you only get 0.5 BTX per 1 Bitcoin you had as of block 492820. They have a continuing airdrop going on, so there’s also that aspect which helps the coin.
BTX is supported by Coinomi, which has a very convenient sweep feature which can help you get at cold wallets and a seed entry feature which can help you get at coins that use the same BIP39 standard. Unfortunately, this is also the coin that’s worth the least as it trades at around $20 as of this writing which gives you only about $10/BTC or 0.1%.
How to Get These Coins
There are a few ways to get these coins, but regardless of which method you choose, here are the common steps.
- Whatever Bitcoins you had at the forking block, move them. If you’re using a Trezor, for example, you’re going to need the seed, so move them to another Trezor with a different seed. And yes, it’s every coin you own. This is for your protection. No software can take your bitcoins if you move them away from these private keys first.
- Keep the seed or private key for a while. You have no idea what other hard forks are coming and some may have some substantial payoffs.
- Take your time and double check everything. You don’t want to mess up on this stuff.
- Be patient. You’re not going to be able to insta-dump them just yet (please, somebody make this business already!)
At least for SBTC and BTX, you have the option of entering the private keys into an app called Bither for SBTC and Coinomi for BTX. You can scan the private key (WHICH SHOULD NOT HAVE BTC IN IT) and store them in the BitPie or Coinomi wallets for safekeeping.
This is probably the easiest, but also a bit risky as you may not trust these wallets. Unfortunately, there isn’t an option to do this with BCD on any wallets yet and be careful about any that claim to be able to do this as they’ve been known to steal funds from you. (this is why step 1 above is so important!) As long as you moved your BTC out of these addresses first, the only real risk is that another hard fork coin you’re entitled to may be taken away from you.
The more advanced option is to create a separate physical or virtual machine and run the actual core software. You can download the source code from the coin’s repository and compile it yourself. Fortunately, since most of them are forks of Bitcoin Core, the Bitcoin Core compilation instructions for mac, windows and linux work just fine.
Once you’ve compiled the source code and have their respective binaries, you can launch the binaries until the blockchains are synced (this will take roughly a day on a decent connection). You will want to disconnect the machine from the internet at this point.
You’ll want another physical/virtual machine to run the same code on that’s connected to the internet. This is so that you can broadcast transactions you make on the first machine.
Go back to the first machine, import the private keys of your coins into the core wallet that all these coins come with. Then send the coins to an address you want and use the “getrawtransaction” command to get the raw hex. Copy that to a usb stick or sd card and transfer that to the second, internet-connected machine and broadcast it there.
This should more or less do what you want, though there’s some small risk that you might get some malware, but it’s on a machine you’re going to wipe anyway, so who cares?
The paranoid option is to make your own transactions and broadcast them connecting to a node on the network manually. The hard part is not the connecting to the network, but actually making the transaction. You’ll need your own library to sign the transaction and getting the Signature Hash is often not trivial. That said, this is the absolute safest option as you do not need to trust any software and indeed I spent a good amount of time doing this very thing.
Hard forks are a reality and doing this sort of thing is going to be all too common going forward. Thankfully, there’s a reward to doing this and truth be told, it’s not a bad thing to get familiar with handling private keys in a reasonably secure fashion. The process is stressful, but you also built up an intuition about what you can and can’t do.
Best of luck in getting your “free” coins!
Are you a developer that wants to get into Bitcoin and blockchain? Sign up for Programming Blockchain Seminar in Charlotte, London, Amsterdam, Tel Aviv, Sao Paulo, Athens or Seoul!
Want to get curated Technical Bitcoin News? Sign up for the Bitcoin Tech Talk newsletter!