闪电网络协议设计思想剖析

1. 引言

闪电网络可能是比特币之上部署的最受期待的技术创新。闪电网络,为由 Joseph Poon 和 Tadge Dryja 于2015年首次提出的支付层,承诺支持:

  • 用户之间几乎无限数量的链下交易,
  • 几乎免费,
  • 同时利用比特币提供的安全性。

2016年时,至少三个公司——Poon 和 Dryja 的 Lightning、 Blockstream 和 Blockchain—— 目前正在致力于该技术的实施。但除了这个小型技术前沿之外,很少有人完全了解“小额支付的未来”将如何提升比特币的能力。

本文分3大块来介绍闪电网络协议

  • 第一部分列出了闪电网络的基本构建块,并展示了如何将这些构建块组合起来创建“智能合约”,该合约可用于实现闪电网络的第一个要求:双向支付通道。
  • 第二部分解释了双向支付渠道如何转变为网络,以及哈希时间锁合约(HTLC)如何将网络中的不同通道连接在一起。
  • 第三部分解释了如何将 HTLC 放置在双向支付通道中,以确保交易可以完全在链下进行。

2. 闪电网络基本构建块

2.1 构建模块 #1:未确认的交易

从本质上讲,比特币协议由交易组成,这些交易通常与之前的交易相关联,也可能与未来的交易相关联。每笔交易都包含 输入(指比特币发送的地址) 和输出 (指比特币发送到的地址)。此外,输入必须包括发送比特币的要求,如证明输入地址“所有权”的签名。与此同时,输出建立了新的要求,这些要求必须包含在后续 交易的输入中 。

作为其主要功能之一,闪电网络是由或多或少的常规比特币交易构建的。只是这些交易通常实际上并不通过比特币网络广播。相反,它们存储在用户的本地节点上 - 但闪电网络交易可随时通过网络广播。
在这里插入图片描述
本文中:

  • 黑色边框表示的是已确认交易
  • 蓝色边框表示的是:仅当其前序交易已被确认后,可由Alice广播的交易
  • 红色边框表示的是:仅当其前序交易已被确认后,可由Bob广播的交易

如上图中所示:

  • Alice可随时签名并广播其未确认交易,并给Bob发送2个BTC
  • 仅当Alice已签名并广播交易且得到确认之后,Bob才可以签署属于他的2个BTC,将其中一个BTC发送给Carol,另一个BTC留给Bob自己。

2.2 构建模块#2:双花保护

闪电网络的第二个构建模块可能不需要太多解释,因为它可以说 是比特币本身存在的理由 :双花保护。如果两笔交易(或:输入)依赖于相同的输出,则只有一笔交易可以确认。
这里要记住的重要一点是,即使是未经确认的交易也可能是冲突的,这意味着只有1笔交易可被确认。
在这里插入图片描述
如上图中所示:

  • Alice必须选择其中一笔交易来签名并广播,无法同时签名和广播2笔交易(若同时,也只有一笔交易会被确认,即变成黑框表示)。

2.3 构建模块 #3:多重签名

闪电网络的第三个构建块也是一个简单的构建块:多重签名(multisig)地址。(或者更一般地说:P2SH 地址。)

多重签名地址是比特币地址,顾名思义,需要多个私钥才能“解锁”并从中花费比特币。多重签名地址可以在各种条件下设置。例如,需要三个可能的密钥中的两个,或者十五个中的十五个,或者几乎任何其他组合。

闪电网络通常使用2-of-2多重签名设置。从 2-of-2 多重签名地址解锁比特币需要来自两个专用密钥的两个签名。
在这里插入图片描述
如上图中所示:

  • Alice和Bob之前设置了一个multisig地址,2人分别有一个密钥
  • 若无Bob的签名,Alice没法自行花费该multisig地址
  • 需注意,当某签名添加到某交易之后,无法修改该交易内容。
  • 在密码学中,签名是交易和seal的混合,且是一长串独特的数字字串。

2.4 构建模块#4:时间锁

