下载
关闭菜单 -

HawkClient:在 RSK 和以太坊之间建立完全去中心化的网桥

Published on: 6 二月, 2020

RSK 首席创新科学家 Sergio Demian Lerner

以完全去中心化和去信任化的方式桥接区块链是区块链研究最希望攻克的难题之一。在IOV Labs,我们在 2016 年创建了第一座坚固的联盟桥,连续3年推动 RSK 和比特币之间的1:1挂钩。现在,我们正在研究 RSK 和以太坊之间的完全去中心化桥接。这篇文章介绍了这个新网桥的技术细节以及为其提供支持的根本去中心化协议。

简介

要了解如何在区块链之间移动代币,让我们首先回顾一些常用术语及其历史。双向挂钩(也称为1:1挂钩)是指试图使两种代币在经济上等效的两个单独区块链中共存的系统。当一侧的需求增加时,双向挂钩必须允许代币从另一侧流入,以便保持等价。2013年,甚至在还没有设计出这样的系统前,就设想了一个未来,即比特币可以通过双向挂钩将多个卫星侧链连接到主链。侧链被认为是一个单独的区块链,其原生资产是外部资产,因此交易费用以这种外部资产支付。由于没有内部代币发行,区块不会向侧链矿工支付补贴。但是,由于缺乏经过实证的双向挂钩设计,“侧链” (sidechain) 一词含糊不清。2014年,Blockstream 尝试了基于无状态 UTXO 的解决方案。该设计在原始的 Elements侧链代码库中实施,但是后来由于固有的安全性和审查问题,此方法遭到放弃,并且 Elements 被切换为联盟挂钩并成为 Liquid 侧链。因此,“侧链”一词不能确定执行维持1:1挂钩的资产转移的实际通信系统。随着多代币区块链的出现,用于管理双向挂钩的互操作性系统成为了代币桥。代币桥可以连接两个任意的区块链,而任何一个都不是另一个的侧链。连接独立区块链的代币桥与支持侧链的代币桥之间存在一些重要的加密经济学差异,因为独立代币的可用性可被用作抵押物并因行为不当而被烧毁,但在本文中我们不会深入探讨这种区别。 

第一个可投入生产的代币桥被嵌入在2017年推出的 RSK 侧链中。RSK 桥是混合的:比特币到 RSK 的方向完全基于 SPV 模式,这意味着它实现了所需的去中心化和审查阻力特性,而RSK到比特币的方向则是多签联盟模式。由于比特币无法验证RSK共识,因此无法实施将比特币从RSK转移到比特币的去中心化且不受审查的解决方案:不可能实施全双工。但是,如下图所示,当前的RSK-比特币挂钩构成了最佳解决方案之一。

RSK 多签联盟-SPV 混合双向挂钩

RSK-比特币桥从未遭到黑客入侵,并且实现了100%正常运行时间。RSK-比特币使用自治的硬件安全模块(HSM)保护大型多签私钥。HSM 随时间演变,并且新一代 RSK HSM 通过验证链的工作量实现与最佳链的同步。其结果则是即使大多数联盟工作人员也无法作弊或审查挂钩交易。但是,联盟桥有其缺点:它仍然依赖一小部分实体,这些实体需要使 HSM 保持活动并与网络保持良好连接,而且仍然依赖于制造 HSM 的公司之诚信,不引入隐蔽渠道、有偏见的随机数生成器或后门。在去中心化协议的新世界中,只有在构建更好的去中心化系统以替代联盟桥之后,联盟桥才应被替换。两个区块链之间真正安全的去中心化网桥必须依靠每个区块链以简洁的方式验证彼此的共识。 

使用 SPV Light 客户端构建代币桥 

SPV 客户端是一种轻量级系统,它接受累积工作量证明的简洁证明,以便从具有高度加密经济安全性的许多可能候选人中找出哪一个是诚实最好的链。SPV Light客户端是在两个基于工作量证明的区块链之间建立基于智能合约桥梁的理想选择。但是标准SPV客户端有很多限制,特别是对于高阻止率的区块链。RSK 很高的区块产生率(大约每30秒发生一次),这意味着在空间和验证时间方面,完整的跨链仅标头验证变得非常昂贵。在这方面,以太坊的情况更加糟糕,这是因为更高的区块率和更繁重的工作量证明。下图描述了基于跨链仅标头共识验证的假设去中心化桥。每个区块链都以SPV模式维护另一个区块链最佳链的表现。

