#metadata #substrate #version #runtimes #compare #change #comparing-diffing

substrate-differ

帮助比较/差异 Substrate 元数据的两个版本或两个运行时

1 个不稳定版本

0.13.0 2021年8月4日

#21 in #runtimes


用于 2 个 crate (通过 subwasmlib)

MITGPL-3.0-or-later…

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