两行代码分别包含了关于get_required_keys的两个结构体,
struct get_required_keys_params { fc::variant transaction; flat_set<public_key_type> available_keys; }; struct get_required_keys_result { flat_set<public_key_type> required_keys; };get_required_keys是chain的RPC接口,结构体get_required_keys_params是该接口的请求参数的结构,而另一个get_required_keys_result是接口处理后返回的结构。
回过头继续看FC_REFLECT的两行代码,第一个参数传入的是结构体。第二个参数用圆括号包含,可以有多个,内容与结构体的成员一致。
FC_REFLECT实际上实现了面向对象编程中类成员的getter/setter方法。
三、chain_plugin生命周期与基类定义的生命周期相同,也包含四个阶段。
chain_plugin::set_program_options在nodeos程序调试部分有详细介绍。主要是添加chain_plugin相关的配置参数,一组是命令行的,另一组是来自配置文件的,其中命令行的配置项优先级更高。
chain_plugin::plugin_initialize这个函数也是从nodeos程序入口而来,会传入配置项调用chain_plugin的初始化函数。初始胡函数获取到来自命令行和配置文件的中和配置参数以后,结合创世块配置,逐一处理相关参数逻辑。这些参数对应的处理逻辑如下表(对应controller的成员属性介绍)所示:
param explanation detailaction-blacklist 添加action黑名单 每一条数据是有账户和action名组成
key-blacklist 公钥黑名单 公钥集合
blocks-dir 设置数据目录 最终会处理为绝对路径保存到内存
checkpoint 检查点 缓存区块的检查点,用于快速扫描
wasm-runtime 虚拟机类型 可以指定运行时webassembly虚拟机类型
abi-serializer-max-time-ms abi序列化最大时间 要提高这个数值防止abi序列化失败
chain-state-db-size-mb 链状态库大小 基于chainbase的状态主库的大小
chain-state-db-guard-size-mb 链状态库守卫大小 也是controller中提到的未包含在公开属性中的
reversible-blocks-db-size-mb 链可逆区块库大小 链可逆区块库也是基于chainbase的状态数据库
reversible-blocks-db-guard-size-mb 链可逆区块库守卫大小 也是controller中提到的未包含在公开属性中的
force-all-checks 是否强制执行所有检查 默认为false
disable-replay-opts 是否禁止重播参数 默认为false
contracts-console 是否允许合约输出到控制台 一般为了调试合约使用,默认为false
disable-ram-billing-notify-checks 是否允许内存账单通知 默认为false
extract-genesis-json/print-genesis-json 输出创世块配置 以json格式输出
export-reversible-blocks 导出可逆区块到路径 将可逆区块目录reversible中数据导入到指定路径
delete-all-blocks 删除所有区块数据 重置区块链
truncate-at-blocks 区块截取点 所有生效的指令都要截止到本参数设置的区块号
hard-replay-blockchain 强制重播区块链 清空状态库,通过repair_log获得backup,搭配fix-reversible-blocks从backup中恢复可逆区块到区块目录。
replay-blockchain 重播区块链 清空状态库,搭配fix-reversible-blocks从原区块目录的可逆区块目录自我修复
fix-reversible-blocks 修复可逆区块 调用函数recover_reversible_blocks传入源路径和新路径,可逆缓存大小,以及是否有截取点truncate-at-blocks
import-reversible-blocks 导入可逆区块路径(必须独立使用,没有其他参数命令) 清空可逆区块目录,调用import_reversible_blocks函数导入
snapshot 指定导入的快照路径 在controller的快照部分有详述
genesis-json 指定创世块配置文件 从文件中导出创世块的配置项到内存
genesis-timestamp 指定创世块的时间 同样将该时间配置到内存中对应的变量
read-mode 状态主库的读取模式 controller部分有详述
validation-mode 校验模式 controller部分有详述