Renaissance Labs

Posted on Apr 06, 2022Read on Mirror.xyz

微视角看跨链新贵LayerZero与Gh0stly Gh0sts幽灵NFT如何相互成就

前言

基于LayerZero第一个应用StarGate还没完全开发完,无奈LayerZero协议获得了资本的FOMO,遂大热。

LayerZero

LayerZero的白皮书技术方案

中间部件预言机(Oracle)和中继器(Relayer),预言机是用来验证源链交易有效性,中继器是在目标链上证明来源信息的真实性。

具体步骤

上图说明了有效传递单个LayerZero消息所涉及的步骤,图中每个黑底的数字代表了一个步骤。

**步骤1:**链A(AppA)上的用户应用程序作为事务t的一部分执行一系列的动作。我们通过交易标识符t来唯一标识事务T,t的格式可能会根据链A的类型而有所变化。事务T中包含的一个步骤是通过LayerZero传输有效传递。为了说明目的,并且不丧失一般性,我们假设在这个场景中Appa使用我们的模版中继器。AppA向LayerZero通信器发送一个包含以下信息的请求:

t:代表唯一的事件识别符

dst:代表指向链上智能合约的全局识别符

payload:代表链A应用希望传送给链B应用的任何消息数据

relayer_arge:代表在链A应用希望采用图中所示的模版中继器(layerZero提供的一个可自定义的中继器)时所提交的支付信息的一些参数

**步骤2:**通信器(Communicator)构造一个包含dst和payload的LayerZero数据包,称为数据包(dst、payload),并将它与t和relayer_args一起发送给验证器(Validator)。

**步骤3:**验证器(Validator)将t和dst发送到网络。此步骤通知网络,需要将链A上当前块的块头发送到链B。

**步骤4:**验证器(Validator)将包(dst、有效负载)、t和relayer_args转发到中继器(Relayer),通知中继器(Relayer)需要预取T的事务证明并最终发送到链B。这与步骤3同时发生。

**步骤5:**网络将当前事务(cur_blk_id)的块ID发送给Oracle。这将通知Oracle获取链A上当前块的块头,并将其发送到链B。如果在同一块中发生了多个LayerZero事务,则步骤5只执行一次。

**步骤6:**Oracle从链A中读取块头(blk_hdr)。

**步骤7:**中继器(Relayer)从链A读取与交易T关联的交易证明(证明(t)),并在链外存储。步骤6和步骤7彼此异步发生。

**步骤8:**Oracle确认blk_hdr对应的块在链A上稳定提交,然后将blk_hdr发送到链B上的网络。确定每条链何时发生这种情况的机制是不同的,但通常需要等待一定数量的块确认。

**步骤9:**网络将指定为blkJhdrJhash的区块hash发送给验证器(Validator)。

**步骤10:**验证器(Validator)将blkJhdrJhash转发到中继器(Relayer)。

**步骤11:**在接收到blk_hdr_hash之后,中继器(Relayer)发送与当前块匹配的所有包(dst、payload)、t、证明(t)元组的列表。如果多个用户在同一端点之间同时发送消息,则在同一块内可能存在多个数据包和关联的事务证明。

**步骤12:**验证器(Validator)将接收到的事务证明与网络存储的块头一起使用来验证关联的事务T是否有效并已提交。如果块头和事务证明不匹配,则将丢弃该消息。如果它们匹配,则包(dst,payload)发送到通信器。

**步骤13:**通信器(Communicator)发出数据包(dst,payload)到AppB。

官方宣称

LayerZero 不是一个应用,而是一个传输协议,定位是做资产跨链的一个「行业标准」。它不是单纯实现链与链的跨链传输,而是要通过预言机和中继器的组件实现链上应用与应用之间的资产跨链传输。

即时确定性、统一流动性、目标链上的原生资产被称作跨链资产的「不可能三角」,layerzero官方声称自己已经实现了这个「不可能三角」。

LayerZero认为自身的解决方案是一种TCP级别新的通信协议。

实际分析

这一点我并不认同,他所处的级别并非类似TCP这样的通信协议,顶多是WebSocket吧;而仅仅只是一种链间的数据传输协议,在层级设置中我更愿意将其置于应用层,介于layer2和layer3之间。

一个sushiswap例子

小明在以太坊链上有1个eth,但是他现在想买的币在bnb chain上,他的正常操作是什么?需要先在以太坊链上将自己的ETH卖成USDT,再将以太坊链上的USDT跨链到BNB chain上,再在BNB chain上的sushiswap上购买。但是如果有了LayerZero 这个传输协议,由于sushiswap 同时部署在以太坊链上和BNB Chain上,小明完全只需要将ETH 兑换成USDT,然后在BNB chain 的sushiswap上就可以完成交易,提高了用户资金的流动性。

以Stargate看可靠性

部署Layerzero的链上应用可以决定自己使用什么类型的预言机,Stargate 使用的是chainlink,而中继器是链下服务,早期统一由layerzero来提供。预言机和中继器必须是相互独立的,保证了链上数据不作恶。即使预言机和中继器同时作恶,用户资产也不会受损,受损的只有应用程序的资产。

如果预言机出错,中继器没出错,那么验证消息无法发出,如果预言机没出错,中继器出问题,交易无法到达目标链。第三种情况是预言机和中继器同时出问题,那么此时资产将如何受损?比如用户可以只在以太坊上质押1ETH,但是通过攻击预言机和中继器,让中继器显示自己在bnb chain链上资产为100ETH,这样受损的仅限于某个协议的某一对链上的中继器,受损范围极小。但是这种情况目前不太可能发生,因为中继器现在都是由layerzero官方控制。

Gh0stly Gh0sts实现分析