第四个组成部分是时间锁。时间锁可以在输出中“锁定比特币”,使它们仅在未来的某个时刻才可被花费(包含在后续输入中)。
有两种不同类型的时间锁:

  • 绝对类型,称为 CheckLockTimeVerify (CLTV):CLTV 将比特币锁定到未来(或多或少)的具体时间:实际时间和日期,或特定的区块高度。
  • 以及相对类型,称为 CheckSequenceVerify (CSV):CSV 使用相对时间。一旦 CVS 输出被记录在区块链上,从该 点开始需要一定数量的区块 才能再次被花费。【在闪电网络中,常将CSV表示为clock,用作delay】
    在这里插入图片描述

2.5 构建块#5:哈希值和秘密

第五个也是最后一个构建块——密码学——是比特币本身最基本的构建块。但在闪电网络中,它以一种新的方式应用。

简而言之,“value”或“secret”是一长串独特的数字,即使对于具有无限尝试的计算机来说,实际上也无法猜测。通过特殊的计算,这个value(或secret)可以被“哈希”成不同的数字字符串,即“哈希值”。
诀窍是:

  • 任何知道该value的人都可以轻松地重现哈希值。但反过来则不然。这是一条单行道。

这个技巧可用在比特币本身,再次“锁定比特币”。(事实上​​,这确实是比特币的工作原理。)如,哈希值可以包含在输出中,并要求后续输入包含相应的value才可被花费。
在这里插入图片描述
如上图中所示:

  • 本文以带颜色的钥匙🔑来表示value或secret,相应的哈希值以相同颜色和相同数字的锁🔐来表示

2.6 第一个挑战:双向支付渠道

甚至在闪电网络出现之前, 支付渠道的概念 就已经存在了一段时间。典型的支付渠道对于某些目的很有用,但也有局限性:它们是单向的。Alice可以向Bob支付几笔链下交易,但Bob根本无法通过同一通道向Alice支付。

作为闪电网络的一个关键特征,Poon 和 Dryja 提出了无需信任的双向支付通道。

2.6.1 打开通道

要建立双向支付通道,双方必须首先就opening交易达成一致。此opening交易决定了各自存入通道的比特币数量。

假设Alice想向Bob发送一枚比特币。由于Alice和Bob希望更频繁地进行交易,因此他们决定开放一份双向支付通道,并用它来发送比特币。(发送一整个比特币对于支付渠道来说可能会很多,因为这对于小额支付可能更有用 - 但这是完全可能的。)
为了打开通道,Alice 和 Bob 各发送 5 个BTC到 2-of-2 多重签名地址。这就是“opening交易”。只有当Alice和Bob都签署后续交易时,才能从该地址花费比特币。

此外,Alice 和 Bob 都创建一个秘密(一串数字),并交换哈希值。

Alice 现在立即从opening交易中创建后续交易。这是“commitment交易”。通过commitment交易,Alice向自己发送了4个BTC,并向第二个多重签名地址发送了6个BTC。第二个多重签名地址有点奇怪。它可以由Bob自己解锁,但只有在它被包含在区块链上并开采了1000个额外的区块之后才能解锁;它包括一个 CSV 锁。 或者,它可以由 Alice 自己打开,但前提是她 还 包含 Bob 刚刚向她提供哈希值的秘密。(当然,Alice不知道这个秘密是什么——Alice只知道哈希值——所以Alice现在无法使用这个选项。)

Alice签署了其commitment交易,但不光播!相反,Alice将其签名后的commitment交易给了Bob。

与此同时,Bob也做了同样的事情,但是是镜像的。Bob还创建了一笔commitment交易,从中将 6 个比特币发送给自己,并将 4 个比特币发送到一个时髦的新多重签名地址。如果 Alice 再等待 1000 个区块,她就可以解锁该地址,或者 Bob 可以使用 Alice 的秘密来解锁该地址。
Bob签署了其创建的commitment交易,并将其创建并签名的commitment交易交给Alice。

在交换“half-valid” commitment交易和秘密哈希值之后,他们都签署并广播opening交易,以确保其记录在区块链上。该通道现已正式开通。

