NEAR分片方案Simple Nightshade Phase0实际实现细节咨询
NEAR Simple NightShade Phase0 落地实现细节说明
提问背景
我希望厘清NEAR分片策略Phase0阶段Simple NightShade的实际落地实现内容。我已查阅所有相关Medium博文及配套视频,也检索过Zulip聊天记录,仅对后续将上线的chunk与区块生产者选择算法有所了解,个人推测该算法属于Phase1范畴,但始终无法明确Phase0阶段的具体已实现功能。
已整理的公开已知信息
- 当前网络共设置4个分片,仅完成状态分片,未实现计算分片:所有验证者(即区块生产者)需要追踪全部分片
- 公开资料提到,该阶段达成共识的成本将大幅降低,即向NEAR链上新增区块时,单个区块仅需获得NEAR生态中0.1%质押代币的支持即可确认
- 相关介绍文档的“Simple Nightshade的独特性”章节中提到:物理层面没有参与者会下载完整状态或完整逻辑区块,节点仅维护自身负责验证交易的分片所对应的状态。
核心疑问解答
1. 所有验证者追踪全部分片的具体含义是什么?是指验证者需要针对同一区块计算所有分片的状态转移,还是指验证者每个epoch仅被分配至单个分片、后续会在所有分片间轮转?
Phase0阶段的“追踪全部分片”指的是所有验证者都需要对所有分片的chunk(分片块)有效性做校验,但不需要自己执行所有分片的状态转移计算,两种猜测都不完全准确:
- 每个区块高度下,每个分片会先由被分配的chunk生产者生成对应分片的chunk,chunk里包含该分片这一高度的交易、执行后的状态根、执行回执
- 区块生产者收集齐4个分片的chunk后组装成完整区块,所有验证者收到区块后,不需要重新执行所有chunk里的交易,只需要校验每个chunk附带的状态根证明、生产者签名是否合法,就可以确认chunk有效性
- 验证者不会被固定分配到单个分片做整epoch轮转,Phase0的chunk生产者分配是每个epoch按质押量随机排序后,按高度循环分配到各个分片的出chunk位置,区块生产者则是全局随机选出,不绑定特定分片。
2. 若第一个问题的答案为前者,结合runtime无分片感知的特性,是否意味着所有验证者需要同时运行4个runtime实例以适配跨分片交易?同时验证者是如何做到无需下载全量状态的?
首先纠正前提:验证者不需要自己计算所有分片的状态转移,因此不需要同时运行4个runtime实例:
- 只有当节点被选中成为某个分片某个高度的chunk生产者时,才会启动对应分片的runtime实例,拉取该分片的状态,执行该分片chunk内的交易(包括跨分片回执的处理),生成chunk后广播
- 其他验证者校验chunk时,只需要用无状态客户端的校验逻辑,基于chunk附带的Merkle证明验证状态根正确性,不需要持有对应分片的完整状态,更不需要执行交易
- 所谓“runtime不感知分片”,指的是runtime执行交易的逻辑本身不需要处理分片路由、跨分片消息的底层逻辑,这些逻辑由链的分片层在把交易、回执传给对应分片runtime前就完成路由,runtime本身只负责单分片内的状态变更计算。
- 验证者无需下载全量状态的核心原因是Phase0已经引入了块级的无状态校验:所有状态变更的证明都随chunk/区块附带,非出块/出chunk的节点不需要持有对应分片的状态,只需要存区块头、chunk头和必要的Merkle根即可完成校验。
3. 当前分片的拆分规则是什么?是否按照merkle trie哈希地址进行拆分?
Phase0的4个分片是按照账户ID的哈希值前缀做拆分的,不是直接按Merkle Trie的哈希地址拆分:
- 具体规则是对账户ID做sha256哈希,取哈希结果的最高2位,对应4个分片的编号(00对应分片0,01对应分片1,10对应分片2,11对应分片3)
- 合约的状态、属于该账户的交易,都会归属到账户ID哈希对应的分片上
- 这种拆分规则可以保证分片间的账户、状态分布足够均匀,不会出现单分片负载过高的问题。
4. 该阶段为何能实现单个区块所需的质押支持占比降低?
核心原因是Phase0把共识的校验粒度从“全量状态执行”降到了“chunk有效性证明校验”:
- 分片前,每个区块的所有交易都需要所有验证者重新执行一遍,因此需要足够多的质押权重参与校验才能保证安全,避免恶意节点出假块
- Phase0阶段,每个chunk的有效性由对应chunk生产者的质押做背书,同时chunk附带的加密证明可以被所有验证者快速校验,不需要重执行,因此不需要大量质押权重重复做执行验证,只需要总质押量的0.1%对应的出块、出chunk节点完成生产,其他节点做轻量校验即可确认区块合法性,共识成本自然大幅降低。
5. 当前单区块gas-limit为Phase0上线前的4倍,这是否意味着在chunk生产者机制正式上线前,验证者的工作量将达到此前的4倍?
这个理解不成立:
- 首先Phase0上线时chunk生产者机制就已经正式启用,并非等Phase1才上线
- 单区块gas limit涨到4倍,是因为4个分片的chunk可以并行执行交易,每个分片的chunk gas limit和分片前单区块的gas limit基本持平,总处理容量是原来的4倍
- 对非出块、非出chunk的普通验证者来说,工作量不仅没涨到4倍,反而比分片前更低:之前要执行整个区块的所有交易,现在只需要做轻量的证明校验,不需要重执行交易
- 只有被选中当chunk生产者的节点,在自己负责出chunk的高度,需要执行对应单分片的交易,工作量和分片前出整个区块的工作量差不多,远不到原来的4倍。
内容的提问来源于stack exchange,提问作者whalelephant
相关产品推荐
相关产品推荐

