跨链五部曲之:开篇

跨链五部曲之:开篇

区块链技术发展到现在,从开山鼻祖比特币开始,涌现出了各种形形色色的链。

由于每个链都是独立的、垂直的封闭体系,当前的链圈只是由许多彼此割裂开来的区块链「孤岛」构成,链与链之间无法进行价值和数据的交换。

讽刺的是,声称去中心化的区块链之间的价值互换却主要依靠中心化的交易所来完成。

为了实现区块链之间的原子交易、资产转换、区块链内部信息互通,涌现了各种 跨链 技术。

《深度解析:区块链跨链技术》V神:区块链跨链技术大规模应用将在一到两年内爆发 这两篇文章总结了目前主流的跨链技术:

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

早期跨链技术关注的是资产转移,这类代表有瑞波和 BTC Relay;现有跨链技术则侧重于跨链基础设施,典型代表有 Polkadot 和 Cosmos;新出现的 FUSION 想要做价值互联网时代的金融(即加密金融),它实现了高效率的、面向多币种和多种触发机制的增强型智能合约,可以支持丰富的的跨链金融应用。

这些跨链技术,网上都有很多理论性的分析文章,但理论归理论,“纸上得来终觉浅”,没有一个实际的例子,总感觉领会得不够透彻。

这个系列,我将由浅入深地给大家介绍一个基于 Cosmos 生态的跨链例子:Basecoin

Wait……先别急,在此之前,你得补习下跟 Basecoin 相关的背景知识。

为了研究一个点,你需要搞清楚它的来龙去脉,因果背景……没有前面这些知识的铺垫,我估计没人知道我在说什么。

首先,有必要先了解下 Cosmos。《前沿跨链技术Cosmos简介》 这篇文章介绍了 Cosmos 的前世今生,对于初学者来说是很好的科普资料。这里,我略作总结:

Cosmos 是跨链开源项目,它的目标是建立区块链的“互联网”,在多链多币的世界里,通过跨链代币转移技术构造一个深度集成的代币经济生态系统。

Cosmos 的底层是 Tendermint,它包含两个核心组件:一个区块链共识引擎(Tendermint Core)和一个通用的应用程序接口(ABCI)。

Tendermint 共识引擎采用了 PBFT 共识算法,通过一个基于弱同步的假设的两轮投票机制,最多可以容忍 1/3 的拜占庭节点(可简单理解为“异常节点”和“作恶节点”),它也是确定性一致算法,区块链保证永不分叉,共识效率比较高,秒级出快,TPS 可达到上千。

Tendermint 通过提供一个简单的 ABCI 接口,将区块链底层复杂的共识逻辑和应用程序逻辑分离开来。举个大家比较熟悉的例子,比特币。比特币是一个加密货币区块链,每个节点维护了一份完整的 UTXO 数据库。如果有人想基于 Tendermint 创建一个类似比特币的 ABCI 应用,Tendermint Core 将会负责:

  • 在节点间广播区块和交易
  • 维护区块链的不可变性

而 ABCI 应用程序将会负责:

  • 维护 UTXO 数据库
  • 验证交易的加密签名
  • 阻止花费尚未存在的交易
  • 允许客户端查询 UTXO 数据库

ABCI 应用的合约可以用任何编程语言进行编写,这比起以太坊应用的合约受限于 Solidity 这么一种冷门的编程语言来说,区块链开发者们纷纷表态“不能同意更多”。

Cosmos 中使用的跨链技术用的是 侧链 机制,它规定了一套跨链通讯协议(IBC),通过它来实现的代币的跨链转移,我们这个系列要讲的 Basecoin 说白了也是一个 IBC 的具体实现。

IBC 的目的是让区块链彼此之间充当一个轻量级的客户端,由于 Tendermint 底层使用 PBFT 共识算法,多个校验节点在处理新的区块之前会先达成一致,因此,在客户端上进行验证是简单可行的:只须校验最新块的签名并验证默克尔树的 PoS 即可。

IBC 工作流程如下:

假设我们有两条区块链:Test_chain_1Test_chain_2,从 Test_chain_1 发送数据到 Test_chain_2:

当然,真正的 IBC 跨链实现没有这么简单,里面涉及到很多技术细节,这个,我们后面会详细讲解。

好了,前期知识铺垫得差不多了:我们从跨链技术的背景讲起,讲到了 Cosmos,Tendermint,ABCI,IBC,在这个过程中,大家脑海里应该被我灌输了这么几个概念:

  • Cosmos 是一个专注于跨链资产转移的代币生态系统
  • Cosmos 的底层是 Tendermint 共识引擎
  • IBC 是 Cosmos 生态内部的一套跨链通讯协议
  • Basecoin 是一个基于 Tendermint 的 ABCI 应用
  • Basecoin 是一个基于 IBC 协议的跨链应用

终于轮到介绍 Basecoin 了,这个项目是 Tendermint 官方“维护”的一个标准的 ABCI 例子,Github 地址在 https://github.com/tendermint/basecoin, 不过你现在去看的话,README.md 上提示你一个硕大的 DEPRECATED,告诉你该项目已过期,不维护了。咋回事呢?原来它已经被 Tednermint 官方移到 Cosmos-SDK 下面作为 IBC 核心组件了,它最后的代码提交日期停止在 Latest commit 47dd2c6 on 28 Jul 2017

若是寻根问祖的话,Cosmos 内部的 IBC 实现其实衍生自 Basecoin,它经过社区内部测试,版本的不断迭代,已经比较成熟,因此,我才拿它来研究跨链到底是如何实现的。

这个开篇,该讲的应该都讲得差不多了吧,下期开始正式介绍主人公 Basecoin