In retrospect, doing electrical engineering (and likey the other engineering degrees) felt like taking a trip to the 60s in the United States, due to both the subject matter, and how old the concrete buildings were!
This does not need to be a bad thing. It is in that era (and earlier) that much of the exciting foundations of the field were set, and there is great value in there is value in tutorials written by early pioneers of the field. Not that they were amazing at excting history lessons as they should be. But the course outline suggested that intent.
But that point of view must also be accompanied by the excitement of the great ongoing advances of technology (and impact they had in the past). And on that, they failed.
Interesting to note that there are quite a few nearer than Sagittarius A, as of 2022 we know of one at 1.5 kly: universemagazine.com/en/discovered-the-closest-black-hole-to-the-sun/
It is interesting that a few months earlier there seemed to be no known specific black holes in the Milky Way: www.nasa.gov/feature/goddard/2022/hubble-determines-mass-of-isolated-black-hole-roaming-our-milky-way-galaxy although their count is estimated to be in the hundreds of millions.
Here is a very direct description of the system:Code 1. "Sample Bitcoin transaction graph" illustrates these concepts:
- 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.
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 inout0and 2 inout1. The initial value was actually 50 BTC and reduced with time: Section "Bitcoin halving"tx1: regular transaction that takes:Since this is a regular transaction, no new coins are produced.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:
- 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 |
+------------+ +--------------+ +--------------+
Code 2.
Sample Bitcoin blockchain
. nonces 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:block1containstx2. Then whenblock2gets made, it cannot containtx2', becausetx0 out1was already spent bytx2block1containstx2'.tx2cannot 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.
bitcoin.org registration: 2008-08-18
2008-08-22: first private contact to Wei Dai email. Reproduced at www.gwern.net/docs/bitcoin/2008-nakamoto on gwern.net from address
satoshi@anonymousspeech.com. Email provider shutting down entirely on 2021-09-30 as per archive.ph/wip/RRNKx, homepage now juts contains useless Bitcoin stuff.First public Bitcoin whitepaper announcement: 2008-10-31 www.metzdowd.com/pipermail/cryptography/2008-October/014810.html linking to www.bitcoin.org/bitcoin.pdf, email sent from from satoshi@vistomail.com. Claimed one year and a half development time. Provider apparently closed in 2014: www.reddit.com/r/Bitcoin/comments/3h80mi/vistomailcom_closed_and_domain_changed_owner_in/, as of 2021 just reads:
Replies in November: www.metzdowd.com/pipermail/cryptography/2008-November/thread.html#14863 under satoshi@anonymousspeech.com claims source code shared privately by request at that point.
First open source release: 9 January 2009. Announcement: www.metzdowd.com/pipermail/cryptography/2009-January/014994.html "Windows only for now. Open source C++ code is included" Arghhhhhh how can those libertarians use Microsoft Windows??? Had a GUI already.
2011-04-23 Satoshi sent his last email ever, it was to Martti Malmi. www.nytimes.com/2015/05/17/business/decoding-the-enigma-of-satoshi-nakamoto-and-the-birth-of-bitcoin.html mentions:
How Satoshi hid his mining IP address:
Hal Finney:
- Jan 11, 2009 twitter.com/halfin/status/1110302988 "Running Bitcoin"
They appear to be included, with rationale that you can already include syntactically valid crap in an unprovable way: github.com/bitcoin/bitcoin/issues/320 Better then have syntactically invalid crap that is provable.
The outputs of this transaction seem to be the first syntactically incorrect scripts of the blockchain: blockchain.info/tx/ebc9fa1196a59e192352d76c0f6e73167046b9d37b8302b6bb6968dfd279b767?format=json, found by parsing everything locally. The transaction was made in 2013 for 0.1 BTC, which then became unspendable.
There are apparently two methods:
- in the script, e.g. as in the Genesis block message
- in output addresses
Specific implementations:
- eternitywall.it/ Eternity WallLaunched 2015 www.newsbtc.com/news/bitcoin/eternity-wall-records-1150-documents-blockchain-first-year/Shutdown sometime after 2019, working archive: web.archive.org/web/20190417074034/https://eternitywall.it/ says "Sorry, the service is not properly working at the moment..." and last working message timestamped "April 16, 2019 8:02 PM GMT".
TODO: it would be cool to have something like bitcoinstrings.com but including the actual transactions:
Local methods:
- Bitcoin Inscription Indexer
- bitcoin.stackexchange.com/questions/30295/how-can-i-search-for-transaction-text-on-the-blockchain
- bitcoin.stackexchange.com/questions/22500/is-there-a-lightweight-blockchain-parser-library-server/101472#101472
- github.com/alecalve/python-bitcoin-blockchain-parser
- bitcoin.stackexchange.com/questions/84266/wondering-how-to-use-bitcoin-parser
- github.com/bitcoinprivacy/Bitcoin-Graph-Explorer stores the blockchain in a database, and should allow more intelligent querying.
Further bibliography:
- bitcoin.stackexchange.com/questions/799/can-i-download-the-whole-block-chain-from-somewhere
- bitcoin.stackexchange.com/questions/68925/how-can-data-be-accessed-searched-for-in-a-blockchain
- bitcoin.stackexchange.com/questions/55188/download-single-and-specific-block-for-study-purposes
- www.fiverr.com/usefulshine/embed-your-logo-or-brand-art-on-blockchain user usefulshine from India embeds ASCII art for you into the blockchain starting at 260 dollars! XD
This is a collection of cool data found in the Bitcoin blockchain using techniques mentioned at: Section "How to extract data from the Bitcoin blockchain". Notably, Ciro Santilli developed his own set of scripts at github.com/cirosantilli/bitcoin-inscription-indexer to find some of this data. This article is based on data analyzed up to around block 831k (February 2024).
Drop some Bitcoins at 3KRk7f2JgekF6x7QBqPHdZ3pPDuMdY3eWR if you are loaded and like this article in order to support some much needed higher educational reform: Section "Sponsor Ciro Santilli's work on OurBigBook.com".
When this kind of non-financial data is embedded into a blockchain some people called an "inscription". The study or "early" inscriptions had been called a form of "archaeology"[ref][ref]. Since this is a collection of archeological artifacts, we call it a "museum"!
One really cool thing about inscriptions is that because blockchains are huge Merkle trees, it is impossible to censor any one inscription without censoring the entire blockchain. It is also really cool to see people treating the Bitcoin blockchain basically like a global social media feed!
Starting on December 2022, ordinal ruleset inscriptions took the bitcoin blockchain by storm, and dwarfed in volume all other previous inscriptions. This museum focuses mostly on non-ordinals, though certain specific ordinal topics that especially interest he curators may be covered, e.g. Ordinal ruleset inscription porn and ordinal ASCII art inscription.
Hidden surprises in the Bitcoin blockchain by Ken Shirriff (2014) is a mandatory precursor to this article and contains the most interesting examples of the time. But much happened since Ken's article which we try to cover. This analysis is also a bit more data oriented through our usage of scripting.
Artifacts can be organized in various ways:In this article we've done a mixture of:
- chronologically
- by media type, e.g. images vs text
- by themes or events, e.g. the Prayer wars or Mt. Gox' shutdown
- encoding, e.g. AtomSea & EMBII vs raw images
Who said it was easy to be a museum curator!
Less evil are BLOBs that come from Reproducible builds.
There are unlisted articles, also show them or only show them.

