架构概览

RChain架构的主要构成组件如下所示:

../_images/architecture-overview.png

RChain架构图

RChain的执行架构可能会依赖一些操作相关的外部组件,但是当运行在JVM上时,这些因素会被控制到最小的程度。RhoVM的执行环境运行在JVM之上,每一个RhoVM实例都拥有自己的执行环境。

RhoVM执行环境 为合约的执行提供了上下文,以及一个RhoVM实例的生命周期。

接下来自底向上地介绍架构中的每一层结构:

P2P 网络交互层 提供了节点间进行信息交互的机制。具体采用那种方案需要根据商业级别进行确定,例如采用开源项目ZeroMQ或者RabbitMQ。

存储 RChain采用一种KV数据库MongoDB进行数据的存储,而内存中的数据主要通过前缀树来进行维护。

数据抽象层 提供了对本地节点或者远端节点数据访问的一致性。数据抽象层是SpecialK技术演变得来(包括去中心化内容传递,键值数据库,节点间消息传递和数据访问模式)。这一层将使用Rholang进行实现,因此该层将依赖于RhoVM执行环境以及Rholang的外部函数接口来实现P2P节点信息交互以及本地数据的访问。

共识 (Capser 一种基于权益证明的共识协议)将确保区块链网络中所有节点状态的一致性。

在RChain网络中,所有节点都将包含最基本的使用Rholang进行开发的系统合约。系统启动过程中将使用这些系统合约来实现RhoVM实例的运行,负载均衡,dApp合约的管理,代币系统,节点信任以及其他一些功能。

代币系统合约包括了那些需要运行和本地节点之外进行交互的协议的合约,这些是协议访问代币,他们可以分为以下两类:
  • 权益代币 是用来运行共识算法的,包括了 RChain Rev 代币。另外权益代币可能会通过运行的rchain节点来进行分发。权益代币是用来支付对节点的资源使用。在RChain中,燃料 用来测量系统资源的消耗(与以太坊中Gas的概念类似),这种机制是多维的,取决于计算资源(执行的指令数量),存储资源(存储数据的大小以及存储时间),网络带宽资源(网络服务质量以及吞吐量)的使用。其他可见“流量控制机制”一节。
  • 应用代币,这类代币是可选的,用来运行特定的dApp。新的应用代币可以随时由dApp的开发者进行分发,这类代币与以太坊的ERC20代币类似。

Rho API 为用户提供了访问执行环境以及节点信息的能力。语言绑定 使得所有基于JVM开发的编程语言以及其他潜在的编程语言都可以用来开发智能合约。一个 REPL (读取、执行、输出、循环)开发工具将会提供给合约开发者。此外,每个节点都会有一个命令行界面。节点所有的API都会通过HTTP以及JSON RPC暴露给外部用户。

并发 VS 并行

读者理解并发执行的含义是至关重要。当我们说“并发”时,我们并不是指同时执行多个进程,这种情况应该用“并行”来描述。“并发”是一个结构化的属性,它允许多个独立的进程组成复杂的进程。当多个进程之间相互不竞争资源,我们称这些进程是独立的。

由于RChain致力于在Rholang和RhoVM中实现并发性,所以我们将获得并行性和异步性这一自由且重要的属性。 无论节点是在一个处理器还是在一百万个处理器上运行,RChain设计都是可扩展的。 话虽如此,本文档的读者将会注意到并发计算的设计模式。

节点和区块链语义

下面的UML类图描述了主要的概念类和结构之间的关系。

../_images/RChainBlockchainStructuralSemantics.png

RChain区块链结构语义图