Jimmy Song是开发者、讲师,也是Programming Bitcoin的作者。他通过Python示例讲解Bitcoin交易、密钥和数字签名。方法很实际:读者不再只是依赖现成应用,而是逐步搭建小工具、观察结果。除了技术书籍,他也发表关于货币和社会的观点;这些论述需要的证据,与编程练习不同。
Song的个人简介介绍了开发工作和Programming Blockchain课程,O’Reilly也确认他是Programming Bitcoin的作者。贯穿其中的是亲自尝试:知道一个原理的名称,并不等于理解它。要写成程序,就必须弄清输入什么数据、应该得到什么结果。不过,“开发者”这个称呼本身不意味着Bitcoin Core维护者,也不赋予替其他用户决定网络规则的权力。 [1] [2]
O’Reilly于2019年出版Programming Bitcoin。书中先介绍有限域,也就是在有限的元素集合内按照严格规则进行计算,以及作为所讲签名方法数学基础的椭圆曲线。随后进入密钥、签名、交易和计算机之间的消息。读者用Python构建库,即可供其他程序使用的一组函数。因此,不必仅仅相信签名有效,而是可以跟着计算去理解。这是在认识钱包内部的工作方式,而不仅是操作按钮。 [2]
设想一个程序收到交易。首先,它要识别各个部分;这样拆解数据称为解析。普通交易输入引用之前的某个输出,也就是带有花费条件的一笔具体金额。接下来要检查条件是否满足,例如所需签名是否有效。但即使签名正确,也不能单凭这一点证明所引用的输出仍未花费;还需要对照链的状态。Song的练习由此区分数据是否可读、是否有花费授权,以及整笔交易是否有效。 [3]
数学结果正确很重要,但安全的签名程序还需要更多保障。libsecp256k1也处理使用秘密密钥时的恒定时间执行和内存访问方式,目的是避免观察者从计算行为中得知秘密信息。这与做对一道练习是不同的问题。因此,为理解原理而编写的代码,不能自动替代用于真实资金、经过审查的密码学库,即使两者都能正确验证同一份测试签名。 [4]
programmingbitcoin仓库提供各章材料和Jupyter Notebook说明;后者把文字、可执行代码与结果放在同一环境中。复现还取决于代码版本和依赖,也就是程序用到的其他软件包。旧安装说明并不自动成为今天的版本建议。记录环境,有助于解释结果为何不同;在别人的电脑上运行成功,不能代替检查自己的运行过程。 [5]
2019年的书为阅读更多文档打下基础,但不能假定它涵盖了之后所有扩展。例如,如今libsecp256k1也提供BIP340规定的Schnorr signatures,这是Bitcoin使用的另一种签名方案。读者需要区分某个版本的书讲了什么,以及当前库提供哪些功能。使用其接口,也就是调用函数的方法时,应查阅对应版本的文档。 [2] [4]
在2023年的Fiat Ruins Everything中,Song提出,fiat货币,也就是常见的国家货币,会深刻影响制度,而Bitcoin提供了一种补救办法。这里讨论的是作者对社会的解释,不是验证签名的程序。这一主张需要独立的论据和证据。做对密码学练习不能证明社会论点;不同意经济观点,也不能单独推翻技术解释。他的不同工作可以分别按相应证据来评价。 [6]
Song网站介绍如何用PGP数字签名工具和SHA-256文件指纹函数,验证带有亲笔签名的物品照片。指纹一致有助于确认拿到的是同一文件;有效签名把被签数据与某把密钥联系起来。密钥究竟属于谁,仍需另外证明。本次审阅时,页面对旧密钥和新密钥的标注不一致,因此我们不把其简短标识当作已验证身份转载。这提醒我们,核对数据与信任数据来源,是不同的步骤。 [7]
要获得更完整的理解,请将本词条与以下词条结合阅读: Alex Gladstein, Bitcoin Script, Private Key. 反向关联还来自: 平行城黑客大会, Cathie Wood.