在Substrate中,`spec_version`和`authoring_version`有什么区别?

问题描述

每个Substrate运行时都有一个RuntimeVersion。 RuntimeVersion结构中的字段指示运行时的各个方面何时更改,并且每个字段都有在这些文档中描述的自己的语义。

我不确定authoring_version的含义以及何时应该更改。我对文档中的描述并不完全清楚

authoring_version: u32

authoring_version is the version of the authorship interface.
An authoring node will not attempt to author blocks unless this
is equal to its native runtime.

如果可能,请提供以下升级示例:

  • spec_versionauthoring_version都将改变
  • spec_version会更改,但authoring_version不会
  • authoring_version会更改,但spec_version不会

解决方法

我将分享由Substrate核心开发人员Bastian Köcher提供给我的答案:

没有太多变化会导致authoring_version

升高

例如,如果您以非向后兼容的方式更改BlockBuilder运行时api,则需要修改authoring_version

由于验证程序将无法在不更新节点实现的情况下构建新块

如果您仅以某种方式更改运行时api,使其与以前的版本不兼容,同时又不更改运行时中会导致不同存储根的任何内部结构,则只会颠倒{{1 }}。但是,我希望这可能永远不会发生