链下交易梳理之二 Liquidity.network

昨天写的链下交易系列的首篇《链下交易梳理之一 闪电网络》深入(没法浅出)了头牌项目:闪电网络。今天接着整理下最近一些同类项目。

首先,头牌也是有缺陷的。除了前一篇文章里提到过的安全性问题以及惩罚措施过于严厉之外,还有不少有争议的话题。比如:

小额高频交易是没有商业价值和潜力的。这基本上就等于直接掀了闪电网络的桌子,毕竟这本来是闪电网络立足之本和倡导的方向。

闪电网络的通道里允许交易的金额上限 和 存入“用来注资的多重签名地址”的资金金额是强相关的。这样一来,严格的通道金额上限就搞的闪电网络有点僵硬:

继续用《链下交易梳理之一 闪电网络》中的例子,如果Alice和Bob分别往他们的通道里存入了0.5BTC,那么每一方最多只能支付给对方0.5BTC,不能更多了。在极端期况下,Alice存入了0.99...99BTC,Bob存入了0.00...01BTC,那么通道内所允许支付的总金额最多是将近1BTC。如果要涉及到更大的金额的话,只能再开一个新的通道,通过链上交易存入更多的BTC。

相类似的,如果在一个通道里只抵押了1 BTC,是没办法参与到“高达”1.1BTC的多跳支付场景的,因为HTLC规定了支付行为是从最终收款方一侧开始一段段逐一实现的(参看《跨链梳理之哈希锁定 及 IOV简评》中1.3节)。说起来有点类似借记卡,里面存了多少钱才能花多少钱。不过区别在于,当不够花的时候,还要去银行排个队再办张新卡,存入更多的钱才行,这样想下真的还蛮不方便的。

另一方面,如果不想频繁的创建新通道,那就需要多存一点BTC了。不过如此一来,为了使得整个闪电网络运作起来,需要大量的BTC被锁定在各个通道中。

路由难度很大。由于通道和通道间可以周转的金额上限不同,一旦某些场景下需要支付的金额稍大一些,那么在整个闪电网络内找到一条有效的路径来跨越多个通道并串起HTLC多跳支付将并不再是件非常容易和有效率的事情了。

通道之间的不平衡性以及对通道允许交易金额的严格要求,有可能会导致中心化的趋势和风险。比如某大机构可以锁入更多的资金到闪电网络中,由此提供充沛的流动性,那么大家就都会纷纷和他建立起通道来,这个机构就变成了一个中心化的枢纽。下图是闪电网络testnet中网络结构图。

再来看下今天的主角Liquidity.network,基本上也是从上述的几个问题点入手,试图找到改进方案。

首先Liquidity是基于以太坊的链下扩展,和雷电直接竞争。原先不管是闪电网络还是雷电,通道都是在交易双方之间两两建立的,而且是双向通道,然后通过在众多已有通道间的路由做到陌生人之间的多跳支付。

而Liquidity则抛弃了双人通道的概念,转而直接引入了多人间链下交易的枢纽(N-party Hub),而且多个枢纽间可以互联组成整个网络。我们一条一条来撸一下。

1. 枢纽(Hub)

枢纽不再是个封闭的两人世界,而像一个开放的信用合作社,任何人都可以加入某个特定的枢纽(看到第四节就会明白,其实更像一个去中心化交易所)。

新用户加入枢纽也被设计成了链下行为,从而跳过了闪电网络那样链上创建交易双方多重签名地址的成本和花销(但是充值和取现依旧会是链上行为,详情可见第四节)。

存入枢纽内的资金可被视作接受统一管理。另外,项目方的期许是每个Hub里有至少十万个成员参与其中。

2. 整个网络内需要锁定的资金可以只是最近十分钟内的平均交易额度,而不是所有交易金额加起来的总和。举个例子,假设100个用户之间会发生各式各样的支付交易,月平均交易量达100BTC:

对于闪电网络来说,那么参与其中的每个人都要押入100BTC,总共需要将一万个BTC锁定到闪电网络中。

