主页 > imtoken钱包最新版下载 > 闪电网络“肮脏的小秘密”:哈希时间锁定智能合约能否安全支付?

闪电网络“肮脏的小秘密”:哈希时间锁定智能合约能否安全支付?

imtoken钱包最新版下载 2023-04-16 05:21:47

比特币闪电网络(Lighting Network)的概念是在知名开发者约瑟夫发表的白皮书《比特币闪电网络:可扩展的链下即时支付》(The Bitcoin Lightning Network: Scalable Off-Chain Instant Payments)中提出的Poon 和 Thaddeus Dryja 从本质上讲比特币闪电网络支付,哈希时间锁定合约(Hashed Time Lock Contract)是一种安全处理“0 确认”交易的机制。 通过巧妙设置“智能合约”,用户可以进行未经确认的交易。

闪电网络支付通道是通过哈希时间锁定智能合约实现的——这实际上是一种限时转账。 通过这个智能合约,双方约定转账方先冻结一笔钱,并提供哈希锁委托发起方的交易币锁,如果有人能在规定时间内提供之前产生的支付的加密证明,且与之前约定的哈希值一致,交易即可完成。

然而,闪电网络哈希时间锁定智能合约真的如我们想象的那么完美吗? 在此,星球君(微信:o-daily)希望通过Peter R. RIzun的分析告诉大家一个答案。 首先,Peter R. RIzun 虚构设计了三个人:Alice、Bob 和 Carol,通过他们之间的闪电网络交易来解释哈希时间锁定智能合约的问题。

闪电通道可以看作是一串珠子,拉在两个人之间(参见图1)。 如果爱丽丝要付给鲍勃一笔费用,就相当于把自己的一颗珠子推给了鲍勃。 如果 Bob 和 Carol 之间也存在闪电网络通道,那么 Alice 可以通过 Bob 向 Carol 支付费用,相当于:Alice 推一个珠子给 Bob,Bob 再推一个珠子给 Carol。 这里我们会发现闪电网络流动性的基本规则存在一个问题,就是珠子可以从一侧移动到另一侧,但它们不能离开它们所依附的“绳子”。

图 1:Alice 可以向 Carol 发送付款,但需要通过 Bob 路由交易。 由于珠子不能离开它们所附着的“绳子”,Bob 可以在与 Alice 相连的“绳子”上添加一个珠子,并从与 Carol 相连的“绳子”上移除一个珠子。

这实际上就是资金在闪电网络上的流动方式,但是这个模型并没有告诉我们为什么通过闪电网络支付是安全可靠的。 例如,如果 Bob 保留了 Alice 推给他的珠子,而从未将珠子发送给 Carol 怎么办?

事实上,这就是写这篇文章的目的——找到“究竟是什么让闪电支付变得‘无需信任’?”这个问题的答案。 另外,在文末,我们会揭开闪电网络的一个肮脏小秘密:闪电网络小额支付并非完全“无需信任”——路由节点可能会损失客户资金。

(星球大王注:区块链trustless是指用户不需要信任任何第三方,用户使用trustless系统或技术处理交易时非常安全流畅,交易双方无需依赖可信即可安全交易第三者。)

哈希时间锁定智能合约 (HTLC)

为了解释是什么阻止了 Bob 保留 Alice 发给他的珠子,而不是向 Carol 发送珠子,我们需要在闪电网络通道上引入一个物理类比——“锁”。 “锁”可以放在爱丽丝、鲍勃和卡罗尔所系的“绳子”上,限制珠子的移动。 只有满足一定的条件,“锁”才会打开。 闪电网络支付中使用的哈希时间锁智能合约包含两种类型的“锁”(见图 2):

第一个是“锁”,只有提供正确的密码才能打开——我们称之为“散列锁”。

第二个是延迟后自动打开的“锁”——我们称之为“时间锁”。

图2:当hash值达到指定值(本例为45f8),输入密码打开hash锁; 并且时间锁将在指定的时间(本例中为 48f8 小时)后打开。

现在,让我们回到爱丽丝通过 Boc 向卡罗尔支付珠子的例子。 为了使这个支付交易“无需信任”,Alice、Bob 和 Carol 需要同时在线,并且必须以各方设定的方式参与交易。

