跨链技术背景

Posted 跨链技术践行者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了跨链技术背景相关的知识,希望对你有一定的参考价值。

随着区块链技术的火热,越来越多的企业和开发人员加入到区块链的浪潮中,市面上也出现了许多不同类型的链,应用在金融、健康医疗、供应链、资产管理和溯源等领域。然而大部分链上应用(加密货币或者智能合约)都无法跨越当前链的边界,不能与其他链协同合作实现价值的流通从而限制了区块链的发挥空间。如何能让不同类型的链协同合作实现价值的流通成了探索的方向,这也是跨链技术的起因。跨链技术是打开链与链之间互通的钥匙,能很好地解决价值孤岛的问题,建立价值网络的桥梁。

目前主流的跨链技术包括:

  1. 公证人机制(Notary schemes)
  2. 侧链 / 中继(Side chains/relays)
  3. 哈希锁定(Hash-locking)
  4. 分布式私钥控制(Distributed private key control)

而本文所要介绍的主角 Cosmos 就是中继技术的一个典型案例,接下来将逐步为大家揭开 Cosmos 的面纱。

Cosmos 概述

Cosmos 是 Tendermint 团队推出的一个支持跨链交互的异构网络,它最终的目标是创建一个区块链互联网,允许大量自主且易开发的区块链互相扩展和交互。基于 Tendermint 开发,采用的 Tendermint 共识算法,是一个类似实用拜占庭容错共识引擎,具有高性能、一致性、具备拜占庭容错等特点。关于 Tendermint 的详细介绍可以参考本文上篇:深度剖析区块链跨链技术 Cosmos(上篇)。

Cosmos 网络由许多独立的并行区块链组成,网络中第一个区块链是 Cosmos Hub,其他的并行链称为 Zone,通过跨链协议(IBC)与 Hub 进行跨链操作。

目前 Cosmos
Hub 已经经过了多个版本的迭代,MVP 版本也趋于完成,同时测试网络也在前不久更新到 gaia-7001,但主网的上线时间团队还未给出,所以对 Cosmos 感兴趣的朋友还需要一些耐心。

Cosmos 架构

从 Github 上可以看出 Cosmos 主要的代码是 cosmos-sdk,它包含 Cosmos
Hub 的程序代码,同时也是一个区块链开发框架,为其他区块链开发者提供一些通用的功能模块,比如:共识,P2P 网络,IBC,账户,治理,认证等。大致框架如下:

不难看出 cosmos-sdk 其实就是一个 ABCI 应用。主要有:

  • baseapp:定义了一个基本 ABCI 应用的模版,与 Tendermint 通信。开发者也可以根据自己的需求重写。
  • 应用程序:包括 gaia、basecoin、democoin。其中 gaia 就是 hub 主程序,basecoin 以及 democoin 是提供的两个示例应用。
  • plugins:cosmos-sdk 的基本单元,每个 plugin 都是 baseapp 的功能扩展,包含各自的消息和交易处理逻辑。目前 SDK 已经集成了一些重要的 plugin:
  • staking:POS 相关的实现,包括:绑定,解绑,通货膨胀,费用等操作。
  • ibc:跨链协议 IBC 的实现,也是 Cosmos 支持跨链的主要插件。
  • governance:治理相关的实现,如提议、投票等。
  • auth:定义了一个标准的多资产账户结构(BaseAccount),开发者可以直接嵌入自己的账户体系中。
  • bank:定义资产的转移。

因此基于 cosmos-sdk 框架,利用其插件功能,可以非常快速的开发出属于自己应用的区块链,同时也可以很方便的加入 Cosmos 生态网络,支持不同链之间的互操作,在插件的设计上和 EOS 也有异曲同工之妙。

那么如何使用这些插件功能呢?可以参考 cosmos-sdk 提供的示例应用,以 basecoin 为例,只需要几步:

  1. 创建自己的 ABCI 应用,可以嵌入 baseapp,也可以重载 baseapp。
  2. 定义自己的账户体系,可以嵌入 BaseAccount。
  3. 选择所需要的插件,注册到消息路由。

**

**

Cosmos 跨链

Tendermint 团队在 15 年就开始考虑跨链技术,跨链也是 Cosmos 网络最重要的一个特性。一般来说,实现跨链需要做到:

  • 共识算法需要具备及时最终性,也就是说在出块之后,需要能够快速确认为不可逆(固定不变)。
  • 交易确认需要高效独立的证明方法,目前的做法都是基于 Merkle 证明。

基于 cosmos-sdk 的区块链使用了 Tendermint 共识算法就非常容易能够做到。除此之外,Cosmos 的区块链间通信协议(IBC)将不同区块链连接起来,达到价值转移的目的。

IBC 协议

IBC 协议是针对 Cosmos 网络设计的,依赖其及时最终性的特点,用于 Hub 与 Zone 之间消息传递。IBC 协议中设计了两个消息:

  • IBCBlockCommitTx:发送方所在区块链的最新的区块信息。
  • IBCPacketTx:跨链交易本身的信息,及其在发送方链中被打包的区块信息。