同样情况下,对Liquidity来说,将时间缩短到十分钟,那么平均交易量也就缩小了4464倍(4464 = 31天 * 24小时 * 60分钟 / 10分钟,话说官方还是有点“小无耻”的,白皮书里也是直接算一个月31了,毕竟这样数据最好看),于是所需要的抵押总额也就缩小了4464倍(其实看下去就会发现押金什么的感觉已经不重要了)。

3. 枢纽减少路由的压力(假设大部分枢纽都含有成百上千个用户可以自给自足)。而且枢纽之间也可以互联,如果同一个用户同时加入了连接成环的多个枢纽,那么抵押进这些枢纽的金额可以在彼此之间动态调剂。这个想法是从创始人早先的一个研究成果REVIVE引申而来的。REVIVE是运用在传统的双人支付通道中的一个押金再平衡的协议,使用了线性规划做优化计算。比如下图里是一个最简单的例子,三个人ABC每人都拥有100钱,通过双向支付通道形成了一个环,但是通道内的金额分配非常不平衡:

AC之间,AB之间和BC之间各自拥有了一条通道。在AC通道里,当前A账面上有100,C啥都没有,而AB通道里,A啥都没有,但是B有100。如果这时候A要再给B转50,或者有个多跳支付交易希望通过AB通道来走(比如画面外的一个付款人付给A以50,A付给B以50,B再付给画面外的最终收款人50),这里一个比较容易想到的思路就是:把AC通道中属于A的100里50通过“乾坤大挪移”放到AB通道里给A使用。

乾坤大挪移流程如下:

随机在ABC中选取一个领导者来引导这个再平衡的过程,期间三个通道需要全部冻结,通过每个人的偏好和当前的需要构建出一系列的链下支付交易,交给所有人签字,都通过后,就强制原子性交易执行。比如在上面这个例子里,再平衡的结果可以是让A转给C以50,C转给B以50,B再转给A以50。这个时候ABC每个人依旧每人拥有100钱,谁也没多谁也没少,不过在每个通道内的所有账本上都有50了。具体的再平衡步骤如下图:

4. 同时Liquidity也提到了实现去中心化交易所的构想,主要给链下原子性交换打了高光。这个其实也不是什么新鲜玩意儿,《跨链梳理之哈希锁定 及 IOV简评》中1.4节也提到了闪电网络使用HTLC实现了该功能,并出了demo。当然Liquidiity如果能实现这个功能也是极好的,而且Liquidity的开发基于以太坊,会天然地支持ETH和ERC Token们,使用范围也会比基于BTC的闪电网络更加宽些,比如可以帮助Token ICO做到ETH和Token的实时兑换。

5. 架构层面来看,目前也只有比较粗线条的介绍。如下图,链下的Liquidity网络服务器(web server)通过连上Liquidity智能合约(smart contract),来创建新的枢纽。

这里的网络服务器是一个中心化的存在,不过问题并不大,因为用户只是用它作为前端应用来部署合约,创建新枢纽和进行转账交易等而已。每个人都可以创建新枢纽。

码农看了下Liquidiy的第一个demo就是关于这个网络服务器的,使用体验有点类似于去中心化交易所,比如以德、Idex之流。

如上图,加入枢纽后,用户需要把钱先从自己钱包“充值”到Liquidity链下,才能转账给网络内其他人。不过,关于Liquidity智能合约具体怎么个结构怎么个逻辑,怎么实现的充值,最终怎么广播上链等等内容目前找不到任何细节,导致码农看的有点懵。

越来越多的疑问着实令码农难受,所以还是跑去了白皮书中说的已经运作起来(operational,呵呵)的https://wallet.liquidity.network直接去验证下想法。结果,卖个关子,一步一步来别急。

4.1 注册登陆

Liquidity目前跑在以太坊的Ropsten测试网络上,需要将MetaMask切换过去,然后我们见到了以下的注册页面,

点击注册,需要对一段信息进行签名来完成授权,看下图,乱码可以忽略:

