PolPatrol:波卡运行时自动化验证工具解析

本文深入解析PolPatrol工具如何通过自动化测试验证Polkadot中继链运行时的安全性与性能,涵盖工具原理、检测指标及实际应用场景,为开发者和代币持有者提供可靠的安全评估方案。

PolPatrol — 波卡运行时验证器

ChainSecurity 很高兴发布 PolPatrol,这是一个自动化验证工具,用于测试 Polkadot 中继链运行时在通用安全性和性能属性方面的稳定性与安全性。由于 Polkadot 的中继链运行时处于网络核心地位,当前版本的 PolPatrol 专注于确保中继链运行时的安全性和功能正确性。

Web3 基金会执行董事 Peter Czaban 表示:

“Polkadot 运行时使得灵活描述和部署区块链逻辑变得比以往更加容易。为确保这种丰富功能能够实现安全开发,我们致力于资助能够支持开发者创作过程的工具。我们很高兴与领先的区块链安全公司 ChainSecurity 合作,研究开发自动化区块链逻辑分析的新方法”。

ChainSecurity 首席科学家 Petar Tsankov 表示:

“我们致力于为 Polkadot 开发者和用户提供实用有效的安全工具,使他们能够轻松评估 Polkadot 的安全性。从手动测试和随机模糊测试 Polkadot 运行时开始,我们期待构建能够进行深度安全模糊测试和验证的更多工具。我们感谢 Web3 基金会对本项目的支持”。

PolPatrol 面向哪些用户?

主要有两类用户群将使用 PolPatrol:

  • 希望测试其代码正确性的新中继链运行时开发者
  • 可以对新提议的中继链运行时进行投票的 DOT 代币持有者,他们希望检查提议的运行时是否安全可靠

对于这两类用户群,PolPatrol 会自动分析任何给定的中继链 WebAssembly 二进制文件(或称 Wasm blob),并在违反重要安全和性能属性时向用户发出警告。

如何使用 PolPatrol?

PolPatrol 的源代码可在 https://github.com/chainsecurity/polpatrol 获取。

要了解如何安装 PolPatrol 以及如何在自定义中继链运行时上运行,请参阅官方文档:https://polpatrol.ch/。

工作原理

PolPatrol 使用插桩的 Polkadot 运行时环境来运行提供的中继链运行时,并记录其对环境进行的所有调用。除了调用之外,它还监控关键性能指标,如执行时间和内存使用情况。这使得 PolPatrol 能够检查相关的跟踪和性能属性。PolPatrol 汇总收集的运行时信息,让开发者能够对运行时的整体行为得出结论并比较不同的实现。

PolPatrol 检查哪些属性?

PolPatrol 的重点是性能和安全性属性。

运行时入口性能

PolPatrol 收集所有对运行时入口调用的统计信息,并报告测试运行时期间进行的调用总数、最大执行时间(秒)、最大内存使用量(MB)以及对环境的最大存储相关调用次数:

1
2
3
4
5
6
7
8
9
====================================================================
Entry Name            | # Calls | Max Time | Max Mem | Max #Storage
--------------------------------------------------------------------
initialize_block      |      31 |   0.0324 |  68.294 |         59
execute_block         |      31 |   0.9438 |  72.484 |        341
inherent_extrinsics   |      31 |   0.0404 |  68.290 |          1
apply_extrinsic       |     109 |   0.6399 |  71.959 |         79
finalize_block        |      31 |   0.3210 |  69.862 |        110
====================================================================

例如,上面的示例输出显示 initialize_block 入口被调用了 31 次,每次调用最多耗时 0.0324 秒,最多消耗 68.294 MB 内存,最多进行了 59 次存储相关调用。我们注意到 PolPatrol 还输出其他指标(未在上方显示),如平均执行时间和平均内存使用量。

外部调用性能

