第十四章. 二层应用 #2-支付通道和状态通道

  • berry
  • 发布于 2025-02-09 11:57
  • 阅读 12

支付通道和状态通道

支付通道是一种在比特币区块链之外交换比特币交易的无信任机制。这些交易,如果在比特币区块链上结算,是有效的,但实际上它们被保留在链外,等待最终的批量结算。由于这些交易没有被结算,它们可以进行交换而不受通常的结算延迟的影响,从而实现了极高的交易吞吐量、低延迟和细粒度的交易。

实际上,“通道”这个术语是一个隐喻。状态通道是在两个参与者之间交换状态的虚拟构造,位于区块链之外。实际上并没有“通道”,底层的数据传输机制也不是通道。我们使用“通道”这个术语来表示两个参与者之间的关系和共享状态,而这些状态是位于区块链之外的。

为了进一步解释这个概念,可以将其类比为 TCP 流。从更高层次的协议角度来看,它是连接互联网上两个应用程序的“套接字”。但是如果观察网络流量,TCP 流实际上只是 IP 数据包上的一条虚拟通道。每个 TCP 流的端点对 IP 数据包进行序列化和组装,以创建字节流的幻象。在底层,它实际上是由断开的数据包组成的。

类似地,支付通道只是一系列交易。如果这些交易被正确地排序和连接,它们将创建可信的可赎回义务,尽管你不信任通道的另一侧。

在本节中,我们将研究各种形式的支付通道。首先,我们将研究用于构建单向(单向)支付通道的机制,用于按流量计费的微支付服务,例如视频流。然后,我们将扩展这个机制,介绍双向支付通道。最后,我们将探讨如何将双向通道端对端连接,形成多跳通道在一个路由网络中,最初是在闪电网络的名称下提出的。

支付通道是状态通道概念的一部分,它表示在区块链之外通过最终结算在区块链上保证的状态的更改。支付通道是一个状态通道,其中被更改的状态是虚拟货币的余额。

状态通道 - 基本概念和术语

\ 状态通道是通过在区块链上锁定共享状态的交易来建立的,这称为资金交易。这笔单一交易必须被传输到网络并被挖掘以建立通道。在支付通道的例子中,锁定的状态是通道的初始余额(以货币计)。

然后,两个参与方交换已签名的交易,称为承诺交易,以修改初始状态。这些交易是有效的交易,因为它们可以由任一方提交进行结算,但是实际上被每个参与方持有,直到通道关闭。状态更新可以根据每个参与方创建、签名和传输交易的速度来创建,实际上这意味着可以交换数十个每秒。

在交换承诺交易时,两个参与方还会阻止使用先前的状态,以便始终使用最新的承诺交易进行赎回。这样做可以防止任一方通过单方面关闭通道并使用比当前状态更有利的先前状态来作弊。在本章的其余部分,我们将检查可以用来阻止发布先前状态的各种机制。

最后,通道可以通过合作方式关闭,通过提交最终的结算交易到区块链上,或者通过单方面关闭,通过任一方提交最后的承诺交易到区块链上。需要单方面关闭选项以防止其中一方意外断开连接。结算交易代表通道的最终状态,并在区块链上进行结算。

在通道的整个生命周期中,只需要提交两笔交易进行区块链上的挖掘:资金和结算交易。在这两个状态之间,两个参与方可以交换任意数量的承诺交易,这些交易对其他人不可见,也不会提交到区块链上。

图14-1说明了Bob和Alice之间的支付通道,显示了资金、承诺和结算交易。

<figure><img src="https://img.learnblockchain.cn/masterbitcoin3/assets/14.1.png" alt=""><figcaption><p>图 14-1. Bob 和 Alice 之间的支付通道,显示了资金、承诺和结算交易</p></figcaption></figure>

简单支付通道示例

为了解释状态通道,我们从一个非常简单的例子开始。我们展示一个单向通道,意味着价值只在一个方向上流动。我们还将从一个天真的假设开始,即没有人试图作弊,以保持简单。一旦我们解释了基本的通道概念,我们将看看如何使它变得无需信任,以便双方都无法作弊,即使他们试图这样做。

在这个例子中,我们假设有两个参与者:Emma 和 Fabian。Fabian 提供按秒计费的视频流服务,使用微支付通道。Fabian 每秒视频收取 0.01 毫比特(0.00001 BTC),相当于每小时视频收取 36 毫比特(0.036 BTC)。Emma 是一位购买 Fabian 的视频流服务的用户。图 14-2 显示了 Emma 使用支付通道从 Fabian 购买视频流服务。