此时,Alice 和 Bob 都可以签署并广播他们从对方获得的半有效commitment交易。如果Alice这样做了,Bob会立即获得6个BTC。如果Bob这样做了,Alice会立即获得4个BTC。但无论谁签署并广播该交易,都必须等待 1000 个区块才能解锁后续的多重签名地址,并领取剩余的BTC。
在这里插入图片描述
然而,这是支付渠道的关键技巧:

  • 既不签署也不广播自己的那份交易。

2.6.2 更新通道

过了一会儿,Bob想给Alice发回一个比特币。他们想要更新通道状态,使余额再次达到五比五。为了实现这一目标,Alice和Bob做了两件事:

  • 首先,两者都重复上述过程(除了开仓交易已记录在区块链上;该部分被跳过)。这次,Alice和Bob都将5个BTC归为自己,并且都将5个BTC归为时髦的多重签名地址。这些多重签名地址的条件相似,只是它们需要 新的 秘密:Alice 和 Bob 都互相提供新的 哈希值。他们都签署了新的一半有效的commitment交易,并将其交给对方。
  • 其次,Alice和Bob互相传递他们在 第一个 设置中所使用的 第一个 秘密。

此时,Alice 和 Bob 都可以签署并广播他们刚刚获得的新的“半有效”commitment交易。他们的交易对手将立即获得 5 个比特币,而广播方则必须等待 1000 个区块。因此,通道已更新。

但是是什么阻止Bob广播旧的commitment交易呢?该commitment交易导致了一条向他支付 6 个比特币的路径,而不是 5 个……。

当然,阻止Bob的是他的第一个秘密,他现在已经把这个秘密告诉了Alice。

Bob无法再安全地签署和广播旧的commitment交易,因为Alice现在知道Bob的第一个秘密。如果Bob要签署并广播该commitment交易,他将立即向Alice发送 4 个BTC……而他必须等待 1000 个区块才能领取自己的 6 个BTC。这是一个问题,因为现在Alice知道了他的秘密,Alice可以利用这段时间击败Bob,并夺取另外6个BTC!

由于Bob也拥有Alice的秘密,因此反之亦然。如果Alice尝试签署并广播旧的commitment交易,Bob可以窃取通道中的所有BTC。
这当然意味着Alice和Bob都有强烈的公平竞争动机,并且只签署和广播通道的最新状态。

在这里插入图片描述

3. 将双向支付通道扩展为支付网络

接下来,这种双向支付渠道设置需要扩展以允许通过网络进行支付。
在这里插入图片描述
Alice 和 Bob 建立了一个双向支付通道。现在,Alice想向第三人Carol支付1 BTC。

为此,Alice和Carol可以在他们之间开辟一条支付通道。但他们实际上并不需要这样做。事实证明,Bob 和 Carol 已经有一个双向通道,因此 Alice 可以通过 Bob 向 Carol 付款。

具体来说,Alice可以向Bob支付1 BTC,Bob可以向Carol支付1 BTC。

然而,Alice并不真正信任Bob——或者Carol:

  • Alice担心如果她付钱给Bob,Bob永远不会真正付钱给Carol。
  • 或者Bob可能会付钱给Carol,但Carol会声称她从未收到过这笔钱,而Alice不知道该责怪谁。

因此:

  • 如果Bob也向Carol支付了1 BTC,Alice希望确保她只向Bob支付1 BTC。

这是通过简单的加密技巧(部分)完成的。

  • 当Alice想要向Carol发送BTC时,她告诉Carol创建一个value(随机数字字符串)并向她发送哈希值。Alice还告诉Carol用原始value与Bob交换比特币。
  • 与此同时,Alice从Carol那里拿到了哈希值,转向Bob,并告诉Bob,如果Bob向她提供相应的value(只有Carol有),她就会给Bob一个比特币。
  • 因此,Bob转向Carol,并给了Carol 1BTC以换取value。
  • 然后,Bob将这个value返回给Alice。Alice知道Bob一定是从Carol那里得到了value以换取BTC,因此得出结论Carol得到了她的BTC。所以Alice可以放心地给Bob 1BTC。

