本文中作者提出了几个核心的观点,只有突破不可能三角,才能让 DeFi 大规模落地,但不可能三角最根本的原因在于物理瓶颈,解决不可能三角问题的唯一办法在于分片。

原文标题:《公链不必通用化》
文章来源:公众号 Boris 区块链
作者:Boris
链闻经公众号「Boris 区块链」授权转载

本文核心观点

1、Defi 是区块链最有前途的落地场景,但目前非常弱小,本质原因是没有大规模吸引币圈以外的资金和用户入场;
2、吸引外部资金入场的必要条件是公链突破「不可能三角」;
3、现有公链无法突破「不可能三角」,最终是受限于物理瓶颈;
4、Layer 2 是搭建在公链上的、为特定的应用场景定制化的中间件,是为有限的共识范围提升性能的适配器,不能代替公链本身;
5、分片是公链唯一的出路。本文提出一种设计方案:通过牺牲逻辑复杂性突破「不可能三角」;
6、Defi 核心业务逻辑复杂度需求有限,非核心业务可以交由 Layer 2 完成。公链不必通用化地支持所有应用,可以从实际需求出发,对特定的应用做定制化优化。

1 Defi 目前还弱小的原因

Defi 是区块链最有前途的落地场景,但目前非常弱小,本质原因是没有大规模吸引币圈以外的资金和用户入场。

Defi (Decentralized Financial)是区块链最有前途的落地场景。主要原因有以下三点:

1、对预言机(Oracle)的依赖小:相比于实体资产,金融资产虚拟性强,对链外的依赖有限且易于验证。与此相反地,房产、溯源等非金融类线下应用,都需要花大力气保证「预言机」的真实可靠。

2、普适性需求:博彩、游戏等当下比较流行的 Dapp,仅仅是面向少数群体的,而金融需求面向个人、公司、金融机构、政府等,是普适性的。传统的中心化的金融体系,主要服务于资产规模大、标准化程度高、规则相对固定的资产,比如上市公司股票、大公司的债等等。而标准化程度低、需求复杂的小规模金融需求,以及有脱离中心化主体背书的金融需求等,都是 Defi 可以做的事。

3、离资本近:相比于其他行业,Defi 直接面对资本,一旦资本觉得某个形态的 Defi 安全、可靠、性能好,会直接进入,而实体资产需要先通证化,再接触 Defi。

但从目前的发展来看,Defi 还非常弱小。根据 defi.review 的数据(2019.5.3),日交易额只有不到 4 亿美元。不仅相比于传统金融不值一提,相比于中心化交易所等其他区块链相关的主体也相当弱小。

这不到 4 亿美元的市值,绝大多数交易额来自 MakerDAO 借贷,其余还有(Compound、Dharma 等借贷),其余的还有支付(闪电网络、xDai)、Dex (0x、Uniswap、Kyber、Bancor 等)、衍生品(DYDX)等。

这些 Defi 大多数运行在以太坊上,也有少数运行在比特币或 EOS 等其他公链上。总之,参与到这些 Defi 中的人,都是币圈的人。以 MakerDAO 的押以太坊借稳定币的模式为例,直接就把用户群体限定为了「手里有以太坊的人」。

这是 Defi 持续弱小的本质原因,是大额资本,以及广大币圈之外的用户的资金不愿意入场。为什么币圈之外的钱不愿意大规模入场?因为他们看不到一个开源、透明、安全、性能好的 Defi 基础设施。现有的中心化交易所,只能提供中型及以下公司的公信力,其信用无法向政府、大型金融机构一样支持大规模的、面向公众的资金入场。大家仍然会觉得 Defi 是「币圈人的游戏」。

2 打破不可能三角,吸引资金入场

吸引外部资金入场的必要条件是公链突破「不可能三角」。

传统金融靠的是政府及大型金融机构等的信用背书,Defi 则需要靠「算法」来背书。这个算法需要:

