本文对跨链桥设计方案及每一步的目的进行了简短科普。
撰文:0xKooKoo,极客 Web3 & Moledao 技术顾问、前 Bybit 技术负责人

自区块链行业建立以来,涌现出数不胜数的 L1/L2,几乎每条公链都发展出了自己的 DeFi 生态。某些人只在特定公链上交互,更多人则希望在不同链上寻找交易、挖矿等收益机遇。在这之中,跨链资金转移成为了必不可少的刚需。
除了普通用户,很多项目方也有在不同链间转移资金的需求,在不同链上引导流动性,做到「一钱多用」。
但不同的区块链是孤立的共识系统,资金没有办法从一条链直接跨到另一条链。资金跨链的本质,是跨链桥作为一个公共的交易对手方,在源链上接收用户资金,并在目标链上给用户打钱(发行映射资产,或从目标链储备的流动性池中为用户释放资金)。

到底怎么实现资金跨链才最好?最开始人们还比较信任中心化交易所,曾一度流传一句话:「中心化交易所就是最好的跨链桥。」但「充 - 换 - 提」的操作很繁琐,人们希望有一种纯链上方式,更直接的完成资金跨链。
而且,相比于中心化交易所,跨链桥可以完成更通用的跨链消息传递,不仅限于资金传递。例如,你如果使用一个跨链借贷 dApp,从 A 链上提供抵押品,在 B 链上借出资产,就需要用到跨链消息传递。
如果考察跨链的历史来源,可以追溯到区块链技术发展的早期阶段。当时,不同公链的出现让人们意识到,链之间的互通性问题要被解决,否则会出现很多信息 / 资金孤岛。随着时间推移,人们提出了不同类型的跨链方法,逐渐形成了今天的通用跨链模式。
下面我们就来讲解一下跨链技术的一些发展。
我们来想想,最符合直觉的跨链方法是什么?假如你在 A 链有 100 个 USDT,你希望把它们转移到 B 链上。恰好有一个人在 B 链有 100 个 USDT,他希望把 USDT 转移到 A 链去。你们俩一看这不刚好吗,于是一拍即合。
但当你把 USDT 在 A 链上转到对方的地址时,他却反悔了,没有在 B 链上将他的 USDT 转到你在 B 链的地址上。
因此,这种 P2P 交易的模式不是很靠谱,一来对方可能毁约,让你遭受损失,没有任何保障;二来,这个交易对手也不好找,你可能要等很久,才能碰到一个刚好和你要跨出去的金额匹配,但跨链方向相反的用户,甚至可能等到天长地久也等不到这样的对手方。


这种方案比较靠谱了,弱化了中心化风险,安全性更高一些。比如一共有 20 个信誉良好的公证人,他们同时动歪心思的概率还是很低的。(这里不包括 Multichain 那种 20 个节点实际上是一个人管理的情况,或是像 Axie 跨链桥那样被黑客盗取了 2/3 公证人的签名密钥。)

MPC 全称 Multi-Party-Computation(多方安全计算),是一种私钥分片技术。多签账户是多个私钥管理一个账户,而 MPC 账户则是一个私钥管理一个账户,该私钥被切分为多个碎片,多个签名人各持有一个私钥碎片,当签名人数达到阈值时才可以合成完整的签名,签名过程不会暴露完整私钥。
MPC 账户有以下优势:
比普通多签钱包的保密性更强。当需要签名的时候,由例如 5/7 个私钥碎片各自去签名,多个子签名融合到一块构成最终的一个合法签名。这样一来,链上看到的是一个单一的、普通的签名,你无法分辨它是否来自 MPC 账户,更无法知道背后的签名人是谁,也无法知道私钥碎片的数量和具体的签名规则。
可以比多签钱包更好的适配大多数公链。MPC 是一种签名技术,与链无关。MPC 账户其实就是一个普通账户,不管一条公链是否支持智能合约,都可以通过 MPC 技术构建共管账户。
MPC 更换签名机制更灵活。可以支持更灵活的签名规则调整,比如随时改变私钥碎片数量、签名阈值,也可以随时更换签名人,只需要把私钥进行重新分片(Re-share)即可。


但自动化也带来一个问题,就是这个自动化程序有可能被黑客攻击和操纵。因此为了控制风险,跨链桥会采取冷热分离的措施。自动化程序控制的是热秘钥,转账的金额受到限制,遇到大额转账,则必须让公证人用冷秘钥进行手动签名。冷热分离的规则可以在 MPC 账户中实现。
这种隔离是通过硬件强制实现的,具有极高的安全性,因此 TEE 可以运行具有高安全性要求的应用程序,例如加密密钥管理、生物特征认证、安全支付处理等。

