关键词:中本聪、比特币早期代码、时间链、矿工、虚拟扑克、比特币创世区块、区块链改名、工作量证明
2009 年 1 月 3 日,比特币创世区块横空出世,正式敲响去中心化货币的钟声。但 15 年后,一段尘封的早期源码意外流出,让人们得以一窥 中本聪 在“正式发布”前,到底做了哪些我们从未见过的设计:他把区块链叫做“时间链”、给网络参与者取名“矿工”,甚至还打算在比特币协议里内置一款虚拟扑克游戏。
本文把散落邮件、社区回帖、源码片段重新整理,为你还原比特币 0.1.0 版本诞生前的另一面。
2008 年 11 月 17 日,中本聪在深夜写了一封邮件,收件人是加密学老炮 James A. Donald。信中,他用 400 多字解释 节点如何广播库存列表、如何确认最长链 的雏形思路,并说了一句标志性的话:
“在过去的一年半时间里,我一直在处理所有这些细节工作,并进行代码编写……源代码即将推出。”
正是这句“源代码即将推出”,后面跟了 3 个附件:早期的事实哈希实现、一笔 TestNet 的钱包私钥,以及本文解开谜团的钥匙——私人版本比特币源码。十年后,这些附件被 Francis Pouliot 公之于众,“比特币早期代码”一词迅速登上 Reddit、Twitter 热搜。
我们把视线拉到 Bitcointalk.org 用户 “Cryddit” 收到的最早一份代码截图:
const char* pszTimestamp = "03/Jan/2009 Chancellor on brink of second bailout...";
你也许会以为就到此为止了,但脚本紧接着出现一行注释:
// The 'timechain' is a tree
没错,这里明确把人们今天亲昵喊作 区块链 的底层数据结构,称为 timechain。在中文版白皮书里,“区块链”三个字早已根深蒂固,可在 2008 年的 C++ 注释里,它就像一段害羞的原名,只在创业初期短暂露脸。
今天的你可能难以想象,白皮书全程把网络参与者称作“节点(node)”。但在早期源码的 miner.cpp 文件里,第一次跳出了 “bitcoin miner” 6 个英文字符。这意味着:
第一次官方承认了“挖矿”这一行为;
矿工一词,比白皮书足足早 3 个月 出现;
代码里已经包含简单的工作量证明积分逻辑。
中本聪的留言显得格外兴奋:“这只是我让网络运营更高效的第一版补丁。”无疑,“区块挖矿”三个字最初只是一种希望被社区听见的啼声。
Mike Hearn 在一次开发者聚会上披露了另一个彩蛋:早期目录里还有一个 genesis-testnet.cpp,哈希算法用的竟不是 SHA-256,而是 Blake-256。经过时间戳倒推,这枚 测试创世区块 诞生日期锁定为 2008 年 9 月 10 日,比正式创世早近 4 个月。
这标志着开发者们在正式主网前,就已完成一次 算法可置换性验证。只是把 Blake-256 换成 SHA-256 后,才有了后来耳熟能详的天堂口占区块故事:创世区块内嵌报纸头条,记录经济危机的第一声叹息。
把指针拨到 0.1.0 代码包的 /game/ 目录下,你会发现一段看似普通实则天马行空的注释:
// Virtual Poker table, built for fun and testing RNG
// Last updated: 2008-04-16
加上 IRC 客户端的同一分支,开发者原意是打造一个 内置娱乐模块:玩家通过钱包地址做座位号,Schnorr 签名确认洗牌随机数,一气呵成看似完美。然而最终所有扑克功能被 DISABLE_POKER 宏开关封死,原因是:
占用区块体积太大,影响交易吞吐量;
RNG 随机数验证同步复杂,易遭重放攻击;
“用户只想把钱发出去,没人关心牌桌上的 SHA 碰撞概率”—— Gavin Andresen 在 2010 年 7 月的邮件里这样解释。
于是我们能做的,只剩凝视一行永远注释在一起的趣味代码:伪随机 + 点对点德州扑克协议草案。
**Q1:流出的早期源码是真正 0.1.0 吗?**A:不是。公开版本大多可追溯到 2008 年 10 月至 11 月之间的私人分支,被称为 “pre-0.1.0”;于正式版的主要差异在于缺少 getwork RPC、没有 GUI 钱包界面。
**Q2:Blake-256 会比 SHA-256 更安全么?**A:就碰撞抵抗而言,两者在 2008 年的密码学界都属于二线候选。中本聪弃用 Blake-256 最大考量是 早期 ASIC 尚未针对 SHA-256 深挖硬件优化,更容易维持去中心化挖矿。
Q3:时间链改名为区块链,出于什么动机?A:Satoshi 在邮件里含糊提到“people outside the crypto circle feel chain of blocks is more intuitive”。大意是,为了让非密码学群体更易理解,才把时间链让位于区块链这一更贴近直觉的概念。
**Q4:如果保留扑克模块,会对今日生态造成哪些影响?**A:最大可能性是 链上博彩合法化各国监管更严,Gas 费竞争随之上升;同时玩家会以赌场交易为由,施压扩容与二层网络研究。
**Q5:源码里还有未曝光的黑科技吗?**A:资深开发者 Sergio Lerner 在静态分析里发现隐藏指令 OP_TUCK2 和 OP_ROLL3——它们似乎是早期 对智能合约原语 的一次试水,最终被删除。
👉 想亲手查看 0.1.0 前的动人细节?点这里去浏览原始仓库镜像。
除了 “satoshi” 我们耳熟能详之外,源码注释里还赫然写有:
// 1 BTC = 1'000'000 coin = 100'000'000 satoshi
// 1 coin = 100 cent
// 1 cent = 10,000 atom
这意味着:最初设计是比特币三级体系——BTC、coin、cent、atom。后期为了降低交流摩擦才浓缩为今天两级单位:BTC & satoshi。而那份多出来的 cent(1/100,000 BTC)与 atom(1/1,000,000,000 BTC)概念,像极了被撕下来的草稿页,静静地躺在注释里。
2009–2010 年间,中本聪累计提交了 0.3.19 版本,最后一次在论坛置顶提示:“请升级,修正了 DoS 漏洞。” 随后他染指尘封,ID 再未上线。今天我们用向量时钟穿越时空,看见的不仅是“区块链”一词的失落原名,也不仅是废弃扑克代码的残影,而是那个时代对 去中心化、隐私、金融自由 的集体想象。
如果你想再度触摸这些想象力,或许只能在屏幕前,把一行行注释拖到 IDE,静静编译那串 “Hello, timechain” 的程序。