PolPatrol 还报告关于已应用外部调用的统计信息,报告与为环境入口报告的指标相同的指标:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
====================================================================
Entry Name               Max Time | Max Mem | Max Storage| Weight
--------------------------------------------------------------------
Balances::force_transf   0.031489 |  68.296 |         57 |  1000000
Balances::transfer       0.031372 |  68.296 |         66 |  1000000
Democracy::propose       0.028740 |  68.290 |         39 |  5000000
Council::execute         0.029009 |  68.290 |         47 |   100000
Slots::fix_deploy_data   0.028606 |  68.290 |         38 |   500000
Democracy::fast_track    0.028877 |  68.290 |         39 |   200000
ImOnline::heartbeat      0.026807 |  68.289 |         13 |    10000
Democracy::undelegate    0.029554 |  68.289 |         54 |   500000
Balances::set_balance    0.029181 |  68.290 |        102 |        0
Democracy::resign_proxy  0.028444 |  68.289 |         40 |   100000
Council::vote            0.030299 |  68.290 |        107 |   200000
Parachains::set_heads    0.028418 |  68.289 |         13 |  1000000
Democracy::set_proxy     0.028941 |  68.290 |         41 |   100000
Democracy::cancel_queu   0.028394 |  68.289 |         39 |    10000
Council::propose         0.029840 |  68.290 |         95 |  5000000
Democracy::external_pro  0.028710 |  68.290 |         39 |  5000000
Claims::claim            0.027391 |  68.289 |         11 |  1000000
Slots::new_auction       0.028643 |  68.290 |         56 |        0
Democracy::second        0.028793 |  68.289 |         40 |  5000000
Democracy::delegate      0.029207 |  68.290 |         52 |   500000
Democracy::vote          0.028790 |  68.289 |         40 |   200000
FinalityTracker::final   0.026426 |  68.289 |         13 |    10000
Democracy::cancel_refe   0.028563 |  68.289 |         39 |    10000
Democracy::remove_proxy  0.028664 |  68.290 |         41 |   100000
Council::set_members     0.029432 |  68.290 |         51 |        0
Democracy::emergency     0.028735 |  68.289 |         39 |   500000
Slots::elaborate_deploy  0.659817 |  71.959 |         51 |  5000000
Timestamp::set           0.028862 |  68.289 |         29 |    10000
Democracy::proxy_vote    0.028574 |  68.289 |         41 |   200000
Democracy::veto_external 0.028529 |  68.290 |         39 |   200000
Slots::bid               0.029268 |  68.289 |         57 |   500000
Democracy::external_prop 0.028528 |  68.290 |         39 |  5000000
====================================================================

除了报告执行时间、内存使用量和存储调用外,PolPatrol 还报告每个外部调用的分配权重。这使得开发者和用户能够根据外部调用的实际性能判断权重是否被充分定义。

安全属性

基于性能信息,PolPatrol 检查多个安全属性,例如:

1
2
3
4
5
====================================================================
Maximum block execution time:   0.944 s   - OK
Maximum block memory:          72.484 MB  - OK
Maximum block length:           0.375 MB  - OK
====================================================================

特别地,PolPatrol 确保最大区块执行时间低于 2 秒,最大区块内存低于 10,000 MB,且区块长度不超过 10,000 MB(以区块的字节数、scale 编码衡量)。可以轻松添加更多安全属性。

致谢

ChainSecurity 感谢 Web3 基金会通过研究资助支持 PolPatrol 的研发工作。

关于 Polkadot

Polkadot 是首个实现区块链网络在共享安全保护下协同工作的互操作性协议。

有关 Polkadot 的更多信息,请访问 polkadot.network。

关于 Web3 基金会

Web3 基金会由以太坊联合创始人兼首席技术官 Dr. Gavin Wood 在瑞士楚格成立,资助构建去中心化网络背后技术栈的研发团队。

有关 Web3 基金会的更多信息,请访问 web3.foundation。

关于 ChainSecurity

ChainSecurity 为区块链项目提供安全服务并开发定制安全解决方案。

在 chainsecurity.com 了解更多关于 ChainSecurity 的信息。

本文最初发表于 https://chainsecurity.com

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计