P2P协议告诉你「状态根如何实现?」

2020-04-04 14:10 栏目:经验之谈 来源: 查看()

今天,我们将分享一个当前正在开发的方案——,即P2P消息传播的状态分布,来看看状态根原理在Neo3环境中是如何工作的。

P2P协议告诉你「状态根如何实现?」

网络协议

新网络上的一致节点和普通节点都是通过P2P连接的。每个节点都与网络上的其他节点有多个连接,以确保新信息的快速传播。

节点之间的通信是以消息的形式实现的,每条消息都携带一条指令并加载要处理的数据。该消息可以是对区块链数据的查询请求,例如最新的块信息,或者可以是具有高优先级的信息,例如一致数据。

由于网络上的所有节点都会不断地监控传入的P2P消息,因此P2P网络是分发一致状态的理想场所。这种方法最初是由伊戈尔·科埃略提出的:

“我认为更好的方法是通过P2P消息推送状态散列,并让它们由一致同意的节点签名,这样节点仍然可以跟踪“官方”状态,而不会将它们永远锁定在区块链。”

去耦状态

与块头方法不同,通过P2P网络的状态分布意味着已经达成共识的全局状态永远不会被向上链接。这将状态从块中分离出来,并通过为潜在的性能改进预留空间来满足最初的建议目标。

此外,由于状态从不在链上提交,影响状态的Bug修复仍然可以部署,而不会引入与块数据的冲突。如果发生这种情况,可以分配一个新的签名哈希。新核心开发者杰夫·索林斯基说:

“如果新版本的Neo需要解决一些会改变MPT哈希的问题,可以通过分发离线的MPT哈希文档来实现,该文档将包含由共识节点签名的新MPT哈希。客户端可以在从脱机块文件重新同步块链时加载哈希文件。

这种方法的一个潜在缺点是网络协议上的额外负载可能会影响事务吞吐量,因为添加新消息或增加消息的频率会减少其他任务的处理时间。然而,如果状态根散列分布在现有消息(例如,与共识过程相关的消息)中,这种负担将被最小化。

-去耦状态-

解耦的目的是减少数据模型、业务逻辑和视图显示之间的耦合,以最小化关联度,并防止全身受到一次事件的影响。

实施建议

在决定通过P2P消息实现状态分发后,Neo软件工程师张涛简要概述了这一可能的实现方案。

详细描述了三个可能的实施方向:

-将状态根添加到准备请求共识消息中,并将签名添加到提交共识消息中;

-使用单独的dBFT流程就状态根达成共识;

-创建块后,让一致节点签名并广播当前状态根。

由于其他开发商更喜欢第一个和第三个方案,张涛建议将这两个方案合并。在这种情况下,如方案1所述,一致节点将状态根与新块一起发送,但是如方案3所述,未确认的状态根可以通过一致节点签名来验证。

张涛也有两个需要解决的问题。在升级的情况下,当开始生成新的状态根链并将其广播给其他节点时,将需要大量的P2P消息,从而对性能产生不利影响。

但是,由于每个完整节点仍将生成一个本地状态根,因此只需检查由一致节点签名的最新状态根。这样,就不需要生成大量的P2P消息,因为每个光节点或所有节点只需要最新的状态根进行验证。

以上基本介绍了如何通过P2P协议在Neo3中实现状态根。状态根是实现近地三号MPT数据结构的关键之一。接下来的三分钟介绍将介绍MPT树的基本原理和简单的支付验证逻辑。

微信二维码
售前客服二维码

文章均源于网络收集编辑侵删

提示:仅接受技术开发咨询!

郑重申明:资讯文章为网络收集整理,官方公告以外的资讯内容与本站无关!
NFT开发,NFT交易所开发,DAPP开发 Keywords: NFT开发 NFT交易所开发 DAPP开发