我们正处于区块链 2.0 转化的时代,目标是大规模的商用。传统的区块链技术,如比特币和以太坊,在性能上面已经显得力不从心,本文就来聊一聊区块链链下扩容技术。
作为史上最慢的分布式数据库,比特币和以太坊的 TPS(每秒交易数)离商用有多远呢?有图为证:
说好的区块链 TPS,怎么只画了 VISA 和支付宝呢?不是我没画,只是比特币的 7 笔交易,以太坊的十来笔交易,在图上根本显示不出来。
现在诞生了很多以提升 TPS 为目标的竞争链,动辄声称百万级 TPS,比特币和以太坊是不是已经成为昨日黄花了呢?
V 神说,不,我觉得还可以再抢救一下。
治病要先找到病因,传统区块链技术性能差的原因来自于两方面:
1. 每一个全节点都需要校验并记录所有的交易数据,不可水平扩展
2. 运行在开放网络中,网络时延,节点数量全都是未知数,要全网节点达成共识,需要很大的开销
故事大致是这样的,我们斥巨资打造了全世界最靠谱的银行
也聘请了一个非常可靠的业务员,他只有一个缺点…
结果自然是:
好了,我们知道区块链扩容是迫在眉睫的事情,but how?
sharding
和 DAG
这些方案POS
,DPOS
,PBFT
等。注意这里并不是说这些新的共识算法一定会比 POW 优胜,各种方式其实各有优劣,本文不做评价那么,到底什么是链下扩容呢?
链下扩容顾名思义,就是把交易或者处理的过程放在链下执行,区块链只对最终结果进行记录或者仲裁。参与者需要在链上抵押资产,通过经济制裁的方式惩罚作弊者,保证链下安全。链下扩容方案建立在区块链基础层以上,不需要更新基础层,所以也被称为层 2 扩容。链下扩容的发展我觉得可以分为三个方向。接下来我们对这几个方向分别解释
状态通道最早出现在比特币上,成为闪电网络,接着,以太坊上也出现了类似的方案,叫雷电网络。两者在原理上差不多,得益于以太坊的智能合约,后者实现更简单,我们以之为例说明。
状态通道的目标是交易扩容,让区块链上一两位数的交易量扩充百千倍甚至更多。
交易开始之前,交易双方各提供一笔准备金,后续的交易都在准备金中进行。
银行和用户之间约定:
* 双方同时签名,退回准备金
* 单方签名,也能退回准备金,但是发起退款的一方需要等待一个冷却期
冷却期的作用有两个,一是鼓励大家维持支付通道,二是防止欺诈
支付通道建立起来以后,接下来的交易就用打白条(合约)的方式进行,再也不需要到银行排队了,白条的格式如下图所示:
最终结算的时候,大家只要把最后一张合约拿到银行,即可完成结算并提现,相当于把很多笔的交易结果打包上链了。
这样,问题来了,银行并不知道最后一笔交易到底发生在什么时候。Bob 可以提交第一张交易合约取现从中获利。为了应对这个问题,发起提现的一方需等待一个冷却期才能取回自己的资金,在这个冷却期内,如果交易另一方能提供更新版本的签名合约,作弊方将被罚没准备金。
通过准备金和签名合约,我们把大部分的交易从链上转移到链下,同时还保证了交易双方 “诚实” 的执行交易和结算。但是,在这一步,只有建立起支付通道的双方可以发起交易,这在现实中限制很大。对于没有建立和维护支付通道的用户来说,怎么处理呢?
我们通过借用中转通道的方式间接交易:
利用中转支付通道这种方式存在着天然的限制,无法保证原子性,如果 Alice 把钱打给 Bob 以后,Bob 不付给 Carol 怎么办?解决方法是哈希锁,成为 HTLC。
1. 交易路径上的每两方建立按先后顺序建立加锁合约,加锁的密钥掌握在交易终点用户(Carol)手上。
2. 合约路径建立完成后,Carol公开密钥,通道用户可以以之提现。
支付通道建立起来以后,Carol 要提现,必须展示哈希锁的密钥,在展示哈希锁密钥的同时,Bob 也自然的可以从 Alice 手上拿到自己应得的部分。
通过支付通道,我们可以把海量的交易打包后上链,让区块链每秒能处理的交易数大大提升,那它是不是就是完美的解决方案呢?在我看来,至少存在下面缺陷:
锁定的准备金只能在支付通道中使用,只有关闭通道以后才是真正的提现,当网络存在海量通道时,通道的集中关闭会导致类似银行挤兑的系统性风险,压垮网络。
交易双方需要监视网络,在冷却器内及时提供证明防止欺诈,从被动防御转变为主动防御
闪电网络中只有保存最终的资金状态保存,中间的交易细节全部被忽略
通道需要准备金维持,不可能任意两个用户间都存在支付通道,最终很可能会有大资金形成中心化的中转节点,这个大资金实际上具备了审查交易的能力
状态通道解决的交易容量问题,那么 TrueBit 解决的就是智能合约容量问题。
我们知道,以太坊中的智能合约需要每台矿机执行计算。复杂的智能合约需要耗费大量的计算资源,经济上体现为智能合约用户需要交付大量的以太币(gas)作为驱动。
TrueBit
的思路是把智能合约的运算外包给第三方,把复杂的计算任务放到链下执行。通过经济激励,促使第三方之间互相监督,保证计算结果正确性。以太坊作为一个数字法庭,对计算结果作为终极校验并惩罚作恶者。
TrueBit 的基本过程是这样的:
Task Giver
)上传需要执行的代码(下文成为任务),并提供佣金。Solver
)发现这个任务,认为佣金可以接受,执行计算任务并答公示运算结果,同时提供一笔保证金。Verifier
)重新执行任务,如果发现 Solver 造假,可以发起挑战,同样需要提供一笔保证金。Solver
和 Verifier
玩一个验证游戏(verification game),通过 Task Giver
在链上提供的执行代码验证答案真伪,提供正确答案的一方获取佣金,造假的一方从保证金中支付整个验证过程所需的 gas。Solver
造假,Solver
获得佣金。在基本过程之外,TrueBit 其实还设计了很多精巧方法去优化协议,比如说计算分段和税金 - 乐透制度等,详见拙作 TrueBit 白皮书解读。
Plasma 的野心比状态通道和 TrueBit 都要大得多,它要做的是通过多级(分层)子链来减轻区块链主链的压力,从而达到近乎无限的扩容。
子链负责处理各自数据和业务,可以有自己独立的共识算法
父链中保存了子链块 hash 和子链的校验规则,必要时进行仲裁和经济惩罚
Plasma 要解决两个最重要的事情,一是子链的反欺诈,另一个是资金的进入与退出。
对于子链反欺诈,Plasma 采用了欺诈证明(Fraud Proof)的办法来解决。
Plasma 图片均来源于 Plasma 白皮书
每个子链,需要在主链(以太坊)上创建智能合约,明确子链的游戏规则,诸如子链的块验证,父链跟子链的 token 转换等。同时,子链出块方需要在父链中锁定资金,用于后续追责。
业务数据保存在子链,子链的块 hash 同步到父链中作为凭证。任意第三方可以负责监督子链的运行,如果发现欺诈行为,可以把问题区块提交父链验证,便于追责和问题区块回滚。
不难看出,欺诈证明跟 TrueBit 基本思路有相似之处:智能合约换成了区块链,图灵状态换成了区块哈希。
对于子链参与者,Plasma 提供了一个资金退出的机制。
用户只要提供在子链上最新的交易结果,就可以把资金安全的回退到父链中。父链不会监督子链每个区块,无法确认用户提供的交易结果实时性,资金回退需要等待一个挑战期,防止用户欺诈,机制类似于状态通道。
编者注: 社区作者盖盖写了一系列文章:深入理解 Plasma, 有兴趣可前往阅读。
跟其它扩容方案相比,区块链的链下扩容技术具有如下特点:
不管结果如何,我觉得链下扩容会是一个可以媲美比特币的社会实验。再多说一句,现在社会实验这个词已经被用滥了。EOS
的社区化治理,说是社会实验,还勉强说得过去;某社区言论领袖搞的打车链,还是空气状态,就已经号称自己是伟大的社会实验,这就有点扯了。