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

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.mzph.cn/news/748042.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA编译安卓源码TVBox(2)

一、项目结构:主要app和player app结构 二、增加遥控器按键选台 修改LivePlayActivity.java 1、声明变量 public String channelId "";public Timer timer new Timer();public Toast mToast;2、定义方法 private void mToastShow(String s){mToast …

微信小程序-webview分享

项目背景 最近有个讨论区项目需要补充分享功能,希望可以支持在微信小程序进行分享,讨论区是基于react的h5项目,在小程序中是使用we-view进行承载的 可行性 目标是在打开web-view的页面进行分享,那就需要涉及h5和小程序的通讯问…

Unity类银河恶魔城学习记录10-10 p98 UI health bar源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili HealthBar_UI.cs using System.Collections; using System.Collections.G…

计算机毕业设计-基于大数据技术下的高校舆情监测与分析

收藏和点赞,您的关注是我创作的动力 文章目录 概要 一、研究背景与意义1.1背景与意义1.2 研究内容 二、舆情监测与分析的关键技术2.1 robot协议对本设计的影响2.2 爬虫2.2.1 工作原理2.2.2 工作流程2.2.3 抓取策略2.3 scrapy架构2.3.1 scrapy:开源爬虫架…

专业无网设备如何远程运维?向日葵远程控制能源场景案例解析

清洁能源领域,拥有庞大的上下游产业链,涉及的相关工业设备门类多、技术覆盖全、行业应用广。在这一领域内,相关专业设备的供应商的核心竞争力除了本身产品的技术能力之外,服务也是重要的一环。 某企业作为致力于节能环保方向的气…

由浅到深认识C语言(7)

该文章Github地址:https://github.com/AntonyCheng/c-notes 在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址:https://blog.csdn…

云仓酒庄东莞分公司2024年日常沙龙:葡萄酒文化与品鉴之旅

原标题:云仓酒庄东莞分公司日常沙龙:葡萄酒文化与品鉴之旅,招商新机遇共融 在东莞这座充满活力的城市,云仓酒庄分公司近日举办了一场别开生面的日常沙龙活动。此次活动以葡萄酒文化与品鉴为主题,旨在让参与者深入体验…

Typecho CMS 反序列化漏洞(CVE-2018-18753)复现

1.环境搭建 项目地址:Release Typecho 1.0(14.10.10) typecho/typecho GitHub 安装: 创建数据库typecho create database typecho; 再进入安装程序,输入数据库密码,设置登录密码即可 直接使用即可 2.漏洞分析 install.php文…

[善用佳软]推荐掌握小工具:Json解析的命令行工具jq

前言: 我们在各种生产环境或者开发测试环境中,一定遇到有很多信息都是使用JSON串或者文本文件作为输入的。在没有JQ命令行工具之前,我们要从中获取真正的输入,大都把它复制到文本里头,然后使用文本编辑器进行加工整理…

PytorchAPI的使用及在GPU的使用和优化

API 调用API:和手动实现的思路是一样的。#1,#2这两个步骤是通用的步骤,相当于建立一个模型,之后你具体的数据直接丢进去就行了。只需要按着这样的样式打代码就行,死的东西,不需要你自己创造。 import torc…

【博士每天一篇文献-综述】Communication dynamics in complex brain networks

阅读时间:2023-11-30 1 介绍 年份:2018 作者:Andrea Avena-Koenigsberger,印第安纳大学心理与脑科学系;Bratislav Misic 蒙特利尔神经学研究所,麦吉尔大学 期刊: Nature reviews neuroscience…

【Linux进阶之路】HTTPS = HTTP + S

文章目录 一、概念铺垫1.Session ID2.明文与密文3.公钥与私钥4.HTTPS结构 二、加密方式1. 对称加密2.非对称加密3.CA证书 总结尾序 一、概念铺垫 1.Session ID Session ID,即会话ID,用于标识客户端与服务端的唯一特定会话的标识符。会话,即客…

基于DataX迁移MySQL到OceanBase集群

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…

go和rust使用protobuf通信

先下载protoc 首先下载proc程序以生成代码 https://github.com/protocolbuffers/protobuf/releases 解压,然后把bin目录的位置放到环境变量 测试 rust作为server,rpc使用tonic框架 官方教程 go作为service,使用grpc go语言使用grpc 效…

Xilinx LVDS ISERDESE2

ISERDESE2 7 系列 FPGA 是一款专用的串行到并行转换器,具有特定的时钟和逻辑功能,旨在促进高速源同步应用的实现。该ISERDESE2避免了在FPGA架构中设计解串器时遇到的额外时序复杂性. ISERDESE2功能包括: 1,专用解串器/串行转换器 ISERDESE2解串器可实现高速数据传输,而无需…

FPGA静态时序分析与约束(四)、时序约束

系列文章目录 FPGA静态时序分析与约束(一)、理解亚稳态 FPGA静态时序分析与约束(二)、时序分析 FPGA静态时序分析与约束(三)、读懂vivado时序报告 文章目录 系列文章目录前言一、什么是时序约束&#xff1…

【JavaEE -- 多线程3 - 多线程案例】

多线程案例 1.单例模式1.1 饿汉模式的实现方法1.2 懒汉模式的实现方法 2. 阻塞队列2.1 引入生产消费者模型的意义:2.2 阻塞队列put方法和take方法2.3 实现阻塞队列--重点 3.定时器3.1 定时器的使用3.2 实现定时器 4 线程池4.1 线程池的使用4.2 实现一个简单的线程池…

【XR806开发板试用】基于WEBSOCKET实现人机交互(控制开关灯)以及开发问题记录

一、开发板编译、功能介绍 根据官方文档编译烧录成功后,我们修改下官方例子,进行开发来实现websocket。 整体流程:开发板先自动寻找指定的wifi并且连接,连接成功后,通过websocket来与服务端连接,连接成功后…

【SVG】前端-不依靠第三方包怎么画连线???

如何用SVG实现连线功能 在Web开发中,我们经常会遇到需要在页面上绘制图形或者实现一些图形交互的场景。SVG(Scalable Vector Graphics)作为一种用于描述二维图形的XML标记语言,在这方面提供了极大的便利。本文将以一个具体的例子…

蜡烛图K线图采用PictureBox控件绘制是实现量化交易的第一步非python量化

用vb6.0开发的量化交易软件 VB6量化交易软件的演示视频演示如上 股票软件中的蜡烛图是非常重要的一个东西,这里用VB6.0自带的Picture1控件的Line方法就可以实现绘制。 关于PictureBox 中的line 用法 msdn 上的说明为如下所示 object.Line [Step] …