运行 v0.7 及更早版本的 Bitcoin Core

互联网 阅读 493 2024-05-07 15:58:31

作者:Jameson Lopp

来源:https://blog.lopp.net/running-bitcoin-core-v0-7-and-earlier/

Running Bitcoin Core v0.7 and Earlier

本文是我对所有 Bitcoin Core 发行版本的历史同步性能的研究的其中一个结果,也是构建真正老旧的版本的挑战(难以找到编译好的二进制文件)的成果。

注意,如果你计划使用这些版本的 Bitcoin Core 来同步区块链,你会用得很艰难。我不是第一个探究这件事情的人:在研究期间,我发现,Sjors Provoost 曾在 2017 年运行类似的实验,也有文字记录。

旧版 Bitcoin Core 客户端的性能 – Sjors Provoost

探究同步过程中的错误

没有一个 v0.8.0 以前的版本可以同步到现在的链顶端,里面的原因多种多样。

v 0.3:在区块高度 12 4275 处停止同步,传出这个错误:

ERROR: ConnectInputs() : fb0a1d8d34 VerifySignature failed
InvalidChainFound: invalid block=0000000000004939267f 
height=124276  work=6613870563198902508

乍一看,这并不是一笔特别奇怪的交易。但是,如果我们检查这个比特币地址的花费历史,我们可以看到花费者构造过好几笔奇怪的交易,有几百个 “0 价值” 的输出。可以不夸张地假设,这是一个技术人员在尝试破坏网络。

最后,让我惊讶的是这个输入的签名的大小。75 字节是签名的最大上限,大部分 P2PKH 的交易的签名都是 71 ~ 73 字节。

img

你可以通过下面这篇文章来了解比特币交易签名的历史;要指出的是,如果你尝试使用更新版本的 OpenSSL(1.0.0p / 1.0.1k)来验证早期链上出现的签名,你会遇到错误,因为 DER 验证更加严格而且会拒绝特定类型的编码。

比特币中的签名体积的变化(中文译本)

解决方法是:要么使用一个更旧版本的 OpenSSL 来构建 Bitcoin Core,要么在开始构建之间手动应用这个代码补丁。一开始我有些困惑,因为 gitian builder 使用 Ubuntu 10.04 虚拟机作为构建环境,我以为应该是搭配了较老的(兼容)版本的 OpenSSL 的 …… 但是,Andrew Chow 指出,他们在 2015 年向后移植(backport)了这个 OpenSSL 补丁。

v0.4 和 v0.5 都在区块高度 25 8354 处停止了同步,传出错误:

EXCEPTION: 11DbException       
Db::put: Cannot allocate memory       
bitcoin in ProcessMessage()       
ProcessMessage(block, 901212 bytes) FAILED
received block 0000000000000023e872REORGANIZE

这是值得注意的,因为看起来 25 8355 是第一个达到 900 KB 大小的区块;在此之前,几乎所有挖出的区块都只达到 250KB 的默认 “软顶”。

v0.6 在区块高度 36 4670 处停止同步,并传出错误:

EXCEPTION: 11DbException       
Db::put: Cannot allocate memory       
bitcoin in ProcessMessages()       
ProcessMessage(block, 999787 bytes) FAILED
received block 000000000000000001d3

这也有类似的地方,因为看起来区块 36 4671 是第一个达到 1MB 的区块。

v0.7 在同一区块停止同步,但报错日志不同:

received block 00000000000000000221ERROR: ConnectBlock() : UpdateTxIndex failed
InvalidChainFound: invalid block=00000000000000000221  height=364671ERROR: SetBestChain() : SetBestChainInner failed
ERROR: AcceptBlock() : AddToBlockIndex failed
ERROR: ProcessBlock() : AcceptBlock FAILED

我猜测 v0.4 ~ v0.7 都是因为相同的原因而停止的,但那是什么原因呢?是 “BDB 锁问题”吗(该问题导致 2013 年出现了一次意料之外的链分裂)?根据这些指令,我尝试创建一个文件 ~/.bitcoin/DB_CONFIG :