假设满状态SPV桥

早在2015年,人们就知道如何基于区块标头质询-响应交互游戏创建简短的 SPV 证明。可以使用 Fiat-Shamir 变换(最近称为“工作证明的非交互式证明”或NiPoPoWs)将这些游戏变为非交互式。这个想法是证明者为一个区块链作出承诺,质询者则向证明者询问证明者必须揭示的多个区块标头,以及表明所揭示的区块属于同一连接的区块链的信息。然而,一直等到2017年,才知道如何为可变难度区块链生成证明。在2017年,FlyClient 协议问世,终于解决了这个问题。FlyClient 能够调整区块索引选择功能以适应难度变化。另外,FlyClient 还可以针对不同的证明尺寸进行调整,根据客户端的安全需求提供不同的作弊概率范围。

FlyClient非交互式协议(简化)

但是,如果没有共识变更,将 FlyClient 应用于现有区块链似乎是不可能的,因为 FlyClient 要求对区块标头中所有先前的区块哈希做出定期承诺。承诺以树形结构(称为增强型 MMR)进行组织,而累积的工作量证明和时间戳存储在 MMR 树的每个中间节点上。 

在2019年,我们开始研究如何将 RSK 和以太坊进行连接。我们探索了在以太坊中启用 FlyClient 而不改变其共识的方法,我们发现了一种扩展 FlyClient 以实现此目的并且仍然使用简洁证明的方法。此发现变成了我们所谓的 HawkClient,它属于一种新的协议,我们称之为“加密经济交互式工作量证明”(CIPoPoW)。HawkClient 协议适用于所有基于 EVM 的智能合约平台,例如 RSK、以太坊和以太坊经典。当然,如果区块链确实在本地实施MMR树结构承诺,该协议则将大大简化。 

介绍 HawkClient

简而言之,HawkClient 是一个交互式去中心化的智能合约系统,用于在与外部“远程”区块链同步的一个“主”区块链中维护一个智能合约,从而可以传输具有明确货币价值的信息。在两个区块链之间以镜像方式实现的两个 HawkClient 系统为去中心化代币桥提供了基础,从而允许将代币从一个区块链转移到另一个区块链。

以镜像双 HawkClient 系统为基础的代币桥

我们可以转让任意代币,因为代币转让是以价值绑定的,因为代币具有已知的市场估值,而代币转让提供了明确的代币数额。这消除了对加密级安全性的需求,并使网桥可以在安全性的加密经济模型下工作,从而减小了证明的尺寸。在这种加密经济模型中,转移是分批进行的,并通过保证金进行担保。 

简化的 HawkClient 系统基于四个角色,即证明者、验证者、近似默克尔山脉(AMMR)更新者或AMMR更新者(稍后将对此角色提供更多介绍)以及用户。一个证明者对远程区块链的最佳链作出承诺,并将承诺提交给验证者。之后,验证者发出质询,证明者创建一个 HawkClient 证明,其中包含从最佳链中选择的标头子集,而且还包含链接证明。基于伪随机数生成器(其种子来自于质询),通过从累积难度空间中采样来选择要检索的区块标头的子集。在代币桥的情况下,整个过程大约每天重复一次。 

验证者是在主机区块链中实施的智能合约,用于验证 HawkClient 证明,并使用证明来扩展和维护远程区块链的表达。验证者类似于区块链 SPV 节点,但将在共识中运行。本质上,这就是 RSK 和 btcrelay 所做的。验证者将允许其他证明者在质询期内质询证明或提出替代证明,然后,它将接受具有最高累积工作的证明。但是,与 btcrelay 模型不同,验证者自己与证明者执行质询-响应协议,因此可以阻止典型的交易审查攻击。用户与主机区块链和远程区块链进行交互,并且该交互会在远程区块链中生成收据中记录的事件。这些事件随后由证明者通知给主机区块链。主机区块链上的智能合约可以监听通知的事件并与其进行交互。 