<figure><img src="https://img.learnblockchain.cn/masterbitcoin3/assets/14.2.png" alt=""><figcaption><p>图 14-2. Emma 使用支付通道购买 Fabian 的视频流服务,按每秒的视频付费</p></figcaption></figure>

\ 在这个例子中,Fabian 和 Emma 使用的是能够处理支付通道和视频流的特殊软件。Emma 在她的浏览器中运行该软件,而 Fabian 则在服务器上运行。这个软件包括基本的比特币钱包功能,可以创建和签署比特币交易。用户完全不知道“支付通道”这个概念和术语,他们看到的是按秒付费的视频。

为了建立支付通道,Emma 和 Fabian 建立了一个 2-of-2 的多签名地址,他们各自持有其中一个密钥。从 Emma 的角度来看,她浏览器中的软件会显示一个带有地址的二维码,并要求她提交支付金额,以便观看多长时间的视频。然后,Emma 把这个地址进行了资金注入。Emma 支付到多签名地址的交易是支付通道的资金或锚定交易。

在这个例子中,假设 Emma 用 36 毫比特(0.036 BTC)资助了该通道。这将允许 Emma 观看多达 1 小时的流媒体视频。在这种情况下,资金交易设置了该通道中可传输的最大金额,即通道容量。

资金交易从 Emma 的钱包中消耗一个或多个输入来获取资金。它创建一个输出,金额为 36 毫比特,支付到由 Emma 和 Fabian 共同控制的多签名 2-of-2 地址。它可能还有其他输出,作为找零返回给 Emma 的钱包

资金交易确认到足够的深度后,Emma 可以开始观看视频。Emma 的软件创建并签署一个承诺交易,将通道余额更改为向 Fabian 的地址支付 0.01 毫比特,同时将 35.99 毫比特退还给 Emma。Emma 签署的交易消耗了资金交易创建的 36 毫比特输出,并创建了两个输出:一个是她的退款,另一个是 Fabian 的支付。这笔交易只部分签署 - 它需要两个签名(2-of-2),但只有 Emma 的签名。当 Fabian 的服务器接收到这笔交易时,它会添加第二个签名(对于 2-of-2 输入),然后将其与 1 秒钟的视频一起返回给 Emma。现在,双方都有了一个完全签署的承诺交易,可以兑现,代表了通道的正确最新余额。双方都不会将此交易广播到网络中。

