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