哈希锁定
回到本文所说的第一种方法:P2P 的寻找跨链资产交换的对手方。如果我们害怕对手方赖账,那可以设置一套机制,一旦谁反悔了,另一方可以把钱拿回来,完璧归赵。
这就是哈希锁定,它巧妙地利用了哈希锁和时间锁,迫使资金的接收方必须在 deadline 之前确定收款,并且产生源链上的收款证明,而打款方凭借这个收款证明,一定可以获取接收人在目标链上的等价资产,否则双方的资金都将原路返还。

但是这种方式只能进行资金的交换,无法完成通用的跨链信息转移。而且哪怕单从资金跨链转移的角度讲,哈希时间锁的用户体验也很不好:
如果币价的波动对交易对手(流动性提供方)不利,他可能理性地选择不成交;
为了完成一笔跨链交换,用户和交易对手都必须操作两次签名。
因此,哈希时间锁作为一种跨链解决方案,基本已被淘汰。早期使用这种方案的跨链桥(例如 cBridge、Connext)都已经改弦更张了。
链上轻客户端
这种方式是直接在目标链上部署源链的轻客户端合约。如果你在一条链上部署了合约,那么这条链的所有节点都会运行你部署的合约代码。所以,链上轻客户端的方案,实际上是让目标链直接验证来自源链的交易。
这种方式具有极高的安全性,但也是最昂贵的。昂贵体现在以下几个方面:
目标链的轻客户端合约需要实时接收和验证来自源链的新区块头,这个过程非常耗 Gas,即便用 ZK 来实现简洁证明,验证一个 ZK 证明的 Gas 消耗也不会低于 40 万 Gas(EVM 为例),而在 MPC 方案中,链上仅需验证的就是一个签名而已,Gas 消耗只有 2 万出头,差了 20 倍!一个更安全,但是贵 20 倍的桥,你会用吗?

开发轻客户端合约的工程量巨大,而且为了让跨链桥兼容更多的异构链,你需要在不同链的完全不同的开发环境中,实现其他各个链的轻客户端合约,对开发人员简直是地狱级挑战。这就导致合约编写出现 bug 的概率变大,也就是说轻客户端桥的安全性仅仅是理论层面的,在工程实践方面,反而很不安全。
为了降低开发工程量,有一个可行的方案是引入一条中继链,让所有链与这条中继链互相建立轻客户端合约,这的确可以让曾经 C(n,2) 的工作量减少为 n,但依旧不会太小。原本从源链到目标链直接的跨链传递,也变成了源链→中继链→目标链的二阶传输,这会产生额外的 gas 消耗和时间消耗。

因此,轻客户端的技术方案,目前来看,无法被用于构建更普适的跨链桥。
首先,不同的公链有着不同的做法,背后也有不同的资源在支持,只要不服输,生态一定会存在,即使短期内发展不是很好,也说不定哪天做了一个升级就又活过来了。像这种底层 infra 的事情就是看谁坚持得久,看谁针对市场调整得快。
Bitcoin 和 Ethereum 不能解决所有的应用场景,又或者说在某一个细分赛道,总有人不喜欢第一名,于是新造一个轮子,因此未来一定会是多链的。或者以后底层都不是链了,那未来一定是多生态的,多个生态之间的资金和消息怎么做传递呢,就一定需要有跨链 / 跨生态技术!
跨链这件事情上用户最关注什么呢?无非是以下几点:
速度:一笔跨链操作需要多久完成
费用:我需要为一笔跨链操作支付多少
安全:跨链桥是否安全,资金会不会丢失
流动性:是否有足够的流动性以支持我的交易以及可接受的 price impact
连接范围:你支持多少条链,是否支持我的跨链操作中需要用到的链
体验:跨链操作是否方便,例如是否支持 Gas 代付、费用预估是否准确、是否支持进度查询和浏览器查看,出现失败的情况是否频繁,失败如何处理等等。
我们先从安全、费用、连接范围三个比较清晰的角度来概览一下一些项目的特性。


点击链接查看清晰表格(表格不断更新中):https://docs.google.com/spreadsheets/d/1LKlbd5KJUnQIx3ZBTgyMADhxHtWVwBH9qDRm765tPMw/
为了完全说清楚跨链桥,其实还有很多维度的细节需要讨论,例如上面表格里面的所有维度和数据分析。那么你在跨链时,会在意哪些要素呢?你经常使用的跨链桥有哪几个?你认为跨链桥应该着重在哪些方面优化?如果你有你的想法,欢迎与作者交流。
感谢 0xmiddle 在本文撰写过程中提供的帮助。
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。
