为什么我们需要跨链?
在可预见的未来,平行链将颠覆所有现有的区块链技术。
平行链不仅具有 Layer1区块链和智能合约的自主性、内生安全性和专业性等优势,它还具备以太坊Layer2目前不具备的互操作性。
什么是互操作性?Parity 核心开发者 Tomasz Drwięga 在Polkadot首届社区会Polkadot Decoded上的分享可以帮助我们更好理解:
假如你提交了一份航班延误保险的赔付申请,在正式赔付前,保险公司会从航空公司获取航班是否延误的数据,并从机场获取数据验证你是否准时去了机场。若符合以上两个条件,保险公司才会将赔付资金打入你的银行账户。
该场景中,保险公司对数据的调用充分展示了互操作性的特点。
目前,平行链已自行发展出多种类别,比如:有币平行链、无币平行链、垂直于某一领域的平行链、服务于某一社区的枢纽链……
以平行链为例,使用Polkadot/Kusama的跨链技术,我们可以实现什么样的用例?
首先,我们不妨假设目前有两个最常使用的区块链协议及业务:
Acala Network 是一个去中心化开放式金融协议。Acala具备跨链多资产抵押的稳定币 Honzon 协议、释放 Staking 资产流动性的Homa 协议以及去中心化交易所等DeFi模块 Phala Network 是一个区块链隐私协议。Phala通过可信计算技术+区块链,实现了图灵完备的隐私合约,既保证智能合约可靠执行,又不必泄露敏感数据。 让Acala上的资产、DeFi合约使用Phala的隐私能力 让Phala上的隐私资产从Acala获取
在此条件下,我们想:
显然,在任何非Polkadot/Kusama协议下,不管是Acala还是Phala,都要耗费巨大的开发者资源和精力,但是,若我们采用Polkadot/Kusama的跨链协议,不用改动一行代码,就能实现这样的用例!
跨链用例展示
Demo Video:https://www.odaily.com/video/3151 Github:https://github.com/Phala-Network/phala-blockchain/tree/rococo
如何实现跨链交互?
XCMP 队列必须首先通过打开两个平行链之间的通道来启动。通道由发送方和接收方的平行链辨识,这意味着它是一个单向通道。一对平行链之间最多可以有两个通道,一个用于向另一个链发送消息,另一个用于接收消息。
XCMP协议可以细分为:
VMP:平行链-中继链通信 HRMP:平行链-中继链-平行链中转通信 XCMP:平行链-平行链直接通信
目前Rococo v0上实现了VMP与HRMP,但Rococo v1还在开发中,因此我们在v0上实现了Phala-Acala之间的跨链用例。
Architecture
如上图所述,基于Polkadot XCM的Acala-Phala跨链实现由三部分组成:链:Rococo中继链、两个平行链:Acala、Phala 跨链操作:Acala-中继链和Phala-中继链的消息传递,实现了Acala转账到暗钱包内部,以及暗钱包(Private Wallet)内部到Acala 隐私黑箱:Phala上的隐私交易一切发生在TEE内运行的保密合约,所有加密数据状态对外不可见,从而实现了隐私效果
从Acala向Phala发起一笔转账
在Polkadot的世界中,除了个人控制的账号以外,还有“主权账号”的概念。例如,一个Substrate上的Pallet模块(或一个智能合约)就可以持有一定的资产。而当一个平行链接入了Polkadot之后,它也可以在其他平行链上获得自己的账号。主权账号由对应的平行链控制。每个平行链都有唯一的ID,会被映射成它对应的主权账号。
当Alice在Acala向Phala发起一笔转账交易时,例如从转出1000 ACA到Phala的Bob账户,背后发生了这些事件:
首先在Acala链上,会从Alice账户里取出(Withdraw) 1000 ACA,存入(Deposit) Phala的主权账号 Acala链会发起一个XCMP转账消息,表示在Acala上已经发起了到Phala下Bob账号的跨链转账,并把消息发送给中继链,这是一个VMP UpwardMessage 中继链收到消息后,会根据平行链ID解析出消息的接收方是Phala,它就会把消息向Phala转发,这是一个VMP DownwardMessage
HRMP 是 Rococo v0 已经支持的一种简单跨链消息传递方式,它的原理是 A 链发起 UpwardMessage 给中继链,再由中继链发起 DownwardMessage,把消息中转给 B 链。因此,HRMP 是由两个 VMP 组合实现的。
Phala 暗钱包接受转账并转换为隐私币
Phala与其他链有一个很大的不同。通常一个平行链会采用波卡提供的标准实现来接受外部转账,并为用户结算。但 Phala 作为一个通用的隐私保护层,主链对应用保持中立是十分重要的,因此 Phala 主链不对跨链转账做任何处理与结算,而直接中转到保密合约之中。
在Phala端,跨链转帐消息由主链接受后,直接路由至TEE中的暗钱包(Private Wallet)合约。当保密合约接收到消息后,就会为账户 Bob 增加 1000 ACA。
保密合约中的转账都是端到端加密的。虽然在外部可以看到 Bob 收到了 1000 ACA,但他可以发起隐私转账,再次转账给 Charlie,作为暗资产,Bob 所有的后续交易在链上都不可见,也无法追踪,从而保证了隐私性。
因此在Demo中,我们演示了两个暗钱包之间的隐私交易(Shielded Transction)。该隐私交易是端到端加密的,在链上只能看到密文,因此该交易的细节(如发送地址、接受地址、金额数量)在链上不可见。
从Phala向Acala发起一笔转账
最后,通过 Phala 的暗钱包可以向 Acala 发起一笔跨链转帐,以实现出金。
例如,收到Bob通过隐私转账转过来的1000 ACA后,Charlie 可以在 Phala 端发起请求,向 Acala 的 Alice 账户发送 500 ACA,则背后发生了这些事情:
TEE 收到转帐命令,将Charlie账户中减少 500 ACA,并向Phala链上发起一笔跨链转账交易 Phala 主链收到跨链转账请求后,会直接把这笔转账消息发给中继链,这是一个VMP UpwardMessage 同样,中继链会把它转发给Acala,这是一个VMP DownwardMessage Acala收到消息后,从 Phala 主权账户中取出 500 ACA 存入 Alice 的账户,这笔跨链转帐交易完成。
结语
在现有的区块链例如以太坊中,Defi和隐私Layer2的结合需要通过以太坊来互相确认,而一个Layer2协议无法与另一个Layer2协议互操作。这就导致了用户无法用Loopring协议直接调用Tonado Cash,或者用Aragon直接调用Aztec。
但是在Polkadot上,XCMP协议可以让具有强自定义能力的平行链在极少的工作量下,就能实现便捷的跨链的互操作。通过XCMP实现的可组合性,可以让开发者像搭建乐高积木一样搭建出丰富的应用案例。
在这篇文章里,我们就展示了XCMP强大的能力,我们可以直接让Acala和Phala实现互操作,通过Defi平行链和隐私平行链的组合,让DeFi得到了隐私能力。在以太坊Defi生态下,我们已经看到了可组合性的优势,因此我们相信XCMP会成为强大的Dapp Building Block,并期待在Polkadot上看到由平行链组合出的更多全新的应用。