获取最终区块数据
Getting finalised block data
我正在尝试仅在客户端(而不是运行时)获取最终区块的区块数据(外部)。我可以看到有一个名为 chain_getBlock
的 RPC 端点。我认为此端点不只过滤最终块是否正确?
如果是这样的话,如果我只关心最终区块,检查 Justification 是否 None 就足够了吗?
谢谢
解决方案:
我将通过以下方式获得最终头部的外部信息:
- chain_getFinalizedHead 获取最佳最终区块的哈希值。
- 将该块哈希传递给 chain_getBlock 以获得签名块。
chain_getFinalizeHead 使用客户端的本地信息,因此它不是来自运行时。
上下文:
在您描述的用例中,我认为使用 justification 字段来检查块是否已完成是没有意义的。基于 GRANDPA 的链中的大多数区块都没有正当理由,原因如下:
- 理由可能根本不存在,因为 GRANDPA 最终确定的是一条链,而不是一个区块。 (也就是说,你总是可以证明佳能区块 #5 是最终的,并为佳能区块 #10 提供理由,而在实践中,每隔几个区块就会发生一次终结,而不是每个区块。)
- GRANDPA目前的实现只需要存储理由
对于链上会话的第一个块,这时 GRANDPA 权限集可能会更改。同步客户端需要验证每个 GRANDPA 权限集更改的最终性,并且他们使用链上存储的理由来这样做。
- 目前,定期调整以比会话更改更频繁的速度存储在链状态中。
值得注意的是,客户端确实在其本地数据库中的每个块旁边存储了理由,但除了上述情况之外,它们不是运行时状态的一部分。
感谢 André Silva,因为大部分回复都是他向我解释的信息。
我正在尝试仅在客户端(而不是运行时)获取最终区块的区块数据(外部)。我可以看到有一个名为 chain_getBlock
的 RPC 端点。我认为此端点不只过滤最终块是否正确?
如果是这样的话,如果我只关心最终区块,检查 Justification 是否 None 就足够了吗?
谢谢
解决方案:
我将通过以下方式获得最终头部的外部信息:
- chain_getFinalizedHead 获取最佳最终区块的哈希值。
- 将该块哈希传递给 chain_getBlock 以获得签名块。
chain_getFinalizeHead 使用客户端的本地信息,因此它不是来自运行时。
上下文:
在您描述的用例中,我认为使用 justification 字段来检查块是否已完成是没有意义的。基于 GRANDPA 的链中的大多数区块都没有正当理由,原因如下:
- 理由可能根本不存在,因为 GRANDPA 最终确定的是一条链,而不是一个区块。 (也就是说,你总是可以证明佳能区块 #5 是最终的,并为佳能区块 #10 提供理由,而在实践中,每隔几个区块就会发生一次终结,而不是每个区块。)
- GRANDPA目前的实现只需要存储理由 对于链上会话的第一个块,这时 GRANDPA 权限集可能会更改。同步客户端需要验证每个 GRANDPA 权限集更改的最终性,并且他们使用链上存储的理由来这样做。
- 目前,定期调整以比会话更改更频繁的速度存储在链状态中。
值得注意的是,客户端确实在其本地数据库中的每个块旁边存储了理由,但除了上述情况之外,它们不是运行时状态的一部分。
感谢 André Silva,因为大部分回复都是他向我解释的信息。