# Nomad协议介绍

By [MrJoker](https://paragraph.com/@mrjoker) · 2022-02-24

---

**Nomad是一种新的设计，从根本上降低跨链通信的成本，而不需要header验证。我们期望操作Nomad与传统的header中继器相比，可以减少90%的gas成本。为了实现这一目标，我们从optimistic中获得了灵感（如Optimistic Roll-up系统）。Nomad具有许多optimistic机制中的特征，如公开验证、低燃气费、广泛参与，但有一个略微不同的安全模型。**

Nomad将形成一个跨链通信网络的基础层，为所有智能合约链和rollups提供快速、廉价的通信。它只依赖于广泛使用的加密基元（与header中继不同），具有几个小时的延迟（而不是ORU的一周延迟），并且只对消息发送者施加了大约12万的gas开销。

Nomad的设计是为了便于在任何支持用户定义计算的区块链中实施。我们将提供链上合约的初始Solidity实现，以及链下系统代理的Rust实现。

Nomad是[Optics协议](https://github.com/celo-org/celo-monorepo)（OPTimistic Interchain Communication）的一个实现和扩展。

**直观Nomad**

Nomad的工作原理和公证服务很像

![](https://storage.googleapis.com/papyrus_images/611a9b76b3de45b11387fff52f20bbab550cf222bced5ab1e3580640613eddfb.png)

\*\*发送（或 "home"）链产生一系列需要公证的文件（"消息"）。一个公证员（称为 "更新者"）被承包来签署。公证员可以制作一个虚假的副本，但他们将受到公开撤销奖励和资格的惩罚。当这种情况发生时，每个依赖公证人的人都会知道这个公证人是恶意的。该公证处的所有客户可以立即阻止该公证处，并防止任何对其账户的恶意访问。 \*\*

**Nomad的工作原理**

Nomad是以optimistic系统为模式的。它看到一些数据的证明，并在一个计时器时间后接受它为有效。当计时器运行时，诚实的参与者有机会对证明作出回应和/或提交欺诈证明\*\* \*\*

与大多数optimistic系统不同，Nomad跨越了多条链。发送链是真实的源头，它包含了消息被排队的 "主 "合同。消息在merkle树（"消息树"）中被承诺。该树的根由更新者公证，并在 "更新 "中转发给接收链。更新是由更新者签名的。它们提交给上一个根和一个新的根。

任何链都可以维护一个 "Replica "合约，Replica合约中有更新者和当前根的信息。签名的更新由 "Replica "持有，并在超时后被接受。Replica有效地复制了一系列的更新，以达到与Home链相同的根。因为根对消息树的承诺，一旦根被这样传送，消息就可以被证明和处理。

这就留下了更新者签署欺诈性更新的可能性。与optimistic rollup不同，Nomad允许欺诈。这是安全模型上最重要的一个变化。重要的是，欺诈总是可以在发送链上向home合约被证明。正因为如此，更新者必须在发送链上提交一个绑定的stake。欺诈行为总是可以在发送链上被证明，并且保证金可以被削减作为惩罚。

不幸的是，某些类型的欺诈行为无法在接收链上被客观的证明；Replicas无法知道home链打算发送哪些消息，因此无法在所有情况下检查消息树的有效性。然而，如果一条消息被Updater篡改并提交给Replica，这个更新是公开的。这意味着，任何诚实的行为者都可以证明这种对原home合约的欺诈，并导致削价。没有办法隐藏欺诈。

此外，由于Replica等待处理消息，Nomad保证诚实的dapp总是可以防止处理不诚实的信息。在欺诈信息被处理之前，欺诈行为总是公开的。因此，Nomad（像原子交换和其他本地验证系统一样）包括了对诚实用户保持在线的要求。我们已经建立了一个强大的系统来委托这个责任。

所有链下观察者都可以立即确信有欺诈行为（因为他们可以检查主链）。这意味着由Nomad发送的消息的有效性不是100%保证的。

相反，Nomad保证以下几点：

*   欺诈的成本很高
    
*   所有用户都能了解欺诈行为
    
*   所有用户都可以在欺诈信息被接收之前阻止他们出现
    

Nomad不是使用全球可验证的欺诈证明，而是依靠参与者的本地验证。这种权衡使得Nomad与pessimistic的中继相比，可以节省90%的gas费，同时仍然保持高度的安全性。

**Nomad架构**

Nomad包含几个链上和链下的组件。方便起见，我们将Home和Replica称为合约，而事实上它们是几个共同工作的合约。

![](https://storage.googleapis.com/papyrus_images/323716ce2ddef97f98af064a3c8365b12ca414875412bb952fdcd83043131730.png)

\*\* \*\*

**链上合约**

_Home_

Home合约负责管理消息树的生产和保管更新者bond。

Home合约执行以下功能

*   向主链上的其他合约暴露一个 "发送消息 "的API
    
*   强制执行消息格式
    
*   向消息树提交消息
    
*   维护一个树根队列
    
*   削减更新者的保证金
    
*   双重更新证明
    
*   不恰当的更新证明
    

**Replica**

Replica合约负责管理optimistic的复制，并将消息派发给终端接收者。

它执行以下功能。

*   维护一个等待更新的队列
    
*   在超时时，最终完成更新
    
*   接受双重更新证明
    
*   验证消息包含证明
    
*   强制执行消息格式
    
*   确保消息被按顺序处理
    
*   将消息发送到目的地
    

**链下（agents）**

**更新者**

更新人负责签署新根的证明，它是一个链下角色，做以下工作。

*   观察home链契约
    
*   签署对新根的证明
    
*   将签署的证明发布到home链上
    

观察者观察Updater与Home合约的交互（通过观察Home合同），并对恶意的或有问题的证明做出反应。它还观察任何数量的副本，以确保Updater不会绕过Home而直接去找一个副本。

它执行以下工作的链下工作

*   观察home
    
*   观察 1 个或多个副本
    
*   维护一个见证更新的数据库
    
*   提交双重更新证明
    
*   提交无效的更新证明
    
*   如果配置好了，发出一个紧急停止事务
    

**处理器**

处理器证明待处理信息的有效性，并将其发送给终端收件人。

它是一个链外行为者，做以下工作。

*   观察home
    
*   维护具有所有分支的本地merkle树
    
*   观察1个或多个副本
    
*   维护与每个分支对应的消息列表
    
*   生成并提交未决（未证明）消息的merkle证明
    
*   向终端接收者发送已证明的消息
    

**Nomad如何在链间传递信息**

Nomad在home链上创建一个经认证的数据结构，并在任何数量的副本上转发对该数据结构的更新。因此，home链和所有的副本将同意这个数据结构的状态。通过在这个数据结构中嵌入数据（"消息"），我们可以在链之间以高度的信心传播它。

home链对这个数据结构的创建规则。在当前设计中，这个数据结构是一个稀疏的Merkle树，基于eth2存款合约中使用的设计。这个树提交到所有以前的消息的矢量。home链强制执行消息的寻址和消息方案，并计算出树根。这个根将被传播到各个副本。home链维护一个根的队列（每个消息一个）。

home链选出一个 "更新者"，这个更新者必须证明消息树的状态。更新者在home链上放置一个bond，并被要求定期签署证明（更新或U）。每个证明都包含前一个证明的根（U\_prev），和一个新的根（U\_new）。

当看到两个冲突的更新或一个U\_new不是队列中的元素的单一更新时，home链就会削减。新的根必须是队列中的一个。例如，一个更新列表U\_1...U\_i应该遵循\[（A，B），（B，C），（C，D）...\]的形式。

更新代表对两个根之间消息的批量承诺。更新包含一个或多个应该被传播到replica链上的消息。更新可以以任何频率发生，最频繁的是每条消息出现一次。因为更新是独立于链的，任何home链的更新都可以呈现给任何replica，而任何replica的更新也可以呈现给home链。换句话说，签名更新的数据可用性是由每个链保证的。

\*\* \*\*在接受一个更新之前，replica将待接收的更新放入一个待定更新队列。每个更新在被接受之前必须等待一些时间。虽然replica不能知道一个更新肯定是有效的，但等待系统可以保证，欺诈在被replica接受之前在home链上是公开可见的。换句话说，该系统的安全保证是，所有的欺诈行为都可能被任何参与者公布，所有公布的欺诈行为都可能被削减，所有参与者都有一个窗口来对任何欺诈行为做出反应。因此，没有被参与者列入黑名单的更新对复制体来说是足够可信的，可以接受。

**Nomad跨链通信通道**

Nomad以原始字节的形式将消息从一个链发送到另一个链。想要使用Nomad的跨链应用，需要为其用例定义发送和接收消息的规则。

每个跨链应用都必须实现自己的消息传递协议。习惯上，我们把实现这个协议的合约称为应用程序的Router合约。它们的功能大致类似于本地网络中的路由器。它们确保传入和传出的消息都符合协议定义的格式，并促进处理和调度。

这些Router合约必须

*   维护远程链上的经过许可的合约或合约集，它将通过Nomad接受消息--这可能是一个链上的应用程序的单一所有者；它可能是一个在不同链上实施相同规则的其他应用程序的注册表。
    
*   以标准化的格式对信息进行编码，因此它们可以被目标链上的Router合约解码。
    
*   处理来自远程Router合约的信息
    
*   将信息分发到远程Router合约
    

通过在Router合约中实施这些功能，并在多个链上部署，我们使用一种共用的语言和一套规则创建了一个跨链应用。这类应用可以使用Nomad作为跨链的信使，相互发送和接收消息。

**Nomad结构的好处和权衡**

  

![](https://storage.googleapis.com/papyrus_images/5ad5243066e90245b88d9b48094cb52e1d8bd01daf250081283d9424e9eb85db.png)

 Nomad的好处是，广播通道允许单生产者、多食用者模式。这确保了1个累计器可以与任何数量的接收链进行通信。它也比其他选项便宜得多，更新和证明的成本<10万gas，并且只需由一个签名检查。使用Nomad，一个解决方案适合所有，这意味着对接收链的限制是最小的（1个哈希函数+1个签名检查）。在权益证明和工作证明链之间没有实施或安全差异。另外，LoC也比Relay少很多，设计维护开销低很多，维护和操作所需的专业知识也少很多。

我们一直在小心翼翼地解决Nomad系统的所有问题，并设计了一些解决方案，使网络的速度、成本和安全性达到最佳。例如，我们依靠欺诈公布而不是欺诈证明来提高发送信息的速度和成本。

在这种安全模式下，任何潜在的欺诈行为都会被抑制，而且成本很高，所有参与者总是会在有足够时间的情况下了解到任何潜在的欺诈行为，以减轻危害。

**Nomad治理**

Nomad将在2022年2月推出最终确定的治理结构。像Moonbeam这样的链计划在推出EVM兼容性后的一段时间内推出Gnosis Safe。在Gnosis推出和最终的Nomad治理签名被选中之前，Nomad将被部署在以下签名者中。

### 治理者

### 条件： 4个中的2个--在总共4个签名中，执行一项交易需要两个签名。

**签名：**

*   [**Layne Haber**](https://twitter.com/LayneHaber)**: 0xC69b66cc2811B509829448FBFfb2553c4CBb627e**
    
*   [**Praneeth Srinkanti**](https://twitter.com/bees_neeth)**: 0x9bdD76b2a69Db43Fa695a10f5977b8FD891225f3**
    
*   [**Pranay Mohan**](https://twitter.com/pranaymohan)**: 0xab0614cE8d53ea2c67B87f8ad4d8Fac7A4a516e5**
    
*   [**Anna Carroll**](https://twitter.com/annascarroll)**: 0x25270d2e6980C5b343C4866Aea904a9A9bCA733F**
    

### 以太坊恢复管理人

[**Etherscan**](https://etherscan.io/address/0xda2f881f7f4e9d2b9559f97c7670472a85c1986a)**,** [**Gnosis Safe**](https://gnosis-safe.io/app/eth:0xda2f881f7f4e9d2b9559f97c7670472a85c1986a/settings/owners)

**条件： 三个中的两个签名。 在总共三个签名中，执行一项交易需要两个签名。**

**签名:**

*   [**Eli Krenzke**](https://twitter.com/eKRENZKE)**: 0x347Ae1a35BED71BB796A5279CD85FED964468aE9**
    
*   [**Barbara Liau**](https://twitter.com/barbaraliau)**: 0xDE9cfb1216889Dee0cAB8afB04c63911427659E4**
    
*   [**Conner Swann**](https://twitter.com/YourBuddyConner)**: 0xea24Ac04DEFb338CA8595C3750E20166F3b4998A**
    

### Moonbeam 恢复管理人

**签名**

*   [**Conner Swann**](https://twitter.com/YourBuddyConner)**: 0xea24Ac04DEFb338CA8595C3750E20166F3b4998A**

---

*Originally published on [MrJoker](https://paragraph.com/@mrjoker/nomad)*
