摘要: 进入2017年下半年,CITA、BCOS等平台纷纷公布代码开源,给从事区块链开发的技术人员打开了一扇窗户。秘猿科技CEO及创始人谢晗剑表示,在设计CTIA时,吸收了很多之前项目开发中积累的经验  
 
作为EEA(企业以太坊联盟)全球30位创始成员之一,秘猿科技一直专注于区块链技术的开发与研究。2011年起,秘猿核心团队开始参与各种区块链项目的研究与开发,以太坊Ethereum是其中之一。2016年6月,秘猿推出中国首个兼容以太坊智能合约的自主研发企业级区块链产品原型CITA(Cryptape Inter-enterprise Trust Automation)。
 
进入2017年下半年,CITA、BCOS等平台纷纷公布代码开源,给从事区块链开发的技术人员打开了一扇窗户。秘猿科技CEO及创始人谢晗剑表示,在设计CTIA时,吸收了很多之前项目开发中积累的经验。“我们在创立Cryptape的时候,就是想为企业级的用户提供一个优质的平台,让他们可以开发企业级的去中心化应用。”
 
“当前所有公有链、联盟链、私有链的设计都是针对个人用户”
 
企业级的用户和普通用户有什么区别呢?谢晗剑指出,“我们目前所能看到的是现在所有区块链的设计,包括所有的公有链、联盟链、私有链,在我们看来,它们的软件架构都是针对个人用户设计的。所有的区块链节点都是被设计为运行在一台服务器上,如果你使用比特币或者以太坊的钱包运行它们的节点,它们的设计原则是希望节点运行在全世界每一个用户的笔记本上面,这样的设计实际上非常难。”
 
“而企业级用户可以做到哪些事情呢?他们有很多的资源:有专门的运维团队,可以买许多服务器,可以维护这些服务器。现在的互联网公司就是这样,如阿里和腾讯,服务这么多的用户,才能承受这么多的用户量。这是我们设计CITA的出发点,我们希望可以帮助企业级用户利用好这些优势,因此我们必须要在架构这一层做出非常多的改动。”
 
首个使用微服务机构的区块链系统
 
CITA是世界上第一个使用微服务(Microservices)架构的区块链系统。什么是微服务呢?就是把区块链的每一个部分,区块链节点的各个功能彻底拆开。每一个功能可以是一个独立的进程或者服务。“比如说,在CITA里面有独立的共识服务、独立的执行服务、独立的网络服务,而所有这些服务可以运行在不同的服务器上。通过这种方式我们可以负担整个的节点系统,分散在不同的服务器上。因此,当交易量变大时,可以增加更多的机器来应付。比如,我们可以增加更多的执行器(Executor)的数量来并行处理交易。所以,从这个角度来说,CITA可能是目前唯一一个适合云计算的区块链系统。”
 
区块链有个问题是,所有的交易需要所有的节点去处理。“我们需要把收到的所有交易复制N份交给给所有的节点。当我们向网络里增加节点时,其实并没有办法增加这个网络的处理能力,无论这个网络里是1000个还是10000个节点,它的处理能力始终都只相当于一台服务器,这是它存在的本质问题。但是我们认为,可以从另外一个角度去解决它。CITA的思路是,我们可以想办法把每台计算机变得很强,把每台计算机变成我们叫做逻辑节点的东西。之前提到节点,你的脑海中可能想象的是一台服务器,但是在CITA里面,每个节点是一个逻辑节点,有可能是一台服务器(上面运行一组微服务),也有可能是一组服务器组成的集群。我们把每个节点变得很强,把水桶里最短的那条木板变长,所以整个网络的处理能力也会提升。”
 
把共识和执行分开,独创异步交易处理
 
“CITA做的另外一个有意思的事情是独创的异步交易处理(ATE),我们知道现在区块链软件的设计其实是把所有的文件都混在一起,我的节点在收到交易之后生成一个区块达成节点共识,共识之后再进行交易,整个流程是连贯的。但实际上,把共识和执行这两个流程分开,其实会获得更多的益处。”
 

