Substrate节点模板中当前块与最终确定块含义及自动活动配置问题
问题1:无用户交互时链上自动事件的源码配置位置
substrate-node-template 默认采用 Aura + Grandpa 共识机制,默认固定间隔出块,就算没有用户提交的交易,每个块生成过程中也会执行系统固有交易,对应产生自动事件,相关配置分布在两处核心源码路径:
- Runtime 层(
runtime/src/lib.rs)- 首先在
construct_runtime!宏中默认注册了多个系统级 pallet,这些 pallet 的逻辑不需要用户触发,每个块都会自动执行:pallet_timestamp模块每个块必须调用set方法更新链上时间,会抛出TimestampSet事件pallet_authorship模块每个块会记录当前出块节点的账户信息,会抛出NewAuthor事件
- 首先在
- 节点层(
node/src/service.rs)- 共识规则、出块间隔、空块生成规则都在该文件中配置,默认配置允许无交易时正常出块,修改此处的共识参数即可调整空块的生成逻辑
问题2:Substrate 中 current 块和 finalized 块的区别
- current 块(当前最佳块):是当前节点本地视角下,链上高度最高的有效块。Substrate 采用最长链规则选择主链,节点会同步网络中所有合法的分叉链,默认选择高度最高的分叉作为当前主链,current 块就是当前主链的顶端块,该块还没有完成最终确认,存在被更长的合法分叉替换的可能。
- finalized 块(最终确定块):是已经通过确定性共识算法(默认是 Grandpa 共识)完成全网确认的块,一旦被标记为 finalized,该块的所有交易、状态变更都不可篡改、不可回滚,所有网络中的诚实节点都会认可该块的状态是最终有效状态。
内容的提问来源于stack exchange,提问作者balteo
相关产品推荐
相关产品推荐

