随着公链和layer2链的数量越来越多,资产和Dapp的跨链需求也开始增多,跨链桥自然是一种比较常见的解决方案,但以Zetachain为代表的Omnichain走出了一条完全不同的道路,本文将以Zetachain为例,解释Omminchain是如何把跨链规则写入智能合约从而实现跨链互操作的去中心化的。
几种跨链技术方案
跨链(Cross-Chain)技术的核心目标是实现不同区块链之间的互操作性(Interoperability)。互操作性是指不同的区块链系统能够相互理解和使用对方的资产(如代币、加密货币等)和数据,或者在不同的区块链平台上运行的应用能够相互交互和协作。这一目标的实现,可以极大地增强区块链生态系统的灵活性和扩展性,打破不同区块链平台之间的孤岛效应,从而促进更加广泛的应用和发展。
根据跨链消息的处理方式以及相应资产的签名授权方式的不同,可以分为以下几个技术方案:
1. 跨链桥(Cross-Chain Bridges):
跨链桥是一种使资产能够从一个区块链转移到另一个区块链的技术。它通过锁定在源链上的资产,并在目标链上发行相应的代表性资产(或等价资产)来实现这一过程。这种方式支持资产的跨链转移和使用,但需要确保资产的锁定和释放过程安全可靠。当两个独立的链采用桥接方式产生互操作时,我们说其中的一条链是另一条主链的侧链。
2. 公证(Notary):
公证方案依赖于一组被信任的节点(或机构)来验证跨链交易的有效性。这些公证节点监听发生在一个链上的事件,并在另一个链上创建相应的事务来验证和记录这些事件。尽管这种方法可以实现跨链互操作,但它的安全性和去中心化程度在很大程度上取决于公证节点的可信度。
3. 哈希时间锁定协议(Hash Timelock Contracts, HTLCs):
HTLCs 是一种基于时间锁定的智能合约技术,允许两个参与方在没有第三方的情况下安全地进行跨链交换。这是通过创建一个需要正确的密码才能解锁资金的合约来实现的。只有当参与双方都履行了合约要求时,资金才会被解锁并交付给对方。这种方法支持去中心化的资产交换,但对参与方的协作有一定要求。
4. BoB(Blockchain on Blockchain,例如 Cosmos 的 IBC):
这种技术方案通过在现有区块链上创建新的区块链(或层)来实现跨链互操作性,例如 Cosmos 网络中的 IBC(Inter-Blockchain Communication)协议。IBC 允许不同的区块链保持独立的治理结构,同时实现资产和数据的安全传输。这种方法旨在建立一个去中心化的区块链互联网,其中各个链可以自由地交换信息和值。
这些技术方案各有优缺点,适用于不同的场景和需求。跨链技术的选择和实施需考虑目标区块链的特性、安全性要求、去中心化程度以及实现的复杂性等因素。
跨链消息传递
跨链消息传递(Cross-Chain Message Passing, CCMP)是实现跨链互操作性的核心技术,确保了跨链交互的流程可以安全、有效地进行,其基本目的是在不同区块链间传递和验证消息,从而实现资产和数据的跨链交互。其工作原理主要包括以下几个关键环节:
1. 消息的生成与发送:
- 消息通常包含有关资产转移的所有必要信息,如资产数量、源地址、目的地址等。
- 消息生成后,通过源链的智能合约发出,这个合约会记录交易细节并触发资产的锁定。
2. 消息的传递:
- 传递方式通常有两种:直接传递和中继传递。
- 直接传递意味着源链和目标链之间有直接的通信路径,但这在实际中很少见,因为大多数区块链都是独立运作的。
- 中继传递涉及到中继者(可以是中心化的服务提供者,也可以是去中心化的节点网络),它们监听源链上的特定事件,捕捉相关信息,并将这些信息传递到目标链。
3. 消息的验证:
- 在目标链上,接收到的消息需要经过验证以确认其合法性和完整性。
- 验证过程通常需要源链的数据证明(如Merkle证明),这些证明可以证实消息确实来自源链,并且没有被篡改。
- 一旦验证通过,目标链上的智能合约会根据消息内容执行相应的操作,如铸造代币或更新状态。
4. 处理和响应:
- 完成验证后,目标链会进行必要的操作处理,如资产的释放或创建新的代币实例。
- 这一步骤完成后,跨链交互基本完成,用户可以在目标链上使用或管理他们的资产。
所以从本质来说,前面提到的几个跨链技术方案正是因为它们采用了不同的消息传递方式造成的。
1. 跨链桥
跨链桥通过创建一个中介层来促成资产和信息在不同区块链间的转移。这个中介层可以是:
- 中心化的服务器,由可信实体控制,负责监听一条链上的事件并在另一条链上复制这些事件。
- 去中心化网络,由多个独立运营的节点组成,这些节点通过共识机制来验证和转发消息。
在跨链桥中,通常涉及资产在源链的锁定和在目标链上对等资产的铸造。这个过程需要确保消息在被验证和执行之前不被篡改。
2. 公证人
公证方案通常依赖于一组预先选定的公证人(可以是个人、组织或自动化的节点),这些公证人负责监听一条链上的事件并在另一条链上验证和确认这些事件。公证人提供了一种中心化或半中心化的验证机制,这种机制的安全性和信任程度高度依赖于公证人的可信度。
3. 哈希时间锁定合约(HTLC)
HTLC是一种依赖加密技术的合约,用于两个链间的条件性资产交换。它使用密码学哈希函数和时间锁来控制资产的释放条件:
- 密码哈希:只有当接收方提供正确的预图像(对应于哈希的原始数据)时,资产才能从合约中释放。
- 时间锁:如果在规定时间内没有提供正确的预图像,资产将返回给原始持有者。
这种方式不依赖于中心化的验证,而是通过合约本身保障资产的安全交换。
4. BoB
这种技术通过在一个跨链通信协议的基础上创建新的链或子链。例如,Cosmos通过IBC协议实现了不同区块链之间的直接通信,每条链保持其自治性的同时,可以安全地交换消息和资产。IBC和XCMP的本质其实是跨链通信协议。
同时CCMP技术也面临几个主要的挑战:
安全性:中继节点或网络必须是可信的,否则存在消息被篡改的风险。此外,源链和目标链的智能合约也需设计得足够安全,以防止潜在的漏洞。
效率与延迟:跨链操作通常涉及多个区块确认,可能导致显著的时间延迟。
去中心化与信任问题:依赖中继节点或第三方服务可能与区块链的去中心化精神相悖,因此设计去中心化而又安全的CCMP机制是一个技术挑战。
由于这些技术和安全上的挑战,CCMP的实现和优化是跨链技术研究和发展中的一个活跃领域。各种解决方案试图在去中心化、安全性和效率之间找到最佳平衡。
跨链资产的签名和授权
跨链技术和跨链互操作性不仅依赖于跨链消息传递(CCMP),还涉及到如何在源链和目标链上进行有效的签名和授权,以确保资产的安全处理和交易的合法性。不同的跨链技术方案采用了不同的签名和授权机制,这些机制核心在于如何验证和执行交易的合法性,以及确保资产的安全转移。下面是一些常见的跨链技术方案中关于签名授权的实现:
1. 跨链桥
跨链桥可能采用多签名(Multisignature)或代理签名(Proxy Signature)的方法来处理签名和授权。在这种方案中,转移资产的操作需要得到一定数量的验证节点或者特定的代理服务的授权,这些节点或服务承担验证交易请求的责任并对交易进行签名。这种方式可以增加安全性,但也引入了信任的问题,因为它依赖于被授权的中心化或半中心化实体。
2. 公证人
在公证人系统中,公证人或公证节点集合通常负责监听并验证跨链交易请求,并在目标链上执行相应的操作。公证人需要在目标链上对操作进行签名授权,证明源链上的交易是被允许的。这种方式依赖于公证人的信任度和安全性。
3. 哈希时间锁定合约(HTLC)
在HTLC中,签名授权并不依赖于外部的验证者或中介。相反,交易的合法性和执行依赖于合约逻辑和参与者之间的直接互动。参与方提供正确的预图像(即密钥)作为解锁合约的方式,这本身就是一种授权。此外,合约本身具备时间锁定机制,保证只有在特定时间窗口内提供正确的预图像才能完成交易。
4. BoB
例如,Cosmos的IBC协议中,签名授权过程通过链间协议和本地合约执行。每个链独立管理自己的安全性和授权机制,同时通过协议确保跨链消息的安全性和有效性。这种方案强调了去中心化和自治,减少了对单一实体的依赖。
总之,签名授权机制在不同的跨链技术方案中根据其结构和安全需求有所不同。这些机制的选择和设计关键在于如何平衡安全性、信任、去中心化和效率。在实施跨链技术时,确保所有参与链的合法性和安全性是必不可少的。
Zetachain的架构
如果说DeFi是把金融规则写入智能合约,链上游戏是把游戏规则写入智能合约,那么Omnichain其实就是把跨链规则写入到智能合约里面,这里面包括了跨链消息传输规则和资产的签名授权规则,让我们深入细节来看看Zetachain是如何做到的。
ZetaChain 是一款基于 Cosmos SDK 和 Tendermint PBFT 共识引擎构建的PoS区块链。由于使用了 Tendermint PBFT 共识引擎,ZetaChain 能够实现大约5秒的快速区块生成时间和即时的最终确定性(无需区块确认,不允许重组)。在理想的网络条件下,其交易吞吐量可以达到每秒4000+交易,但跨链交易的吞吐量可能因为外部链的延迟和各种其他因素(如外部节点RPC速度等)而无法达到这一水平。
ZetaChain 的架构包含了一个由节点组成的分布式网络,这些节点通常被称为验证者(validators)。ZetaChain 的每个验证者内部都包含 ZetaCore 和 ZetaClient。ZetaCore 负责产生区块链和维护复制的状态机,而 ZetaClient 负责观察外部链上的事件并签名外发交易。ZetaCore 和 ZetaClient 被打包在一起,由节点运营者运行。任何人只要质押足够的ZETA代币就可以成为节点运营者,参与验证工作。
所以说,如果ZetaChain的验证者只运行ZetaCore组件,它就变成排序者(sequencer),如果只运行ZetaClinet组件并且只负责观察外部链上事件的话,它就变成观察者(observers),如果同样只运行ZetaClinet组件且只负责签名外发交易,它就是签名者(signers)。
ZetaChain 还集体持有标准的 ECDSA/EdDSA 密钥,用于与外部链进行认证互动。这些密钥分散在多个签名者(signers)中,只有超级多数签名者能够代表 ZetaChain 对外签名。ZetaChain 使用绑定的质押和正/负激励机制来确保经济安全。
Zetachain的两种跨链互操作机制
Zetachain支持两种跨链互操作机制,一种就是传统的跨链桥机制,另一种则是Omnichain智能合约机制。
跨链桥机制
我们首先来看跨链桥机制的工作流程,整个过程主要涉及以下几个步骤:
1. 用户与合约交互:用户在链 A 的合约 C1 上进行操作,留下一个事件或交易备忘录,其中包含用户指定的 [chainID, contractAddress, message]。这个消息是以二进制格式编码的应用数据。
2. 观察者捕获事件:ZetaChain 的观察者(在 zetaclient 中)捕捉到这个事件或备忘录,并将其报告给 zetacore,后者负责验证入站交易。
3. 构建出站交易:zetacore 修改 CCTX(跨链交易)状态变量以及 OutboundTxParams,指导 TSS 签名者(在 zetaclient 中)构建、签名并广播外部交易。
4. 签名和广播:zetaclient 的 TSS 签名者根据 CCTX 中的 OutboundTxParams 构建出站交易,进行 TSS 密钥签名仪式,然后将签名后的交易广播到外部区块链。
5. 更新和追踪状态:CCTX 结构还跟踪跨链交易的各个阶段/状态。
6. 交易确认:一旦广播的交易在某个区块链上被包含(即“挖矿”或“确认”),zetaclient 会将此确认情况报告给 zetacore,随后更新 CCTX 状态。
7. 处理成功与失败:
- 如果外部交易成功,CCTX 状态变为 OutboundMined,CCTX 处理完成,进入终端状态。
- 如果外部交易失败(例如在以太坊链上被撤销),CCTX 状态更新为 PendingRevert(如果可能)或 Aborted(如果撤销不可能)。如果进入 Aborted 状态,则 CCTX 处理完成。
8. 处理撤销:
- 如果新状态为 “PendingRevert”,CCTX 中应已经包含第二个 OutboundTxParams,指导 zetaclients 创建一个返回到入站链和合约的“Revert”出站交易,允许入站合约实现应用级别的撤销功能以清理合约状态。
- zetaclients 构建撤销交易,进行 TSS 密钥签名仪式,并将交易广播回入站区块链(本例中的链 A)。
9. 撤销确认:
- 一旦撤销交易在链 A 上“确认”,zetaclients 将交易状态报告给 zetacore。
- 如果撤销交易成功,CCTX 状态变为 Reverted,并完成处理。
- 如果撤销交易失败,CCTX 状态变为 Aborted,并完成处理。
通过上述步骤,我们可以看到,跨链消息的传递主要是通过ZetaCore和ZetaClient的内部通信完成,是偏中心化的方式,也并未使用Zetachain本身的智能合约,只是用到了目标链的智能合约,在这种情况下,只有目标链是类似于以太坊这样的智能合约平台才可以实现,并且每一个链都要部署至少一个合约来达到跨链互操作性。如果是比特币这样的非智能合约平台就无法使用。另一个,应用状态和逻辑以分布式的方式分散在所有这些应用合约中。在不同链之间同步状态和通信变得昂贵、缓慢,并且复杂化了回滚处理。为了解决上述问题,Zetachain引入了Omnichain智能合约机制。
Omnichain 智能合约机制
Omnichain 智能合约是 ZetaChain 提出的一种简化跨链互操作性处理的方法。它主要通过以下步骤来处理跨链消息和实现跨链互操作:
1. 资产的接收:用户将本地资产(如 ERC20 代币)发送到链 A 的 TSS 地址,同时附上一条消息指定[zEVMContractAddress, message]。这里的 TSS 地址可能是一个专门为了托管ERC20代币而设的合约。
2. 观察和报告:ZetaChain 的观察者(zetaclients)监测到这笔即将进行的跨链调用,并向 zetacore 报告。
3. 调用和执行:zetacore 调用 SystemContract 的 `depositAndCall()` 函数,该函数再调用指定的 zEVMContractAddress 的 `onCrossChainCall()` 函数。这个调用过程中:
- `zrc20` 参数将被填充为管理用户在第一步中发送的外来代币的 ZRC20 合约地址。
- `amount` 参数将被填充为用户发送的代币数量。
- `message` 参数将是用户在交易备忘录中发送的消息。
4. 合约逻辑的执行:omnichain 智能合约通过 `zContract(zEVMContractAddress).onCrossChainCall(zrc20, amount, message)` 的方式被调用。应用合约应在 `onCrossChainCall()` 函数中实现其业务逻辑。
5. 处理合约执行结果:
- 如果合约执行成功且没有外部资产输出,此次 omnichain 智能合约互动完成。
- 如果 zEVM 合约执行失败(发生回滚),则会创建一个 CCTX 以撤销入站交易,即将相同数量的外来代币退回给用户(扣除可能的费用)。
- 如果 `onCrossChainCall()` 有输出(例如,它触发了一些 ZRC20 的提款操作),则会创建另一个 CCTX 来指导和跟踪将外来资产转移到外部链上用户指定的地址。这些提款通常是简单的代币转移。
Omnichain 智能合约的显著特点是:
- 它只部署在 zEVM 上,所有逻辑和状态集中在一个地方,使得应用的开发和维护更为简单。
- 它不需要在外部链上部署应用智能合约,因此能够支持如比特币这样的非智能合约链。
- 由于所有的撤销操作都由 ZetaChain 协议处理,应用合约无需处理撤销逻辑。
一句话来描述的话,就是除了少量必要信息是ZetaCore和ZetaClient之间的内部通信外,其他跨链信息的处理规则都写入了Zetachain本身的智能合约里面。只要用户向目标链的指定地址发送一笔带有附加消息的转账,即可触发Zetachain本身智能合约里面的跨链操作。
更复杂的dApp可能更喜欢Omnichain智能合约,因为逻辑和状态在一个地方,而在传统消息传递中,则必须在不同链上广播消息和状态同步,这可能会导致更多的攻击面和更多的Gas 费用(每个消息都需要支付额外的Gas,需要发送的消息数量会增加以保持完全状态同步)。换句话说,对于开发人员来说,Omnichain智能合约的行为就好像所有资产都在一个 链上(见下图)。
Zetachain的签名授权机制
ZetaChain 的签名授权机制依赖于先进的多方门限签名方案(Threshold Signature Scheme, TSS),这种方案能有效地解决单点故障问题,增强整个系统的安全性。
1. 门限签名方案:ZetaChain 使用基于多方计算(Multi-Party Computation, MPC)的 TSS,这种方案允许多个验证者(validators)共同管理一个单一的 ECDSA/EdDSA 私钥,但又不会让任何单一实体或少数验证者完全掌握私钥。这种方式可以提供热钱包的便捷性和冷钱包级别的安全性。
2. 密钥生成与分发:在 ZetaChain 中,私钥是通过无需信任中介的方式生成的,并在所有验证者之间分发。这意味着没有任何单个验证者或外部行为者在任何时候都能访问完整的私钥,从而确保了系统的安全性。
3. 签名过程:ZetaChain 采用的 TSS 是无领导的,即它通过分布式方式进行密钥生成和签名,这样可以保证在密钥生成或签名过程中不泄露任何私密信息。为了提高效率,ZetaChain 还采用了批量签名和并行签名技术,以提高签名者的吞吐量。
4. 智能合约与资产管理:由于拥有 TSS 密钥和地址,ZetaChain 能够在连接的链上管理本地金库/资金池,包括比特币等非智能合约链。这实际上为比特币网络等添加了智能合约功能,使得用户可以把资产汇集在一起,让智能合约根据预设规则管理这些资产,如自动化市场做市商(AMM)池或借贷池等。
5. 支持非智能合约链:TSS 使得 ZetaChain 能够支持如比特币、狗狗币这样的非智能合约链,以及验证多重签名成本高昂的智能合约平台。
通过这种签名授权机制,ZetaChain 不仅能提供强大的跨链功能,还能确保交易的安全性和验证的去中心化,使其成为支持广泛数字资产管理和操作的强有力平台。