- 区块链
【免费下载链接】parity-ethereum
The fast, light, and robust client for Ethereum-like networks.
本文基于当前仓库
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 的开发者都至关重要:
- 修复 DELEGATECALL 的 from/to 字段:此前 DELEGATECALL 痕迹中 from/to 字段取值有误,1.9 予以修正(并补充了相应测试);
- 调用(call)默认使用零 nonce 与零 gas price:RPC 层的
eth_call类操作不再需要显式指定 nonce 和 gasPrice,行为更符合 Mist 等客户端的调用习惯; - 用队列中的全部交易构建 pending 区块:pending 区块的构造逻辑改为包含交易池中的全部交易,而非仅包含新收到的交易;
- 移除 RPC 参数宽松处理:Parity 不再接受十进制格式的区块号,也不再解析空字符串为空字节——因为 Mist 客户端已能正确格式化参数;
- 公共节点不再支持用户界面:如果你运行的是面向公众的节点(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.1 | 2018-02-01 | 恢复 ERC-20 token 余额显示;改进网络(节点表按失败率排序);修复客户端关闭时数据库损坏;修复--password命令行标志问题;稳定 Kovan 与其他 AuRa PoA 网络(官方强烈建议 AuRa 网络升级) |
| v1.9.2 | 2018-02-02 | 为 Ropsten 测试网新增 bootnodes |
| v1.9.3 | 2018-02-20 | 应用 ECIP-1041(移除难度炸弹);校验链规格中除数(divisor)字段不为 0;Kovan Wasm 分叉代码;随机化转发对端以改善传播 |
| v1.9.4 | 2018-03-01 | 修复 traces 并移除 bloomchain crate(后又在 1.9.5 回滚);快照同步拒绝过大数据包;修复日志;修正 keccak256/sha3 计算;硬件钱包 USB 订阅重构 |
| v1.9.5 | 2018-03-21 | 1.9 分支转正为 stable;Kovan 激活 Wasm 合约(硬分叉区块 6600000);updater 下载失败指数退避;限制入站连接;Kovan 启用代码大小限制;追加 DoS 防护 |
| v1.9.6 | 2018-04-16 | 升级 app_dirs(修复 Windows 目录行为);更新 Musicoin 规格;抑制 TemporaryInvalid 验证失败日志;state diff 纳入 suicided 账户;password_files、reserved_peers、log_file支持~路径展开 |
| v1.9.7 | 2018-04-23 | 32 位流水线不再阻塞发布;更新 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.
相关推荐
TDengine 3.3.2.0 版本解读:列级压缩增强、supportVnodes 优化与稳定性修复全解析
TDengine 3.3.2.0 版本解读:列级压缩增强、supportVnodes 优化与稳定性修复全解析 TDengine 3.3.2.0 是 2024 0
数据库时序数据库物联网大数据实时分析云原生Google Snappy压缩库:高性能压缩技术解析
Google Snappy压缩库:高性能压缩技术解析 什么是Snappy压缩库 Snappy是Google开发的一款高性能压缩/解压缩库,其设计理念与众不同:它
序列化【特别福利】 Eino项目v0.3.38版本发布:工具链增强与稳定性优化
【特别福利】 Eino项目v0.3.38版本发布:工具链增强与稳定性优化 引言:Go语言LLM应用开发的新里程碑 还在为大型语言模型(LLM)应用的复杂编排和工
人工智能大模型AI AgentRAG
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考