了解闪电网络,建立双向比特币支付渠道
2018-03-10 16:06 文章来自:IFTNews.CN 收藏(0) 阅读(4145) 评论(0)
IFTNews区块链报道:闪电网络可能是被部署在比特币之上的最受期待的技术革新。2015年,Joseph Poon和Tadge Dryja提出的支付层承诺,在利用比特币提供的安全性的同时,几乎不需要任何成本,就可以在用户之间提供几乎无限的非链交易。
目前,至少有三家公司——Poon和Dryja的闪电、Blockstream和区块链——正在致力于这项技术的实现。但在这一小小的技术前沿之外,很少有人能完全理解“微支付的未来”将如何提升比特币的能力。
在这个由三部分组成的系列文章中,比特币杂志列出了闪电网络的基本构建模块,并展示了它们是如何结合在一起来实现即将到来的协议层的。
本系列的第一部分建立了必要的构建模块,并展示了如何将这些模块组合起来创建“智能契约”,可以应用于实现闪电网络的第一个需求:双向支付通道。
(注:任何对比特币有深刻理解的人都可以跳过构建块。)
构建块#1:未确认的事务。
比特币协议的核心是交易,它通常与以前的交易联系在一起,并有可能用于未来的交易。每一个事务都包含输入,这是指地址比特币的发送和输出,这是指地址比特币被发送到的地址。另外,输入必须包括发送比特币的要求,比如证明输入地址“所有权”的签名。同时,输出建立新的需求,必须包含在后续事务的输入中。
作为其主要功能之一,闪电网络是由越来越多的常规比特币交易建立起来的。只是这些交易一般不会通过比特币网络进行广播。相反,它们存储在本地,在用户的节点上——但是它们可以在任何时候通过网络进行广播。

构建块#2:双花保护。
闪电网络的第二个基石可能并不需要太多解释,因为它可以说是比特币本身存在的理由:双重支出保护。如果两个事务(或:输入)依赖于相同的输出,只有一个可以确认。
这里要记住的重要一点是,即使未经确认的事务也可能是相互冲突的,这意味着只有一个可以确认。

构建块# 3:Multisig
闪电网络的第三个构建块也是一个简单的:多签名(multisig)地址。(或更一般的:P2SH-addresses。)
Multisig地址是比特币地址,顾名思义,它需要多个私钥来“解锁”并使用比特币。可以在各种条件下设置多sig地址。例如,需要三个可能的键中的两个,或者15个中的15个,或者其他任何组合。
闪电网络通常使用2个(2个2个)多sig设置。从2个多sig地址解锁比特币需要两个签名,从两个专用密钥。

构建块# 4:Time-Locks

第四个构造块是时间锁。时间锁可以在输出中“锁定比特币”,使它们在将来的某个时间点上可以使用(在后续的输入中包含)。
有两种不同类型的时间锁:绝对类型,称为CheckLockTimeVerify (CLTV),以及相对类型,CheckSequenceVerify (CSV)。CLTV把比特币锁起来,直到(或多或少)具体的时间:一个实际的时间和日期,或者一个特定的块高度。相反,CSV使用相对时间。一旦在区块链上记录了一个cvs输出,就需要在比特币再次使用之前,从该点上取一个特定数量的块。

构建块#5:哈希值和机密。
第五个也是最后一个构建块——密码学——是比特币本身最基本的组成部分。但在闪电网络中,它以一种新的方式应用。
简而言之,“价值”或“秘密”是一串长而独特的数字,几乎是不可能猜出来的,即使是对一个有无限尝试的计算机也是如此。通过一个特殊的计算,这个值(或秘密)可以被“散列”到一个不同的字符串中,一个“散列”。这里有一个诀窍:任何知道这个值的人都可以很容易地复制这个散列。但这并不是反过来的;这是一条单行道。
这种伎俩可以用在比特币本身,再次“锁定比特币”。(实际上,这就是比特币的运作方式。)例如,一个散列可以包含在一个输出中,并要求随后的输入包含相应的值以供使用。