几乎每个人都很高兴。

在这种“天真的”场景中,中间人Bob仍然必须信任Alice和Carol:

  • Bob必须相信Carol在向她发送了比特币后确实给了他value,
  • 而Bob必须相信Alice在向她提供了value后确实给了他1 BTC。

因此,bitcoin -for-value trade必须在网络上得到绝对保证。更具体地说:如果Bob给Carol 1 BTC,他必须保证从Alice那里拿回1BTC。

这就是哈希时间锁定合约(HTLC)的用武之地。

3.1 Hash Time-Locked Contracts哈希时间锁定合约

所以Alice和Bob想通过HTLC完成bitcoin -for-value trade。(Bob和Carol也想以相同的value进行bitcoin -for-value trade- 但现在先不关注,后续会讲。

为此,Alice 不是直接向 Bob 发送BTC,而是将BTC发送到一个新的(又是时髦的)多重签名地址。锁定在该地址上的BTC可以通过两种不同的方式解锁。

  • 第一个选项是Bob包含他的签名和value。
  • 第二种选择是Alice包含她自己的签名。然而,这个选项有一个CLTV 时间锁:Alice 只能在(比如)两周后签署并广播交易。

这意味着Bob有两周的时间来创建后续交易,其中包含他的签名和value,并将其广播以将比特币从时髦的多重签名地址发送给自己。因此,这笔交易是有保障的。Bob只有在提供value的情况下才能索取Alice的BTC:通过比特币网络广播它,使其公开可见,Alice可以看到。

如果Bob没有及时提供value,Alice可以通过“超时替代方案”取回她的比特币。简单的。

回到网络,因为这就是需要 HTLC 设置的真正原因。

如前所述,不仅 Alice 和 Bob,Bob 和 Carol 也建立了 HTLC。因此,如果Carol向Bob索要她的比特币,Bob将获得value作为回报;该value将在区块链上可见。

因此,如果发生这种情况,Bob也能从Alice那里得到比特币。Bob 可以获取 Carol 在区块链上公开显示的value,将其包含在他与 Alice 的 HTLC 中,并为自己索取BTC。两个通道有效衔接。

最后一个细节是,在Alice从Bob那里收回她的BTC之前,Bob必须从Carol那里获得value,这一点很重要。如果Bob在Alice收回其付款之后才从Carol那里获得value,那么Bob毕竟被困在中间。因此,Bob 和 Carol 的 HTLC 中的超时必须在 Alice 和 Bob 的 HTLC 中的超时到期之前到期。(如,正好十天之后,而不是两周。这也是 HTLC 需要 CheckLockTimeVerify (CLTV) 而不是 CheckSequenceVerify (CSV) 的原因。)

最后,还有一个问题需要解决:为了使闪电网络发挥作用,所有这些都必须在链下完成。

4. 闪电网络

到目前为止,Alice 和 Bob 开通了一个双向支付通道,他们都用 5 BTC为其提供资金。他们来回进行了两笔交易,在当前的通道状态下,Alice 和 Bob 都可以通过在区块链上“dropping删除通道”来为自己申领 5 BTC。

现在,他们希望在通道中包含 HTLC。这是为了确保如果Carol向Bob索要BTC以换取她的value,那么Bob也能从Alice那里得到比特币作为回报。

与上一步一样,Alice 和 Bob 首先创建一个新的commitment交易。在很多方面,这些commitment交易与之前的commitment交易非常相似,它们包括:

  • 一个普通输出,
  • 以及一个带有 CSV(CheckSequenceVerify)时间锁和特殊哈希锁的时髦多重签名地址的输出。

同样,与上一步一样,Alice 和 Bob 交换他们的旧秘密,以有效地使旧通道失效。而且,一旦交换,Alice和Bob都可以签署他们那份commitment交易,并可能随时将它们放到区块链上。

都是熟悉的领域。除了一处变化。Alice 和 Bob 的commitment交易现在都包含一项新输出,价值 1 BTC。(这使得余额为 4-5-1;Alice 为 4 个,Bob 为 5 个,新输出为 1 个。)

这个新输出本质上是 HTLC。它甚至比迄今为止的所有其他输出更时髦,因为有三种方法可以解锁HTLC输出:

  • 1)首先,新的输出(在 Alice 和 Bob 的commitment交易中)会释放BTC,前提是 Bob 的签名和value包含在后续交易中。因此,无论 Alice 还是 Bob 签署并广播commitment交易,只有 Bob 可以解锁该输出——如果他包含该value。但这两个commitment交易之间有一个小区别:

    • 如果 Bob drop删除通道,则会涉及 CSV 时间锁。他需要等待 1,000 个区块。(如果Alice放弃频道,Bob可以立即领取这1 BTC。)
  • 2)如果 Bob 放弃通道,他必须等待 1,000 个区块的原因与之前看到的非常相似:它允许 Alice 拿走这1 BTC,以防 Bob 试图签署和广播旧的通道状态。这就是解锁输出的第二种方法的用武之地。如果Alice提供Bob的(最新)秘密,她就可以“窃取”资金。
    两个人可以玩这个游戏:如果Alice试图欺骗并广播这个已经过时的通道,Bob可以使用Alice的秘密索取这个1 BTC。(他甚至不需要提供该value。)

  • 3)第三,与任何其他 HTLC 一样,两项commitment交易还包括 Alice 常见的 CLTV 超时回退。如果Bob在两周内没有包含该value(如因为他没有从Carol那里得到它),Alice可以收回她的BTC。同样,Alice 或 Bob 是否断开通道对于此选项并不重要。

