More Ghosts in the Code: The Written History of Bitcoin, Part 2B
By Kurt Wuckert Jr.
Somebody finally rebuilt the thing.
On October 18, 2026, a developer posting as T4T5 announced on X that he had rebuilt Satoshi's 2009 bitcoin.exe byte for byte.¹ Not recompiled. Rebuilt, to the hash. His words: "afaik nobody has been able to perfectly recreate the executable published in 2009 from source, because we didn't know the exact build environment that was used. using opus 5.5, i reverse-engineered satoshi's build machine from the binary. it now outputs an exe with the exact same sha256 as the 2009 release!"
i rebuilt satoshi's 2009 bitcoin.exe byte for byte! afaik nobody has been able to perfectly recreate the executable published in 2009 from source, because we didn't know the exact build environment that was used. using opus 5.5, i reverse-engineered satoshi's build machine from the binary. it now outputs an exe with the exact same sha256 as the 2009 release!
— T4T5 (@t4t5) October 18, 2026
"...so is this useful at all? not really."² He listed his "archeological fun facts" anyway: a debug build with max optimization switched on for exactly one file, and the new information that the exe everyone calls v0.1.0 is actually v0.1.1, compiled two days after Satoshi announced v0.1, with the launch-day binary, so far, lost to history.
so is this useful at all? not really. but we can now confirm with certainty that the executable people downloaded matches satoshi's published source code exactly. some other archeological fun facts: satoshi used windows xp with mingw; he upgraded binutils halfway through the project; he shipped a debug build, but turned on max optimization for one file: the hashing used for mining; the exe everyone calls v0.1.0 is actually v0.1.1 and was compiled two days after satoshi announced v0.1. the original launch-day binary seems to be lost
— T4T5 (@t4t5) October 18, 2026
Not useful. Sure...
Source tells you what a man wrote, but the binary tells you what was sitting on his desk while he wrote it, which is a forensic finding: the compiler, the libraries, the archiver, the clock on the wall are now known with some extra resolution. Source is the manuscript or the cave paintings an archaeologist might study, but the binary is the room that the other findings were built in, and that's a truly enriching addition to the Satoshi story to a historian such as myself.
In Part 2 I read the manuscript and told you it screams "a 1990s commercial Windows systems engineer. A pragmatic product lead. A builder of payment infrastructure. A commercially minded CEO who shipped and iterated. A control-focused gatekeeper."
I still stand by every word, as the new evidence doesn't change anything, by my measure, but this installment is a forensic, archaeological look at the room where Satoshi was working.
So far, my specific work has been unsuccessful at "Finding Satoshi," but we are seeing him with some new light. I want Satoshi's engineering voice (his tools, his tics, his shortcuts, his reflexes) known well enough that if it ever surfaces anywhere else, an abandoned SourceForge project, a Usenet post, an exhibit in some courtroom, a reader of this series stops and says: "wait. I know that handwriting!"
Recognition, not identification.
Watch the stream live or after it airs.
What a binary knows that source does not
I did not take T4T5's word on the one file. I opened the 0.1 makefile. Every object compiles with the default debug flags except obj/sha.o, whose rule reads "g++ -c $(CFLAGS) -O3". That is sha.cpp. The one place he cared about speed was the one place speed earned coins, so he was competitive by nature, or he at least valued the idea foisted upon other people. A free market capitalist! Not shocking...
The rest is a debug build, stripped by hand.
He wanted the binary debuggable because he expected to be debugging it, and he wanted hashing fast because he expected to be mining. That is a product lead's build. He wanted to build and participate in the game.
Published hash fbcac071d92e26d82ec917214e334bd43850c0691f113bab1d4741c9bdd30d2d, 6,440,960 bytes, and the rebuilt binary matching it. "The exe matches the source" used to be an assumption. Now it is a fact. Source: t4t5/bitcoin-0.1-rebuilt
The archive the whole world calls bitcoin-0.1.0 is the January 10, 2009 update; serialize.h inside it reads VERSION = 101. No verified copy of the January 8 launch-day package is known to survive.³
Yet(?)
The founding artifact of Bitcoin is a two-day-old patch, and the actual first release is gone, as far as the public record is concerned.
He built a store first
Every number here comes from the bitcoin-0.1.0 tarball, Hal Finney's copy, the one with the Satoshi Nakamoto Institute hashes.⁴ The marketplace is 182 lines of market.h, 264 lines of market.cpp, about 920 lines in ui.cpp, and five dialogs: "Marketplace", "Edit Product", "Order Form", "View Order", "Enter Review".⁵
A seller fills in Title, Price, Category, Description, Instructions, and up to 20 custom order-form fields, then signs it. The summary gets gossiped node to node. The detailed listing never leaves the seller's machine: the buyer's client opens a TCP connection to the seller's IP and sends "getdetails". Seller offline? You get "-- CAN'T CONNECT TO SELLER --".
Your store exists while your computer is on, so he pictured bitcoin commerce maintaining business hours, at least for the machines. That is a worldview fingerprint in one error message.
The order form is written into the wallet transaction itself (CWalletTx.vOrderForm) and sent with the payment to the seller's IP. Only the payment touches the chain. Reviews are one to five stars plus text, signed, gossiped, (notably) off chain. And the code shipped wearing its scaffolding: "////// delme, this is now done by AdvertInsert". In the release.
A signed listing gossiped to the network, a direct connection to the seller for the details, and the order form riding inside the payment transaction. eBay and Amazon reviews, jammed into a desktop wallet. Source: trottier/original-bitcoin
Mike Hearn, to the unSYSTEM list, March 15, 2014: "Satoshi's integrated marketplace was abandoned after he realised that his time was better spent on the JSON-RPC API and outsourcing it to web developers."⁶
Satoshi killed it himself. February 15, 2010, commit 5253d1ab, message "strip out unfinished product, review and market stuff".⁷ Nothing of it survived into the 0.3 series.
Reputation was proof of work
My friend Daniel Krawisz, one of the founders of the Nakamoto Institute, will love this bit of signal theory cooked into Satoshi's earliest ideas: the reputation system released in that same commit, and to my knowledge, nobody has given it its due.
Satoshi called the units "atoms". Writing a review creates a link from reviewer to reviewee. Once two atoms arrive (nFlowthroughRate = 2), one flows onward along the user's outbound review links and the rest merge into his own count.
Homemade reputation flow. Where do the atoms come from?
Main.cpp, lines 1224 to 1231. Inside AcceptBlock(), there is a commented-out block headed "// Add atoms to user reviews for coins created". It pulls the public key from the block's coinbase output, generates a random atom, and calls AddAtomsAndPropagate for that miner's user hash.⁵
Every block you mined was going to mint one reputation atom for you, and your atoms would flow to the sellers you reviewed. One CPU, one vote, applied to seller ratings. Commented out, yes. But the plumbing was live for on-chain reputation cooked into honest nodes!
Coinbase key in, one atom out, and the atom flows along your review links at a rate of one per two received. Mining was going to be the trust layer for commerce. Source: trottier/original-bitcoin
In that same 2014 list post, Manfred Karrer relayed a theymos recollection: "My understanding is that Satoshi's plan was to have people broadcast their trade offers across the network in the same way that transactions are. To handle trust (and maybe to prevent spamming), you'd link a pseudonymous identity with every Bitcoin block you mine. The more blocks you mine, the higher your trust score."⁶ A secondhand report from an Amsterdam panel that May has Hearn saying the rating weight "would be according to how much mining they had done".⁸ Which is exactly what the code does.
Where does the atom idea come from? The nearest relative I can find is Raph Levien's Advogato trust metric from the 2000 to 2003 era, network flow of discrete units along certification edges, minus Advogato's trusted seed.⁹ Nobody before 2009 that I can find called the units "atoms". The proof-of-work-minted atom is the part none of those systems had, and the part Satoshi kept. The whitepaper's "one-CPU-one-vote" is the governance concept, and "one-block-one-atom" is the commercial trust concept that he envisioned for "commerce on the internet."
What we can deduce from all of this is that Satoshi was thinking in commercial activity, not finance. Payments with a trust score, not assets with a profit motive. Categories, order forms, seller stars, and reputation math reinvented from scratch without a citation. He built a store before he built a currency. The currency is what shipped.
One more dead feature: the poker table has a checkbox "Deal Me Out", buttons "Deal Hand", "Fold", "Call", "Raise", "Leave Table", and every handler is an empty stub.¹⁰ "Deal Hand" is a button the player presses, which is home-game behavior; in a casino lobby the server deals and you never ask. And the variable behind "Deal Me Out" is named m_checkSitOut: the online-poker term in the code, the live-table phrase on the screen.¹¹ Someone who had played both. I searched pretty hard, and I could not match the label set to any commercial client of the era. That one stays open.
The compiler that would not die
The readme.txt in the January 2009 tarball names two supported compilers: "MinGW GCC (v3.4.5)" and "Microsoft Visual C++ 6.0 SP6". VC6 shipped in 1998. The readme goes on: "I couldn't get version 1.37 to compile with MSVC 6.0." He was not reminiscing about VC6; he was building with it, and griping about Boost while he did.
Then util.h: "#if defined(_MSC_VER) && _MSC_VER < 1300 / #define for if (false) ; else for". That macro exists for exactly one reason: Visual C++ 6.0 leaked for-loop variables out of their scope. Nobody types that in 2008 unless VC6 is a live target. The same header guards for Borland C++ ("BORLANDC") in five places. Borland was a dead compiler lineage by 2008, but Satoshi was still carrying the umbrella.
The byte-exact rebuild recovered the rest of the kit from the executable itself: MinGW gcc 3.4.5 from 2005, wxWidgets 2.8.9, Berkeley DB 4.7.25, OpenSSL 0.9.8h, Boost 1.34.1, Windows XP, the whole thing built from a plain cmd window, because the include paths survive verbatim in the exe.³
He hand-patched a "no-everything" OpenSSL build stripping RSA, DES, AES and the rest, with the readme line "Bitcoin does not use any encryption." Where else have we heard that line?
The patch wraps an unguarded rsa.h include in engines\e_gmp.c with #ifndef OPENSSL_NO_RSA. I checked the 0.9.8h source. That include really is unguarded. He fixed a genuine defect in that release and told nobody!¹²
The archive was packed with WinRAR 3.40 to 3.51, released September 2004 to October 2005. The forms came out of wxFormBuilder 3.00.57, dated April 15, 2008.¹³ wxWidgets compiled November 28, 2008, four weeks after the whitepaper. The exe stripped at 23:16:00 UTC on January 10, 2009.
VC6 from 1998, MinGW 3.4.5 and WinRAR 3.4x from 2004 to 2005, then late-2008 libraries bolted onto the side. A workbench that stopped getting new tools years before the project started. Source: t4t5/bitcoin-0.1-rebuilt
VC6 holdouts were less weird in 2008 than you would think,¹⁴ though, and nothing about their usage in bitcoin ties them to a sector, but two readings fit: an older codebase refreshed for the occasion, or a developer who stopped updating his tools around 2005 and never saw a reason to upgrade. Either way, the 1990s grammar was a 1998 compiler kept alive as a build target in 2009, which is curious.
The clock he forgot to scrub
Every file timestamp in the .rar was set by hand to whole minutes: 7 Jan 2009 01:00:00 for most files, 10 Jan 2009 01:01:00 for bitcoin.exe, irc.cpp and serialize.h. Nobody's files save at exactly 01:00:00! He scrubbed them.
He did not, however, scrub the folders. src reads 10 Jan 2009 23:15:06, local time, because RAR stores local time.¹⁵ The exe's PE header says 23:16:00 UTC. The build machine's clock equaled UTC within a minute.
Files at 01:00:00 on the dot, a folder at 23:15:06 local, a PE header at 23:16:00 UTC. The files say he knew timestamps leak. The folder says he missed one. Source: t4t5/bitcoin-0.1-rebuilt
Now the fine print, before anyone runs away with this irresponsibly. Both build dates, November 28 and January 10, fall in winter, when London, Lisbon and Reykjavik all sit on UTC+0. So the finding is smaller than the people who will tweet it would like: a machine at UTC+0 in winter, consistent with a Greenwich time zone or a clock deliberately set to UTC. It does not say London. It does not say opsec, precisely.
What it does is land on the same square as everything else. The posting-hour studies (Stefan Thomas in 2011, Jameson Lopp, Karaivanov in 2020) infer a sleep gap around 05:00 to 11:00 UTC and leave the UK, US Eastern and US Pacific open, with Karaivanov calling London likeliest but "not beyond a reasonable doubt."¹⁶ The archive clock agrees with Karaivanov and the British spellings, and rules out US time at the build.
Satoshi was a careful man, but not a perfect one.
Ok, so we have covered the two dead features, the tools that built them and the wrapper they shipped in. What about what he was reading?
One Belgian paper
Part 0 flagged the whitepaper's reference 2 as the odd one out: Massias, Serret-Avila and Quisquater, "Design of a secure timestamping service with minimal trust requirements", Benelux, May 1999.¹⁷ References 3, 4 and 5 are the obvious ones: Haber and Stornetta 1991, Bayer-Haber-Stornetta 1993, Haber and Stornetta 1997.¹⁸
I downloaded the Massias paper. Its bibliography has five entries, and three of them are exactly those three Haber-Stornetta papers. The other two are internal TIMESEC project reports. This was new information for me, and paints a picture of citation stuffing, which is to say Satoshi built bitcoin without specific inspiration, and then hunted for citations to justify his own ideas after the fact. This was implied in his known communications with Adam Back and Wei Dai, but it stands out more clearly with this new (to me?) information.
Take a look:
Five entries in the 1999 Benelux paper. Three of them are the whitepaper's references 3, 4 and 5. He found one paper and mined its bibliography. Source: Massias, Serret-Avila, Quisquater, 1999
The formatting agrees. Reference 5's "pages 28-35, April 1997" matches the Massias entry. Reference 4 corrects it: Massias wrote "Sequences'91" and 1992, the whitepaper has "Sequences II" and 1993, the correct Springer volume. So he checked it. Wikipedia is out: the "Trusted timestamping" article's October 2008 revision had one Haber-Stornetta item and no Massias.¹⁹
One paper on timestamping, read closely enough to fix a citation, and the rest of the timestamping bibliography came along for the ride. You find the one paper, you mine its references, you move on. This reads like an engineer's behavior, not scholar's.
A man who thinks in gambler's ruin
The whitepaper cites one textbook, and it is Feller. The 1957 citation is volume 1, second edition, Wiley, and chapter XIV is "Random walk and ruin problems".²⁰ The whitepaper calls the attacker catch-up probability "analogous to a Gambler's Ruin problem".
Was the math right? Rosenfeld replaced Satoshi's Poisson shortcut with a negative binomial in 2012 and did not call it wrong.²¹ Grunspan and Pérez-Marco in 2017 wrote that Satoshi "wrongly assumed that honest miners use exactly as much time to find a block as they would on average", and Grunspan told Bitcoin Magazine, "Satoshi was a genius... But he was not a mathematician."²² This echoes Gavin Andresen, who had already gone on the record in 2015 saying that "the way Satoshi used cryptography is fairly naive."²⁶
I could not source which fields used Feller as the standard text, so here is only what sits in front of me: a 1957 probability textbook, cited in 2008 with a shortcut a mathematician would not take, in the same source tree as a poker lobby. A man who thinks in gambler's ruin terms.
Did Satoshi Nakamoto work in the gambling industry? Seems much more likely than Satoshi being a math or cryptography expert.
I went looking for his old code
Last stop on new information was "util.h," which is less Bitcoin code and a lot more like one man's toolbox.
"#define loop for (;;)". BEGIN(a) and END(a) casts to treat a struct as a byte range. "#define printf OutputDebugStringF", so every printf goes to the debugger. CRITICAL_BLOCK(cs), 105 times across the tree. IMPLEMENT_RANDOMIZE_STACK, which recurses a random 1 to 50 times before running a thread function, commented "Randomize the stack to help protect against buffer overrun exploits". A homemade stack-randomization defense, in 2008, in a wallet! And RandAddSeed, which feeds OpenSSL's random number generator, every five minutes, the ENTIRE Windows performance-counter registry blob, up to 250,000 bytes, hashed with SHA-256.
Nobody writes this fresh for a side project, so my guess is that if we can find similar tooling in another project somewhere, maybe we can find Satoshi.
So on October 20 I ran GitHub code search for 13 exact strings out of util.h and serialize.h, paginated each one to the 1,000-result cap, then pulled the raw file from every repo whose name did not scream cryptocurrency and tested it for Bitcoin lineage markers: Satoshi, Nakamoto, CBlock, CTransaction.²³
The loop guard "fcriticalblockonce": 215 files in 86 repos, every one a Bitcoin descendant. IMPLEMENT_RANDOMIZE_STACK: 1,608 files in 332 repos, and every one of them Bitcoin once I opened it.
The BEGIN/END cast, "((char*)&((&(a))[1]))", looked promising at 1,960 files in 656 repos, until I checked the survivors. A distributed-systems toolkit, a Microsoft sample-code mirror, a CVE corpus, a university course repo. Every single one had a vendored Bitcoin utility header sitting inside it. Bitcoin in a costume.
OutputDebugStringF: 12,496 files, including Unreal Engine and OpenOffice. Worthless as a fingerprint.
Thirteen strings, thousands of files, and every private idiom came back Bitcoin. The one macro with strangers attached was 1990s Windows folklore. Source: DoqueDB SyFor.h
The VC6 for-scope macro, "#define for if (false) ; else for": 855 files, 172 repos, and THREE genuine non-Bitcoin files with the identical spelling. Ricoh's DoqueDB, in a file called SyFor.h. Aleksey Kochetov's SQLTools. Michael Leonov's PolyBoolean.²⁴ Three strangers, one line of code. That macro was shared folklore in 1990s Windows C++ shops.
It dates the compiler, not the man.
And the performance-counter entropy trick. I had that one pegged as a Windows-insider move when I started, and I was wrong. Open OpenSSL 0.9.8h, crypto/rand/rand_win.c, lines 307 to 328: it reads HKEY_PERFORMANCE_DATA with RegQueryValueEx and feeds the buffer to RAND_add.²⁵ Satoshi's RandAddSeed reimplements OpenSSL's own Windows seeding branch and bolts on a SHA-256 pre-hash and a five-minute cadence. OpenSSL's trick, copied by a man who had read rand_win.c closely.
Still a tell on Satoshi being a serious Windows guy... Which was obvious, but now even more clear.
So: zero pre-2009 code on GitHub shares any of Satoshi's genuinely private idioms. Two suspected fingerprints turned out borrowed, one from folklore and one from OpenSSL. The rest came back empty.
Empty is a result, not a failure. But it is a result that fits two stories and cannot tell them apart. Either the library was written fresh for Bitcoin, or it came out of a private codebase that never went public. Remember, GitHub is not the world, and Satoshi released bitcoin on SourceForge. The developers around him said as much in public: Gavin Andresen, in 2010, that "Satoshi is the gatekeeper right now, all code flows through him," and Jeff Garzik, that the process was "mostly closed."²⁷ This confirms it to a degree, although Debian Code Search, Software Heritage, the SourceForge CVS dumps, the Google Code archive and Usenet are all still sitting there, unsearched...
What a serious investigator does now
Here is the board:
The idiom search: done on GitHub, null result, four archives still open. The OpenSSL patch on openssl-users: searched, empty. The poker labels: open. Feller's field: unsourced. And the 0.1.3, 0.1.5 and 0.2.0 archives, the SourceForge upload times and the SVN repository, read the same way we just read this one: open.
Now the part where almost everyone gets stupid, so listen. No single hit on that board necessarily identifies anyone. Not the clock, not the compiler, not the Belgian paper. The signal, if it ever comes, is several independent hits converging on one person from a specific type of community. What we have so far does converge: British spellings, a UTC+0 winter clock, Karaivanov's London read, VC6 and Borland guards, a Benelux paper as the reading root, a store built before a currency.
That is a profile, sharper than the one we had at the end of Part 2, so I will re-summarize:
Right now, best evidence suggests a Windows systems engineer whose tools froze around 2005, who thought like a merchant before he thought like a central banker or a trader, who read one timestamping paper and mined its footnotes to get it over with, who did his probability in gambler's ruin, and who covered his tracks carefully and imperfectly.
If you have read this far, you now know his handwriting about as well as anyone outside the room ever has.
The rest is still in the archives, waiting for somebody with the will to go get it. Maybe that somebody is you, and if you find anything compelling, please send it my way!
Be good to each other. And keep digging.
Kurt Wuckert Jr. is the Chief Bitcoin Historian, founder of GorillaPool and Open Protocol Labs, and host of Kurt's Podcast. He writes weekly on Bitcoin, geopolitics, faith, and the long fight for human sovereignty at kurtwuckertjr.com. Catch him live every Tuesday at 2 PM EST.
Footnotes
¹ T4T5, first post, i rebuilt satoshi's 2009 bitcoin.exe byte for byte!, X, October 18, 2026. ² T4T5, second post, so is this useful at all? not really., X, October 18, 2026. ³ T4T5, bitcoin-0.1-rebuilt, README sections "Satoshi's build machine" and "The release archive", GitHub, October 2026. ⁴ Satoshi Nakamoto Institute, Code archive, bitcoin-0.1.0 with hashes, Satoshi Nakamoto Institute, accessed October 2026. ⁵ Original 0.1 source mirror, trottier/original-bitcoin, main.cpp and market.cpp, GitHub, accessed October 2026. ⁶ Manfred Karrer relaying theymos and Mike Hearn, unSYSTEM list post, dyne.org list archive, March 15, 2014. ⁷ Satoshi Nakamoto, commit 5253d1ab, "strip out unfinished product, review and market stuff", bitcoin/bitcoin on GitHub, February 15, 2010. ⁸ Of Numbers, Interesting posts to add to your reading stack, Amsterdam panel notes, May 2014, Of Numbers, May 20, 2014. ⁹ Raph Levien, Advogato trust metric thesis, levien.com, 2000 to 2003 era. ¹⁰ Jason C., Satoshi's poker code, jasonc.me, accessed October 2026. ¹¹ PokerNews, "Deal me out" poker term, PokerNews, accessed October 2026. ¹² OpenSSL, 0.9.8h engines/e_gmp.c, openssl/openssl on GitHub, 2008. ¹³ wxFormBuilder, release history, SourceForge, 2008. ¹⁴ ITWriting, VC6 persistence, ITWriting, accessed October 2026. ¹⁵ Total Commander forum, RAR stores local time, ghisler.ch, accessed October 2026. ¹⁶ Cointelegraph, New analysis suggests Satoshi Nakamoto was a Londoner, Cointelegraph, 2020. ¹⁷ Massias, Serret-Avila, Quisquater, Design of a secure timestamping service with minimal trust requirements, Benelux Symposium, May 1999. ¹⁸ Satoshi Nakamoto, Bitcoin: A Peer-to-Peer Electronic Cash System, bitcoin.org, 2008. ¹⁹ Wikipedia, Trusted timestamping, Wikipedia, October 2008 revision. ²⁰ William Feller, Volume 1, second edition, table of contents, Wiley, 1957. ²¹ Rosenfeld, arXiv 1402.2009, arXiv, 2012. ²² Grunspan and Pérez-Marco, arXiv 1702.02867, arXiv, 2017; Bitcoin Magazine, How Satoshi messed up his math and how these academics just fixed it, 2017. ²³ Kurt Wuckert Jr., GitHub code search for 13 exact strings from util.h and serialize.h, each paginated to the 1,000-result cap, run October 20, 2026; the query strings and per-query counts are in the author's search log and available on request. ²⁴ Ricoh, DoqueDB SyFor.h, GitHub; Aleksey Kochetov, SQLTools ARG library, GitHub; Michael Leonov, PolyBoolean pbimpl.h, GitHub, accessed October 2026. ²⁵ OpenSSL, 0.9.8h crypto/rand/rand_win.c, lines 307 to 328, openssl/openssl on GitHub, 2008. ²⁶ Gavin Andresen, "What Satoshi Did Not Know," invited keynote, Financial Cryptography and Data Security 2015, PDF at IFCA; the line is quoted and sourced in Part 2. ²⁷ Gavin Andresen, 2010 IRC remark on Satoshi as gatekeeper, discussed in Bitcoin Magazine; Jeff Garzik, CryptoNews interview, 2025; both quoted in Part 2.