但有了消息的传递,接收链如何校验信任消息呢?

在 IBC 协议设计里,两个链建立连接之前需要进行彼此注册,有两个作用:

  1. 保存对方链验证者集合以及 Merkle 证明的算法,这样接收链才能确保消息的正确性和来源的可靠性。
  2. 为对方链创建两个可靠队列,一个队列存放所有对方链的消息(outgoing),一个队列存放来自对方链的消息(incoming)。

我们以 chain1 中用户 User A 转 100mycoin 给 test-hub 用户 User B 为例看看 IBC 整个的工作流程如下(基于目前 IBC 实现代码):

整个工作流程可以分为三个阶段:

  1. User A 向 chain1 提交跨链交易,chain1 执行该交易,并将交易存入 outgoing 队列。
  2. relayer 从 chain1 中对应 test-hub 的 outgoing 消息队列取出跨链交易,提交到 test-hub。
  3. test-hub 执行交易,放入 incoming 消息队列。

大家可以看到,整个流程比较简单,而且涉及的消息只有 IBCPacket。目前 Cosmos 跨链实现并没有全部完成,只是完成了一个简单的交易处理流程。

PegZone

基于 cosmos-sdk 开发的区块链能够轻松满足实时最终性,然而现存的 Bitcoin 和 Ethereum 这类使用 POW 共识的区块链并不具备此特点,只能属于概率最终性,无法防止区块链的回滚。对于这类链,团队采用 PegZone 方案来解决。

PegZone 本身其实是一条代理链,实时跟踪原始链的状态,通过设定一个安全阀值,等待原始链区块增长数达到安全阀值时就认为原始链的状态达到了伪实时最终性(回滚概率小),这点和轻客户端钱包验证是相同的原理,例如比特币安全阀值通常设置为 6,以太坊安全阀值可以设置为 20 或者 100。而 PegZone 本身具备实时最终性,就可以通过 IBC 与 Hub 相连,从而实现跨链。

接下来还是用例子来说明下,以 Ethereum 为例来看,有兴趣的朋友可参考 Github 上的 cosmos/Peggy 项目。示意图如下:

上图我们可以看出 PegZone 可以分为 5 个部分:

  • Smart Contract:资产托管的角色,保管以太坊中的代币和 Cosmos 中的代币。主要提供了 lock、unlock、mint、burn 四个方法。
  • Witness:是一个以太坊全节点,监听以太坊合约的 event,并等待 100 个区块产生后,封装 WitnessTx 提交到 PegZone 中来证明在以太坊内状态更改。
  • PegZone:PegZone 是基于 Tendermint 的区块链,负责维护用户的账户信息,允许用户之间资产的转移,并提供交易查询。
  • Signer:使用 secp256k1 对交易进行签名,以便签名能够高效的被智能合约验证,对应于智能合约的校验者公钥集合。
  • Relayer: 中继器负责交易转发。将所有 Signer 签名后的 SignTx 转发到 smart contract 中。

现状

跨链是 Cosmos 的重要特性,但在从目前的代码实现上感觉有些遗憾:

  • IBC 协议目前只完成了基本消息的传递功能,并没有安全校验、注册机制以及一些异常的处理。
  • PegZone 机制处于暂停状态,机制设计上团队也称处于实验性质。
  • 对于没有基于 cosmos-sdk 开发,但符合实时最终性的链无法使用 IBC,无法做到异构链的兼容。它们可能使用不同的:
  • 签名算法
  • 序列化方法
  • Merkle 证明的方式

总结

通过上下两篇文章,从架构,核心技术——Tendermint、跨链、源码以及现状等方面对 Cosmos 进行了详细介绍。整体来讲,Cosmos 更偏向于一个区块链开发框架,让开发者可以只需要专注于自身业务而不需要考虑区块链底层技术实现,所以在架构设计上采用了灵巧的插件设计,开发者可以按需使用。

Cosmos 跨链协议部分从代码上看,完成度还不太高,有些遗憾。并且设计上跨链交易都需要通过 Cosmos
Hub,这样会过于依赖 Hub,对 Hub 本身的承载压力是个考验,目前其他的一些跨链实现方案也都需要依赖自身的一条链,都会存在这个问题。笔者觉得跨链未来会发展成标准化协议,就像 TCP 之于互联网,而不是依赖某条具体链,通过定义标准化的模块,通过路由将跨链交易转到目标链,目标链完成对原始链的校验后,确认交易合法性,并执行交易。设想示意图如下:

以上是关于跨链技术背景的主要内容,如果未能解决你的问题,请参考以下文章

三分钟搞定跨链交易之中继链技术

科普 | 跨链技术方案之哈希锁定

跨链跨链技术“分布式私钥控制”

解析:跨链技术及应用全景图

区块链BaaS云服务(17)纸贵科技Z-BaaS平台“跨链”

Chainge橙子跨链钱包:用技术驱动简化公链资产跨链