星球日报
搜索
手机客户端
iPhone · Android
公众号
微信公众号

小明学习笔记 | 一文看懂区块链跨链机制

2018-08-31

这期主题是跨链。

小明学习笔记 | 一文看懂区块链跨链机制

编者按:区块链涉及到的技术很多,从互联网底层到不明觉厉的密码学,可是往往关注币价者多而研究技术的人少。牛市的时候,大家为了炒币也会努力学习,熊市的时候,反正也没啥事,我觉得可以更加努力学习。作为一个文科生,我当然会有很多理科生看起来觉得很白痴的问题。作为一个记者,我不难找到业内懂的人用人话给我解释,而且他们往往不会当面嫌弃我。

这是小明学习笔记第二期,上次学习的是虚拟机(《小明学习笔记 | 一文看懂区块链虚拟机》),这次学习是跨链,之后想学习的有VRF、开源历史和文化、网络体系结构与区块链分层体系对比、“假如把币圈看成一个国家这个国家的货币在经历什么”。如果有其他有趣问题,欢迎投稿和提问。

小明学习笔记 | 一文看懂区块链跨链机制

区块链行业大家经常会聊起跨链,大概半年前有很多人认为跨链是个特别没意义或者太过超前的话题。不过随着公链项目增多,也有更多的跨链项目出现,显得这个问题更值得讨论了。已有的跨链项目有 Cosmos、Polkadot、Fusion、Iris、 ICON 、AION、RSK、Ripple 的 Interledger 等。其中有不少还没有落地,我最近分别采访了跨链项目阿希链(ASH)和万维链(Wanchain)的创始人吴青峰和吕旭军。这两个项目主网都已上线,当然也还在不断优化中。

感谢两位创业者解答了我不少问题,同时我比较推荐阅读 V 神 2016 年给 R3 写的一份跨链报告。虽然是 2 年前的报告,但是个人感觉目前很多技术依然没有脱离开那篇的框架。为了更加清晰地描述一些技术,这篇文章也会引用到很多 literally 原文。

跨链是什么?

跨链简单来说就是信息从一条链到另外一条链。由于现在我们说起区块链,脑海中浮现的基本都是 token,所以其实更多的是作为资产的 token 从一条链去另外一条链。最容易理解的是拿 ETH 换 BTC,简单来说就是资产交换。

从互联网的角度理解,有点像信息从一个内网到另一个内网。这对于已经有了底层标准化传输协议互联网来说不成问题。可是区块链每一个网络都是一个相对封闭、且互不信任的系统,每发生一件事都要“投票”(共识)一下,怎么能轻易相信链外的东西呢?原来互联网上的各个后台信息都是可以相互传递,几乎无需验证。吕旭军认为,由于区块链的资产属性尤其明显,使得其跨链不同于传统互联网信息传递,参与者说谎的动机增强。

跨链有什么用?

跨链第一个“最痛”的应用场景就是去中心化交易所,解决了刚刚提到的第一个资产交换的问题。现在很多人用中心化交易所的方式也能解决,加上现行的去中心化交易所交易体验差、速度慢、还不能跨链交易,小白用户都不喜欢,看起来实在没什么戏。不过理想主义者会说:作为一个追求去中心化的行业,话语权最大的却是一大堆中心化的组织,大家觉得这实在太诡异了,而且中心化交易所作恶多端。

另外一种应用场景就是部署在A链上的应用支持其他链的 token。比如以太坊上的智能合约想用比特币支付——听到这个场景我的同事马上一脸懵逼地问:“为啥呀?”他这个反应也是对的,因为这个听起来貌似没有必要,但是有人就是希望支持比特币或者其他token,希望扩大用户群。其实这个问题同样可以用中心化交易所解决。

这个问题也能泛化为,某个DAPP的不同模块可能部署在不同链上,那它怎么调用其他链上的模块、不同的模块之间怎么交互?也就是链A需要得知链B的才能进行下一步或者执行。说白了,这也还是可以用“链外”的方式解决,就像一个权威中介,这说起来很像预言机(提供链外可信数据)。

