ref: https://docs.substrate.io/learn/networks-and-nodes/
当考虑构建区块链时,认为网络被一些边界所定义是非常有用的。例如,连接到单个路由器的一组计算机可以被视为家庭网络。防火墙可能是定义企业网络的边界。较小的孤立网络可以通过共同的通信协议连接到更广泛的区域网络。同样,你可以将区块链网络视为由其边界,及与其他区块链的隔离性(以及通信)所定义。
作为区块链构建工具包,Substrate使你能够开发你可以想象的任何类型的区块链,并根据你的应用程序的特定要求定义其边界。考虑到这种灵活性,你需要做出的决策之一是确定你想要构建的网络类型,以及确定不同节点在该网络中可能扮演的角色。
基于Substrate的区块链可以用于不同类型的网络架构。例如,Substrate被用于构建以下网络类型:
- 私有网络,这个网络中的访问被局限在一组受限节点中。
- 独立链,实现自己的安全协议并且不连接或与任何其他链通信的独立链。比特币和以太坊是非基于Substrate的独立链的例子。
- 中继链,为连接到它们的其他链提供去中心化的安全保障,以及通信服务。Kusama和Polkadot是中继链的例子。
- 平行链,构建用于连接到中继链,并具有与使用相同中继链的其他平行链通信的能力。由于平行链依赖于中继链为生成的块提供最终确定性,因此平行链必须实现与中继链相同的共识协议。
区块链需要网络节点进行同步,以呈现一致且最新的区块链状态视图。每个同步节点存储区块链的副本并跟踪传入的交易。但是,保留整个区块链的完整副本需要大量的存储和计算资源,并且从创世到最新所有的那些块并不适用于大多数用例。为了更轻松地维护链的安全性和完整性,同时减少希望访问区块链数据的客户端的资源要求,Substrate包含不同类型的节点可以与链交互:
全节点是区块链网络基础设施的关键部分,是最常见的节点类型。全节点存储区块链数据,并通常参与常见的区块链操作,例如生成和验证块、接收和验证交易以及响应用户请求提供数据。
默认情况下,全节点配置为仅存储最近的256个块,并且丢弃早于该状态的块——创世区块除外,以防止全节点无限增长并消耗所有可用磁盘空间。你可以配置全节点保留的块数。
尽管旧块被丢弃了,但全节点保留了从创世块到最新块的所有块头,以验证状态是否正确。因为全节点可以访问所有块头,所以可以通过执行从创世块开始的所有块来重建整个区块链的状态。但是,检索有关某个先前状态的信息需要更多计算,因此通常应该使用存档节点来做这个事情。
全节点允许你读取链的当前状态并直接在网络上提交和验证交易。通过丢弃旧块及其状态,全节点需要比存档节点少得多的磁盘空间。但是,全节点需要比存档节点更多的计算资源来查询和检索有关某个先前状态的信息。如果你需要查询历史块,则应清除全节点,然后将其重新启动为存档节点。
存档节点与全节点类似,只是它们存储所有过去的块,并为每个块提供完整的状态。存档节点最常用于需要访问历史信息的应用程序,例如区块浏览器、钱包、讨论论坛和类似应用程序。 由于存档节点保留历史状态,因此它们需要大量磁盘空间。由于这个原因,存档节点比全节点更少见。但是,存档节点使得方便查询链的过去状态。例如,你可以查询存档节点以查找某个块中的帐户余额或查看有关导致特定状态更改的交易的详细信息。当你在存档节点中操作数据时,这些类型的查询更快且更有效。
轻客户端节点使你能够使用最少的硬件要求连接到 Substrate 网络。
由于轻客户端节点只需要最少的系统资源,因此可以将其嵌入到基于 Web 的应用程序、浏览器扩展、移动设备应用程序或物联网 (IoT) 设备中。轻客户端节点通过提供 RPC 端点让用户得以访问链的当前状态。轻客户端节点的 RPC 端点可以使用 Rust、JavaScript 或其他语言编写,并用于读取块头、提交交易和查看交易结果。
轻客户端节点不参与区块链或网络操作。例如,轻客户端节点不负责区块生成或验证、传播交易或达成共识。轻客户端节点不存储任何过去的块,因此无法从轻客户端节点读到历史状态数据,只能从具有该数据的节点获取历史数据。
根据你在启动节点时指定的命令行选项,节点可以在链的运行中扮演不同的角色,并且可以提供对链上状态的不同级别的访问。例如,你可以限制并授权生成新块的节点,以及哪些节点可以与对等节点通信。没有被授权为区块生产者的对等节点可以导入新块、接收交易并向其他节点发送和接收有关新交易的广播。还可以防止节点连接到更广泛的网络并限制与特定节点通信。
您可以使用 Substrate 构建几乎任何类型的网络,从完全自主和私有的独立链到你自己的中继链生态系统或兼容的平行链。
要深入了解网络和节点类型,请探索以下主题。