Substrate使用许多宏来简化编写运行时模块的过程:
construct_runtime!
decl_module!
decl_storage!
decl_event!
但是,很难理解这些宏的实际作用以及最终代码的外观。我该如何深入研究这些宏和扩展?
答案 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