深入理解跨链技术
在V神的论文中提到了四类跨链技术,实际上大类是三类,侧链和中继只有细微的差别:
- 公证人 notary
- 侧链 sidechain
- 中继 reply
- 哈希锁定 hash-locking
其中,公证人机制是最简单最常用的一种跨链技术。侧链和中继有很多相似的地方,只有一些微妙的地方稍有不同。哈希锁定很像闪电网络,且是相对来说更具有技术含量的一种方式,经过了数学的形式化证明,是经过论证的原子级交换模型。
当前围绕着区块链的讨论风口,主要围绕在公链竞争。而在未来发展,跨链会发挥更大的作用。同时,在区块链技术里,跨链是比较高阶的技术话题。所以本文会主要围绕着这四种原理做相应的解析,同时会稍稍举一对应的项目案例。
跨链的目标
简单列举几个要点如下:
- 资产的相互转换
- 原子交换:中间不能中断,同时发生,或者同时中断
- Oracle问题:链内部的信息是互通的,链看外面世界就很困难。以太坊可以知道自己的以太坊地址上的余额,事件,但外部世界很难知晓。需要一种机制:让链知道外面的世界。跨链Oracle: 身份证公有链。去读取某个人的身份,就需要跨链Oracle。链与链协同,互相读取信息。
- 资产质押:两个链之间协同,一条房地产链,一条数字货币链;在房地产链上抵押房产,在数字货币链上得到贷款。这就是跨链的资产质押。链的事件之间的依赖。
- 智能合约涉及到多个链的信息,跨链读取。它链信息或事件的读取和验证。
其中第一条,是最先出现的跨链需求。换句话说,就是币币交换的需求。这个需求,可以通过场外通过担保交易实现,也可以通过中心化的交易所来进行。这是表面上的跨链,满足了不同数字货币资产的兑换。
其次,纯技术角度实现,就要满足一个条件,交易事务的原子性,这个理解起来也相对直观:交易事务的中间不出现中断,要么全部执行完毕,要么同时中断,不会出现哪一方的损失。
而关于Oracle问题,我们可以从链的角度来思考。比如比特币和以太坊,互相之间是不知道对方的存在的,是两个自治的系统,并没有互通的机制。所以发生在比特币上的交易事务和状态的改变,以太坊是无法知道的。这并不是一个理想状态,理想状态应当是链与链可以互相感知,这便是Oracle问题。由此提出的跨链Oracle,就是赋予链这样的互相感知的能力。
使用跨链技术可以达到的另一个目标是资产抵押。这个可以类比现实生活中的资产抵押。在链上的实现方式就是,假定有两个链,一个房地产链,一个数字货币链。在房地产链上,可以将房产的所有权抵押到链上的智能合约,这个事件触发到数字货币链上的智能合约,把数字货币发送到你的账户,从而完成链与链的事件的传递,完成资产抵押。
最后,从更加宏观的角度来思考,可以归结为智能合约的跨链信息读取。一般来说,智能合约会运行在某个主链上,对于这个主链上的信息读取并没有任何问题,而对于它链的信息读取,必须借助于跨链来实现。
公证技术
这是用在在绝大多数跨链项目上的最简单的方式。在公证人机制里,会存在一个或多个受信的实体,这些实体会向A链声明某个事件确实在B链上发生了,或者某个特定的关于B链的声明是真的。
优点是简单易实现,而缺点也同样明显,我们需要信任1个或多个实体。
侧链你真的理解了吗?
关于侧链,首先需要明白一个要点就是:主链并不知道侧链的存在,侧链知道主链的存在。
举一个场景,比特币是不可能成为任何公链的侧链的,至少当前的比特币架构是无法做到的。我们用比特币和以太坊为例,以太坊可以成为比特币的侧链,比特币作为以太坊的主链。以太坊能够知道通过智能合约以及SPV技术知晓比特币的状态,但是比特币做不到去知晓以太坊平台上的状态。
如果给一个判定方法,谁是主链,谁是公链,标准是异常简单的:
Chain A能读懂Chain B,则表示A是B的侧链。
上面这些基本道出了侧链的能够实现的效果。而具体到一些技术要点,可以归纳出如下两个点。
侧链技术要点:
- 主链支持简单支付验证SPV( Simple Payment Verification)
- 主链向侧链提供SPV proof来验证主链中发生的事件
SPV技术简单说来就是轻节点钱包用到的技术。我们知道单纯比特币从创世区块到现在,所有的区块大小由170G左右,对于挖矿节点而言,可能会去安装全节点钱包,也就是要有170G+的硬盘空间。而我们大多数应用场景下,不用真的去存储区块的数据,只是想做验证。而哈希函数能够做到很好的压缩数据大小:将任意大小数据压缩到固定大小。SPV就是这样一种方法,不存储区块数据,而选择存储占用空间比较小的Header数据。但是通过这些数据可以去知晓区块链的状态,去做验证。
围绕着比特币,产生了很多侧链项目,比如RootStock,简称RSK。
RSK
首先RootStock能读懂比特币,那么RootStock是比特币的侧链。
SPV: 轻节点
RTC代币,和BTC进行兑换。
其中用到的侧链技术名称是:Semi-Trust-Free侧链技术,这里不做具体展开。
如果想使用RTC,就需要往RSK中的多重签名的地址发送比特币(公证人机制)。
RTC发送给别人后,别人可以把RTC发送到指定地址,从而换得比特币。
总结来说就是:双向锚定,加上公证人机制。
关于RSK项目,会在后面进一步分析白皮书内容,这里只做简单介绍。
侧链和中继很多时候是归于一类的,但是会有些微的差别,下面我们讲一个中继(Relay)技术的项目。
BTCRelay是啥呢?
比特币目前不是任何链的侧链。一直是作为主链的存在。
BTCRelay是让以太坊成为BTC的侧链。www.btcrelay.org
这让以太坊能够读懂比特币。所以以太坊是侧链。
BTCRelay是试图构造这样一个块:允许以太坊的智能合约安全地验证比特币的交易,而不需要任何中间机构。简单说就是用户能够用比特币做支付,但是用以太坊的DApps。
这种跨链是如何成为可能的?
设想: 智能合约,A在以太坊里给B的比特币地址发送1个比特币,B能收到并发送50个ETH回来给A。如何通过Relay实现?
BTCRelay是以太坊上的智能合约。
验证的方式:在以太坊的智能合约里,会先把BTC的headers全部存下来。通过blockHash
找到那个交易。
即:SPV验证模式。
但是BTC对以太坊一概不知。
Relay: 中继
关于中继技术,是这样的一种解决方案: 在链A和链B之间存在第三方数据结构C,C是A和B的中继。如果C本身也是区块链结构,通常称为relay-chain。V神并没有严格区分Relay和侧链。
Relay是一种方式,侧链是一种结果。
中继:比特币的头部信息是存在比特币网络上的,现在需要去读取这些信息存在中间部件,即所谓的中继。
应用举例
- BTCRelay
- Polkadot中的relay-chain
哈希锁定
一个比较聪明的设计。参考闪电网络。
- 产生随机数
- 猜随机数
通过锁定一段时间猜哈希原值来兑现支付的一种机制。
V神的跨链哈希锁定技术,场景:A向B发送一个BTC,B向AA
- A产生一个随机密码值
s
,并计算s
的哈希值h
,把h
发送给B - A和B都将他们的资产锁定到智能合约里,但A先B后,且B要看到A确实把资产锁定成功才去锁定。在A这边,设定2X时间,如果B能提供
s
,则可以拿走A锁定的比特币,否则A锁定的比特币就退回自己账户;在B这边,在X时间内,A能向他提供s
就可以拿走B锁定的ETH。 - A在X时间内向B发送
s
从而拿到B锁定的ETH,这样的话,B知道s
后,还会有时间去拿A锁定的BTC。
这是一个经过数学论证的原子交易。这部分也不是很易读,只做介绍,后序会单篇文章详解。有一定的理解门槛,因为哈希锁定是有一定的技术难度的。
项目举例
- Interledger: Ripple, BTS
- Polkdot
- Cosmos
Interledger
基于notary机制。
Polkadot
基于notary,侧链/中继技术
多链设计模式:parachains + relay-chain
共识协议:拜占庭,PoS
对于区块链来说,共识机制是区块链的核心,联盟链以及私链,跨链技术是实现价值网络的关键。
区块链之间的互通性是限制应用空间的瓶颈。
Cosmos
基于中继技术。
参考资料:
《Chain Interoperability》 -- V Buterin