CITA

CITA( Cryptape Inter-enterprise Trust Automation )是一个面向企业级应用的支持智能合约的区块链框架,可以为企业级区块链应用提供一个稳固、高效、灵活、可适应未来的运行平台。

共识

CITA的共识模块实现了两种共识算法,非拜占庭容错的Raft算法和拜占庭容错的Tendermint算法。

  • Raft算法

    系统启动时,每个节点随机超时触发选举,当选举成功后,leader负责接收交易和出块。leader将接收到的交易通过rpc发送到follower,当leader接收到一半以上 follower的append成功响应时,将此交易提交,并保存到交易池。当leader接收到chain发送的status信息时,准备打包交易出块。如果leader所在的节点chain异常, 则会触发新的选举流程。

  • Tendermint算法

    Tendermint是PBFT算法的变种。每个节点轮流打包交易并出块,在每个高度上,只有一个块可以被提交。 当块无法在该轮被提交时,协议会移动到下一轮,由新的节点负责提议一个该高度的块。当超过2/3的验证节点对同一个块precommit,该块才能够被提交。 Tendermint算法可以容忍网络中少于总节点1/3的拜占庭节点。

智能合约

CITA对智能合约的执行器分为两类,一种是解释性合约执行器,另一种是原生合约的执行器,以满足不同用户场景的业务需求。

  • CITA对以太坊智能合约进行封装与兼容,用户在以太坊编写的Solidity合约,同样可以部署、运行在CITA上,一次编写多处运行,无需重新学习其他合约语言,简化编写合约的成本。
  • CITA对原生合约的支持,合约直接转化为机器指令码去执行,大大提高合约的执行效率,满足企业级别的复杂业务逻辑场景。

用户通过调用合约在CITA节点上发送交易,各个节点之间对合约执行的状态、结果进行共识,保证合约正确的执行,以及交易结果的正确。 CITA支持智能合约是图灵完备的,采用系统合约管理用户对系统资源的使用,用户可以编写各自的业务逻辑,适用于不同的业务需求场景。

性能按需伸缩

CITA采用了微服务架构,解耦了服务接口、共识、交易处理、网络同步等服务,可灵活组合与配置以满足行业应用的需要。

针对一般应用,只需将上述服务部署到单个物理机上。针对每秒交易量高达10万 的特殊应用,CITA可通过将交易处理服务分布到多个节点以提升每秒交易量,实 现交易性能的横向扩展。

功能扩展与定制

CITA采用消息总线作为微服务间的通信接口,客户应用可以通过订阅总线上的信 息,实现对CITA的功能扩展,如性能监控、业务监控。

隐私与保密

隐私交易只能被该交易的相关方(参与方)查看,而无关方无法查看其交易内容,从而达到交易保密的功能;

  • 隐私交易提交后,先在本地进行加密,采用PGP加密原理;
    • 根据生成的symmetric key对交易内容进行对称加密,然后对加密后的内容进行HASH摘要值计算;
    • 将原有交易内容替换为HASH摘要值;
    • 对symmetric key进行非对称加密(加密根据本节点私钥和对端节点公钥),生成一对一的加密symmetric key;
  • 将以上步骤中的加密后的内容,交易数据,加密后的symmetric key打包成加密box,通过点对点隐私交易传输协议传送给拥有解密私钥的节点;
  • 当对端节点接收到加密box信息之后,需通过本地私钥和发送节点公钥解密,才能进行后续的操作;
  • 隐私交易的无关方最后只能获取包含根据原有交易内容进行加密之后计算的HASH摘要值的交易,而不能查看其明文内容,这样就实现了隐私交易对无关节点的不可见的功能;
  • 隐私交易只会在参与方节点上执行,而在无关方则直接跳过该笔交易的执行;
  • 隐私交易的执行状态可以向参与方节点进行查询。

身份管理