set_lg_dir database
set_lk_max_locks 537000

但每个版本都依然卡在相同的区块高度。事实证明,你需要配置 set_lk_max_objects ,而且,最初的推荐数值(537000)还不够高(如果你想同步到区块 70 0000 的话)。下面的 ~/.bitcoin/DB_CONFIG数值对我的机器奏效了:

set_lg_dir database
set_lk_max_locks 1000000set_lk_max_objects 1000000

性能结果

你可以看我的粗糙同步结果。

img

你几乎看不见关于 v0.3 的数据,因为它跟 v0.4 和 v0.5 几乎一模一样,最终都在区块高度 12 4000 处崩溃。下面是一个对数版本,可以看得更清楚一些。

img

值得一提的是,在区块 19 0000 处有一个转折点,从此处开始,v0.4 的性能开始好于 v0.5。我把握最大的猜测是,这是 “检查点” 的结果。Bitcoin 0.3.2 引入了一种叫做 “检查点” 的机制来保证新的全节点不会在初期区块下载期间花费大量时间来验证不在已知最佳链上的竞争区块,从而阻止拒绝服务式攻击。

Bitcoin 0.5.0 基于这些检查点来加速同步,办法是跳过最近的检查点以前的区块链上的签名验证。你可能会说,“你没搞错吧?你不是可以通过配置 assumevalid=0 来强迫节点验证所有签名吗?”确实可以,但这个设定对早于 v0.14 的 Bitcoin Core 没有任何作用。(v0.14 是这个配置参数第一次引入。)

因此,我认为,v0.5 整体上比 v0.4 要更慢,而且,早期的同步性能测试实际上是 作弊/不公平的比较。

老版本 vs. 新版本

那么,最新的 v22 版本与这些老版本相比,性能上有多大提升呢?

同步到区块 12 4000:

  • v22 比 v0.3 快 17 倍

这些区块都是空的,所以性能上的差别不是那么明显,但若同步了更多区块链,就会显著起来。

同步到区块高度 25 8000:

  • v22 比 v0.4 快 77 倍

  • v22 比 v0.5 快 83 倍

同步到区块 36 4000:

  • v22 比 v0.6 快 40 倍

  • v22 比 v0.7 快 38 倍

前向兼容性很难

你可能经常听到一种说法:你可以运行非常老旧版本的比特币软件,它依然能跟现在的网络兼容。当然,真正的答案要复杂得多、微妙得多。为了让很老版本的比特币软件同步到现在的链顶端,你需要对软件作一些变更。另一个棘手的地方是,如你缩减,并非所有在共识上重要的代码都是由比特币开发者编写的 —— 有些时候是第三方的库,而且这些库也会随时间变更,从而让软件构建的流程自身变成可能导致共识失败的原因!

(完)

免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: 比特币文化
上一篇:理解比特币 Miniscript(一):Script 何以难用 下一篇:《精通比特币(第三版)》发布

