plugin
plugin copied to clipboard
平行链启动增加对历史区块的校验机制
当前平行链节点启动会从已有区块继续执行,不会对历史区块做是否和当前的bin一致的计算结果的校验。 比如一个新版本启动,不会对旧区块做校验,现在要求运维每次更新必须删除旧区块,重新执行比对block hash是否和曾经区块一致来校验。非常不方便,而且容易遗漏或犯错。 期望每次启动增加对历史区块的校验机制。如果校验失败,则panic,提示用户增加fork或其他操作。 大概实现是:
- 在当前下载层,执行层基础上增加校验层。校验和下载执行同步进行,不影响区块下载和执行,但是在没有校验完成时候暂停共识的发送。
- 对已经校验了的高度和当前bin的git 版本号绑定保存数据库,方便下次重启从上次校验高度继续校验,而不是从头校验。如果启动发现当前bin的git版本号和数据库的不一致,则从0开始校验。
校验层的设计需要重新执行数据库,会影响平行链区块,不合适 可行的方案有:
- 通过平行链共识交易增加对当前版本的记录,通过版本上链的方式记录平行链版本和更新记录
- 通过配置文件上链,版本更新作为交易发送的方式,本地增加一个监控进程,根据版本更新交易,从github获取对应版本自动更新