闪电网络的工作原理
闪电网络是一个为了降低比特币交易成本同时提高网络容量的链外交易方案。尽管是链外交易方案,但它通过在链上留下见证脚本的方式在一定程度上提高了交易的安全性。
比特币不为人知的“智能”功能
尽管以太坊之类的数字货币以“智能”作为特色,但作为它们前辈的比特币也有一定的“智能”功能。
比特币通过“解锁脚本”这一并不图灵完全(能够在算法意义上一定程度上执行等价于我们常用的计算机的程序的能力)的功能在一定程度上智能化。
解锁脚本是由比特币的字节码(或者说你可以把它理解为比特币网络能够处理的汇编)写成的一段脚本。
若是解锁脚本在特定输入下能够在不出错的情况下计算,并且栈上最后只剩下一个唯一的不为0的值,那么这段脚本所锁住的比特币就可以被解锁者花掉。[^1]
而闪电网络则正是依靠解锁脚本的这一点灵活性运行的。
闪电网络的博弈论设计
闪电网络并没有通过纯粹的密码学方法来实现安全的离网传输,而是采用了一种基于博弈论的技术来保证离网交易能够被比特币网络强制执行。
这一实现具体是这样的:.
- 创建闪电网络支付渠道的双方在网络上创建一个特定的解锁脚本,并向解锁脚本中打入一定量的比特币。这个解锁脚本需要两个人同时签名的一条信息(多签名技术)才能将其中的比特币提取出来。
- 这条脚本对解锁时分配给双方的比特币数量通过双方共同签署的一个余额分配信息来确定,而为了避免早于双方最后签署的分配信息被用来提取比特币,该合约做了如下的一个设计:在给出分配信息之后,合约中的比特币不能立即被提取,而是需要在一定数量的区块产生后才能提取,从而留给对方一定的发出争议的时间。而分配信息中有一个标识签署顺序的参数,若是在发出提取请求后但提取完成前这段时间内,对方发出了一个比该请求更晚的分配信息,则合约脚本内所有的比特币都会被分配给另一方。
- 由于2中的争议分配信息可能通过其中使用较早的一方控制算力,阻止另一方的交易提取期内被网络处理,闪电网络提出了如下的一个扩展:闪电网络节点可以通过在区块内加入一个特定标志,从而使得合约中提取等待区的区块计数不计入一些区块的产生。
如上三点设计通过引入时间参数和博弈惩罚的方式,确保了两方之间的离网交易的安全。
闪电网络中网络构成的实现
但是,上面给出的设计只能创建两方之间的微交易通道,而在每两个人交易时都创建一条交易通道显然花费巨大,而且很不现实。
因此闪电网络通过一个被称为哈希时间锁步的方法来允许闪电交易渠道真正的构成一个网络。
哈希时间锁步的作用就是确保另一方收到后必须向第三方发出除了网络费用之外的部分。简单的来说,哈希锁步协议就是每一个交易者向它的下一级给出这样的一个保证:
在一定时间内它的下一级可以通过给出一个特定哈希值的原像(通俗易懂的解释就是,一个经过不太好算出原本内容的哈希函数能够得到特定值的数值)来获取比特币。
而在超过这段时间后发送这笔比特币的交易者则可以撤回其中的比特币。
通过逐级缩短哈希锁步交易中的时间,每一级都可以确保下一级向他的更下一级发送了那些比特币。而在当最终的接收者收到比特币后,他将向自己的上一级给出那个原像(并解锁发给他的比特币),而各级发送者逐级向上解锁通过闪电网络发给自己的比特币,从而完成这笔交易。
闪电网络的跨链交易
由于哈希锁步交易的特性,如果两个具有相同哈希函数的区块链想要进行代币兑换,那么我们可以把上面的锁步操作分配到两条链上,而双方发送的内容互为解锁信息,这样我们就可以通过闪电网络的交易方式进行跨链代币兑换。