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

Figures: Satoshi Nakamoto

This analysis by Bitcoin Institute examines Satoshi Nakamoto’s Bitcoin source code from v0.1.0 (January 2009) through v0.3.19 (December 2010). It combines two distinct data sets: static source code analysis of the v0.1.0 release (distributed without version control in January 2009), and commit history analysis from the SourceForge SVN repository, which was introduced in October 2009 with help from Martti Malmi. The period between v0.1.0 (January 2009) and the start of SVN (October 2009) has no preserved commit history.

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>

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 tooling and distribution choices around v0.1 are examined separately 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

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.

The interactive visualizations below present the statistical data from this analysis.

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