互联网⻜速发展让信息的流转速度变得非常⾼效,从而推动了人类社会的发展,但从另外一方面看,隐私问题也正是因为互联网的⾼速发展而变得更加严重。区块链作为下一代的价值互联网,曾被认为是保护隐私非常好的工具,但大家很快发现,当前主要的区块链网络中,一旦数字钱包地址和它的拥有者的个人信息对应起来,该钱包的拥有者所有账户信息、交易信息都将在整个网络中一览无遗并且无法消除,这会导致比互联网的隐私泄露更加严重的问题。为此区块链行业的密码学和顶尖的技术专家都在进行不懈努力,业界有几支团队研发了一些保护隐私的特殊虚拟货币,这类虚拟货币被称之为“匿名币”,行业中比较有名的数字货币包括大零币 Zcash (ZEC),门罗币 Monero (XMR),达世币 (DASH)等,这些采取了一定隐私保护的数字货币基于其巨大的市场需求,均获得了非常⾼的流通市值,排名在全球20大虚拟货币之列,说明隐私保护对区块链行业而⾔是一个非常强烈的需求。
智能合约是一种旨在以信息化方式传播、验证或执行合同的计算机协议。区块链上图灵完备的智能合约系统,可以满⾜开发者编写任意复杂的,存在于区块链上并且能被区块链传递的合约。开发者可以用智能合约开发语⾔实现比如定制货币、⾦融衍生品、身份系统和去中心化组织等功能,极大的扩展了区块链系统的适用范围。智能合约是价值互联网重要的的技术基础之一,但是目前令人沮丧的情况是,全球目前运行的区块链系统均不支持对智能合约加密保护,现有的隐私保护机制使用场景受到这一技术限制的影响被极大的缩小了其适用范围。区块链技术起源于中本聪发明的比特币,被视为区块链1.0,让人类世界找到了数字虚拟货币这一巨大的财富;而当以太坊面世后,智能合约的发明让区块链技术的落地变得更为可行,从此基于区块链技术的去中心化分布式应用(简称“DApp”)成为可行,这让区块链技术可以被运用到更多的行业中,因此以太坊被视为区块链2.0。同样可以类比,如果Zcash和门罗币为代表的不支持智能合约的匿名区块链系统是隐私保护方案1.0的话,为了让方案可以落地到更多行业和应用场景中去,支持智能合约的隐私保护方案2.0备受期待。
不可否认的是,支持智能合约的匿名区块链系统具有非常⾼的技术门槛,全球仅有屈指可数的团队正在为之努力,如今Super Zero(简称“Sero”,中文:超零币)也正式向全球进行产品发布,Sero的研发团队(简称“Sero团队”)也是目前全球唯一能就该问题提出完整的解决方案,并已经完成主要工程研发工作的团队。不仅如此,Sero团队并没有将成功研发支持智能合约的隐私保护区块链系统作为去中心化应用的隐私保护方案的终点,为了让受到隐私保护的去中心化应用的广泛落地成为可行,Sero团队不但考虑到了保护DApp使用者的账户隐私、相关令牌(Token)和私有数据传递过程的隐私,同时充分考虑到了在区块链系统数据传输过程中,之前受各层传输层协议限制的隐私保护策略,甚⾄还包括了去中心化应用和互联网应用相结合场景下的数据隐私保障。
为此,Sero团队设定了一个能为去中心化应用提供完整隐私保护解决方案的三件套项目,包括Sero(支持智能合约的匿名区块链系统)、异形协议(一个能解决去中心化网络信息传输的协议)以及卡斯特罗协议(保护去中心化网络,以及为互联网交互的各节点提供隐私保护的协议)等尖端创新科技组件。最近Sero已经完成了核心的研发工作,包括隐私保护相关协议,和图灵完备的链上运行智能合约,本文主要就Sero的工作进行说明,并包含了该项目的一些基本情况以及披露后续的项目计划。
Sero(Super Zero,超零系统)是全球⾸个通过非交互式零知识证明(NIZK),真正实现具有图灵完备智能合约的隐私保护的区块链系统,和现有的区块链隐私保护技术相比,Sero不仅能实现对账户信息和交易信息的隐私保护,还能实现对图灵完备的智能合约输入输出的隐私保护,另外,开发者还能基于Sero-Chain上的智能合约发行的匿名数字资产(Token),并且与智能合约的通讯信息也同样会得到隐私安全保护。
Sero重新设计了区块链结构和各类底层协议,使得对隐私保护的图灵完备智能合约成为现实,不仅使更广泛的应用场景获得了隐私保护措施,并且因为其采用的先进的NIZK加密学算法,也进一步提升了对用户隐私数据的攻击难度。除此之外,在即将发布的V1.0版本中,改进了目前NIZK加密算法的实用性问题,大大降低了所需要消耗的内存资源,提升了计算效率。除此之外,对比市面上的主流匿名区块链系统,Sero对图灵完备的智能合约的支持和对其相关的去中心化应用的隐私保护措施,使其使用场景得到了极大的泛化。
更值得一提的是,Sero团队不仅考虑到了去中心化应用本身所需要的隐私保护措施,而且还从应用落地的⻆度,计划从点对点的网络传输安全以及账户物理的网络地址的隐私性⻆度提供解决方案,可以使与中心化应用交互时,或者与使用者客户端交互式时也能获得强大的隐私保护功能。
整个综合解决方案会由三位一体的全套套件构成,其中Sero是第一个公开发布的项目,另两个项目的定位分别如下:
异形协议 (Alien Protocol):一种分布式的DNS系统,可以利用现有的P2P网络交互信息,具备IP自动切换和动态寻址的功能,抗攻击者阻断,使整个数据传输网络具备⼗分稳定的安全性。
卡斯特罗协议(Castrol Protocol):通过去中心化网络的方式,实现对IP地址的匿名保护,可同时运用于中心化和去中心化网络的物理节点的隐私保护。
SERO的设计
1. 设计原则
正如前文所说,现有市场存在的去中心化网络的隐私保护技术,并没有跟去中心化应用相结合,尤其是没有对智能合约的执行进行隐私保护。在智能合约中执行的动作序列,通过网络传播和/或记录在区块链上,是公开可见的。在图灵完备的区块链网络中,Sero的设计,在满⾜系统能力需求的同时,还必须满⾜几个基本的原则。
不可追踪性,区块链网络中的每一笔交易都具有输入和输出,如此一来,就构建了一个交易的有向无环图,在这个图上可以跟踪所有的交易流向,所有的交易序列都能被串联起来,并以此溯源。Sero的设计中要将两个交易之间的链接断开,使攻击无法进行。
不可关联性,区块链网络中每个用户都有自己的收款地址,一旦这个地址跟真实的用户身份关联,那么,在网络中这个地址发生的所有交易,都能关联到这个身份上,该地址一切的行为都暴露无疑。即使用户可以创建新的假名公钥以增加其匿名性,每个假名公钥的所有交易和余额的值都是公开可见的。Sero通过加密技术⼿段使收款地址无法被关联。
抗统计分析,真实用户的行为具有统计特点,如果区块链网络中的交易数据之间具有反应这样统计特点的关联性,通过对区块链数据的统计分析,就能够一定几率推测出这些地址发生的交易是属于某个特定用户的行为。即使是采用环签名,在面临有作恶的环成员或者节点的时候,抵抗统计分析的能力将会下降。Sero需要通过技术⼿段将地址以及地址之间的关系完全隐藏。
实用性原则,Sero在对交易数据进行隐藏的同时,并不会一股脑的将所有的信息都纳入范围内,这样做是不经济并且运行效率低下的。Sero会兼顾用户已有的使用习惯和痛点,进行阶段性研发。
可选的审计方案,对于某些较为复杂的商业应用领域,用户可能需要有一个完全信用的第三方对他发生的所有交易进行财务方面的审计,这时,他应该可以做出选择,决定是否给予第三方一个跟踪他所有交易具体信息的能力。
2. 实现方案
在第一期的计划中,Sero通过非交互零知识证明(NIZK),将交易体系的输入和输出以及交易细节完全隐藏起来,除了交易双方,其他任何人对这些隐藏细节完全是不可见的。同时,因为考虑到线上运行智能合约以及公开合约发行资产总数具有普适性的适用性,Sero会保留链上运行的智能合约,将智能合约所产生的资产与Sero本身的交易体系融合,以此来实现智能合约所产生资产的隐私性。
在第二期的计划中,对于具有隐藏合约发行资产总数的需求,我们将在线上运行智能合约内部提供一种名为隐匿数据的隐藏结构,同时只在链下对这种隐匿数据进行计算。以此来实现隐藏合约发行资产总数的功能。
在第三期的计划中,我们会采用更为先进的共识机制,提升Sero网络的吞吐量。同时,对于具有隐藏合约内部计算规则的需求,我们会将合约的运行分解为线下计算和线上验证两个步骤,线下计算完全了解运算规则和数据,并给出运算后的加密结果,当这个结果提交到线上时,线上节点只会对结果进行有效性验证,以确定其中包含的数据是否符合运算规则,但节点并不知道这些数据和运算规则的详细信息。
3. SERO协议
账户系统(Account System)
账户分为用户账户和合约账户两个类别,其中,用户账户是用户选定一个 32 byte的Seed,而合约账户根据用户安装智能合约的环境产生的一个 64 byte 的地址,两者都是系统唯一、不可重复的。
用户账户可以产生个64 byte的私钥 ,和一个64 byte的公钥 ,该公钥就是用户的付款地址。在安装或者调用智能合约的时候,钱包会根据当前的情况生成一个暂存地址PK,这个暂存地址无法用任何方式关联到用户的私钥和公钥,并且只会使用一次。
在智能合约安装的时候,钱包会根据当前情况,将暂存地址转为一个64 byte的智能合约地址 (CADDR ) ,当节点收到地址时,需要确保合约地址是没有出现过的。
Seed是账户种⼦,用户必须妥善保存。SK是私钥,不可持久化存储,其中(TK)是跟踪私钥,可以提供给可信的第三方用作账户的审计。PK是公钥,提供给其他用户的交易目标地址。(PK)是暂存地址,提供给智能合约,临时用来接收资产的目标地址。
资产系统(Assets System)
不管是用户账户还是智能合约账户,其下都具有管理无限种类资产的属性,除了交易费用结算采用Sero币以外,每一种资产都具有跟Sero本身等同的交易特征,除Sero币之外,其余的资产可以由智能合约产生。每种资产在产生的同时,可以赋予一个最⻓32 byte⻓度的名称(Currency),用于助记,这些名称也是不允许重复使用的。在账户进行余额查询或者转账操作的时候,可以指定资产类型。
见证系统(Witness System)
Sero协议采用非交互零知识证明(NIZK),在生成交易的时候,需要提供资产来源的见证信息,每个节点会根据这些见证信息进行验证。因此,Sero会采用merkle tree维护一个记录状态变更的见证系统,系统在节点提供验证功能,在钱包端提供认证所需的信息。
ROOT = MERKLE_ROOT_AUTH(POSITION, LEAF, PATH)
ROOT是当前 merkle 树的根,LEAF是第POSITION⽚叶⼦,PATH是LEAF到ROOT的证明路径。
证明系统(Proof System)
Sero的证明系统包含一个基于有向无环图的计算电路,用来描述Sero每笔交易的内部约束,包括各种资产类型的输入输出平衡、公私钥验证、承诺的有效性、见证的有效性等环节。装载好数据的电路可以通过非交互零知识证明(NIZK)生成一个Proof,通过提交这个Proof,可以在隐藏大量细节信息的情况下,让节点对电路中装载的各种参数和约束进行验证。
执行步骤(Process Step)
1. 计算(Compute),用户采用账户、资产、见证系统提供的信息,并根据当前所需的计算,提供输入数据,然后在链下运行计算规则得到结果,结果通过上述几个系统将生成状态变更的密文(E)和一个证明(P1,P2)。
OUTPUT = COMPUTE(METHOD, INPUT, ACCOUNT, ASSETS, WITNESS)
(E, (P1,P2)) = PROVE(OUTPUT )
2. 提交(Commit),用户将生成好的密文(E)和证明(P1,P2),加上随机生成的寄存地址(ZRPK,VRPK),封装为交易(Stx),提交给节点。
FROM = (Rf, Rf PK)
STX = (E, P1,P2,FROM)
Commit(STX)
3. 验证(Verify),节点在收到交易(Stx)之后,将其中P1在见证系统中进行确认,将P2交给证明系统,两者确认正确后会运行智能合约得到输出,最后将输出关联到暂存地址上。
witness_ret = CHECK_WITNESS(P1)
proof_ret = CHECK_PROOF(P2)
verif y_result = witness_ret & proof_ret
4. 确认(Confirm),资产接受方在同步到得到验证的交易(Stx)之后,利用自己的私钥将结果密文(E)解出生成明文(D),并将明文(D)和证明(P1)输入到证明系统中进行校验,成功则说明交易是真实的。真实的交易如果被n个区块进行了确认,那么交易接收方可以认为这笔交易已经确认。
D = DEC(E, VSK)
commitment_ret = CHECK_COMMITMENT(D, P1,PK)
confirm_ret = commitment_ret & block_confirm 》 n
要说明的是,Sero的执行步骤是开放式的,也就是说这样的步骤和参数的抽象描述,可以支持“实现方案”中所描述的一到三期的修改,在后续升级时对代码结构的调整最小。
通用隐私交易
在Sero内部,普通交易中的数据都是加密的,非交易双方不能得知来源、去向、资产种类、⾦额等细节。系统在共识和交易处理时并不区分智能合约产生的资产和Sero本身的资产。
线上智能合约
Sero的通用智能合约可以进行公开计算,制定对各种资产的统计方案、处置规则、公示规则,但输入输出信息都必须通过暂存地址与用户的真实身份隔离。Sero智能合约兼容以太坊智能合约指令,也就是说以太坊大部分的智能合约可以不修改就在Sero上运行。
线上匿名资产
智能合约通过调用线上匿名资产发行方法发行资产,所发行资产数量对所有用户可见,并具有与Sero本身资产等同的交易属性,可以通过隐私交易进行处理。
线下匿名资产
智能合约通过调用线下匿名资产发行方法发行资产,所发行的资产数量对用户不可见,这些资产具有Sero本身资产等同的交易属性,可以通过隐私交易进行处理。智能合约在此资产的输入和输出上,对于第三方不可见。匿名资产有多种类型以供不同的场景使用。
线下智能合约
智能合约在线下运行,计算规则只对部分用户可见,所发行资产数量对用户不可见,这些资产具有与Sero本身资产等同的交易属性,可以通过隐私交易进行处理。智能合约在此资产的输入和输出上,对于第三方不可见。
4. SERO面向的场景
隐私保护是每个人都存在的强烈需求,Sero有巨大的市场应用前景,然而不仅如此,Sero支持开发者发行自己的匿名数字代币,意味Sero能够兼容千万个不同的经济生态的流通,而Sero对智能合约的支持意味着巨大的业务扩展性,使基于Sero发行的匿名数字代币不仅仅只是一种支付工具,这项技术的落地场景将会辐射到许多行业。
医疗健康
在泛医疗健康行业,数字隐私体现于方方面面,从个人病历到医疗记录,面向多⻆⾊的隐私保护和授权机制需要⼗分灵活和安全的隐私保护能力,涉及到医院、患者、保险公司、医药公司等,数据隐私的保护和限制授权使用显得尤为重要。
在线竞拍
在诸多追求公平的在线竞拍业务中,出价的私密性是非常重要的,但在利益驱使下往往难以做到,尤其是类似集合竞价这类⾼频报价、对其它对⼿的报价有限知情甚⾄毫不知情的规则下,报价数据隐私往往就代表了最终巨大的利益回报。而SERO可以为提供一个完全安全、独⽴、公平的报价环境。
在线预测相关业
在线菠菜业的发展一直以来受到中心化信任的制约,哪怕解决这点,基于在线预测的游戏对于对⼿的出价策略往往也是⾼度需要隐私保护的。在这个巨大现⾦流的行业中,非常需要一个能够提供集多人出价、支付、结算,并能有统一汇率的公平货币流通体系,而SERO完全能支持到这些。
游戏
每个游戏都有自己的经济生态,游戏中的数字资产自成体系,而同一个公司发行的不同游戏都很难就数字资产进行打通,但有时也会有这类需求,以便将游戏生态进一步扩大。因此大型的在线游戏往往需要一个易于流通、交易和结算的货币体系,并能基于智能合约发行和流通,同时还要兼顾交易的隐私保护(游戏资产的交易对用户而⾔往往并不希望被公开),而目前Sero是唯一能做到多货币体系能基于同态智能合约发行流通,且兼顾交易隐私的技术方案。还有更多的涉及资产数字化,又涉及数字资产隐私敏感的行业,如保险行业、数字贵⾦属交易、期货交易、数字资产交易(如征信和知识产权等)、信贷行业等,Sero对于这些行业在现有的市场中有着不可替代的方案优势,不仅支持⾼度的货币流通性对技术的需求,还支持独⽴完善的加密货币生态建⽴。
5. 关于非交互式零知识证明(NIZK)的性能优化
对于采用NIZK方案的区块链系统,目前最大的瓶颈就是生成交易时产生证明(Proof)的时间⻓度。幸运的是,交易通常是在钱包中生成。
1. 目前我们构建系统时使用原生的zkSNARK库来实现NIZK,采用其中的ALT_BN128曲线和Groth16预处理过程,这个过程大约比Zcash的PGHR13预处理方案减少1/3左右运算时间。同时我们认为merkle tree的深度可以适当的缩减,并尽可能加入并行处理方案,可以将平均一个交易生成时间再次大幅度降低。虽然 zkSNARK 需要一个信用安装的过程,但Sero的实现方式中不会动态的构造计算电路。因此,在所有的场景下,zkSNARK协议是能满⾜Sero的需求的。
2. 我们研究了Zcash最新的成果jubjub,并尝试采用他们的BLS12-381曲线,以及采用Twisted Edwards曲线生成公钥,pedersen hash进行merkle tree的生成,这样⾄少可以4倍以上提升交易生成速度。
3. Bulletproofs也具备⼗分有趣的特性和性能上的优势(如批量验证的性能优势),而且天生支持椭圆曲线(EC)公钥和Pedersen commitments,也是我们的尝试方向之一。
4. zkStark的“零知识证明机制”提供了更简单的密码假设,避免了椭圆曲线、配对和指数知识假设的需要,而仅仅依靠散列和信息论。这也意味着,这块在算法设计上,能抵抗量⼦计算攻击。
Sero中大量使用了零知识证明来隐藏信息。虽然目前我们在TestNet版本仍然采用的是zkSNARK的C++实现库libsnark来进行这项工作。但在MainNet上线时,我们会综合考察之前提到的几种NIZK协议,并构建效率最⾼安全性最好的库来支持我们的系统。
6. 暂存地址
在Sero的链上计算部分,我们采用了暂存地址来临时承接线上计算的输出目标,如果采用签名的方式使用这个输出,对于不可追溯性会有稍微的减弱。Sero对这种情况提供的方案是,用户在使用这个输出的时候,输出的标识跟其他普通交易一样,会被隐藏在证明之中。如此一来每笔交易之间都是断开的,无法追溯,而且一旦输出被使用,这个暂存地址就算是被销毁了。
7. 未来计划
链下计算和同态加密智能合约
事实上对智能合约的同态加密已经进入到实质开发阶段,并计划于2019.3发布到2.0版本的Sero平台上。目前我们已经找到了一种通过链上和链下计算,兼顾数据安全(可以面向计算者完全隔离敏感数据的机制)与性能的方法,并计划于6个⽉内完成这项工作。
钱包和其它生态应用
Sero的去中心化钱包应用目前同样正在开发当中,并计划于2019.3前正式发布,由于Sero支持开发者自己发行Token的特性,Sero的钱包将会支持Sero自己的Token以及所有开发者基于Sero发行的Token所对应加密货币资产的管理。
最新共识机制
我们会在1年内的某个版本发布新的共识机制SE-Random,结合了最新的PBFT理论和VRF算法设计的一种可以相对兼顾公平和效率的共识机制。
隐私三剑客
Sero有两个兄弟,分别是异形协议 (Alien Protocol)和卡斯特罗协议(Castrol Protocol),前者提供一种分布式的DNS系统,通过自动寻址的方式实现网络的稳定运行和信息传输,后者则对节点的IP地址实现加密隐私保护,三位一体形成完整的去中心化应用隐私保护方案。
安全多方计算
在许多情况下,数据证明需要结合现有的中心化的数据源,也可以成为链下数据源,当前,解决上述问题的策略是假设有可信任的服务提供者或是假设存在可信任的第三方。但是在目前多变和充满恶意的环境中,这是极具⻛险的,面对该问题,通用的安全多方计算问题是可解决的。
Sero未来也将考虑引入安全多方计算(SMC),从而在隐私保护的前提下实现对链外数据的广泛支持。
多链体系
多链体系是Sero可扩展性解决方案。Sero将采用类似以太坊Plasma的机制进行基于多链体系的横向的性能扩容。类似Plasma的多链并行计算机制,可使Sero的每秒状态更新达到极⾼⽔平(可能会有数⼗亿)。从而使Sero在性能上取代当前中心化集群的能力,让Sero具有处理全球的各类隐私相关去中心化应用的前景。
基础框架
除了隐私保护的机制之外,链基础架构同样需要具备⾜够强大的可扩展性,这对于构建一个实用的应用平台显得⼗分重要,Sero会引入以下技术来对链的底层架构进行增强:
• 优化共识 - 使用一种全新的共识机制SE-Random,它结合了最新的PBFT理论和VRF算法设计的一种可以相对兼顾公平和效率的共识机制。
• Plasma - 是一种实现区块链扩容计算的方式,在plasma中,众多区块链组合成树形结构,共同参与计算,从而实现区块链的横向扩展。
• 更为强大的虚拟机——不仅满⾜EVM的兼容性,而且有充分的扩展性,并且要有底层指令的基础来满⾜性能的需求。
• 以下会重点阐述部分技术的具体实现。
1. 共识机制
Sero在研究各类共识的基础上,提出了自己的主链共识引擎SE-Random。SE-Random共识引擎的设计思路受到最新一代共识研究Algorand和Ourboros的启发,只需要验证节点很少的计算开销,整个区块链网络产生分叉概率极小,并能实现近乎无限的扩展性。
下面描述一下SE-Random共识的细节。
SE-Random使用拜占庭协议BA*(Byzantine Agreement)在一组交易中达成共识。为了扩展性,SE-Random使用一种随机算法筛选出一批用户,允许用户自己私下检查是否被选中,并参与BA*协议中共识的达成。在此算法下,随着用户量的增多,整个BA*共识系统不会变慢。
VRF算法的使用
SE-Random共识引擎基于VRF(Verifiable Random Function)算法作为随机验证节点选择基础。VRF是随机生成函数,而且这个函数是可验证的。即同一把私钥对同样的信息进行签名,只有一个合法签名可以通过验证,这个有别于普通的非对称加密算法。
VRF的具体操作流程是:
1. 证明者生成一对密钥,PUB_KEY和PRI_KEY。PRI_KEY是私钥,PUB_KEY是配对的公钥。
2. 证明者输出随机结果 result = VRF_Hash(PRI_KEY, info)
3. 证明者输出随机证明 proof = VRF_Proof(PRI_KEY, info)
4. 证明者把随机结果和随机证明提交给验证者。验证者需验证result和proof是否匹配,若匹配,进入下一步。
5. 证明者把PUB_KEY和info提交给验证者,验证者计算VRF_Verif y(PUB_KEY, info, proof )结果是否为TRUE,是TRUE的话即验证通过。
6. 验证通过即可推导出info和result是否匹配,即证明验证者给出的材料是正确的。在整个过程中验证者没有拿到证明者的私钥PRI_KEY。
随机种⼦(Seed)生成
在SE-Random的一些地方的随机算法会用到种⼦(seed),比如SE-Random的加密抽签中,需要随机选择并公开的种⼦。这个seed既要让参与节点知晓,又不能被对⼿控制。SERandom第r回合产生的seed是由上一回合r-1的seed通过VRF来确定。这个种⼦和相应的VRF证明被包含在每个被提出的块中,一旦SE-Random在r-1轮的块上达成一致,当r轮开始之后,每个人都知道当前轮的伪随机的seedr 。初始的seed0的值是由初始参与者们一起用多个节点进行计算,得到的一个绝对无法预测的随机seed。这样,seed不会被“破坏者”预测,也不会被操纵。
通过VRF算法进行加密抽签选出验证者的方法
SE-Random用加密抽签方法来根据每个用户的权重来选择用户的随机⼦集。系统将固定单位数量的Sero币设为一个筛选候选单位S,并规定每个节点有限定数量的Sero币w作为筛选计算,所有候选单位的总权重是。并且如果节点i拥有j个筛选单位数量的Sero币,则节点i可以以j个不同的子节点的身份参与抽签筛选。抽签算法的随机性来源于前面提到的随机种子。在BA*的每次循环中,SE-Random基于当前seed构建一个VRF,VRF的私钥只能由节点自己知道。每个节点用自己的私钥运行系统公布的随机算法进行抽签。系统按照节点持有的不超过限定阈值SERO币的比例选择验证节点。
SE-Random需要指定阈值,用以选择验证节点的预期数量。这个预期数量满足概率p = w/W。在W(总节点权重)选择子验证节点的概率满足二项分布:
当前验证节点(包含子验证节点)的选择数量的确定方式也是由抽签算法确定的。抽签算法将区间[0,1)划分为连续区间的形式:
此加密抽签的方法的特性为:
1、验证节点根据他们持有Sero币的权重随机选出N个验证子节点
2、不知道节点i私钥的破坏者无法知道i是否被选中,以及选出多少个子验证节点。
在随机选出的验证者节点中进行BA*共识计算
验证节点(包括子验证节点)在秘密的情况下获知自己被选中,但他们只有公布凭证才能证明自己的验证者资格。对于每一个选中的节点,使用自己的私钥对seed进行签名,并输入哈希函数后得到自己的凭证。哈希函数的性质表明凭证是一个随机的⻓度为256的字符串,不同节点的凭证不会相同,并且凭证字符串的分布是均匀的。用同样的方式选出一批候选领导节点,把候选领导节点的凭证按照字典顺序进行排列,排序中最小的候选领导节点被选为领导节点,即领导节点是通过候选领导节点集合随机的公共选举产生。
验证节点和领导节点一起参与拜占庭协议BA*的运算,在BA*的每一个阶段和步骤⾥,节点都通过私人和非互动的方式来独⽴确定自己是否被选择在当前步骤的委员会中。BA*是一个两个阶段的投票机制。第一阶段,验证节点对收到的候选区块进行分级共识,选取验证共识最多的候选区块。第二阶段,对第一阶段筛选出的候选区块进行二元拜占庭判断。BA*共识要保证参与共识的诚实节点大于2/3,如果随机选出的集合不能满足该条件,那么需要进行多次随机选举,只要有一次参与共识的诚实节点大于2/3,就能达成共识。BA*共识的每个步骤的验证节点并行指定或抽签筛选出来用来加快共识确认速度。
BA*共识计算的步骤
BA*的每一步都要销毁当前步骤临时密钥,步骤简述如下:
1. 生成区块(Step1)
2. 分级共识协议
这个协议将在任意一个块上达成一致的问题转化为在的两个值上达成一致,这两个值是最后确定特定块的散列或者空块的散列的依据,总共分为3个步骤,我们会在后面的技术黄皮书中详细说明。大体来说判断消息中是否有超过2/3的 并且相同,如果有,则广播此特定区块,如果没有,则广播空块,此消息用于后继二元拜占庭判断。
3. 二元拜占庭判断
在这⾥验证节点统计判断分级共识协议发出的值。二元拜占庭判断是一个三步的循环,验证节点会不断的对收到的历史进行检查,看是否达到了有两种结束条件,即区块合法或者区块不合法是否达到2/3的投票总数;如果区块不合法,共识系统会判断并生成一个空区块。为了预防无限循环的情况发生,我们会设定一个最大总循环数m,如达到m后还没判定出是否符合一个结束条件,共识系统会临时生成暂定的共识,并在后续过程中(后面几轮)形成最终共识,并确认这些较早的交易。
SE-Random共识会适应网络弱同步情况下的共识判定。在网络强情况下不会造成区块分叉,在网络弱同步情况下,会临时做出暂定共识并在网络强同步恢复后达到最终共识。SErandom可以防范⼥巫攻击、自私挖矿攻击、Nothing-at-Stake攻击、远程攻击等各类攻击方式。即使Sero链的用户扩散到亿级以上的节点,SE-Random共识也可借助VRF机制快速达成全网一致的拜占庭共识。
2 扩容机制
Plasma是一个激励,和强制智能合约执行的框架。可以扩容达到每秒大量的状态更新(能达到每秒10亿级),在区块链上能支持全球范围内的大量的去中心化金融应用。这些智能合约通过网络交易⼿续费用于激励持续的自动化运作,最终依赖于底层的区块链来强制交易状态的锁定。
Plasma由两个核心部分构成:重组所有区块链计算为一组MapReduce函数,和一个可选的方法,在现存的区块链上,以不鼓励区块扣留的Nakamoto共识原则,来实现一个Pos的代币押金机制。
这种构建通过在主链上编写智能合约,使用欺诈证明,可以在主链上强制状态的锁定。Plasma将区块链编组为一个树形的分层结构,将每一个区块链视为一个独⽴的分支,强制将整个区块链的历史,和可MapReduce的计算提交到Merkle证明。通过主链强制将某个链的帐本信息打包到子区块链中,这个链将通过最低的信任达到扩容的需求。
围绕全局强制非全局数据的数据可用性,区块扣留攻击是是一个非常复杂的问题。Plasms通过对有问题链的退出机制来缓解了这个问题,同时也创建了一个激励和持续的强制的执行数据的正确性机制。
仅仅通过周期性的将正常状态的Merkle证明广播到主链,这将允许不可思议的扩展性,降低交易成本和计算量。Plasma支持了大规模去中心化应用的持续运行。额外的,重要的可扩展性是通过减少单次花费的资金表达方式为一个位图中的一个位来实现,这样,一个交易和一个签名代表一个与多方的交易聚合。Plasma将这与一个MapReduce框架结合,同时使用含押金的智能合约来构建可扩展的计算强制性。
这种构建方式允许让外部的参与方持有资金,并根据自己的行为计算合约,类似于一个矿工,但是Plasma是运行于一个已存在的区块链上,由此大家不用在每次状态更新时在主链上创建对应的交易(即使包括添加新用户的账本),而只需要将合并后的状态变化这样的少量信息写到链上。
Sero将采用Plasma这样的机制进行基于多链体系的横向的性能扩容。这种多链并行计算机制,可使Sero的每秒状态更新达到极高⽔平(可能会有数十亿)。从而使Sero在性能上获得很大提升,达到取代当前中心化集群的承载能力。
3. 虚拟机
目前以太坊已经拥有了大量开发者,Solidity语言也已经成了智能合约开发最广泛使用的语言。因此,我们需要在Sero系统中提供EVM的兼容性。
EVM虚拟机是在以太坊的基础上发展出来的,以太坊是一个标准的区块链结构,其数据结构是单一的,因此其虚拟机在交易调用层面设计为类似数据库的ACID(Atomicity,Consistency,Isolation,Durability)特性。即在以太坊的协议中,一个智能合约的调用,可能会影响多个账户的状态变化。这些状态变化是有实时一致性的刚性事务,即这些状态变化要么同时发生,要么都不发生。但是,Sero需要考虑到未来充分的扩展性,并且要有底层指令的基础来满足性能的需求。我们将Sero链的虚拟机设计为满足BASE(Bascically Available,Soft state,Eventual consistency)理念的最终一致性方案,我们将此虚拟机称为MEVM虚拟机。
在BASE理念中,基本可用是指系统在出现不可预期的故障时,允许损失部分可用性;软状态是指允许系统中的数据存在中间状态,不过该中间状态的存在不会影响系统的整体可用性;最终一致性是指所有的数据副本,在一段时间的同步之后,最终都能够达到一致。和ACID概念的强一致性相比,BASE理念通过牺牲实时强一致性来获得可用性,但最终会达到一致状态。区块链中区块结构和各类共识算法,其本质都是符合BASE理念的,不过并不满足ACID。因此MEVM虚拟机设计为复合BASE语义是适合的,并且在此层面上相比原来的EVM的ACID设计,
会克服运行性能瓶颈的这个方面的制约。
另外,Solidity语言一直被人诟病的一点是缺乏标准库的支持,比如比较两个字符串这种基本的功能,Solidity中没有标准库函数给开发者调用。类似OpenZeppelin这样的项目提供了一些标准库,但是还远远不够用。特别是Sero的区块链应用需要用到的高级的数学和密码学算法库,比如零知识证明协议、RSA公钥加密算法,奇异值分解等。MSolidity可以参考这些实现并添加更多的库,这些库采用预编译或者用Native方式实现,以减少运行消耗。
在今后的发展中,Sero体系会考虑对基于Web Assembly(WASM)的虚拟机提供支持,从而进一步提升性能,并提供对除了Solidity外用更多的语言,比如C,C++,Rust,或者Go语言编写的智能合约进行支持。随着Cardano项目组设计的IELE虚拟机的成熟,Sero体系也会考虑提供对这个虚拟机进行支持。IELE是LLVM的一个变种,有希望成为高级语言的智能合约翻译并执行的统一、低级的平台。通过IELE虚拟机,可以让Sero体系支持更多种类的高级语言。
4. 抗量子计算
目前区块链系统上普遍使用的非对称加密签名算法,比如基于大整数因子分解难题的RSA算法和基于椭圆曲线上离散对数计算难题的ECC算法,可以被量子Shor算法将NP问题变成P问题,从而容易被破解。Sero体系会根据项目进度和量子计算机实用化的发展适时引入抗量子计算暴力破解的加密算法,比如基于格的密码系统(Lattice-based cryptography),基于编码的密码系统(code based cryptosystems)和多元密码(multivariate cryptography)等;其中基于格密码可以设计加密、签名、密钥交换等各种密码系统,是后量子密码学算法的一个重要方向。同时,我们也会对基于超特异椭圆曲线上同源问题(Isogen)、共轭搜索问题(conjugacy search problem)和辫群(Braid Groups)相关问题等设计的抗量子密码系统的前沿研究方向进行同步追踪。
激励的经济模型
传统的点对点通讯网络将焦点关注于信息传输,有点像互联网1.0时代的应用,一切都是公开和共享的,而其并没有达到区块链技术所达到的震动效应,一方面是因为缺少有效的共识机制将分散的节点协同参与工作(仅限于点和点的共识),而更重要的是因为一切人类的行为都是需要背后的经济逻辑驱动的,在缺乏有效的经济规范趋势下人类的行为只能受到社会规范约束(即出于公益性质的精神激励的驱动下的工作),这对于大部分需要共同完成的目标而言对个体是缺乏约束力的。
比特币网络通过POW(工作量证明)共识机制,并以贡献算力获得记账权从而获得比特币奖励的方式激励节点参与共识,无疑是一项了不起的设计,我们认为Token经济模型是区块链价值的核心也不为过。
然而问题在于同一种token是否能解决所有共识协同行为的激励问题?我们认为答案显然是No。现今我们发现市场上有各种流通的Token,背后的经济模型五花⼋门,但是缺乏统一的标准将其共识的成本与产生的共识价值关联起来,因此整个加密货币的二级市场流通规则显得相当脆弱。
以太坊基于同一种底层共识机制,允许智能合约开发者发行自己的Token,并且使用ETH作为GAS费用支付共识成本,既统一了共识成本的计量单位,又允许在相同的共识成本下,能够根据Token所用于的生态获得不同的价值输出,使用者⾄少能够计算最佳的投入与回报的平衡点,如今许多人诟病在以太坊上发行ERC20的代币太过容易导致⻥目混珠,却很少有人意识到以太坊在这个设计初衷的重要意义。
我们在设计整个Sero-CHAIN时也同样延用了以太坊的这个功能,可以想像,通过链上完成基于共识的交易,⾸先我们需要降低GAS消耗,以降低链上交易性价比的硬门槛,为此我们设计了新的共识机制,这点在其他章节已经阐述。
假设在共识成本即GAS消耗可以忽略不计的情形下,任何一种Token的价值取决于链上交易的其他成本,这些成本受到数字资产的集中化程度、市场供需关系等影响,这和现实世界的货币并无不同,加密货币同样是用来衡量商品、服务或权益的价值的,因此我们认为开发者发行Token可以有自己的经济模型,这⾥仅就Sero币的经济模型角度讨论。
站在Sero生态的角度,所有的商品、服务的价值都有一个源头,由于区块链平台本质是一个公平的价值流通市场,因此所有的经济行为的成本底层在于交易成本,Sero币就是交易成本的载体,站在这个角度,Sero币将用于以下激励用途:
• 记账奖励;
• 算力贡献奖励(对于使用了隐私机制的应用,会需要更多的算力消耗);
• 其它角⾊包括算法提供者(通过发布智能合约的形式)的运行激励;
• 在SE-Random共识中,Sero的Token持有会影响个别场景下(譬如初始种子节点随机选择)的权重;
• Sero生态的开发者会因其开发应用的实际产生价值而获得Sero的Token奖励,这种奖励往往用于实际补贴其共识记账或算力支付开销的成本方式给出;
• 用户也可以将Sero的Token用于其DApp或Sero相关的生态系统中的各种目的。
评论
查看更多