Gh0stly Gh0sts实现的能力

基于跨链互操作性协议 LayerZero,Gh0stly Gh0sts 实现了多链发行,且可在多链之间实现原子级的跨链转移。

具体来说,Gh0stly Gh0sts 在创世之处就同时支持在七条不同的区块链(以太坊、Polygon、Arbitrum、Optimism、BSC、Avalanche、Fantom)上 mint,这意味着 7710 个幽灵实际上会分布在七条不同的链上,所以其真实地板价需要全部七条链的市场情况(这也是为什么前文我们在说地板价时会加一个“OpenSea,以太坊”)。

根据出生地的不同,这些幽灵图像的背景颜色还会有所不同。如下图所示,出生在以太坊上的幽灵背景颜色为铁灰色,出生在 BSC 上的幽灵背景颜色则为黄色。

接下来就是最关键的跨链玩法了,当幽灵在某条链上出生之后,可以通过合约直接完成在不同链之间的穿行,比如从 Polygon 到 BSC,或是从 Avalanche 到以太坊。如下图所示,在以太坊主网的 OpenSea 之上,我们可以看到许多背景呈五颜六色的幽灵们,这意味着这些幽灵来自于不同的初始链,其中紫色代表 Polygon,蓝色代表 Fantom,红色代表 Avalanche,而如今,这些出生地各不相同的幽灵都聚集到了以太坊(边框颜色代表当前所处的目标链,以太坊还是铁灰色)之上。

必须强调的是,这些穿行至其他区块链之上的幽灵并不是原始 NFT 的副本,而是可被目标链合约认可的真实 NFT,这一点的直接体现在于,当我们把某个幽灵从 Avalanche 转移到以太坊后,Avalanche 之上的幽灵总数会减少一个,以太坊则会相应增加一个。因此,在不同链之上的幽灵供应量实际上也是动态的。

Gh0stly Gh0sts技术逻辑分析

链间转移分析准备

链间转移实现流程

准备工作

  1. 创建者0x099a2da6bb4f40ecaea36ad0abe32d09f98c2a0a在Polygon链上发布合约地址为0xEc1Df7EdFcdC2e2042c63252c1cEF480f64F9189的Gh0stlyGh0st... (gg)NFT;创建者0x099a2DA6bB4F40Ecaea36aD0AbE32D09f98c2A0A在ETH链上发布合约地址为0xA74aE2c6FCa0CEdbAef30A8CEEF834B247186bcF的Gh0stlyGh0sts (gg)。【可以看出这两个合约是一个人发布的】

发送

  1. 用户0x85dae618f69cf79dfc36adb20145f575a01db94a在合约地址0xEc1Df7EdFcdC2e2042c63252c1cEF480f64F9189上min到token 6602。
  2. 用户0x85dae618f69cf79dfc36adb20145f575a01db94a调用traverseChains进行NFT跨链,目标跨链到ETH,并且会在合约上执行0xEc1Df7EdFcdC2e2042c63252c1cEF480f64F9189对token 6602调用burn方法。

接收

  1. ETH上的合约地址0xcb566e3b6934fa77258d68ea18e931fa75e1aaaa收到来自0xe93685f3bba03016f02bd1828badd6195988d950的tokensTransferred调用请求。
  2. 合约地址0xcb566e3b6934fa77258d68ea18e931fa75e1aaaa再次发起调外部用合约0xA74aE2c6FCa0CEdbAef30A8CEEF834B247186bcF的tokens Transferred最终内部调用saftMint方法mint给用户0x85dae618f69cf79dfc36adb20145f575a01db94a,最终Mint出Erc721 token 6602。

Some推理

  1. 不在自己的原始链的合约地址上Min的NFT会被套上一个目标链颜色的边框,这部分预计是根据目标链的Idy以及token自身预先设置metadata来选择的。也就是理论上准备了7*7710份元数据。
  2. 根据ETH和Polygon两条公链的分析来看,在7条链的部署合约的人应该同一个人0x099a2DA6bB4F40Ecaea36aD0AbE32D09f98c2A0A。

Some总结

  1. 需要在7条公链上分别部署一个合约,生成总共7个合约地址,这7条公链恰好也是目前LayerZero已经支持的。
  2. 考虑到这7条链全部EVM兼容性,除了一些涉及到本链自身的参数设置,合约代码应该是很相似,甚至是一份代码主动不同的参数来控制不同链上部署。
  3. 尽管实现了跨链转移,实质上是一次burn+一次mint,可见这种转移的操作还是很不环保的,尤其面对到ETH链的转移的。
  4. 考虑到ETH链的昂贵性,一但从其他链Mint的NFT大概率不会再转到其他链上,原因1是在ETH链上才具备更高的价值;原因2是从ETH链上转移到其他链上意味着在ETH链上进行Burn NFT,太奢侈了。
  5. 在其他链上拥有幽灵👻NFT等同于获得几乎免费(即使不算ETH上mint的Gas,额外还需要以Burn掉原链幽灵👻NFT+跨链传输的Gas)Mint ETH 链上的WL(白单)。
  6. 预计,最终所有的幽灵👻NFT都聚集在ETH链上。

Next章

https://mirror.xyz/dashboard/edit/bOAopdfCgpnhrQ481LZGOKbtKU4qsZutz1uiVYh5MTs

参考

1.https://www.jinse.com/blockchain/1185889.html

2.https://layerzero.network/pdf/LayerZero_Whitepaper_Release.pdf

3.https://weibo.com/ttarticle/p/show?id=2309404724272214966301

4.https://www.odaily.news/post/5177736https://www.odaily.news/post/5177736

5.https://www.ccvalue.cn/article/1395353.html

6.https://www.ccvalue.cn/article/1395579.html

NFT