第一个挑战:双向支付渠道。
即使在闪电网络出现之前,支付渠道的概念已经存在一段时间了。典型的支付渠道在某些方面是有用的,但也是有限的:它们是单向的。Alice可以支付Bob数个离线交易,但是Bob不能通过同一个通道支付Alice。
作为闪电网络的一个关键特征,Poon和Dryja提出了可靠的双向支付渠道。
打开通道
为了建立双向支付渠道,双方必须首先就一笔交易达成一致。这个打开的事务决定了每个存款有多少比特币流入渠道。
假设Alice想向Bob发送一个比特币。由于Alice和Bob期望更频繁的交易,他们决定打开双向支付通道,并使用此发送比特币。(对于支付渠道来说,发送一个完整的比特币可能是一笔很大的开销,因为这些可能对小额支付更有用——但这是完全可能的。)
为了打开通道,Alice和Bob各自将5个比特币发送到2- 2个多sig地址。这是“开盘交易”。比特币只能从这个地址使用,如果Alice和Bob签署了后续的交易。
此外,Alice和Bob都创建了一个秘密(一串数字),并交换散列。
现在,Alice立即从打开的事务中创建一个后续事务。这是一个“承诺交易”。在承诺交易中,爱丽丝给自己送了4枚比特币,还有6个比特币到第二个多址地址。第二个multisig地址有点古怪。它可以由Bob自己解锁,但在它被包含在区块链上之后,只有1000个额外的块被挖掘出来;它包括一个CSV-lock。或者,它可以由爱丽丝自己打开,但前提是她也包含了Bob刚才给她的那个哈希的秘密。(当然,爱丽丝不知道这个秘密是什么——她只知道哈希——所以她现在不可能利用这个选项。)
爱丽丝签署了这个承诺交易的结束。但是她没有广播!相反,她把它给了鲍勃。
与此同时,鲍勃也做了同样的事情,但也反映了这一点。他还创建了一个承诺交易,从这个交易中,他将6个比特币发送给自己,4个给一个时髦的新地址。爱丽丝可以解锁这个地址,如果她再等1000个积木,或者鲍勃可以用爱丽丝的秘密解锁它。
鲍勃在这一半签名,并把它给了爱丽丝。
在所有这些“半有效”的承诺交易和秘密的散列交换之后,他们都签署并播放了开始的交易,以确保它被记录在区块链上。该频道现在正式开放。
在这一点上,Alice和Bob都可以签署并广播他们从另一方获得的半有效的承诺事务。如果Alice做了,Bob立刻得到6个比特币。如果鲍勃做了,爱丽丝立刻得到4个比特币。但是,无论什么标志和广播,交易都必须等待1000个街区才能解锁后续的多地址,并声称剩余的比特币。
支付通道

然而,这是支付渠道的关键技巧:既不签署也不广播他们一半的交易。

更新频道
过了一会儿,鲍勃想把一个比特币寄回来。他们想要更新通道状态,使平衡再次达到5 - 5。为了做到这一点,爱丽丝和鲍勃做了两件事。
首先,重复上面描述的过程(除了在区块链上已经记录了打开事务;这部分被跳过)。这一次,Alice和Bob都将自己的5个比特币归为5个比特币,并将5个比特币归为funky multisigaddress。这些多地址的条件是相似的,除了它们需要新的秘密:爱丽丝和鲍勃互相提供新的哈希。他们都签署了他们的新半有效承诺交易,并相互给予。
第二,爱丽丝和鲍勃互相传递他们的第一个秘密,就像在第一个装置中使用的一样。
在这一点上,Alice和Bob都可以签署并广播他们刚刚得到的“半有效”承诺事务。他们的对手会立即得到5个比特币,而广播公司则需要等1000个街区。因此,通道被更新。
但是,是什么阻止了Bob广播旧的承诺事务呢?承诺交易导致了路径,给他6个比特币,而不是五…。
当然,阻止鲍勃的是他的第一个秘密,他现在给了爱丽丝。
鲍勃不能再安全地签署和广播旧的承诺交易了,因为爱丽丝现在知道鲍勃的第一个秘密。如果鲍勃要签署并播放承诺交易,他将立即向爱丽丝发送4个比特币……他还得等1000个街区才能找到自己的6个比特币。这是个问题,因为现在爱丽丝知道了他的秘密,她可以利用这段时间来打败鲍勃,并把另外六个比特币也拿走!
因为鲍勃也有爱丽丝的秘密,所以反过来也是一样。如果Alice试图签署并播放一个旧的承诺交易,Bob可以窃取通道中的所有比特币。

当然,这意味着Alice和Bob都被强烈地激励去公平竞争,并且只在最近的状态下签署和广播。