LayerZero 介绍
LayerZero是为 Ominichain
链互操作协议,在各种不同链之间实现底层的通信协议,方便开发者构建各种跨链应用,例如跨链的DEX, 多链收益聚合器,以及跨链借贷等。
LayerZero主要由LayerZero Endpoint
合约,Oracle
, Relayer
, 三部分组成。
LayerZero Endpoint
为链上交互的合约, Oracle
是第三方服务,如Chainlink, 用于传递区块头; relayer
用于链下服务,主要用于交易证明。
协议流程
下图展示LayerZero协议的执行流程,假设用户要将消息从链A发送到链B, 主要分为以下几步:
-
Step 1: 用户首先在链A 发起交易, 包含几个参数
-
t
: 交易唯一识别符,例如nonce; -
dst
: 链B上的目标合约地址; -
payload
: 应用A想要发送给应用B的数据; -
relayer_args
: 相关的参数。
-
- Step 2: 合约中的
communicator
组件构造Packet(dst, payload)
, 并和t, relayer_args
发送给Validator
; - Step 3: Validator将
t
和dst
发送给 Netowork组件,并通过Network组需要将当前的区块头从链A发送到链B上; - Step 4: Validator 将
Packet(dst, payload), t, relayer_args
推送给Relayer, 并通过Relayers
需要取交易T的证明,然后发送给链B,这和Step 3同时执行; - Step 5: Network组件将
dst
和区块ID
发送给Oracle, 通知Oracle 去取当前区块头,并发送给链B; - Step 6: Oracle 从链A 获取区块头
blk_hdr
; - Step 7: Relayer从链 A 获取交易T的证明,并在链下存储,Step 6 和 7可以异步执行;
- Step 8: Oracle在A链上的区块头
blk_hdr
确认后,将其发送给链B的Network 组件; - Step 9: 链B的Network 组件区块hash
blk_hdr_hash
发送给Validator; - Step 10: Validator 将
blk_hdr_hash
推送给Relayer
; - Step 11: 在收到
blk_hdr_hash
后,Relayer 将Packet(dst, payload), t, proof(t)
给B链的Validator 组件。 - Step 12: Validator 会验证
proof
和对应的区块头,然后将Packet(dst, payload)
发送给Communicator; - Step 13: Communicator 调用App B合约函数 ,完成跨链。
目前LayerZero采用Chainlink Oracle, 对于Realyer, LayerZero 并未开源,用户可以自已实现Relayer, 也可用LayerZero 官方Relayer.
其它实现:https://github.com/subspace/layerzero_testnet_bridge
Polyhedra zkLightClient
Polyhedra zkLightClinet 在LayerZero的基础上,采用零知识证明技术,简化链上区块头的验证。另外,也可以将多个交易的验证聚合成为一个ZK 证明。
注:ULN 表示Ultra light node.
参考
白皮书:https://layerzero.network/pdf/LayerZero_Whitepaper_Release.pdf
共有 0 条评论