今天的「三分钟入门Neo3」将介绍Neo3正在尝试的另一个优化:通过状态根(State Root)哈希来确定全局状态。全局认可的状态可以解决轻钱包的信任问题,确保节点之间的存储信息保持一致。同时,区块和状态持久化的分离能够提升性能。 节点状态 节点的状态可以看作是在一定时间内所有存储值的快照。例如,NEP-5合同的存储状态主要由用户令牌余额组成。节点的存储状态将依次是所有合约中存储的所有数据的概要。 目前在Neo2上,网络上的节点没有一致的全局状态。每当要处理区块时,每个节点都会在本地计算其状态。但即使网络上的所有节点都共享完全相同的且已通过共识节点验证的块信息,由于区块数据的解释不同,一个节点的本地确定状态也可能与另一节点不同。 如果在一个持久的状态根上达成共识,可以快速识别出该问题可能是由VM版本或节点类型的差异引起的。关于状态持久化的讨论最初是由张铮文发起的,他指出,如果将块持久化和状态持久化分离,可以提高性能。
轻客户端信任问题 关于此问题,初步讨论集中在通过与区块分离的形式提供状态持久化,但是全局状态的缺乏导致了另一个问题——轻量级客户端信任问题。由于它们依赖于第三方节点检索的信息,因此轻量级客户端(例如移动钱包)目前面临信任难题。 由于轻量客户端没有存储可用于验证用户余额状态的完整区块链,因此它们无法确保从API或RPC节点检索到的数据是正确可靠的。而Merkle Patricia trie(MPT),一个经过密码验证的数据结构能够改善这一问题。
实施MPT后,网络节点可以继续以确定性方式计算本地状态,并随着时间更新Merkle根。并能在共识过程中将该根哈希与该区块一起进行验证,在该哈希中可以将其保留并由其他节点引用,以验证数据的完整性。 我们将在以后的推文中将更详细地探讨Merkle Patricia的尝试以及Neo3正在实施的其他优化。 区块头中的状态根 为了解决这些信任问题并提供全局状态,建议在区块头中添加状态根。这将允许轻客户端仅存储区块头,并使用它们作为状态证明来检查RPC节点提供的数据真实性。以这种方式验证解决了轻客户端的信任问题,可以在不需要整条链副本的情况下确认信息。 此外,包含在区块头中可确保网络上的每个节点都与全局状态一致。这样可确保所有节点具有相同的合约存储视图,也消除了一致性问题。 本文来源:Neo智能经济 —- 编译者/作者:Neo智能经济 玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。 |
如何建立全局状态,「状态根」了解一下 | 三分钟入门Neo3
2020-03-24 Neo智能经济 来源:火星财经
LOADING...
相关阅读:
- 达鸿飞:Neo3 链上治理机制和经济模型将进行重大调整2020-05-12
- NEO3今天预览2020-04-22
- NEO JOY 2019 成都站,探索链上资产的机会与挑战2020-04-14