EOS行为核心:解析插件chain_plugin (3)

两行代码分别包含了关于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 detail
action-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部分有详述  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wssfzz.html