相关资讯

  • 我的一张大字报——为什么我要旗帜鲜明的批判BITTENSOR
    我的一张大字报——为什么我要旗帜鲜明的批判BITTENSOR

    BITTENSER是一种伪装成AI coin的memecoin,市值最高,但项目存在资源浪费、逻辑漏洞、虚假数据,抛售风险大。官方允许子网所有者操控奖励分配,验证者和矿工之间存在密切关系。平台提供交易工具,但存在问题。创始人发布了Kusanagi网络,但因共识问题暂停,计划在2023年发布Finney主网。Opentensor Foundation暂停Kusanagi,迁移到Nakamoto,计划在2023年发布Finney测试网。2023年3月发布Finney主网,BTLM是30亿参数语言模型,兼容移动

    每日资讯 2024-05-19 21:01 860
  • 探索自治世界:数字物理法则和自然可组合性
    探索自治世界:数字物理法则和自然可组合性

    本文总结了笔者在AW/FOCG领域实践的经验和思考,包括自治世界的起源、定义和现状,自治世界与全链游戏的关系,以及最具原语性的自治世界PixeLAW及其Solidity实现。还分享了智能合约的可组合性和互操作性。详细内容可在链接中查看。.....

    每日资讯 2024-05-19 18:01 230
  • 又到一年519,币圈惨案大盘点!
    又到一年519,币圈惨案大盘点!

    币圈老韭菜经历过多次暴跌事件,包括门头沟、94、312、519、LUNA/FTX暴雷,提醒投资需谨慎。这些事件导致比特币价格大幅下跌,引发投资者信任危机。加密市场发展中也出现了多次挑战,但仍有发展前景。然而,加密市场最大的敌人是自身,管理不善可能导致市场崩溃。投资者应谨慎对待加密投资,避免重蹈覆辙。.....

    每日资讯 2024-05-19 18:01 177
  • 伟大的脚本恢复:比特币的前进之路
    伟大的脚本恢复:比特币的前进之路

    Rusty Russell提出“伟大的脚本恢复”提案,旨在恢复比特币最初设计的完整脚本语言,以支持未来可能的安全用例。过去几年来,提案都是为了增加可扩展性或改进小功能,导致讨论没有取得进展。该提案的价值在于审视功能需求,而不是恢复所有功能,为未来的发展方向提供可能性。这是一个积极的变化,可以帮助我们决定未来的路线。.....

    每日资讯 2024-05-19 18:01 821
  • Farcaster/FT/UXLINK/Cyber,如何寻找Socialfi的北极星指标
    Farcaster/FT/UXLINK/Cyber,如何寻找Socialfi的北极星指标

    社交产品旨在帮助用户建立社交关系、传递信息和拓展社交网络。Web3的社交产品具有金融化特点,如何基于社交网络发行资产是其核心。本文分析了几款发展良好的SocialFi产品,如Farcaster、FriendTech、UXLINK和CyberConnect,探讨了它们的增长路径。其中,UXLINK是最火爆的区块链社交基础设施,活跃钱包数量高达729.5k。未来,可以关注基于熟人社交网络的资产发行。.....

    每日资讯 2024-05-19 11:01 204
  • 一览检查代币是否为诈骗的8种方法
    一览检查代币是否为诈骗的8种方法

    本文介绍了八种方法来识别区块链项目中的诈骗,包括验证代币合法性、检查代码、查看评论、比对黑名单、检查流动性和使用第三方工具。使用DEX时,要检查交易量、交易笔数和用户数量。使用第三方工具可以帮助评估代币的真实价值。遵循这些建议可以避免被骗取资金。.....

    每日资讯 2024-05-19 11:01 579
  • Farcaster:SocialFi板块领导者
    Farcaster:SocialFi板块领导者

    Farcaster是一个去中心化的社交网络协议,通过智能合约和混合存储技术实现用户之间的社交连接、内容分享和数据所有权。它的团队具有强大的行业背景,项目运行速度快,用户体验好。与其他SocialFi项目相比,Farcaster具有更多的能力和优势,使得用户更容易接受和使用。Farcaster的生态系统包括70%的代币分发给社区,15%分配给流动性池,剩余的15%将分配给团队、投资者和生态系统。Farcaster通过独特的框架和Frames插件,改变了传统SocialFi项目的数据存储方式,成为Social

    每日资讯 2024-05-19 11:01 969
  • Glassnode链上周报:跨多个时间框架识别卖方疲劳
    Glassnode链上周报:跨多个时间框架识别卖方疲劳

    长期投资者在牛市中获利,损失主要来自短期持有者。我们使用年龄分解指标来描述日交易者和每周-每月投资者群体中的卖方疲劳情况,并利用链上指标评估目标投资者群体的未实现和实现亏损。市场转折点从内向外展开,利用卖方疲劳框架识别修正和整合期间的转折点。通过评估MVRV比率、SOPR和实现亏损,我们可以识别卖方疲劳的时期。新发布的细分指标帮助我们隔离出个别投资者子集,并通过三个链上指标来识别微型投降点。该框架帮助我们思考在识别卖方疲劳点时应该看到的激励和行为。.....

    每日资讯 2024-05-19 11:01 230