密码极客 | 国内最权威的区块链创业投资社群

以太坊的强力竞争者DFINITY:从完美的随机数出发

Bae SuBae Su 2018-10-13 32 次 收藏0

本文将介绍一个对标以太坊的区块链网络平台:DFINITY。DFINITY是一个由P2P网络节点共同维护的“虚拟区块链电脑”。这台电脑能够通过智能合约安装软件,为用户提供服务。区块链的技术帮助实现智能合约的不可篡改性。智能合约的处理速度(区块链出块的速度)帮助实现大规模应用,加密技术保证其安全性。下面本文主要介绍实现大规模应用同时又能保证安全性的共识机制,区块链生态的治理方式及代币。

由于DFINITY的内容较多,因而将文章分为两部分,第一部分介绍共识机制,第二部分介绍DFINITY区块链网络的治理及代币。

一、共识机制

这一节主要介绍DFINITY中的共识机制。首先明确一点,DIFINITY的共识机制的最核心基础内容在于“完美的”随机数的生成。

除此之外,在DIFINITY中,还存在着两个普遍的假设条件:一个是整个系统中恶意节点数量少于总节点数的一半;第二个是在随机抽取的委员会(由节点组成的小组,下文会详细介绍)中,恶意节点的数量也少于委员会总节点数量的一半。

第一小节简单介绍DFINITY中区块的生产过程,以便让读者有一个基本的认识;第二小节介绍共识机制的结构,不同的结构层次帮助稳定实现第一小节中的区块生产过程;后面的内容则是对共识机制结构层次进行更深入的介绍,第三小节则简单介绍了共识机制中的其他问题。

(一)简单的区块生产过程

简单来说,DFINITY区块链中,区块生产的流程如图1中描述的过程。首先在每一轮中会由一个随机灯塔(Random Beacon)产生一个随机数(Random value)。这个随机数有两个作用,一个是选出这一轮的区块生产人(Block Makers),二是选出这一轮的区块公正人(Notary)(也就是图中的1过程)。在区块生产人被选出以后,提议这一轮的新区块然后提交给区块公证人(图中2过程)。区块公正人接收提议区块后将其公正(只有最终被公正的区块才能作为新区块加入区块链),然后将公正的区块向全网广播(图中3过程),一个新的区块正式生成。在随机灯塔收到经过公正的区块后,产生下一轮的随机数,然后重复上一过程。

图1 DFINITY中区块的生产过程

(二)共识机制的结构

图2 DFINITY共识机制的结构

1、身份层(Identity Layer)

DIFINITY共识机制的结构如图2所示。由下往上,第一层是身份层,新加入区块链网络的用户需要经过注册,以获得“合法”的身份。每一个成功注册的用户都会获得一对钥匙,即公钥与私钥(pk, sk)。在DIFINITY区块链网络中,活跃的参与用户被称作“客户端[下面对于注册后参与区块链的用户,也是区块的节点(node),都称作为客户端](Clients)”,这些客户端主要有三个作用:

  • 参与去中心化的随机灯塔(图1中每轮的随机数的生成);
  • 提议每一轮的新区块;
  • 对提议区块进行公证。

下文还会对这些作用做具体介绍。

正如上面所说,身份层的主要作用是为用户提供“合法”的身份,这些身份是匿名的,永久的。匿名性能够为客户端提供一定的隐私保护,而永久性则有两方面的含义,一方面是客户端一旦注册之后,在没有不当行为的基础上,就能够永久参与网络;另一方面,如果客户端产生了不当行为(如在区块生产时的作恶),则可能永远被排除在网络之外。在客户端注册的过程中可能需要缴纳一定的保证金,一旦作恶,则面临失去保证金的风险。同时也失去作为区块生产人获得回报的可能(不仅是本轮,还包括未来的可能收益)。相比之下,在一般的工作量证明机制中,作恶的客户端只会受到失去本轮回报的惩罚。从这个角度来说,身份层能够为整个DFINITY区块链网络提供一定的抵御女巫攻击[攻击者指单个节点拥有多重身份,也就是说攻击者实际上只拥有实际网络节点的少部分,但是却能够控制网络中的大部分身份,实际拥有与实际控制的比例不相符](Sybil attack)的能力。

2、随机灯塔层(Random Beacon Layer)

正如本节开头所说,一个“完美的”随机数的生产是整个共识机制能够良好运行发挥作用的基础。而随机灯塔层的作用就是对这一核心的保障。

