一文读懂闪电网络工作原理

一   引言

了解比特币的人都知道,比特币网络的拥堵问题由来已久,转账高手续费、速度缓慢严重制约了比特币的发展。关于扩容的争论喋喋不休,共识分歧严重,造成了多次比特币分叉。目前来看,社区共识无法达成一致已经很明确,解决比特币现有问题的方法只能寄托于闪电网络上。

二   何为闪电网络

什么是闪电网络呢?闪电网络是一个分布式网络,通过智能合约功能以支持跨参与者网络的即时付款,同时利用区块链的特性消除将资金托管给第三方带来的风险。主要作为用于即时、高容量的微支付。闪电网络的目的是实现安全地进行链下交易,其本质上是使用了哈希时间锁定智能合约来安全地进行0确认交易的一种机制,通过设置巧妙的‘智能合约’,完善链下通道,使得用户可以在闪电网络上进行0确认的交易。

对于大多数币民来说,闪电网络神秘的面纱始终无法揭开,讲解闪电网络的文章层出不穷,但是大部分还是让人看了云里雾里,无法真正明白其精髓,致使大部分人不屑用、不敢用、不会用不一而足,严重制约了闪电网络的发展。

本文将用最通俗的语言,直观的讲明闪电网络运行原理及发展现状,为闪电网络的快速普及做些许贡献。

 

三   闪电网络关键技术

要明白闪电网络原理,两个关键技术必须首选搞清楚。

1多重签名技术

多重签名技术可以理解为一把锁,必须用多个钥匙同时插入才能打开。比如1/2多重签名,表示2个人拥有钥匙,只要有一把钥匙插入就能打开;2X2多重签名,要求用两把钥匙同时插入才能打开。如下图所示。

 

 

图1

 

2哈希时间锁合约(HTLC)

HTLC(Hashed Timelock Contract, 哈希时间锁合约),即限时转账,理解起来其实也很简单。 比如比特币,通过在UTXO的输出脚本中嵌入一段脚本,要花费这个输出,必须满足签名和hash值的原值都满足要求才能花费或者达到一定时间之后,签名才能花费。如下图所示。张三、李四在多签地址中有10BTC未花费,张三、李四协商达成一致后,同时签名生成交易,输出1支付给张三6BTC,输出2的锁定脚本有两个条件,满足任意一条即可花费,一条为张三提供签名并且提供额外锁定条件的解锁脚本,如果条件1满足则输出2的4btc属于张三;另一个条件为等待n个区块高度后,若条件一仍未满足,则李四签名,输出2的4btc属于李四。条件1中的的额外锁定条件很简单,比如张三生成一段随机数RN,通过H=MD5(RN)生成哈希值H,将H放入锁定脚本中。张三在解锁脚本中提供RN,即可满足输出2的条件一。由于条件一不需要等待时间,而条件二需要等待n个区块确,因此,只要条件一能满足,条件二就无法执行,这保证了张三优先花费输出2的权利。

 

    图2

 

四 闪电网络工作原理

 

 

图3

 

闪电网络工作的第一步就是建立通道。开启通道的过程就是张三和李四分别向多重签名地址转账5BTC(该值可以是任意值),转账的过程需要广播并被矿工记录在区块链上,这个多签地址里面就拥有10个比特币,这是被区块链记录了的,全网承认,这时,张三和李四之间的通道就创建完成了。

接下来就是张三和李四私底下的交易了,不广播,不记在链上,正因如此,交易确认速度极快,几乎零手续费,这个过程称为链外交易,在交易通道(channel)中进行,此时的交易速度完全取决于网速,类似即时通信的速度。在通道中转账,双方必须记住每笔交易的金额以及交易历史数据,因为在通道中的交易过程是不上链的,而且只有自己对自己的金额安全负责,对方是不管的。如果自己把交易历史数据丢失,则最终关闭通道清算各自金额时,就无法保证数额的正确性,也就无法防止对方作恶。只要详细记录每笔交易,就能通过密码学设计保证谁也不能多记耍赖,这就是闪电网络协议设计的精妙之处。

闪电网络设计考虑到了各种作恶的可能性,其严谨的设计确保了通道的任何一方都不敢真正作恶,否则将会受到严厉的惩罚。这种巧妙设计,确保了无第三方的可靠即时支付。可以说,惩罚机制是保证闪电网络最关键的部分。下面通过两笔转账来理解何为惩罚机制。

张三、李四建立通道之初,通道内总共有10BTC,其中张三、李四各有5BTC。假设第一比转账,张三转给李四1BTC,则转账后,张三有4BTC,李四有6BTC;第二笔转账李四转给张三2BTC,则转账后张三有6BTC,李四有4BTC。怎样使双方无法反悔或者作恶呢?这里就用到了HTLC技术。

闪电网络支付,每笔交易的支付方需要向收款方索要收款码,类似支付宝扫码支付,如图4所示。

 

 

 

该支付码中除了包含支付金额等信息外,索要支付码的过程,也确保了双方都是在线的。 

第一笔交易,张三转给李四1BTC,张三需要向李四索要一把锁H1,该锁H1只有李四能够解密,虽然李四作为收款方,但他同样需要向张三索要一把锁H2,该锁只有张三能够解密。然后张三、李四构建承诺交易(commitment transaction),将对方发过来的锁嵌入到交易的锁定脚本中,然后将构建的交易发送给对方。如图5所示。

 

 

图5

 

第二笔交易,李四转给张三2BTC,李四需要向张三索要一把锁H3,该锁H3只有张三能够解密,张三同样需要向李四索要一把锁H4,该锁只有李四能够解密。

