主链为什么会撞墙
想象有这样一间法庭:国内签下的每一份合同,都必须由每一位公民亲眼见证,否则就不作数。任何伪造都绝无可能蒙混过关——可门外的队伍会排出好几英里,光是一个签名就得耗上一整天。这正是 以太坊 这类链所达成的交易:成千上万个彼此独立的节点,各自把每一笔交易都重跑一遍,于是它的结果是全世界可以去验证、而非只能去信任的东西。安全是彻底的,速度却不是。
这正是可扩展性三难困境的核心:一条链似乎被迫在三样东西里只能选其二——安全、去中心化与规模。你可以靠要求更大、更昂贵的机器来运行节点来提速,可这么一来,能负担得起持续监督的人就更少了,去中心化便悄悄地被侵蚀。多年来,那些看上去显而易见的修法,无一不在悄悄地把这条链之所以值得用的东西给换走。
链下干活,链上结算
二层网络是一条单独的链,它跑在某条基础链——也就是一层——之上,并向它借来安全,而不是另起炉灶自建一套。今天最重要的二层家族是 Rollup,这名字本身就透露了它的运作方式。在 Rollup 那一头,一台名叫定序器的快速机器把成百上千笔交易收拢起来,一批一次性地执行,再把它们卷成一个小巧的包。随后,它把这个包发回一层。
下面这一步,才是让一切运转起来的关键。一层并不把那成千上万笔交易重跑一遍。相反,Rollup 只递给它两样东西:新的状态(更新后的余额、新的账户数值),以及足够让任何人去核对这个新状态确实是由旧状态推导而来的信息。最昂贵的那部分——真正的计算——只在链下、在一台快速机器上发生了一次。基础链要做的,只是被说服这个答案是对的。说服,远比计算便宜。
LAYER 2 (rollup) LAYER 1 (base chain)
------------------- --------------------
tx tx tx tx tx [ batch summary ]
tx tx tx tx tx --roll--> [ new state ]
tx tx tx tx tx [ validity info ]
(1000s of txs) |
executed once v
by sequencer verified, not re-run
-> inherits L1 security由于 Rollup 完完全全靠一层来结算、也靠它来存储自己的数据,Rollup 上的一笔交易,最终享有的是与主链上同等的安全。你信任的并不是定序器会诚实行事;你信任的是基础链能在它不诚实时把它逮个正着。这便是它全部的承诺:以一层成本的零头,换来一层级别的安全。
证明这批交易诚实,有两条路
一切都系于一个问题:一层是怎么被说服定序器没作弊的——没在过程中给自己偷偷塞上十亿枚币?两个不同的答案,把 Rollup 劈成了两个阵营,而这分歧,是货真价实的世界观之别。
乐观 Rollup 先信任,只在有人发起挑战时才去验证。它发布自己的新状态,然后干脆*断言*它是对的——乐观地假定它没问题。随后开启一扇监督窗口,通常约一周,在此期间,任何发现谎言的人都能提交一份欺诈证明:一份在链上对某个争议步骤被算错之处的精确演示。一旦欺诈证明成立,那批坏账就被作废,作弊者赔上事先押下的保证金。若窗口在一片沉默中关闭,状态便告终局。它押的注是:诚实是常态、挑战是稀客,于是几乎什么都不必费力去证。
ZK Rollup 把举证的担子倒了过来。它不去邀人挑战,而是给每一批交易都附上一份有效性证明——一小块用与零知识证明相同的工具搭成的密码学。这份证明,本质上就是一张数学收据,写着*“我把这些交易全都算对了”*,而一层只需几毫秒就能核验它,无须重新执行其中任何一笔交易。这里的 *zero-knowledge*(零知识)之名多半是历史遗留:Rollup 真正需要的是简洁的有效性,而不是隐私——交易数据依旧会被公布,下一节会说到这一点。这里没有等待窗口,也无须假定善意:一批无效的交易,根本就生不出一份有效的证明。作弊不是在事后被逮住——而是在事前就被弄成了不可能。
- 乐观式:假定有效,押上保证金,再让一份欺诈证明在挑战窗口内推翻任何谎言。运行便宜,但提款要等满整个窗口。
- ZK 式:事前就用一张一层能即刻核验的密码学收据来证明有效性。生成证明的数学更重,但几乎当即终局,且无须假定任何事。
真正的命门:数据可得性
下面这处微妙的地方,几乎把所有人都绊倒过,值得放慢脚步细看。一份证明——无论欺诈还是有效性——能告诉你某个新状态是*正确*的。可要真正用上这条 Rollup、要退出它、或要去挑战它,世人就得知道那些交易到底是什么。倘若定序器诚实地把一切都算对了,却又拒绝公布底层数据,你的资金便可能在可证明的意义上是正确的,却又彻底动弹不得——因为没人能重建状态来提款。只有正确、却没有数据,就像一个保险库锁着、余额经过核验、你却永远够不着。
正因如此,一条真正的 Rollup 必须把它的交易数据发布回一层——在那里数据是永久的,任何人都能读取。这条独一无二的硬性要求——数据可得性——正是把一条真正承袭了基础链安全的 Rollup,与一个仅仅口头保证会守规矩的“快表亲”区分开来的分水岭。这同时也是 Rollup 要付的、遥遥领先的最大一笔成本:一条 Rollup 的 gas 账单里,大头并不是计算,而是把那一整堆数据写到人人都看得见之处的代价。
权衡,与前方仍敞开的路
两大阵营都没能一举胜出,因为各自都付出了实打实的代价。乐观 Rollup 搭建起来更简单、也更便宜,而且它几乎原封不动地运行普通的 以太坊 代码——但它那扇挑战窗口意味着,一笔完整退回一层的提款可能要花上约一周。ZK Rollup 几乎当即结算、无须等待,但生成那些有效性证明在计算上很重,而要让它们应付得了形形色色的每一种合约,一直是一场漫长而艰辛的工程攀登。如今两者都已上线、都承载着真实的活动;哪一个更合适,取决于你更看重什么——是即时终局,还是简洁。
这里有一些谁也尚未彻底解决的难题。今天的大多数 Rollup 仍只跑着一台单一定序器——一台孤零零、负责给交易排序的快速机器,方便归方便,却是一个中心化的控制点,社区正积极设法把它分散出去。而由于数据可得性主导着成本,眼下前沿的大量心力,都投在如何让数据发布得更便宜、又不削弱那份保障上。这些都还是鲜活的研究课题,而非已成定论的事实——而这份坦诚,本身就是理解这一领域的一部分。
退后一步,整个形状颇为优雅。一道曾经看似铁律的三难困境,原来留着一道缝:让基础链保持小巧、缓慢、安全得近乎不可撼动,再把繁忙的活计往上挪到一条整批借用那份安全的二层网络去。基础链于是成了一座只听证明的最高法院;它之上的 Rollup 们,则成了生活真正上演的、熙熙攘攘的庭审现场。下一篇会把这个想法推到它的尽头——那些从一开始就被搭成相互分离、各司其职之层的链,也就是关于区块链能成为什么的那幅模块化图景。