Into the Cosmoverse|乌托邦周报 #4

I believe we exist in a multiverse of universes.
——Michio Kaku

多元宇宙不仅是许多人设想的现实,也是 Cosmos 期许的未来。

在多元宇宙中,每个平行宇宙有自己的物理法则和参数;而在 Cosmoverse 中,每个区块链“宇宙”也有自己的特色,比如有的是 DNS 宇宙,有的是发票宇宙,有的是高速支付宇宙,不同宇宙为各自的特色业务发展提供良性的土壤。

这些迥异的通过一套跨链通信协议连接起来,从而构成区块互联网(Internet of Blockchains)。本文将本着接地气的原则,讲讲区块链间的这套通信机制。

本文要点:

  • 什么是 IBC

  • 为什么需要 IBC

  • IBC 是如何实现的


什么是 IBC

IBC 的命名体现了不绕弯子的务实精神,干什么都写在名字里了。

所谓 IBC,全称就是 Inter-Blockchain Communications,即区块链和区块链之间的通信。

众所周知,区块链其实是一个状态机(State Machine),其核心是给定一个状态(State),以及一个转移(Transition),输出一个新的状态(State’),而这整个过程需要是确定性的(deterministic)。这也就意味着,改变状态的转移中,你不能整些什么花活儿。

比如初始状态是 1,转移是 +1,那输出的新的状态就是 2,这个就是确定性的;但如果转移是加上一个随机数(比如当前时间戳),那每个区块链节点输出的新的状态就不确定了。

所以,无论是状态,还是转移,都必须给予过往的链上的信息,不能引入链下信息。

这就导致,每个区块链生来就是一个孤岛,想互相之间喊话是一个很难解决的问题。


为什么需要 IBC

有问题,有需求,就会有解法。

你不是想让区块链之间互相喊话吗?我站中间做传话筒(relayer)不就好了。

举个例子,跨链通信最常见也是最早出现的诉求就是资产互通,比如看以太坊支持更强大的智能合约而比特币不支持,很容易就会想到,能不能把 BTC 挪到以太坊上,作为 ERC-20 代币来用呢?

可以的,只要引入一个中间人,这个中间人通常是一个权威机构(authority)。我们让他在两边分别注册一个“账户”,你把 BTC 给他存起来(实际上是靠 HTLC 锁住),然后让他把等值的 BTC 代币(Wrapped BTC)在以太坊上给你,等你不用的时候,再找他兑换回 BTC。

这种解决方法可能是最直接,也最容易想到的。但问题也很明显,如果我把 BTC 给了你,你在以太坊上不交货怎么办?

于是便有了改进,我们把中间人从单一节点,换成多节点(federated),收放款需要大多数节点签名才行,这样不就好了。我不用担心你一个人使坏,只要节点中的大多数不使坏,我的资金就安全。

但即便如此,你依然无法排除他们共谋分赃(collude)的可能。

IBC 就能解决这个信任问题。


IBC 是如何实现的

中间人之所以能做恶,原因是他们是人,而非智能合约。

那我们这样,把收放款的操作,放到区块链上执行,然后,把中间人给踹了,A、B 两条区块链的节点同时监控两条链上的区块,不就可以了?

但这样会有一个问题,那就是节点负担会很重。何况这还只是两条链之间通信,如果想要 10 条链之间都能通信,那每个节点都要做 10 条链的 Full Node,显然不现实。

所以,中间人还是得请回来,但这次不同,他只负责“飞鸽传书”,只传递双方关心的信息,其他啥事儿也不干。

回到上面跨链汇兑的例子。我们在 A 区块链上存入 100 个代币,签上我们的大名。中间人看到后,将这个消息,告诉区块链 B。区块链 B 验明签名属实、票据可靠后,便将对应的款项放到我们在 B 上的账户中。

这样一来,即便中间人动了歪心思,他也没办法篡改票据,因为这样会被 B 识破。他最多只能装聋作哑,不传递信息,致使我们的交易诉求卡在中间,但只要我们找一个老实的中间人来帮下忙,就能解决这个问题了,资金总是安全的。

用 IBC 的语言来讲,通信方式有这样几个要点:

  1. 每条链都遵循一套共同的“语言规范”(ICS);

  2. 每条链实现要通信的链的 Light Client;

  3. 中间人(Relayer)发起链与链之间的连接,并定期同步两条链的共识状态;

  4. 这条连接类似于 2 个国家之间通航,每个国家有多个港口(Port),每个港口有各自的业务;

  5. 跨链汇兑是一个业务,在 2 个国家各自的跨链汇兑“港口”之间来往,其他业务在其他的港口之间来往;

  6. 港口之间来往必须走专门的航线(Channel),并且航线要时不时有活动,如果长期没活动就可能被取消;

  7. 当用户有跨链汇兑需求的时候,他可以将钱存到国内,然后得到一张票据(Message),写好寄件人、收件人所在的港口(分别在 A、B 境内),把票据统一交给中间人打包(Packet),由中间人坐船去投递;

  8. 收件人在港口收到信件后,拆开看里面的每张票据,核实是否有效,有效就会按约定,将款项放给他在 B 国的账户。


以上便是 IBC 的基本玩法了。说起来简单,但其实省掉了非常多的细节。权且作为一个引子,待日后填坑续上。

Subscribe to 无环图
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.