1、开源:不能指望外面的资本去相信一个「黑盒子」;

2、去中心化:既然不需要中心节点,那么共识机制中也不要引入过多的中心化因素,特别是人治因素;

3、安全:外部用户不会轻易把资金托管到安全性未得到公开的、充分证实的地方去。系统也需要向用户展示其安全性,就像比特币一样;

4、可扩展:可扩展性直接关系到可用性。既然是面向外部用户和资金,就不能设定用户量的限制。也就是,系统需要在去中心化和安全性的条件下,保证按需扩展;

上述要求,对于作为核心基础设施的公链来说,就是突破「不可能三角」。

3 不可能三角的本质是物理瓶颈

现有公链无法突破「不可能三角」,最终是受限于物理瓶颈。

区块链「不可能三角」是仿照分布式系统中的 CAP 定理提出的。CAP 定理指分布式系统中的一致性、可用性、分区容错性三者最多可得其二。区块链的「不可能三角」是指可扩展性、去中心化、安全性,三者最多得其二。CAP 定理是被证明过的,而区块链「不可能三角」未被证明。

区块链「不可能三角」最早由 Vitalik 提出,他对三者的定义如下

1、去中心化:系统可以在每个参与者只能访问 O(c) 资源的场景下运行;

2、安全性:最多使用 O(n) 资源就可以抵御安全攻击;

3、可扩展性:可以处理 O(n) > O(c) 交易,也就是 n 要随着 c 的增加而线性增加;

其中,c 指每个节点的可用的物理资源数量(包括计算、存储、带宽等),n 泛指系统规模的大小(假设状态数等因素都与 n 成正比)。

首先,必须指出,「去中心化」和「安全性」不是正交的概念,而是高度耦合的:去中心化程度差,安全性一定不高。这两者是不能成为「两个角」的。因此,说到底还是可扩展性和去中心化的相互妥协问题。Vitalik 对去中心化的提法是狭义的,只描述了其可用性的一面,而没有包括安全性。

不过,在我们看到的公链中,区块链「不可能三角」确实是经验性结论。

比特币是最原始也是最典型的例子,去中心化、安全性很强,可扩展性很低。不仅 TPS 很低,而且不支持智能合约。以太坊向前走了一步,把 TPS 从 7 左右提高到了理论上的 20,又支持了智能合约,但相较比特币损失了一定的安全性。不过以太坊本身的可扩展性也是远远不够的。

为了提高性能,很多公链显著地牺牲了去中心化程度,比如

1、xPoS 类:EOS、TRON、ADA 等各种基于 xPOS 的公链,人治化程度太高,超级节点们权力过大。用财富本身证明财富,必将导致严重的贫富分化,而降低去中心化程度。

2、DAG 类:Byteball、IOTA、NANO 等引入了强中心化见证方,极大地破坏了去中心化程度,而且其可用性也存疑。

3、xBFT 类:NEO 等基于 xBFT 的公链,以及以太坊向 Casper 的转型等各种 BFT 相关思想的解决方案带来的问题是,增加了系统的复杂程度,出现漏洞的风险很高,严重降低了安全性。更严重的是,几乎是 O(n^2) 的通讯复杂度,本身就限制了其可扩展性的上限。

如果说上述设计不够优秀,那么看两个优秀设计的例子:DAG 类中的 Conflux 和 xBFT 类中的 Algorand:

1、Conflux:相当不错的 DAG 设计,它用「GHOST 确定主链」、「引用边+时代划分+光锥外惩罚机制保证交易顺序」等一系列机制。但它的性能的上限,将受制于带宽、状态容量(内存)以及存储容量等,无法做到可扩展性。

2、Algorand:用「VRF+加密抽签+多轮次随机选举,最终达到 BA *共识」等机制,在众多非 PoW 公链中脱颖而出。但它的问题仍然是,通讯复杂度造成的网络开销,会使系统因带宽限制遇到性能瓶颈,同样无法做到可扩展性。

