☰
Parity Ethereum 1.9 “Velocity“ 系列版本技术解读:Wasm 合约、Snappy 压缩、AuRa 稳定性与 ethkey/ethstore 工具链增强
2026/10/15 15:30:26 网站建设 项目流程
  • 区块链

【免费下载链接】parity-ethereum

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

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

本文基于当前仓库docs/CHANGELOG-1.9.md整理而成。Parity 1.9 是 Parity Ethereum 客户端在 2018 年发布的稳定大版本,代号 "Velocity"(v1.9.0,2018-01-25 发布),随后经历了 v1.9.1 至 v1.9.7 一系列稳定性修补,并于 2018-05-09 正式终止支持(EOL)。阅读本文,你将全面掌握 1.9 版本的核心特性——Kovan 网络 Wasm 智能合约支持、devp2p Snappy 压缩、AuRa 权威证明链的叔块治理机制,以及ethkey/ethstore账户工具链的恢复与生成能力,并了解从 1.8 升级到 1.9 时必须注意的行为变更。

一、v1.9.0 "Velocity" 核心特性总览

Parity 1.9.0 是 1.9 系列的开篇版本,官方定位为一次以“速度”为目标的重大发布。其核心特性可归纳如下表:

特性说明仓库佐证位置
全新建造的 Parity Wallet 与 DApps 浏览器(UI 2.0)整合了重新设计的钱包界面与去中心化应用浏览器parity/下的rpc.rs、signer.rs等模块
devp2p 协议 Snappy 压缩节点间网络数据包压缩,降低带宽占用会话层实现
AuRa 链默认禁用叔块PoA 权威证明链默认不再接受叔块,提高确定性AuRa 引擎参数
"maximum uncle count transition" 过渡机制允许既有 PoA 链平滑切换到更严格的叔块策略JSON 参数解析
Expanse 链 Byzantium 硬分叉新增 Expanse 网络的拜占庭分叉支持ethcore/res/ethereum/链配置目录
Ellaism 链支持在链配置中新增 Ellaism 币种与网络ethcore/res/ethereum/ellaism.json
ethstore / ethkey 显著增强预售钱包暴力破解、前缀匹配地址生成、脑钱包恢复ethkey、ethstore

下文将逐项展开,并结合仓库源码给出可验证的实现细节。

二、Wasm 智能合约:Kovan 网络的新执行引擎

1.9 版本最受关注的能力之一,是在 Kovan 测试网上激活 Wasm 智能合约支持。1.9.5 版本的发布说明明确宣布:激活 Wasm-VM 的硬分叉将在区块6600000发生(该区块号在此前 1.9.5 候选阶段经历过推迟调整)。

Wasm 执行能力在仓库中有完整的独立 crate 支撑:ethcore/wasm 实现了 WebAssembly 合约的运行时(包含env.rs、runtime.rs、parser.rs等模块),并配套 wasm/run 运行器与测试资源(.wasm字节码与对应的期望状态 JSON)。

从链配置的角度看,Kovan 的 Wasm 激活点定义在参数wasmActivationTransition中。以仓库中的测试链规格 kovan_wasm_test.json 为例,其关键配置为:

{ "name": "Kovan (Test)", "dataDir": "kovan-test", "engine": { "authorityRound": { "params": { "stepDuration": "4", "validators": { "list": [ ... 9 个验证者地址 ... ] }, "validateScoreTransition": 1000000, "validateStepTransition": 1500000, "maximumUncleCountTransition": 5067000, "maximumUncleCount": 0 } } }, "params": { "gasLimitBoundDivisor": "0x400", "networkID": "0x2A", "eip140Transition": 5067000, "eip211Transition": 5067000, "eip214Transition": 5067000, "eip658Transition": 5067000, "wasmActivationTransition": 10 } }

注意maximumUncleCount设为0(Kovan 是 PoA 链,从 5067000 区块起完全禁止叔块),而wasmActivationTransition指定了 Wasm 合约激活的起始区块。同时 1.9 系列还逐步收紧了 Wasm 相关的运行时行为:

  • 禁用内部内存访问(WASM: Disable internal memory):收紧 Wasm 合约对内部内存的访问权限,提升安全性;
  • storage_read / storage_write 不再返回值:调整 Wasm 合约读写存储的 ABI 语义;
  • 从 panic 中解析 payload:改进 Wasm 运行时对合约 panic 信息的提取;
  • 新增事件(Events)支持:为 Wasm 运行时补齐了事件发射能力;
  • 更新 wasmi 与 parity-wasm、wasm-utils 依赖:引入新的解释器与错误处理,并启用了新的栈深度限制器(stack limiter),防止恶意合约耗尽执行栈。

