类别:区块链 / 日期:2021-09-14 / 浏览:285

做者: Magomed Aliev

翻译: 阿剑

闪电收集是一种去中心化的链下手艺计划,可撑持每秒上万笔交易并发,接近于 Visa 系统能做到的水平(举个例子)。而在当前的比特币(世界上更流行的密码学货币)区块链上,只能撑持每秒处置约 7 笔事务,还要付出昂扬的手续费,并期待很长时间来确认交易生效,那些因素都使得用比特币发送小额交易几乎不成能。而闪电收集把那两个问题都处理了。

引言

闪电收集是一种付出通道系统,与常见的多签名钱包没有任何区别。所谓开启通道,就是参与方创建一个多签名钱包,并向该钱包充入资金。那个钱包领受到的资金数量就成为那个通道的余额。再然后,参与方之间的后续交易就全数在区块链以外的情况中发作了。任一参与方都能随时封闭那个通道,那时候,最初一笔链下的交易(决定着该通道各参与方的余额)会被发送到区块链上,同时做废掉所有中间的交易,因为所有那些交易都利用同样的交易输出。成果是,我们只需一笔交易来开启通道、一笔交易来封闭通道,中间所有的中间交易都是立即收发的,无需记录在区块链上(因而无需期待)。

(译者注:比特币不是账户里面的余额,是一张张的收票;所有的收票都是由详细的某笔交易缔造的;每一张收票都只用一次就会做废(也即只能用在一笔交易中)。交易能够肆意分配所用收票的价值来消费肆意数量的新收票。)

如许的通道所构成的收集使你能够向收集的另一个参与者发送资金,即便你们之间并没有间接的通道。独一的前提是你们之间要能构成一条 “途径”,即有通道能前后相接地把你和对方联络起来。此外,得益于特殊的智能合约(HTLC,哈希时间锁合约),你不需要信赖收集中的任何人,合约会包管平安地交付你付出的资金。

要理解闪电收集是若何运行的,起首要理解的是付出通道的运行以及构成付出通道根底的 HTLC。那些话题都不小,所以我把文章分红了两部门,从解释付出通道的工做原理起头。

付出通道

如上所述,毗连两个参与者的付出通道本色就是一个通俗的多签名钱包。第一笔交易决定了一个通道的余额,我们称为 “充值事务” 或者 “锚点事务”。那笔交易需要播送到收集中并记录到区块链上,以表白通道开启。

做完了那一步之后,要更新通道两边的余额时,两边就需要手动交换签过名的 “许诺事务”。那些交易自己都是有效的,随时能够发送到比特币收集中,但两边城市暂时保留起来,不会播送出来,除非已筹办封闭通道。如斯一来,通道内两边的余额形态,一秒内变更几千次也没问题,更新的速度仅受限于两边创建、签名和向对方发送许诺事务的速度。

每次两边交换了一笔新的许诺事务,他们也就把通道的前一个形态做废掉;因而,只要最新的一笔许诺事务能够 “施行”。如许设想的目标是避免某一方欺诈对方,把一个过时的但对本身有利的形态发送的链上来封闭通道。下文我会讲解几种避免那种欺诈的机造。

最初,通道既能够两边一致同意封闭 —— 就是把一笔封闭事务(叫做 “结算事务”)发送到比特币收集中 —— 也能够双方决定封闭,就是把最初一笔许诺事务发送到收集中。那是为了避免某一方离线招致另一方在通道中的余额不断 “锁定” 的情形。

在通道存在的整个生命周期里,只要两笔事务被发到了比特币收集中并记录到了比特币区块链上(就是充值事务和结算事务)。在那两笔事务之间,两边能够交换无数次许诺事务,那些事务都不需要提交到区块链上。

深切解读闪电收集:付出通道  btc 交易 支付通道 闪电网络 上链 第1张

一个简单的付出通道案例

在解释愈加复杂的机造之前,我们先来考虑一个简单的、单向的通道的例子。为了简化那个解释,我们假设两边都是诚笃的。后面我们会再考虑帮忙我们阻遏欺诈的机造。

假设一个通道有两个参与者,Emma 和 Fabian。Fabian 供给付费的视频流办事,而旁观者通过通道来实现小额付出 —— 每旁观一秒就要付出 0.00001 btc,相当于每小时 0.036 btc 。Emma 是一个想看视频的通俗用户。

深切解读闪电收集:付出通道  btc 交易 支付通道 闪电网络 上链 第2张Emma 和 Fabian 利用一个特殊的法式来同步播放视频和运行付出通道。Emma 在本身的收集阅读器中启动那个法式,而 Fabian 在本身的办事器上利用统一个法式。那个法式具有一个通俗的比特币钱包软件的所有功用,它能够创建和签名交易。付出通道的整个机造能够完全隐藏起来,用户看到的事实就是那个视频是按秒计价的。

如今我们来看看那个付费办事的详细工做流程。一起头,Emma 和 Fabian 要开启通道:成立一个 2-2 的多签名地址。从用户的视角来看,那个法式创建了一个 P2SH 地址(一个多签名钱包)并要求用户充入足以付出一个小时视频办事的资金。Emma 转了 0.036 btc 到那个地址,而那笔交易也就成了所谓的充值事务。

