What Satoshi's code reveals — coding style, commit patterns, and evolution from v0.1.0 to v0.3.19

Figures: Satoshi Nakamoto

194 commits, two years, one identifiable coding style. This analysis examines Satoshi Nakamoto’s Bitcoin source code from v0.1.0 (January 2009) through v0.3.19 (December 2010) — 160 SVN commits by s_nakamoto (with preserved timestamps) plus 34 git commits — and reads the static source plus the temporal pattern as one coherent body of evidence. The period between v0.1.0 (January 2009) and the start of SVN (October 2009) has no preserved commit history; the SVN repository was introduced in October 2009 with help from Martti Malmi.

1. Data sources

  • Source code: Original Bitcoin v0.1.0 source and tagged releases through v0.3.19
  • Commit history: 160 unique SVN commits by s_nakamoto (primary — preserves original timestamps) + 34 git commits by Satoshi Nakamoto <satoshin@gmx.com>

2. Key findings

  • Timezone: The near-total absence of commits between 06:00–12:00 UTC strongly suggests residence in EST (UTC-5) or CST (UTC-6)
  • Commit activity period (SVN): 420 days (October 2009 – December 2010), with commits on 109 unique days
  • Coding style: Consistent use of Hungarian notation variants, quad-slash (////) TODO markers, custom macros (loop, foreach, CRITICAL_BLOCK), and Windows-first development patterns (the chronological development-environment record is in Satoshi’s Windows-only development environment; the distribution and tooling-absence reading is in the Bitcoin v0.1 distribution and tooling-anomalies analysis)
  • Code growth: 19,901 → 31,909 lines (+60%) over 14 months
  • Final activity: Security hardening, DoS mitigation, removal of centralized safe mode — work characteristic of someone preparing to hand off a project

3. The 75-day gap (March–May 2010)

The monthly commit chart below shows a conspicuous gap from early March to mid-May 2010 during which no SVN commits were made by s_nakamoto. Satoshi himself acknowledged and explained this absence in a May 16, 2010 email: after Martti Malmi checked in on him (“How are you doing? Haven’t seen you around in a while.”), Satoshi replied: “I’ve also been busy with other things for the last month and a half. I just now downloaded my e-mail since the beginning of April. I mostly have things sorted and should be back to Bitcoin shortly.”

This is the only first-person account of the gap in the public record. Satoshi does not specify what the “other things” were.

4. Where these findings connect

The code-level findings here feed several adjacent analyses: the Satoshi biography and the Bitcoin SVN repository committers record for participant tracking; the Satoshi activity timeline for date-by-date public activity; the bitcoin-design-lineage for the precursor-vs-novel synthesis breakdown; the Satoshi anonymity architecture for what the code says (and does not say) about its author; the identification-asymmetry analysis for why these code-level traces under-determine identity; and the Bitcoin architecture-evolution design entry for how the v0.1 architectural decisions reshape across later versions.

5. Visualizations

Commit Time Heatmap (UTC)

Day of week × Hour — darker = more commits. The dead zone (06:00–12:00 UTC) suggests EST/CST timezone.

Timezone Analysis

The near-total absence of commits between 06:00–12:00 UTC strongly suggests Satoshi lived in the EST (UTC-5) or CST (UTC-6) timezone. Under EST, this gap maps to 01:00–07:00 — normal sleep hours. Under GMT (UK), it would mean sleeping from 06:00–12:00 — a fully nocturnal schedule. Under JST (Japan), it would mean sleeping from 15:00–21:00 — which does not match any natural pattern.

Monthly Commit Frequency

SVN commits by s_nakamoto. The 75-day gap (Mar–May 2010) and final decline are visible.

Source Code Growth

Lines of code across versions. The v0.3.7 spike is the integration of Wei Dai's Crypto++ library.

Coding Style Fingerprint

Distinctive patterns found consistently across all versions of Satoshi's code.

Naming

Hungarian notation nBestHeight, fGenerateBitcoins, pindexBest, vWalletUpdated, mapTransactions, strSetDataDir
C-prefix classes CBlock, CTransaction, CNode, CWallet, CScript
PascalCase functions AcceptToMemoryPool, ConnectBlock, ProcessMessage

Comments

//// comments Quad-slash TODO markers (22 in main.cpp alone). Unique to Satoshi — not a standard convention

Macros

loop macro #define loop for(;;) — custom infinite loop shorthand
foreach macro #define foreach BOOST_FOREACH — convenience wrapper
CRITICAL_BLOCK Scope-based mutex locking macro, predating std::lock_guard

Quirks

(*mi).second Consistently uses (*mi).second instead of mi->second
return (expr) Parenthesizes return values: return (true), return (nValue)

Formatting

Allman braces + 4-space indent Opening brace on new line, 4-space indentation throughout
Aligned assignments Lines up = signs across consecutive assignments for visual clarity

Platform

Windows-first development Win32 API, MSVC pragmas, Hungarian notation — strong Windows developer indicators