首先,Alice 必须要求 Carol 提供一个密码并告诉她该密码的哈希值。 让我们假设我们想出的密码是“boondoggle”,对应的哈希是“45f8”。 接下来,Alice 想在她和 Bob 之间设置一个哈希锁,这把锁必须通过输入一个哈希值为“45f8”的密码来打开。 此时,Alice 和 Bob 都无法打开哈希锁,因为他们都不知道密码。 然后 Alice 会向这个哈希锁推送一个珠子,最后她会在她的珠子上设置一个时间锁,并设置它在 48 小时后打开(如图 3 所示)。

图 3. 在知道 Carol 秘密设置的密码哈希值后,Alice 可以设置一个哈希锁,从而保护他转移给 Bob 的代币(然后路由给 Carol)。 然后爱丽丝用时间锁锁定代币,如果鲍勃未能在 48 小时内付款,她就拿回钱。

如果他能在 48 小时内找到 Carol 设置的密码,Bob 就可以获得 Alice 送来的珠子。 同时,Bobby 也知道(因为 Alice 会告诉他)Carol 会公开代码以换取他的一颗珠子。 为了诱使 Carol 采取行动,Bob 可以在他和 Carol 之间放置一个相同的哈希锁,其中放置了他自己的一个珠子,然后 Bob 可以设置另一个时间锁(如图 4 所示)。 他知道,为了让 Carol 打开哈希锁并拿走珠子,Carol 必须输入一个密码——显然,这个密码将与 Alice 为 Bob 设置的打开哈希锁的密码相同。

图 4:如果 Carol 在 48 小时之前公布了 Alice 的密码,那么 Bob 将看到 Alice 提供给他的令牌。 Bob 会设置相同的哈希锁,然后将令牌推送给 Carol,并使用时间锁锁定该令牌。 Carol 获取 Bob 令牌的唯一方法是公布 Bob 从 Alice 那里获取令牌所需的哈希锁密码。

Carol看到她想要得到的珠子,将密码“boondoggle”输入锁中(Bob可以看到并记住),锁的CUP确认密码“boondoogle”的哈希值为45f8,并打开锁. 接下来,卡罗尔沿着“绳子”将珠子移到她的身边(如图5所示)。

在图 5 中,Carol 宣布了她的密码,然后打开密码锁取出令牌。

Bob获得Carol的密码后,用同样的方法解锁Alice给他的珠子(如图6),整个支付交易就完成了。

图6. 得到Carol的密码后,Bob就可以得到Alice给他的珠子,整个支付交易就此完成。

你可能想知道,为什么 Bob 是第一个参与整个过程的人? 因为如果 Carol 不配合,Bob 的珠子就会被冻结,直到时间锁期满。 在实际交易中,Alice 给 Bob 的资金可能比她给 Carol 的资金多,因为 Alice 希望通过这种方式作为 Bob 工作的费用,或者避免不必要的风险。 支付交易完成后,Bob 的账户余额会略高于交易完成前,从而也激励他完成本次交易(或类似交易)。

当然,你可能也想知道为什么整个闪电网络交易过程都使用时间锁。 事实上,如果由于各种原因导致支付交易失败,时间锁可以让交易各方收回资金。 举个例子,想象一下,如果 Alice 将珠子转给 Bob,并加了哈希锁和时间锁,Bob 突然不配合交易了。 这时,时间锁可以帮助爱丽丝取回她发给鲍勃的珠子,因为她只需要等待时间锁到期即可。 在这期间,Bob 根本无法偷到珠子,因为他需要 Carol 的 ima,如果 Bob 不转一颗珠子给 Carol,他就得不到密码,所以对于 Bob 来说,他必须转一颗珠子给 Carol得到一颗珠子。

如果您对闪电网络的支付过程感兴趣,那么值得深入研究一下,如果爱丽丝、鲍勃和卡罗尔中的一个在各个步骤中变得不合作比特币闪电网络支付,他们是否会因为彼此的行为而面临损失资金的风险。

闪电网络的肮脏小秘密

闪电网络有一个鲜为人知的小秘密,如果我们想了解这个秘密是什么以及它如何影响闪电支付交易——我们需要更深入地挖掘。

现在让我们回想一下,当 Alice 通过 Bob 向 Carol 发送支付交易时,有一个“中间状态”(如图 7 所示)。 我们直接用比特币来解释吧。 通道状态包括三个输出:

1.爱丽丝的比特币;

2. Bob的比特币;