充值事务被打包到某个区块之后,那个通道就算开启了,视频也就起头播放。在第一秒钟,用户创建并签名了一条许诺事务,改动了通道内的余额:如今 Fabian 有了 0.00001 btc,Emma 还剩 0.03599 btc 。那笔事务利用了充值事务的输出,并创建了两个输出,含义就如我们那里所述。从办事商的角度看,法式收到了那笔事务,于是也签上名、连同第一秒的视频发还给 Emma。如今两边都有了一笔对方手动签过名的、反映通道最新形态的许诺事务;若有需要,任何一方都能够把那笔交易发送到比特币收集中。

到了第二秒,Emma 那边的法式又创建了一笔新的许诺事务,利用的同样是充值交易的输出(跟第一笔一样),那一次,许诺事务的第一个输出给了Fabian 0.00002 btc,把 0.03598 给了 Emma。那笔事务用来付出第二秒的视频下载。

我们假设,Emma 看了 10 分钟的视频,然后就退出了。在那段时间里,她签名并发送了 600 笔许诺事务(600 秒的视频)。最初的一笔有两个输出:0.03 btc 给 Emma,和 0.006 给 Fabian。Emma 封闭了通道,把最初一笔许诺事务播送到了比特币收集中做为 结算事务。如斯,那个通道只要一头一尾两笔事务记录到了区块链上。

深切解读闪电收集:付出通道  btc 交易 支付通道 闪电网络 上链 第3张

免信赖的通道

当然,从那个例子来看,一切都好,但那是因为两边都是诚笃的。不难想象某些时候,此中一方会棍骗对方,像上面那么简单的设想可能就不敷用了。

固然通道开启着,Emma 仍是需要 Fabian 的签名来取出资金,因为那个通道是 2-2 的多签名地址。若是 Fabian 消逝了,Emma 的资金可能会永久锁在那个通道里面。固然通道开启着,Emma 能够利用任何一笔两边都签过名的许诺事务。在旁观视频 10 分钟之后,她能够拿第一笔许诺交易上链,完全不需要颠末 Fabian 的再次同意。时间锁

那些问题的一种处理计划是在许诺事务中利用时间锁(事务层面的时间锁(nLocktime))。为了包管资金不会在通道中永久锁定,Emma 利用她的充值事务的输出创建了一个退款事务。她先给 Fabian 发送那笔事务,等 Fabian 签名并发还后,Emma 才把充值事务播送到比特币收集中,开启他们的通道。

那笔退款事务也成了第一笔许诺事务,并且它的时间锁为通道设置了一个存在时间的上限。假设 Emma 把时间锁设置为 30 天(4320 个比特币区块)(即 30 天之后那笔事务才气记录到区块链上)。接下来所有的许诺事务,所设置的时间锁会一个比一个短,如许更新的事务就能更早播送到收集中。

如今 Emma 不消再担忧了,她晓得即便 Fabian 玩失踪,她也能够在 30 天之后取回本身的资金(若是那是一条双向的付出通道,即 Fabian 也会存钱进去,那他也从本身的角度提出一笔退款事务)。

深切解读闪电收集:付出通道  btc 交易 支付通道 闪电网络 上链 第4张每一笔新的许诺事务的时间锁都比前一笔要短,因而,新一笔许诺事务老是能比旧的更早上链并使旧的事务做废(无法上链),如许就能避免任何一方歹意利用旧的许诺事务。若是一切顺利,Emma 和 Fabian 只需播送两边一致的通俗结算事务,因而带时间锁的许诺事务只要一方下线时才会派上用场。

举个例子,若是第一笔许诺事务的时间锁是 4320 个区块,那么第二笔许诺事务能够设成 4319 个区块,以此类推。如斯一来,第 600 笔许诺事务能够比第一笔许诺事务早 600个区块上链。

深切解读闪电收集:付出通道  btc 交易 支付通道 闪电网络 上链 第5张你可能也留意到了,那种办法固然有助于避免某一方把更早的许诺事务上链(欺诈),但它有两个明显的缺点:

第一笔许诺事务的时间锁限造了那个通道的寿命。若是那个时间锁设置的时间太长(好比 1 年),通道能够存在很久,但若是某一方玩失踪,另一方就不能不期待很长时间才气播送最初一笔许诺事务、取回本身的资金。第一笔许诺事务的时间锁也限造了能够在通道内发作的交易次数。在我们的例子中,那个数值是 4320,那个通道内只能发作 4320 笔事务,因为每一笔新事务城市把时间锁的时间减去 1 个区块。并且,以区块(10 分钟)为间隔,等于是强迫参与方要逃踪比特币收集的区块,以免错过什么,以及在情形不合错误时尽早把最初一笔许诺事务上链。当然,那个间隔是能够耽误的,但代价是通道内能够发送的交易数量会变得更少。