三、devp2p 会话层引入 Snappy 压缩

v1.9.0 启用了 devp2p 协议的 Snappy 压缩。这一改进直接影响节点间数据传输的效率,其实现位于 util/network-devp2p/src/session.rs:

let len = snappy::compress_into(&payload, &mut compressed); trace!(target: "network", "compressed {} to {}", payload.len(), len); payload = &compressed[0..len];

发送侧在self.compression开启时调用snappy::compress_into对负载压缩(并限制MAX_PAYLOAD_SIZE防止超大包);接收侧则对应执行:

if snappy::decompressed_len(&compressed)? > MAX_PAYLOAD_SIZE { return Err(Error::OversizedPacket); } snappy::decompress(&compressed)?

即先检查解压后长度是否超限(拒绝超大包,兼顾 DoS 防护),再完成解压。压缩能力建立在独立的parity-snappy依赖之上。网络层的压缩特性与 1.9 同期的一系列网络加固措施相辅相成,包括限制入站连接数、对握手日志的优化、以及常量时间比较(constant time comparison)等安全增强。

四、AuRa 权威证明链:默认禁用叔块与最大叔块数过渡

PoA(Proof-of-Authority)网络是 Parity 在企业链与测试网上的主力引擎。v1.9.0 将 AuRa 链的叔块策略从“默认允许”调整为“默认禁用”,并为此引入“maximum uncle count transition”过渡机制,让已经运行的 PoA 链可以按区块号平滑收紧叔块数量。

在仓库当前的 AuRa 引擎 中,叔块治理对应以下参数(AuthorityRoundParams):

  • maximum_uncle_count_transition: u64:启用新叔块策略的起始区块号;
  • maximum_uncle_count: usize:允许接受的最大叔块数量(设为0即完全禁用叔块);
  • empty_steps_transition/maximum_empty_steps/strict_empty_steps_transition:空步(empty step)消息的过渡与限制参数。

其 JSON 链规格的字段名采用驼峰式,解析逻辑见 json/src/spec/authority_round.rs:

