区块链/等级 X · 回到原点/10.3 以比特币生活/课程 5
在比特币上构建应用
Regtest(回归测试)、描述符(Descriptors)以及公开审查的纪律性
材料运行了已下载并验证过的比特币核心软件的电脑比特币命令行工具参考(bitcoin-cli help)BIP 174与BIP 380的文档说明
好奇
- 为什么在比特币核心中,哪怕只是一行代码的修改,也需要经过数月的讨论才能最终推出稳定版本?
- 开发者如何在不危及真实资金、也不破坏主网络的情况下测试对共识至关重要的逻辑?
- 描述符与 PSBT 有什么区别?为何两者对现代钱包的开发都至关重要?
探索
- Bitcoin Core提供了两种主要的测试环境:regtest和Signet。Regtest允许开发人员无需进行工作量证明即可立即挖掘区块,因此非常适合用于单元测试以及共识规则的快速迭代。Signet(BIP 325)是一个公共测试网络,其区块必须由指定的签名者签署,这样就能保持稳定的区块生成时间,也不会因过高的算力而出现拥堵;它适合在无需使用真实资金的情况下测试与其他人的软件的兼容性。
- 远程过程调用(RPC)接口允许外部脚本访问 Bitcoin Core 的内部状态。开发者可通过 RPC 命令来操作区块链、查看交易记录,以及在测试环境中触发挖矿行为。这种编程方式对于那些需要直接与节点的数据结构进行交互、完全绕过图形用户界面的钱包软件来说至关重要。
- 描述符决定了如何将密钥转化为支出条件,而部分签名比特币交易则有助于实现多方签名流程。BIP 174对PSBT格式进行了标准化,使得硬件钱包、移动设备或服务器等不同实体能够在不暴露私钥的情况下为交易添加签名。将密钥管理与交易构建分开处理,对于构建安全的多方签名系统至关重要。
- 比特币开发工具包(BDK)与闪电网络开发工具包(LDK)为应用程序开发者简化了节点管理的复杂性。BDK是一个基于Rust语言开发的库,用于实现描述符式钱包,能够从Bitcoin Core、Electrum服务器或Esplora API读取区块链数据;而LDK则提供了适用于移动设备的轻量级闪电网络协议实现方案。这些工具包降低了开发比特币原生应用程序的门槛,无需深厚的系统编程知识即可使用。
- 公开审查是比特币安全机制的核心。通过拉取请求提出的修改方案会经过全球开发者社区的严格审核。PR Review Club通过定期组织会议,让贡献者逐行分析代码差异,从而推动这一流程的进行。这种集体智慧有助于发现那些细微的错误,并确保在采纳任何变更之前所有人都已充分理解其含义,这一过程与其他软件生态系统中的快速发布模式截然不同。
- 启动私有链:运行 bitcoind -regtest -daemon;使用 bitcoin-cli -regtest createwallet dev 创建一个钱包;然后通过 generatetoaddress 为该钱包的某个地址挖掘101个区块,从而使第一个币基交易成熟。使用 walletcreatefundedpsbt 构建支付信息,再用 decodepsbt 读取该信息,随后通过 walletprocesspsbt 签名并使用 sendrawtransaction 发送出去。再挖掘一个区块,等待其确认即可。
关键事实
- Regtest 允许在隔离测试环境中立即进行区块挖掘,无需工作量证明。
- Signet(BIP 325)区块必须由指定密钥签名,从而构建一个稳定的公共测试网络。
- BIP 174 定义了用于多方签名流程的部分签名比特币交易(PSBT)格式。
- BIP 380 中的脚本描述符为钱包定义了密钥派生路径及支出条件。
- 比特币开发工具包(BDK)是一个基于 Rust 的库,用于在多种链后端上构建基于描述符的钱包。
- 通过公开拉取请求审查,可确保所有变更在发布前都经过严格的多层审核。
练习 九、六、三、一
9收集找出比特币开发生态系统中的9个不同组成部分:regtest、signet、主网、RPC接口、描述符、PSBTs、BDK、LDK以及PR审查俱乐部。针对每一个组成部分,说明其在软件生命周期中的主要作用。
6归类根据功能将这9个组件分为6类:私有测试、公共测试、节点接口、钱包标准、开发库以及审查。
3提炼将这6个原则简化为指导比特币软件开发的3项核心原则:为保障安全而实现隔离、为确保兼容性而实行标准化,以及为维护安全而保持透明。
1凝结当硬件钱包无法直接连接到网络节点时,PSBT是必要的,因为它能够弥补这一连接缺陷。
事实核查
日期、数字及数据均依据下方列出的已发表资料进行核实。