RSK-以太坊桥

RSK-以太坊桥将RSK与以太坊相连,并允许在两个区块链之间转移任何ERC-20代币。IOV Labs 正在积极开发该网桥。该网桥基于 HawkClients。此外,该网桥还具有独特的功能集。例如,它允许证明者选择其愿意承担的保证金的货币金额,以换取授权以提供特定大小的证明,同时确保作弊行为始终是一种失败的策略。例如,证明者可以提供对验证者执行的更多查询的响应,从而减少保证金,但增加证明的大小。如果交易费用很高,证明者可以提高保证金以减少证明大小和交易费用。如果检测到作弊行为,将扣除保证金。作弊行为绝不是一种合理的策略,因此可以保证加密经济的安全性。此外,HawkClient会强制将承诺置于链上,而质询则源自随后的区块哈希,因此攻击者无法脱机尝试数百万种不同的承诺。在假设攻击者控制的哈希率不到所涉及的任何区块链的50%的情况下,攻击者只能做出一个承诺。换句话说,由于系统是交互式的,因此攻击者无法轻松地以脱机方式强制取得承诺,以获取有利的质询。例如,如果我们将作弊概率的上限设置为百万分之一,那么对于作弊的任何尝试都会产生巨大的阻碍作用。通常会变成低密码安全性的这种作弊可能性导致极高的加码经济安全性。最后,该网桥使用一个特殊的简化代币市场,它充当了一个预言机(oracle),以发现与原生代币有关的当前代币价格的上限。该市场的买卖都有很长的延迟(几周左右),我们不期望该市场用于任何实际交易,除非一方试图在代币价格上作弊。有了这个预言系统,我们可以使用本地货币而不是代币来执行保证金,而且我们可以启用多个证明者,而无需每个证明者存入每个可能的代币。

用于从以太坊向 RSK 传递信息的 HawkClient 系统

RSK-以太坊网桥的另一个有趣的功能是,只要愿意提交保证金的任何人都可以成为证明者。此外,我们还开发了一种非常有效的方法来验证ETHash工作证明,而无需特殊的操作码。我们将在以下博客文章中进一步讨论这一点。

HawkClient 证明的主要特色

以下各章节描述了 HawkClient 证明的主要特征,尤其是它们如何交互以实现去中心化网桥的创建。

交互证明

HawkClient 证明是交互式证明。该协议涉及至少一位证明者。每个证明者还具有质询其他证明者可能使用假证明的作用。证明者对一项证明作出承诺,而特殊智能合约(我们将其称为 HawkClient 验证者)选择一个质询种子,从中得出一组查询。然后,证明者必须回应这些查询,将回应发送回验证者智能合约,以对其进行验证。  在此初始阶段之后,其余用户可以质询证明者提供更多确定性,或者他们可以证明自己,并提交具有更大累积难度的区块链证明,以作废之前的证明。

加密经济证明

HawkClient证明具有加密经济学意义,这意味着攻击者成功作弊存在一定的不可忽略的可能性。为了阻止攻击,该协议强制证明者将代币预存为“保证金”,以使攻击者在作弊时的预期收益低于诚信行为时的预期收益。网桥提供了一个子系统,该子系统充当了建立代币价格的自治预言机。

由于基于工作量证明的区块链存在双重支出攻击的风险,因此网桥每天可以转移的货币数额有限。为了欺骗网桥,攻击者可能需要花费24小时租用远程区块链哈希率的51%的成本。因此,假设当前有足够的挖掘硬件可供租用,每个时间段网桥可以转移的数额是有限的。下表显示了截至2020年1月在不同区块链上持续24小时进行的51%攻击的电力成本。

区块链成本(美元)
比特币1200万
以太坊110万
RSK600万

由于加密货币的价格经常变化,因此必须对网桥进行参数化并具有足够大的安全裕度。例如,RSK-以太坊网桥每天从以太坊转移到RSK的价值将限制为60万美元,反方向则为300万美元。

