LIC:闪电网络“肮脏的小秘密”:哈希时间锁定智能合约能确保支付安全吗?_No Face Inu

Odaily星球日报译者|Moni

比特币闪电网络概念是在知名开发人员JosephPoon和ThaddeusDryja发布的《比特币闪电网络:可扩展链下实时支付》白皮书中提出的,本质上是由哈希时间锁定智能合约来安全地处理“0确认“交易的一种机制,通过巧妙设置”智能合约“,用户可以在闪电网络上进行未确认的交易。闪电网络支付通道时通过哈希时间锁定智能合约来实现的——这其实就是限时转账,通过该智能合约,双方约定转账方先冻结一笔钱,并提供一个哈希锁将发起方的交易代币锁定,如果在规定时间内有人能够提供之前生成支付的加密证明,并且与之前约定的哈希值一致,交易即可完成。然而,闪电网络哈希时间锁定智能合约真的如我们想象中的那么完美吗?在此,星球君希望通过PeterR.RIzun的分析告诉大家一个答案。首先,PeterR.RIzun虚构设计了三个人:Alice、Bob、和Carol,通过他们之间的闪电网络交易来解释哈希时间锁定智能合约的问题。闪电通道可以被看作是再两个人之间伸展的一串珠子,Alice如果想要支付给Bob一笔费用,相当于把自己的一个珠子推送给Bob。如果Bob和Carol之间也有一个闪电网络通道,那么Alice可以通过Bob给Carol支付,相当于:Alice推送一个珠子给Bob,然后Bob再推送一个珠子给Carol。这里我们就会发现闪电网络流动性基本规则中存在的一个问题,即珠子可以从一侧移动到另一侧,但是却无法离开他们依附的那条“绳子”。

图1:Alice可以发送一笔支付给Carol,但需要通过Bob路由这笔交易。因为珠子不能离开他们依附的那根“绳子“,Bob可以在与Alice连接的那根”绳子“上增加一颗珠子,然后在与Carol连接的那根”绳子“上减少一颗珠子。这其实就是闪电网络上的资金流动方式,但是这种模式并没有告诉我们为什么通过闪电网络支付是安全可靠的。举个例子,如果Bob一直保留Alice推送给他的那一个珠子,然后一直不给Carol发送一个珠子,情况又会如何呢?事实上,这就是本文撰写的目的——寻找“究竟是什么让闪电支付变得‘去信任’?“这个问题的答案。此外在文章的最后,我们还会揭示闪电网络一个肮脏的小秘密:闪电网络小额支付并非完全”去信任“——路由节点可能会丢失客户资金。哈希时间锁定智能合约

为了解释是什么阻止Bob一直保留Alice发送给自己的那一个珠子,而且不把一个珠子发送给Carol,我们需要在闪电网络通道上引入一个物理类比——“锁“。”锁“可以被放置在Alice、Bob和Carol共同依附的那条“绳子“上并限制珠子的移动,只有当特定条件被满足的时候,”锁“才会被打开。闪电网络支付中使用的哈希时间锁定智能合约包含两种类型的”锁“:第一种是在提供正确密码的时候才能被打开的“锁“——我们称之为”哈希锁“。第二种是在一段时间延迟之后自动打开的“锁“——我们称之为”时间锁“。

图2:当哈希值达到指定值的时候,输入密码即可打开哈希锁;而时间锁则是在指定时间过后就会被打开。现在,让我们重新回到Alice通过Boc向Carol支付一个珠子的例子上。为了让这笔支付交易“去信任“,Alice、Bob和Carol需要同时在线,而且还要按照各方都设定好的方式参与交易。首先,Alice必须要求Carol想出一个密码,并告诉她这个密码的哈希值。让我们假设想出的这个密码是“boondoggle“,而与之对应的哈希值是”45f8“。接下来,Alice要在她和Bob之间设置一个哈希锁,并且该锁必须要在输入哈希值是”45f8“的密码时才能被打开。此时,Alice和Bob都无法打开这个哈希锁,因为他们都不知道密码。Alice之后会向这个哈希锁推送一个珠子,最后她会在自己的珠子上设置一个时间锁,并将其设置为48小时之后打开。

