以太坊及相关的区块链技术的长处在于可以通过去中心化和无需信任的方式进行转账,不过在实现高效益的小额支付上仍需努力。本文讨论了小额交易的问题,介绍了支付通道,并概述了支付通道的工作方式。
下图的交易流程可大致反映以太坊的简单支付流程:
先由发送方(sender)将钱包里的以太币发送给以太坊网络,再由后者将一定数量的以太币分配给接收方(recipient)。 还有额外一部分以太币——交易费——是用来支付服务费的,即上图中发送方连同交易额一起发送的少量以太币。
对于较大额的支付来说很好(在撰写本文之时, 1 枚以太币价值约 300 美元),不过如果发送方想进行小额支付的话,那么问题就来了。例如,如果发送方仅打算发送 0.0001 枚以太币(价值 0.03 美元)的话,该交易就会如下图所示:
因为交易成本不与以太币的交易量挂钩,所以前者成了后者的两倍多。为了达成一笔 0.03 美元的交易而要支付 0.06 美元的交易费显然不是良策,因此以太坊网络必须另寻他法来保障小额支付。
这种解决方法就是在以太坊网络上建立支付通道,将发送方在网络上存款和接收方从网络中提款分割成两个独立的活动,如下图所示:
图中自上而下的虚线表示时间的流逝。关于上图我们还有另一个新的想法,即允许部分存款返还给发送方。
支付通道是如何运作的?首先,发送方通过向网络发送一笔适当的交易存入资金:
这笔存款就像其它交易一样被记录在了区块链上,公开确认了发送方的存款行为。
其次,发送方直接向接收方发送一些支付承诺。生成支付承诺就是发送方对接收方表示:“如果你发送了一笔包括这个支付承诺的交易,就会收到这些资金。”然而,关键在于这本身不是一笔交易。这意味着生成支付承诺可以省去交易费的成本。例如,发送方承诺会支付接收方 0.01 枚以太币:
接收方可以利用区块链上的信息来确认他们给出的承诺是好的。在本例中,“好”指的是“可发送至网络来接收资金”。
迟些时候,发送方可能会承诺向接收方额外发送 0.01 枚以太币,从而创造出了发送 0.02 枚以太币的新承诺(之前的 0.01 枚以太币加上额外的 0.01 枚以太币),并且再次绕过网络直接发送给接收方。
这时,重要的是要意识到这些承诺不会累加。接收方虽然持有发送方发送 0.01 枚以太币的承诺和发送 0.02 枚以太币的承诺,却只能使用其中之一。这是因为向网络发送一笔包含一个支付承诺的交易会关闭通道并导致其它承诺失效。在这种情况下,接收方显然会向网络发送价值最高的承诺。
接下来是最后一步。假设该通道又开放了一段时间,而接收方已经持有发送方发送 0.4 枚以太币的承诺。接收方将包含该承诺的交易发送给网络:
将该承诺发送给网络会得到兑现,将 0.4 枚以太币发送给接收方。至此支付通道关闭,未用完的存款,即 0.6 枚以太币,会返还给发送方。
现在对比一下利用支付通道发送 40 笔 0.01 枚以太币交易的总成本和发送单笔交易的成本:
- 单笔支付的成本是 40 * 0.00021 = 0.0084 Ether
- 支付通道的成本是 0.001 + 0.0005 = 0.0015 Ether
随着交易数量和/或单笔交易额的增加,支付通道的相对效益会增加。(要注意的是上述交易成本仅作例证展示,不保证符合支付通道的实际情况)
上述计算凸显了支付通道的主要用途:将大量交易成本过高的相对小额转账聚集起来。还有一个好处是这些支付承诺只需几毫秒就可以确认,而非等待区块链的确认。此即表明,支付通道和支付承诺还有其他用途。
本文概述了支付通道,不过依然存在以下问题:位于支付通道中心的智能合同是什么样的?发送方是如何开启一条支付通道的?支付承诺里包含什么内容?为了便于理解,本文忽略了以太坊的一些实际情况。下一篇文章将详细阐述如何在以太坊上实现支付通道。
链接: https://medium.com/@jgm.orinoco/introduction-to-ethereum-payment-channels-a16fbe1a7181