不难发现,上述两个公链的 TPS 都是有显著上限的,只能做到在不显著牺牲去中心化的前提下扩容(Scaling),而不能称作「可扩展的(Scalable/Scale-out)」。

为了探求其本质原因,引入「共识瓶颈」和「物理瓶颈」两个概念:

1、共识瓶颈:在不显著牺牲去中心化程度的前提下,共识机制对系统的约束。比如,比特币的出块间隔和块大小的限制就是共识瓶颈,投入再多物理资源也基本不会提升性能。

2、物理瓶颈:网络带宽、计算能力(CPU)、状态空间(内存)、存储空间等物理资源对于系统性能的限制。

可以看到,无论是 Conflux 和 Algorand 这种在某种程度上成功突破了共识的瓶颈的设计优秀的公链,还是如 EOS 等靠牺牲了去中心化程度的、简单地绕过共识瓶颈的公链,都迎头撞上了物理瓶颈。那么,物理瓶颈难以突破的原因又是什么呢?

在去中心化的大前提下,见证交易的是全网而非少数人,那么,既然每笔交易都要把信息同步给全网,其信息量随用户数 O(n^2) 的速度增加的。换个角度表述,系统中每增加一个节点的物理资源(假设节点数和用户数是线性关系),系统中都要多出 n 份冗余信息,也就是说,冗余信息的增加速度的复杂度高于节点增加速度的,其表现就是,当节点数量超过一定阈值时,物理瓶颈成为了制约系统性能的因素。

4 Layer 2 不能代替公链本身

Layer 2 是搭建在公链上的、为特定的应用场景定制化的中间件,是为有限的共识范围提升性能的适配器,不能代替公链本身。

Layer 2 是跨越牛熊的、持续火热的话题。无论是闪电网络、Liquidity、Celer 等状态通道的方式,还是 Plasma、RSK、Cosmos、BTC Relay 等跨链、侧链、中继链类方式,通过哈希锁定、公证人、分布式密钥、中继链等机制,以单向或双向的锚定方式,对公链进行扩展,实现资产交互。其本质是将密集的状态转移交由链外完成,使主链仅起到部署、裁决等「守夜人」式的功能,以实现扩容、快速确认交易、链间资产互换等目的。

那么,Layer 2 的存在可否可以帮助公链突破「不可能三角」呢?答案是不能。

最首要的问题,是 Layer 2 牺牲了共识范围。也就是,靠将状态转移交由链下完成的代价是,把共识范围大大降低了。大量状态转移发生在链下,也意味着大量状态转移只能被少数人看到。在有些场景是没问题的,比如小额支付,确实没有必要让大家都知道。但对于更多的应用场景就会面临取舍问题,比如用在 Dex 等需要交易深度的场景,Layer 2 造成的共识范围的局限会造成信息孤岛化,进而难以大范围普及。

其次,无论 Layer 2 采用了哪种锚定方式,在锚定节点处都是以牺牲了去中心化程度,以及全局流动性为代价的。

但这个代价是必要的。区块链不是为了去中心化而去中心化,也不可能追求绝对的去中心化。让去中心化程度、安全性程度足以保证业务需求的就足以让生态繁荣了。

Layer 2 本身和公链耦合程度不大:一个公链上可以运行多种多样的 Layer 2 生态,一种 Layer 2 机制也可以运行在不同的公链上。它并不能让公链的「不可能三角」本身带来突破。相反,它需要搭建在真正突破了「不可能三角」的公链上。「Layer 1 不应追求性能」的说法是错误的。

Layer 2 的本质是,根据 Dapp 的交易结构需求,定制或半定制化的中间件,是让不同的垂直业务场景按照不同程度的共识范围需求、去中心化需求、安全性需求以及性能需求的平衡的调节器和适配器,是公链和 Dapp 之间的桥梁。

5 分片是公链唯一的出路

本文提出一种设计方案:通过牺牲逻辑复杂性突破「不可能三角」。

