推广:最近整理了一个linux命令手册,欢迎点击查看,
Linux速查手册
。
评论:这篇文章写得挺好,转载在这里,等待加一些读书笔记。
书接上回,《
应用协议是更好的投资选择》中提到了Cosmos,Polkadot和Blockstack等项目通过提供“互操作性”(Interoperability)来“虚拟化”区块链。处理层,也就是基础区块链层,比如以太坊将被进一步得被“平价化”,而提供互操作性的互操作层将反过来提取出价值,从而变成价值聚合者,拥有更高的投资价值。
从这期开始来逐一梳理下互操作性的知识点和有意思的项目,估计会是个超长连载系列。
在开始正文之前正好插播下上一期的后续内容,之前译文中存在的某些不确定的句子段落,码农通过与牛b的热心读者交流后,目前得以敲定下来。比如:
但是,如果我可以购买“管道”来做避险的话,为什么还要试着选择下一个大的应用协议呢?从各种角度来看,从一众基础协议中挑选出最终胜利者,等同于从一众接近消费者的协议中挑选胜利者。
这里的管道其实指的还是底层基础协议,原文中的后半句其实也说出了原因。因为基础协议层和应用协议层共生,所以一旦找寻到出色的应用协议层,其凭依的基础层也必然是脱颖而出的。所以一种思路就是依旧下注底层基础协议,甚至雨露均沾,然后等待在底层平台上开花结果的应用层黑马们。但是文中依旧对这个投资思路做了批判,觉得专注基础协议层过于盲目和马后炮,没有充分考虑通证经济和垂直领域中价值流动的重要性。
从个人角度而言,码农和身边的不少朋友很早之前就认为区块链要真正落地和普及开来的话,同时需要具备高效、稳定、可以支持大规模商用的底层公链,以及跑在该链之上的杀手级应用,互利互补,扩大协同优势,可谓缺一不可。而《
应》文中则更加极端地认为从各方面而言都应立足于应用,以应用为先。
不过随着这几个月公链项目的大爆发式繁荣,码农认为有理由相信互操作层项目的风口也已来临。
插播结束,接着说正事。
互操作性的标准定义是“在几乎无须用户了解各种功能单元的独特特性的情况下,这些功能单元之间进行通讯、执行程序或者传输数据的能力”。放到区块链的场景下,由于
- 基本不可能将现实世界的所有业务场景通过映射到仅仅一两个区块链来实现
- 之前各种乱七八糟Token项目的爆发以及快速湮灭
- 近期一大波优秀公链项目的崛起
- 目测越来越多的区块链会诞生出来
大家越来越意识到区块链之间互通的重要性。说的高大上一些就是成就价值互联网,说的直白些就是跨链。如果没有成熟的跨链解决方案,每条公链或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使用的号称新兴跨链技术——分布式私钥控制技术,其实更加像公证人机制的改进版本,所以不单独列出来。
上面的技术方案全部展开细说的话过于纷繁芜杂,今天就先挑哈希锁定说起,其他的以后慢慢填坑。
哈希锁定
哈希锁定是一个相对来说比较容易实现的跨链技术,它主要可以确保跨链交互操作的原子性。这个想法最早来自于Tier Nolan在BitCoinTalk论坛里发的帖子https://bitcointalk.org/index.php?topic=193281.msg2224949#msg2224949。
假设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)策略,闪电网络和雷电网络都用到了它。它相当于两个或两个以上的实体之间更新状态的协议,在用户之间,或是用户和服务之间建立双向通信管道,消息以交易的形式只针对通道内参与者广播,而非全网广播。这样一来很多琐碎的,来来回回的状态更新和交易就不会影响整个公链主网从而导致网络堵塞,并且还能增加主网的并发能力,而交易只消耗超低的手续费。等通道内的参与者达成一致并签名确认后,最终将交易结果上链,共识上链之后结果不可篡改,广播全网,拥有最高可靠性。先前《
三元悖论 及 发链简评》一文中也提到了这个思路,不过发链是通过主从链的做法来达到相似的效果。
状态通道所用到的技术相对来说比较简单,某一部分的区块链状态被多重签名或智能合约锁定后,只有所有参与方都同意后才能更新状态。每次状态更新的中间状态都仅仅在参与方之间沟通,签名和保存,最终参与者达成一致后提交结果上链,重新解锁状态,并且关闭通道。
综上,哈希锁定可以有效的保证交易原子性,但是没法做到资产转移(因为哈希锁定交易中的资产总量没变只是持有者的变化,而资产转移需要资产在两条链上发生相应的增减)和跨链预言机(哈希锁定是主动行为,而跨链预言机是被动行为)。
接下来我们看下应用了哈希锁定技术的项目,也会涉及到不少哈希锁定之外的内容。
1. 闪电网络
闪电网络提出的具体实现方案HTLC(Hashed Time-locked Contract,被哈希了的带定时锁的合约)来源于哈希锁定。但是相比哈希锁定之用于跨链交换,在闪电网络中,这个解决方案更主要的是被用来确保链下资产单向转移的可靠性,以及用来连接多跳支付场景中的多个BTC支付通道。
闪电网络本身的主要思路十分简单直白——将大量交易放到BTC区块链之外进行,只把关键环节放到链上进行确认。主要通过引入智能合约的思想来完善链下的交易渠道。核心是两种合约类型是:可撤销的按序到期合约(Revocable Sequence Maturity Contract,RSMC)和 HTLC。因为闪电网络和BTC强相关,所以要搞懂此间具体的技术实现和运作机制,需要足够的BTC原理和知识的储备,这一部分也有意思,会在以后的文章里再做详细梳理。这里就来简单看下它是可以如何运行基本功能的,以及如何跨链。
1.1 多重签名地址
简单来说就一个交易通道的起始点,交易双方分别把钱存进去,但是要把钱拿出来除非两人都同意才行。由此才能作出各种文章来。
1.2RSMC
RSMC可以理解成一个交易双方用来确定资金池中被锁定资金的分配方案(当然具体的实现会复杂的多)。每次发生频繁的小额交易时,需要对交易后产生资金分配结果共同进行确认,任何一方需要提现时将他手里经过双方签署好的交易结果写到区块链网络中,从而被确认。所以,提现之前的各种中间交易都可以通过RSMC发生在链下,所谓用对资产所有权的承诺来代替所有权本身。
1.3 HTLC
HTLC的作用主要有两个,一个是确保在链下完成RSMC中小额金额的再分配,另一个是通过多跳HTLC确保了交易双方可以通过多个中间人组成的交易通道中完成安全可靠的交易,交易双方不用单独新开一个只属于他们的资金池,而是复用已有的多个中间人两两之间的资金池,因为开个新池是要上链有花销的。
在多跳付款/取款的场景中,如果Carol想给Alice发送0.05 BTC,可以使用HTLC来安全地通过Bob这个中间人来完成支付(假设Alice和Bob之间,以及Bob和Carol之间存在现成的支付通道),那么,
- 收款方Alice随机生成一个密码s,并把s的哈希值给Bob。
- Bob和Alice商定一个HTLC合约:Bob将自己的0.050 BTC锁定在合约中,只要Alice能在1天内向Bob通过提供密码s来通过哈希查验,Bob会支付Alice 0.050 BTC;如果Alice做不到这点,这笔钱到期自动退还Bob
- 同样地,Carol和Bob可以商定一个HTLC:Coral拿出0.051 BTC并锁定在合约中,只要Bob能在2天内向Carol出示通过哈希验证的密码s,Carol会支付Bob 0.051 BTC;如果Bob做不到这点,这笔钱2天后自动退还Carol。
上述的步骤构成了准备阶段(Setup)。一切就绪后,就可以进入索取阶段(Claim):Alice把她先前生成出的密码s出示给Bob,拿到0.050 BTC,然后Bob将从Alice那里获得的密码s出示给Carol,从而拿到0.051 BTC,赚到0.001 BTC美滋滋。当然在索取阶段后,系统会自动检测和完成中间转账,并不真的需要Bob特别站出来做点什么,如果逾期也会自动退换资产,换句话说就是账本系统需要实现哈希锁和超时处理,从而支持HTLC。如此,参与双方只需要信任账本即可。
HTLC中的哈希锁(hash lock)保证了只有提供原始密码(preimage)才能打开这个锁,安全地从合约中拿到锁定的资产,甚至整个支付链可以允许存在多个无需信任的中间人。时间锁(time lock)则保证了在没有履约的情况下资产能安全退还给拥有者。
1.4 跨链交换
HTLC一开始被设计出来的目的主要是服务于同一货币(即BTC)的支付场景,不过后来闪电网络宣布它们靠HTLC搞出了链下跨链原子互换(比特币和莱特币的互换)的demo。还是Alice和Bob的例子,Alice想用自己的1BTC换Bob的100LTC,这时候就不能再用HTLC来组成一个有向链,而是搞出一个环来。具体如下:
准备阶段:
- Alice生成一个随机密码s,提供它的哈希值给Bob
- Alice和Bob建立一个比特币支付通道(可以只包含这两人,或者包括更多的中间人),约定一个HTLC:Bob只要提供密码来能通过哈希测试,可以领走Alice的1BTC,超过2小时候,1BTC还给Alice
- Bob和Alice建立一个莱特币支付通道,约定另一个HTLC:Alice只要通过哈希测试,可以领走Bob的100LTC,超过1小时候返还给Bob
索取阶段:
- Alice提供自己生成的密码s,得到Bob的100LTC。
- 被广播出来的密码s同样被用来保证Bob得到Alice的1BTC。
就和一开头说的例子是一样的。
2. Interledger
Interledger(ILP)是大名鼎鼎的瑞波Ripple发起的一个跨账本协同的协议。Interledger专注于实现连接各个账本不同资产的统一支付标准,而非单独的区块链,也没有自己的代币。这里支持的账本包括区块链,银行,p2p支付,传统的ACH,移动支付机构,甚至央行操作的实时全额支付系统(Real-time Gross Settlement,RTGS)。
在付款方和收款方中间,起到核心作用的是一系列的“连接器”,这里的架构有点类似于互联网模型里的网络层(之前NKN,Mainframe,兰花简评都有所涉及),每个连接器犹如路由器节点一般试图将ILP数据包转发到更接近终点的地方,最终收敛到终点。付款方和连接器之间,连接器之间,连接器和收款方之间都是通过HTLC来完成有条件的转帐,从而做到安全的多跳支付。而每个参与者只需要信任直接对接的上下家就可以了。
实际上InterLedger将HTLC进一步泛化成HTLA(Hashed Timelock Agreement),这个由第三方执行的协议,可以用来在不支持HTLC的账本间执行HTLC。
具体流程就和先前举的Alice,Bob和Carol多跳付款的例子一样,只不过在Interledger的世界里,分成了“准备(prepare)”和“履行(fullfill)”这两个略有不同的术语。
上图是Interledger协议栈的四层抽象模型,非常类似于互联网TCP/IP四层协议模型,学过计算机网络的童鞋看这个会很亲切:
- 应用层:最上层协议,负责终点收款账户的发现,金额协商,对下层传输层具体协议的选择,IPL数据包交互用的额外信息。
- 传输层:依旧是个端到端的协议(付款方-收款方),用来决定支付的条件和其他细节。目前有两个已实现了的传输层协议可供使用
- 预分享秘钥协议 (Pre-Shared Key ,PSK):双方使用共享的秘钥来生成支付条件,认证IPL数据包,以及加密应用数据。
- Interledger支付申请(Interledger Payment Request):收款方使用秘密数据生成支付条件和细节,而不将秘密共享给任何人
- Interleger层:类似网络层IP协议一般定义了如何将IPL数据包从付款方通过连接器转发到接收方。定义了IPL数据包格式。还提供了一套通用的地址命名标准来帮助寻址。这层的IPL数据包是二进制格式的消息,包括了终点收款人地址,支付金额,条件,期限,和上层传输层中的数据。
- 账本层:最底层,用以不同账本间的实际数据交换,支付交换和清算。这一层使用了大量的插件架构来抽象不同账本间的差异。
3. 雷电网络和GoNetwork
这两个都是使用状态通道和HTLC在支付交易场景中通过链下操作来保证以太坊交易的高速和低成本,不过GoNetwork主要将这些技术用在移动端,并将链下交易和支付通道路由复用放到了手机上,大概可以算是雷电加Rightmesh想法杂交出来的存在..
雷电用到的关键技术和理念其实和闪电网络并无二致,不过由于以太坊支持智能合约,所以很多具体的实现细节有所不同。
4. IOV
这是最近新鲜出炉的项目,IOV全名是Internet of Value,价值互联网,这么主旋律的ticker竟然没有被注册掉,怪哉。IOV主打的是推出一款通用的链间通信系统,从而完成资产跨链的无缝对接,并且以此提供一个万能钱包,用该钱包里可发送和收取任何链上的货币。
展开来说,IOV这套系统包含了区块链通信协议(Blockchain Communication Protocol),IOV钱包,类似于DNS的链名服务(Blockchain Name Service),以及可读地址链接(Human Address Name Links)。
4.1 区块链通信协议
每个需要互通的区块链都需要同意和实现的一套通信标准,这条思路其实就是本文开头说的“车同轨,书同文”的路数。并且IOV把遵守这个协议的区块链称为“区块链通证(Blockchain Token)”,比较拗口,可能是从IOV角度来看,所有的区块链或账本上的币对他来说都是代币吧。码农个人偏好把token叫做代币,但是为了方便阅读和理解,下文中就用“通证”或“通证链”作为别名来专门指代所有满足这个IOV区块链通信协议的区块链/账本/主要资产货币吧。
区块链通信协议定义了外部属性和内部属性的标准化。这些标准需要每个“通证链”实现和支持。
其中外部属性包括了:
- 支持统一格式的公共价值地址(value address),以支持同一个地址处理不同链上的价值。
- 实现一套主要用来统一查询发生在不同链(账本)上的货币的交易,甚至提交交易的API。
- 需要支持哈希锁定来实现货币之间的原子性交换。具体怎币间互换可以参考本文之前的内容。
- 通证的定义,包括名字,简写,创世文件,以及引导节点等。引导节点像一个网关,接受外部发来的交易查询和交易提交。这些定义需要被存入链名服务中以供他人查询。
内部属性包括:
- 共识算法:每个链要么自己内部做共识,那么共识协议可以从POW,POS,DOPS,Proof of Space and Time中选择;要么可以选择第三方提供的共识服务,类似于ERC代币这样。
- 每个通证链内的交易费由自己定义的通证来支付。
- 每个链还可以选择定义只属于“通证链”自身的内部数字资产,算是通过数字建模将现实世界的某个实体或概念映射到区块链中的一个途径。该内部资产无法用来和外部做互换交易。等于是提供了区块链创建的自由度。
看到这里码农的感觉是IOV做的和YggDrash其实有点类似的,都是力求让用户可以很容易地创建和定制出一个合适自己商业场景的公链,并且这些子链或“通证链”可以享受系统提供的基建服务。只不过Ygg是从主从链的角度说起,需要子链直接铆在根链上,而IOV是换成了推出一个通用协议,从行业标准化角度来讲这个故事,并且通过后面说到的链名服务来将所有链连在一起。所以虽然这个项目时不时地打高光在万能钱包上,其实应该可以算是个公共区块链体系/平台了。
4.2 IOV钱包
这种万能钱包的想法其实有不少团队都在做,我没有特别跟踪过这条线,所以也没法说太多。此类钱包,包括IOV的钱包的主要亮点是:
- 能在一个地方插叙到不同账本内资产的信息
- 可以发送交易到任一符合自己体系的区块链
- 支持跨链资产交换。
4.3 链名服务
说白了就是IOV体系提供的“黄页(Yellow page)”服务,里面记录了体系中所有的通证定义。类似于DNS那样,使得IOV钱包可以通过这个服务查询体系内某个特定的“通证链”、它的属性以及运行这个区块链的主机信息(IP地址等)。用户也可以将通证信息添加或更新到这个服务中。
比较神奇的是,这个链名服务本身也是一条区块链(其实也没什么好大惊小怪的,毕竟区块链本质上就是一个数据库)。这条链也是满足体系内通信协议的,而且还定义一个叫做IOV的代币。其实这条链感觉上就相当于是IOV系统内的“主链”了,虽然不是特别贴切,毕竟理论上只要实现了同一个标准通信协议,所有链之间都是平等的,但是这个毕竟是亲儿子链,所以你懂的。另外这条链的共识算法用的是POS。
这条“主链”中的IOV代币还有一个潜在的功能就是提供流动性,如果有人想在IOV平台上创建自己的“通证链X”,做ICO发行自己的币,那么就可以募集体系内的其他通证,换成IOV,然后等到有足够多的“通证X”的时候(比如预挖),再用IOV换成“通证X”发给投资人。
4.4 可读地址链接
就是把看不懂的一长串地址信息映射称人类可读的链接,类似于互联网域名。这个想法其实也不算新鲜了,以太坊的ENS就是类似的产品。IOV的白皮中说到这一块的实现还有些安全性问题需要解决,会在另外一个文档中进行细节披露。
总的来看,IOV想做的事情不只是个万能钱包,而是通过建立一个通信标准和体系来做到区块链间价值的聚合和互联,甚至支持新兴区块链的孵化和建立,这些都能做到的话确实是美事一桩。不过,码农这里也有几个疑问,可能还要找团队再确认下:
- 怎么能让老牌的区块链们也愿意上车可能是个问题,因为上车的话至少需要这些链也支持哈希锁定以及统一价值地址格式和签名,等等。这里估计会有扯皮的事情发生,相对于哈希锁定,侧链技术可能可以更加容易地把已有的牛x公链加入自己的系统里来,比如OneLedger将提供内置的BTC和ETH侧链。码农最近也在写OneLedger的技术分析,也和团队来回交流过好多次,估计下一篇就能见到它了。
- 跨链的交易查询和交易提交都需要通过之前说过的引导节点,这就需要引导节点具备高可用性和稳定性。虽然可以通过配置冗余节点来解决这个问题,但是仍旧稍显中心化的风险。
- 另外要吐槽一下的是IOV的技术白皮书大概是我见过最短的,5页哈哈哈,看起来真的快。一方面是很多地方写的过于简练并没有详细展开,比如哈希锁定和共识算法。另一方面也确实是没有特别宏大的创新需要连篇累牍的阐述和数学公式证明。它的优势主要是在于挑选合适的技术将其整合在一起,并且最终落地从而创造价值。
读后感:
1.我理解的原理是这样,利用单项散列函数来证明是资产的所有者授权解锁资产。
2.利用合约来约束住交易多方中一方作恶的可能性。
3.不过跨链的各个token之间的汇率,应该是私下约定的。