那么这一切给带来了什么?

  • Alice和Bob都持有半有效的承诺交易。如果Alice在区块链上放弃了她的commitment交易,她会立即向Bob发送5 BTC。此外,她还可以等待 1,000 个区块,并为自己领取 4 个比特币。另外,Bob 有两周时间提供value,并在“HTLC 输出”中领取BTC。(如果他在两周内没有提供value,Alice可以收回这个BTC。)
  • 与此同时,Bob也可以随时放弃他的commitment交易,并立即向Alice发送4 BTC。然后,他需要等待 1,000 个区块才能从一个地址再索取 5 个比特币,如果他提供了该value,还可以从 HTLC 输出中索取另1 BTC。(如果他在两周内没有提供该value,Alice 可以收回这1 BTC。)

当然,如果Alice或Bob在未来的任何时候试图作弊,并在该通道过时时对其进行签名和广播,那么双方都可以完全阻止对方,并窃取该通道中的所有比特币。
在这里插入图片描述

4.1 Settling the Status

此时,Bob保证会收到BTC以换取该value(假设他拥有value)。他所要做的就是签署并广播他从 Alice 那里获得的commitment交易,将其价值包含在后续交易中,并签署并广播该交易。
Alice知道这一点。她不可能骗走Bob的BTC——即使她通过其他方式知道了该value。

因此,两人不妨在通道之外“settle”。Bob可以简单地将value交给Alice,Alice可以同意将通道状态更新到更正常的状态,而无需HTLC和超时期限。

假设双方都希望保持通道开放,那么他们自然会这么做:这比必须将通道放到区块链上要不那么麻烦得多。
在这里插入图片描述

4.2 通道关闭

最后,这是闪电网络的真正力量:

  • 至此,以上描述的几乎所有内容通常都根本不需要访问比特币区块链。

如果 Alice 和 Bob 都想“和平”地关闭通道,他们可以简单地从原始opening交易中创建一个交易,以覆盖自opening交易以来发生的所有事情。从这次结束交易中,他们向自己发送了通道的公平份额——即表示最新的通道状态。
具体来说,这意味着如果Alice想要关闭通道,她此时可以简单地创建一个交易,向自己支付 4 个比特币,向Bob支付 6 个比特币,并要求Bob签署并广播该交易。既然他没有理由不这样做,那么他很可能会配合并关闭通道。

最终,只有两笔交易会通过比特币网络广播并包含在一个区块中:

  • opening交易
  • 和closing交易。

即使Alice和Bob之间交易一百万次,这也将成立,从而从区块链上卸下巨大的负担。
在这里插入图片描述

