原文作者:Bryan Pellegrino,LayerZero Labs 联合创始人兼 CEO
原文编译:aididiaojp.eth,Foresight News
昨天推特上出现了有很多对 LayerZero 的讨论,其中也包括很多误解,所以我将从第一性原理开始介绍 LayerZero,它是什么?如何工作?开发人员如何保证它的安全性?
LayerZero 是一种可用于消息传递的互操作性协议,允许任何包含有效负载的跨链合约调用。
开发人员在多个链上部署合约,我们统称这些为链 A 和链 B。交易在链 A 上提交,包含结果的消息可以被传递给链 B 上的合约。合约与 LayerZero 端点交互,然后应用程序选择的预言机和中继器检索相应的区块头和 tx 证明。他们等待 A 链上指定数量的区块确认后,独立地将各自的信息传送到链 B。在链 B 上,这些信息将通过验证者或证明库进行验证,然后在链 B 上传送消息合约。
一个简单示例是用户可以在 Stargate 上桥接,使用 SushiXSwap 进行交换,或者跨链交易 NFT 资产。
这里有四个真正的组件:中继器、预言机、验证者证明库、区块确认
应用程序可以完全控制这些组件中的每一个,以下是详细介绍:
中继器——中继器是完全开放且无需许可的。应用程序可以选择任何现有的中继器,中继器可以是中继器网络,也可以是简单的单个签名者。
预言机——预言机也是完全开放和无需许可的。应用程序可以选择任何现有的预言机,预言机可以是预言机网络,也可以是单个签名者。
证明库——验证库在一个只能追加的注册表中发布,也可以发布新库,但现有库永远无法修改,并且是完全不可撤销的不可变验证库。应用程序可以选择任何现有的库(它们都有公共审计)来执行其验证。随着新的证明机制的发明、零知识证明等领域的进步以及围绕 Gas 和采用率的优化协议的出现,注册表能够允许无限的灵活性。
区块确认- 区块确认是在消息可以传递到目标链之前必须在当前源链上完成的区块数。这个数字在共识机制和具有概率最终性的系统中差异很大,是应用程序控制给定块的最终确定性的方式,很像中心化交易所在接受来自给定链的存款之前所做的事情。
如果应用程序配置这些参数,它将如下所示
如果应用程序未配置参数,则它会使用「默认」设置,这样就会有一定的适应性和功能性限制。
在场景 A 中,当应用程序设置了 [ULN v2、Relayer A、Oracle Z、Block Confs X 和 Proof Lib V1] 的配置时,任何其他系统都无法修改这些参数。此时,中继器 A 将与预言机 Z 一起使用,所有消息将在等待 X 个区块后通过 ULN v2 和 Proof Lib v1 进行验证。
在场景 B 中,当应用程序使用默认设置时,这意味着他们将参数的选择权交给了 LayerZero 多重签名。LayerZero 多重签名唯一能做的就是添加新库和更改默认值。
那么,让我们讨论一下目前存在的现状。
今天大多数互操作系统都是这样工作的:
Wormhole、Nomad 等互操作系统都以类似的方式工作。所有控件都位于 [系统] 中,并且可以由控制这些系统的管理员进行升级(Wormhole 需要验证器的 13/19 多重签名)。这存在一定的风险,导致 Wormhole 和 Nomad 出现多个安全问题。使用 LayerZero 的默认值与这些系统相同,应用程序将参数控制权委托给一组外部管理密钥,系统依赖于秘钥管理者不会作恶。
不同之处在于,这些系统中,应用程序都没有任何控制权,并且永远无法阻止 [系统] 强制对它们进行升级并更改底层消息传递或协议的信任假设。
LayerZero 为每个应用程序提供了一种方法来明确选择一组永远无法修改的安全参数。我们认为关键基础设施应该是不可变的、开源的,并且始终由用户应用程序所拥有。