图3,在了解到Carol秘密设置的密码哈希值之后,Alice可以设置一个哈希锁,并以此保护他转移给Bob的代币。Alice就会用时间锁锁定代币,如果Bob未能在48小时内完成付款,她就会把这笔钱取回。如果能够在48小时内找到Carol设定的密码,Bob就能拿到Alice发出的珠子。与此同时,Bobby也知道Carol会公布这个密码来换取他的一个珠子。为了诱使Carol采取行动,Bob可以在他和Carol之间放置一个相同的哈希锁,其中放置了他自己的一个珠子,然后Bob可以再设置另一个时间锁。他知道如果要让Carol打开哈希锁并拿走珠子,Carol必须要输入密码——很明显,这个密码会和Alice设定给Bob打开的那个哈希锁密码一样。

图4:如果Carol在48小时结束之前公布了Alice的密码,那么Bob会看到Alice提供给他的代币。Bob会设置相同的哈希锁,然后推送一个代币给Carol,并用一个时间锁锁定该代币。Carol要获取Bob这个代币的唯一方式,就是公布Bob需要从Alice那里获取代币的哈希锁密码。Carol看到自己要获取的那个珠子,然后在锁中输入密码“boondoggle“,该锁的CUP确认了密码为“boondoogle”的哈希值是45f8,然后就打开了这个锁。接下来,Carol把这个珠子顺着“绳子”移到了自己这边。

图5,Carol公布了自己的密码,然后打开密码锁取出代币。获取了Carol的密码之后,Bob用同样的方式解锁了Alice给自己的珠子,整个支付交易完成。

图6,获取了Carol的密码之后,Bob现在可以获取Alice给自己的珠子,整个支付交易也因此完成了。你可能想知道,为什么Bob会是第一个参与整个流程的人?因为如果Carol没有参与合作的话,Bob的珠子会被一直冻结,直到时间锁过期。而在实际交易中,Alice向Bob发送的资金可能会比她给Carol的资金更多一点,因为Alice希望用这种方式作为Bob工作的费用,或是避免出现不必要的风险。支付交易完成之后,Bob的账户余额会比这笔交易完成之前的更多一点,从而也激励他能去完成这笔交易。当然,你可能也想知道在整个闪电网络交易过程中为什么要使用时间锁。事实上,如果支付交易因为各种原因未能成功,时间锁能够让交易参与各方收回自己的资金。举个例子,想象一下如果Alice把珠子转移给Bob并添加了哈希锁和时间锁之后,Bob突然不合作处理这笔交易,此时时间锁就能帮助Alice取回自己发送给Bob的那个珠子,因为她只要等待时间锁到期就可以了。在此期间,Bob根本无法偷走这个珠子,因为他需要Carol的ima,而且如果Bob不给Carol转移一个珠子的话,他就无法获得这个密码,因此对于Bob来说必须转出一个珠子,才能获得一个珠子。如果你对闪电网络支付流程感兴趣的话,可以深入探讨一下如果其中一方在不同步骤中变得不合作,Alice、Bob和Carol会不会因为对方行为面临资金损失的风险。闪电网络的肮脏小秘密

闪电网络有一个很少人知道的肮脏小秘密,如果想要了解这个秘密是什么,以及这个秘密对闪电网络支付交易会有什么影响——我们需要再深入挖掘一下。现在让我们回想一下,当Alice通过Bob向Carol发送一笔支付交易的时候,其中还存在一种“中间状态”。我们就直接用比特币来做解释,渠道状态包括三种输出:1、Alice的比特币;2、Bob的比特币;3、“交易过程中”的比特币。