3. 比特币“飞行”。

图7. 此时闪电网络通道状态交易包含三个输出:Alice的比特币、Bob的比特币、“交易过程”比特币。

问题是:如果比特币在交易过程中的价值低于比特币尘埃(dust)阈值,那么这笔费用就不能表示为通道状态交易中的第三种输出! 换句话说,如果支付金额太小,则无法使用哈希锁和时间锁来保护交易。 (星球君o-daily注:Dust是那些数量太少的UTXO,花费它们需要支付的手续费高于其自身价值,所以dust不能被花费。)

为了解释闪电网络是如何处理这个问题的,我必须先承认一个问题。 初始示例中“绳子”上的珠子数量不是固定的。 事实上,每根“绳子”旁边都应该有一个“篮子”,上面写着“矿工费”,里面装着一小部分珠子。 “篮子”中代币的价值将由确认通道状态交易的矿工认领,然后将通道状态推送到区块链。 也就是说,有些珠子会从“绳子”移到“篮子”,或者从“篮子”回到“绳子”,但这只有在通道两端的人都同意的情况下才会发生。

对于小额支付交易,Alice 和 Bob 只是将“交易过程中的价值”移动到“费用篮子”中,而不是使用哈希锁和时间锁来锁定价值(如图 8 所示)。 Bob 相信 Alice 会与他合作,当他公开 Carol 的密码时,“交易过程中的价值”将被他从“费用篮子”中取出。

图8,如果“交易过程”中的比特币低于粉尘阈值,则不能使用哈希时间锁定智能合约机制,因为通道状态交易在广播的情况下无法被挖掘,此时“交易process”生成的代币会被转入“矿工费篮子”。

Bob 然后可以将“交易中价值”转储到他与 Carol 共享的第二个“费用篮子”中,并承诺如果他知道密码,就会将这个“篮子”交给 Carol。 Carol 将这个秘密告诉了 Bob,Bob 和 Carol 一起将 Fee Basket 中的款项转给 Carol 这边。 接下来,Bob 回到 Alice 身边,告诉她 Carol 的秘密,然后,如果一切顺利,Alice 也配合 Bob 从“篮子”中取出“交易过程中的价值”,放在 Bob 的身边“绳索”。

与之前描述的散列时间锁定智能合约不同,上述防御依赖于信任。 例如,Carol 可以将密码透露给 Bob,然后 Bob 可以将付款留在“费用篮”中,然后直接去找 Alice 并告诉她密码以获取付款。

在这种情况下,Carol 的追索权非常有限:她要么什么都不做接受损失,要么关闭她与 Bob 的频道。 但是关闭与 Bob 的通道并不能满足她,因为她本应收到的钱实际上已经发送给了矿工。

虽然上述问题听起来微不足道,但它们在实践中确实起作用。 当然,Bob 没有不给 Carol 钱的特别动机,但如果他不给 Carol,那对他也没有任何好处,因为矿工会保留额外的资金,这些资金不会留在 Bob 那里。 不仅如此,如果 Bob 真的这样做了——即不把 Alice 通过自己转给 Carol 的钱给 Carol,Carol 很可能会关闭通道,这意味着 Bob 是不值得信任的。 从这个角度来看,Bob 能够造成的伤害似乎是比较有限的。 除了支付交易的金额,还有建立新的闪电通道的成本(因为 Carol 已经关闭了通道)。

为什么“闪电网络的肮脏小秘密”值得关注

闪电网络的“肮脏小秘密”非常有趣,因为它揭示了第一层(L1)的问题(摩擦)已经转移到第二层(L2),迫使第二层协议实现复杂和不可理解解决方案。 在这种情况下,这些解决方案将改变闪电网络“无需信任”的本质:对于粉尘阈值以上的支付交易,Alice、Bob和Carol不会因为对方的任何行为而损失资金; 对于有粉尘门槛的支付交易,Alice、Bob、Carol 可能会因为对方的过错而损失资金——显然,这与人们理解的闪电网络安全支付交易模型不同。

有人可能会争辩说:

“我们谈论的是小额支付,所以谁在乎呢?”

然而,这个想法实际上是错误的,原因有二:

1、以区块链作为高手续费清算层的比特币核心扩容计划,将提高粉尘门槛。 Dust其实就是那些未花费的交易输出,数量太少,花费它们需要支付的链上手续费高于其自身价值,所以dust是不能花费的。 但如果提高粉尘门槛,比如100美元,那么全球大部分的比特币交易都可能变成“粉尘”;

2. 部分小微支付交易可能快速连续丢失(如发生闪电网络路由攻击),可能造成重大损失。

想象一下,未来大部分的支付交易都发生在闪电网络上,第一层的交易手续费永远超过 100 美元。 这时候主链上100美金以下的dust输出就会变得一文不值,因为链上手续费高于交易金额本身。

现在闪电网络还有一个问题:即使是 50 美元的支付交易也不一定是“无信任的”,因为如果 50 美元低于粉尘交易门槛(考虑到 50 美元也有可能出现链上手续费为高于交易金额本身,所以未来设置这个粉尘阈值政策是合理的),并且哈希时间锁定智能合约不能用于保护 50 美元以下的支付交易,这意味着用户可能会损失 50 美元,因为没有你自己的错。

当然,如果为了避免这个肮脏的小秘密引发“漏洞”,开发者可以尝试将灰尘阈值设置为1美元,这样闪电网络的大部分交易都可以继续使用哈希时间锁定智能合约来保证资金安全。 但问题是,当灰尘阈值设置低时,输出不会被花费。

也有人认为路由节点可能会损失客户资金。 如果未来粉尘费门槛提高,这些流失的资金规模可能会比较大。 我也不太认同这个观点,因为闪电网络支付路由的全部目的就是为了交易手续费赚钱。 通常,路由会利用自身的手续费优势来吸引更多的流动性。 路由节点的交易量越大,手续费越高。 越来越多。 现在,闪电网络开发人员已经意识到不可能让所有用户都路由支付交易。 对于普通用户,更鼓励开发者使用非广告渠道进行支付交易,千万不要把自己变成路由。

如果未来闪电网络的费用变得更高,路由中心(hub)可以对用户资金提供有效的监管控制。 然而,路由中心实际上是不可靠的。 对于独立用户而言,如果支付交易不受哈希时间锁定智能合约的保护,则很难在区块链上清算并收回资金。 不仅如此,如果用户余额与链上手续费处于同一个数量级,用户也会被路由中心套牢。 事实上,摆脱一个“坏”的渠道是不值得的,因为这样做会耗尽用户所有的资金。

此外,路由中心还会设置一些特定条件,例如出于反洗钱(AML)和“了解你的客户(KYC)”目的不转发洋葱路由信息。 如果客户未能满足这些特定条件,路由中心将无限期锁定客户资金。 因此,用户唯一的选择是要么在区块链上清算,要么损失所有资金——这根本不是一个真正的选择! 更可怕的是,路由中心还可以设置高额的费用,用户想要自己的钱就得掏这笔钱,自己也别无选择。

未来,那些连接更好但收取更高链上费用的闪电网络路由中心将不得不受到监管,因为他们已经对客户资金进行了“托管控制”。

因此,我们是否可以设想推导出这样一个定律:

当第二层的支付金额低于第一层可行的支付交易金额时,交易不能“失信”。

如果底层区块链不受约束,闪电网络很可能不会像人们预期的那样工作。

最后的话

未来,当大部分比特币交易都发生在闪电网络上,区块链也收取高额手续费时,人们可能会发现闪电网络与预期大相径庭,除了本文提到的这个“肮脏网络”。 闪电网络的其他潜在问题包括:

1. 闪电网络扩展的是交易,而不是用户。 运行一个完整的闪电网络交易验证器的成本仍然很高;

2. 第一层的问题(摩擦)会影响第二层的可替代性,代币具有“位置依赖”的价值;

3、流动性:大部分“财富状态”无法通过闪电网络交易获得,支付失败在所难免;

4. 如果闪电网络非常庞大,路由会变得越来越困难:闪电网络路由中心会集中减少路由和流动性问题;

5. 对于使用非托管钱包的用户来说,体验总是很糟糕:用户需要在交易所接收资金,然后不得不雇佣“瞭望塔”来监控欺诈行为的渠道,并提供路由服务来发送支付交易,甚至动态备份通道状态以防止数据损坏。

6、系统性风险:闪电网络通道(热钱包)需要锁定大量代币,以保证足够的流动性;

7. 当区块奖励耗尽时,第一层的总矿工费将不足以保证区块链的安全。