2

Substrate 使用了很多宏来简化运行时模块的编写:

  • construct_runtime!
  • decl_module!
  • decl_storage!
  • decl_event!
  • ETC...

但是,很难理解这些宏实际上做了什么以及最终的代码是什么样的。我怎样才能更深入地研究这些宏和扩展?

4

2 回答 2

4

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

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

cargo install cargo-expand

然后从你的箱子里调用它

cargo expand
于 2019-06-23T15:06:27.730 回答
3

如果您想查看最终生成的 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

于 2019-06-21T14:23:49.760 回答