我如何查看由Parity Substrate中的宏生成的最终代码?

时间:2019-06-21 14:23:49

标签: blockchain substrate

Substrate使用许多宏来简化编写运行时模块的过程:

  • construct_runtime!
  • decl_module!
  • decl_storage!
  • decl_event!
  • 等...

但是,很难理解这些宏的实际作用以及最终代码的外观。我该如何深入研究这些宏和扩展?

2 个答案:

答案 0 :(得分:2)

如果您想看一看箱子最终生成的代码,可以运行以下命令:

cargo +nightly rustc --profile=check --package <crate-name> --lib -- -Zunstable-options --pretty=expanded > <output-file>

请注意,这里有两个变量:<crate-name><output-file>

因此,如果您想从substrate-node-template查看最终运行时,请运行:

cargo +nightly rustc --profile=check --package node-template-runtime --lib -- -Zunstable-options --pretty=expanded > substrate-node-template-runtime.rs

或者,如果您只想查看单个模块(如Sudo模块)的扩展,则可以执行以下操作:

cargo +nightly rustc --profile=check --package srml-sudo --lib -- -Zunstable-options --pretty=expanded > sudo-module.rs

这些将产生带有所有扩展代码的文件,这些文件如下所示:https://gist.github.com/shawntabrizi/b4a1952dbd3af113e8a3498418e52741

答案 1 :(得分:2)

对我来说,最舒适的解决方案是使用cargo expand

https://github.com/dtolnay/cargo-expand

cargo install cargo-expand

然后从板条箱中调用它

cargo expand