图7,此时闪电网络通道状态交易包含了三种输出:Alice的比特币、Bob的比特币、以及“交易过程中”的比特币。问题在于:如果交易过程中的比特币价值低于低于比特币粉尘阙值,此时这笔费用则不能在通道状态交易中表示为第三类输出!换句话受,如果支付金额太小,则无法使用哈希锁和时间锁来保护这笔交易。为了解释闪电网络如何处理这个问题,我必须要首先坦白一个问题,一开始例子中“绳子“上的珠子数量并不是固定不变的。实际上,每根”绳子“边上都应该还有一个”篮子“,这个”篮子“的标签是”矿工的费用“,其中包含了很小一部分珠子。”篮子“里的代币价值将会由确认通道状态交易的矿工声明,然后渠道状态会被推送到区块链上。也就是说,有一部分珠子会从”绳子“上移动到”篮子“里,或者从”篮子“里移回到”绳子“上,但这种情况只有当通道两端的人都同意时才会发生。对于小额支付交易而言,Alice和Bob只是将“交易过程中的价值“移动到”费用篮子“里,而不是使用哈希锁和时间锁来锁定价值。Bob相信Alice会与他合作,而当他公布Carol的密码的时候,”交易过程中的价值“就会被他从”费用篮子“里拿出来。

图8,如果“交易过程中“的比特币低于粉尘阙值,则不能使用哈希时间锁定智能合约机制,因为在广播情况下通道状态交易无法被挖掘,此时”交易过程中“的代币会被倾倒进”矿工费用篮子“里。Bob随后可以将“交易过程中的价值“转储到他与Carol分享的第二个”费用篮子”里,并且承诺如果自己知道密码之后就会把这个“篮子”给Carol。Carol告诉了Bob这个秘密,然后Bob和Carol一起把“费用篮子”里的这笔支付款转移到了Carol的一侧。接下来,Bob又回到Alice这边,告诉了她Carol的秘密,然后,如果一切顺利的话,Alice也会与Bob合作,把“交易过程中的价值”从“篮子”里取出来并放到“绳子”上Bob的一侧。与前面描述的哈希时间锁定智能合约不同,上述防范依赖于信任。比如,Carol可以向Bob透露密码,然后Bob可以将付款留在“费用篮子”里,接着直接去找Alice并告诉她密码就能拿到的这笔付款了。在这种情况下,Carol的追索权是非常有限的:她要么什么都不做,并且接受损失,要么关闭她与Bob的通道。但是关闭与Bob之间的通道又无法成全自己,因为那笔她理应收到的钱其实已经被发送给了矿工。尽管上述问题听起来非常琐碎,但在实际情况下却真的能够运作起来。当然,Bob没有什么特别的动机不把钱给Carol,但是如果他不给的话,对自己也没什么好处,因为矿工将会保留额外的资金,这笔钱并不会留在Bob手上。不仅如此,如果Bob真的这么做——即不把Alice通过自己发送给Carol的钱给Carol,Carol很可能会关闭通道,这意味着Bob是不值得信任的。这样看来,Bob能够造成的损害似乎也比较有限,除了这笔支付交易的金额之外,还有就是构建一个新闪电通道的成本。为什么“闪电网络肮脏的小秘密”值得关注