CITA中分为节点和用户两种身份。其中节点参与整个链的共识或者作为只读节点存在,保存了整条链的信息对外提供服务,用户则是CITA的使用者,消费由节点提供的服务。 对此二者身份的管理保证了接入节点身份和用户身份的可靠性,一定程度上提高了CITA的安全性。

  • 节点身份的管理主要是对节点身份进行验证,控制节点的接入。只有验证通过,允许介入的节点才能够与其他节点建立通讯会话、同步信息、参与共识等。 目前CITA是采用白名单的方式来对节点身份进行管理。白名单由管理机构生成并分发,由运维人员维护和管理,由每个节点本地保存。不在白名单中的节点则意味着验证失败。
  • 用户身份的管理包括用户身份验证以及私钥的管理。身份验证可控制用户的准入,而私钥的管理主要用于对用户私钥的维护。
    • 只有用户通过了身份验证才能够使用CITA提供的服务。身份验证也可由企业提供,包括中心化体系的LDAP或PKI,通过CITA提供的标准接口即可使用。
    • CITA允许已验证通过的用户对其私钥进行维护,可申请定期更新,对私钥进行替换,一定程度上增加私钥的安全性,降低被盗的风险。如私钥不慎丢失,也可根据私钥更新权限申请使用新的私钥。

权限管理

不同于公有链中账号不受管理,CITA作为许可链使用权限管理机制来控制账号的行为,一定程度上提高了CITA的安全性。为了满足企业级应用的需要,CITA使用基于角色的权限管理。 每一种账号可对应多个角色,每个角色可拥有多种权限。

  • 为了统一对账号进行基于角色的权限管理,CITA把用户和节点当成两种不同的角色,目前账号管理主要是对用户角色进行管理,后续可能会支持节点角色的管理。
  • CITA内置了管理员角色和普通角色,其中管理员角色拥有所有权限,拥有管理员角色的账号只拥有此唯一角色被称为管理员。普通角色拥有一般的读取权限及创建角色的权限。
  • 默认除了管理员所有账号拥有普通角色,即所有账号可自定义角色。
  • 用户可对角色进行授予和收回。

配额管理

交易的执行和存储需要使用每个节点的计算资源,包括CPU、磁盘空间、带宽等。而智能合约的执行往往需要更大的计算资源,CITA作为一个支持智能合约的区块链, 需要恰当的机制来限制节点的计算资源的使用,防止被有意或无意的耗尽计算资源。

CITA将节点计算资源的度量称为计算配额,配额管理即为相应的发行和消耗机制。配额的发行机制只是为了补充消耗的计算配额,故CITA默认实行简单的周期性恢复,也可由用户进行自定义的发行策略。 而配额的消耗机制根据CITA执行器的不同而不同,可由设置的配额消耗上限来对其进行管理和限制。配额消耗上限可分为区块的消耗上限和账号消耗上限。 区块的消耗上限即为每个区块能够使用的最大配额值;而账号的消耗上限可对每个账号进行全局性的设置也可对制定账号进行特殊设置。如此不仅可统一对配额上限进行管理,也可针对不同账号灵活分配配额。

系统治理

许可链一般运行在大型金融场景,这类机构一般都有很强的数据一致性和准确性需求,不能容忍一点点的错误。但是当前区块链还处在非常早期的阶段,底层系统的实现和业务智能合约的实现都难免有意想不到的错误,存在数据不一致和错误的风险,这就要求许可链有系统治理的方案。目前区块链常见的方式是更新系统代码并硬分叉,对于数据不一致的的情况一般是清空分叉链数据再进行同步,费时费力并且增加运维难度。

在CITA中用户可以设定超级管理员角色,得益于灵活的身份验证服务设计,超级管理员角色可以有任意的身份验证逻辑。在单中心的治理结构下该角色可以由单一核心用户控制,在多中心的治理结构下,核心用户可以形成类似委员会的治理机构联合控制(例如通过多重签名)超级管理员角色。

中心化治理角色能够通过链外通道协商形成一致行动决议,增强系统在紧急情况下的应对能力。在操作错误、软件错误或是硬件错误等问题发生时,系统可能进入紧急状态。CITA将紧急状态分为交易可恢复(Transaction Recoverable)和消息可修复(Message Recoverable)两类。

由于错误的交易或者是有bug的智能合约生成了错误的视图数据,但是节点依然能够处理交易,此时系统处于交易可恢复紧急状态。在这种情况下,超级管理员可以构造修订交易快速应对。节点在处理修订交易时同样会先将该交易打包入块,再执行交易,因此所有修订交易都将被记录在历史中,为操作审计提供支持。

消息可修复紧急状态发生时,节点无法再正常处理交易并打包,共识服务停滞,但是点对点网络依然能够正常工作。此时超级管理员可以通过CITA提供的管理员工具构造特殊消息并广播,节点收到消息并验证发送者身份后将直接处理,无需共识。