参考资料

[1] 2016年5月31日 Bitcoin Magzine博客UNDERSTANDING THE LIGHTNING NETWORK, PART 1: BUILDING A BIDIRECTIONAL BITCOIN PAYMENT CHANNEL
[2] 2016年6月7日 Bitcoin Magzine博客UNDERSTANDING THE LIGHTNING NETWORK, PART 2: CREATING THE NETWORK
[3] 2016年6月17日 Bitcoin Magzine博客UNDERSTANDING THE LIGHTNING NETWORK, PART 3: COMPLETING THE PUZZLE AND CLOSING THE CHANNEL

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/474714.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于python+vue云上水果超市的设计与实现flask-django-php-nodejs

本论文的主要内容包括: 第一,研究分析当下主流的web技术,结合超市日常管理方式,进行云上水果超市的数据库设计,设计云上水果超市功能,并对每个模块进行说明。 第二,陈列说明该系统实现所采用的架…

Redis数据类型 Hash Set Zset Bitmap HyperLogLog GEO

Hash 说起Hash大家其实很容易想到java中的集合类HashMap,这里其实就是一个套娃,键值对套了一层键值对他的指令也很简单 首先是设置键值对 这里就是设置两个键值对 我们可以进行获取 使用hget获取值 或者我们使用hgetall来查询所有值 hmset/hmget是批量查找查询,和上面的操作类似…

【Unity】UI九宫格

什么是九宫格? 顾名思义,九宫格就是指UI切成9个格子,9个格子可以任意拉伸。 1、3、7、9不拉伸。 2、8水平拉伸。 4、6垂直拉伸。 5既可以水平也可以垂直拉伸。 怎么切九宫格? 选中图片,改成Sprite模式,点…

本地化语音识别、视频翻译和配音工具:赋能音频和视频内容处理

随着人工智能技术的飞速发展,语音识别、视频翻译和配音等任务已经变得更加容易和高效。然而,许多现有的工具和服务仍然依赖于互联网连接,这可能会导致延迟、隐私问题和成本问题。为了克服这些限制,我们介绍了一种本地化、离线运行…

使用 Dify 和 AWS Bedrock 玩转 Anthropic Claude 3

本篇文章,聊聊怎么比较稳定的使用 Anthropic Claude 3,以及基于目前表现非常好的模型,来做一些有趣的 AI Native 小工具。 写在前面 在实际体验了半个多月,月初上线的 Anthropic Claude Pro 后,发现 Claude 3 系列模…

LeetCode-60题:排列序列解法二(原创)

【题目描述】 给出集合 [1,2,3,...,n],其所有元素共有 n! 种排列。按大小顺序列出所有排列情况,并一一标记,当 n 3 时, 所有排列如下:"123" 、"132" 、"213" 、"231"、"312"、…

第八篇【传奇开心果系列】Python自动化办公库技术点案例示例:深度解读使用Python库清洗处理从PDF文件提取的文本

传奇开心果博文系列 系列博文目录Python自动化办公库技术点案例示例系列 博文目录前言一、Python清洗处理文本的常见步骤二、使用Python库去除非文本元素示例代码三、使用Python库去除格式化元素的示例代码四、使用Python库去除空白字符示例代码五、使用Python库合并段落和行示…

在任何 Mac 上恢复永久删除照片的 5 种简单方法

Mac 为业余和专业摄影师提供了很多东西,从令人印象深刻的硬件到广泛的照片管理和编辑应用程序。它还提供了多种恢复丢失照片的方法,我们在本文中介绍了其中的五种方法,以帮助您避免潜在的灾难性情况。 Mac 上删除的照片去了哪里?…

高能脉冲电阻-高能陶瓷电阻

EAK无感实芯电阻器,高能电阻,高能脉冲电阻,高能陶瓷电阻 产品特性: Ⅰ100%陶瓷实芯压铸结构,由粘土、二氧华硅、瓷粉等无机材料经高温烧结而成。 Ⅱ承受高脉冲能量 ,适应高压,超高压环境,能用于1000KV以上电路瞬间功率达到3KKW以…

