跨链原子互换协议

笔记

一、协议背景

  目前资产在区块链内部的可靠流转已经不是问题,需要考虑的是,如何用一种简单的方法进一步促进不同链上资产的互相交换、发掘更多的商业机会?比如Alice在一个区块链A上拥有股权,Bob在区块链B上拥有债权,如何让Alice用区块链A上的股权换取Bob在区块链B上的债权?怎么用尽可能简单的方法,既不采用侧链锚定机制在链和链之间增加复杂的通信机制,却又保证这种交换是原子的、可信的,不会出现股权发生了转移但债权没有发生转移的情况?今天介绍一种可以简单实现跨链原子互换的方式。

  这种方式本身并不新,比特币社区早就提出了这个方案,以太坊大神VitlikButerin也提到过这种方式。这种方式在中心化与去中心化中都有很好的借鉴意义。

二、协议阐述

区块链资产之间互通越来越重要。说的高大上一些就是成就价值互联网,说的直白些就是跨链。如果没有成熟的跨链解决方案,每条公链或Coin项目将成为孤岛,从而限制了区块链产业的发展和应用空间。
 
链间互通(或跨链)的解决思路其实相当的多,比较主流的是:
  • 在链之间架一座“桥”,链A得出结果后把信息通过桥传送到链B,链B再对信息在本地做共识。
  • 建立一个通用的协议标准,让所有愿意互联互通的链都去支持和实现这个标准。典型的“车同轨,书同文”的思路。
  • 将其他链上的价值映射和整合到某条公链。
 
跨链的应用场景如下:
  • 资产转移(Portable Assets):数字加密货币和资产可以在不同链中转移,抵押和使用。
  • 货银对付(Payment-versus-Delivery):即一手交钱一手交货。这里强调是一个原子性互换(Atomic Swap)原则,要么两清,要么交易失败。外汇货币间的同步交收(payment-versus-payment)也是同一个意思。这个场景应该是呼声最高的,比如去中心化交易所。但凡是个跨链项目的白皮书里都会标榜他们能做出来一个去中心化交易所,其实是个再自然不过的事。
  • 跨链预言机(Cross-chain Oracle):链A的智能合约的触发和执行依赖于来自于链B的预言机的信息。链A需要能读取链B的事件、状态等数据。
  • 资产留置(Asset Encumbrances):链A上的资产被锁定,并且解锁条件依赖于链B上的行为。类似于金融中的产权抵押,侧链中的双向锚定也有这个意思。
  • 通用跨链合约(General Cross-chain Contract):比如根据链A上的资产证明来在链B上用B的货币来分配发放红利。
 
具体来说,目前赢得普遍认同的技术实现方案有:
  • 中心化公证人机制(Centralized Notary schemes)
  • 多重签名的公证人机制( Multi-sig Notary schemes)
  • 侧链/驱动链(Side-chain)
  • 中继(Relays)
  • 哈希锁定(Hash-locking)
另外,Wanchain和Fusion使用的号称新兴跨链技术——分布式私钥控制技术,其实更加像公证人机制的改进版本,所以不单独列出来。
 
这里只挑哈希锁定说起。
 

哈希锁定

哈希锁定是一个相对来说比较容易实现的跨链技术,它主要可以确保跨链交互操作的原子性。
 
假设Alice想用自己的ADA换取Bob的BTC,具体应用流程如下:
1. Alice创建了一个随机密码s,并且算出该密码的哈希值h,即h = hash(s)。Alice将这个哈希值h发给Bob。
 