V神2016年给R3写的那篇报告里提到提到了五个use cases,都离不开以上三种,包括:1、资产(原子)交易(Payment-versus-payment or payment-versus-delivery - in technical circles, this concept is also often called "atomic swap");2、可转移的资产(Portable assets,资产可以多链之间来回转移和使用);3、跨链数据预言机(Cross-chain oracles );4、资产留置或抵押(Asset encumbrance,某资产在链上被锁定,是否解锁取决于另一链上的结果)5、通用跨链合约( General cross-chain contracts )。

跨链的应用场景其实都能用链外方式解决。因此,我曾经跟 ArcBlock CEO 冒志鸿交流过,他就对 “双向锚定” 的跨链比较悲观,一方面两条链能 “互读” 的难度非常高,“interledger 就是建起桥梁,两条链的东西还得是一致的,但是两条链确实是不一样的”;一方面实际应用需求很少,“99% 都只需要应用级的跨链,只有很少需要 interledger 级别的跨链,比特币和以太坊为了安全性,可能要这种”。

这个判断,是他以 “数据库历史” 为鉴得出。他介绍,在 80、90 年代,曾经有一个概念叫联邦分布数据库,愿景是:两家企业用的数据库供应商不同,该技术希望数据库的角度让交易保证数据交易的原子性,难度极其高,但是后来证明在现实中根本不需要。“既然可以通过应用层保证一致性,为什么一定要在底层做呢?因此我们其实在整体设计上比较实用主义。”

怎么跨链?

其实不可能真正意义上某个币真的 “到了” 另外一个链上,大部分只是 B 链上生成了一个 A 链的锚定币,同时 A 链会将等值代币“锁定”。

如果以资产交换这个思路来理解,我理解跨链有三种的情况:

第一种是双方都不知道自己在跨链,或者说双方不能 “读” 对方,比如中心化交易所这种的。

第二种是其中一条链能读别的链,比如侧链 / 中继链的方式,就是 A 能读 B,B 不能读 A;如果一条 C 链能读到所有链,按理说也能成为一个 “链上” 中介,整个过程就是“A-C-B”。当一条 “侧链” 链接了很多主链时,它就变成一条中继链。

其中资产交换的过程可能是用户把 BTC 和 ETH“充值”到这个链上,各个代币在这个网络中都能流通(其实就是给每个币在这个跨链网络里都有一个锚定币,类似以太坊的 ERC 20),然后分别“提现”。万维链和阿希链的模式有点像这种,他们能跟很多链交互,但是这些链之间不能直接交互。以阿希链为例说明:

用户将 BTC“充值”到阿希链上,需要先把 BTC 转到网关账户(就是比特币链上的一个普通账户,但是管理者是一组节点);跨链网关收到信息以后锁定网关账户并验证,经过大多数节点验证后;网关会在阿希链上给用户解锁等值数字资产,用户即可在阿希链上使用 BTC。BTC 和 XAS 好像是两个国家的商人,双方不能互相信任而且使用不同的货币,无法直接交易。因此,双方协商了一套规则(相当于跨链网关协议)并且设立了一个专门的交易场所来处理交易,由本国有声望的大商人(相当于网关节点)作为代表来共同管理,这些大商人还需要拥有足够数量的资产作为担保。

第三种是 A 和 B 都能读到对方的,这种理论上可以通过统一的协议实现,不过现在还没有类似协议落地。

说白了,链下也能做“跨链”;只是有人认为链上更安全。

结合万维链的看法,这里的安全可以拆解为两个问题:一是保证跨链信息是正确的,即如何验证原链上的交易状态。如果要考虑到使用 POW 机制的区块链上没有终局状态(始终存在分叉的情况,只是随着确认块的增加,概率逐渐变小),这个问题的复杂度会更高。二是是保证交易的原子性,即如果交易处理的某个环节停止,整个交易能够撤销;否则,部分成功的情况可能会导致双花。

接下来我会稍微介绍一下我了解到的某些相关技术。

首先是关于如何验证原链上的交易状态,现在我了解到的主要有两种方式(V 神的报告原文均有提到):

第一种是有一组同时承担两条链节点的个人或联盟,也有可能是一条单独的链,告诉 B 链 A 链上发生什么事,或者告诉 B 某个消息的真的。比如 Ripple 开发的跨账本价值传输开放协议 Interledger,但它不是链,只是一套网关协议。V 神把这种称为公证人模式(Notary schemes)

