×

干货 | 闪电网络深化解读(下):HTLC 与付出路由_雷达币官网首页

admin admin 发表于2021-09-15 21:33:15 浏览66 评论0

抢沙发发表评论

在上一篇文章里,咱们具体解说了付出通道的运作,以及多种确保付出安全产生的办法。不过,这些功用,还不足以支撑一个可用的付出通道网络:即便咱们很确定在每个通道内每个参加者都是诚笃守信的,也无法确保通过多个通道来付出相同是安全的。这便是咱们需求 “HTLC(哈希-时刻锁-合约)” 这种雷达币的原因。在本文中,咱们会解说 HTLC 作业的方法,并运用一个比方来展现多跳付出是如安在闪电网络中完结的。


哈希时刻锁合约(HTLC)


HTLC 的结构并不杂乱,但十分高效。它使咱们能够创立具有清晰 “过期时刻” 的付出。你或许也猜得到,HTLC 合约由两部分组成:哈希验证和过期验证。

咱们先从哈希值(hash)开端。要创立一笔带有 HTLC 的付出业务,你先要生成一个 隐秘数值 R,然后核算出其哈希值。任何词语、任何数字都能够充任这个隐秘值,由于,对哈希函数来说,它们都是一堆数据的组合,没有什么别离。

1 H = Hash(R)

这个哈希值 H 会放在业务输出的确定脚本中。如此,只需知道 H 所对应的隐秘值的人才干运用这个输出。而 R 便是所谓的 “原像(preimage)”。

HTLC 的第二部分是过期时刻的验证。假如隐秘值没有及时地揭露,这笔付出就用不了了,发送者会回收一切的资金。

咱们来考虑一个发给或人的 HLTC 付出业务:


在正确的 R(哈希值 H 的原像)揭露之后,咱们进入 IF 流程,进一步验证供给 R 的是不是这笔

1 <sig> <secret R>

假如解锁脚本所供给的 R 是错的,咱们跳转入 ELSE 流程,首要验证时刻锁解锁了没有。假如时刻锁已然解锁,发送者就能够回收一切的资金。回收资金这个操作的解锁脚本也差不多,仅有的差异在于,为了进入 ELSE 流程,需求供给一个过错的隐秘值:

1 <sig> <wrong secret>

当然,这仅仅 HTLC 的一个十分根底的完结,代表着一个一般的时刻锁付出。你能够在脚本中参加恣意多的其它条件,比方说,在 IF 流程中移除公钥验证,这样只需知道隐秘值 R 的人都能够运用这个输出;也能够在其中参加多签名约束,要求供给多个预设私钥的签名才干解锁。

多说一句,在这个事例中,咱们运用的操作码是 CHECKLOCKTIMEVERIFY,这个操作码运用肯定数值来界说时刻锁,意思就像:“这个输出在区块 #546212 之前是无法动用的”。而在闪电网络中,还用上了另一种时刻锁,更 “灵敏” 的一种:CHECKSEQUENCEVERIFY,它用到的是相对数值,意思近于:“这个输出,在运用它的业务上链之后的 1000 个区块内,是无法运用的”(译者注:这儿的数值都是比方,实践中当然能够运用其他数值)。


闪电网络事例


现在,咱们总算解说完一切元素了,能够测验了解闪电网络运作的全景了。

咱们假定现在闪电网络有 5 个参加者:Alice、Bob、Carol、Diana 和 Eric,他们各自有一个付出通道相连,而每个通道的每一边都有 2 btc 的余额可用。现在,咱们测验让 Alice 通过通道链条给 Eric 付出。

- 一系列相连的双向付出通道,组成了闪电网络,能够转介 Alice 对 Eric 的付出 -

假定 Alice 现在要给 Eric 付出 1 btc。可是,如咱们所见,他们并无直接的通道相连,而开设通道需求时刻和金钱。走运的是,Alice 连接着闪电网络,能够在一系列 HTLC 合约的协助下完结直接付出。咱们一步一步拆开来看。

