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 的语言来讲,通信方式有这样几个要点:
每条链都遵循一套共同的“语言规范”(ICS);
每条链实现要通信的链的 Light Client;
中间人(Relayer)发起链与链之间的连接,并定期同步两条链的共识状态;
这条连接类似于 2 个国家之间通航,每个国家有多个港口(Port),每个港口有各自的业务;
跨链汇兑是一个业务,在 2 个国家各自的跨链汇兑“港口”之间来往,其他业务在其他的港口之间来往;
港口之间来往必须走专门的航线(Channel),并且航线要时不时有活动,如果长期没活动就可能被取消;
当用户有跨链汇兑需求的时候,他可以将钱存到国内,然后得到一张票据(Message),写好寄件人、收件人所在的港口(分别在 A、B 境内),把票据统一交给中间人打包(Packet),由中间人坐船去投递;
收件人在港口收到信件后,拆开看里面的每张票据,核实是否有效,有效就会按约定,将款项放给他在 B 国的账户。
以上便是 IBC 的基本玩法了。说起来简单,但其实省掉了非常多的细节。权且作为一个引子,待日后填坑续上。