2. Alice和Bob共同通过智能合约将彼此的资产先后锁定(Alice先进行锁定,Bob再锁定),并且智能合约里实现了以下逻辑:
  • 条件1:如果任何人能在H小时内提供一个随机数值s'给智能合约,一旦合约验证了hash(s') == h(当s'等于原始密码s),那么Bob的BTC就自动转给Alice,否则超时后发还给Bob。
  • 条件2:如果任何人在2H小时内将原始密码s发给智能合约,则Alice的ADA将被自动转给Bob,否则转还给Alice。
 
3. 上述的条件1是针对Alice来制定的,Alice为了拿到Bob的BTC,必然会在超时前将自己产生的随机密码s提供给智能合约,合约验证肯定会顺利通过,并且把Bob的资产转给Alice。这一笔交易在成功的同时,Alice提供的原始密码s也被公开地广播并记录在了区块链上。此时,Bob可以拿着公开了的密码s,发给智能合约,依照条件2,便能获得Alice锁定在智能合约中的ADA,理论上Bob有1H到2H小时的充裕时间来完成操作(取决于Alice多快能完成她的操作)。于是皆大欢喜。
 
这里的原子性是可以被验证的。交易成功的情况上面已经介绍过了,即为两清。我们再来看下其他可能的情况,如果Alice始终都没有提供密码s,那么资产都会退还给双方。如果Alice在1H内没有提供密码s,而是在1H-2H的区间内提供了密码s,那么Bob会获悉密码s并领取Alice的资产,而Alice拿不到分文(Bob的资产最后会还给Bob),这个情况看似违反了原子性,但在现实中,要么Alice因为自己的愚蠢接受现实,要么Alice理性的选择让此次交易作废(哈希锁定:总不能怪我咯?)。
 
当然,哈希锁定的交易中,Alice拥有主动权,是更具优势的一方。在更加复杂一些的交易中,比如引入了具有波动性的交换比例(fluctrate exchange rate),那么Alice可以选择等待,直到出现自己更加满意的交换比例时再触发兑换,而Bob只能被动接受。当然Alice也有可能等到最后才发现错过了之前最好的比例,不过总的来说,Alice获得了更多的选择权,在交易中占到了便宜。
 
跨链哈希锁定通常会和“状态通道”(State channel)搭配起来,使得交易速度更快,从而避免上述的Alice优势问题。
 

状态通道

简而言之,状态通道是一个久已有之的离链(off-chain)策略,闪电网络和雷电网络都用到了它。它相当于两个或两个以上的实体之间更新状态的协议,在用户之间,或是用户和服务之间建立双向通信管道,消息以交易的形式只针对通道内参与者广播,而非全网广播。这样一来很多琐碎的,来来回回的状态更新和交易就不会影响整个公链主网从而导致网络堵塞,并且还能增加主网的并发能力,而交易只消耗超低的手续费。等通道内的参与者达成一致并签名确认后,最终将交易结果上链,共识上链之后结果不可篡改,广播全网,拥有最高可靠性。
 
状态通道所用到的技术相对来说比较简单,某一部分的区块链状态被多重签名或智能合约锁定后,只有所有参与方都同意后才能更新状态。每次状态更新的中间状态都仅仅在参与方之间沟通,签名和保存,最终参与者达成一致后提交结果上链,重新解锁状态,并且关闭通道。
 
综上,哈希锁定可以有效的保证交易原子性,但是没法做到资产转移(因为哈希锁定交易中的资产总量没变只是持有者的变化,而资产转移需要资产在两条链上发生相应的增减)和跨链预言机(哈希锁定是主动行为,而跨链预言机是被动行为)。
 

HTLC

目前用的最多的就是HTLC(哈希锁合同),即在预设锁定时间前呈现初始秘密可以花费资金。在闪电网络的事务流程中,首先是接收方节点生成秘密并计算哈希值。之后,将该哈希值发送到发送方节点作为HTLC生成的基础。发送方生成合约并将其发送到节点1,即路径上下一个节点,该节点用递减的时间锁创建新合同(使用相同的哈希值)。这个新生成的合同由节点1沿着路径发送到节点2,然后节点2重复相同操作并继续缩短时间锁。合约一路前进到接收方,由接收方通过自己一开始就生成的秘密签名释放资金(解锁支付),然后从发出合约的节点处获得资金。反过来,这一动作向最靠近发送方的节点展示秘密,并授权解锁支付并接收资金,然后再向前一节点展示秘密。整个路径重复这一过程后,每个节点都收到了付款,至此支付完成。

 

HTLA

Ripple的Interledger协议是一个开放协议套件,用于各类账本间转账(跨链交易)。该项目白皮书中提出了“公证人”这一概念。为了实现原子性,最初建议使用通用模式(Universal Mode)和原子模式。

 

PM

Sprite通道的目标是开发新的支付通道,解决闪电网络原子性、部分存款与通道资金注销等问题。通过添加原值管理器(PM),HTLC得到了显著升级。

 

HTLR

Celer Network是针对公链可扩展性并通过离线技术实现性能最大化的解决方案。 在这个体系中,PM(原值管理器)变成了一个哈希时间锁注册表(HTLR),但大部分功能仍旧保留。HTLR有两个依赖端点,即IsFinalized和QueryResult。前者返回的结果是原值是否先于区块数字完成注册;而后者返回的是原值是否已注册。这两个功能最终可以实现合并。需要注意的是,HTLR始终是链上的。

 

Notaries

Interledger的原子模式应该就用到了“公证人”这个角色。通过公证人完成的支付和通过闪电网络HTLC进行的支付很相似,两者唯一的区别是,在展示秘密之前,接收方节点会将合约转交给公证人,即从其通用登记册中随机选择的特殊实体。

 

Observers

这一角色在Geo协议中出现,该概念为原子性问题提供了独特的解决方案。目前项目团队在创建一个去中心化的点对点链下网络来进行资产交换。

在去中心化网络中,原子性的开发受到了很多新概念的影响。

哈希时间锁合同(HTLC)最先面世,其优势在于节点掉线时减少损失并且保障发送方和接收方的安全。而其问题在于资金必须冻结在通道中,参与者必须保持在线以避免损失。

然后是在HTLC基础上改良后的HTLA和HTLR。前者可以实现在各种注册表中使用HTLC,甚至是那些不支持相应合同的注册表。后者则解决了节点脱机的问题。

posted @ 2019-04-10 14:19  勋爵|X-knight  阅读(1437)  评论(0)    收藏  举报