总的来看,Substrate节点包括两个主要部分:
-
一个核心客户端,带有外部节点服务,用于处理网络活动,例如对等发现、管理事务请求、与对等方达成共识以及响应RPC调用。
-
一个运行时,包含执行区块链状态转换函数的所有业务逻辑。
客户端外部节点服务
核心客户端包括几个负责在运行时之外发生的活动的外部节点服务。例如,核心客户端中的外部节点服务处理对等发现、管理事务池、与其他节点通信以达成共识并响应来自外部世界的RPC请求。
一些由核心客户端服务处理的最重要活动涉及以下组件:
存储:外部节点使用简单且高效的键值存储层持久化Substrate区块链的演变状态。 点对点网络:外部节点使用Rust实现的libp2p网络堆栈与其他网络参与者通信。 共识:外部节点与其他网络参与者通信,以确保它们对区块链状态达成一致。 远程过程调用(RPC)API:外部节点接受入站HTTP和WebSocket请求,允许区块链用户与网络进行交互。 遥测:外部节点通过嵌入式Prometheus服务器收集并提供访问节点指标。 执行环境:外部节点负责选择运行时要使用的执行环境(WebAssembly或本地Rust),然后将调用分派给所选的运行时。
Substrate通过其核心区块链组件为处理这些活动提供默认实现。原则上,您可以使用自己的代码修改或替换任何组件的默认实现。实际上,应用程序很少需要更改任何基础区块链功能,但Substrate允许您进行更改,因此您可以在认为合适的地方进行创新。
执行这些任务通常需要客户端节点服务与运行时进行通信。这种通信是通过调用专门的.runtime APIs来处理的
运行时
运行时确定事务是否有效或无效,并负责处理区块链状态的更改。来自外部的请求通过客户端进入运行时,运行时负责状态转换函数并存储结果状态由于运行时执行它接收到的函数,它控制着事务如何包含在块中以及如何将块返回到外部节点以进行传播或导入到其他节点。本质上,运行时负责处理链上发生的一切。它也是构建Substrate区块链的节点的核心组件。
Substrate运行时设计为编译为WebAssembly (Wasm)字节码。这种设计决策实现了:
1支持无分叉升级。
2多平台兼容性。 运行时有效性检查。
3中继链共识机制的验证证明。
与外部节点提供信息给运行时的方式类似,运行时使用专门的host functions与外部节点或外部世界进行通信。
以上就是substrate的主要组成部分