news 2026/9/18 5:42:19

BNB Smart Chain(bsc)CHANGELOG 深度解读:从 Pasteur 硬分叉到版本升级运维指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
BNB Smart Chain(bsc)CHANGELOG 深度解读:从 Pasteur 硬分叉到版本升级运维指南

BNB Smart Chain(bsc)CHANGELOG 深度解读:从 Pasteur 硬分叉到版本升级运维指南

【免费下载链接】bscA BNB Smart Chain client based on the go-ethereum fork项目地址: https://gitcode.com/GitHub_Trending/bs/bsc

导读

本文以开源仓库 bsc(基于 go-ethereum 的 BNB Smart Chain 客户端)根目录的 CHANGELOG.md 为绝对主线,系统梳理 v1.0 至 v1.7.6 的版本演进脉络,重点展开最新 v1.7.6 Pasteur 硬分叉的共识与出块变更、v1.7.x 升级前的弃用标志检查清单、MEV 出块机制的源码实现,以及历史上各 BEP 驱动的关键演进。读者读完本文后,将能:① 看懂 BSC 版本号语义与硬分叉时间戳配置;② 依据 MetaInfo 完成一次安全的主网/测试网节点升级(重点处理弃用配置);③ 从源码层面理解 Parlia 共识、Fast Finality 投票、Blob 交易与 MEV 出块的实现位置,为后续源码研读建立索引。


一、版本发布节奏与版本号语义

CHANGELOG 从 v1.0.0-beta.0 一路记录到 v1.7.6,结合 README.md 的说明,bsc 采用三轨发布模型:

发布类型版本格式用途
Stable Releasev<Major>.<Minor>.<Patch>生产环境主推版本,如 v1.7.5
Feature Releasev<Major>.<Minor>.<Patch>-feature-<FeatureName>单特性早期访问,如v1.5.19-feature-SI
Preview Releasev<Major>.<Minor>.<Patch>-<alpha/beta/rc>前沿体验版本,如 v1.6.0-alpha、v1.6.1-beta

从 CHANGELOG 可以观察到清晰的节奏规律:

  • 主版本携带硬分叉:v1.7.0 同步 go-ethereum v1.16.7 并带来 Osaka 系列 EIP;v1.7.1/v1.7.2 落地 Osaka/Mendel 硬分叉;v1.7.6 落地 Pasteur 硬分叉。
  • 维护版本修 bug:v1.7.3、v1.7.4、v1.7.5 均为 maintenance release,其中 v1.7.3 重点修复在线区块修剪(block pruning)与 kvdb 异常持续增长问题。
  • 预览版本标识成熟度:v1.6.0-alpha 是上游同步预览版,v1.6.1-beta 表示修复了 alpha 若干问题、更可靠。

二、v1.7.6:Pasteur 硬分叉(Chapel 测试网)

