目前为止,Ethereum和EOS是最大的两家智能合约区块链项目,无论是根据市值还是用户活跃度计算。在这篇文章中,我们会介绍Waterloo bridge — 一种高效且完全去中心化的方式,将通过以太坊智能合约实现EOS轻量客户端,同时也通过EOS智能合约实现以太坊轻量客户端。这将实现两个区块链之间的跨链通信,能够将资产从以太坊转移到EOS,反之亦然。这种跨链互操作性是区块链生态系统在过去几年中长期以来的一个雄心勃勃的目标,在金融、可扩展性和隐私方面都有潜在的应用。
在下一节中,我们将正式定义和解释这一跨链中继桥的期望功能。然后,我们将介绍一个把EOS的操作引入以太坊智能合约的中继算法,并通过以太坊kovan测试网络提供概念实现的证明,以证明方案的可行性。之后,我们将展示一个通过EOS智能合约实现以太坊操作的中继算法。最后,我们会讨论后续步骤和相关工作。
Relay Bridge
中继桥实现两个区块链头字段(headers)之间的双向中继。在中继桥中,区块链A的区块头字段不断被提交给区块链B上的智能合约,区块链B通过实现轻量客户端逻辑以验证头字段的有效性。同理,区块链B的区块头字段信息将提交给区块链A上的智能合约。
一个简单的例子是BTC Relay,它实现了从比特币到以太坊的单向中继。在那里,以太坊智能合约计算提交的比特币头字段的难度。每个头字段的有效性证明相当于检查提交头字段的最长链。
从头字段到交易
在我们所知的所有区块链协议中,区块头字段包含该区块种每笔交易的数学证明。通常是以所有交易的merkle root的形式。因此,验证头字段的智能合约也可用于验证该头字段中是否存在某笔交易。
一旦智能合约可以验证交易,那么便还可以验证某个操作,例如转移代币。我们建议读者参阅Peace Relay报告获得关于如何证明某项交易行为的概念证明。
跨链资产转移
通过在每个区块链上部署锁定,铸造和燃烧合同,中继桥可以促进两个区块链之间的资产(例如,代币)的转移。当代币被发送到区块链A上的锁定合同时,区块链B上的铸造合同将在区块链A上提交代币锁定交易时产生相应数量的wrapped代币。当wrapped代币被发送到区块链B上的燃烧合同时,区块链A上的锁定合同将在提交证据时将其解锁。这有效地将区块链B上的wrapped代币与区块链A中的原始代币以1:1的比例挂钩。
轻客户端安全模型
由于智能合约充当轻客户端,所以不会验证区块内容的有效性,而只验证区块头字段。因此,理论上智能合约也可以批准无效区块。然而,加密经济激励机制几乎完全规避了这个问题。
EOS → ETH Relay
我们选择仅中继EOS区块出块方(BP)集的变动,而不是所有EOS区块头字段。我们将在后续章节中解释这种方法。首先,我们简要介绍EOS共识机制,然后讨论EOS区块最终性,之后我们会解释EOS区块头字段格式,最后解释中继桥的工作原理。
EOS共识机制
EOS的共识协议是委托权益证明(dPOS)。 EOS代币持有者不断投票(委托)他们最喜欢的区块出块方。获得最多选票的21个区块出块方以循环方式生产区块。每个生产者最多可生成12个块并将其发送到网络。每个块都延伸区块链中的最后一个区块,并由出块方进行数字签名。
投票过程本身也发生在链上,投票结果反映在一个块头字段中。即,每当BP集改变时,新BP集的公钥被编码在专用区块头字段中,而另一个头字段属性指示新BP集何时启用。
EOS区块最终性
EOS协议的基本安全假设是BP集的2/3 + 1是诚实可靠的。即,21个BP中有15个总是诚实的。因此,概念上,当15个BP生成了扩展区块B的区块时,区块B就是最终的。但是理论上,还需要在特定时间间隔期间额外的一轮BP扩展。为简单起见,我们选择从这项工作的范围中省略这些细节,但是我们的方法可以扩展到完整的最终性方案。
EOS区块头字段格式
为了理解客户端如何中继BP集更改并证明区块的最终性,以下将展示EOS头字段格式
struct block_header {
account_name producer;
uint16_t confirmed;
checksum256_type action_mroot;
uint32_t schedule_version;
optional<producer_schedule_type> new_producers;
… // additional block header fields are not displayed as they are
// not relevant to the scope of this work
}
每个区块头字段详细表明了其出块方帐户。它必须是事先在链上选出的当前出块方集之一(schedule)。
一旦区块上新的出块方集被敲定(不可逆),新出块方列表将出现在块头的new_producers字段中。该列表包括新BP的名称和公钥。
一旦具有新出块方列表的区块变被敲定,新计划即被启用且schedule_version字段递增。通过使用新的出块方列表提交区块的最终性证明,可以证明BP集发生了变化。
confirmed字段用于BP以批准一系列先前的区块。超级多数(2/3 + 1)BP批准区块(不可逆)的条件要求它们不仅要扩展它的附加生成区块,而且还要使区块在所有这些BP的确认范围内。目前,我们在最初的POC中忽略该字段并假设所有先前的区块都已确认。
观察仔细的读者会注意到前之前的区块merkle root不是区块头字段的一部分。但是,它其实是隐藏,因为每个出块方的签名不仅包括头字段哈希,还包括所有先前头字段的merkle root。客户端通过跟踪头字段可以基于merkle root构建证明。
最后,action_mroot字段用于跟踪到目前为止所提交的所有操作的收据(例如EOS支付,代币转移)。
用户可以重建这样的收据并显示它是来自一个不可逆的区块,即可证明一个区块链上的操作确实发生过。
EOS → ETH Relay
我们构建了一个智能合约,可通过以下方式验证EOS操作:
1. 合同从一组初始BP开始。
2. 每当BP的集合发生变化时,变更的最终结果以及新的BP集合的证据都会转发给合约。如果证明有效,合同将验证证明并存储新集合。
3. 为了验证在EOS链上的某个操作,所需证据包括(i)由当前BP集签名的区块头字段B; (ii)之前区块的头字段B’,其中包含验证的动作以及证明该操作包含在头字段中的merkle分支; (iii)一个merkle分支,以证明B’在B区块之前的merkle树。
我们还构建了一个客户端,以便于(2)中的中继和第(3)的构造证明。我们注意到,在最坏的情况下,BP的集合可能每2分钟发生一次变化。然而,在撰写本文时,自9个月前EOS链创立以来,该集合仅改变了692次。因此,平均而言,每8小时发生一次变化。
Jungle2 testnet EOS→ETH中继POC。 1. 改变BP集的证明。 2. 证明任意区块B = 10800是最终的。 3. 证明来自先前的区块B` = 10776的动作在块B之前是在链中。
概念证明
为了证明我们的方法的可行性,我们在以太坊kovan测试网上部署了概念验证以太坊智能合约。中继的区块来自EOS Jungle2.0 testnet。
根据第一个出块方集合,初始计划被设置在合约中(版本1),可参考区块#6713中(较早的区块都是由一个单一的eosio出块方生成的)。
之后根据计划上的一个改变(版本2),通过提交包括验证和链接区块#9313和其后的14个相应的区块(#9325,#9337,#9349, #9361,…,#9481)被中继。
基于新的计划区块,#10800被中继并通过提交将其与14个相应的区块(#10801,#10813,#10825,#10837,……,#10945)链接的证明来证明是最终的。
一旦块被中继,就可以验证来自早期区块的操作。实际上,在POC的最终tx中,我们证明区块#10776确实链接到区块#10800并且验证发生了从帐户junglefaucet向帐户megasuper333发送100.0000 EOS的动作。实际证据是基于上述代币转账操作的哈希值(该操作是从我们运行的本地客户端获得的)。
智能合约代码可在这找到:https://github.com/KyberNetwork/bridge_eth_smart_contracts
ETH → EOS Relay
将以太坊头字段中继到EOS智能合约的技巧与BTC Relay非常相似。在此中继中,太坊头字段被提交给EOS智能合约,该合约计算头字段的工作证明难度并维护所有提交的头字段。如果区块头字段位于树中最长的分支(也称为最长链)上,则它是有效的。
目前出现的一个困难是以太坊工作证明哈希函数需要超过1 GB的数据来计算。我们计划使用我们在SmartPool中使用的相同新技术来克服这一困难。我们将在未来几周内提供更多细节和概念验证。
我们解决方案的另一个关键推动因素是EOS网络中的较低的计算成本(费用)。
结论和未来的工作
我们在EOS和以太坊之间展示了一个实用的中继桥。解决方案的关键促成因素是:
1. 用于DPOS(即EOS)的轻客户端只需要维护一组出块方集合。
2. 高效算法验证以太坊工作哈希函数的证明(基于SmartPool算法)。
3. EOS网络的计算成本低。
第一项使EOS→ETH中继变得高效,后两项使ETH→EOS中继变得高效。
我们的下一步是实开发能够验证以太坊区块头字段的EOS智能合约。
从长远来看,我们计划使用这样的中继桥在以太坊和EOS之间转移资产和代币,并利用每个平台的优势在两个平台上实现交易活动。例如,由于其较高的每秒交易率,EOS链具有实现更高频率交易的优点。同时以太坊被区块链社区视为更安全,更适合例如DeFi等金融项目。
相关工作
第一个,也是目前唯一的可用中继项目是BTC Relay 他能够将比特币头字段转发到以太坊网络。虽然这个项目允许以太坊合同验证比特币转移,但它不能促进链之间的资产转移,因此它是单向中继。
Peace Relay(也由Kyber领导研究)是第一个在两个智能合约区块链之间建立双向桥梁的项目,即以太坊和以太坊经典。然而,由于计算(燃料)成本不切实际,该项目从未被实施过。我们的方法利用了一些独特的EOS区块链属性,从而实现了更高效的实现。
以太坊和EOS之间的概念验证(POS)中继由Everipedia实现为C ++参考代码。但是,它的计算和存储(RAM)成本很高,因此在EOS主网上运行是不切实际的。成本高昂的原因是实施了完整的工作量证明算法,这与我们实施轻型SmartPool验证算法的方法相反。
EOS和以太坊之间的BancorX中继以及比特币和以太坊之间最近的WBTC DAO采用了一种更集中的方法,在这种方法中,可信联邦通过冻结一条链上的资产并将其放在另一条链上来执行从一条链到另一条链的资产转移。我们的方法不同,因为它是完全去中心化的。
最后,Wanchain,Polkadot和Cosmos等一系列解决方案旨在通过允许形成一个开放的联邦来实现链接之间的资产转移,从而桥接区块链。然而,中继桥的基础安全性受到联邦基础安全的限制。在我们的方法中,安全性源于EOS和以太坊链的安全性,因此具有与底层链类似的安全级别。