不分片的公链,本质上是维护一个一维的(包括 DAG)、全局唯一的「全局共识」,无论叫它比特币中的「最长链」还是 DAG 中的「主链」。如前文所述,全网用户最终要跟这个共识同步交易信息,以获取「全局共识」的验证。而无论共识机制如何优化,投入到维护这个「全局共识」的物理资源是有限的,其 TPS 是不可能随着物理资源的投入无限增加的,最终必然收敛到物理瓶颈所约束的值。因此必须将状态切分,让不同的节点去保存和验证不同的信息。所以说,分片是突破公链物理瓶颈的唯一选择。

分片系统的设计的关键点有以下几个:

1、保持去中心化程度:在同步分片信息、处理跨片交易等事务时,不能破坏去中心化程度。

2、保证安全性:不能让攻击者集中算力(或其他力量)攻击一个或有限个分片。

3、分片间同步问题:分片之间的状态,哪些要同步,哪些不需要同步。

4、跨分片交易的功能和性能问题:在可扩展性的要求下,应该认为绝大多数交易是跨片的。

目前流行的对分片的分类方式是:网络分片、状态分片、交易分片。但这种分类是有问题的,因为他们不在一个维度上,而是同一个问题的不同切入点。

下面具体说明一下三者的含义及各自的关键点:

1、网络分片:从物理上将共识网络切割成分片,分片内部自行维护共识。设计的关键点在于分片方式的随机性,以保证攻击者无法预先知道哪些节点是在哪些分片中的,也就无法集中力量攻击一个分片的节点。比如一致性哈希(DHT),或者高级一些的 VRF (Verifiable Random Function)等。

2、状态分片:不同的分片维护不同的状态。每个分片只保存一部分状态而非全局状态。设计的关键点在于如何支持跨分片的状态交互和同步。

3、交易分片:不同的分片处理不同的交易。设计的关键点在于如何保证分片内节点的交易的正确性。

接下来分析一下现阶段几个主流的分片系统:

1、以太坊分片:主链-子链-验证节点的模型。主链负责生成随机数,随机选择哪个验证者进入哪个分片;子链打包了交易数据的 Collation,也就是「校验」,负责处理交易、存储帐户和合约的状态;验证节点负责验证并帮助确认区块属于哪个分片。同时,系统拆分了交易。系统最主要的问题,是对跨链交易的支持力度不够,一旦跨分片交易过多,性能会受到严重影响。这类似于 Layer 2,牺牲了共识范围。

2、Zilliqa:引入了「DS (目录服务)委员会」的概念。首先以 PoW 方式竞争 DS 委员会名额,然后通过 PoW 竞争分片出块权,并根据 PBFT 共识出块。系统最主要的问题是,仅做了交易的分片,而状态没有分片:节点最终还是要将全部的数据都要同步到本地。同时,系统同样面临跨链交易等问题。

3、Quarkchain:根链-分片层的模型。根链确认来自分片层的所有区块,并保证其安全性;分片层处理具体交易。同时,引入了「协同挖矿」机制,即通过设计设计激励机制、调整算法难度的方式保证算力的分散性。与以太坊相同,系统也是牺牲了共识范围。

现有的主流分片系统,要么引入中心化因素,要么带有 Layer 2 的思想进而影响共识范围,几乎都难以满足突破「不可能三角」的需求。

本文提出一套分片的设计思想:

1、分片规则与业务无关:以业务无关的、尽可能随机的方式划分分片。业务相关的划分不仅降低安全性,同时降低共识的全局性。举例:DHT 或 VRF。

2、联合挖矿,同时出块:通过算法让矿工同时出足够多的块,这些块均位于不同的分片。

举例:要求矿工同时为每个分片出块(比如找到同时满足每个分片中最新块的 Hash 前 n 位为 0 的 nonce)。这样,算力就无法集中起来攻击特定的分片。

