技术解读ZetaChain:一站式多链DAPP底层设施
作者:Howe & Faust,极客web3
前言:
ZetaChain是一条基于Cosmos SDK的POS公链,其区块中记录了“外部链”上发起的跨链消息与数据。用户可以在BTC等“外部链”上,通过类似Ordinals协议的原理,发布特定格式的消息,向ZetaChain网络传达自己的“意图”;
ZetaChain的节点通过共识的方式,确定哪些消息要被处理,以及先后次序,最终通过TSS门限签名技术,在目标链上生成数字签名,从该链的公共账户中释放资产,触发后续的交易步骤。
(目前ZetaChain的验证者节点名单,有很多项目方或机构,包括OKX、HashKey Cloud、Dora Factory等)
由于ZetaChain本身EVM兼容,支持部署合约逻辑。全链DAPP项目方可以直接在ZetaChain链上写好跨链消息的处理程序,无需在多链上部署桥接资产合约,这样可以节省开发成本;从用户端来看,理论上只需要和ZetaChain上的合约交互,而不必与源链-目标链之间的桥接合约多次交互,也可以节省手续费成本;
与一些具有“一站式资产托管链”效果的Intent项目类似,ZetaChain本身支持部署资产合约或Defi协议,用户可以在不同链上的DAPP前端生成特定消息,对ZetaChain上的Defi合约或资产状态,进行异步调用(支持BTC链上账户);
这就好像让ZetaChain直接托管了全链统一的资产账户,但要达成这种效果,需要专属的DAPP前端来配合。
目前看来,ZetaChain最主要的功能,是充当跨链、全链互操作的底层设施,既可以解析并处理特定的跨链消息,也可以作为多链DAPP的业务逻辑执行平台,主要的商业模式是典型的 B to B to C。
随着区块链行业的不断发展,我们正处于一个多链互联的时代。在这样的时代背景下,不同特性的公链衍生出了差异化的应用场景,为用户创造了多样化的体验,但与此同时,“链间孤岛”问题也显得愈发严重。不同链上的账户往往无法互通,人们的全链资产处于一种割裂而不统一的状态,这增加了使用门槛,也极大程度降低了用户体验。
可以说,异构链之间的割裂与不兼容问题,是阻碍用户转化率增长的主要原因之一。而当今BTC生态的火爆,把异构链的互操作问题进一步体现了出来。
正如 Vitalik Buterin 多年前所言:「多链是未来」。虽然多链并存已经成为大势所趋,但在异构链之间建立跨链桥,仍然是一个麻烦事。
为了解决多链互操作问题,LayerZero、Polyhedra、Map Protocol、Bool Network 乃至于 Cosmos 和 Polkadot,都曾提出不同的链间消息传递方案,而近期上线 Token 的 ZetaChain 也是全链基础设施版图中的重要一员。
下文中,我们将简要的对ZetaChain 的全链解决方案进行技术视角的阐述,说明ZetaChain 如何作为全链互操作DAPP的底层基础设施,实现跨链消息解析与处理。
现有跨链方案的问题
其实,单纯论跨链桥要解决的问题,最简单的场景是资产在不同链上的转移。你从 ETH 往 Polygon 上跨资产,要先往 ETH 链上指定的充值地址转入资产,然后在 Polygon 链上接收等量资金。
但问题在于,Polygon 的节点无法确认 ETH 链上发生了什么,不知道你是否真充值了 xx 金额。如果有人谎称,自己往 ETH 链的指定地址转了 100U,然后在 Polygon 链上发起提款声明,要求释放他的 100U,这就会出现“凭空提款问题”。
跨链桥的关键在于,解决此处的“凭空提款问题”,即确认所有的提款声明都对应着真实的充值行为,本质而言,是设法在 B 链上证明,A 链上的确发生了 N 笔与跨链桥相关的交易。
目前主流的跨链桥都倾向于采用公证人机制,就是设置一批公证人节点,通过多签或者 MPC 签名来“共识”,只要多数公证人认为你的跨链行为可以被批准,你的资产就可以顺利跨走。
也有一些跨链桥采取更安全的哈希锁,或是用链上合约实现其他链的轻节点,通过接收 merkle proof 或 zk proof,来确认跨链行为有效性,但这种跨链桥的成本往往比较高,最终会转嫁到用户手续费上。所以,多数跨链桥还是选择了链下公证人节点走多签的模式。
参考资料:白话科普:设计跨链桥时都要考虑哪些事?。
基于公证人的跨链桥往往面临着巨大风险:易遭黑客攻击,或监守自盗,据 SlowMist Hacked 统计,2022 年跨链桥安全事件共 16 起,损失达 12.1 亿美元,占当年链上攻击事件损失总额的 32%,由此可见跨链桥安全漏洞的危害。
同时,现有的跨链桥方案大多选择 Lock-Mint 模式,即在 A 链上锁定资产,在 B 链上增发相应的映射资产,从而实现资产跨链。但这类方案的充提款处理流程中,需要与映射资产合约进行多次交互,手续费摩擦较大,存在资金损耗问题。
此外,不少跨链桥方案只支持 EVM 兼容链间的资产转移,在异构链如Solana、Bitcoin 的跨链行为往往受制于彼此的技术标准不同,开发难度较大。
综合安全与手续费问题,目前主流的跨链桥方案往往无法取得太好的效果,更无法保证资产的“原生跨链”。而在如今的比特币生态中,越来越多的人渴望实现原生、无缝的跨链交互体验,期待找到一种更优的方案。ZetaChain 对此提出了自己的一套解决方案。
ZetaChain的功能:全链互操作DAPP的底层基础设施
ZetaChain的自我定位是全链互操作型DAPP的基础设施,专门支持各种全链交互类的应用协议,是一种典型的B To B To C底层基础设施。它通过 PoS 准入机制,允许任何质押资产的节点进入网络之中,充当公证人。全体 PoS 节点通过 TSS 门限签名技术,参与到跨链消息的验证与处理中,尽可能提升安全性。
同时,ZetaChain上可以部署智能合约,添加与资产互换相关的业务逻辑,用户可以在任何一条链上发送特定格式的消息,调用 ZetaChain 或其支持的多链上的Defi合约,在BTC链上就可以间接调用 Polygon 上的 DeFi 功能。这样达到的效果是:在不同的区块链之间进行消息传递,实现互操作。
基于全链互操作场景的DAPP可以在ZetaChain上部署资产互换的业务逻辑,帮用户自动兑换不同链上的gas代币。
比如,你可以通过某些全链DAPP的前端,在BTC上通过类似Ordinals协议的数据发布方式,发出一条特定格式的消息,指明要调用Solana上的XX合约,这条消息会被ZetaChain节点监测到。
之后,ZetaChain上的AMM合约可以自动计算BTC和SOL的兑换比例,然后在Solana链上释放等量的SOL,完成后续的调用合约等复杂操作,最后再把你应得的资产,转回到你的BTC地址或Solana地址,这便是所谓的“全链互操作”,你只需要在一条链上发布消息,就可以远程调用多条链上的DAPP,当然这中间涉及到好几条异步消息的发布与触发过程。
在此,我们可以将 ZetaChain 理解为一个“链中链结算层”,所有的多链交互场景,比如A链上发起调用B链的某DAPP,相当于A链先和 ZetaChain 进行“结算”,然后 ZetaChain将预处理的结算结果,同步到B链的相应账户,再完成后续的步骤。
整个过程中不存在与映射资产合约的过度交互及手续费摩擦,资产流通经由ZetaChain在不同链上的公共账户来完成,这样就不需要像传统跨链应用那样,频繁的在不同链上部署映射资产合约。
目前看来,基于ZetaChain的全链应用可以省去不少麻烦事,至少不需要在不同链上费尽心力的设计映射资产合约了,所有关于源链-目标链之间资产进入-进出的细节,都由ZetaChain“承包”。换句话说,就是你只需要在ZetaChain上部署和跨链交易相关的业务逻辑就可以。
这样便于不同的全链应用在前端支持Solana、Algorand、Bitcoin 和 DogeCoin 等非 EVM 链,不需要费尽心力的在不同链上实现跨链应用专属合约。
此外,ZetaChain 本身也支持部署资产合约或AA账户,不同链上的用户可以发送特定格式的消息来调用,就好像在操作一个全链统一的账户一般,这种设计思路在 Particle Network 的 Particle chain 上也有体现,最终达成的效果是:
用户可以尽量把资产的数据记录,集中在ZetaChain或Particle Chain一条链上,在必要时,通过“外部链”上的DAPP前端发送调用消息,异步调用自己在ZetaChain上的资产合约,然后ZetaChain会通过外部链上公共账户,转移一定的资产至用户消息指定的地址,或是与用户指定的Defi协议进行交互。
当然,这一系列操作需要专门的前端DAPP来实现,也就是说,ZetaChain本身只提供全链底层设施的服务,而在应用端需要有专门的前端入口来生成特殊格式的消息。
ZetaChain的安全模型:基于POS质押的大号公证人节点网络
归根结底,ZetaChain本质上是一个专为跨链消息处理,而设置的公证人节点网络,它建立在 Cosmos SDK 基础上,由很多台 Validator 验证节点组成,并以POS作为准入机制,以此实现节点反女巫和底层安全。
Validator 节点们在 ZetaChain 网络中,作为去中心化的公证人存在,他们会确认其他链上触发了哪些待处理的跨链请求,并通过共识,对这些跨链行为做记录,进行后续步骤。通过TSS分布式密钥签名,ZetaChain可以在其他链上生成交易指令。
可以说,Validator 做的事情,与公证人模式下的跨链桥有部分类似,但通过POS质押,公证人节点更去信任,以解决女巫问题。
(目前Zetachain的验证者节点名单,有很多项目方或机构)
Zetachian的Validator 客户端中包含 ZetaCore 和 ZetaClient 两个模块。ZetaCore模块参与ZetaChain区块的产生和共识过程,ZetaClient 模块则观察外部链上的事件,并签署出站交易。
这里的出站,可以简单理解成,将 ZetaChain 上的交易日志记录,发送到“外部链”(就是指ZetaChain外的其他链),从而在目标链上触发对应行为,发送的内容主要包含用户在消息中声明要调用的合约地址、链ID、消息内容,其实就类似于 Ethereum 交易中的 Log 部分。
反之,入站则可以理解成,将ZetaChain外的外部链上相关消息/交易,如跨链请求、调用 zEVM 上的智能合约等内容,记录到 ZetaChain 上。
这里需要注意,实际运行 ZetaChain 的 Validator 节点时,客户端代码包含验证者、观察者、TSS 签名者 三个模块。这三个模块负责的职能有所不同,但同属于ZetaChain客户端中。
观察者和TSS签名者模块
首先,所有的 ZetaChain 节点都具备“验证者”的模块,与 PoS 公链中 Validator 节点的职能基本一致,要参与出块和共识流程。此外,节点可以按质押的代币(ZETA)比例,投票参与链上提案。ZetaChain 的区块中,则包含了处理的所有跨链记录、全链智能合约交互等行为,相当于日志记录。
而ZetaChain客户端中的“观察者”模块,会通过运行其他公链的全节点/轻节点,监测特定格式的跨链交易/消息。观察者模块可以分为两种模式:主动模式和被动模式。
不同的ZetaChain节点可以做出选择,将观察者模块切换到两种模式中的一个。观察者模块会持续监控,其他链上是否有ZetaChain相关的跨链消息/事件,如果有,ZetaChain节点的观察者模块会向验证者模块汇报情况。这些观测到的跨链消息,会被提交到ZetaChain的区块里,通过共识的方式进行全体确认。
观察者模块有两种模式:主动模式和被动模式。主动模式下,节点会不断扫描 ZetaChain 外的区块链上的交易/事件/状态,运行其他链的fullnode;而被动模式下,节点不同步其他区块链的完整block,被动的从其他ZetaChain节点处,接收解析后的跨链消息。
不过,被动模式下的节点,虽然不同步完整的外部链区块,但是会同步区块头,并通过Merkle 证明确定外部链上真的存在这些跨链消息/交易数据。
主动模式的优点是,大多数ZetaChain节点都会同步外部链上的数据,此时的抗审查性最强,任何用户要和ZetaChain产生交互,只要有节点监测到,你在外部链上发起请求即可。
但主动模式下,运行节点的成本较高,除了要运行ZetaChain自身的节点客户端,还要运行外部链的全节点,时刻同步数据并进行扫描。而被动模式下,普通观察者节点的运行成本低得多,只有特定节点去运行外部链的全节点客户端,其他节点只运行外部链的轻客户端,不需要同步外部链的完整区块。
这样一来,被动模式下的费用更便宜,也更容易扩展节点数量,方便对接多条外部链。但被动模式的缺点是,外部链上的数据观察活性,取决于少数节点,抗审查性差。
为了缓解这种情况,ZetaChain 会激励节点运行主动模式的观察者模块。
(主动模式下,节点还需要运行外部链的全节点客户端;被动模式下,只运行外部链的轻客户端,从主动模式的ZetaChain节点那里,接收 跨链消息+merkle proof,确认消息的有效性)
TSS 签名
所有被ZetaChain节点观察到并验证过的跨链消息,最终会在目标链上通过ZetaChain的公共账户地址,触发一笔交易行为,进而执行后续的操作。而这个过程中,需要在目标链上为该笔跨链交易生成数字签名。
为了保证安全与去信任,签名的生成由 ZetaChain 所有节点承担,共同存储用于生成签名的密钥片段。这些密钥片段分布在多个签名者之间,只有绝大多数签名者都签名了,才能在外部链上,生成交易的数字签名。任何时候,单个实体或一小部分节点,都无法代表 ZetaChain 在外部链上触发交易/签署消息
(ZetaChain的跨链模型下,只需要在不同的链上拥有一个公共账户地址,而不必部署复杂的智能合约)
ZetaChain的多签算法,采用TSS,全称为 Threshold Signature Scheme 门限签名方案。对于外界来说,我们能看到的交易数字签名,虽然只对应着一个私钥、公钥和地址,但实际上,这个私钥是由很多道片段,在没有中间人的情况下生成的,这些片段分布在所有ZetaChain节点设备本地。任何时候,单个实体或少数验证者都无法代表网络整体去拼凑私钥片段并签署消息。
TSS的密钥生成和签名过程,通过多方计算(MPC)的方式完成,不会泄露任何参与节点的秘密。ZetaChain的节点可以生成不同链上的交易签名,在兼容各 EVM 链的基础上,为比特币/非智能合约链的账户,添加了远程调用智能合约的功能,直观体验就好比BTC用户可以直接调用某些defi功能。
这种场景其实格外适合搭载BTC生态的多链Defi应用,因为BTC链上无法实现太复杂的业务逻辑,只能依赖于外部设施远程调用某些Defi合约。而ZetaChain的这些特性,正适合BTC生态内的用户通过异步调用的方式,
zEVM:一站式的全链DAPP合约平台
不同于传统跨链方案要在每条链上部署映射资产合约,ZetaChain 可以仅在自家链上部署一次智能合约,即实现多链的跨链功能。在 ZetaChain 中,有一个EVM兼容的执行层,称为 zEVM,而跨链智能合约可以直接部署在 zEVM 上。
zEVM支持以下功能:
任何人可以在外部链上发送特定格式的交易数据,调用 zEVM 上的某个合约;
zEVM 上的合约逻辑,可以控制在外部链上生成的出站交易数据。
这两个附加功能使得 zEVM 支持通用编程,可部署特定的业务逻辑,原子性地对不同链上的状态进行修改。如果一笔跨链操作发生了,ZetaChain检测到这笔跨链行为的后续步骤,在目标链上没有成功,则可以回滚掉该笔跨链交易在ZetaChain合约里修改的数据,就好像什么都没发生。
同时,全链应用DAPP无需在不同的链上部署映射资产合约,只需要通过ZetaChain链上的合约,就可以一站式的将消息跨链的处理逻辑集中设置,无需频繁的将跨链合约部署到多链网络中。
这样可以大幅度节省全链DAPP开发成本。在用户层面,因为不需要频繁的与多链上的映射资产合约产生交互,成本要比那些需要在不同链上部署映射资产合约的主流跨链桥更低。
此外,ZetaChain上也可以部署专门的Defi合约和ZRC-20乃至NFT资产,对资产状态进行数据同步,或是部署AA账户。这使其具备了统一的资产管理(状态记录)平台功能。因为我们不再需要费尽心力的在多链上拥有资产,这种全链统一资产账户的场景,可以在未来赋予更多的想象力。
总结
通过前面的内容,我们或多或少对 ZetaChain的“全链互操作基础设施”身份有了更多了解。其通过 Validator客户端中的观察者模块,监测外部链的特定消息/交易,并汇报给验证者模块,最终在ZetaChain网络中对消息进行共识。再对消息包含的数据进行解析,用TSS生成数字签名,在对应的目标链上触发后续的交易流程,从而实现全链上的交互。
与此同时,基于ZetaChain的全链智能合约,使得我们可以与不同区块链进行贴近原生的交互,无需在不同的链上使用映射资产合约,这可以避免调用冗余的合约逻辑,节约了手续费成本。
同时,由于ZetaChain本身EVM兼容,可以让任何DAPP开发者甚至个人用户,部署定制化的跨链消息处理逻辑,理论上可以一站式的部署全链DAPP合约,跨链应用开发者不需要在不同的链上频繁部署/更新映射资产合约逻辑,免去了重复造轮子的成本。