区块链-不对称可撤销承诺

目录:http://www.javashuo.com/article/p-nitsjfvy-ey.html网络

摘自《精通比特币》区块链

处理先前承诺状态的更好方法是明确撤销它们。可是,这不容易实现。比特币的一个关键特征是,一旦交易有效,它一直有效,不会过时。取消交易的惟一方法 是在交易被挖矿前用另外一笔交易双重支出它的输入。这就是为何咱们在上述简 单支付通道示例中使用时间锁定,以确保最新的承诺交易能够在旧承诺生效以前被花费。然而,把承诺在时间上排序形成了许多限制,使得支付通道难以使用。.net

虽然说一个交易没法取消,可是它能够被构形成没法再使用的样子。咱们这样作我 们实现它的方法是经过给予每一方一个 撤销密钥,若是对方试图欺骗,能够用来 进行惩罚。撤销先前承诺交易的这种机制首先被做为闪电网络的一部分提出。code

为了解释撤销密钥,咱们将在由Hitesh和Irene经营的两个交易所之间构建一个 更加复杂的支付通道。 Hitesh和Irene分别在印度和美国运营比特币交易所。 Hitesh 的印度交易所的客户常常向 Irene 的美国交易所的客户发送付款,反之亦 然。目前,这些交易发生在比特币链上,但这意味着支付手续费用并等待几个块 进行确认。在交易所之间设置支付通道将大大下降成本并加快交易流程。blog

Hitesh 和 Irene 经过合做创建资金交易来启动通道,每人向通道注资 5 个比特币。 初始余额为 Hitesh 有 5 比特币且 Irene 有 5 比特币。资金交易将通道状态锁定在 2-2 多重签名中,就像在简单通道的例子中同样。排序

资金交易可能有一个或多个来自 Hitesh 的输入(加起来 5 个比特币或更多),以 及 Irene 的一个或多个输入(加起来 5 个比特币或更多)。投入必须略微超过通 道容量才够支付交易费用。该交易有一个将总共 10 个比特币锁定到由 Hitesh 和 Irene 控制的 2-of-2 多重地址的输出。若是他们的输入超过他们须要贡献的数值,资金交易也可能有一个或多个输出将找零返回给 Hitesh 和 Irene。 这是由双方提供和签署的多个输入造成的单一交易。在发送以前,它必须被合做 构建起来而且由各方签署。
如今,代替双方签署单一承诺交易的是, Hitesh 和 Irene 创造了两个不对称 的承 诺交易。索引

Hitesh 有一个带有两个输出的承诺交易。第一个输出当即支付 Irene 欠她的 5 比特 币。第二个输出支付 Hitesh 欠他本身的 5 比特币,但条件是只有在 1000 个区块 的时间锁以后。交易输出以下所示:get

Input: 2-of-2 funding output, signed by Irene
Output 0 <5 bitcoin>: <Irene's Public Key> CHECKSIG
Output 1: <1000 blocks> CHECKSEQUENCEVERIFY DROP <Hitesh's Public Key> CHECKSIG

Irene 有带有两个输出的不一样的承诺交易。 第一个输出支付 Hitesh 欠他的 5 比特 币。 第二个输出支付 Irene,欠她本身的 5 比特币,但一样只有通过 1000 个区块 的时间锁。 Irene 持有的承诺交易(由 Hitesh 签署)看起来像这样:原型

Input: 2-of-2 funding output, signed by Hitesh
Output 0<5 bitcoin>: <Hitesh's Public Key> CHECKSIG
Output 1: <1000 blocks> CHECKSEQUENCEVERIFY DROP <Irene's Public Key> CHECKSIG

这样一来,双方各有一笔承诺交易,以花费 2-2 的资金输出。 该承诺交易的输 入是由对方签署的。 在任什么时候候,持有承诺交易的一方均可以签字(完成 2-2 签 名)并进行广播。 然而,若是他们广播承诺交易,承诺交易会当即支付对方,而 他们本身的必须等待短期锁到期。经过在其中一个输出强制执行赎回拖延,咱们 能够作到让各方在选择单方面广播承诺交易时处于轻微的不利地位。可是单靠时 间延迟还不足以鼓励公平的行为。it

下图显示两个不对称承诺交易,其中承诺持有人的有延迟支付