在下一轮中,Emma 的软件创建并签署另一个承诺交易(承诺 #2),该交易使用来自资金交易的相同 2-of-2 输出。第二次承诺交易将一个输出的 0.02 毫比特分配给 Fabian 的地址,另一个输出的 35.98 毫比特返回给 Emma 的地址。这笔新交易是两秒视频的支付。Fabian 的软件签署并返回第二次承诺交易,再加上另一秒的视频。

通过这种方式,Emma 的软件继续向 Fabian 的服务器发送承诺交易,以换取视频流。通道的余额逐渐积累到 Fabian 的利益,因为 Emma 消耗了更多的视频秒数。假设 Emma 观看了 600 秒(10 分钟)的视频,创建并签署了 600 笔承诺交易。最后一笔承诺交易(#600)将两个输出,将通道的余额分成 6 毫比特给 Fabian,30 毫比特给 Emma。

最后,Emma 点击“停止”以停止观看视频。现在 Fabian 或 Emma 可以传输最终状态交易以进行结算。这最后一笔交易是结算交易,向 Fabian 支付 Emma 消耗的所有视频,将剩余的资金交易退还给 Emma。

图 14-3 展示了 Emma 和 Fabian 之间的通道以及更新通道余额的承诺交易。

<figure><img src="https://img.learnblockchain.cn/masterbitcoin3/assets/14.3.png" alt=""><figcaption><p>图 14-3. Emma与Fabian之间的支付通道,显示更新通道余额的承诺交易</p></figcaption></figure>

创建无需信任的通道

刚刚描述的通道只有在双方合作、没有任何故障或试图欺骗的情况下才能运作。让我们看看一些破坏这一通道的情况,并看看如何修复:

• 一旦发生资金交易,Emma 需要 Fabian 的签名才能拿回任何资金。如果 Fabian 消失,Emma 的资金将被锁定在 2-of-2 中,并且实际上丢失了。如果在至少有一份双方签署的承诺交易之前,其中一方变得不可用,那么按照当前构建的通道,资金将会丢失。

• 在通道运行期间,Emma 可以取任何 Fabian 已经签署的承诺交易中的一份并将其传输到区块链。如果她可以传输承诺交易#1 并仅支付 1 秒的视频,为什么要支付 600 秒的视频呢?Emma 可以通过广播对她有利的先前承诺来欺骗,这导致通道失败。

这两个问题都可以通过时间锁解决——让我们看看如何使用交易级时间锁。

Emma 不能冒险进行 2-of-2 多重签名资金,除非她有一种保证的退款。为了解决这个问题,Emma 同时构建了资金和退款交易。她签署了资金交易,但不将其传输给任何人。Emma 仅将退款交易传输给 Fabian 并获得他的签名。

退款交易充当了第一笔承诺交易,其时间锁确定了通道的生命周期上限。在这种情况下,Emma 可以将锁定时间设置为 30 天或未来 4,320 个区块。在之后的所有承诺交易必须有一个更短的时间锁,以便在退款交易到期之前赎回。

现在,Emma 有了一个完全签名的退款交易,她可以放心地传输已签名的资金交易,知道即使 Fabian 消失,她也可以在时间锁到期后赎回退款交易。

在通道的生命周期内,双方交换的每笔承诺交易都将被时间锁定到未来。但是,对于每个承诺,延迟都会略微缩短,以便最新的承诺在使其无效的先前承诺之前可以被赎回。由于时间锁,没有一方能够成功传播任何承诺交易,直到其时间锁到期。如果一切顺利,他们将合作并以和解交易优雅地关闭通道,无需传输中间承诺交易。如果没有,最新的承诺交易可以传播以结算账户并使所有先前的承诺交易无效。

例如,如果承诺交易#1 被时间锁定到未来的 4,320 个区块,那么承诺交易#2 将被时间锁定到未来的 4,319 个区块。承诺交易#600 可以在承诺交易#1 生效之前的 600 个区块被消费。

图 14-4. 显示了每个承诺交易设置了一个较短的时间锁,使其可以在先前的承诺变为有效之前被消费

<figure><img src="https://img.learnblockchain.cn/masterbitcoin3/assets/14.4.png" alt=""><figcaption><p>图 14-4 . 每个承诺交易都设置了较短的时间锁,使其可以在先前的承诺变为有效之前被消费</p></figcaption></figure>

每个后续的承诺交易都必须设置更短的时间锁,以便在其前身和退款交易之前进行广播。提前广播承诺交易的能力确保它能够支出资金输出,并阻止其他任何承诺交易通过支出输出来赎回。比特币区块链提供的保证,防止双重支付并强制执行时间锁,有效地使每个承诺交易都能使其前身无效。

状态通道使用时间锁来跨时间维度执行智能合约。在本示例中,我们看到时间维度保证了最近的承诺交易在任何早期承诺之前生效。因此,最新的承诺交易可以被传输,支出输入并使先前的承诺交易无效。使用绝对时间锁来执行智能合约可以防止其中一方作弊。这种实现除了绝对事务级别的锁定时间外,不需要任何其他内容。接下来,我们将看到如何使用脚本级别的时间锁,CHECKLOCKTIMEVERIFY 和 CHECKSEQUENCEVERIFY,来构建更灵活、有用和复杂的状态通道。

时间锁不是使前期承诺交易无效的唯一方法。在接下来的章节中,我们将看到如何使用吊销密钥来实现相同的结果。时间锁是有效的,但它们有两个明显的缺点。首先,在通道首次打开时,通过建立最大时间锁,它们限制了通道的寿命。更糟糕的是,它们迫使通道实现在允许长期存在的通道和迫使其中一方在提前关闭时等待很长时间以获得退款之间取得平衡。例如,如果通过将退款时间锁设置为30天来允许通道保持开放30天,则如果其中一方立即消失,另一方必须等待30天才能获得退款。终点越远,退款的时间就越长。

第二个问题是,由于每个后续的承诺交易必须递减时间锁,因此对于可以在各方之间交换的承诺交易数量有明确的限制。例如,一个30天的通道,将时间锁设置为未来的4320个块,只能容纳4320个中间承诺交易,然后必须关闭。将承诺交易之间的时间锁定间隔设置为1个块存在风险。通过将承诺交易之间的时间锁定间隔设置为1个块,开发人员为通道参与者创造了一个非常高的负担,他们必须保持警惕,保持在线并监视,并准备在任何时候传输正确的承诺交易。

在之前描述的单向通道示例中,消除每次承诺的时间锁是很容易的。在Emma从Fabian那里收到定时退款交易的签名后,不会在承诺交易上设置时间锁。相反,Emma向Fabian发送每个承诺交易的签名,但Fabian不会向Emma发送任何承诺交易的签名。这意味着只有Fabian拥有承诺交易的两个签名,因此只有他可以广播其中之一。当Emma完成视频流时,Fabian总是倾向于广播支付他最多的交易,即最新的状态。这种构造称为Spillman风格的支付通道,它最早是在2013年首次描述和实现的,尽管它们只能与见证(segwit)交易一起使用,这些交易直到2017年才可用。

现在我们了解了如何使用时间锁来使前期的承诺无效,我们可以看到通过广播承诺交易来合作关闭通道和单方关闭通道之间的区别。在我们之前的示例中,所有的承诺交易都有时间锁,因此广播承诺交易总是涉及等待直到时间锁到期。但是,如果双方就最终余额达成一致,并知道他们都持有最终将实现该余额的承诺交易,他们可以构建一个不带时间锁的结算交易来代表相同的余额。在合作关闭中,任何一方都可以采用最新的承诺交易并构建一个完全相同的结算交易,只是省略了时间锁。双方都可以签署此结算交易,因为知道没有任何作弊的方法,并且无法获得更有利的余额。通过合作签署和传输结算交易,他们可以立即关闭通道并兑现余额。最糟糕的情况是,其中一方可能会小气,拒绝合作,并迫使另一方通过最新的承诺交易进行单方关闭。如果这样做,他们也必须等待他们的资金。

非对称撤销承诺

另一种处理先前承诺状态的方法是明确地撤销它们。然而,这并不容易实现。比特币的一个关键特性是,一旦一笔交易有效,它就保持有效,不会过期。取消交易的唯一方法是让一笔与之冲突的交易得到确认。这就是为什么在简单支付通道示例中我们使用了时间锁,以确保更新的承诺可以在旧的承诺变得有效之前花费。然而,在时间上排序承诺会产生许多约束,使得支付通道难以使用。

即使一笔交易无法取消,也可以通过构造一种使其不受欢迎的方式来实现。我们这样做的方式是给每一方提供一个撤销密钥,如果对方试图作弊,就可以用来惩罚对方。这种撤销先前承诺交易的机制首次作为闪电网络的一部分提出。

为了解释撤销密钥,我们将构建一个更复杂的支付通道,该通道由 Hitesh 和 Irene 经营的两家交易所之间创建。Hitesh 和 Irene 在印度和美国分别经营比特币交易所。Hitesh 的印度交易所的客户经常向 Irene 的美国交易所的客户发送付款,反之亦然。目前,这些交易发生在比特币区块链上,但这意味着支付费用并等待几个区块的确认。在交易所之间建立支付通道将大大降低成本并加快交易流程。 Hitesh 和 Irene 通过协作构建资金交易来启动通道,每个人用 5 比特币为通道提供资金。在签署资金交易之前,他们必须签署第一组承诺(称为退款),以分配给 Hitesh 和 Irene 初始余额各为 5 比特币。资金交易将通道状态锁定在一个 2-of-2 的多重签名中,就像简单通道示例中一样。

资金交易可能有来自 Hitesh 的一个或多个输入(总计达到 5 比特币或更多),以及来自 Irene 的一个或多个输入(总计达到 5 比特币或更多)。输入必须略微超过通道容量,以支付交易费用。交易有一个输出,将总共的 10 比特币锁定到由 Hitesh 和 Irene 共同控制的 2-of-2 多重签名地址。如果他们的输入超出了他们的预期通道贡献,资金交易可能还会有一个或多个输出将剩余资金找零返回给 Hitesh 和 Irene。这是一笔由两方提供和签署的单一交易。它必须在协作构建并由每一方签署之后才能传输。

现在,与其创建一笔由两方签署的单一承诺交易,Hitesh 和 Irene 创建了两个不同的非对称承诺交易。

Hitesh 拥有一笔承诺交易,其中包含两个输出。第一个输出立即支付给 Irene 她所欠的 5 比特币。第二个输出向 Hitesh 支付他所欠的 5 比特币,但必须经过 1,000 个区块的时间锁定才能生效。交易输出如下:

Input: 2-of-2 funding output, signed by Irene

Output 0 &lt;5 bitcoins>:
     &lt;Irene's Public Key> CHECKSIG
Output 1 &lt;5 bitcoins>:
     &lt;1000 blocks>
     CHECKSEQUENCEVERIFY
     DROP
     &lt;Hitesh's Public Key> CHECKSIG

Irene 拥有一笔不同的承诺交易,其中包含两个输出。第一个输出立即向 Hitesh 支付他所欠的 5 比特币。第二个输出向 Irene 支付她所欠的 5 比特币,但必须经过 1,000 个区块的时间锁定才能生效。Irene 拥有的承诺交易(由 Hitesh 签名)如下:

Input: 2-of-2 funding output, signed by Hitesh

Output 0 &lt;5 bitcoins>:
    &lt;Hitesh's Public Key> CHECKSIG

Output 1 &lt;5 bitcoins>:
    &lt;1000 blocks>
    CHECKSEQUENCEVERIFY
    DROP
    &lt;Irene's Public Key> CHECKSIG

这样,每个参与方都拥有一笔承诺交易,用于支配 2-of-2 的资金输出。该输入由另一方签名。任何时候,持有交易的一方也可以签名(完成 2-of-2)并广播交易。然而,如果他们广播承诺交易,它会立即支付给另一方,而他们必须等待时间锁定的到期。通过对一个输出的赎回施加延迟,我们在每个参与方选择单方面广播承诺交易时都让其稍微处于不利地位。但仅靠时间延迟还不足以促使公平行为。

图 14-5 显示了两个非对称的承诺交易,其中支付给承诺持有者的输出被延迟。

<figure><img src="https://img.learnblockchain.cn/masterbitcoin3/assets/14.5.png" alt=""><figcaption><p>图 14-5. 两个非对称的承诺交易,其中支付给持有交易一方的款项被延迟</p></figcaption></figure>

\ 现在,我们介绍这个方案的最后一个元素:一个撤销密钥,用于防止作弊者广播已过期的承诺。 撤销密钥允许受害方通过获取渠道的全部余额来惩罚作弊者。

撤销密钥由两个部分组成,每个渠道参与者独立生成一半。 它类似于2-of-2多重签名,但使用椭圆曲线算术构建,以便双方都知道撤销公钥,但每个参与方只知道撤销秘密的一半。

在每一轮中,双方都向对方揭示他们撤销秘密的一半,从而为对方(现在拥有两半)提供了要求惩罚输出的手段,如果此已撤销交易被广播。

每个承诺交易都有一个“延迟”输出。 该输出的赎回脚本允许一方在1,000个区块之后赎回它,或者另一方在拥有撤销密钥的情况下赎回它,以惩罚广播已撤销的承诺。

因此,当Hitesh为Irene创建一个承诺交易供其签名时,他将第二个输出设置为在1,000个区块之后支付给自己,或者支付给撤销公钥(他只知道一半的秘密)。 Hitesh构建了此交易。 他只会在准备转移到新的渠道状态并希望撤销此承诺时向Irene揭示其撤销秘密的一半。

第二个输出的脚本如下:

<pre><code>Output 0 <5 bitcoins>: <Irene's Public Key> CHECKSIG

Output 1 <5 bitcoins>: IF <strong> ## Revocation penalty output </strong> <Revocation Public Key> ELSE <1000 blocks> CHECKSEQUENCEVERIFY DROP <Hitesh's Public Key> ENDIF CHECKSIG </code></pre>

\ Irene可以放心地签署此交易,因为如果传输,它将立即支付她所欠的款项。Hitesh持有该交易,但知道如果他在单方面关闭渠道时传输该交易,他将需要等待 1,000 个区块才能获得支付。在渠道推进到下一个状态之后,Hitesh必须撤销此承诺交易,然后Irene才会同意签署任何进一步的承诺交易。要做到这一点,他所要做的就是将他的撤销密钥的一半发送给Irene。一旦Irene拥有了这个承诺的撤销秘钥的两个部分,她就可以放心地签署未来的承诺。她知道如果Hitesh试图通过发布先前的承诺来欺骗,她可以使用撤销密钥来赎回Hitesh的延迟产出。如果Hitesh欺骗,Irene会获得双重产出。同时,Hitesh只拥有该撤销公钥的一半,因此无法在 1,000 个区块之前赎回产出。在 1,000 个区块结束之前,Irene将能够赎回产出并惩罚Hitesh。

撤销协议是双边的,意味着在每个轮次中,随着渠道状态的推进,两方交换新的承诺,交换前一次承诺的撤销密钥,并签署彼此的新的承诺交易。在他们接受新状态之后,他们通过彼此提供必要的撤销密钥来使先前的状态不可能被使用,以惩罚任何欺骗行为。

让我们看一个它是如何工作的例子。Irene 的一位客户想要将 2 个比特币发送给 Hitesh 的一位客户。为了在渠道之间传输 2 个比特币,Hitesh 和 Irene 必须推进渠道状态以反映新的余额。他们将承诺到一个新的状态(状态号 2),在这个状态下,渠道的 10 个比特币被分成 7 个比特币给 Hitesh 和 3 个比特币给 Irene。为了推进渠道的状态,他们将各自创建新的承诺交易,反映新的渠道余额。

与之前一样,这些承诺交易是非对称的,因此每个一方持有的承诺交易会迫使他们等待,如果他们要赎回它。至关重要的是,在签署新的承诺交易之前,他们必须首先交换撤销密钥,以使任何过时的承诺无效。在这种特定情况下,Hitesh 的利益与渠道的真实状态保持一致,因此他没有理由广播先前的状态。然而,对于 Irene 来说,状态号 1 让她的余额高于状态号 2。当 Irene 给 Hitesh 提供她之前承诺交易(状态号 1)的撤销密钥时,她实际上正在撤销她从将渠道退回到先前状态中获利的能力,因为有了撤销密钥,Hitesh 可以在没有延迟的情况下赎回先前承诺交易的所有产出。这意味着如果 Irene 广播先前的状态,Hitesh 可以行使权利并获得所有产出。重要的是,撤销不会自动发生。虽然 Hitesh 有能力惩罚 Irene 的欺骗行为,但他必须密切关注区块链的变化迹象。如果他看到先前的承诺交易被广播,他有 1,000 个区块的时间来采取行动并使用撤销密钥来阻止 Irene 的欺骗行为,并通过取走全部余额来惩罚她,总共 10 个比特币。

具有相对时间锁定(CSV)的非对称可撤销承诺是实施支付渠道的一种更好的方法,也是这项技术中的一个非常重要的创新。通过这种构造,渠道可以无限期保持开放,并且可以有数十亿个中间承诺交易。在 LN 的实现中,承诺状态由一个 48 位索引标识,允许在任何单个渠道中进行超过 281 万亿(2.8 × 10¹⁴)次状态转换。

哈希时间锁合约(Hash Time Lock Contracts -HTLC)

\ 支付通道可以通过一种特殊的智能合约进一步扩展,该合约允许参与者将资金锁定到一个可赎回的秘密,并设置一个到期时间。这个特性被称为哈希时间锁合约,简称HTLC,它被用于双向和路由的支付通道。

首先解释一下HTLC中的“哈希”部分。要创建一个HTLC,支付的预期接收者首先会生成一个秘密R。然后,他们计算这个秘密的哈希H:

H = Hash(R)

\ 这产生了一个哈希H,可以包含在输出的脚本中。谁知道这个秘密,就可以用它来赎回输出。这个秘密R也被称为哈希函数的原像。原像只是作为哈希函数输入的数据。

HTLC的第二部分是“时间锁”组件。如果秘密没有被揭示,支付HTLC的一方可以在一段时间后获得“退款”。这是通过使用CHECKLOCKTIMEVERIFY实现的绝对时间锁。

实施HTLC的脚本可能如下所示:

IF
     ## Payment if you have the secret R
     HASH160 &lt;H> EQUALVERIFY
     &lt;Receiver Public Key> CHECKSIG
ELSE
     ## Refund after timeout.
     &lt;lock time> CHECKLOCKTIMEVERIFY DROP
     &lt;Payer Public Key> CHECKSIG
ENDIF

任何知道秘密R的人,当其哈希等于H时,都可以通过执行IF流程的第一条子句来赎回此输出。

如果秘密没有被揭示,并且在一定数量的区块之后HTLC被要求,支付方可以使用IF流程中的第二个子句来要求退款。

这是HTLC的一个基本实现。这种类型的HTLC可以被任何知道秘密R的人兑现。HTLC可以采取许多不同的形式,脚本略有变化。例如,通过在第一条子句中添加CHECKSIG运算符和一个公钥,可以将哈希的兑现限制为特定的接收方,后者也必须知道秘密R。

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论