举例来说,在以太坊中有交易和状态,每个块里都有许许多多的交易,这些交易被处理完之后,会产生一个确定的叫做世界状态的一组数据,这个世界状态的状态根会被再存到区块当中。“计算是个非常耗时的操作,我们实际上可以很快对交易进行共识和排序,但是排完序之后,我们还等待节点把这些交易都处理完,算出最后的状态,再把这个状态写回到区块里面,这是一个同步的过程。”
 
但是,CITA把执行服务和共识服务完全拆开变成两个独立的进程,这两个进程之间通过消息通讯,它们是完全异步的。异步的意思是说,共识进程可以先跑,可以先给交易完成排序,后面的执行服务可以慢慢地算。
 
“举例来说,在CITA中,我们可以先对第101个块里面的所有交易顺序排好,此时系统压力非常大,第101个块里可能包含了一万笔交易,我们在一个块的时间内处理不完,一个块的时间可能只有3秒。但我们可以继续排下一个块的交易顺序,因为共识服务是独立的进程,我们可以继续产生第102个块,继续对当中的交易进行排序。然后我们的执行服务,可以异步地按照自己的速度去消化第101个块里的交易,可能过了两个块的时间(6秒)才能把这些交易都消化完,这个时候可以把整个事件的状态写回到第103个块里,相当于执行服务中间跳了一个块。我们的共识服务不需要等所有的交易都处理完,把最后的状态都写回到第101个块,我们的执行服务可以异步地按照自己的节奏来处理这些交易,然后延迟地把状态写回到后面的块里,本质上相当于把某一个瞬间的系统压力分担到了后面所有的块上。更棒的是,我们的执行服务可以有很多个,比如说第101个块里10000笔交易,我们一个执行服务处理不完,那么可以在5台机器上跑5个执行服务来消化掉这些交易。”
 
独特执行器设计,允许用户混合使用多种智能合约技术
 
在执行方面,CITA执行器(Executor)的设计也非常有特点。CITA允许用户混合使用多种智能合约技术,且可以支持非常多的执行器。“数据和执行是相对的两个方面,我们把数据排好,然后可以选择不同的方式来处理它。我们可以用EVM执行器去处理它,那这个数据就是EVM上的交易,它是一个合约的调用。此外,我们可以用原生合约执行器Native,将交易通过标准接口交给原生代码执行。我们也支持对传入交易不做任何处理的NOOP执行器,这样的处理器特别适合存证,因为它没有在执行上面浪费任何时间,仅仅只是把数据存下来。然后,还有处理隐私交易的执行器Private和组合执行器形成新执行器的Hybrid执行器。所以,其实在CITA中是可以混用这些执行器的。通过不同的执行器,无论是使用原生代码例如Java,Rust或者C++编写的原生合约,还是使用专用语言例如Ethereum上的Solidity编写的轻量合约,都能够同时在一个平台上运行。”
 
Native是一种非常类似Fabric的执行方式,因为在Fabric里面,可以用原生语言去编写合约,所有的交易都会发给用这种原生语言系统写成的合约,用原生环境去跑,其效率非常高。“我们的EVM和以太坊的EVM其实是一样的,所以CITA是可以同时运行EVM的合约和Fabric的合约。我们为原生合约添加了非常多的支持,比如说我们在原生合约里可以调用数据操作的接口,去使用像Solidity里面一样的接口,你可以在原生合约里面和EVM的合约相互调用,这是一个原生合约的例子,是用Rust写的。值得一提的是Rust是一种很棒的语言,它在国内的使用虽然不多,但在国外已经是非常受欢迎的系统级语言,CITA本身也是用Rust写的。总而言之,就是我们可以接受Solidity合约的调用,但是我们用原生代码来处理。你以为你在调用EVM上面的一个Solidity合约,但实际上下面跑的不是EVM,而是Rust写的一个非常快的代码。所以在你的系统上遇到性能瓶颈时,在CITA上面,你可以把Solidity合约替换掉,用原生代码来写,然而该应用的其他方面都不需要有任何的变动。我们还在不停地为原生合约添加更多的支持,这只是第一步。”
 