(1)阈值签名机制(Threshold Signature Scheme)

在对随机灯塔介绍之前,我们先了解一下阈值签名机制。我们可以想象有这么一个黑箱子,它由三个部分组成:输入、出入、黑箱子本身。黑箱子的输入是一组人(假设有100个)的指纹,输出是一个随机数。对于黑箱子本身有着这样一种机制,只要黑箱子接收到了这100个人的任意50个人上的指纹后,就能够输出一个确定的随机数。但是在黑箱子得到任意小于等于50个人的指纹之前,没有人能够预测它的输出是什么。并且这个黑箱子有三个特点:

  • 可验证性(Verifiable)

任何人都可以凭借超过50个人的指纹输入对输出的随机数进行验证,因而这个黑箱子也可以叫做可验证随机函数(Verifiable random function);

  • 决定性(deterministic)

是一旦有超过50个人输入指纹产生随机数后,任何人都可以对这个输入输出过程进行测试,输出的随机数都是确定的,不变的;

  • 非交互性(Non-interactive)

这些输入指纹的人之间互相不需要交流,只需要输入自己的指纹就能得到一个公共的输出。

在密码学中,已知具有上述三个特点,并且能够实际有效运行的可验证随机函数只有[这个说法来自白皮书]基于BLS[由Boneh, Lynn和Shacham在2003年时提出]的密码机制。而随机灯塔层利用的就是这个机制。

(2)阈值接力(Threshold Relay)

在了解阈值签名机制后,回想一下第一小节的区块生产过程。上文说到,区块生产人生产区块作为提议,提交给区块公正人。但是实际上这个过程要复杂一些,区块生产人和区块公正人并不是单独的客户端,而是由一定数量的客户端组成的区块生产委员会(Committee)和区块公正委员会。区块生产委员会的作用是委员会里的每一个客户端都可以提议一个区块,在正常情况下,最终只会有一个区块最终提议区块进入公正程序[当然有可能有超过一个提议区块进入公正程序,下文会详细介绍这种情况]。

回想上一小节提到的每一个客户端都拥有自己的一对公钥与私钥。客户端可以用自己的私钥进行数字签名,其他用户可以利用公钥对某一个客户端的数字签名进行检验其是否为真。在这里,随机灯塔就是上面例子的黑箱子,而每一个客户端的私钥的数字签名就是上面的例子中的一个指纹,而当超过一定数量的数字签名完成后,随机灯塔就能够产生一个不可预测的随机数。

在每一轮随机数产生后,这个随机数随后被用来在所有的网络客户端中随机抽样选择一定数量的客户端,担任区块生产委员会和公正委员会。而这些委员会中的客户端在进行区块提议或者公正被提议的区块的过程中需要对其进行数字签名,随后数字签名随着区块向全网广播。随机灯塔便能够收集到这些数字签名,当收集到一定数量的数字签名(达到阈值)后,便能够产生一个新的随机数,同时本轮结束。然后这个随机数重复同上一轮一样的程序,抽取下一轮的委员会。这个由一轮的委员会共同决定随机数产生下一轮委员会的过程就被叫做“阈值接力”。

在整个过程中,由于可认证随机函数的特点,由随机数产生的委员会都是决定性的、可验证的。在数字签名的数量到达阈值之前,这个随机函数的产出又是不可预测的,这使得下一轮的委员会是不可预测的。而非交互性的特点使得各个客户端之间不需要任何的相互交流。这样的一个随机数生产方式避免了由第三方收集数字签名然后生产随机数机制的对第三方的不信任问题,成功构造了一个去中心化机制。

3、区块链层(Blockchain Layer)

上一小节说到,区块是由区块生产委员会提议生成的。在区块生产委员会中的每一个客户端都可以对当前轮的新区块进行提议。那么这就会引出一个问题,如果说委员会中有400个客户端,而且每一个客户端都对新区块进行提议,那如何在这400个区块中选择一个区块,作为本轮的提议区块呢?

(1)区块权重(Block Weight)

我们说过在每一轮,随机灯塔层都会产生一个新的随机数,这个随机数随后被用来随机抽样选择区块生产委员会。但是这个随机数除了能够帮助产生区块生产委员会之外,还能够对委员会中的每一个客户端进行排名,给予不同的客户端不同的权重。而这个客户端的权重,也是该客户端提议的区块的权重,代表其提议的区块的优先级。在正常情况下,最终进入公正过程的只有一个被提议区块。优先级越高的被提议区块也就有着更大的机会进入公正程序而后被公正。