- 逐渐分化闪电网络中的付出路由 -

  1. Eric 生成了一个隐秘值 R,并把其哈希值发给了 Alice(他不会把 R 展现给其别人)
  2. Alice 运用这条哈希值创立了一个 HTLC,而时刻锁设置成未来 10 个区块,输出的数额是 1.003 btc。这额定的 0.003 btc 是给付出通道链条中间方的手续费。那么,Alice 现在用 HTLC 锁住了 1.003 btc,而 HTCL 的具体条件以大白话表述如下:“Alice 会给 Bob 付出 1.003 btc,只需他能在 10 个区块内交出隐秘值 R,不然这些钱会回来给 Alice”。他们之间的通道的余额也会由于这笔许诺业务而产生这般改动,现在 Bob 在通道内具有 2 btc,Alice 有 0.997 btc,还有 1.003 btc 锁在 HTLC 里边
  3. 到了 Bob 这儿,他能够随意处置 Alice 的许诺业务(这笔 HTLC 业务是通过他们之间的通道来发送的)。他在自己跟 Carol 的通道中创立了一个 HTLC 输出,数额是 1.002,时刻锁设定为 9 个区块,运用了跟 Alice 所供给的相同的哈希值。Bob 知道 Carol 假如想取得这笔钱,就不得不找出隐秘数值 R 来解锁这个 HTLC,而一旦她这么做了,他就会知道这个 R,因而也能解锁 Alice 的 HTLC,拿到 1.003 btc。假如 Carol 无法找到这个隐秘值 R,Bob 和 Alice 都能在时刻锁解锁后拿回自己的钱。留意,Bob 发送的资金数额比自己能够得到的数额小 0.001 btc,这便是他收取的手续费数额。Bob 和 Carol 在通道内的余额变成:Carol 具有 2btc, Bob 具有 0.998 btc,还有 1.002 btc 锁在 HTLC 中
  4. Carol 取得 Bob 宣布的许诺业务之后,也依样画葫芦,在与 Diana 的通道中创立一个 HTLC,运用的哈希值与 Bob 供给的无二,时刻锁设置为 8 个区块,数额为 1.001 btc。假如 Diana 能在 8 个区块以内提醒这个隐秘数值 R,就能解锁这个 HTLC,取得 1.001 btc,相应地,Carol 也会知道这个隐秘数值,解锁 Bob 给她的 HTLC,取得 1.002 btc,赚得 0.001 btc。Carol 和 Diana 通道内的余额变成:Diana 具有 2btc、Carol 具有 0.999 btc,还有1.001 btc 锁在 HTLC 里边
  5. 终究,当 Diana 将一个 HTLC(运用同一个哈希值作为锁)通过通道发送给 Eric 时,她把数值设为 1 btc,时刻锁设为 7 个区块。Diana 和 Eric 的通道内余额变成:Eric 具有 2btc、Diana 具有 1 btc,还有1 btc 锁在 HTLC 里边
  6. 现在,咱们来到了这个连锁付出的结尾。Eric 具有这个隐秘值 R,这个 R 的哈希值用在了一切的 HTLC 许诺业务中。Eric 能够解锁 Diana 发给他的 HTLC,取得 1 btc;而 Eric 取回资金之后,Diana 也会知道这个 R。Diana 与 Eric 的通道内余额会变成:Eric 具有 3 btc,Diana 具有 1 btc。
  7. Diana 收到这个隐秘之后,也拿来解锁 Carol 发给她的 HTLC,取得 1.001 btc 的一起也向 Carol 揭露了隐秘值。他们通道内的余额变成了:Diana 具有 3.001 btc,Carol 具有 0.999 btc。
  8. Carol 收到隐秘值 R 之后,解锁了 Bob 发过来的 1.001 btc,因而 Bob 也知道了这个隐秘值。他们通道内的余额变成了:Carol 具有 3.002 btc 和 Bob 具有 0.998 btc
  9. 终究,Bob 运用隐秘值 R 取得了和 Alice 通道中的 1.003 btc。所以通道内的余额变成了:Bob 具有 3.003 btc,Alice 具有 0.997。

