快照的部分就介绍完毕了,区块生产者可以根据需要调用producer_plugin的rpc接口create_snapshot为当前链创建快照。经过以上研究可以得出,EOS的快照是对状态数据库的备份,而不是block_log日志文件的备份,不可逆区块在全网有很多节点作为备份,不必本地备份,而状态数据库很可能是本地唯一的,与其他节点都不同,如果有损坏会造成很多未上到不可逆区块日志的事务丢失。
当需要使用快照恢复时,可以重新启动链,同时设置chain_plugin的参数“snapshot”,传入快照文件路径,通过快照恢状态数据库。
本节重点介绍了EOS中的核心控制器controller的功能和使用。controller的功能是非常多的,贯穿整个链生命周期的大部分行为,深入研究会发现controller实际上是对数据的控制,正如java中的mvc模式,控制器的功能就是对持久化数据的操作。本节首先介绍了两个c++的语法使用,一个是命名空间另一个是using关键字,另外文中也提到了boost的信号槽机制。接着浏览了controller的声明和实现的代码结构,最后,在众多功能中挑选了fork_database分叉库和snapshot快照进行了详细的研究与分析。其他的众多功能由于他们与插件的紧密交互性,将会在相关插件的部分详细分析。
参考资料EOSIO/eos