为什么规范中的“代码”不以幻数和版本号开头?

kis*_*iya 4 webassembly substrate polkadot

./polkadot build-spec --disable-default-bootnode --dev我正在使用(我正在运行版本0.9.8-3a10ee63c-x86_64-linux-gnu)创建规范

使用上述命令生成的规范包含code字段。我的理解是该字段包含 wasm 字节。然而,这些字节似乎不合适。

.wasm文件中,前 4 个字节应该是幻数(\0asm此处),接下来的四个字节应该是 wasm 规范的版本,之后可能是其他模式。我在这些 wasm 字节中没有看到那些东西。

这是一个错误吗?它使用某种编码吗?基本上,我如何从规范中获取 wasm 字节?

我在这里发布了 JSON 规范https://gist.github.com/kishansagathiya/b38b8f06964c8cb101ccab7fbefa428d

"code": "0x52bc537646db8e0528b52ffd0058543305de8806381552107855541d2c26fa78e0cf83b70a44352557cb13532c6d0da03c59cf642396cd44daa103555dc3770d003433894b7c7055d95101002568d5f5a28e71a5e6114909a47fa095fefffdbfb7ffde5bca2da54c01351574155015a0bfbfb2adf1efab2acd5757e1d...
Run Code Online (Sandbox Code Playgroud)

pep*_*kin 5

Wasm 的原始形式可能相当庞大。例如,当从一个版本的 Substrate Runtime(wasm 文件)升级到另一版本时,这会导致问题。这是因为升级应该适合上限为 \xe2\x89\x884 MiB 的块体。最近的 Polkadot wasm blob 大小为 4.7 MiB。如果对同一个文件应用 zstd 压缩,大小将降至 1.1 MiB。

\n

这就是我们为 wasm blob 引入压缩的理由。为了区分压缩和未压缩的 wasm,我们引入了自己的幻数。这就是你在那里看到的魔力。

\n

该逻辑几乎封装在sp-maybe-compressed-blob箱中。

\n