Monday, 2 January 2017

For the newbies: You may have heard that Bitcoin works by "solving math problems", but what are the math problems?


Disclaimer: This has probably been covered before, and in more approachable language, so if this explanation is pointless duplication, let me know and I'll delete it.So the math problems in Bitcoin aren't your traditional math: your computer isn't solving algebra problems or partial differentials. They involve cryptographic hashes: you might've come across these when you download a file, where the website says "here's the file, and here's a hash you can use to verify that the file downloaded properly". So your process of verification would be:Download -> Hash(Downloaded File) -> Is Hash The Same? Say you downloaded a copy of Audacity for OSX, and the site says "the MD5 hash for audacity-macosx-ub-2.1.2.dmg is 535e103d9bc4a4625d71260c3a427d09 if you want to check it downloaded properly". So you download the file, head to your command prompt, and:$ md5 audacity-macosx-ub-2.1.2.dmg MD5 (audacity-macosx-ub-2.1.2.dmg) = 535e103d9bc4a4625d71260c3a427d09 Hey, it's the same.Now, hashes work by taking all the numbers in the file and Doing Something to them; the simplest would, of course, be the checksum: add all the numbers together. One big problem with checksumming though: if you add 1 to a number somewhere in the file, and subtract 1 elsewhere, you get a corrupted file with the same checksum. Not ideal.So algorithms like MD5, SHA-1 and the like arose, which do more complicated things. The number that falls out of these is quite large: MD5, for example, outputs a 128-bit number (the biggest value is something like 80 quintillion quintillion) but it's not the absolute value of the number that's important, just the fact that it's the same as what the website says it should be.Aside: "But if the hash is just a huge number, why does it have those weird letters in?"It's just written in hexadecimal (base 16) instead of base 10. In your average decimal base-10 number, the digits are 0-9 and the number values go units, tens, hundreds, thousands, etc.In base 16, the digits are 0-9 then a-f (ten to fifteen), and the number values go units, sixteens, two-hundred-and-fifty-sixes, four-thousand-and-ninety-sixes, etc.Now. Bitcoin uses this same technology (it uses the SHA-256 algorithm in particular) to hash the contents of each block of transactions that comes through. It looks a little like this:Hash of the last block -----\ | Hash of the transactions --+--> SHA256 -> This block's hash in this block | (twice) | Current time ----------/ And thus the block chain gets built: "this block's hash" falls out of the above algorithm, and gets fed into the algorithm for the next block.Except SHA-256 doesn't take long to compute; a cellphone can do literally millions of these hashes per second. Here's where the genius of Bitcoin comes in: there's an artificial limit placed by the algorithm on how fast blocks can be generated, and it doesn't matter how fast your computer (or the whole network of computers) is at generating these hashes. It works by adding one thing to the above diagram:Hash of the last block -----\ | Hash of the transactions --+--> SHA256 -> This block's hash in this block | (twice) | Current time ----------+ | A number to twiddle -------/ (The technical literature actually calls it a "nonce".)I said above that the numeric value of the hash isn't important when you download a file, just the fact that it matches what the website says it should be. In Bitcoin, the numeric value of the hash is important: it needs to be less than a certain value (the "target") for the block you make to be accepted by the network. For example, (as of the time of writing) the last block had a hash of 000000000000000001ef62f299ea93356f4d52c75ff3cc442b4a073e90f947e0; look at all those zeros at the front!SHA-256 is very good at making an even distribution of its numeric value: futz with the content of what you're hashing even a tiny bit, and the number that falls out is vastly different. So, you need to do a lot of twiddling of that nonce, to find a block where the hash comes out with all those zeros at the front.In fact, you need to do so much twiddling that, on average, the entire network of computers doing this will only find one solution to the problem every ten minutes. That solution gets broadcast to the network, the other computers will plug it in as "the hash of the last block", and keep going.One more question you might have: what happens when computers suddenly get a lot faster at doing these calculations, and they can rattle their way to a solution in a minute, or 30 seconds?Bitcoin has a solution: change the target, to make it even lower. This is referred to as a "change in difficulty", and happens around every two weeks if the blocks come out every ten minutes (every 2,016 blocks). If the blocks come out faster, the difficulty changes sooner, and changes by more, to get things back on the ten-minutes-per-block track.Conversely, if computers suddenly get very slow at doing this work and blocks only come out once an hour, the difficulty will change to make life easier. (Again, it'll only change every 2,016 blocks, so it might take a while to build the chain up to that point; until then, we'd have to suffer with slow blocks.)So, I hope this was useful, and that it was accurate. It helped to clarify things in my mind, at least; let me know if it helped (and if I missed anything). via /r/Bitcoin http://bit.ly/2hJARex

No comments :

Post a Comment