跨链桥的思考框架|乌托邦周报 #16
跨链桥是区块链间信息孤岛问题的解决思路。
本文将从第一性原理出发,刨除具体项目的实现细节(因为细节仍在在不断进步和过时),构建一个一读就懂的跨链思考框架。
本文要点:
为什么需要跨链桥
跨链桥的实现原理与流派
跨链桥的未来
为什么需要跨链桥
未来是多链的,跨链桥必不可少。
这句话说的人多了,也就似乎成了共识。然而,不少人对此的判断,可能只是基于现状。公链越来越多,未来肯定会继续存在,所以跨链桥肯定是有需求的。真的是这样吗?
有意思的是,回到几年前,大家对未来的预测刚好相反。大家普遍认为,L1 公链之争,最终将会以少数项目的胜出告终;甚至纷纷站队,认为自己支持的公链必胜,其他的没戏。
然而几年后的今天,L1 的“不可能三角”(Decentralization、Security、Scalability)仍然牢不可破。无论是在以太坊这类去中心化的、安全的公链上扩容,还是在高吞吐、安全的公链上假装去中心化,最终实际上都没有解决这一问题。拿以太坊来说,将 L1 扩容的合理性暂且搁置不谈,当年看起来近在咫尺的分片(Sharding),到目前为止也有大量细节没有确定,难度远超之前预期。
进展的缓慢,L2 的兴起,以及思维的不断碰撞与反思,让大家开始发现,L1 上扩容固然好,但不现实,L2 也很不错啊。这里的“不现实”指的不是 L1 不能扩容,而是拿 L1 与传统的中心化架构竞争,本身就是一种错误,因为在效率上竞争得过中心化架构的,必定是另一个更中心化的架构。
这是一个很好的趋势,在评估架构时,在传统的效率维度之外,信任终于成了一个新的独立维度,而且大家赋予它的权重越来越大。尽管这一趋势背后,是一次次漏洞攻击、社会经济事件的惨痛教训。
大家于是开始心平气和地接受了“不可能三角”,接受了 L1 公链的不完美,逐渐认同公链没有最优,只有最合适的观点。关注信任的场景,吞吐没那么高也可以;不那么关注信任,但重视吞吐的场景(比如游戏),可以自行取舍,定制开发独立的链,或者走 L2。也就是在这一大背景下,区块链模块化设计应运而生。
就这么着,未来是多链的,才成为共识。
在这一共识下,跨链桥的必要性就很好理解了。L1 公链生来就是一个个孤岛,不同孤岛之间互不来往,可以吗?可以,但是这样的话应用就很受限了。比如比特币想用以太坊上的智能合约能力,或者以太坊 DeFi 里的资金想取出来投到游戏里,没有跨链桥就没法办到。链与链不互通,致使应用扩展性受限;而为了广泛地利用各链的特长,资金会很分散,利用率会很低。
未来是多链的,跨链桥必不可少,就是这么来的。
跨链桥的实现原理与流派
接着上面讲的,最直接的跨链诉求是资产的跨链,即不同链上的原生资产能跨链流动。
要解决这一问题,最直接的思路是在目标链上设定一个代理 Token(比如 Wrapped BTC),但代理 Token 只是名字和原 Token 像,在价值上没有任何关联呀?没关系,只要保证代理 Token 与原 Token 之间能双向兑换(Lock & Release、Burn & Mint)就成了。
那谁来提供兑换服务呢?这个“谁”可以是一个主体或一群主体。对应现实,一个主体可以是一个公司,一群主体可以是多个公司或者多个个人和公司。因为提供兑换服务涉及到的信任实在是太大了,服务提供方完全有可能收了钱不放款,所以资产跨链方案的各种复杂性,多数都围绕信任问题展开;有时候信任问题解决得很好,但跨链效率受到影响,又会尽可能去解决效率问题。就这么简单。
当然,资产跨链只是跨链诉求的一个特例,我们可以将跨链泛化为在链与链之间传递任何消息(Arbitrary Message Passing,AMP),这样应用场景和想象力就打开了。
下面我们一起看看,广义的跨链解决方案有哪些流派,每个流派分别是什么思路(剧透预警:和 Rollup 真的很像)。
流派 1:信誉担保
和上面聊的资产跨链一样,在链与链之间传递消息,自然也可以采用中心化地方式,让一个有信誉的主体来完成,这样效率最高。
但是,消息传递影响的经济价值太大,担心这个主体作恶,怎么办?一样,我们可以把一个有信誉的主体,换成多个有信誉的主体,消息传递需要多签,这样就降低了风险。
有的地方喜欢叫这种流派叫 Custodial 或者叫“相信公证人”,但笔者认为,叫“相信信誉“或“信誉担保”(Reputation at stake)可能更好,而且和我们要讲的第 2 个流派更在一条水平线上。
流派 2:资金担保与博弈论
流派 1 存在 2 个信任问题:
信誉到底值几个钱,说不清楚;
服务提供方还是太中心化,合伙作恶的概率不能说不高。
针对这 2 个问题,流派 2 的解法很直接:
别整些没用的,交押金,谁作恶就扣谁的钱;
只要交押金,谁都可以参与进来,这样更去中心化,合伙作恶的概率就能降低了。
这其中又有 3 种细分玩法:
类似于以太坊 PoS 那样,交了押金的人过来投票,最终给一个确定性结论到目标链上;
类似于 ORU 那样,先相信一个人说的,有人发现他说谎再来举报、制裁他;
作为上面第 2 种玩法的补充,还可以把消息传递拆分成多个角色来做,这样只要角色间不串通,就可信。
当然,去中心化和引入博弈带来了信任的提升,但消息传递效率就打了折扣了。
一个很切实的问题是如何确认 Finality。这么多链,不同的吞吐,不同的共识机制,有些(比如 PoW)甚至只有 Probabilistic Finality 而没有 Deterministic Finality,某条链如果出现了回滚,和它桥接的链不是也得回滚,这怎么办?
类似于 ORU 的 Challenge Period,我们可以设置一个长一点的时间窗口,如果这个窗口过去都没回滚,我们就认为这个窗口前的交易是最终的。不幸的是,这显然会影响体验和效率。
怎么办?解决办法之一是引入流动性提供商,他们自愿承担回滚风险,出让流动性,让用户快速确认交易,换取一定的手续费。这个思路其实和以太坊 Staking 的流动化一样。上海升级前,ETH 质押后不能马上提取对不对?没关系,我们提供一个 stETH 的交易平台,你可以折价出售。
流派 3:数学
另一个解决办法是,跨链根本就不用相信信誉或依赖经济激励博弈,直接依赖数学。什么意思?就是如果你传递的信息是错的,目标链一定会发现。
听起来很好,可怎么实现呢?
一个 naive 的方式是,每 2 条链的验证者都同时运行对方链的全节点,以此来知晓对方链上发生的一切。但这太重。
改进一下,大家只互相运行轻节点。相比全节点,轻节点干的只是将对方链的少量关键信息取回来存着(比如区块头),并且校验源链上的一个交易是否被包含在区块内,即最终的状态里了。至于区块头、交易内容等信息,都由一个 Relayer 搬运(假设源链与目标链不共用 DA 层)。所谓 Relayer,就是名副其实的搬运工。因为消息会被源链签名,Relayer 篡改消息的话会被马上发现,他能干的坏事只有审查(Censorship),遇到这种情况大家只要找另一个靠谱干活的 Relayer 即可。可见,外部信任假设已经被压缩到很低的水平了。
轻节点还可以更轻,于是我们有了超轻节点。超轻节点之所以更轻,原因在于它不像轻节点那样,需要不断记录对方链的区块头等信息,而是只在需要跨链的时候,找“人”要这个信息,这个“人”通常是 Oracle。这里要注意,超轻节点更小的 foorprint,背后是有一定的安全性牺牲的。
解决了信任问题,效率有没有受影响呢?有的。
按轻节点的思路,需要区块链两两之间内置轻节点,这种成本是随着链的个数而指数增加的,怎么办,我们可以构建个 Hub,让每个轻节点都和这个 Hub 沟通(Hub & Spoke)就好了。
还有一个问题,轻节点之间要验证,需要大家之间互相支持,比如共识算法一致,但这不现实,比如以太坊上的共识算法中用到的 Hash 函数,换一个链可能就未必支持或能跑但贵得不现实。这个问题也会大大限制轻节点的推广和应用。
此外,目标链要验证源链来的交易是否合法,需要自己跑一遍,这个其实效率不高。通过引入零知识证明(ZKP),我们可以让目标链在 sublinear 的时间内,更高效地验证交易,只要 Relayer 把证明传递过来即可。当然,引入 ZKP 本身也是有损失的,损失的不是信任和效率,而是通用性、扩展性,毕竟很多计算目前还没法转换为 ZKP 问题。
PS. 市面上还有其他流派,例如依赖可信执行环境(TEE)这种硬件设施来保证可信,然而这种思路并不靠谱。理论上讲,只要成功发现漏洞,后面都可以几乎零成本地利用了,而发现漏洞更多只是时间问题。所以,我们这里并未提及。
跨链桥的未来
相信货真价实的数学,尤其是结合了 ZKP 的数学,是最有信任和效率的方案,前提是把时间轴拉得够长,ZKP 有巨大进步;
短期看,资金担保与博弈论,加上流动性提供商,是最切实有效的解决方案;
不过,信誉担保的跨链未必不好,因为全走链上其实还暗含了对代码的信任,走信誉担保加上链下法律保障反而容错空间更大,前提是对区块链的监管体系完善(欧盟已经迈出了很好的一步,而美国却在逆着来)。