因而,时间锁让我们能够做废旧的许诺事务并包管通道两边都能够平安地封闭通道:若是他们都同意通道的最新形态,他们能够发送一笔不带时间锁的结算事务(与最初一笔许诺事务意思不异),封闭通道;若是某一方不在线,另一方也可期待最初一笔许诺的时间锁解锁,然后把该笔许诺事务播送到比特币收集中。

不合错误称的可撤销许诺

另一种处理上述信赖问题的法子是打消早前的许诺事务。现实上,“打消(cancellation)” 那个词是禁绝确的,因为在比特币收集中,一笔上链的事务(得到区块确认的事务)是永久不成打消的。不外,特殊的构造体例能够使得上链较早的许诺事务无利可图。只需赐与各方一个 “撤销密钥(revocation key)” 即可。

假设 Hitesh 和 Irene 决定开启一个通道。两边都充值了 5 btc 到那个通道中,确定了通道的初始余额。如今,两边不是签订统一笔尺度的许诺事务,而是各自创建两笔差别的、不合错误称的许诺事务。

Hitesh 拿到的由 Irene 签名的事务有两个输出,第一个输出不带时间锁,立即给 Irene 付出 5 btc,而第二个输出带有时间锁,付出 5 btc 给 Hitesh,但要等(那笔事务上链后的) 1000 个区块之后,那个输出才气花用。详情如下:

深切解读闪电收集:付出通道  btc 交易 支付通道 闪电网络 上链 第6张

与此同时,Irene 也可拿到由 Hitesh 签名的一个许诺事务,有两个输出:一个立即给 Hitesh 付出 5 btc,另一个输出则给 Irene 付出 5 btc,但要等 1000 个区块之后才气花。

深切解读闪电收集:付出通道  btc 交易 支付通道 闪电网络 上链 第7张

因而,两边都拿到了一笔由对方签名的许诺事务。Hitesh 和 Irene 都能够随时把手上的许诺事务签名后播送进来,但是,一旦那么锁了,另一方城市立即拿到钱,而本身只能比及 1000 个区块之后才气拿到,那可是大大的倒霉。不外,那还不敷以让两边都诚笃守信。

深切解读闪电收集:付出通道  btc 交易 支付通道 闪电网络 上链 第8张那就要讲到我们的最初一个功用了,可撤销的密钥,使得任一方若是试图欺诈,对方都能够赏罚 TA,使之血本无归。

如上所述,每一笔许诺事务都有一个 “延后” 的输出,我们把那个输出做得再复杂一点:那个输出既能够被期待了 1000 个区块的许诺事务发送者利用,也能够被通道的另一方利用,若是 TA 持有撤销密钥的话。当 Hitesh 创建许诺事务并交给 Irene 时,他的第二个输出既能够为本身所用(要期待 1000 的区块)也能够为 Irene 利用,若是后者掌握了撤销密钥的话。

Hitesh 会奥秘地保管那个密钥,仅当他决定利用新的一笔许诺事务来更新通道内形态时才会发给 Irene。事务的详情如下:

深切解读闪电收集:付出通道  btc 交易 支付通道 闪电网络 上链 第9张

(译者注:看代码会更明晰一些:第一个输出是给立即 Irene 付出 5 btc;第二个输出则是带前提的,既能够利用撤销密钥,立即获得 5 btc,也可在 1000 个区块后,利用 Hitesh 的私钥来利用那个输出。留意那里的 “IF…ELSE…” 式前提,它跟我们在其它的计算机编程中的含义是一样的。)

附带一个例子可能会更容易理解。假设 Irene 希望给 Hitesh 发送 2 btc,那时候他们要更新通道的形态,也就是要创建一笔新的许诺事务。两边各自创建一个不合错误称的许诺事务,而且,在签名之前,先把上一笔许诺事务的撤销密钥交给对方,如斯便 “撤销” 了上一笔许诺事务。若是 Hitesh 希望以通道最初的余额来结算,而 Irene 看着觉得更旧的形态对本身更有利,她能够测验考试把本身手中的上一笔许诺事务签名后播送到收集中,但那笔许诺事务的撤销密钥已经表露给了 Hitesh;若是他发现那笔许诺事务上链了,他有足足 1000 个区块的时间能够把通道内的所有钱都拿走(第一个输出当下就给了他,而第二个输出只需他供给撤销密钥就能够立即便用)(没错,那个 “打消” 的动做没法主动化,Hitesh 必需存眷 Irene 能否发送了旧的许诺事务到收集中,然后利用撤销密钥)。

因而,那种利用不合错误称可撤销许诺的通道的效率要更高,因为它不限造通道的寿命,也不限造交易发送的次数。

结语

到那里,我们的第一篇文章就完毕了,估量你也要一段时间来消化一下,你也能够在评论中发问。鄙人一篇文章,我们会解释 HTLC 的功用,最末解释闪电收集是若何工做的。

链接

“Mastering bitcoin” — Andreas M. AntonopoulosSegregated witness for dummiesLightning network whitepaperLightning network in depth, part 2: HTLC and payment routing

(完)

  • 随机文章

  • 热门文章

 可能感兴趣的文章

最近发表