点击“签名(Sign)”按键,进入到了主界面,感觉比demo里的界面要更丰富一些,不过看起来依旧和以德之流差不多。

4.2 充值

由于是测试网络,码农从“以太水龙头”里搞了3ETH来做测试,以下是其中一笔交易https://ropsten.etherscan.io/tx/0xc9d65932d488ff1546ab0f0c771414bbe4dd2fcd808514c7e829c7b8b59da225。有钱之后,刷新下Liquidity网页,认出了测试钱包中的3ETH:

接着让我们看看到底是怎么充值的。码农选择直接充2ETH进去(有钱任性, 嗯),这里操作的基本单位是wei,1 wei = 10^(-18) ETH,

点下Deposit按键的那一刻我的心情是复杂的,因为我看到了下面这个窗口...

还真的是以德....点击Submit后,我们就得到了这个2ETH的转账交易https://ropsten.etherscan.io/tx/0xbce901d956607c750cbf07875b01ac6d04c63a23edf1d316f7d9b226ca8d7f5f。所以说,这收款地址还真是Liquidity的智能合约么,而且还真是类似以德这种的链上充值。

再次刷新页面后,我们得到了下图:除了上方圆环里的链上/链下资产比例长的极其不像2:1以外,其他还都很正常。Liquidity认出了存入它枢纽的2ETH,以及码钱包里还剩下的不足1ETH余额(扣除了前一笔转账的手续费)。另外,从这个页面可以看到,充值到Liquidity里的2ETH已经被算做了链下资产(蓝紫色的offchain条)。接下来,在Liquidity网络内中所有的转账都是由Liquidity智能合约内部处理的,增减都会反应在这个链下资产余额中。

4.3 转账

再来试下转账,创建了一个新账户,完成注册,回到第一个账户,向新账户转入0.5ETH。

系统接连提示了2次签名请求,

然后得到了成功的信息。

以及发送到服务器端的数据,

不过令人悲伤的是,转账迟迟没有生效,我试了几次都失败了,估计还有bug吧...

4.4 取现

另外取现目前也还没做好,允许取现的最大金额为0wei....也就是不管填多少金额,都会报错说当前取现金额太高,

综上,通过验证我们就理解了,Liquidity其实这就是一个去中心化交易所,充值和取现都会触发链上交易。而它的主要亮点在于,当资金存入Liquidity后,内部的交易都会是链下交易,而不是像以德那样每执行一笔买卖交易都需要经过一次链上确认。

对码农而言,可能是因为Liquidity一直在和闪电网络在做对比,让我先入为主的认为他的很多操作会和闪电网络神似,并且在此基础上再做改进,实际测试才发现两者相去甚远。当然,Liquidity所走的去中心化交易所的道路确实是可以满足:

充值抵押到Liquidity网络的资金是弹性的,并且用户有并且随时可以取出或充入更多。

支付基本不需要路由,打钱过去就行了。枢纽充当了“黄页”的功能。

同一个账户在n个不同枢纽(交易所间)的链下资金再平衡(对应n个Liquidity内部地址)。

不过Liquidity的白皮书写的稍微水了点,具体怎么实现枢纽内部的链下处理的细节都没有说,不过从4. 3一节的转账测试来看,我猜是直接调用了某合约完成双方账户余额更新,毕竟以太坊是基于账户模型的,没有任何的UTXO。总之,感觉写的算不上技术白皮书,更像是个项目介绍书,大部分都是定性的概念介绍,并没有涉及太深的技术细节,这点和闪电网络的白皮书真的没法比。闪电网络的技术白皮书深入到每个小细节以及各种“勾心斗角”的考量,看似难读,其实是真的好读,看完后通体舒畅,当浮一大白。可能是Liquidiity急于把整个大概念先推出来抢占风口,然后再慢慢撸技术细节吧。我看创始人Arthur Gervais在今年年初接受提问的视频中也还是对核心架构和信任模型等具体问题直接打太极绕过了,说是会在日后推出更加详细的技术文档。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180519G0UXKV00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券