news 2026/10/15 17:35:21

Parity-Ethereum 2.0 系列版本演进全解析:从 1.x 大改版到 Constantinople 硬分叉支持

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Parity-Ethereum 2.0 系列版本演进全解析:从 1.x 大改版到 Constantinople 硬分叉支持
  • 区块链

【免费下载链接】parity-ethereum

The fast, light, and robust client for Ethereum-like networks.

项目地址:https://gitcode.com/gh_mirrors/pa/parity-ethereum
点击查看免费下载

本文基于 docs/CHANGELOG-2.0.md(Parity-Ethereum 2.0 系列完整变更日志)整理。该文档记录了 Parity 客户端在 2018 年 7 月至 10 月间的 2.0.0 → 2.0.9 共 10 个版本的关键演进:客户端更名、Parity Wallet 与 DApps 子系统移除、EIP 系列(145/1014/1052/1234/1283)与 Constantinople 硬分叉支持、交易队列(Transaction Queue)重构、Warp 同步与快照机制改进等。结合当前仓库源码(ethcore/res/ethereum/foundation.json、parity/cli/mod.rs、ethcore/engines/authority-round/src/lib.rs 等)进行深度佐证,帮助开发者理解 2.0 系列的技术脉络、升级注意事项与关键配置参数。

EOL 提示:Parity Ethereum 2.0 已于2018-11-15达到 End-of-Life(EOL),本文内容属于历史版本技术存档,仅供理解当时的设计决策与升级路径使用。


一、2.0 大版本的背景:一次"减负式"架构重构

1.1 客户端更名:从 Parity 到 Parity-Ethereum