此外,谢剑晗还表示:“在CITA中,我们还提炼出一个概念叫配额(Quota),因为我们同时支持EVM和原生合约,EVM里面有gas这样的机制来防止停机问题,来控制程序的执行不会永远循环下去。但是在原生合约中缺乏这样的机制,我们只能靠时间来控制,每一个原生合约的执行都受到时间的控制。所以,Quota是我们对程序执行所需要资源的一种抽象化。在许可链当中,还要考虑如何发放Quota的问题。因为在公有链中可以通过经济激励的方式,如挖矿挖到币,以此换取gas来支持交易的执行。但是在许可链当中没有这样的机制,那么我们在许可链中设计了不同的Quota发放的方式,比如说你的账户在每个块会获得一定数量的Quota,用完了就只能等下一个块,这就是Quota的分配策略。”
 
隐私交易加入监管设计
 
在执行器中,CITA还支持一种叫做隐私交易的交易。目前的区块链是所有人都能看到,但是有一些交易是希望只有自己和相关方能够看到。秘猿为此也做了很多的调研和思考,在他们看来,无论是零知识证明,还是反签名等,虽然能用,但是效率较低,安全性没有得到充分的保证。
 
“我们的隐私交易只在交易的相关方之间传播,隐私交易不是所有人都能收到,在网络传输层就收不到,也存不下来。这样的好处就是不仅今天你无法看到我的隐私交易,未来50年100年以后你也看不到我的隐私交易,因为你从来没有拿到我加密库的数据。为了处理隐私交易,我们设置了两个状态,也就是说每个节点中不仅仅有所有节点都有的公有实践状态,还有只有自己节点能看到的的Private state,每个节点都可以操作这两种state。”
 
值得一提的是,秘猿在隐私交易的方案中加入了监管的设计。隐私交易不仅能被相关方看到,也能被监管机构看到。在CITA中还有其他各种微服务,支持基于角色的权限控制(Role-based access control)。CITA为可供用户操作的资源进行了细粒度的划分和权限定义,并允许用户自定义角色,用户可以通过角色方便的组织用户、管理资源权限,使权限分配准确匹配企业的组织架构。同时权限与角色数据和变更历史都会被保存在区块链上,满足日后审计需要。

区块链不可篡改的关键是交易历史不可被篡改,但区块链上的交易数据每时每刻都在变化,无论是比特币还是以太坊。以比特币为例,虽然说数据不可篡改,但是账本里谁有多少个比特币每时每刻都在更改,因为一直都有转账发生。区块链当前的实践状态是一直在更改,不变的是交易历史。

“这也是我们经历了The DAO事件之后悟出的道理。所以在CITA里,我们保证的是交易历史不会被篡改。但是在问题发生的时候,我们应该允许发生紧急控制交易的行为,允许链外的治理委员会来修改有问题的合约和数据,甚至暂停这个系统。因此,CITA在底层特别做了这样的支持,如果我们看到治理委员会发出一个多重签名的交易,节点会做特殊的处理,这种交易可以去更改一个合约中的数据,可以去升级一个合约,但这些交易同样会被忠实地记录在区块链上。所以未来的人回过头来看的时候,他们会明白当时出现了怎样的状况,我们做出了这样的决定和修改,而不是把历史抹掉。”
 
CITA在今年7月底已经在Github上完全开源。未来一年,谢晗剑打算推动CITA社区的成立,寻找更多合作伙伴。他期望有更多人在CITA之上定制化服务,而且不只是他们自己提供服务,其他合作伙伴也科在其之上提供,大家处于平等地位。如别的公司可以通过CITA定制为面向金融、汽车行业更好的方案,卖给他们的客户等。目前秘猿作为EEA的成员,正在参与EEA标准的制定,也在努力让CITA符合EEA标准。
德国
DLT
区块链