【阅读笔记】Kinematic On‐the‐Fly GPS Positioning Relative to a Moving Reference

Hermann B R, Evans A G, Law C S, et al. Kinematic On‐the‐Fly GPS Positioning Relative to a Moving Reference[J]. Navigation, 1995, 42(3): 487-501. 单词解释 Antenna swap:天线交换 pseudokinematic:伪运动学 ambiguity:双关、歧…

Web框架开发-django模型层(多表操作)

一、创建模型 实例: 作者模型:一个作者有姓名和年龄 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息。作者详情模型和作者模型之间是一对一的关系(one-to-one) 出版商模型:出版商有名称,所在城市以及email。 书籍模型: 书籍有书名和出版…

Python面向对象三大特征(封装、继承、多态)

面向对象编程的三大特征:封装、继承和多态。 注意:在python面向对象编程中,子类对象可以传递给父类类型 一、封装 在Python中,封装是面向对象编程中的一种重要概念,它可以帮助我们实现数据隐藏、信息保护和代码复用。…

使用jscpd对比重复代码

背景 检查项目中重复的代码,或者代码片段 jscpd 两个文件对比 Jscpd 是一个用于检测代码复制和粘贴的工具,它可以比较两个文件并报告相似性的百分比。 以下是如何使用 Jscpd 来比较两个文件的示例: 首先,确保你已经安装了 Nod…

【Flutter学习笔记】9.7 动画过渡组件

参考资料:《Flutter实战第二版》9.7 动画过渡组件 “动画过渡组件”指的是在Widget属性发生变化时会执行过渡动画的组件,其最明显的一个特征就是会在内部管理一个AnimationController。controller定义了过渡动画的时长,而animation对象的定义…

Linux学习之C/C++文件操作底层调用及原理

前言:我们都知道,我们学习的C/C是无法直接与底层硬件进行交互的,所有需要与底层硬件的交互都是通过操作系统作为中介完成的,那Linux到底是怎么做到的呢?接下来我们将揭开它神秘的面纱。 目录 一,操作系统…

全平台7合一万能DIY小程序源码系统 带完整的安装代码包以及安装搭建教程

在当下的小程序市场中,虽然已有众多开发工具和服务平台,但很多用户仍然面临着开发难度大、功能不齐全、定制性差等问题。小编给大家分享一款全平台7合一万能DIY小程序源码系统。该系统旨在解决用户在小程序开发过程中的痛点,提供一站式的小程…

WordPress Plugin NotificationX插件 SQL注入漏洞复现(CVE-2024-1698)

0x01 产品简介 WordPress和WordPress plugin都是WordPress基金会的产品。WordPress是一套使用PHP语言开发的博客平台。该平台支持在PHP和MySQL的服务器上架设个人博客网站。 0x02 漏洞概述 WordPress plugin NotificationX是一个应用插件。2.8.2版本及之前 存在安全漏洞,该…

飞腾+FPGA+AI电力行业智能数据采集与分析网闸解决方案

行业痛点: 安全物联网闸在监控平台中的具体作用:35KV变电站是煤矿的动力核心,采矿人员上下井、煤炭提升输送、矿井通风等核心设备均依靠变电站提供电源。监控中心及时掌握变电站的运行状态对煤矿的安全生产非常重要。如若外部通过监控网络来控制变电站会…

Hyper Casual FX

此包包含: 五彩纸屑-2种 灰尘 - 1 种 闪光灯 - 8 种类型 闪耀 - 3 种类型 闪亮 - 1 种 水-2种 它可以在没有任何设置的情况下开箱即用 下载:​​Unity资源商店链接资源下载链接 效果图:

C语言编程实现文件加解密

目录 1. OpenSSL导入程序项目2. 编写加解密程序1. 程序代码2. 命令行传参3. 文件的读写4. 加解密中的细节 1. OpenSSL导入程序项目 下载并安装OpenSSL,下载地址打开VS,创建控制台应用 记得配置文件位置 右键项目名称,找到属性,并…
最新文章