LockTime字段是Transaction级别的,每个Transaction有1个LockTime字段,是用来锁定区块高度,也就是当区块到了设定高度,交易才可以被打包。由此看出它表示的是绝对时间,用的是整个区块链的长度,或者时间戳来表达的。下图为LockTime值的含义。
Sequence Number是Input级别的,1个Transaction有多个Input,每个都对应1个Sequence Number。它是交易可替换的标志,默认是UINT_MAX= 0xffffffff = 4294967295。它是一个相对时间,表示的是当前交易所引用的UTXO所在的块,后面追加了多少个块。意思是达到所追加的块数后,交易开始打包。下图为transaction的部分结构。
中本聪最初设计两个值的构想:
1、发送一笔交易时LockTime设置为非零某值, Sequence为非最大值;
2、在LockTime到达前,可以用新版本的交易代替旧版本的交易,Sequence大被认为是新的
闪电网络的设计是:交易双方想要建立双向支付通道进行转账,首先需要最初的通道融资交易Funding Tx,是通过一个或者两个通道交易的双方为Funding Tx提供资金(如下图:Alice和Bob各提供0.5BTC),资金锁定在Funding Tx交易中,就像一个钱箱子一样,并由交易双方进行签名,只有交易双方都同意拿出资金,才能从钱箱子里拿出钱。
在未广播的Funding Tx创建后,双方签署并交换初始Commitment Tx。这些Commitment Tx来自于Funding Tx的双重签名输出。但是,只有Funding Tx在区块链上广播。来自Funding Tx的所有其他交易尚未广播,以防交易双方希望更新其余额。
为了更新余额,他们必须更新他们的Commitment Tx输出值。如果Alice和Bob现在同意通道余额为0.4给Alice和0.6给Bob,并创建一个新的Commitment Tx来反映这一点。
从上图中可以看出,Alice和Bob可以广播任何一个Commitment Tx。但是这样会产生新的危险:产生新的Commitment Tx后,资金较少的一方有显著的动机广播在Commitment Tx输出中对其自身价值较大的交易。也就是说,在图中,Alice为了自身的利益会广播左边的旧交易,这样的话,Bob的资金将被窃取。显然,在这种模式下无法建立支付通道。必须要知道是谁广播了旧交易,并对其进行处罚,这就需要归责。
归责:在支付通道中,交易双方合约承诺只广播最近的交易。任何对旧交易的广播都将导致违反合同,所有的资金都将作为罚款给予交易另一方。所以,交易双方都需有一个唯一可识别的Commitment Tx:双方必须签署交易另一方负责广播的Commitment Tx的输入。由于一方拥有由另一方签署的Commitment Tx版本,因此只能广播自己的Commitment Tx版本。
这样的模式可以识别出谁违反合约承诺,广播了旧交易,但是还未做到对其进行惩罚。为了能够实际执行合约承诺只广播最近的交易,有必要构建一个能够撤销一个交易的Commitment Tx。当交易一方广播了旧交易后,延迟其获得自己在通道中余额的时间,以供交易另一方有时间证明其违反合约承诺,并对其进行惩罚。
如何来延迟广播交易的一方获得自己余额的时间呢?这就用到了2.1.2节介绍的Sequence Number。利用Sequence Number,在该交易UTXO所在块后有Sequence Number数个块确认才有效。在这段时间,交易另一方可以立即广播一个证明的交易来撤销广播交易的一方获得自己余额的交易,对其惩罚。
从图中的Commitment Tx (C2a)可以看出,C2a的outputs有两个,output1是Bob拿回自己在通道中的余额,output0是一个RSMC。从RD2a来看,该交易只有在所在块后有Sequence Number数个块确认才有效,也就是说,如果在这时间之前Bob拿出了Alice广播旧交易的证明,那么Alice就拿不到自己的余额,但如果在这时间内Bob没有拿出证明,Alice会在RD2a交易生效后广播,拿到自己的余额。
那Bob拿出的证明是什么呢?违约救济交易Breach Remedy Transaction。当双方达成新的Commitment Tx 对(C2a/C2b)时,双方将为新的Commitment Tx 签署并交换签名,然后使旧的CommitmentTx 无效;该无效宣告是通过**双方签署违约救济交易Breach Remedy Transaction(BR1)**而发生的,BR1取代了可撤销支付交易(RD1)。
例子:如果Alice和Bob都生成了一对新的Commitment Tx (C2a/C2b):Alice支付给Bob 0.1BTC,并且取消了之前的Commitment Tx (C1a/C1b),并且后来Bob在区块链上错误地广播了C1b,那么Alice可以从该通道中拿走Bob的所有余额。Alice可以这么做,因为Bob已经通过BR1向Alice证明了他永远不会广播C1b,自从他广播C1b的那一刻起,Alice就可以把Bob在这个通道的所有余额都拿走。
如果交易双方是合作的,希望拿回通道中的各自的余额并关闭通道,那么交易双方可以用当前Commitment Tx中的余额,并从Funding Tx中执行结算交易Exercise Settlement Tx(ES) 。
执行结算交易的目的是减少区块链上发生的交易数量且交易双方能够立即收到他们的资金,而不是一方等待撤销支付交易RD生效。
由此,双向支付通道就安全的建立好了。这个过程中,只有在交易双方最初建立通道时的Funding Tx是上链的以及在最后结算最终通道钱包余额状态是上链的。对于中间交易双方相互之间的转账产生的余额状态改变都是放在链下的,避免了比特币链上交易效率的限制,实现双方小额交易的即时支付。
上一节描述的双向支付通道只能实现通道内的安全交易。但是,不可能在闪电网络所有节点间都建立双向支付通道,那样就构成了一个全连接网络。因此,必须有一种方案来实现在没有建立双向支付通道的两个节点间的安全交易,也即是要使用跨多个节点的通道网络构建安全传输到最终目的地。该方案的核心就是哈希时间锁定合约HTLC。
HTLC的目的是允许通过hash跨多个节点实现全局状态。这种全局状态由时间承诺time commitments和基于时间的资源无阻碍(通过公开原像)time-based unencumbering of resources via disclosure of preimages来保证。
HTLC是通过区块链强制执行的与一个交易另一方的通道合约。在一个通道的交易另一方同意以下条款为一个哈希的时间锁合约:
1、如果Bob可以从已知的哈希H中产生一个未知的20字节随机输入数据R,三天之内,Alice将通过向Bob支付0.1 BTC来解决合约问题。
2、如果三天过去了,那么上述条款无效,清算过程无效,双方不得试图在三天之后结算和索赔。
3、只要本合约双方当事人同意,任何一方都可以(也应该)按照本合约的条款以任何方式选择并提前终止本合约。
4、违反上述条款将使本合约中锁定资金的最高罚款,作为保真保证金支付给未违反上述条款的交易另一方。
为了使示例更清晰,我们使用days表示HTLCs,使用block height表示RSMCs。
实际上,这种付款方式取决于接收者在一定时间内对R的了解。在此时间段之后,资金将被退还给发送者。例如:如果Bob在三天内知道R,那么他可以通过广播交易来赎回资金;Alice不能以任何方式扣留资金,因为当交易广播在比特币区块链上时,脚本返回为有效。
在交易中,HTLC是Commitment Tx中的一个输出:
从概念上讲,这个脚本从单个HTLC输出有两个可能的路径。第一个路径(在OP IF中定义)将资金发送给Bob,前提是Bob能够生成R。第二条路径是被赎回,使用 3 天timelock退款给 Alice。为期 3 天的 timelock 使用来自于交易的 LockTime 执行。
从脚本及下图可以知道单个HTLC输出有两个可能的执行路径。如果Bob能在3天内生成原像R,他就能执行路径1,获得Alice支付给他的0.1BTC。三天后,Alice可以广播路径2。当3天过去后,任何一个都是有效的。
然而,此模型不能用于多个Commitment Tx,关闭HTLC是绝对必要的。因为为了让Alice得到她的退款,她必须终止合约并收到她的退款。否则,当3天后Bob发现R时,他可能会偷走本该属于Alice的资金。
对于不合作的交易对手,如果不将HTLC广播给比特币区块链,则无法终止HTLC,因为不合作的一方不愿意创建new Commitment Tx。
为了能够在不向比特币区块链广播的情况下终止HTLC合同,需要在输出中嵌入RSMCs,其结构与前面描述的双向通道类似。
以Alice广播C2a的时间为起点为例,如果Bob没有此后三天内提供前像R,那么Alice有权收回这0.1个比特币。但是Alice广播了C2a,Alice要拿回资金会比较波折。为此,Alice在C2a广播三天后,广播HT1a(HT1a的output包含了一个RSMC)。在HT1a获得1000个确认之后,Alice再广播HTRD1a,此时,Alice就可以从中获取0.1个比特币了。值得注意的是,在Alice广播HT1a之后,广播HTRD1a之前,Alice与Bob可以协商达成一个新的花费交易来替代当前HTLC。
上图中,Commitment 3是最近的交易。
Alice想向Eric转账1BTC, 因为Alice并没有直接跟Eric建立通道,但是有一条到Eric的路径:Alice——>Bob——>Carol——>Diana——>Eric。
首先Eric生成密钥R,并将密钥R的哈希H给Alice。Alice向Bob发起了一笔commitment Tx,一共1.003BTC,output指向持有Eric提供的密钥R的收款人。因为Bob并没有密钥R,所以他转而向跟他建立通道的Carol发起一笔commitment Tx,一共1.002BTC,这样如果Carol能向他提供密钥R的话,他转可以获得1.003-1.002=0.001个BTC, 因为Carol也没有密钥R,所以他向Diana发起另外一笔1.001BTC的commitment Tx,期望Diana能给他密钥R,最后到达了Eirc,他提供了密钥R,因此所有人都获得了对应的commitment Tx,交易完成。
比特币网络将需要支持更高数量级的交易量,以满足自动支付的需求。未来联网设备的增长需要一个机器对机器支付和自动微支付服务的平台。闪电网络交易是在区块链之外进行的,没有授权的信任和所有权,允许用户在其他设备之间进行几乎无限的交易。
比特币将交易聚合成间隔10分钟的区块。人们普遍认为,在确认了六个区块(约一小时)后,比特币上的支付是安全的。在闪电网络中,支付不需要阻止确认,而且是即时和原子的。Lightning可以用于零售销售终端,用户设备到设备的交易,或任何需要即时支付的地方。
小额支付的可能性可以打开新的市场。闪电使人们可以将资金发送到0.00000001比特币,而无需承担保管风险。目前,比特币区块链的最低输出规模是比特币的数百倍,每笔交易收取固定的费用,这让微支付变得不切实际。闪电允许使用实际的比特币交易进行最低限度的比特币支付。
Alice使用比特币,Bob同时使用比特币和x币,Carol使用假设的x币,Alice可以在不了解x币共识规则的情况下支付给Carol。
理论上,闪电网络的链下交易应该是无缝交易的,但是若付款者采取过于过于复杂的路线,不确定会发生什么,通道太多,费用也会增加。跨多节点支付的路径问题也是制约闪电网络广泛应用的瓶颈。
对于拥有大量资金的节点,大多数交易都将通过这些节点,会使得网络进一步中心化,虽然这些中心并不能获取重大的利益。
在闪电网络中交易,交易双方必须提交超过交易额度的资金,这样才能使交易通道打开并有效的资金流动性。但是大量资金锁定在在支付通道里,意味者必须承受市场的波动。
[The Bitcoin Lightning Network_ Scalable Off-Chain Instant Payments.pdf](The Bitcoin Lightning Network_ Scalable Off-Chain Instant Payments.pdf)
lightning-network-presentation-sfbitcoinsocial-2015-05-26.pdf
lightning-network-presentation-time-2015-07-06.pdf
lightning-network.pdf
http://www.lightning.network/
https://www.cnblogs.com/dgutfly/p/10796024.html
http://www.sohu.com/a/302182618_489821
https://www.ucloud.cn/yun/24315.html
https://www.sohu.com/a/227799336_100137203
https://blog.csdn.net/chunlongyu/article/details/80417309
https://www.jianshu.com/p/05a298fbf88f
https://blog.csdn.net/mongo_node/article/details/85986365
https://www.cnblogs.com/dgutfly/p/10781174.html