In a notary mechanism, a trusted entity or set of entities that is trusted as a group is used in order to claim to chain X that a given event on chain Y took place, or that a particular claim about chain Y is true. Such entities may be active, listening and automatically acting based on events in some chain, or reactive, issuing signed messages only when asked. The most advanced effort that has taken steps in this direction is the Interledger project developed by Ripple. Interledger, at least in what it describes as “atomic mode”, uses a Byzantine-fault-tolerant consensus algorithm in order to achieve consensus among a set of notaries on whether or not a given event took place, and then issues a signature that can be used to finalize payments conditional on this consensus. (来自 V 神报告)

另一种则是侧链 / 中继(Sidechains/relays),与公证人模式的 “别人告诉 B 链 A 链上发生的事” 不同,中继模式则是更 “直接” 地 B 链自己读 A 链。比如通过验证 A 链区块头和默克尔树等信息验证 A 链上的交易,比如以太坊上的 BTC Relay。

根据公开资料,BTCRelay 的运作机制如此:“一个外部的第三方,被称为 Relayer,发送一个交易到 BTCRelay 的智能合约,内容是最新的比特币区的区块头(当然希望的情况下这个区块头尚未被提交过的)。BTCRelay 基于现存的区块头信息校验发送的区块头的有效性。如果校验通过,则加入到 BTCRelay 维护的比特币区块头链。”

由此,在 BTCRelay 的智能合约里,实现了一个内置的 SPV(简单支付校验)节点,可以用来校验比特币交易的有效性。在以太坊平台的任意用户或者是智能合约都能请求 BTCRelay 来验证,是否某个在比特币网络上存在某个交易。但这种一方面只能实现单向锚定(由于比特币脚本语言不支持),一方面需要以太网络中有 Relayer 不断往合约中提交验证信息,赚取用户手续费。

其实这个模式逻辑上更困扰我的地方在于,既然侧链也需要第三方的 Relayer 提交信息,Relayer 的角色跟“公证人”很类似,不同之处只在于侧链打包了主链的区块头。

Relays are a more “direct” method for facilitating interoperability, where instead of relying on trusted intermediaries to provide information about one chain to another, the chains effectively take on the task of doing that themselves. The general approach is as follows. Suppose that a smart contract executing on chain B wants to learn that either a particular event took place on chain A, or that some particular object in the state of chain A contained some value at some particular time. Suppose also that chain A is designed similarly to Bitcoin or Ethereum in that it has a notion of “blocks” and “block headers”, where a “block header” is a compact piece of information that “represents” the block (and possibly state data) in some cryptographically authenticated way, most likely using Merkle trees.(来自 V 神报告)

 V 神认为,利用轻客户端验证技术SPV(简单支付验证,Simple Payment Verificaiton)确实可行,能验证区块头(Header)及其之默克尔树(Merkle tree)中对应的交易。

This use of this so-called “light client verification” technology is ideal for relays because of how fundamentally resource constrained a blockchain is. In fact, it is impossible for a mechanism inside chain A to fully validate chain B and a mechanism inside chain B to fully validate chain A at the same time, for the same simple mathematical reason why two boxes cannot simultaneously contain each other: A would need to re-run the part of B that re-runs A, including the part of A that re-runs B, and so forth. With light client verification, however, a protocol where chain A contains small pieces of chain B and chain B contains small pieces of chain A that are pulled on-demand is entirely feasible. A smart contract on a relay on chain B that wants to verify a particular transaction, event or state information on chain A would, much like a traditional light client, verify a branch of the cryptographic hash tree of chain A, then verify the block header that the root of this branch is inside, and if both checks pass it would accept that the transaction, event or state information is correct (note that because blockchains are fully selfcontained environments and have no natural access to the outside world, the relevant bits of chain A would need to be fed into chain B by a user; however, because the data is in a cryptographic sense "selfverifying", this user that feeds this information in need not be trusted). (来自 V 神报告)

首先,怎么验证交易,说到这里可能要简单Mark一下什么是 SPV,网络上有不少科普文,其中iBlockKim这个作者写得比较清楚(有删减):

根据中本聪在比特币白皮书里描述:“不运行全节点也可以验证支付,用户只需要保存所有的区块头(Block Header)就可以了。用户虽然不能自己验证交易,但如果能够从区块链的某处找到相符的交易,他就可以知道网络已经认可了这笔交易,而且得到了网络的多个确认。”