尽管这只是风险模型的简化,但是所有已识别的攻击成本都随着 HawkClient 证明的累积难度(与远程区块链的难度有关)和验证者区块链的难度而呈线性增长。 

渐进式证明

智能合约协议中有两个极端需要验证外部输入。一方面,存在“懒惰”或“乐观”协议,其安全性完全取决于链上层的可用性和审查阻力。在乐观协议中,证明者提出一项声明,智能合约层通过防欺诈证明手段等待对此声明提出质疑。他们以“声明-质询”设计模式运作。如果该声明在一定的固定期间内没有受到质询,该声明则被认为是正确的。这被认为是懒惰协议,因为智能合约本身不会执行任何验证。TrueBit 采用了该模式,而 Arbitrum 最近也采用了该模式。另一方面,一些“强力”协议验证每个外部声明,并且不需要质询,在某些情况下,它们使用强大的计算完整性证明,例如 zk-SNARK。懒惰协议的缺点是它们会激励交易审查和矿工串通。如果我们可以估计交易审查攻击的成本,则可以证明懒惰协议在加密上是安全的。但这是一项艰巨的任务,因为审查制度执行便宜,但难以证明,而且通常不可能归结于特定矿工。矿工的声誉受到威胁,但这对于外部观察员而言很难估价。 

强力协议的唯一缺点是,就执行资源(气体)而言,它们很昂贵,并且必须以某种方式在协议的用户之间分摊此成本。它们之间的中间立场是渐进协议。渐进协议从主张声明开始,此后,验证合约执行某种形式的概率检查以获得初始确定性。之后,其他用户可以对证明进行质询,要求验证者请求更高的确定性,提供另一个竞争性证明,或者等待证明被接受。当第一证明受到第二竞争性证明的质询时,第一证明者就有机会证明更多的累积工作量证明,从而在成为最佳链的竞争中获胜。可能会有更多的证明接着质询,直到证明者之一再也没有要显示的累积工作证明而放弃。最后一个没有质询的证明将被选为最佳链。

FlyClient 的乐观协议、强力协议和渐进协议

对于任何协议,还存在其他不透明的成本,如攻击的可组合性:如果攻击者决定使用单证明来欺骗多个不相关的系统,会发生什么?证明安全性需要知道可以从中获利的每个可能的系统。 

永久零星 MMR 承诺

如果远程区块链本身不支持 FlyClient,HawkClient 则可以在名为 AMMR 更新器的固定智能合约的存储中查找 MMR 承诺。该合约使用 BLOCKHASH 操作码收集过去的区块哈希值并构建最新的树。AMMR 是 Approximate Merkle Mountain Range(近似默克尔山脉)的缩写。该树包含实际累积难度和时间值的界限。不需要在每个区块上更新 AMMR 承诺。我们假设它们平均每隔N个区块通过外部调用 AMMR 更新器合约进行更新。平均每N个区块执行一次,区块时间将是精准的(可以使用 BLOCKTIME 操作码访问区块时间),但是合约并不知道中间区块的区块时间。以太坊合约不知道确切的累积难度,没有此类操作码。因此,在调用 AMMR 更新器合约时,它必须计算累计难度的界限。该协议确保累积难度将始终在百分比错误窗口内。错误界限的存在是合理的,因为在 AMMR 更新之区块难度不会有太大变化。让我们考虑以太坊,其中区块之间的区块难度可以按 +-1/2048 因子进行改变。接受最大距离为 256 个区块的 AMMR 更新意味着该区块难度可以最高增加或减少 6.65%(在最大/最小点,在区块 128 附近)。但是,它必须达到最后一个区块中的实际区块难度,因为 AAMR 更新器使用难度操作码对此进行检查。因此,AMMR 更新器可以计算当前区块中累积难度的范围。在最坏的情况下,如果在之前的 256 个区块中没有发生更新,并且区块难度与上次更新相比没有变化,该界限则代表实际区块链累计难度的增加或减少最高为 3.2%。因此,即使实际难度隐藏在智能合约中,它也可以非常紧密地跟随实际难度。同样,要更改 3.2% 的难度而不被发现,攻击者需要挖掘 256 个区块,否则攻击者必须设法避免接收对 256 个区块标头的查询。

