跨链加密货币资产转移是开发团队在 Cosmos 中实现的核心功能。在 Cosmos 生态中,加密资产可以通过 IBC 协议进行转移。IBC 协议是一种能够促进互操作能力的跨链通信协议(Inter-Blockchain Communication Protocol)。值得一提的是,IBC 协议只有在转出和转入区块链都具有最终性时才能使用。

但是,比特币和以太坊都不具有最终性保证;他们都是概率最终性。[注:不久的将来 Casper the Friendly Finality Gadget (FFG) 实现后,以太坊会具有最终性。(编者注:中译本见文末超链接)] 概率最终性意味着,随着某个区块后面的链的长度的增加,这条链也就更不容易被重新组织,也就更能让我们相信这个区块是“最终的”。但是因为概率最终性不能完全防止区块链的重新组织,所以通过 IBC 协议安全地跨链转移资产是不可行的。这就提出了一个问题:Cosmos 分区(Zone)是如何与已经存在的不具有最终性的区块链进行互操作的。

挂钩分区(Peg Zone)

挂钩分区是 Cosmos 的解决方案。一个挂钩分区是一条基于账户模式的区块链,它将 Cosmos 中的分区与像 Bitcoin、Ethereum 这样的外部的区块链连接起来。它扮演了一个适配器分区的角色;或者是像在 Casper 演讲中说的那样,它是一个“最终性工具”。通过设定一个“最终性阈值”,当区块链中新增一定数量的区块后认为区块链具有了伪最终性(Pseudo-finality)。一般来说,这种“连接”分区设计可以被认为是一种两路挂钩(2WP)。

Tendermint Core这样的共识引擎提供了实时最终性。如果想更好的了解它是如何工作的,请阅读关于 Tendermint 共识的更多内容

连接以太坊

以太坊挂钩分区将是 Cosmos 中第一批实现的这种分区之一。它与 Ethermint 非常不同,后者剥离了 PoW 挖矿,然后在 Tendermint 共识机制和新的网络协议栈之上实现 EVM。而以太坊挂钩分区会使得 ERC20 代币和以太币能够在原生的以太坊和 Cosmos 网络中通过 IBC 连接的所有分区间转移。

挂钩分区的细则还在开发中,你可以关注它的 Github 代码库: Peggy

Peggy

在 Cosmos 中,因为我们可以使用 IBC 协议转移任何加密资产,所以容易进行互操作。然而,在 Cosmos 和以太坊之间转移加密货币在技术上是十分复杂的,这是因为 IBC 数据包不能以太坊中被高效地解码。这又是因为 EVM 没有设计成与 IBC 兼容。这些问题只有 Peggy 才能解决。

Peggy 有一个曲折的开端。第一个尝试把 Cosmos 和以太坊连接起来的是一个叫 ETGate 的黑客马拉松项目,但后来证实 ETGate 需要大量消耗 Gas。ETGate 是由 Joon 设计的,他是第二届 HackAtom 的大奖获得者。他也加入了 Cosmos 开发 Peggy。

ETGate 最初尝试直接将 Cosmos 枢纽(Hub)和以太坊连接起来的。它尝试在 EVM 内部编译出兼容性。就像这样:
[ 以太坊 ] <- ETGate -> [ Cosmos 枢纽 ]

当面对 Tendermint 和以太坊使用不同的构件的问题时,这种设计是非常不实用的。Tendermint 中使用的每一个基础构件都与以太坊中的基础构件不兼容。事实证明,尝试在 EVM 中客服兼容性问题、构建可互操作区块的成本非常昂贵。

以下是构建可互操作区块的模块分析:
  • 序列化格式: Tendermint 的序列化对象的编码方法是 go-wire。以太坊用的是 RLP (Recursive Length Prefix)。
  • 签名方案: Tendermint 使用的是 ed25519,而以太坊用的是 secp256k1。
  • 数据结构: Tendermint 把键值对存在 IAVL+ 树中,而以太坊把它们存在 Patricia 树中。

ETGate 的设计消耗大量计算资源,因为它在 EVM 中解码 IBC 数据包。IBC 数据包中的内容是 Tendermint 头、交易、IAVL+ 树证明和 ed25519 签名。