在DIFINITY中,随机赋予区块的权重是呈指数递减的:

(2)链的权重(Chain Weight)

虽然在正常情况下,只会有一个被提议的区块进入公正程序。但是这也不排除由于某些原因导致超过一个区块进入了公正程序,并且都得到了公正的情况。这时候便产生了分叉。对于这种情况的产生,由区块权重引出一个链的权重的概念。链的权重指在分叉开始的那一个区块开始,每条分叉链的区块累计权重,也就是分叉链上的所有区块权重的加总。图3描述了这种情况。

从第r-3轮开始产生了分叉,出现了两条链。这时候深色链中有3个区块的权重为1,1个区块的权重为0.25,链的权重为3.25;而另一条浅色链中,有2个区块的权重为1,另外2个区块的权重为0.5,链的权重为3。由于深色链的权重大于浅色链的权重,这时候下一轮的客户端在进行区块提议的时候就应该放弃浅色链,选择权重较大的深色链。

图3 链的权重

(R表示权重,C表示链,wt C表示链的权重)

4、公正层(Notary Layer)

公正层的作用是为被提议的区块提供公正以及几乎实时的最终性(Finility)。只有被公正的被提议区块才能加入到区块链中。而对于一笔交易信息来说,最终性意味着该笔交易对于整个区块链网络来说都是认可的,只有获得最终性才能够保证交易信息的不可篡改性。

再次回顾一下随机灯塔的过程,在这个过程中,随机灯塔只要接收到了一定数量(阈值)数字签名,就能够产生一个随机数。在这里我们将这个过程做一点变化,即我们把随机灯塔的输出不再看作是一个随机数,而是一个公共的数字签名,也就代表一个委员会的数字签名。由于随机灯塔的特性,我们知道这个公共数字签名只要收集超过一定数量(阈值)的客户端数字签名后就能产生。这个公共签名是不可预测的,因而没有人可以去伪造公共数字签名而对被提议区块进行恶意公证。公共签名同时还是确定性的、可检验的,一旦公布之后可供整个网络对其检验。由于阈值机制的存在,使得这个公共数字签名有着去中心化的特性,从而也就使得整个公正过程也是去中心化的过程。

其实从整体的角度来看,公正的过程无非就是一群人对于某一个事件达成一个一直目标的过程。而这个过程正是经典的“拜占庭将军”问题。对于拜占庭将军问题的解决,唯一的办法是通过某种拜占庭协议。但是在DFINITY中却采用了上面描述的一种“乐观协议”,至于出现有超过两个以上被公正的区块情况出现时,第三小节中的链的权重也能将其解决。

下面图4用图示的方式简单介绍了上文所介绍的随机灯塔,区块的生产以及公正的过程。

图4 随机灯塔、区块生产以及公证过程

:第r轮又随机灯塔产生的随机数;

:第r轮的提议区块;

:第r轮的公正;

:表示第i个公正委员会的第t个客户端对进行签名。

(三)其他

接下来的这部分的内容只做一个简单介绍,对于其具体细节有兴趣的读者可以阅读白皮书以及其他相关材料。

1、用户的扩展性

DFINITY是一个开放式的区块链网络平台,用户可以注册或者注销其在该网络的客户端。对于想要加入或是离开网络的用户,用户只需要申请一次特殊的交易即可。但是在这笔交易中,需要包含两个元素:

  • 用户想要加入的或是离开的所在委员会的共同数字签名,这是由于网络中的所有的客户端都是以小组的形式存在的,并不存在单独个别的客户端独立参与共识机制。
  • 一种形式的背书(缴纳保证金或者是来自其他被网络所信赖机构的证明)。

2、委员会成员数量

DFINITY对于委员会的数量也有一定的要求,这是与3个因素有关,一个是整个网络中的客户端的数量;一个是网络对无法达成共识情况出现的容忍度;还有一个是网络对于恶意客户端占比的假设。这部分具体的计算过程有兴趣的读者可以参阅DFINITY项目的Github,里面有具体的模型以及计算过程。

 

本文系作者个人观点,转载请注明出处!
喜欢 0
支付宝扫码打赏
微信打赏

相关文章

更多

发布评论

共0条评论