1 个不稳定版本
0.13.0 | 2021年8月4日 |
---|
#21 in #runtimes
用于 2 个 crate (通过 subwasmlib)
46KB
926 行
Substrate Differ
概述
这个 crate 帮助比较/差异 Substrate 元数据的两个版本或两个运行时。一个基本的解决方案是将元数据序列化为 json 字符串,并直观地比较……你将看到的 16534 行。这显然是不切实际的。
上下文
Substrate 元数据格式是分版本的。然而,对于给定的版本,内容可能在不同运行时版本之间发生变化。元数据是否变化是关键。添加新模块或调用通常影响不大。然而,删除、修改或重新排列模块及其内容对于各种客户端 API 是关键的。
比较差异方法
这个 crate 提供了三种比较元数据的方法,它们各有优缺点,如下表所示。
raw_differ | partial_differ | summary_differ | 注释 | |
---|---|---|---|---|
比较 | 元数据 | 元数据 | 运行时 | |
详细程度 | 高 | 中 | 低 | 输出长度 |
准确性 | 高 | 低 | 高 | 描述更改的程度 |
通用性 | 高 | 无 | 高 | 对于过去和未来的元数据格式/版本,它有多好 |
详细程度 | 高 | 中 | 低 | 我们能够发现差异来源的好程度 |
前瞻性 | 是 | 否 | 是 |
summary_differ
summary_differ
在非常高的层次上工作,它比较并显示汇总信息,例如总大小以及对象是否完全相同。这里我们在比较 运行时。
结果看起来类似于
Running subwasm v0.8.0
🅰️ File("runtime_a.wasm")
🅱️ File("runtime_b.wasm")
🅰️ 1.916 MB (2,008,974 bytes)
🅱️ 2.795 MB (2,930,552 bytes)
Checking metadata versions:
✅ Both metadata versions are identical: V12
Checking core versions:
❌ The 2 core versions are different:
🅰️ kusama-2030 (parity-kusama-0.tx5.au2)
🅱️ kusama-9000 (parity-kusama-0.tx5.au2)
Checking runtime metadata:
❌ The metadata are different
这是一个很好的选项,可以确认两个运行时的元数据之间没有发生变化。请注意,两个运行时可能有不同的 实现,导致 元数据 完全相同。
如果,像上面的例子一样,元数据是不同的,我们将需要另一个方法的帮助来了解更多关于差异的信息。
raw_differ
这里我们在比较 元数据。
raw_differ 首先将元数据序列化为 JSON 字符串。然后检查所有差异。这是一种查看所有差异的好方法,但可能会非常冗长。然而,与手动比较原始 JSON 相比,这种方法将大大减少需要检查的内容的大小。
对于尚未知的未来版本,此方法相当健壮,因为唯一的要求是能够序列化元数据。
partial_differ
注意:尚未实现
这里我们在比较 元数据。
另一方面,partial_differ 将在两个元数据之间查找特定的方面。这使得 partial_differ 更为节省空间,更容易阅读和分析。然而,这种方法可能需要对未来版本进行代码更改才能工作。
依赖项
~21-29MB
~446K SLoC