到此时,第二笔交易跟第一笔交易流程基本相同,但关键来了,张三、李四将对方发过来的锁嵌入到交易的锁定脚本中构建承诺交易(commitment transaction),,发送给对方之前,必须将第一笔交易对锁的钥匙发送给对方,来作废第一笔交易。这一步骤是保证双方无法抵赖、无法作恶的最关键步骤。

第二笔交易李四转账给张三2BTC后,正常情况下,张三有6BTC,李四有4BTC,如果在第二笔交易生成之前,双方不把第一笔交易的钥匙发送给对方,若李四把第一笔交易中的交易T1签名并广播,该笔交易会被矿工打包到区块中从而生效,则交易T1 的输出2的条件1张三没有H1的钥匙,从而无法花费,再等待足够的区块高度后,李四便可以通过条件二来花费该笔交易的6BTC,从而从张三处骗得2BTC。若再第二笔交易之前,双方都获得了对方生成锁的钥匙,则该问题迎刃而解。若李四还想通过该方法骗取张三2BTC,则张三可以通过交易T1条件1直接花费该6BTC,同时输出1的4BTC也属于张三,李四将一无所有。通过这种方式来保证历史交易全部作废,双方必须承认最新的交易结果,直到通道关闭。

 

如何实现任意节点之间转账呢?看图6.

 

 

图6

 

图6中,老王想支付给咖啡馆0.01btc,但是老王与咖啡馆之间并没有建立通道,这时,就需要借助中间人了。老王与张三、张三与咖啡馆都建立了闪电网络通道,则老王可以通过张三中转完成付款。这个过程中,我们同样会遇到信任问题:老王想转给咖啡馆0.01个BTC,需要经过张三,但张三会担心自己给咖啡馆转0.01BTC后,老王耍赖;同样老王会担心如果先给张三转了0.01BTC,张三也耍赖不转给咖啡馆。在传统的金融系统中,是由大型知名金融中介机构的信用提供保证的。但闪电网络中,并没有这样一个独立于交易者的第三方去提供信用担保。HTLC(哈希时间锁定合约)完美解决了这个问题。

过程是这样的,第一,咖啡馆会选择一个随机密文并运算得到其哈希值,再将此哈希值交给老王。第二,老王拿到哈希值后,会构建一笔转账给张三的交易。这笔交易需要张三拿到咖啡馆的密文才能解锁,如果张三在限定的时间内没有解锁成功,这笔钱则退回给老王。第三,张三从老王处拿到哈希值,他也构建一笔转账给咖啡馆的交易,咖啡馆必须拿密文来解锁。第四,当咖啡馆提供密文从张三处获得0.01BTC,张三立马会拿密文从老王处获得0.01 BTC,这就完成了从老王给咖啡馆转账的任务。

上述过程可以看作一个智能合约。过程类似于这样:A想经过B转账给C,那么C先给A一把锁,C有钥匙A有钱。A跟B说,你从C那里拿到了钥匙,我的钱就是你的了。B就拿着锁去找C,用钱跟C换钥匙,然后拿钥匙去换A的钱。如此一来,就实现了钱和锁从A到B再到C,钥匙从C到B再到A的一个流转。

当然,在实际操作过程中,老王给张三转账金额需要大于0.01BTC,支付必要的路由费以激励张三充当路由节点。其次,要注意两笔交易之间的哈希时间长度设置,第二步时间必须长于第三步时间。如果张三在老王关闭交易之后拿到咖啡馆的钥匙,他将无法找老王拿回0.01BTC。

 

至于通道关闭,也有两种关闭方式,第一种是协议关闭。张三、李四都承认最终的结果,则可以协商构建一笔多签交易,一个输出给张三,一个输出给李四,只要金额没问题,双方都签字,交易立即生效,通道随机关闭。另一种方式是一方想关闭通道,另一方不同意或者不在线,则想关闭通道的一方比如张三,假设此时只有第一笔交易,双方都不知道对方锁的钥匙,张三只要将交易T2签名并广播,则等待一定的区块高度之后,张三通过交易T2的输出2条件二来花费该笔交易。当然,李四可以立即花费该笔交易,并不需要等待。

转载来源:https://www.chainnode.com/post/384439

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Yolov5 是一种广泛应用于目标检测的算法,其 loss 原理相对简单。Yolov5 通过将目标检测问题转化为一个回归问题,通过预测 bounding box 的坐标来实现目标检测。 Yolov5 的 loss 主要包括三个部分:分类损失、定位损失和目标置信度损失。 分类损失是用来衡量预测的类别与真实类别之间的差异。Yolov5 使用交叉熵损失函数来计算分类损失。对于每个边界框(bounding box),它将计算预测类别的 softmax 概率与真实类别的 one-hot 向量之间的交叉熵。 定位损失用于衡量预测的边界框位置与真实边界框位置之间的差异。Yolov5 使用 Smooth L1 损失函数来计算定位损失。它通过对预测边界框的坐标与真实边界框的坐标之间进行平滑处理,减小了异常值的影响。 目标置信度损失用于衡量预测的边界框与真实边界框之间的 IoU(Intersection over Union)之间的差异。Yolov5 使用 Binary Cross-Entropy 损失函数来计算目标置信度损失。它将预测的边界框是否包含目标与真实边界框是否包含目标之间的差异进行衡量。 最终,Yolov5 的总损失是通过将三个部分的损失加权求和得到的。这些权重可以根据具体的任务和数据集进行调整。 通过最小化 Yolov5 的 loss 函数,模型可以学习到更准确的目标检测结果。这样,我们就可以在图像中准确地检测和定位不同类别的目标。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值