Substrate 使用了很多宏来简化运行时模块的编写:
construct_runtime!
decl_module!
decl_storage!
decl_event!
- ETC...
但是,很难理解这些宏实际上做了什么以及最终的代码是什么样的。我怎样才能更深入地研究这些宏和扩展?
Substrate 使用了很多宏来简化运行时模块的编写:
construct_runtime!
decl_module!
decl_storage!
decl_event!
但是,很难理解这些宏实际上做了什么以及最终的代码是什么样的。我怎样才能更深入地研究这些宏和扩展?
对我来说,最舒适的解决方案是使用cargo expand
https://github.com/dtolnay/cargo-expand
cargo install cargo-expand
然后从你的箱子里调用它
cargo expand
如果您想查看最终生成的 crate 代码,可以运行以下命令:
cargo +nightly rustc --profile=check --package <crate-name> --lib -- -Zunstable-options --pretty=expanded > <output-file>
注意这里有两个变量:<crate-name>
和<output-file>
。
因此,如果您想从基板节点模板查看最终运行时,您将运行:
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