如今咱们介绍这个方案的最后一个要素:一个撤销密钥,容许被欺诈的一方经过 占有通道的全部余额来惩罚骗子。
每一个承诺交易都有一个“延迟”的输出。 该输出的兑换脚本容许一方在 1000 个区块后兑换它,或者另外一方若是拥有撤销密钥也可兑换它。 因此当Hitesh为Irene 签署承诺交易时,他将把第二个输出定义为在1000块以后可输出支付给本身, 或者是任何能够出示撤销密钥的人。 Hitesh构建了这个交易,并建立了一个由他秘密保管的撤销密钥。当他准备转移到新的通道状态并但愿撤销这一承诺时, 他 才会把撤销密钥透露给 Irene 第二个输出脚本以下所示:

Output 0<5 bitcoin>: <Irene's Public Key> CHECKSIG
Output 1<5 bitcoin>: IF # Revocation penalty output <Revocation Public Key> ELSE <1000 blocks> CHECKSEQUENCEVERIFY DROP <Hitesh's Public Key> ENDIF
CHECKSIG

Irene 能够自信地签署这笔交易,由于一旦被发送它将当即支付她被欠的欠款。 Hitesh 持有交易,但知道若是他在单方通道关闭时发送,他将不得不等待1000个块才能得到支付。

当通道进入下一个状态时, Hitesh必须在 Irene 赞成签署下一个承诺交易以前撤销 此承诺交易。要作到这一点,他所要作的就是将撤销密钥发送给 Irene。一旦Irene拥有这一承诺的撤销密钥,她就能够自信地签署下一个承诺。她知道,若是 Hitesh 试图经过发布先前的承诺交易来做弊,她可使用撤销密钥来兑换Hitesh的延迟输出。若是 Hitesh 做弊,Irene 会获得 BOTH(两方)输出。

撤销协议是双边的,这意味着在每一轮中,随着通道状态的进一步发展,双方交 换新的承诺,交换用于以前承诺的撤销密钥,并签署彼此的承诺交易。当他们接 受新的状态时,他们经过给予对方必要的撤销密钥来惩罚任何做弊行为,使先前 的状态不可能再被使用。

咱们来看一个它的工做例子。 Irene 的客户之一但愿向Hitesh的客户发送2比特币。要经过通道传输2比特币, Hitesh 和 Irene 必须更新通道状态以反映新的余额。 他们将承诺一个新的状态(状态号 2),通道的 10 个比特币分裂,7 个比特币属 于 Hitesh 和 3 个比特币属于Irene。为了更新通道的状态,他们将各自建立反映新 通道余额的新承诺交易。

如上述内容所说,这些承诺交易是不对称的,因此每一方所持的承诺交易都迫使 他们等待兑换。相当重要的是,在签署新的承诺交易以前,他们必须首先交换撤 销密钥以使先前的承诺无效。在这种状况下,Hitesh 的利益与通道的真实状态是 一致的,所以他没有理由广播先前的状态。然而,对于 Irene 来讲,状态号1中留给她的余额比状态 2 中的更高。当 Irene 给予 Hitesh 她之前的承诺交易(状态 号 1)的撤销密钥时,她实际上废除了本身能够回滚通道状态到前一状态而从中 获益的能力。由于有了撤销密钥,Hitesh 能够绝不拖延地兑换先前承诺交易的两 个输出。也就是说一旦 Irene 广播先前的状态,Hitesh 能够行使其占有全部输出的权利。

重要的是,撤销不会自动发生。虽然 Hitesh 有能力惩罚 Irene 的做弊行为,但他 必须勤勉地观察区块链中做弊的迹象。若是他看到先前的承诺交易广播,他有 1000 个区块时间采起行动,并使用撤销密钥来阻止 Irene 的欺骗行为并占有全部 余额也就是所有 10 比特币来惩罚她。

带有相对时间锁(CSV)的不对称可撤销承诺是实现支付通道的更好方法,也是 区块链技术很是重要的创新。经过这种结构,通道能够无限期地保持开放,而且 能够拥有数十亿的中间承诺交易。在闪电网络的原型实现中,承诺状态由 48 位 索引识别,容许在任何单个通道中有超过 281 兆(2.8×10^14)个状态转换!