3、每个分片维护全局信息的摘要:每个分片(全节点)只维护本分片内的状态,但需要对全局信息有摘要性的同步。这个信息是极轻量级的,仅用于验证来自其他分片的交易(或拆分了的交易)的真伪。

举例:每个分片中的全节点都保存并实时同步所有分片中所有块的区块头。

4、交易拆分,异步跨片:将交易拆分成多个交易,拆分的最小粒度为片内交易,并通过异步消息传递的方式完成完整交易的拼接。这样做的好处是可以真正实现「全局范围共识,分片存储状态」。

举例:假设用户 A、B、C 位于不同分片。本文认为用户量足够大、共识范围足够广泛的情况下,参与交易的用户位于不同分片上是一般情况。

① 场景 1:A 向 B 付款。交易被拆解到两个共识周期异步完成:

A 扣款,并通知 B 所在的分片,在通知中携带 A 扣款成功的证据(比如已出块的 Merkle Root 和 Merkle path 等)。

B 所在的分片的矿工看到后,发起一个「B 收款」的交易。

② 场景 2:A 用 X 币换 B 的 Y 币。交易被拆解到三个共识周期异步完成:

A 扣 X,并通知 B 所在的分片,在通知中携带 A 扣 X 成功的证据。

B 所在的分片的矿工看到后,发起一个「B 收 X 并扣 Y」的交易,并通知 B 所在的分片,在通知中携带 B 成功完成收 X 扣 Y 成功的证据。

A 所在的分片的矿工看到后,发起一个「A 收 Y」的交易。

5、矿工参与交易整合:从上面的两个例子可以看到,矿工在做「接受了 A 扣款成功的证据,生成 B 收款的交易」的时候,事实上正在参与对交易的拼接。矿工在这里不仅是交易的验证者,也是交易的拼接者。更一般地,矿工可以做「拼接」之外的更多整合工作。比如,如果这个系统是个 Dex,矿工可以利用其物理资源集中的优势充当撮合者角色(当然,需要有相应的机制防止矿工作恶)。

上述的这一系列设计的代价主要有以下两点:

① 一个交易需要消耗多个共识周期,削弱交易的实时性。

② 对交易的逻辑复杂程度大大限制,不能图灵完备地支持交易。

这种设计的本质是,通过牺牲逻辑复杂性,突破了公链的「不可能三角」,也就是获得了一个去中心化的、安全的、可扩展的,但支持的交易的逻辑复杂性有限的系统。

6 公链不必通用化地支持所有应用

Defi 核心业务逻辑复杂度需求有限,非核心业务可以交由 Layer 2 完成。公链不必通用化地支持所有应用,可以从实际需求出发,对特定的应用做定制化优化。

Defi 的核心业务逻辑复杂度需求是有限的,远不需要图灵完备的系统来支撑。按照上述设计,大多数场景下的金融核心业务,都可以简单表述其核心过程。在几个共识周期内完成。比如:

1、支付:付款方 A 扣币,收款方 B 收币。2 个共识周期。

2、互换交易:A 扣 X 币,B 收 X 币、扣 Y 币,A 加 Y 币。3 个共识周期。

3、抵押借贷:借款方 A 抵押 X 资产,借出方 B 获抵押权、扣币,A 收币。3 个共识周期。

相应地,非核心逻辑会很复杂,比如:保证原子性,各种边缘情况,如何竞价、如何撮合,异常处理等等。本文认为,非核心的、复杂的业务可以交由 Layer 2 来解决,而公链只保证核心业务的充分去中心化、安全、可扩展。

公链的「公」字说的是共识的全局性,而非功能的多样性。至少是目前,它存在的意义并不在于给世界提供一个巨大的、图灵完备的操作系统,而完全可以为有限个,甚至是唯一的真正改变世界的、爆款的 Dapp 而生。从这个出发点来看,公链不必通用化地支持所有应用,可以从实际需求出发,对特定的应用做定制化优化。

来源链接:mp.weixin.qq.com