"params": { "stepDuration": "5", "validators": { "list": ["0xc6d9d2cd449a754c494264e1809c50e34d64562b"] }, "blockReward": 5000000, "maximumUncleCountTransition": 10000000, "maximumUncleCount": 5, "randomnessContractAddress": { "10": "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "20": "0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" } }

该模块的单元测试(authority_round_deserialization)验证了maximumUncleCountTransition与maximumUncleCount的解析结果,是配置行为可验证的直接证据。

除叔块治理外,1.9 期间 AuRa 引擎还经历了一系列稳定性修复,包括:修正 AuRa 的 step duration 安全问题、等待未来区块(wait for future blocks in AuRa)、尽可能推进 AuRa step 并防止无效区块、修复 aura difficulty 竞争条件,以及检测"不同节点使用相同密钥签名"的异常场景。

五、新链支持与既有测试网配置更新

v1.9.0 扩展了可接入的网络范围:

  • Expanse 链的 Byzantium 硬分叉(含正确的 metropolis difficulty increment divisor);
  • Ellaism 链:在链配置中新增 Ellaism 币种;
  • Morden 测试网:加入 ECIP1017(ETC 货币政策)配置;
  • Ropsten 测试网:1.9.2 新增了额外的 bootnodes;
  • Musicoin:按 gmc v2.6.2 更新链规格,并加入 MCIP-6 Byzantium 过渡与更多 bootnodes;
  • Kovan 硬分叉推迟:将硬分叉区块号延后,并为版本元数据同步更新。

这些链配置均以 JSON 形式维护在 ethcore/res/ethereum/ 目录下,可直接查看各网络的 engine、params、genesis 与 nodes 定义。

六、从 1.8 升级到 1.9 的行为变更清单

v1.9.0 的发布说明明确提示了从 1.8 升级的用户需要注意的破坏性/行为性变更,这些内容对运行节点与依赖 RPC 的开发者都至关重要:

  1. 修复 DELEGATECALL 的 from/to 字段:此前 DELEGATECALL 痕迹中 from/to 字段取值有误,1.9 予以修正(并补充了相应测试);
  2. 调用(call)默认使用零 nonce 与零 gas price:RPC 层的eth_call类操作不再需要显式指定 nonce 和 gasPrice,行为更符合 Mist 等客户端的调用习惯;
  3. 用队列中的全部交易构建 pending 区块:pending 区块的构造逻辑改为包含交易池中的全部交易,而非仅包含新收到的交易;
  4. 移除 RPC 参数宽松处理:Parity 不再接受十进制格式的区块号,也不再解析空字符串为空字节——因为 Mist 客户端已能正确格式化参数;
  5. 公共节点不再支持用户界面:如果你运行的是面向公众的节点(public node),需要继续停留在 1.8 稳定分支,否则请升级 UI 与钱包配套组件。

这些变更反映了 1.9 在“规范性与安全性”上的取向:更严格的输入校验、更确定的调用语义,以及对生态客户端(Mist)行为对齐的妥协。

七、ethstore 与 ethkey 工具链增强(附源码级原理)

v1.9.0 对账户工具链做了显著升级(对应 accounts/ethstore 与 accounts/ethkey 两个 crate),为账户恢复场景提供了三大利器:

1. ethstore:预售钱包(pre-sale wallet)暴力破解恢复

ethstore现在支持给定密码列表对预售钱包进行暴力破解恢复。仓库中的实现见 accounts/ethstore/src/presale.rs:PresaleWallet从 JSON 文件解析encseed(拆分为 16 字节 IV 与密文),通过pbkdf2::sha256(2000, ...)派生密钥,再用 AES-128-CBC 解密,最后以keccak256恢复私钥并校验地址是否匹配:

let mut derived_key = [0u8; 32]; let salt = pbkdf2::Salt(password.as_bytes()); let sec = pbkdf2::Secret(password.as_bytes()); pbkdf2::sha256(2000, salt, sec, &mut derived_key); // ... AES-128-CBC 解密 ... let secret = Secret::import_key(&unpadded.keccak256())?; if let Ok(kp) = KeyPair::from_secret(secret) { if kp.address() == self.address { return Ok(kp) } } Err(Error::InvalidPassword)

只要尝试足够多的候选密码(如词表组合),就能找回遗失密码的预售钱包私钥。

2. ethkey:多线程前缀匹配地址生成

ethkey支持多线程生成指定前缀的地址。核心类型Prefix(见 accounts/ethkey/src/prefix.rs)在给定迭代次数内不断生成随机密钥对,直到地址字节以目标前缀开头:

impl Generator for Prefix { fn generate(&mut self) -> Result<KeyPair, Error> { for _ in 0..self.iterations { let keypair = Random.generate()?; if keypair.address().as_ref().starts_with(&self.prefix) { return Ok(keypair) } } Err(Error::Custom("Could not find keypair".into())) } }

前缀匹配(vanity address)搜索天然可并行化,多线程实现显著缩短了找到心仪地址的时间。

3. ethkey:脑钱包前缀匹配与恢复短语查找

  • 前缀匹配脑钱包(BrainPrefix,见 accounts/ethkey/src/brain_prefix.rs):随机生成no_of_words个单词的短语,用Brain推导密钥对,直到地址匹配目标前缀;
  • 脑钱包恢复短语查找(brain_recover,见 accounts/ethkey/src/brain_recover.rs):当你记得地址、却把助记短语抄错或漏掉一个词时,该工具可以帮你找回正确的短语。

brain_recover的算法值得展开:它先把已知短语按空格拆词,不在词表(parity_wordlist::WORDS)中的词会用编辑距离(edit_distance)找出最接近的候选词;如果词数少于预期(expected_words),则补上全部词表作为候选;随后通过PhrasesIterator按字典序枚举所有组合并逐一推导地址比对:

fn generate_substitutions(word: &str) -> Vec<&'static str> { parity_wordlist::WORDS.iter().cloned() .map(|w| (edit_distance(w, word), w)) .collect::<Vec<_>>() // 按编辑距离排序后返回 } pub fn brain_recover(address: &Address, known_phrase: &str, expected_words: usize) -> Option<String> { let it = PhrasesIterator::from_known_phrase(known_phrase, expected_words); for phrase in it { let keypair = Brain::new(phrase.clone()).generate().expect("Brain wallets are infallible; qed"); if &keypair.address() == address { return Some(phrase); } } None }

单元测试should_generate_possible_combinations验证了PhrasesIterator对组合枚举的正确性(如3 x 1 x 3 = 9种组合的遍历顺序)。这一功能对备份助记词时出现笔误的用户尤其实用。

八、其他值得注意的技术改进

1.9.0 与后续修补版本还包含大量基础设施级改进:

  • RocksDB 升级与调优:升级到 RocksDB 5.8.8 并调整参数以降低空间放大;1.9.0 期间还加强了 RocksDB 损坏检测(check_for_corruption)与打开数据库时的修复尝试;
  • 交易池重实现:Transaction Pool re-implementation(新的交易池实现)配合"用队列中全部交易构造 pending 区块"、nonce 预留(reserve nonces for signing)、gas 估算跳过 nonce 检查等改进,提升交易处理确定性;
  • SecretStore 多项能力:引入secretstore_signRawHash方法、密钥份额缺失时的 404 错误语义、PoA 集成初始版本、版本化密钥与服务器集合变更会话 API;
  • 快照同步加固:拒绝过大的快照数据包、将最大下载限制提升到 128MB、调整快照同步阈值;
  • 轻客户端改进:实现 registrar 与eth_getCode、为轻客户端同步请求添加超时、修复 RPC 处理器中的除零问题;
  • WASM 测试体系:升级 Wasm 测试运行器,配套ethcore/res/wasm-tests与 wasm/run 目录下的测试资源;
  • 安全加固:CSP(内容安全策略)硬化、钱包允许通过 manifest 声明unsafe-eval、subtle::slices_equal常量时间比较、若干 DoS 防护;
  • CLI 与配置:严格配置解析、暴露默认 gas 价格百分位配置、账户刷新时间可配置化、--help输出折行到 120 字符、--password等路径类参数的~展开修复。

九、1.9 系列 Bugfix 版本演进(v1.9.1 ~ v1.9.7)

1.9.0 之后,1.9 稳定分支经历了 7 个修补版本,每个版本都聚焦性能与稳定性:

版本日期要点
v1.9.12018-02-01恢复 ERC-20 token 余额显示;改进网络(节点表按失败率排序);修复客户端关闭时数据库损坏;修复--password命令行标志问题;稳定 Kovan 与其他 AuRa PoA 网络(官方强烈建议 AuRa 网络升级)
v1.9.22018-02-02为 Ropsten 测试网新增 bootnodes
v1.9.32018-02-20应用 ECIP-1041(移除难度炸弹);校验链规格中除数(divisor)字段不为 0;Kovan Wasm 分叉代码;随机化转发对端以改善传播
v1.9.42018-03-01修复 traces 并移除 bloomchain crate(后又在 1.9.5 回滚);快照同步拒绝过大数据包;修复日志;修正 keccak256/sha3 计算;硬件钱包 USB 订阅重构
v1.9.52018-03-211.9 分支转正为 stable;Kovan 激活 Wasm 合约(硬分叉区块 6600000);updater 下载失败指数退避;限制入站连接;Kovan 启用代码大小限制;追加 DoS 防护
v1.9.62018-04-16升级 app_dirs(修复 Windows 目录行为);更新 Musicoin 规格;抑制 TemporaryInvalid 验证失败日志;state diff 纳入 suicided 账户;password_files、reserved_peers、log_file支持~路径展开
v1.9.72018-04-2332 位流水线不再阻塞发布;更新 wasmi;改进 VM 执行器栈大小估算规则(含 off-by-one 修复与saturating_sub防溢出);升级 crossbeam 到 0.3

其中 v1.9.1 特别强调:如果你运行 AuRa 引擎的网络,强烈建议升级,这从侧面说明 1.9 系列在 PoA 稳定性上投入之大。

十、总结与升级建议

Parity 1.9 "Velocity" 是一个以性能、规范性与 PoA 网络稳定性为核心的版本:它带来了 Wasm 智能合约在 Kovan 的落地、devp2p Snappy 压缩、AuRa 叔块治理机制、两条新链支持,以及ethkey/ethstore强大的账户恢复工具链。

从升级实践角度,可给出如下建议:

  • 从 1.8 升级前,仔细核对第六节的行为变更清单,特别是 RPC 参数校验收紧(十进制区块号将被拒绝)与公共节点不再提供 UI 这两点;
  • PoA 网络运营者:1.9.x 包含大量 AuRa 稳定性修复,应尽快升级;新链可直接通过maximumUncleCountTransition/maximumUncleCount参数从启动即禁用叔块,既有链则可利用该过渡机制按区块号平滑切换;
  • 需要接入 Wasm 合约的网络:参照 kovan_wasm_test.json 设置wasmActivationTransition,并同步确认配套 EIP 过渡区块(如 eip140/211/214/658)已配置;
  • 账户恢复场景:遗失预售钱包密码可用ethstore密码表暴力破解;需要定制前缀地址或找回抄错的脑钱包助记词,可使用ethkey的前缀匹配与brain_recover能力。

需要留意的是,1.9 已于 2018-05-09 终止支持(EOL)。对于仍在维护生产环境、需要更完整 Wasm 与生态能力的使用者,建议参考仓库 docs 目录下更高版本(如 1.10、1.11、2.x)的 CHANGELOG,了解后续演进路径。

  • 区块链

【免费下载链接】parity-ethereum

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

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

相关推荐

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询