系统组件
RPC
RPC(Remote Procedure Call Protocol)即远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,不需要了解底层网络技术的协议,是基于可靠性、可控制 TCP 的应用层协议,从而保证了用户数据的传输完整。
在 CITA 内部专门提供了 RPC 模块,用于处理用户的 RPC 请求。其作用,一方面对用户的请求数据进行简单的校验,对不符合格式的数据进行友好错误状态返回,对于内部模块,过滤了部分杂乱请求,减少了共识模块等部分压力。
另一方面,从用户角度来说,它是唯一与 CITA 节点进行数据交互的模块,用户不需要关注其它模块的运行状态即可得到相应的服务,在一定程度保证了 CITA 其它模块的运行安全。
目前,RPC 模块是一个可插拔的模块,与其它模块间的数据交互是通过内部数据交换协议来实现的,模块只做最单一功能,便于与其它模块解耦,这意味着,模块的可插拔性,给我们提供了进行横向扩展的策略。通过灵活配置 RPC 模块服务的数量,允许更多用户的接入来处理大量请求,相当于 CITA 对用户的接入进行负载均衡,对请求进行转发,并提供相应的应答。在接入协议实现上,可以定制用户所需各种传输协议规范、特定场景的接口,如 HTTP、WebSocket 协议,以满足其所需服务。
共识
共识算法解决的是针对某个提案(proposal),系统中的节点达成一致的过程。在区块链系统中,共识算法确保所有正确节点的交易顺序是一致的。CITA 共识模块包括 Raft 和 CITA-BFT 的实现,共识模块负责接收交易并进行简单验证,然后打包出块。在 CITA 的实现中,共识以相对独立的形式存在,其他共识算法的实现可以很方便地集成到 CITA 中。
Chain
Chain 模块可以认为是一个 Append only 的 KV 数据库,它以块为单位,不断添加新的区块到链上,并存储交易以及交易执行后的状态到数据库。
CITA 中的 Chain 模块主要功能有以下几点:
- 对共识后产生的区块,处理这些区块中的交易并生成区块哈希,最后添加到链上;
- Chain 模块对 RPC 模块提供各种查询功能;
- Chain 模块对 VM 模块提供操作数据库的接口。
VM Engine
智能合约是运行在可复制、共享的账本上的计算机程序,可以处理信息,接收、储存和发送价值。而合约引擎则为智能合约提供了一个简单、确定、高效、安全的执行环境。CITA 提供了多种形式的合约引擎,用户使用接口与 EVM 兼容: