Each Bitcoin halvening event prompts a few commemorative messages, much like a New Year's even event in the real world.
1st (2012):
- github.com/cirosantilli/bitcoin-inscription-indexer/blob/master/data/in/0209.txt: nothing
- github.com/cirosantilli/bitcoin-inscription-indexer/blob/master/data/in/0210.txt: nothing
- github.com/cirosantilli/bitcoin-inscription-indexer/blob/master/data/out/0209.txt#L1111: nothing, not even any ASCII
- github.com/cirosantilli/bitcoin-inscription-indexer/blob/master/data/in/0209.txt#L132a; void
2nd (2016):
- github.com/cirosantilli/bitcoin-inscription-indexer/blob/master/data/in/0419.txt#L407: nothing
- github.com/cirosantilli/bitcoin-inscription-indexer/blob/master/data/in/0420.txt#L1:
- block 420000: "Chandler Guo loves YangYang Jin". Presumably this dude: twitter.com/ChandlerGuo. Noted e.g. at: www.reddit.com/r/Bitcoin/comments/4s14po/the_first_14_block_is_a_profession_of_love/
- block 420001: "/BTCC/ Welcome to 12.5 BTC blocks! BTCC & Bitcoin Forever!".
- github.com/cirosantilli/bitcoin-inscription-indexer/blob/master/data/out/0419.txt#L10011: a few
- github.com/cirosantilli/bitcoin-inscription-indexer/blob/master/data/out/0420.txt#L1: a few
3rd (2020):
- github.com/cirosantilli/bitcoin-inscription-indexer/blob/master/data/in/0629.txt#L407
- block 629999: contains the miner message for: This quotes the title of: www.nytimes.com/2020/04/09/business/economy/fed-economic-rescue-coronavirus.html is of course a nod to the Genesis block message. Noted by Forbes at: www.forbes.com/sites/colinharper/2020/05/11/bitcoins-halving-block-includes-a-message-to-remind-us-why-it-was-created/?sh=130f001f656a It was mined by the F2Pool Bitcoin mining pool. A few halving output messages can be seen in nearby regular transactions:
NYTimes 09/Apr/2020 With $2.3T Injection, Fed's Plan Far Exceeds 2008 Rescue
- block 629999: contains the miner message for:
- github.com/cirosantilli/bitcoin-inscription-indexer/blob/master/data/in/0630.txt#L1: nothing
- github.com/cirosantilli/bitcoin-inscription-indexer/blob/master/data/out/0629.txt#L1111: a few
- github.com/cirosantilli/bitcoin-inscription-indexer/blob/master/data/out/0630.txt#L1: a dozen such as:
- tx 0df655b7e50dc9a53c343308d1ca148d0bead993821dfe56a035aecd0c88b2ad "Happy 2020 Halving! Thank you Satoshi."
- tx 6c6c22b8fe87f1420df6d991f7b571fdaa29f7a95adbfbcfcb0644f1c8f7d82b "We love you forever @millsfogle"
- tx 70a8639bc9b743c0610d1231103a2f8e99f4a25670946b91f16c55a5373b37d1 "Happy 3rd halving! Thanks, Satoshi and COVID-19 GO AWAY! Bulgaria #1!!!"
Here is a very direct description of the system:
- each transaction (transaction is often abbreviated "tx") has a list of inputs, and a list of outputs
- each input is the output of a previous transaction. You verify your identity as the indented receiver by producing a digital signature for the public key specified on the output
- each output specifies the public key of the receiver and the value being sent
- the sum of output values cannot obvious exceed the sum of input values. If it is any less, the leftover is sent to the miner of the transaction as a transaction fee, which is an incentive for mining.
- once an output is used from an input, it becomes marked as spent, and cannot be reused again. Every input uses the selected output fully. Therefore, if you want to use an input of 1 BTC to pay 0.1 BTC, what you do is to send 0.1 BTC to the receiver, and 0.9 BTC back to yourself as change. This is why the vast majority of transactions has two outputs: one "real", and the other change back to self.Code 1. "Sample Bitcoin transaction graph" illustrates these concepts:
tx0
: magic transaction without any inputs, i.e. either Genesis block or a coinbase mining reward. Since it is a magic transaction, it produces 3 Bitcoins from scratch: 1 inout0
and 2 inout1
. The initial value was actually 50 BTC and reduced with time: Section "Bitcoin halvening"tx1
: regular transaction that takes:Since this is a regular transaction, no new coins are produced.- a single input from
tx0 out0
, with value 1 - produces two outputs:
out0
for value 0.5out1
for value 0.3
- this means that there was 0.2 left over from the input. This value will be given to the miner that mines this transaction.
- a single input from
tx2
: regular transaction with a single input and a single output. It uses up the entire input, leading to 0 miner fees, so this greedy one might (will?) never get mined.tx3
: regular transaction with two inputs and one output. The total input is 2.3, and the output is 1.8, so the miner fee will be 0.5
tx1 tx3
tx0 +---------------+ +---------------+
+----------+ | in0 | | in0 |
| out0 |<------out: tx0 out0 | +------out: tx1 out1 |
| value: 1 | +---------------+ | +---------------+
+----------+ | out0 | | | in1 |
| out1 |<-+ | value: 0.5 | | +----out: tx2 out0 |
| value: 2 | | +---------------+ | | +---------------+
+----------+ | | out1 |<-+ | | out1 |
| | value: 0.3 | | | value: 1.8 |
| +---------------+ | +---------------+
| |
| |
| |
| tx2 |
| +---------------+ |
| | in0 | |
+----out: tx0 out1 | |
+---------------+ |
| out0 |<---+
| value: 2 |
+---------------+
Since every input must come from a previous output, there must be some magic way of generating new coins from scratch to bootstrap the system. This mechanism is that when the miner mines successfully, they get a mining fee, which is a magic transaction without any valid inputs and a pre-agreed value, and an incentive to use their power/compute resources to mine. This magic transaction is called a "coinbase transaction".
The key innovation of Bitcoin is how to prevent double spending, i.e. use a single output as the input of two different transactions, via mining.
For example, what prevents me from very quickly using a single output to pay two different people in quick succession?
The solution are the blocks. Blocks discretize transactions into chunks in a way that prevents double spending.
A block contains:
- a list of transactions that are valid amongst themselves. Notably, there can't be double spending within a block.People making transactions send them to the network, and miners select which ones they want to add to their block. Miners prefer to pick transactions that are:
- small, as less bytes means less hashing costs. Small generally means "doesn't have a gazillion inputs/outputs".
- have higher transaction fees, for obvious reasons
- the ID of its parent block. Blocks therefore form a linear linked list of blocks, except for temporary ties that are soon resolved. The longest known list block is considered to be the valid one.
- a nonce, which is an integer chosen "arbitrarily by the miner"
For a block to be valid, besides not containing easy to check stuff like double spending, the miner must also select a nonce such that the hash of the block starts with N zeroes.
For example, considering the transactions from Code 1. "Sample Bitcoin transaction graph", the block structure shown at Code 2. "Sample Bitcoin blockchain" would be valid. In it
block0
contains two transactions: tx0
and tx1
, and block1
also contains two transactions: tx2
and tx3
. block0 block1 block2
+------------+ +--------------+ +--------------+
| prev: |<----prev: block0 |<----prev: block1 |
+------------+ +--------------+ +--------------+
| txs: | | txs: | | txs: |
| - tx0 | | - tx2 | | - tx4 |
| - tx1 | | - tx3 | | - tx5 |
+------------+ +--------------+ +--------------+
| nonce: 944 | | nonce: 832 | | nonce: 734 |
+------------+ +--------------+ +--------------+
nonce
s are on this example arbitrary chosen numbers that would lead to a desired hash for the block.block0
is the Genesis block, which is magic and does not have a previous block, because we have to start from somewhere. The network is hardcoded to accept that as a valid starting point.Now suppose that the person who created Clearly, this transaction would try to spend Notably, it is not possible that
tx2
had tried to double spend and also created another transaction tx2'
at the same time that looks like this: tx2'
+---------------+
| in0 |
| out: tx0 out1 |
+---------------+
| out0 |
| value: 2 |
+---------------+
tx0 out1
one more time in addition to tx2
, and should not be allowed! If this were attempted, only the following outcomes are possible:block1
containstx2
. Then whenblock2
gets made, it cannot containtx2'
, becausetx0 out1
was already spent bytx2
block1
containstx2'
.tx2
cannot be spent anymore
block1
contains both tx2
and tx2'
, as that would make the block invalid, and the network would not accept that block even if a miner found a nonce
.Since hashes are basically random, miners just have to try a bunch of nonces randomly until they find one that works.
The more zeroes, the harder it is to find the hash. For example, on the extreme case where N is all the bits of the hash output, we are trying to find a hash of exactly 0, which is statistically impossible. But if e.g. N=1, you will in average have to try only two nonces, N=2 four nonces, and so on.
The value N is updated every 2 weeks, and aims to make blocks to take 10 minutes to mine on average. N has to be increased with time, as more advanced hashing hardware has become available.
Once a miner finds a nonce that works, they send their block to the network. Other miners then verify the block, and once they do, they are highly incentivized to stop their hashing attempts, and make the new valid block be the new parent, and start over. This is because the length of the chain has already increased: they would need to mine two blocks instead of one if they didn't update to the newest block!
Therefore if you try to double spend, some random miner is going to select only one of your transactions and add it to the block.
They can't pick both, otherwise their block would be invalid, and other miners wouldn't accept is as the new longest one.
Then sooner or later, the transaction will be mined and added to the longest chain. At this point, the network will move to that newer header, and your second transaction will not be valid for any miner at all anymore, since it uses a spent output from the first one that went in. All miners will therefore drop that transaction, and it will never go in.
The goal of having this mandatory 10 minutes block interval is to make it very unlikely that two miners will mine at the exact same time, and therefore possibly each one mine one of the two double spending transactions. When ties to happen, miners randomly choose one of the valid blocks and work on top of it. The first one that does, now has a block of length L + 2 rather than L + 1, and therefore when that is propagated, everyone drops what they are doing and move to that new longest one.
TODO who bought the Bitcoins? Is anyone else besides Jeremy Sturdivant
The original forum thread bitcointalk.org/index.php?topic=137.msg1195 suggests multiple purchases were made, until he had to withdrawl the offer. Perhaps an easier question is how many pizzas he got in the first place.
www.reddit.com/r/Bitcoin/comments/13on6px/comment/jl55025/?utm_source=reddit&utm_medium=web2x&context=3 mentions without source:One source is: bitcoinmagazine.com/culture/the-man-behind-bitcoin-pizza-day-is-more-than-a-meme-hes-a-mining-pioneer
I know. Laszlo Hanyecz estimates that he spent 100,000 BTC on pizza in 2010. Laszlo is the man that invented GPU mining and he mined well over 100,000 BTC.
Related thread from May 2023: bitcointalk.org/index.php?topic=5453728.msg62286606#msg62286606 "Did Laszlo Hanyecz exchange 40000 BTC for 8 pizzas, not 10000 BTC for 2 pizzas?" but their Googling is so bad no one had found the 100,000 quote before Ciro.
As per bitcoin.stackexchange.com/questions/113831/searching-the-blockchain-based-on-transaction-amount-and-or-date at blockchair.com/bitcoin/outputs?s=time(asc)&q=value(1000000000000),time(2010-05-18..2010-08-05) we can list all the transactions made between the offer and withdrawal dates for value exactly 10k. There are only about 20 of them, and including someone the 22nd of May, so it is extremely likely that this will contain the hits. No repeated recipients however, so it is hard to progress with more advanced analytics tools
Some of the transactions are:8 d1a429c05868f9be6cf312498b77f4e81c2d4db3268b007b6b80716fb56a35ad (29 May) is a common looking transaction with a single input from 1Bc7T7ygkKKvcburmEg14hJKBrLD7BXCkX and two outputs, one likely being the change to 1GH4dRUAagj67XVjr4TV6J9RFNmGYsLe7c and the other the actual value to 138eoqfNcEdeU9EG9CKfAxnYYz62uHRNrA.
- 49d2adb6e476fa46d8357babf78b1b501fd39e177ac7833124b3f67b17c40c2a (22 May 2010 06:17:59 GMT+1). This one has some Google mentions:This is a highly unusual transaction from a single address 17WFx2GQZUmh6Up2NDNCEDk3deYomdNCfk to a single address 1CZDM6oTttND6WPdt3D6bydo7DYKzd9Qik for the exact value with no change.By digging a bit, we see that the input comes from exactly 20 outputs, e.g. 1E43t1VCc3Q3STKauEiUoVqLbT81XT67xj, each of which is a block reward of 50 BTC, the reward value at those early times, thus satisfactorily explaining how the exact 10k value was obtained without change. Because we know that Laszlo was a big GPU miner, it is extremelly likely that this transaction was made by him.
- a1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d (22 May 2010 07:16:31 GMT+1) also has several Google mentions, e.g.:www.blockchain.com/explorer/transactions/btc/a1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d even specially marks it "Bitcoin Pizza" and "Notable". Furthermore, the receiving address 17SkEw2md5avVNyYgj6RiXuQKNwkXaxFyQ is even marked as verified an as belonging to Jeremy Sturdivant.Furthermore this also shows us how Jeremy then transferred about half of Bitcoins 10 minutes later, but we can't know if it was to his own accounts or to cash out.The nature of this transaction is very different from the previous one. It uses a bunch of inputs to a single address 1XPTgDRhN8RFnzniWCddobD9iKZatrvH4. 1XPTgDRhN8RFnzniWCddobD9iKZatrvH4 contains a mixture of regular small inputs, but also a bunch of block rewards e.g. www.blockchain.com/explorer/addresses/btc/1MUoh2nJudSDdKu9NkcevaCG1Qe3nZHWFZ, thus also clearly indicating Lsazlo ownership.
The input chain is complex, but it does contain one block reward on the third level: 17PBFeDzks3LzBTyt6bAMATNhowrvx5kBw + 79 rewards 4th level at 045795627ca29ec72a94c23a65ee775ea1949d60b6fba0938b75e1cfe1e6643e.
- d3498960e5f73031f726cb878382cc696938810fa43f918696cbf242afc9765e (04 June): complex chain, unclear
- 2ea2914c131b2798041a80c00c44081a3559233d69d8b367e4244e6b12096610 (10 June): single input/single output. Complex input, but has some 2nd order mines e.g. e6393f613ef12f5708fa511875b8ff5080f6c8864709f8d92bd99435826a9d0d
- ea595789878b673776d0577cbc6063db611bb4e2954e226459d556995f547922 (24 June): single input/single output. Complex input, but has some 2nd order mines e.g. b9a0c2d24a744b79fe001a67468c456746b74e94a6ce68a2e5f80bf645d678b9
- 461f91a98bbe2f269d8af938039e185287761677f0418fcc8238c5f3dca72935 (02 Jul 2010 08:39:17 GMT+1): single 20k input to two 10k outputs. Did he get 2x two pizzas at once? Complex input.
- a47f927ca1adeeb4394200e8a37a9297b07e784a251569074a9fc2c04855560f (02 Jul 2010 09:07:35 GMT+1): too close in time to the previous one, unless he was having a massive pizza party with invitees!
- 77036fa2ac75212be1ce93e8e1008d5cb2bcbb51aa560a5fe29c9c1423bbd00e (02 Jul 2010 09:14:33 GMT+1): the party grows even larger