小明学习笔记 | 一文看懂区块链跨链机制

一个区块链中的信息通过两两打包,最后归纳成一个节点,即根节点(如图中的节点0),区块头中包含了根节点的哈希值,包含了所有交易又大大减少了区块头部的大小。不仅如此,当要搜索某一个交易,比如上图中的23的时候,可通过几步,比如0-2-5-11即可以快速搜到。

因此,SPV在寻找交易时,只需下载寻找区块头而不是整个区块。区块头只有80字节,每小时6个,一年也就4M大小。

那么如何定位区块呢?比特币提供了一种叫做布隆过滤器(Bloom filter)的功能,节点会在通信链路上建立一个这样的过滤器,限制只接受含有目标地址的交易,从而能过滤掉大量不相关的数据,减少客户端不必要的下载量。比如,SPV节点会收到少于1KB的有关区块头和Merkle路径的数据,其数据量只约占一个完整区块(目前大约1MB)的千分之一。

然后怎么打包,用BTC举例的话,侧链协议实际的操作步骤是(来自码农学习区块链):

提交锁定交易:比特币持有者在 BTC 主链上发送一个特殊交易,把比特币锁定在 BTC 链上。

等待确认:在 BTC 链上等待锁定交易被更多区块确认,以防止该锁定是虚假的交易。

解锁交易:锁定交易确认后,用户在侧链上创建一个解锁交易(也被叫做赎回交易)花掉锁定交易的输出,并提供 SPV 工作量证明(即该解锁交易所在区块的工作量证明),并将赎回交易的输出导入自己在侧链上的地址中。

等待一个竞争期:竞争期也被称作可修改阶段,作用是防双花。而且在此期间,解锁交易不会被打包到区块新转移到侧链上的比特币还不能被使用

如果解锁交易包括了比特币主链更大难度的 SPV 证明,则上一个解锁交易将被替换。

竞争期结束后,该解锁交易将被打包到区块中,用户可以使用他的比特币了(其实是侧链上相对应的代币)。

小明学习笔记 | 一文看懂区块链跨链机制

跟 BTCRelay 类似,中继模式的弊端在于成本太大,V 神也认为验证对方链上的信息会影响速度。可以想象,如果你单纯用 “公证人模式”,只需要等比特币链上确认就行了,可是如果验证信息还要上侧链,就意味等待确认的事情多了很多。阿希链并没有选择打包区块链,就是因为单青峰认为,将区块头打包上链 “成本比较大,没有通用性,解决了比特币的解决不了以太坊的”。同样万维链也没有用,吕旭军表示,Voucher 共识的模式还在验证阶段:工程上 Voucher 信息的提交和验证如果上链,需要耗费较高的链上资源并限制吞吐量;经济上需要更合理的激励机制让 Voucher 成员积极参与并消极作恶。

较为知名的跨链项目还有 Cosmos 和 Polkadot,不过都未落地。在 Cosmos 中,不同空间(Zone,独立区块链)通过 IBC(区块链通信)协议分别和 “中心”(Hub,管理众多 Zone)通信,不同空间的信息包裹经过中心传输。为了保证传输无误,一个证明(Merkle-proof)需要被发布在接收方的区块链上。接收方为了验证这个证明,需要时刻了解发送方的区块头,类似侧链采用的机制。

小明学习笔记 | 一文看懂区块链跨链机制

Polkadot 中继链的区块包含平行链的区块头,还有一些确认信息,以避免双花。验证人负责运营中继链节点,并验证平行链上的区块;可能还会有一个收集人运行特定平行链的全节点,负责提交新区块。

小明学习笔记 | 一文看懂区块链跨链机制

万维链暂时使用的方式,是哈希锁定,也叫原子互换(Atomic Swap),主要是通过哈希时间锁(hash time lock)和密数(Secret)让双方完成交易,不需要第三方公证人。这个方式通俗来说可以这样理解:

假设小明要转 10 个 ETH 给小红,小红要转 10 个 wan 给小明;

小明在以太坊一智能合约里锁了 10 个 ETH 加上一个密码的哈希值,并置入条件:如果小红在 10 小时内提供了密码,合约验证之后小红就能获得 10 个 ETH,否则回滚;

