跨链桥不是一个新话题,但我们还需要重新认识它。今天,我们推出跨链桥系列文章,将对跨链桥的基本要素、跨链技术以及跨链桥的安全性进行了全面的分类和解读。
原用标题:深度 | Web3 世界的信任边界,跨链互操作性技术会影响区块链发展的未来吗?
封面:Photo by Shubham Dhage on Unsplash
1. 什么是跨链桥?
当前区块链行业发展迅猛,出现了各种各样的公有链,但是不同链上有着不同类型的资产、协议等,使得它们之间无法直接通信,这给用户带来了诸多不便,比如:某用户持有比特币资产,但是想在以太坊生态中进行投资或消费,那么最直接的方式就是通过中心化的交易所进行兑换,但是整个过程非常繁琐,耗时很长并且需要多次支付手续费。
跨链技术的发展使得用户对于不同区块链之间的互操作(如:资产交易和信息交互)成为可能,其中应用范围最广的实现就是跨链桥。Web3 领域中的「跨链桥」,不是物理位置连接的桥,而是连接两个不同的区块链网络。这种连接非常重要,因为如果没有区块链「桥」,区块链就会处于孤立的环境中,无法相互通信。
扩展阅读:科普 | 什么是跨链桥协议?
2. 跨链互操作性详细解读
区块链的互操作性 Interoperability,由 Interaction、Operation 和 Ability 组合而成,即 “相互操作的能力”,简称互操作性。区块链互操作性主要包含三方面内容:一是用于应用层的互操作性,主要解决上层应用与底层链紧密耦合的问题,二是用于链间互操作性,主要解决 “链级孤岛” 问题,三是链下数据互操作性,主要解决链上链下数据的安全可信交互。而本文主要从跨链交易的用途讨论区块链互操作性,即不同区块链系统之间的资产和信息交互。
下面将首先对三种区块链中的互操作性技术进行详细介绍:
2.1 公证人机制
公证人机制是技术上可实现的最简单的一种跨链机制,本质上是一种中介的方式。通过引入一个或多个可信第三方做信用背书,持续监听链上的事件,并根据获取到的事件信息负责在其他链上进行跨链消息的验证和转发。公证人机制的实现方式主要分为以下三种:
🧊1. 单签名公证人机制
最简单的公证人机制,该方式会选取一个独立的节点或者机构作为第三方公证人。公证人在整个跨链交互中进行数据收集、验证、交易确认等任务。该方式兼容性高、交易速度快,但使用范围仅限于跨链资产交换等场景。
🧊2. 多签名公证人机制
该方式中公证人为一群独立节点或者机构组成的联盟,每个节点都拥有一个密钥,只有一定比例的公证人在跨链交易上签名达成共识时,该交易才有效。
该方式弱化了单签名公证人机制的中心化风险,具有更高的安全性,即使有部分节点受到恶意攻击也不会影响整个跨链系统的运行。
🧊3. 分布式签名公证人机制
该方式相较于多签名公证人机制,采用了多方计算 MPC(multipartycomputation)来确保密钥的安全性和隐私性。即将密钥拆分为多个碎片并随机分发给公证人,但无法利用这些碎片得出完整的密钥,仅当一定比例的公证人共同完成签名后才能拼凑出完整的密钥。
2.2 哈希锁定
哈希锁定全称为哈希时间锁定合约(Hash timelock contract),该方式利用哈希函数的单向性与低碰撞性,通过哈希锁和时间锁,在无需可信第三方作为公证人的情况下完成不同链间资产兑换的跨链技术。其中,哈希时间锁要求接收方在规定的 deadline 期限内,能够确认收款并生成证明给发送方,否则资金将会归还。发送方能够使用收款证明获取到接收方在目标链上的资金或触发相关事件。
该方式的能够保证同一条链上的资产总量保持不变,但通常只能用于转账操作。下面以闪电网络中基于哈希锁定的原子交换实现过程:
1)用户 A 生成随机数 s,并计算出其哈希值 H(s);
2)将 H(s) 值通过网络发送给另一条链上的用户 B;
3)用户 A 设置时间锁 t1,并使用 H(s) 将 BTC 锁定在自己所在的链的脚本中,该操作限定了只有能提供 s 值的用户才能获取到锁定的 BTC;
4)另一条链上的用户 B 在 A 所在链上确认上述交易后,同样在自己所在的链上设置时间锁 t2(t2 < t1),同时使用接收到的 H(s) 将自己的 BTC 锁定在该链的脚本中;
5)用户 A 在 t2 时间内向用户 B 的脚本发送 s 值;
6)用户 B 的合约验证通过后,将锁定的 BTC 发送给用户 A,同时获取到 s 值。此时如果交易超过 t2 时限则跨链交易失败,双方都各自取回待兑换的资产。
7)用户 B 将获取到的 s 值在 t1 时限内,发送给用户 A 的脚本。待其验证通过后,脚本将锁定的 BTC 发送给用户 B。如果超时同样使得跨链交易失败。
2.3 侧链/中继技术
侧链和中继是最常用的跨链机制,都可以通过采集原链上的信息,实现主链区块和账本数据的解析和验证。
但二者存在以下几点差异:首先,侧链从属于主链,侧重于提高主链的可扩展性,对于主链不可见,通常共享原链上的原生代币,而中继则没有从属关系,着重于跨链数据的传输;其次,侧链处理交易时需要同步所有的区块头,导致其速度比中继链慢;最后,侧链和主链的安全机制相互独立,即侧链具有自己的共识协议,这些协议通常是为特定类型的交易设计的,意味着其通常不会继承主链的安全属性,在使用侧链时,用户将失去对资金的保管权,且仅依赖于侧链的安全性。而中继则依赖于主链进行验证。
中继本质上是各主链抽象出的一个跨链操作层,是公证人和侧链机制的融合和扩展。主要作用是作为一个通信中枢收集不同区块链间的数据并进行消息转发,适用于异构或同构的区块链。
侧链实现的基本技术是双向锚定(Two-way Peg)。跨链过程实际上是在一条链上锁定某种代币资产,同时又在另一条链上生成对应的另一种代币资产。其中,双向锚定技术就是解决跨链过程中,目标链如何判定代币资产已经被安全锁定的问题。被认为是区块链上第一条侧链的 BTC-Relay,其就通过在智能合约中内嵌 Bitcoin SPV 功能来允许用户在以太坊上验证比特币的交易。
该技术目前可以通过单一托管模式、联盟模式、驱动链模式、SPV 模式实现,
下面将进行具体介绍:
🧊1. 单一托管模式
最简单的实现方式,基本原理与单签名公证人相同。通过公证人实现侧链资产的锁定和验证释放。
🧊2. 联盟模式
资产托管方是公证人联盟,基本原理与多签名公证人相同,利用多重签名减小上述方式中中心化的风险。
🧊3. 驱动链模式
该模式中由交易处理节点作为公证人,负责资金的托管和解锁。具体过程为:交易处理节点提交其他链上的资产锁定信息到区块中并发起草案,在投票与确认后,在当前链上解锁指定的资产。
🧊4.SPV(Simple Payment Verification)模式
主链和侧链通过 SPV 验证,确定资产是否被安全锁定。下面以 BTC-Relay 中该模式的具体实现为例,进行介绍:
1)用户 A 向主链上包含了侧链信息的指定地址发送代币,锁定主链资产;
2)等待一段确认期,使得上述交易经过主链共识后被确认;
3)用户在侧链提交一笔铸币交易和对应的主链资产锁定交易的 SPV 证明,侧链区块根据 SPV 证明验证上述交易的有效性,验证通过后侧链会进行铸币但该资产此时处于锁定状态;
4)等待一段竞争期,目的是为了保证资产被完全锁定,从而防范双花攻击。如:等待 SPV 区块头的验证数大于 6 次;
5)侧链解锁铸币,使得其可以在侧链上自由流通。
3. 跨链互操作性协议
3.1 资产交换
区块链在转移跨链资产时通常分为以下四种方式:第一种是锁定和铸造,该方式会在原链上锁定资产,并在目标链上铸造对应的资产;第二种方式是销毁和铸造,该方式会销毁原链上的资产,并在目标链上铸造资产;第三种方式是原子交换,该方式会将原链上的资产直接兑换为目标链上的资产,且无需信任,因此其不需要前两种方式中的可信第三方;第四种方式为流动性置换,该方式会在不同的链上建立流动性资金池,用户可以在资金池中直接兑换另一条链上的原生资产,另外流动性提供者也可以通过提供代币作为流动性资金。典型的资产交换协议有 Plasma、Rollup 等,下面将进行详细介绍。
3.1.1 Plasma
Plasma 包含一系列运行在区块链上的智能合约,通过与侧链间接交互实现跨链。它可以创建子链的无限分支,这些子链是以太坊主链的的较小副本,具有自己的共识机制。计算所需的带宽和交易数据在侧链进行,仅定期发布交易结果到主链。每个子链都依赖于 “欺诈证明系统” 的安全性,任何人都可以质疑其有效性。
Plasma 实际上不是单指一个项目本身,而是一种框架。其有多种实现方式,本文以 Plasma MVP,一种基于 UTXO 模型的侧链为例进行介绍。Plasma MVP 的侧链采用 POA 共识算法,即参与共识的只有一个管理者(Operator)。在业务类型上该项目只支持转账,共有两种种场景,分别为:存款(Deposit)、取款/退出(Withdrawal/Exit),下面将分别进行介绍:
1. 存款(Deposit):
1)用户发起一个 Deposit 调用交易向主链 Plasma 智能合约上发送一定数额
的以太币或 ERC20 代币,交易成功执行后产生一个 DepositCreated 事件;
2)Operator 监测到该事件,生成一个仅包含一笔交易的区块。该笔交易是
由合约调用 deposit() 函数为用户创建侧链资产 Creat(DepositCreated,amount);
3)侧链上创建的交易包含两个输入 UTXO 和两个输出 UTXO,在存款(充
值)时,只有输出的第一个 UTXO 不为 0,其他值都为 0,具体如下:
4)Operator 将该区块的默尔克树根发送到主链合约中,合约会产生
BlockSubmitted 事件;
5)用户监听到该事件,验证其有效性,存款成功。
2. 取款/退出(Withdrawal/Exit):
1)用户向主链的 Plasma 合约发起 Exit 交易,其中包含一些必要参数用于明确待提现的 UTXO 位置和合法性:要取款的 UTXO 所在区块号(h)、区块内交易所在编号(Tindex)、交易中 UTXO 编号(Uindex)等标识目标 UTXO 位置的参数,以及该 UTXO 涉及到的一系列交易确认签名等信息。此外,同时还要提供一笔保证金 EXIT_BOND;
2)该交易会被放入一个优先队列中,优先级按照如下公式进行计算:
根据该公式计算优先级决定取款顺序的原因是保证在出现恶意交易时,之前的 UTXO 都可以安全退出,即旧的 UTXO 总是先于新的 UTXO 被取出;
3)Exit 交易需要等待一段挑战期才会生效,最快 7 天、最慢 14 天。
在 Exit 交易中,如果有其他用户发现申请人存在恶意行为,就会发起一个争议 challengeExit。该争议需要提供有效的 UTXO 争议对象的默克尔证明。如果该争议被验证成功,则被争议对象的交易将会从队列中删除,同时将保证金奖励给发起争议的用户。
由于 Operator 负责将区块打包给主链,所以其可以监控到侧链上的所有交易,而一旦其存在某些恶意行为将会导致严重的后果,如双花攻击等。
针对这一点,Plasma 在取款/退出期间也进行了很多设计避免了这些情况。首先是上文中提到的优先级队列,其主要目的是保证存在恶意交易时,能够保证用户的资金安全。该优先级按照上述计算公式,首先由区块的次序决定,其次是单个块中的交易次序,最后是交易中的余额,同时上述三个值就可以唯一的确定一个 UTXO 的位置。因此上述优先级计算公式可以确保旧的交易优先级高于新的交易,这意味着如果一笔不正确的交易(如:双花攻击)被加入到区块时,那么所有错误交易之前的交易都会先执行,最后再执行错误交易,这会使得双花攻击失败。
但是存在 Operator 可以故意将错误交易打包到用户交易之前的可能,针对这种情况,Plasma 的交易中其实存在两个签名。第一个是当用户发起交易时,会对交易本身进行签名,接着发送给 Operator 打包。第二个是当交易被加入到区块中时,用户会再进行一次签名,其被称为 “确认签名”。如果用户正确遵循该规则,那么在该笔交易被 Operator 打包前,用户绝不会发出确认签名,即 Operator 无法将非法交易写在用户的交易之前。
Plasma 存在的问题:
1)每个用户都必须监控和验证整个 Plasma MVP 链上的所有交易,防范恶意交易并及时退出。但是验证成本高昂,且增大了链上开销;
2)数据可用性问题:侧链的 Operator 如果仅发布区块头,而拒绝发布链下的交易数据,这将使得主链无法验证侧链的正确性。
3)用户取款/退出操作耗时很长,必须等待挑战期结束。
3.1.2 Rollup
Rollup 与 Plasma 类似都通过侧链实现对数据的交易和执行,二者不同之处在于,Plasma 将数据和计算都放到链下进行,但是该方式存在链下数据的可用性问题。针对该问题,Rollup 仅将计算(和状态存储)移到链下,但将每个交易的部分数据保存在链上。具体地说,该方案会将数百个链下交易汇总为一个批次,并在侧链上按批次执行交易,最终完成的交易 “打包” 后再按批次发布到主链上,以此提升主链的交易速度。这种将数据存放在链上的方式,允许任何人在本地进行 Rollup 中的所有操作,从而实现欺诈验证、发起提款、甚至自己打包交易等功能。
Rollup 主链上存在一个智能合约维护一个状态树的根节点,该节点数据包括:账户余额、合约代码等,但该状态树本身并不存储在合约内部,该树由侧链每隔一段时间通过数据的交易和执行结果产生,具体如下图所示:
交易的批次由一个高度压缩的交易集合,以及之前的状态根和新的状态根(执行该批次交易之后生成的新的状态根)组成。合约将检查批次中前一个状态根是否与当前的状态根匹配,如果匹配,将切换到新的状态根,具体如下:
Rollup 针对谁可以提交批次这一问题,有以下几种方案:
1)任何人都可以提交,该方式是最简单的一种方式。但是,由于存在多个参与者,如果批次交易并行发布,会导致生成证明或批次交易发布到链上的这个过程产生过多的花销。
2)中心化定序器(Centralized sequencer):目前最常用的一种方式,由一个中心化的单一定序器提交交易批次。
3)定序器拍卖(Sequencer auction):通过拍卖的方式,使得出价最高的实体有权成为定序器。
4)PoS 投票:任何人都可以将指定代币存入 Rollup 合约,接着可以从每批交易中的存款者中随机选取一位作为定序器,选取的概率与存入的代币数量成正比,该方式的缺点是会导致大量不必要的资金被锁定。
5)DPoS 投票:拍卖中选取的定序器,如果存在离线或打包恶意交易等不良操作,代币持有者可以通过投票将其踢出并举行新的拍卖重新选取定序器。
Rollup 中的一个重要问题是如何确定批次中的后状态根的正确性,因为如果提交伪造的后状态根而无需付出任何代价,那么攻击者可以伪造该数据使得自己获取到所有代币。针对该问题,Rollup 目前有两种典型的解决方案 ZK-rollups 和 Optimistic-rollups。
Optimistic-rollups 使用欺诈证明,即 Rollup 合约跟踪状态根的整个历史记录和每个批次的交易 Hash 值。如果有人发现某个批次的状态后根不正确,可以将其生成欺诈证明发布到合约中,如果合约验证通过,将恢复该批次和之后的所有批次。典型的项目有 Arbitrum、Optimism;ZK-rollups 则使用有效性证明,每个批次都包含一个 ZK-SNARK 的加密证明,其可证明后状态根是执行正确的结果。
3.2 信息交互
3.2.1 Polkadot
Polkadot 是一种支持多链的异构多链跨链平台,使得多个区块链之间可以实现去信任地交互,其架构中有三种类型的链:
第一种是中继链(Relay chain),该链位于 Polkadot 的核心,主要用于转发各平行链上产生的跨链交易,记录各平行链的交易状态,并传递交易的验证和执行结果,采取拜占庭容错算法(BFT,byzantine fault tolerance)为整个系统提供统一的共识和安全保障。该链本身不包含任何交易,只负责最顶层的跨链交易路由,DApp 均在平行链上进行开发和部署。
第二种是平行链(Parachain),其只负责具体的业务场景中的 DApp 应用开发和部署,各自并行存在,开发者可以依据特定应用场景下的问题,选择平行链底层的区块链系统。其链本身不具备区块共识,其安全性通过 Polkadot 的共享安全性模型由中继链的验证者提供。
第三种是桥接链,专门针对异构链开发设计的一个跨链结构,如当以太坊需要与 Polkadot 中继链进行交互时,以太坊数据需要首先经过以太坊底层系统中的桥接链对跨链信息进行规范化处理,才能转换为 Polkadot 网络交互需要的形式。该链具有自身的共识算法,通过不同的 Bridge 与 Polkadot 连接在一起进行交互。
其核心是通过提供一个中继链,链上以区块链的数据形式存储所有连接到中继链上的所有其他链信息,这些信息来自连接在中继链上的各个独立运行的平行链。网络中存在四种类型的参与者,包括验证人(Validator)、收集人(Collator)、钓鱼人(Fisherman)、提名人(Nominator)。下面将对其进行具体介绍:
验证人:拥有最高权限,主要负责 Polkado 网络的出块,通过运行一个中继链的客户端,在整个网络的每一轮区块产生过程中,验证各个被提名的平行链出的区块。当各个平行链的区块都被其验证人确定之后,验证人会将所有平行链区块头组装到中继链区块并进行共识出块;
收集人:帮助验证人在各个平行链收集必要的交易信息,打包并执行相关交易,然后将执行交易的结果附上一个零知识证明,提交给该平行链的验证人;
钓鱼人:不直接参与区块打包的过程,钓鱼人可以通过检举一个有质押的参与方存在的非法行为,并提供带签名的有效证明去获取奖励收益。其中非法行为包括验证人对两个有相同 父区块的不同区块进行签名,或在平行链上验证通过一个无效区块等;
提名人:是一个拥有权益的群体,验证人由提名人选举产生。提名人选择验证人之后,可以通过将自身的权益质押给验证人,从而使验证人代表其维护整个 Polkadot 网络,这种方式使得提名人和验证人可以收到相同比例的奖励和惩罚。
每个平行链有两个消息队列,一个是输出队列 engress,一个是输入队列 ingress。Polkadot 中的平行链 A 和平行链 B 之间的跨链交易过程如下:
1)A 链将跨链交易存放到自己的输出队列 engress 中;
2)A 链的 Collator 收集 A 链的普通交易和跨链交易并提交给 A 链的 Validator 集合;
3)A 链的 Validator 集合验证成功后,将本次区块头信息和 engress 内信息提交到中继链上;
4)中继链利用共识算法确认区块以及跨链交易路由后,中继链上的 Validator 会将 A 链的相应交易从 A 链的 engress 队列提交到链 B 上的 ingress 队列;
5)B 链执行区块和 ingress 队列中的交易并修改自身账本。
由于所有平行链的共识同步发生,所以跨链交易没有双花等安全性问题。
3.2.2 Cosmos
Cosmos 与 Polkadot 类似,都是通过一个中继链对跨链消息进行中转,从而创建一个异构跨链平台,但二者也存在一些不同之处。首先在 Cosmos 网络中存在两种角色包括:Hub、Zone,其中 Hub 为用于处理跨链交互的中继链,Zone 为 Cosmos 中的平行链。Cosmos 生态中有不同的 Hub 作为中心枢纽,每个中心枢纽又可以和自己的分区 Zone 连接,同时不同的 Hub 之间也可以互相连接。具体的网络架构如下:
为了支持平行链之间的跨链操作,Cosmos 提出了一种跨链交互协议 IBC(inter-blockchain communication protocol),并利用 tendermint 共识算法的即时确定性实现多个异构链之间的价值和数据传输。因此,Cosmos 中平行链需要满足如下两个前提条件:
1)快速确定性(fast finality):由共识算法保证, 即 Cosmos 的跨链不支持 PoW 等概率确定模型的区块链;
2)强监管性(sovereignty):每个平行链都具备一组验证人能够决定其出块。同时如果要连接概率链(如:以太坊),则需要额外的结构支持。
Cosmos 网络体系外的其他异构链需要通过一个 Bridge-Zone 转接层才能接入 Hub,该转接层用于中转异构链中的跨链交易,并对跨链交易信息中的数据结构进行规范化处理,具体包括:对原链交易的确认、在 Cosmos 网络中生产或销毁相应代币等。
下面以以太坊用户向 Cosmos 网络转移资产为例,介绍 Cosmos Bridge 的跨链通信流程:首先需要在以太坊上部署一个 Bridge 合约,该合约负责跨链交易的处理,包含具体的交互规则。如果用户需要向 Cosmos 网络转账时,需要先将 ETH 发送到 Bridge 合约中锁定,但是跨链交易如果失败,系统可以回退到交易前的状态。或者当 Bridge 合约监测到 Cosmos 有跨链交易将资产转移到以太坊,那么合约将自动解锁对应资产。Bridge 合约会跟踪 Zone 验证节点的状态,并且其可以和 Hub 共享一组验证者节点。当 Zone 的验证者节点接收到跨链交易时,会首先会通过 SPV 验证用户是否给 Bridge 合约发送了 ETH,验证通过将在 Bridge-Zone 生成对应的 Cosmos-ETH。同理,将 Cosmos-ETH 转移到以太坊的过程也类似,不过该过程将销毁 Cosmos-ETH,同时解锁 Bridge 合约中对应的 ETH 并转移到某账户地址中。
Cosmos 中各个网络中枢 Hub 和 Hub 所在的分区 Zone 之间的消息传递都使用 IBC 协议,当新 Zone 产生时,在线治理社区的投票会决定新 Zone 是否可以连接到 Hub 上,所以 Cosmos 也支持区块链的扩展。不同 Zone 之间的跨链消息传递如下图所示:
具体为:首先 Zone1 向 Hub 发出一笔 BlockCommit 交易,包含区块的头部信息和所有验证人的公钥;接着如果 Zone1 试图发起一笔向 Zone3 的代币转移交易,Zone1 首先验证该交易的合法性,如果有效则将该交易发送到自己的输出队列中,等待发送给 Hub,交易信息包括:交易的发起者 Zone、该笔交易在发起 Zone 中确认的高度和目标 Zone;接下来,Zone1 中的中继程序根据消息队列中的交易生成默克尔证明并作为 Packet 中的有效载荷发送到 Hub;Hub 中的验证者通过 SPV 验证对该证明进行核验,核验通过则发送消息给 Zone3,Hub 给 Zone3 发送消息的过程同上;Zone3 接收到 Hub 发送的跨链交易后,首先验证对该笔交易是否由 Zone1 发起的真实有效交易,并给 Hub 发送确认消息表明可以接收来自 Zone1 的资产;最后 Hub 给 Zone3 发送消息,将资产发送给 Zone3,完成了一笔完整的跨链交易。
综上,本文主要介绍了三种常见的跨链互操作性技术,包括公证人机制、哈希锁定、侧链/中继。下一篇文章将介绍基于以上三种跨链技术实现的跨链桥项目。
免责声明:作为区块链信息平台,本站所发布文章仅代表作者及嘉宾个人观点,与 Web3Caff 立场无关。本文内容仅用于信息分享,均不构成任何投资建议及要约,并请您遵守所在国家或地区的相关法律法规。