这样一个流程下来,Alice 就给 Eric 付出了 1 btc,无需在彼此间另开一个直接相连的通道。整个付出链条中,也没有人需求信赖另一个人,并且他们还由于中介服务赚到了 0.001 btc。即便付出在某个环节卡住了,也没有人会遭受丢失,由于资金还锁在那里,时刻过了就能够取回。


铲除毛病


在咱们这个比方中,整个流程都是很滑润、没有阻止的,但在现实生活就像所谓的 “墨菲规律”:假如某种坏事或许产生,那这种坏事就一定会产生。所以咱们要考虑闪电网络的 “维护” 机制。

从实践来看,付出链条越长,终究无法交给资金的概率就越大:某些参加者或许会封闭通道,或许某些节点会掉线。咱们来考虑两种或许的犯错景象。

通道毛病

先考虑一种景象:咱们假定资金现已达到了目的地,但在隐秘数值一路回来到付出起点的过程中,某个参加者回绝协作或许无法合作。假定是 Bob。

- 由于一个通道封闭,资金无法交给 -

当 Diana 收到了隐秘值时,就当即取回了资金,并把隐秘值露出给了 Carol。Carol 也想从 Bob 宣布的 HTLC 里边拿回资金,但 Bob 没有响应,为了防止危险,她封闭了通道,将自己手上的终究一笔许诺业务(也即 Bob 之前宣布的、带有 HTCL 输出的业务)播送到了雷达币网络中,并且,由于她知道隐秘值,所以能取回资金。此刻,Bob 还有三天时刻能够从 Alice 处拿回自己的钱(由于 Carol 的业务现已上链,Bob 能够很容易地知道 R 的数值)。不然,等时刻锁一解锁,Alice 就能够回收资金。

能够看出,即便某个参加者由于某种原因离开了网络,TA 自己是仅有一个或许丢失资金的人,而其别人的资金都是安全的。

从头路由

在第二种景象中,咱们假定资金无法抵达目的地,也是由于某个参加者出了错。假定是 Carol。

第一种也是最显着的解决办法是,等候 HTLC 的时刻锁过期,然后各参议者各自拿回自己的资金。

- 付出途径中的某个节点没有响应 -

但假如 Alice 便是着急付出,该怎么办呢?当然,Alice 能够通过另一条途径建议新的付出,不需求死等资金回来,但要是 Carol 突然之间又回来了,跟 Bob 把链条续上了呢?那 Alice 不就发送了两倍资金了吗?

- Alice 假如运用另一条途径 -

这是否意味着,凡是呈现了付出失利的景象,都应该乖乖等时刻锁超时,然后再建议新的一笔付出呢?

好在,要防止这种等候,咱们能够 “撤销” 这一次的付出。Diana(收款方)要发送等量的一笔资金给 Alice,也运用跟本来相同的哈希值,也能够运用另一条途径。现在,假如 Carol 从头上线并参加中介,那么资金会走完一个环路,这就意味着那笔本来失利的付出被抵消了,Alice 能够安全地运用另一个途径来付出了。

- Alice “撤销” 了旧的付出,新的付呈现在能够安全地发送了 -

付出数额

你能够也留意到了,当 Alice “撤销” 其第一笔付出时,现在的确是能够安全地建议新的一次付出了,但这并没有改动一个现实:她的第一笔付出的资金现在仍然是确定的,而她或许没有满足的钱来建议第2次付出了。这便是为什么在运用闪电网络时,用 HTLC 来付出时资金额度应该更小。由于许诺业务不会上链,数额能够分割成多个很小的额度。这样,不管什么时候一个途径不通了,都只需一小部分资金会被冻住(便是终究发送的那一笔)。