v2.0.0 的首要变化是命名:客户端正式更名为Parity-Ethereum,以区别于同一团队推出的 Parity-Bitcoin、Parity-Polkadot 等其他软件(PR #9052 的构建脚本与 parity 主程序目录均以 parity-ethereum 为基准组织。

1.2 大范围功能裁减:Wallet、DApps、安装包、校验方式全面调整

2.0.0 是一次"主动瘦身"的破坏性版本,文档明确列出以下 breaking changes,升级前必须逐条核对:

变更项说明对应 PR
移除公共节点(Public Node)与用户界面(Parity Wallet)钱包与 UI 从客户端中完全移除,如需继续使用请使用独立的 Parity-JS/shell 桌面应用#8758、#8783、#8641
DApps 子系统完全移除客户端不再内置 DApps 托管与注入逻辑,相关权限设置也一并删除#9017、#9107
Windows / macOS 不再提供安装包与系统托盘只能从镜像获取二进制;macOS 用户建议使用 homebrew tap#8778
Linux 不再提供 deb / rpm 包由社区自行打包维护(如 Arch Linux 社区包)#8887
MD5 校验和全面替换为 SHA256官网与发布物均使用 SHA256#8884
废弃 CLI 参数从--help中隐藏旧参数仍可用但不再显示,以抑制继续使用#8967

从源码结构可以印证 DApps 移除的结果:当前仓库的 RPC 层(rpc/src/v1)已没有任何 dapps 相关的 RPC 模块,AccountProvider中也取消了按 dapps 策略返回账户的逻辑——正如 v2.1.0 文档所述,"JSON-RPC 中所有可用账户都会被返回,与请求来源无关"。

1.3 库化与 C 接口:Parity-Ethereum 作为库

v2.0.0 的另一重要变化是Parity-Ethereum 作为库(library)提供 API,可用于运行全节点与轻节点,并提供一个C 接口(#8412 即暴露了 ethcore 的公共 API,而 evmbin 等工具则展示了如何将核心组件作为库复用来构建独立二进制。


二、Constantinople 硬分叉支持:2.0.7 / 2.0.8 的核心主线

2.1 分叉时间表与强制升级要求

v2.0.7(2018-10-11)宣布引入Constantinople支持,文档给出的分叉计划为:

  • Ropsten 测试网:区块4_230_000(2018-10-14,Constantinople)
  • POA Core 主网:区块5_329_160(2018-10-22,CORE HF 2)
  • Kovan 测试网:区块9_200_000(2018-10-25,Constantinople + KIP-{4,6})

文档明确:运行上述任一网络的节点,升级到 2.0.7 或 2.1.2 是强制性的。而 v2.0.8(2018-10-16)则是一个修复 Constantinople 共识问题的关键安全版本——文档特别强调:"无论你连接的是哪个计划启用 EIP-1283 的网络(如 Ropsten、Kovan、Ethereum),都必须升级"。这正是因为 v2.0.8 引入了EIP-1283 的 SSTORE 净 Gas 计量修复(见下文)。

2.2 Constantinople 涉及的 EIP 清单与源码印证

文档列出了 2.0.7 中为 Constantinople 实现的 EIP 系列,逐一对应源码如下:

EIP内容仓库中的落地位置
EIP-1234推迟难度炸弹 + 区块奖励降至 2 ETHethcore/engines/ethash/src/lib.rs
EIP-1052EXTCODEHASH操作码ethcore/machine/src/executive.rs(EXTCODEHASH 执行)
EIP-1014CREATE2操作码(含 transition 配置标志)ethcore/evm/src(CREATE2 解释执行)
EIP-145EVM 位位移指令(SHL/SHR/SAR)ethcore/evm/src/instructions.rs
EIP-1283SSTORE 净 Gas 计量(不依赖 dirty maps 的实现)ethcore/machine/src/externalities.rs(sstore_clears_refund等)
KIP-4 / KIP-6WASM 运行时支持create2与gasleftethcore/wasm/src/runtime.rs

以主网链规约 ethcore/res/ethereum/foundation.json 为例,可以直观看到 Constantinople 在链规约中的表达方式:

{ "name": "Ethereum", "engine": { "Ethash": { "params": { "blockReward": { "0x0": "0x4563918244f40000", "0x42ae50": "0x29a2241af62c0000", "0x6f1580": "0x1bc16d674ec80000" }, "difficultyBombDelays": { "0x42ae50": "0x2dc6c0", "0x6f1580": "0x1e8480", "0x8c6180": "0x3d0900" } } } }, "params": { "eip145Transition": "0x6f1580", "eip1014Transition": "0x6f1580", "eip1052Transition": "0x6f1580", "eip1283Transition": "0x0" } }

解读这段配置:

  • 0x6f1580=7_280_000,正是以太坊主网 Constantinople 激活区块号;
  • blockReward采用按区块号映射的多值结构:0x0(5 ETH)→0x42ae50(Byzantium,3 ETH)→0x6f1580(Constantinople,2 ETH),这正是文档所说"Allow zero chain id in EIP155 signing process"时期同步引入的multi blockReward设计;
  • difficultyBombDelays同样是多值映射,对应 EIP-1234 对难度炸弹的阶段性延迟;
  • 测试链规约 ethcore/res/ethereum/constantinople_test.json 中,上述四个 EIP 的 transition 全部为0x0(即创世即启用),用于在测试环境全量开启 Constantinople 特性。

2.3 EIP-1283 的共识修复与 signed sstore refund(2.0.8)

v2.0.8 的关键修复是"Use signed 256-bit integer for sstore gas refund substate"(PR #9746)。EIP-1283 的净 Gas 计量引入了一个共识层面极易出错的点:SSTORE 的退款(refund)累计值可能为负,若使用无符号整数表示会造成溢出并导致区块状态不一致。改用 signed 256-bit 整数后,退款子状态能够正确表达"净退款为负"的场景,从而修复了 Constantinople 早期实现中的共识问题——这就是文档强调"升级是强制性的"的根本原因。


三、交易队列(Transaction Queue)重构:升级 1.x 用户的必读

文档专门为"从 1.10.9 及更早版本直接升级"的用户列出了交易队列实现的重要变化:

3.1 按发送者限流(per-sender limit)

  • 交易池现在限制每个发送者的交易数量,对应 CLI 参数--tx-queue-per-sender;
  • 本地交易也必须遵守该限制。文档建议:在做基准测试或需要一次性发送大量交易时,通过 CLI 提高该限制。

CLI 定义位于 parity/cli/mod.rs:

--tx-queue-per-sender=[LIMIT] Maximum number of transactions per sender in the queue. By default it's 1% of the entire queue, but not less than 16.

即默认值为整池大小的 1%,下限 16 笔。

3.2 池满时的优先级变化

文档提醒第二个行为变化:

若交易池已满,从网络收到的、但发起账户是你持有私钥的交易,不再自动获得更高优先级进入池中。

应对方案有两种:

  1. 运行更大的池(--tx-queue-size,默认8192,见 parity/cli/mod.rs);
  2. 直接通过节点的eth_sendRawTransaction提交交易(本地路径仍享有优先)。

3.3 相关的交易队列参数总览

结合 parity/cli/mod.rs 与配置文件 parity/cli/tests/config.full.toml,2.0 系列交易队列相关的核心参数如下:

参数默认值说明
--tx-queue-size=[LIMIT]8192队列中等待被打包的交易数量上限
--tx-queue-per-sender=[LIMIT]队列的 1%(≥16)每个发送者的交易数上限
--tx-queue-strategy=[S]gas_price交易排序策略(按 gas 价格优先)
--tx-queue-no-early-rejectfalse禁用"低于最低有效 gas 价即提前拒绝"的优化,允许本地交易在池满时仍可入池,但代价是每笔交易都需要额外的 ecrecover
--tx-queue-mem-limit=[MB]—交易队列内存上限,0表示不限制
--tx-queue-no-unfamiliar-localsfalse通过 JSON-RPC(HTTP/WebSocket)发送的本地交易,若发送账户未知则视为"外部"交易

其中--tx-queue-no-early-reject是 v2.0.0 时期新增(PR #9143),配合"本地交易不丢弃、不同发送者的本地交易永不丢弃"(#9002)等策略,共同构成了 2.0 系列更精细的本地交易保护机制。

3.4 其他交易相关改进

v2.0.0 还包含一批交易处理相关的优化,文档均有提及:

  • 允许 EIP-155 签名过程中 chain id 为 0(v2.0.9,PR #9792);
  • 事务 RLP 大小超限(300 kB)返回错误而不是静默处理(#8473);
  • "最近被拒绝"缓存用于交易队列(recently rejected cache,#9005);
  • 交易传播窗口扩展为未来 4 个区块,并移除每包最多 64 笔交易的限制,改为按 8MB 包大小控制(v2.0.3,#9265)。

四、Gas 目标与上限默认值调整(2.0.5 起)

v2.0.5 起,文档明确两项默认值变更:

  • 默认gas_floor_target提高到8_000_000
  • 默认gas_cap提高到10_000_000

在 parity/cli/mod.rs 中可以看到对应定义:

ARG arg_gas_floor_target: (String) = "8000000" ARG arg_gas_cap: (String) = "10000000"

这两个参数分别控制区块的 gas 下限目标(矿工尽力将区块填充至该水位)与单区块 gas 上限(打包交易时的硬性上限),2.0.5 将其整体抬升以适配当时不断增长的网络需求(PR #9564)。


五、Warp 同步(快照同步)机制的增强

2.0 系列对 Warp sync(基于快照的快速同步)做了多项实质性改进,文档列举如下:

5.1 可恢复(resumable)Warp 同步

v2.0.0 引入:Warp 同步可恢复——客户端重启后,已下载的快照分块(chunks)会保留,无需从头开始;同时,节点会将自己已下载的快照分享给其他节点(seeding)(#8544)。

5.2 强制 Warp 屏障:--warp-barrier

v2.0.0 新增--warp-barrier [blocknumber]标志,用于强制只进行 warp 同步(#8228)。CLI 帮助文本(parity/cli/mod.rs)描述为:

--warp-barrier=[NUM] When warp enabled never attempt regular sync before warping to block NUM.

即:启用后,节点在 warp 到指定区块之前绝不尝试常规同步。在 parity/configuration.rs 中,该参数被直接透传至网络配置:

warp_barrier: self.args.arg_warp_barrier,

5.3 随机抓取快照分块的修复

v2.0.0 修复了 "Don't fetch snapshot chunks at random"(#9088(快照的 chunk 写入与读取、进度跟踪均在service.rs、io.rs中)。


六、多线程快照创建:--snapshot-threads(2.1 系列前瞻)

虽然--snapshot-threads的正式发布说明出现在 v2.1.0 的变更日志中,但其源码实现与本 2.0 系列共享同一代码路径(PR #9239),且在 2.0.x 维护周期内已并入主线,值得一并说明:

  • 默认线程数:物理 CPU 核数的一半(下限 1);
  • CLI 参数:--snapshot-threads=[NUM],帮助文本为 "Enables multiple threads for snapshots creation."(parity/cli/mod.rs);
  • 配置结构:SnapshotConfiguration.processing_threads,默认实现见 ethcore/snapshot/src/lib.rs:
pub struct SnapshotConfiguration { /// If `true`, no periodic snapshots will be created pub no_periodic: bool, /// Number of threads for creating snapshots pub processing_threads: usize, } impl Default for SnapshotConfiguration { fn default() -> Self { SnapshotConfiguration { no_periodic: false, processing_threads: ::std::cmp::max(1, num_cpus::get_physical() / 2), } } }
  • 执行逻辑:take_snapshot中线程数被限制在1..=SNAPSHOT_SUBPARTS之间,状态分区(state subparts)按thread_idx..SNAPSHOT_SUBPARTS.step_by(num_threads)的方式分摊给各 worker 线程并行分块(ethcore/snapshot/src/lib.rs)。相关配置在 parity/configuration.rs 中接入 CLI。

七、PoA / Aura 引擎相关修复

7.1 空步骤(empty steps)相关(2.0.x 维护期)

v2.0.4 修复了"在启用 empty steps 的 PoA 网络中,不报告跳过的 primaries"(#9435);v2.0.1 则为 Aura 难度验证增加了更宽松的处理("Be more graceful on Aura difficulty validation",#9164),并附带了rejects_step_backwards、proposer_switching、rejects_future_block、reports_skipped、verify_empty_seal_steps等一组测试。

注:完整的strict empty steps严格校验(拒绝重复/乱序的空步骤)在 v2.1.10 中才作为strict_empty_steps_transition正式启用,但其核心验证逻辑(按步骤号升序、去重、parent_hash 与签名校验)已沉淀在 ethcore/engines/authority-round/src/lib.rs,并配有should_reject_duplicate_empty_steps、should_reject_unordered_empty_steps等回归测试。

7.2 区块奖励合约(block reward contract)

v2.0.0 支持了链上合约计算区块奖励(#8419 等合约资源与 ethcore/machine/src 中的区块奖励应用逻辑(block_reward相关代码)即为佐证。v2.1.x 进一步将其泛化为blockReward多值配置与blockRewardContractCode(#9480),允许链直接内嵌奖励合约字节码而无需维护内置多值方案。


八、轻客户端(Light Client)与 RPC 改进

8.1 eth_coinbase 行为修正

v2.0.4 修复:eth_coinbase现在为轻客户端提供真实账户(此前固定返回零地址)(#9383)。同时统一了全节点与轻节点的错误处理:全节点在无账户时返回错误而非零地址。注意 v2.1.0 文档特别提醒:轻客户端与全客户端在此行为上仍存在差异——轻客户端在找不到账户时返回0x0地址,而全客户端返回错误。

8.2 轻模式下的 eth_getLogs 支持

v2.0.3 为轻客户端增强了eth_getLogs(#9186(on_demand 请求与 provider 逻辑)。

8.3 eth_getWork 的同步状态检查

v2.0.3 起,eth_getWork在节点未同步完成时返回错误(#9193 / #9210),避免矿工在未同步状态下获取无效工作;v2.0.4 进一步将其限定为warp 同步中也返回错误("Only check warp syncing for eth_getWork",#9484)。

8.4 其他 RPC 相关

  • net_version缓存 network_id,避免重复获取同步读锁(v2.0.5,#9544);
  • net_peerCount使用小写十六进制格式输出(同 PR);
  • RPC 请求大小上限可配置("Add option for user to set max size limit for RPC requests",#9010);
  • 本地调用(local calls)的 gas 上限被限制(#8943);
  • 交易哈希补全到trace_replayBlockTransactions结果(#8883);
  • 区块 0 在查询中被视为合法("Block 0 is valid in queries",#8891)。

九、网络与 P2P 层的稳健性改进

v2.0.x 在 P2P 层投入了大量稳定性工作,文档重点提及:

9.1 发现协议(Discovery)优化

v2.0.5 的 "Improve P2P discovery"(#9526)包含一系列关键调整:

  • 主同步期间不移除 discovery peer;
  • 更频繁地刷新发现表,节点不足时提高发现频率;
  • 提前启动首次发现;
  • 新增 PingPong 回合并校验 pong 包的 echo hash;
  • FindNode 请求跟踪超时,对失败的 ping 采用指数退避重试(指数退避逻辑在 v2.0.0 的 PR #8771 中已实现);
  • 只有收到 pong 后才把节点加入路由表——这是对"未确认端点存活即入表"问题的直接修复。

相关代码位于 util/network-devp2p/src(UDP 发现、节点表排序)与 util/network/src。

9.2 分叉与同步问题修复

  • 修复与分叉区块之后链上节点的连接问题(#8710);
  • 允许从难度低于本地同步难度的 peer 下载旧区块(v2.0.3,#9226);
  • 防止导入队列满时重启同步(#9381);
  • 修复 Kademlia XOR 距离计算错误(#8589);
  • 处理 UselessPeer 断连(#8686);
  • 同步响应与请求的对应校验("Verify block syncing responses against requests",v2.1.2 同步回 2.0.x,#9670)。

十、发行与分发(Distribution)相关变更

v2.0.7 的发布说明列出以下二进制分发层面的弃用,对运维部署有直接影响:

  • arm*目标不再由 parity 提供二进制,请考虑自行(交叉)编译;
  • i*86目标不再提供二进制,请考虑升级操作系统;
  • Snapcraft 不再维护,请直接使用二进制或发行版仓库。

此外,v2.0.0 起:

  • Windows/macOS 安装器与系统托盘被移除(#8778);
  • Linux deb/rpm 打包脚本删除(#8887);
  • 发布物校验从 MD5 切换为 SHA256(#8884)。

Docker 方面,v2.0.0 起 Dockerfile 统一更名路径为 parity-ethereum(#9248 下保留有 alpine/centos/ubuntu 等多个目标的 Dockerfile)。


十一、2.0 系列版本一览表

版本日期性质核心内容
v2.0.0 "Ethereum"2018-07-18beta客户端更名 Parity-Ethereum;移除 Wallet/DApps/UI;库化与 C 接口;交易队列重构;Warp 同步可恢复;--warp-barrier;EIP150/160/161 移入公共参数
v2.0.12018-07-27betaAura 难度验证宽松化;移除 node-health;修复 UserDefaults 解析;禁用本地交易 per-sender 限制
v2.0.32018-09-01beta移除 dapp 权限设置;eth_getWork 同步检查;轻客户端 eth_getLogs 增强;交易传播 4 块窗口
v2.0.42018-09-11beta轻客户端 eth_coinbase 真实账户;修复 Windows 快照恢复;warp 同步中的 eth_getWork 检查
v2.0.52018-09-18stable2.0 系列标记稳定;P2P 发现优化;gas_floor_target→8M、gas_cap→10M;WS 端口低危问题
v2.0.62018-09-20stable无功能变更(纯版本回退合并)
v2.0.72018-10-11stable引入 Constantinople(EIP-1234/1052/1014/145/1283);arm/i*86/Snapcraft 分发弃用
v2.0.82018-10-16stable关键安全版本:修复 EIP-1283 SSTORE 退款共识问题(signed 256-bit)
v2.0.92018-10-29stable性能与稳定性修复;允许 EIP-155 chain id 为 0;ropsten 分叉检查点更新

十二、升级注意事项速查(面向 2.0 用户)

综合全文,向 2.0.x 用户给出以下升级要点:

  1. 运行 Ropsten / POA Core / Kovan 的节点:至少升级到2.0.7;运行计划启用 EIP-1283 的任意网络,必须升级到 2.0.8(共识级修复)。
  2. 1.10.9 及更早版本直接升级:务必阅读交易队列变化——per-sender 限制、本地交易优先级调整,必要时调大--tx-queue-per-sender或--tx-queue-size,或改用eth_sendRawTransaction提交。
  3. 自定义链规约需迁移:EIP150/EIP160/EIP161 分叉配置从 Ethash 参数段迁入common params 段(#8614);主网规约 foundation.json 是迁移后的标准范例。
  4. 依赖 Wallet/DApps 的工作流:2.0.0 起必须改用独立钱包应用,客户端本身不再提供 UI 与 DApps 托管。
  5. 校验下载物:2.0.0 起使用 SHA256 而非 MD5。
  6. 架构升级:arm*、i*86、Snapcraft 分发已弃用,请改用官方二进制、发行版仓库或自行编译(可参考仓库构建说明)。

结语

Parity-Ethereum 2.0 系列是项目历史上的一个关键转折:它用一次大规模"减负"(移除 UI/DApps/公共节点)换来更纯粹的客户端定位,同时完成了 Constantinople 硬分叉的完整支持与交易队列、同步机制、快照机制的深度重构。透过 docs/CHANGELOG-2.0.md 的逐版本记录,再结合当前仓库的链规约与 CLI 定义,可以清晰地还原当时每个设计决策背后的动机——这些历史版本虽然已 EOL,但其沉淀的架构思路(如 multi blockReward、strict empty steps、resumable warp sync)至今仍可在仓库源码中检索研读。

  • 区块链

【免费下载链接】parity-ethereum

The fast, light, and robust client for Ethereum-like networks.

项目地址:https://gitcode.com/gh_mirrors/pa/parity-ethereum
点击查看免费下载

相关推荐

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

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

欧冠赛制算法题:从足球规则到代码契约的建模实践

1. 这不是体育新闻,而是一道被低估的算法实战题“欧洲冠军联赛”这六个字出现在程序设计训练课的作业列表里,第一反应往往是困惑——难道要写个足球比分爬虫?还是模拟球员转会系统?我第一次看到这个标题时也愣了三秒。但翻开题目描…

作者头像 李华
网站建设 2026/10/15 17:35:06

ASP.NET Core网上商城源码运行与生产部署指南

简介:这是一份基于.NET Framework开发的完整网上商城系统源代码,面向C#与VB.NET初学者及Web开发入门者,帮助理解ASP.NET Web Forms架构下的电商应用实现逻辑。资源包含151个文件,涵盖33个VB后台代码文件(如Global.asax…

作者头像 李华
网站建设 2026/10/15 17:34:19

qextserialport:Qt 4/5老项目串口通信轻量救急方案

简介:本资源是面向Qt初学者与嵌入式/工业通信开发者的跨平台串口编程扩展库qextserialport-1.2win-alpha,专为Windows与Linux环境下Qt应用的串口通信需求设计,有效弥补Qt原生框架对底层串口支持的不足。压缩包共94个文件,涵盖12个…

作者头像 李华
网站建设 2026/10/15 17:33:40

Delphi加密组件包实战:AES、RSA与哈希在XE10.2中的集成与避坑

简介:TMS Cryptography Pack 3.4.0.1 是面向 Delphi XE10.2 开发者的加密组件库,适合需要在桌面与移动应用中集成数据保护、安全通信的中高级开发者。它覆盖 AES、DES、3DES、Blowfish、Twofish、RC4、RSA 等对称与非对称算法,并提供 MD5、SH…

作者头像 李华
网站建设 2026/10/15 17:33:39

C++手写线性回归神经网络:从原理到嵌入式部署实战

1. 为什么用C手写线性回归神经网络1.1 从一次实际需求说起去年帮一个做工业设备监测的朋友处理振动传感器数据,需要在嵌入式采集板上直接跑回归模型做实时趋势预测。板子资源很紧张,Python解释器根本塞不进去,PyTorch那套更是想都别想。当时第…

作者头像 李华