因为 AMMR 树没有存储确切的累积难度值,所以当显示包含许多 AMMR 更新的证明时,连续区块上的累积难度范围将重叠。这意味着,如果攻击者以特定的 x 累积难度质询对区块索引的查询,她可以使用这种歧义在难度范围包括 x 的几个相邻区块之间选择一个。因此,攻击者可以在每个不重叠的时间间隔内仅挖掘一个区块,从而减少所需的工作量。为了防止这种攻击,证明者还必须承诺第二个默克尔树,即确切的默克尔山树(EMMR),其中包含每个区块的确切累积难度和时间。通过在每个中间节点处的累积难度和累积时间来扩充此树。现在,在 AMMR 节点上执行的原始功能和验证将在这两个树之间进行拆分。对于每个查询,证明者必须显示 AMMR 分支和 EMMR 分支。EMMR 分支用于查找具有特定累积承诺的区块编号,然后遍历 AMMR 树以查找该区块编号。这样做时,将对所有累计难度和累计时间难度范围进行交叉检查。下图描述了一个假设的区块链,其累积难度为0,每个区块的难度为稳定值 10。按照共识,难度可以在每个区块上增加或减少 10%。在8个区块之后,实际累积难度(80)与不知道每个中间区块的实际难度即可达到的最小和最大累积难度有所不同。仅知道最后一个区块的难度。每个绿色框显示最小和最大累积难度。在检查证明过程中中,使用 EMMR 树定位区块,然后按区块编号查找 AMMR 树中的分支。在每个步骤中,都要检查精确范围是否包含在有界限的范围内。

确切和近似的默克尔山脉树

与 HawkClient 进行交互的所有系统都必须知道 AMMR 更新器合约的地址。任何人都可以通过检查创建 AMMR 更新器合约的交易以验证部署的代码。但是,有一种微妙的攻击。AMMR 更新器的创建者可以在另一个区块链中使用相同地址创建相似的合约,该区块链共享区区块标头结构和工作证明并且以前已经分叉。在此区块链中,可以使用不同的 VM 字节码部署合约。为了防止这种攻击,MMR 更新器合约必须与 CREATE2 一起部署,并使用 CHAINID 操作码(EIP-1344)来验证其在构建过程中是否在目标平台上运行;如果不是,则放弃构建。自伊斯坦布尔硬分叉以来,该操作码可在以太坊上使用。  

摘要

在 IOV Labs,我们正在研究一个去中心化的的网桥,该网桥可以连接主要的工作量证明区块链。该网桥的核心是 HawkClient 协议,它是 FlyClient 的扩展。FlyClient 和 HawkClient 之间有一些区别。在 HawkClient 中, 

  • 证明是交互的
  • 证明的安全性是加密经济而非加密学
  • 该系统要求提交保证金。如果用于双向网桥,则可能需要提交以本币和代币支付的保证金
  • 证明是渐进的
  • AMMR 承诺是零散的但持久的,无需更改区块链的共识
  • 证明者还承诺包含确切累积难度的第二个 EMMR 树。该树不需要在共识中产生。 
  • 证明涉及一个或多个证明者以及一个智能合约验证者。证明者和智能合约都可以成为质询者。
  • 最佳链单调增加且不变
  • 最佳链的增长被延迟(从已实证的提示到最佳链提示的潜伏)

在两个区块链之间以镜像方式实现的双 HawkClient 系统构成RSK-以太坊网桥的基础。该网桥目前正在开发中,很快我们将宣布其在 RSK 测试网上的部署日期,同时我们将向社区发布源代码,提供关于如何从钱包和智能合约中使用它的所有信息。我们很高兴能开发出第一个真正的去中心化的加密经济网桥,而RSK-以太坊网桥将是为所有区块链构建通信主干的第一步,使所有与 EVM 兼容的区块链代币可以通过 RSK 用于 DeFi on Bitcoin(比特币的去中心化金融)应用程序。