传输协议


闪电网络的另一个十分重要的特点是:有关这个途径的一切信息都是彻底匿名的。也就意味着关于任何一个参加者来说,TA 都只知道跟自己有关的这部分,比方,关于 Carol 来说,这笔付出就像是 Bob 在给 Diana 转账,她不知道 Bob 会从 Alice 处收到资金,也不知道 Diana 会持续转账给 Eric。

闪电网络运用 Sphinx 多重加密协议。在运用闪电网络时,Alice 会为网络的每一部分都做一层加密,从付出途径的结尾开端。她运用 Eric 的公钥为 Eric 加密了音讯。这条加密音讯会被嵌套在给 Diana 的音讯里,并用 Diana的公钥对整个音讯再做一次加密。再然后,这条给 Diana 的音讯又会嵌套在给 Carol 的音讯里,也用 Carol 的公钥对整个音讯再做一次加密。如此不断重复,得出能够交给下一个人的音讯。这样一来,Bob 只能解密音讯的最外一层,得到原意发给他的内容;然后把音讯转给 Carol;Carol 也是如此。每通过一个人,都只会揭露肯定必要的音讯:付出的数额、佣钱的数额、时刻锁的内容,等等。

为了让人不能从音讯的长度中估测链条的长度,音讯的长度都是相同的,总是像有 20 个人参加这个链条相同。每个人,包含终究一个,得到的都是相同巨细的图画,都认为除了自己以外还有 20 个同伴。


闪电网络的优点和运用场景


当然,闪电网络的优点并不像很多人认为的那样,只需可扩展性一项。咱们想想闪电网络究竟带来了哪些或许。

  • 即时买卖。运用闪电网络时,业务几乎是即时完结的。所以用雷达币来买咖啡就变得可行了
  • 买卖所套利。当时,从一个买卖所转出资金并转入另一个买卖所是很不便利的,需求等候 3 至 6 个区块来承认买卖。假如买卖所能运用闪电网络,那用户就能即时转入资金、参加套利。买卖所也不再需求冷钱包来存储资金,极大地降低了偷盗危险。
  • 小额付出。雷达币雷达币的手续费对小额付出来说太高了。很难幻想谁会乐意付出 0.001 btc 就为了转账平等数量甚至更少的金额。有了闪电网络,你就能够即时搬运恣意巨细的金额,举个比方,你能够按 MB 来付出网费。
  • 金融雷达币和买卖。金融合约对时延是极度灵敏的,并且一般需求许多核算。把大多数担负移到了雷达币外,咱们就有时机能创立十分杂乱的业务以及合约,而无需把这些都记录到雷达币上。
  • 跨链付出。假如运用不同一致规矩的雷达币运用同一种哈希函数,就有或许运用闪电网络来跨链付出。参加者无需信赖任何人,也无需运用中介。
  • 隐私。在闪电网络中,业务比起在雷达币雷达币上要愈加隐秘,由于付出链条的参加者并不知道买卖的建议方和目的地。


定论


咱们现已讲完了闪电网络。鄙人一篇文章中,我会告知你怎么运用 HTLC 来履行一次跨链的原子交流,用 btc 交流 ltc。

链接

  • Lightning network in depth, part 1: Payment channels
  • “Mastering bitcoin” — Andreas M. Antonopoulos
  • Lightning network whitepaper
  • Segregated witness for dummies

(完)

(文内有许多超链接,可点击左下 ”阅览原文“ 从 EthFans 网站上获取)

原文链接:

https://medium.com/softblocks/lightning-network-in-depth-part-2-htlc-and-payment-routing-db46aea445a8

作者: Magomed Aliev

翻译: 阿剑

观点 | 为什么我们看好DAO的发展前景?

对个人来说,参与DAO比管理自己的资产要有利得多。