Is it better to buy lotto tickets or solo mine Bitcoin?
We periodically pose a question to our devs on slack, then post the lightly edited conversation here.
This Week’s Hacky Slack is about Bitcoin. We’re nerds, but we’re not bitcoin nerds. Even so, we were curious. Assuming you are a solo miner, is it better to mine bitcoin or buy a lotto ticket?
Skot
Bitcoin mining is pretty neat technically. Basically you are guess-and-checking to find a random number (nonce) that when added to the current block and hashed makes a number that matches a specific pattern.
The “specificness” of that pattern is called the difficulty. the network moves the difficulty up and down to make sure that blocks are found every 10 minutes or so.
the current difficulty is 23,581,981,443,664.
If you can find a nonce that makes a hash with a difficulty higher than that number, you have solved that block and you can collect your 6.25+ bitcoins ($396,525.00 USD)
I have been running a little USB dongle miner on my desk that can do about 20 billion hashes per second. So it’s picking nonces, adding them to the current block and hashing them to check if the difficulty is high enough, 20 billion times a second.
zeke
What are the odds of success? 1/current_difficulty?
skot
Yup! So far I am proud to report that I have achieved a nonce with a difficulty of 33,200, so… I’m almost rich. A lot of miners work as a part of a pool, where they split up the rewards with everyone, based on how many hashes each person has done. even though only one of the hashes made any money
Solo mining means you get the whole reward yourself, if you get really lucky.
zeke
You get 20 billion * 600 chances per block (10 minutes of 60 seconds * 20 billion tries per second) so 20,000,000,000 * 60 * 10
= 12,000,000,000,000. If you run two of these, why don’t you hit almost every time?
23,581,981,443,663 / 12,000,000,000,000 is basically 2
sam
I got a similar result from a different angle… if something has a chance of 1/x and you try it x times, it approaches 63% odds of happening at least once in those x times
that’s only 1100 seconds of trying
zeke
skot would be making almost 400k per 10 minutes if he just bought a 2nd usb dongle. must be nice
sam
that 20billion/second stat sounds suspicious…
skot
hmm. my average is reported as 22.27Gh/s
but you’re right, why am i not rich yet?
zeke
that’s because you only have one dongle
sam
how long have you been running it, have you checked your accounts???
skot
at least an hour
sam
I don’t think there are many things that can do anything 20B times per second
just transmitting data that fast requires 160gigabit
zeke
20ghz is a big number, but not impossible
sam
I think they mean gigahash
zeke
and each hash is multiple steps of mathing
skot
it doesn’t have to transmit anything.. only when it hits the jackpot
danny
the dongle must be really parallelized
seems like it’s clock is probably something like 1GHz and it’s running ~100 cores or something?
well, it’s probably an ASIC, right?
skot
it’s clock is 100MHz, so it needs to be able to do at least 200 parallel hashes
sam
The Bitmain AntMiner, widely touted as the most efficient and most powerful Bitcoin miner on the market, offers miners a highly impressive hash rate of 14 TH/s
zeke
we must be drastically underestimating how the difficulty works.
skot
that has ~187 copies of the chip on my dongle
sam
these numbers sound outrageous
skot
and a lot of fans so it can run it at crazy higher frequency
danny
maybe difficulty is log scale or something? 2^23,581,981,443,663
?
sam
nice nerd-snipe skot, now I’m looking at this table…
skot
yeah, 1/current_difficulty must not be right.
I can’t quite understand what’s going on here on the Difficulty page on Wikipedia.
sam
This calculator says you’ll make $0.31/month
skot I’m solo mining, just to screw around with it… so it’s pure lottery
danny
I understand that the current block has a SHA256 hash:
1 0 1 1 0 1 0 1
0 1 1 0 0 0 1 0
0 0 0 1 1 1 0 0
1 1 0 1 0 0 1 0
Then I want to come up with some other random number whose SHA256 hash differences with the current block’s has such that the first n
bits of the sum are 0. The higher n
is, the higher the difficulty. A winning sum might look like
block hash
---------------
1 0 1 1 0 1 0 1
0 1 1 0 0 0 1 0
0 0 0 1 1 1 0 0
1 1 0 1 0 0 1 0 my hash of my magic number
---------------
1 0 1 1 0 1 0 1
0 1 1 0 0 0 1 0
0 1 0 1 1 1 0 0
1 1 0 1 1 1 1 0 block hash - my hash of my magic number
---------------
0 0 0 0 0 0 0 0 <--------- win!
0 0 0 0 0 0 0 0 <--------- win!
0 0 0 1 1 1 0 0
1 1 0 1 0 0 1 0
zeke
I’m not sure that I really understand how SHA256 or any one way hashing works
why can’t I just do the hash making math in reverse?
skot
It’s a one way function
if you could figure out how to reverse it, you could be very wealthy!
danny
Yes, if you could reverse it, you would break all encryption and all bitcoin and everything
and basically send the global economy into a tailspin
skot
That is a pretty fun “what if” scenario; what would you do if you one day figured it out?
danny
This guy is an incredible explainer and does a great walk-through of blockchain and bitcoin: But how does bitcoin actually work?
zeke
but what makes it one way? if I want to use the new ZSA1 algorithm (x * 69 = hash
) to hash the number 420, I get 28,980. Everyone knows that can just divide the hash by 69 to get the original number since the hashing function is well known
danny
I was curious too and found this one helpful: Cryptography: Hash Functions
A really simple example of an almost one-way function is the product of two large primes:15,485,863 * 67,867,967 = 1,050,994,039,050,521
The product is the hash. To reverse the function, you need to determine which two prime numbers multiply to equal the output.
It’s just an example, but you can immediately see that it’s very easy to go “to the right” and much harder to go “to the left”
To go to the left, you have to divide 1,050,994,039,050,521
by every prime starting at 1, then if it’s divisible, you have to check to see if the quotient is also prime.
so it might take «1 second to go to the right and thousands of seconds to go to the left. SHA256 is like that, except it takes nanoseconds to go to the right and trillions of years to go to the left.
BUT, SHA256 was developed by the NSA, so maybe they know how to reverse it and are snooping on all our shit
so it’s not that has functions are irreversible, it’s just that it’s a giant pain in the ass to reverse them, and usually the best option is to just guess-and-check (which is what bitcoin miners do)
Dean
To return the original question, apparently authoritative CoinWarz says
Bitcoin difficulty is a measure of how many hashes (statistically) must be generated to find a valid solution to solve the next Bitcoin block and earn the mining reward.
The difficulty is in the trillions of hashes required, but the network is generating hundreds of quintillions of hashes per second (hashrate). Quintillions are obviously a lot bigger than trillions. If the network is generating quintillions of hashes per second, it’s not clear why it takes 10 minutes to achieve the trillions of difficulty. Side note, Skot’s single USB stick is contributing 0.0000001% of the total hashing effort.
CoinWarz doesn’t have access to some reported sum of hashes though, they’re actually backing into that quintillion number.
The Bitcoin hashrate is calculated using the current Bitcoin difficulty, the defined Bitcoin block time, and the average block time of the last (X) number of blocks.
danny
AH! we must be totally missing something having to do with this difficulty concept
dean
Here is a Stack Exchange post with a solid answer by Pieter Wuille
difficulty = hashrate / (2^256 / max_target / intended_time_per_block)
= hashrate / (2^256 / (2^208*65535) / 600)
= hashrate / (2^48 / 65535 / 600)
= hashrate / 7158388.05
That… doesn’t help does it?
danny
I am not sure what max_target
is…
dean
max_target is 2^208*65535 (an application-defined constant, which sets the target hash corresponding to the lowest possible difficulty, 1), and intended_time_per_block is 600 (10 minutes, also a constant).
Does that make sense to you?
danny
Maybe…
dean
Hmmm
(2^256*difficulty/max_target) hashes are needed on average to find a block
danny
now that’s a useful constant
dean
So plugging in the numbers from CoinWarz to the formula from that Stack Exchange gets us these results
2^256*23.58 trillion/(2^208*65535) = 8e+23
135 quintillion * 60 seconds * 10 minutes = 1e+22 (or 0.1e+23)
(I feel like this paper would be marked down by my high school teachers for not using authoritative sources, but the numbers seem to get close)
danny
where did 135 quintillion
come from?
dean
That’s the current hashrate
dean
Hmm, the difference between 8e+23 and 0.1e+23 is almost certainly because difficulty doesn’t update that frequently.
Once every 10 days or so. Those numbers almost definitionally won’t match exactly. I’m reasonably satisfied we have the formula right.
So the odds that Skot gets rich in any given second are
[number of hashes per second]/([difficulty]*[4,295,032,833])
or, in this case,
20 billion/(23.6 trillion * 4.3 billion)= 1.97e-13
The odds of winning the lottery are roughly 3.33e-9. The odds of winning the lottery are 3.33e-9 / 1.97e-13 = 16,903
times higher than getting a bitcoin in any given second, but the bitcoin miner just keeps running.
In terms of winning the prize, running that USB stick is essentially equivalent to buying a lotto ticket every 4.7 hours.
skot
ooo I just had my best hash yet; 272,226
difficulty.
23,581,981,443,663
here we come!