在意识到我们可以通过把解析转换机制放在 EVM 之外,即定制的区块链中完成,此方式将节省大量 Gas,Peggy 的设计思路就变得清晰了。

Peggy 的 5 个组成部分

  1. 以太坊智能合约:将会有一组以太坊智能合约扮演资产保管人的角色,它们能够保管以太坊中的代币和 Cosmos 中的代币。
  2. 见证人(Witness):见证人组件能够证明以太坊中发生的事件。100 个区块(也就是最终性门槛)产生之后,见证人会在不具有最终性的区块链上实现伪最终性。它运行一个完全验证的以太坊节点,以便通过将 WitnessTX 提交到挂钩分区中来证明以太坊中的状态更改。我们在这里使用一个共享的安全模型,让一组 Cosmos 枢纽验证人同时作为挂钩分区的见证人。
  3. 挂钩分区:挂钩分区是建立在 Tendermint 上的,用于连接不同类型区块链。它允许用户执行或者查询交易。这就是 Cosmos 如何与以太坊进行通信的。
  4. 签名者:签名者使用以太坊能够解析的 secp256k1 签名方案对信息进行签名,以便智能合约能够高效地验证签名。签名组件通过 SignTx 消息生成一个 secp256k1 签名并将其发布到挂钩分区中,以便在管道中的智能合约中转发事务进行验证。
  5. 中继器: 中继器组件批量转发交易信息。这些交易由签名者模块进行签名后被转发到以太坊智能合约中。

总结

现实世界中的例子:把 Cosmos 中的代币转到以太坊中
例如,你想取出一些 Cosmos 的 Photon 代币并且把他们变成等值的以太币。该怎样利用 Peggy 完成的呢?为简单起见,我们会略去低层次的技术细节,只描述主要的流程。

  1. 首先从 Cosmos 枢纽中开始。你先通过 IBC 协议把一些 Photon 转移到挂钩分区中。挂钩分区接收到传来的 IBC 数据包:一个包含发送 Photon 代币的消息。签名者监视着这个挂钩分区并且对这些 IBC 交易进行签名,高效的把这些签名转换为以太坊能解析的 secp256k1 格式的私钥。这样一来,你的交易就在挂钩分区上完成了签名。
  2. 关注这个挂钩分区的中继器等到他们看到超过 2/3 的签名者这个交易进行了签名,然后将你签署的交易批量处理为通过 IBC 发送的所有其他交易的清单。然后他们把附有签名的列表转发到以太坊智能合约运行的 EVM 上。
  3. 以太坊智能合约接下来检查交易列表是否有效。针对 Photon 智能合约会生成它的 ERC20 版本。智能合约产生 ERC20 Photon 之后,它将 ERC20 Photon 发送到你在以太坊主网中的地址上。
  4. 此时,你可以方便地通过例如 0x protocol 或是 OmiseGO 这样的 ERC20 去中心化交易所(DEX)把 ERC20 Photons 转换成ETH。

最后

我们正在进行 Peggy 的早期设计。相关以太坊智能合约已经编写完成并且正在进行测试。在许多方面上,Peggy 甚至比 Cosmos 枢纽更加复杂。为了使其能正确的运行,Peggy 将需要进行数次迭代。大家可以期待 Peggy 在今年下半年上线,也就是在 Cosmos 主网上线后。对于以太坊项目而言,很多问题都亟待解决:可扩展性解决方案的需求,吞吐量的增加以及降低运行成本。以上问题都十分重要。因此,Peggy 的部署是重中之重,在开发其余生态系统项目的同时,Cosmos / Tendermint 团队已经将其大部分资源用于 Peggy 的开发。

正在进行的工作

以太坊智能合约一旦部署之后就无法修改,因此非常难以更新。在智能合约更新管理方面还缺乏组织结构。Peggy 的发展路线图迫使我们应对这种不确定性,但这是我们希望能够产生具体解决方案的一个研究领域。

转载自:https://ethfans.org/posts/the-internet-of-blockchains-how-cosmos-does-interoperability-starting-with-the-ethereum-peg-zone