サトシのコードが語ること — コーディングスタイル・コミットパターン・コード進化(v0.1.0〜v0.3.19)

194 件のコミット、2 年間、識別可能な単一のコーディングスタイル。本分析はサトシ・ナカモトのビットコインソースコードを v0.1.0(2009 年 1 月)から v0.3.19(2010 年 12 月)まで調査する —— s_nakamoto による 160 件の SVN コミット(タイムスタンプ保存)と 34 件の git コミットを合わせ、静的ソースと時間パターンを一つの一貫した証拠群として読む。v0.1.0(2009 年 1 月)から SVN 開始(2009 年 10 月)までの期間にはコミット履歴が保存されていない。SVN リポジトリはマルッティ・マルミの協力により 2009 年 10 月に導入された。

1. データソース

  • ソースコード: オリジナルの Bitcoin v0.1.0 ソースと v0.3.19 までのタグ付きリリース
  • コミット履歴: s_nakamotoによるユニーク SVN コミット 160件(主要データ — オリジナルのタイムスタンプを保持)+ Satoshi Nakamoto <satoshin@gmx.com>による git コミット 34件

2. 主な発見

  • タイムゾーン: 06:00〜12:00 UTC にコミットがほぼ皆無であることから、EST(UTC-5)または CST(UTC-6)在住の可能性が最も高い
  • コミット活動期間(SVN): 420日間(2009年10月〜2010年12月)、109日間にコミット
  • コーディングスタイル: ハンガリアン記法の変種、四重スラッシュ(////)TODO マーカー、独自マクロ(loopforeachCRITICAL_BLOCK)、Windows 中心開発の一貫した使用(時系列の開発環境記録はサトシの Windows 専一の開発環境、配布・ツール不在の読解はビットコイン v0.1 の配布・開発環境異例分析
  • コード成長: 14ヶ月で 19,901 行→31,909 行(+60%)
  • 最終活動: セキュリティ強化、DoS 対策、中央集権的セーフモードの除去 — プロジェクトの引き渡しを準備する者の特徴的な作業

3. 75日間の空白(2010年3月〜5月)

以下の月別コミットチャートには、2010年3月初旬から 5月中旬まで s_nakamoto の SVN コミットが一切行われなかった顕著な空白期間が見える。サトシ自身が 2010年5月16日のメールでこの不在を認めて説明している。マルッティ・マルミが消息を尋ねた後(「どうしているんですか?しばらく見かけませんでしたね」)、サトシは返信した「私もこの 1ヶ月半、他のことで忙しくしていました。4月初めからのメールをたった今ダウンロードしたところです。ほぼ整理がついたので、まもなく Bitcoin に戻れるはずです」

これはこの空白期間について残されている唯一の一人称の記録である。サトシは「他のこと」が何であったかは明示していない。

4. これらの発見がつながる先

本エントリのコードレベルの知見は、複数の隣接分析の根拠として参照される ― 参加者追跡ではサトシ伝記Bitcoin SVN コミッター記録、日付別公開活動ではサトシ活動年表、先駆 vs 新規合成の内訳ではビットコインの設計系譜、コードが著者について語るもの (語らないもの) ではサトシ匿名性アーキテクチャ、これらコードレベルの痕跡が身元同定に対して過少決定的である理由では同定非対称性分析、 v0.1 アーキテクチャ判断が後続版でどう再形成されるかではビットコイン・アーキテクチャ進化設計書

5. 可視化

コミット時間帯ヒートマップ(UTC)

曜日×時刻 — 濃いほどコミットが多い。06:00〜12:00 UTC の不活動帯が EST/CST を示唆。

タイムゾーン分析

06:00〜12:00 UTC にコミットがほぼ皆無であることから、サトシは EST(UTC-5)または CST(UTC-6)に在住していた可能性が最も高い。EST 仮定ではこの空白は 01:00〜07:00(通常の睡眠時間)に相当する。GMT(英国)仮定では 06:00〜12:00 に睡眠(完全な夜型)、JST(日本)仮定では 15:00〜21:00 に睡眠となり、いずれも不自然。

月別コミット頻度

s_nakamoto の SVN コミット。75日間の空白(2010年3〜5月)と最終的な減少が見える。

ソースコード行数の推移

バージョン別のコード行数。v0.3.7 の急増はウェイ・ダイの Crypto++ライブラリの組み込み。

コーディングスタイルの指紋

サトシのコード全バージョンで一貫して見られる特徴的なパターン。

命名規則

ハンガリアン記法 nBestHeight, fGenerateBitcoins, pindexBest, vWalletUpdated, mapTransactions, strSetDataDir
Cプレフィックスクラス CBlock, CTransaction, CNode, CWallet, CScript
PascalCase関数名 AcceptToMemoryPool, ConnectBlock, ProcessMessage

コメント

////コメント 四重スラッシュのTODOマーカー(main.cppだけで22箇所)。サトシ独自の慣習

マクロ

loopマクロ #define loop for(;;) — 独自の無限ループ省略記法
foreachマクロ #define foreach BOOST_FOREACH — 利便性ラッパー
CRITICAL_BLOCK スコープベースのミューテックスロックマクロ。std::lock_guardに先行

(*mi).second mi->secondではなく一貫して(*mi).secondを使用
return (expr) 戻り値を括弧で囲む: return (true), return (nValue)

フォーマット

Allmanブレース + 4スペース 開き波括弧を新しい行に。全体で4スペースインデント
代入の位置揃え 連続する代入文の=記号を縦に揃える美学

プラットフォーム

Windows中心開発 Win32 API、MSVCプラグマ、ハンガリアン記法 — Windows開発者の強い指標