小红在万维链一智能合约里锁了 100 个 wan 并把密码的哈希值放在里面,并置入条件如果小明在 5 小时内提供了密码,就能获得100 个 wan;

小明看到小红在 wan 也锁了钱,就凭密码到 wan 上拿走了 100wan;

小红也从 wan 上的合约中得知密码,凭密码到 ETH 合约中拿走 10 个 ETH。

我们可以把小红换成万维链的 Storeman,用户(小明)只需要在发起交易、释放密数、撤销交易的环节进行操作。对于参与跨链的 Storeman,万维链会提供专门的客户端,客户端根据协议进行无需值守的自动化运行。这是一个比较成熟的方案,闪电网络用的也是这个,安全度高不过似乎应用场景比较少。

如果是单纯两个用户交换资产,其实哈希锁定是个挺安全的方式(不过用户体验不太友好),而且只靠哈希锁定就能完成。这跟上面两种不太一样,哈希锁定还能可以跟第一种结合使用,万维链目前就是这么做;闪电网络就是哈希锁定+多签。

小明学习笔记 | 一文看懂区块链跨链机制

关于这三个不同技术的应用场景可以看看 V 神的总结。

小明学习笔记 | 一文看懂区块链跨链机制

另外一个涉及到跨链的技术叫做多重签名技术,有的项目也会采用分布式私钥。比如闪电网络中就利用了多重签名,交易双方需要对同一个交易签名,交易才可以被确认。跨链的很多模式,都会涉及到一个作为“连接器”的网关,跨链网关主要负责读取各自公链上的账户信息,共同对某账户下待跨链的数字资产锁定与解锁。为了安全,这个网关往往是一个多节点共同维护的中继网络和多签名账户。有一定比例的节点参与了之后,才算完成签名。阿希链用的是多重签名技术。万维链中用的安全多方计算 + 门限秘钥的技术,Storeman 必须共同参与计算才能生成锁定账号的公私钥,而私钥只是理论存在,从未出现在网络中,而是以碎片的方式分散在各 Storeman 手中,交易时参与方要再次合力才能共同构造签名,且互不泄露碎片。为了保证可用性,只需要一定比例的 Storeman 参与计算即可构造签名。

PS. 有小朋友看了文章之后觉得锚定币生成跟 EOS 主网映射有点混淆,关于这点我请教了一下 MEET.ONE,他们表示,EOS 映射是类似做快照,主网上线之后可以使用映射生成的私钥登录,在新主网上取回资产。大概是,Block.one 开发了一个映射的以太坊智能合约。用户如果要映射的话,需要使用 EOS 的工具生成一个秘钥对,再调用合约上面映射的方法。以太坊的公钥地址跟EOS的公钥地址一一对应,对应关系存在了以太坊上,EOS主网启动团队把这些快照下载下来之后,在主网启动之后按快照发放代币。

小明学习笔记链接:

第一期:《小明学习笔记 | 一文看懂区块链虚拟机》

我是Odaily星球日报编辑卢晓明,探索真实区块链,爆料、交流请加微信lohiuming,烦请备注姓名、单位、职务和事由。

小明学习笔记 | 一文看懂区块链跨链机制参考文章:

Vitalik 给 R3 提供的跨链技术报告下载:Chain Interoperability该报告的简单中文翻译

V神:区块链跨链技术大规模应用将在一到两年内爆发 

主流跨链技术深度解析

解读区块链-跨链技术

深入理解跨链技术

区块链的互操作性:Cosmos vs Polkadot

对话比特币侧链RSK:扩容且加入智能合约后的BTC能成为金融基础设施吗?

跨链梳理之侧链及OneLedger简评

BTC Relay项目解决区块链跨链问题的中继方案

瑞波(ripple)提出的跨链技术 Interledger Protocal( ILP)详解

Polkadot(波卡链)白皮书

Cosmos 白皮书

区块链学习基础篇—简单支付验证SPV(8)

原创文章,作者:卢晓明。转载/内容合作/寻求报道请联系 report@odaily.com ;违规转载法律必究。

参与讨论

登录后参与讨论

总文章数:


分享至

微信扫一扫分享

0
前沿科技区块链

Copyright 2017-2018 Beijing Star Node Media Culture Co., Ltd.