Namada区块链旨在为尽可能多的资产提供统一的隐私集合,因为隐私是可累积的。因此,互操作性对Namada至关重要。除了实施IBC协议之外,Namada还将拥有与以太坊集成的桥接工具。
在本文中,我们将讨论这个桥接工具的设计和特点。我们将设计分为三个部分。在第一部分中,我们将解释为什么决定构建一个专用的桥接工具以及基本桥接工具的工作原理。在第二部分中,我们将提供从以太坊到Namada以及从Namada到以太坊的资产转移的详细信息。在第三部分中,我们将讨论智能合约架构。
如果对本文有任何反馈、问题或讨论,请访问Namada论坛上的相关主题。
直接融入 Namada
以太坊桥接工具直接集成到Namada中,而不是作为一个独立的协议。Namada验证者将桥接工具作为Namada核心协议的一部分运行。对于将资产转移到Namada,验证者还充当中继者;不需要其他角色。但是,要将资产转移到以太坊,将涉及第三方角色(中继者),但他们不负责桥接工具的验证或安全性。
这意味着以太坊桥的实时性和安全性直接与Namada作为整体的实时性和安全性相关。通常情况下,在通过桥接工具将资产转移到其他链时,用户必须信任桥接工具的验证者以及目标链的验证者。他们的资产安全性取决于最薄弱的环节。由于用户必须信任Namada验证者才能使用Namada,以这种方式集成桥接工具并不增加额外的安全假设。还有其他坚固的IBC兼容桥接设计,比如Gravity和Axelar等,Namada也可以连接并支持这些桥接工具,但它们需要用户接受额外的安全假设(以及一些延迟)。
Namada验证者将运行以太坊完整节点,并监视在以太坊上部署的桥接智能合约发出的事件。智能合约的事件是由各种交易触发的,例如在桥接工具上来回传送令牌,以及一些行政用途。Namada验证者会等待触发交易完成,然后与其他验证者共享它们已从以太坊发出某个事件的信息。
在对新的Namada区块进行投票时,验证者必须包括一个已签名的新事件列表,作为他们投票的一部分。当2/3的验证者投票支持特定事件时,它被视为事实,Namada链可以采取行动。验证者只应对不太可能被撤销的事件进行投票(以太坊1 PoW的意义)或已完成的事件(以太坊2 PoS的意义)。
需要注意的是,在以太坊2中(目前而言),最终性是在2/3的权益投票两次并在不同时期投票时确定的。更具体地说,每个时期的第一个区块在投票两次(但联合)之后可以被最终确认。第一对投票允许区块“被证明”,第二对投票允许区块被最终确认。因此,最终性发生的时间比在Namada中要晚。
如果包含区块具有足够多的后代(称为“确认”),则事件不太可能被撤销。Namada中确定将事件视为“最终”的确认数量在创世时设置,但可以通过治理进行更改。在以太坊2中,一旦一个区块达到64次确认,它要么属于或是已最终确认的检查点区块的祖先。这意味着为了使同一高度的另一个区块被提交给以太坊验证器的选民群体,至少有三分之一的验证器总权益面临丧失的风险。因此,在以太坊2中,64次确认应被认为足够了。
值得注意的是,任何验证者都可以提交虚假事件,但除非Namada的整体安全性已经受到威胁,否则它将无法获得足够的支持票来采取行动。如果Namada验证者希望验证事件的真实性,这将需要提供轻客户端证明,证明某个事件的包含是通过在以太坊上运行的一笔交易而产生的。这又需要Namada验证者运行以太坊轻客户端以验证这些证明。允许虚假事件意味着Namada验证者无需运行以太坊轻客户端来验证事件的真实性。这极大地简化了桥接工具,并不会对我们的安全假设产生实质性影响(因为2/3的投票权可以签署任意区块)。不会实质性影响我们的安全假设(因为 2/3 的投票权无论如何都可以签署任意区块)。
将资产转移至 Namada
由于 Namada 链充当相关以太坊合约的预言机,因此用户将资产从以太坊转移到 Namada 是一个非常无缝的过程。只需将相关交易提交给桥接合约就会引发一个事件。这将由 Namada 验证者查看并投票。一旦达到支持法定人数,就会自动免费向 Namada 地址发行资产。以太坊上的 Gas 支付足以防止任何拒绝服务攻击媒介。
将资产转移回以太坊
将资产转移回以太坊显然不像其反向交易那么简单,因为以太坊不运行 Namada 全节点。这意味着 Namada 上发起向以太坊转账的交易需要转发到相关的智能合约。
这带来了许多挑战:
必须精心设计以太坊交易
必须有人提交此交易
必须有人支付汽油费
单独提交交易并不划算,需要批量提交
为了解决这些问题,Namada 将保留一个以太坊桥接池,其中包含将资产转移到以太坊的请求。这个池应该被认为是一个内存池。当 Namada 用户向池中添加转账请求时,他们可以选择支付一定数量的 NAM(或其他白名单资产)作为费用。该费用由 Namada 托管。
任何人都可以随时选择转发池中的传输请求子集。以太坊桥池被组织为 Merkle 树,最新的根由验证者签名。中继传输请求需要将传输提交到相关的以太坊智能合约,以及传输的 Merkle 证明和由法定人数 Namada 验证者签名的 Merkle 树根。
此类交易将发出一个事件,Namada 验证器将看到该事件。一旦在链上得到确认,转账的托管费用将发放给转发者。
请注意,通过使用 Merkle 树,桥接池的任何子集都可以按任何顺序进行中继。这可以防止通过桥发送大量小交易以减慢速度的攻击。但是,每批传输都会被赋予一个随机数,以防止重放传输。
这种设计避免了对以太坊天然气预言机的需求,因为市场激励将迫使用户确定适当的费用以及转发哪种转账请求最经济。如果转账请求的费用太低,该请求最终将“超时”并从池中删除,所有托管资产将被退回。该超时期限是在创世时设置的协议参数,可以通过 Namada 治理进行更改。
以太坊上的证明
如上所述,我们必须向相关的以太坊智能合约提交已签名的默克尔根,以中继转账请求。实际上,任何由验证者投票群体签名的交易都应该被以太坊智能合约接受,因为它们本质上是Namada轻客户端证明。
为了使这种证明的燃料效率更高,证明必须使用Keccak散列和以太坊的ABI序列化格式。Namada验证者还必须在以太坊上拥有账户,以便他们可以使用secp256k1密钥签署证明。
由于Namada上的验证者集可能在每个时期发生变化,因此以太坊智能合约需要一种方法来知道在验证证明时要检查哪些签名。这需要在每个时期向以太坊发送验证者集更新,包括新的验证者地址、公钥和投票权。
此验证者集更新必须由前一个时期至少2/3的验证者按照其以太坊密钥授权的方式签署。当新时期开始时,新的验证者集必须签署下一个时期的验证者集,作为他们对区块的投票的一部分。
他们的投票将由他们的Namada密钥签署,并包含了由他们的以太坊密钥签署的新验证者集。验证者集是有先见之明的,因此它们在两个时期之前就已知。这样,"权力的交接"与共识相关,并在时期结束时可用。
当新时期开始时,为这一时期的第一个区块选择的领导者必须将验证者集更新作为一笔交易发送到以太坊,这将触发一个事件。一旦在Namada上确认了这个事件,就会支付通货膨胀奖励来补偿这个验证者。
如果领导者未能成功提交验证者集更新,则没有对其进行惩罚的机制。由于已签名的更新在链上是公开可用的,因此任何人都可以在必要时将更新发送到以太坊合同。因此,这个设计没有暴露攻击矢量,而财务奖励应足以激励所选领导者中继验证者集更新。
智能合约
建筑学
作为桥梁的一部分,多个智能合约将部署在以太坊主网上。用户交互的主要合约是Bridge 合约和wNAM合约。桥梁合约用于从 Namada 发送或接收资产。wNAM 合约是以太坊上允许包装的 NAM 的 ERC20 代币。应该注意的是,只有 ERC20 代币可以在 Namada 和以太坊之间转移。这意味着以太币不能被传输,但打包的以太币可以(打包可以通过接口自动化)。
此外,还有其他三个合约:Proxy、Governance和Vault合约。代理合约是固定合约,维护所有最新合约的地址。这样,如果更新了合约,则可以通过单个合约来查找部署该合约的地址。
治理合约维护验证证明所需的验证器集。它还可用于更换合同、停止桥梁或在必要时访问锁定在桥梁中的资金。
Vault 合约是桥上所有资产代币余额的托管和分类账。将其保留为单独的合同可以最大限度地减少更新 Bridge 合同时需要迁移的存储量。
深度防御
正如我们前面提到的,Namada验证者必须拥有以桥梁已知的公钥的以太坊账户。实际上,验证者必须同时拥有热钥和冷钥。热钥是经常使用的钥匙,而冷钥应该很少使用,因为它们用于敏感操作。到目前为止,通过"以太坊密钥",我们一直指的是热钥。
验证者可以使用他们的冷钥来在极端情况下(例如存活失败)恢复桥梁。Namada验证者的选举群体可以使用他们的冷钥将保管在保险库中的资金提取到任何以太坊地址。
这些密钥还用于桥梁的管理,包括升级到新合同以及重要的安全方面,如代币白名单、保险库上限和提取限制。
桥梁将维护允许的ERC20代币的白名单。此外,将执行桥梁可以在保险库中保留的每种代币的总量上限。这限制了桥梁的潜在损失,同时减少了攻击桥梁的价值。一个特别重要的问题是,如果过度抵押桥梁,可能会使Namada的安全假设失效。这会发生在桥梁上的价值足够超过任何Namada验证者选举群体抵押的价值的情况下。
代币上限有助于确保抵押验证者不会保护比他们抵押的价值多得多的价值。进一步的缓解措施是速率限制,意味着每个时期可以从桥梁中最多移除一定数量的给定代币。在安全失败的情况下,这可以减缓迅速将价值从桥梁中移出的尝试。