闪电网络这个“肮脏的小秘密”非常值得关注,因为它揭示了第一层的问题已经转移到了第二层中,迫使第二层协议不得不实施复杂且难以理解的解决方案。在这种情况下,这些解决方案会改变闪电网络的“去信任”本质:对于高于粉尘阙值的支付交易,Alice、Bob和Carol都不会因为对方的任何行为而损失资金;而对于低于粉尘阙值的支付交易,Alice、Bob和Carol则有可能因为对方的过错而损失资金——显然,这与人们理解的闪电网络安全支付交易模式不一样了。可能有人会争辩说:“我们谈论的只是小微支付,所以谁会在乎这个问题呢?”然而,这种想法其实并不对,原因有以下两点:1、使用区块链作为高费用清算层的比特币核心扩容计划将会提升粉尘阙值。粉尘其实是那些金额太小的未花费交易输出,把他们花费出去需要支付的链上费用高出了其自身价值,所以粉尘就花不出去了。但是如果将粉尘阙值提升,比如100美元,那么世界上绝大部分比特币交易可能都会变成“粉尘”;2、一些小微支付交易可能会出现快速、连续地丢失,可能会造成重大损失。想象一下,未来大部分支付交易都发生在闪电网络上,第一层上的交易费用一直都超过100美元,此时主链上低于100美元的粉尘输出就会变得没什么价值了,因为链上费用比交易金额本身还高。现在闪电网络还有另一个问题:即使50美元的支付交易也可能无法做到“去信任”,因为如果50美元低于粉尘交易阙值的情况下,哈希时间锁定智能合约就不能用于保护50美元以下的支付交易了,也就是说用户可能会因为自己的过错导致损失50美元。当然,如果为了避免这个肮脏的小秘密引发“循环漏掉”,开发人员可以尝试将粉尘阙值设置为1美元,这样大多数闪电网络交易就可以继续使用哈希时间锁定智能合约来保障资金安全。但问题是,当粉尘阙值设置的较低,输出就不会被花费出去。也有人觉得路由节点可能会丢失客户资金,如果未来粉尘费用阙值提升的话,这些丢失的资金规模可能会比较大。我同样也不太认同这种看法,因为闪电网络支付路由的全部目的就是以交易费来赚钱,通常路由会利用自己的费用优势吸引更多流动性,路由节点的交易量越多,费用自然也就越多。现在,闪电网络开发人员已经意识到不可能让全部用户都来路由支付交易,对于普通用户来说,开发人员更多地是鼓励他们使用非广告通道来进行支付交易,同时永远不要把自己变成一个路由。如果未来闪电网络上的费用变得更高,那么一个路由中心则可以对用户资金进行有效的监管控制。然而路由中心其实也不可靠,对于一个独立用户来说,如果支付交易没有得到哈希时间锁定智能合约的保护,就很难在区块链上清算并收回资金。不仅如此,如果用户余额与链上费用处于同一数量级,用户也会被路由中心困住。事实上,摆脱一个“糟糕”的通道其实很不值得,因为这么做会让用户失去自己的全部资金。此外,路由中心还会设定一些特定条件,比如出于反和“了解你的客户”目的而不转接洋葱路由信息。如果客户无法满足这些特定条件的话,路由中心就会无限期地锁定客户资金。这样一来,对用户来说他们唯一的选择就是要么在区块链上进行清算,要么就丢失全部资金——这根本就不算是真正的选择!更可怕的是,路由中心还可以设置高额费用,用户如果想要获得自己的钱,就不得不支付这笔钱,他们别无选择。未来,那些连接状态较好、但却收取较高链上费用的闪电网络路由中心必须要受到监管,因为他们已经能够对其客户资金进行“托管控制”了。因此,我们能不能设想推出一个这样的法则:当第二层上的支付金额低于在第一层上可实行的支付交易金额,该交易就不能被“去信任”。如果底层区块链不受约束,闪电网络就很可能无法像人们所期望的那样工作。最后的话

未来,当大多数比特币交易都发生在闪电网络上,而且区块链也收取高额费用的时候,人们可能会发现闪电网络和预期的有很大不同,除了本文提到的这个“肮脏的小秘密”之外,其他闪电网络的潜在问题还包括:1、闪电网络扩容的是交易,而不是用户。运行完整闪电网络交易验证节点的成本仍然很高;2、第一层上的问题会影响第二层可互换性,代币存在“位置依赖”价值;3、流动性:通过闪电网络交易,大多数“财富状态”其实是无法获得的,支付失败也是不可避免的;4、如果闪电网络铺的很大,路由就会变得越来越难:闪电网络路由中心将集中化地减少路由和流动性问题;5、对于使用非托管钱包的用户来说,体验总是很糟糕:用户需要在现上接收资金,然后还要雇佣“瞭望塔”来监控通道是否存在欺诈行为,并且订阅源路由服务来发送支付交易,甚至还要动态备份通道状态防止数据损坏。6、系统性风险:闪电网络通道里需要锁定大量代币,这样才能确保提供足够的流动性;7、当区块奖励用完的时候,第一层上的总矿工费将不足以确保区块链安全。

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

区块博客

[0:15ms0-4:852ms