为什么规范中的 "code" 不是以幻数和版本号开头?
Why does "code" in spec not start with magic number and version number?
我正在使用 ./polkadot build-spec --disable-default-bootnode --dev
创建规范(我是 运行 版本 0.9.8-3a10ee63c-x86_64-linux-gnu
)
使用上述命令生成的规范包含 code
字段。我的理解是这个字段包含 wasm 字节。但是,这些字节似乎不合适。
在 .wasm
文件中,前 4 个字节应该是幻数(这里是 [=16=]asm
),接下来的四个字节应该是 wasm 规范的版本,之后可能是其他模式那。我在这些 wasm 字节中看不到那些东西。
这是一个错误吗?它使用某种编码吗?基本上,我如何从规范中获取 wasm 字节?
我已经在此处发布了 JSON 规格 https://gist.github.com/kishansagathiya/b38b8f06964c8cb101ccab7fbefa428d
"code": "0x52bc537646db8e0528b52ffd0058543305de8806381552107855541d2c26fa78e0cf83b70a44352557cb13532c6d0da03c59cf642396cd44daa103555dc3770d003433894b7c7055d95101002568d5f5a28e71a5e6114909a47fa095fefffdbfb7ffde5bca2da54c01351574155015a0bfbfb2adf1efab2acd5757e1d...
Wasm 的原始形式可能非常庞大。这会导致问题,例如,当从一个版本的 Substrate Runtime(wasm 文件)升级到另一个版本时。这是因为升级应该适合一个上限为 ≈4 MiB 的块体。最近的 Polkadot wasm blob 是 4.7 MiB。如果将 zstd 压缩应用于同一个文件,它将下降到 1.1 MiB。
这是我们为 wasm blob 引入压缩的基本原理。为了区分压缩和未压缩的 wasm,我们引入了自己的幻数。这就是您在那里看到的魔法。
这个逻辑几乎封装在 sp-maybe-compressed-blob 板条箱中。
我正在使用 ./polkadot build-spec --disable-default-bootnode --dev
创建规范(我是 运行 版本 0.9.8-3a10ee63c-x86_64-linux-gnu
)
使用上述命令生成的规范包含 code
字段。我的理解是这个字段包含 wasm 字节。但是,这些字节似乎不合适。
在 .wasm
文件中,前 4 个字节应该是幻数(这里是 [=16=]asm
),接下来的四个字节应该是 wasm 规范的版本,之后可能是其他模式那。我在这些 wasm 字节中看不到那些东西。
这是一个错误吗?它使用某种编码吗?基本上,我如何从规范中获取 wasm 字节?
我已经在此处发布了 JSON 规格 https://gist.github.com/kishansagathiya/b38b8f06964c8cb101ccab7fbefa428d
"code": "0x52bc537646db8e0528b52ffd0058543305de8806381552107855541d2c26fa78e0cf83b70a44352557cb13532c6d0da03c59cf642396cd44daa103555dc3770d003433894b7c7055d95101002568d5f5a28e71a5e6114909a47fa095fefffdbfb7ffde5bca2da54c01351574155015a0bfbfb2adf1efab2acd5757e1d...
Wasm 的原始形式可能非常庞大。这会导致问题,例如,当从一个版本的 Substrate Runtime(wasm 文件)升级到另一个版本时。这是因为升级应该适合一个上限为 ≈4 MiB 的块体。最近的 Polkadot wasm blob 是 4.7 MiB。如果将 zstd 压缩应用于同一个文件,它将下降到 1.1 MiB。
这是我们为 wasm blob 引入压缩的基本原理。为了区分压缩和未压缩的 wasm,我们引入了自己的幻数。这就是您在那里看到的魔法。
这个逻辑几乎封装在 sp-maybe-compressed-blob 板条箱中。