v1.7.6 面向 BSC Chapel 测试网的 Pasteur 硬分叉(对应 BEP-673 中定义:

PasteurTime: newUint64(1784601000), // 2026-07-21 02:30:00 AM UTC

注意同一文件中主网PasteurTime仍为nil(params/config.go),表示主网尚未排期;而OsakaTime/MendelTime主网已配置为1777343400(2026-04-28),Chapel 为1774319400(2026-03-24),对应 CHANGELOG 中 v1.7.2(主网)与 v1.7.1(Chapel)的记录。PasteurTime字段在链配置结构体中的定义见 params/config.go,并注册进分叉列表osakaTime/mendelTime/pasteurTime(params/config.go)。

2.1 共识与系统合约变更

v1.7.6 的 Pasteur 相关合并:

  • 拒绝重复的 bridge validator(#3623 相关共识校验):在 Pasteur 硬分叉激活后,核心虚拟机层拒绝重复的 bridge validator,加固跨链桥验证者集合的合法性检查。
  • builder 提议区块 + validator 盲签(#3691,实现见 miner/bid_block.go):miner 支持 builder 提议的区块(BidBlock)由 validator 进行盲签名(blind signing),prepareBidBlockTask会先复制交易切片再绑定签名,避免修改缓存的 BidBlock。
  • 系统合约升级(#3721、#3727):UpgradeBuildInSystemContract的升级管线中新增 Pasteur 分支(core/systemcontracts/upgrade.go),pasteurUpgrade[network]指向 genesis-contract v1.2.6 的 CommitUrl。
  • 硬分叉激活块禁用 BidBlock(#3741):miner在硬分叉激活块禁用 BidBlock,防止激活瞬间的竞态。
  • 优化 BidBlock 签名哈希(#3742):对签名哈希计算进行优化。

2.2 配套修复

v1.7.6 同时包含一批稳健性修复,分布在多个模块:

模块修复内容
eth/handler.go增加 balance 校验(#3668)
eth/protocols/bsc/handler.goGetBlocksByRange响应按块数(MaxRequestRangeBlocksCount = 64)与软响应上限(softResponseLimit = 8MB)双重限流(#3671)
eth/protocols/bsc按投票数量而非包数量对入站投票限流(#3672)
internal/ethapigetProofskeys 数量上限、eth_simulateV1调用次数与 gas cap 修复(#3680-#3682)
core修复 reorg() 错误返回时的txLookupLock互斥锁泄漏(#3683)、RPC 中禁止状态刷新(#3684)
core/tracing修复 nonce 回滚边界情况(#3685)
eth/filters修复 pending tx 与新头订阅、NewVotes 等的竞态问题及过滤器资源泄漏(#3686、#3689、#3692)
cryptonocgoVerifySignature增加哈希长度校验(#3700)
p2p/discover读错误缓冲区拷贝、超时循环提前退出等修复(#3701-#3702、#3710)
eth/tracers修复 exclude 地址列表、OnSystemCall钩子透传(#3703、#3707)
triedb/pathdb修复零磁盘层 root 的 sentinel 冲突(#3706)
eth/downloader丢弃无效对等节点 + 修复 deliver index(#3708)
core/state修复 StateDB Reader 错误在 Commit 后被丢弃(#3709)
core/rawdb修复 freezer 错误路径的 fd 泄漏、copyFrom 先 fsync 临时文件再 rename(#3711-#3712)

改进类包括:减少一轮中最后一个块的本地出块时间(#3669)、提取VerifyUnsealedHeader(#3694,见 consensus/parlia)、为 BidBlock 增加验证指标(#3736)。

2.3 清理与重构

v1.7.6 移除了大量历史包袱:删除 pathdb 的 legacy 字段JournalFilePath(#3670)、移除可选交易 gas limit cap(#3678)、移除 BEP-592 非共识区块访问列表(#3690)、删除 multidb 代码(#3716)、清理 bep-592 bal key(#3720)、移除 txpool overflowpool(#3722)、移除 fake-beacon op-stack shim(#3728),并将 bid/block mev 信息提取为 builder 子包(#3739)。

三、v1.7.6 升级前的弃用标志检查清单(重点)

v1.7.6 的 MetaInfo 明确要求:Mandatory Update Required: Yes,面向所有 BSC 测试网用户。升级前必须逐项核对以下 CLI 标志与 TOML 配置,确认移除后不影响自身节点,再执行二进制替换即可。

3.1 CLI 标志

Flag变化说明
--journalfile弃用(无效果)需从启动脚本移除(#3670);源码中 cmd/utils/flags.go 已输出--journalfile is deprecated and has no effect警告,对应 legacy 标志定义见 cmd/utils/flags_legacy.go
--miner.txgaslimit弃用(无效果)单交易 gas 上限改由 EIP-7825(Transaction Gas Limit Cap)强制,移除前确认 EIP-7825 行为符合预期(#3678)
--enablebal弃用(无效果)BEP-592 区块访问列表已删除,可安全移除(#3690)
--multidatabase移除单数据库模式是唯一选项,需确认数据目录兼容(#3716)
--txpool.overflowpoolslots弃用(无效果)overflow pool 已移除,若依赖过它请复核 txpool 容量设置(#3722)
--fake-beacon/--fake-beacon.addr/--fake-beacon.port移除fake-beacon op-stack shim 已删除(#3728,回退 #2678)

3.2 配置文件(TOML)字段

字段变化说明
[Eth] EnableBAL移除——若保留将导致加载错误升级前必须从 config.toml 删除该字段(#3690)
[TxPool] OverflowPoolSlots弃用——静默忽略可保留但建议删除以保持配置整洁(#3722)

操作建议:升级前先用grep -i "journalfile\|txgaslimit\|enablebal\|multidatabase\|overflowpool\|fake-beacon" config.toml自检配置文件,再检查启动脚本中的对应标志;确认无误后直接替换二进制,无需重启数据目录。

四、v1.7.0–v1.7.5:Osaka/Mendel 硬分叉与维护期

4.1 v1.7.2(主网 Osaka/Mendel,2026-04-28)

对应 BEP-658,硬分叉时间 2026-04-28 02:30:00 AM UTC,与 params/config.go 中主网OsakaTime = MendelTime = 1777343400一致。本版本包含两项关键修复:miner 为 bids 支持 blob sidecar 验证(#3597)、eth 延迟 p2p 消息解码(#3590)、core 拒绝 DA 检查中的未来 chasing heads(#3601)。

4.2 v1.7.1(Chapel Osaka/Mendel,2026-03-24)

测试网先行落地(params/config.go),特性包括:BEP-655 bid block 大小检查(#3529)、BEP-652 mev bid gas 检查(#3528)、禁用 eip-7918(#3531)、BEP-657 按区块号限制 Blob 交易包含(#3533)。修复了 super-instruction 系列问题(#3582、#3584)与 rlp listIterator 解析错误死循环(#3586)等。

4.3 v1.7.0(上游代码同步,geth v1.16.2 ~ v1.16.7)

v1.7.0-alpha 为预览版,核心价值是同步 go-ethereum v1.16.7,带来的 Osaka 系列 EIP 直接解释了后续版本的硬分叉能力:

  • EIP-7823:MODEXP 设置上限
  • EIP-7825:交易 gas limit cap(v1.7.6 中--miner.txgaslimit弃用的依据)
  • EIP-7883:ModExp gas 成本上调
  • EIP-7918:Blob base fee 由执行成本约束
  • EIP-7934:RLP Execution Block Size Limit
  • EIP-7939:CLZ 操作码
  • EIP-7951:secp256r1 曲线预编译

同时引入eth_sendRawTransactionSync同步交易提交、TriePrefetcher 按账户并行预取、基于文件的状态日志(state journal)等性能与架构优化。

4.4 v1.7.3–v1.7.5(维护期)

  • v1.7.3:修复在线区块修剪(#3653 修复 freeze header-number shadowing)与 kvdb 异常持续增长(#3633 将SlowFreezerBatchLimit从 100 提升到 200);新特性--history.transactions(#3624)——归档节点默认禁用交易去索引,由该标志指定交易历史范围;history.logs默认值设为 576000(#3634,见 eth/ethconfig/config.go 中LogHistory: 576000)。
  • v1.7.4 / v1.7.5:维护发布,MetaInfo 为 Mandatory Update: No,直接二进制替换即可。

五、MEV 出块机制:从 BEP-652/655 到 Pasteur 盲签

CHANGELOG 中反复出现的 “bid / MEV / builder” 是 bsc 近几个版本的核心演进方向,源码集中在 miner 与 miner/bid_block.go:

  • BidBlock 数据结构:#3739 将 bid 与 block mev 信息抽离为 builder 子包(core/types/builder),setBidMevInfo依据isBidBlock写入BlockMevInfoVersionBidBlock(miner/bid_block.go)。
  • 投标选择selectBidBlock会比较本地模拟出块奖励与 builder 出价,只有 builder 出价高于本地模拟奖励才采纳(miner/bid_block.go),并配合revokeBidBlockBuilder惩罚无效 builder。
  • Blob 校验:v1.7.2 #3597 为 bids 增加 blob sidecar 验证,validateBidBlockBlobTxs检查 sidecars 与系统交易起始位置(miner/bid_block.go)。
  • 盲签名:v1.7.6 #3691 支持 builder 提议区块由 validator 盲签,prepareBidBlockTask在准入阶段先由 validator 通过SetExtraData定稿 Extra,再在 Seal 阶段填充(miner/bid_block.go)。
  • 相关演进:#3121 模拟前丢弃过期 bids、#3145 为 bids 模拟预取状态、#3204 仅在无错误时重新提交 bids、#3160/#3736 增加 mev/bid 模拟指标、#2971 过晚不中断本地出块。

六、快节奏出块(BEP-520/524/619)与网络层限流

BSC 的短区块间隔演进是版本节奏的重要驱动:BEP-520(1.5s,v1.5.9)、BEP-524(0.75s,v1.5.13)、BEP-619(0.45s,v1.6.2)。配合极短出块间隔,网络层做了大量限流与稳定性改造:

  • GetBlocksByRange 响应上限:#3671 将每请求块数限制为 64、软响应上限 8MB(eth/protocols/bsc/handler.go),防止超大响应拖垮磁盘查询与带宽。
  • 投票按数量限流:#3672 按投票数而非包数计费限流(eth/protocols/bsc/handler.go 附近的注释说明了这一设计),配套 peer 侧maxKnownVotes/voteBufferSize配置(eth/protocols/bsc/peer.go)。
  • 延迟 p2p 消息解码(#3590)与 450ms 块时序参数调优(#3626)都是为了压榨出块节奏的边际性能。

七、Fast Finality 与投票机制

BSC 的快速最终性(BEP-126,v1.2.0 引入)贯穿多版本:

  • v1.2.11 在 ethclient 增加FinalizedHeader/Block接口。
  • v1.2.10 增加 RPCGetFinalizedHeader/Block,简化快速最终性使用。
  • v1.6.2 落地 BEP-590(扩展投票规则提升稳定性),并设置kAncestorGenerationDepth = 3
  • v1.7.6 修复NewVotes/NewFinalizedHeaders订阅竞态(#3689)。
  • 代码层面,投票组装与校验集中在 consensus/parlia(如assembleVoteAttestationupdateAttestation),投票池在 core/vote(v1.3.3 修复 votepool 停止客户端时的死锁)。

八、状态存储演进:PBSS、Pebble、多数据库到单数据库

  • v1.3.1:激活 PBSS(path-based state scheme),并配套hbss2pbss转换工具(v1.6.1 移除)。
  • v1.4.3:翻转 hash→path 状态方案,Pebble 成为默认 kvdb。
  • v1.4.6/v1.4.16:支持区块数据分离数据库(multidatabase)并在 v1.4.16 修复其问题。
  • v1.5.18-v1.6.x:逐步收窄 multidatabase(#3208 禁用 multidatabase 的 blockstore)。
  • v1.7.6:彻底移除 multidb 代码(#3716),同时移除--multidatabase标志与 pathdb 的JournalFilePathlegacy 字段——单数据库时代正式到来。

九、常见升级操作速查(MetaInfo 汇总)

版本强制升级目标用户操作
v1.7.6全部 BSC 测试网用户先核对弃用标志/配置(见第三节),后替换二进制
v1.7.5 / v1.7.4全部主网/测试网直接替换二进制
v1.7.3全部主网/测试网直接替换二进制;从 v1.6.x 升级需确保配置无JournalFileEnabled字段
v1.7.2硬分叉版本主网在 2026-04-28 前完成升级
v1.7.1硬分叉版本Chapel 测试网在 2026-03-24 前完成升级

通用原则:硬分叉版本必须在时间戳前完成二进制替换;维护版本可直接替换;任何跨大版本升级(如 v1.6.x → v1.7.x)建议先检查配置文件中是否有已移除字段。

十、结语与进一步阅读

通过 CHANGELOG 可以完整复盘 BSC 客户端从 v1.0 到 v1.7.6 的演进:上游 geth 同步(v1.5.x/v1.6.x/v1.7.0)、EIP/BEP 落地(Osaka/Mendel/Pasteur)、出块间隔不断压缩(1.5s→0.75s→0.45s)、MEV 出块从试验到盲签正式化、存储从多数据库回归单数据库。若需深入某一机制,可按以下路径继续阅读仓库源码:

  • 链配置与硬分叉时间:查看 params/config.go 与 params/network_params.go
  • Parlia 共识:查看 consensus/parlia
  • MEV/BidBlock:查看 miner/bid_block.go 与 miner/miner_mev.go
  • 系统合约升级管线:查看 core/systemcontracts/upgrade.go
  • BSC 扩展协议与限流:查看 eth/protocols/bsc/handler.go
  • 状态存储:查看 triedb/pathdb 与 ethdb/pebble

【免费下载链接】bscA BNB Smart Chain client based on the go-ethereum fork项目地址: https://gitcode.com/GitHub_Trending/bs/bsc

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/18 5:40:27

AI Agent 触达层设计与实践:连接、控制与可观测

最近一段时间&#xff0c;AI Agent 这个概念被炒得火热&#xff0c;各大团队都在做自己的智能体应用。但聊得多了你会发现&#xff0c;真正落地的瓶颈往往不在模型本身&#xff0c;而在于 Agent 的“触达能力”——它能不能稳定、安全、可控地触达外部工具、内部系统、第三方服…

作者头像 李华
网站建设 2026/9/18 5:39:42

Hadoop完全分布式集群搭建实战:从原理到故障排查

先交代一个前提&#xff1a;我写这篇东西不是让你照着敲一遍命令就完事&#xff0c;而是希望你理解每一步到底在干什么。Hadoop完全分布式搭建这件事&#xff0c;网上教程满天飞&#xff0c;但很多人照着抄完还是起不来&#xff0c;或者起来了一次、重启就挂了。原因基本都一样…

作者头像 李华
网站建设 2026/9/18 5:37:08

oh-my-hermes:打造高效顺手的命令行工具链增强层

在终端里泡了这么多年&#xff0c;我一直觉得工具链的打磨是最不该偷懒的事。前阵子折腾完服务器上的环境配置&#xff0c;顺手把本地的开发环境也彻查了一遍&#xff0c;发现真正影响效率的往往不是编辑器或框架&#xff0c;而是每天要敲几百次的命令行本身。今天想和你聊聊一…

作者头像 李华
网站建设 2026/9/18 5:37:06

内容行业四大认知误区与破解策略

1. 行业现状与认知误区概述在内容创作领域深耕多年&#xff0c;我发现从业者普遍存在几个根深蒂固的认知偏差。这些误区就像隐形的地雷&#xff0c;常常导致项目投入产出比失衡、资源错配甚至商业失败。最近参与的几个出版与短剧项目复盘会上&#xff0c;团队反复争论的焦点问题…

作者头像 李华