Zerosync:构建基于STARK的Bitcoin证明系统

news2024/11/25 3:07:16

1. 引言

前序博客:

  • Bitcoin+STARK: ZeroSync & Khepri

Robin Linus、Tino Steffens、Lukas George 等人成立了一个名为 ZeroSync 协会(ZeroSync Association)的瑞士非营利组织,该组织将牵头开发比特币证明系统。ZeroSync 于 2022 年获得了 Geometry Research 的资助,今年早些时候也获得了 StarkWare 的资助,此后成立了该基金会。该小组的工作是在以太坊生态系统之外使用 StarkWare 的 Cairo 编程语言的首次尝试。
ZeroSync 协会总部位于瑞士楚格州,由一个以多重签名钱包为代表的董事会进行管理,其密钥持有者在比特币或 ZKP 系统领域赢得了良好的声誉。作为安全措施和保护其隐私,密钥持有者的姓名不公开。
ZeroSync的使命为:

  • 促进比特币生态系统中证明系统的使用,以提高可扩展性、可访问性和隐私性。

ZeroSync分为3大阶段:

  • 1)Header Chain proof(原型已实现):类似于SPV轻节点,header state proof仅验证区块头、PoW和难度调整。此外,在所有区块头上使用Merkle树来增强header chain,从而为所有区块和交易提供简洁的包含证明。该state proof相对简单,轻量,计算成本低。将是ZeroSync第一个准备的生产级版本。

    • Header Chain Verifier demo:在浏览器内运行WebAssembly的miniSTARK verifier,来验证Bitcoin header chain的递归证明。当前仍处于原型开发阶段,仅能验证header chain,还不能验证交易。
      在这里插入图片描述
  • 2)“Assumevalid” state proof(原型已实现):模仿Bitcoin Core的“assumevalid”选项。其验证除交易签名之外的所有比特币共识规则。更确切地说:假设所有witness数据都是有效的。此外,此证明使用Utreexo来通过UTXO集合承诺来增强链。ZeroSync团队于2023年2月完成了这种“Assumevalid” state proof的初步原型。

  • 3)Full state proof:验证所有比特币共识规则,包括所有witness数据。在“Assumevalid” state proof的基础上,还验证了所有的witness数据。就计算而言,这是最昂贵的证明,并且需要对Prover进行重大优化才能变得可行。它将是最后一个做好生产准备的。

ZeroSync的第一个主要应用程序将是通过Blockstream卫星从太空广播state proofs,让几乎在地球上任何地方的每个人都可立即同步比特币区块链。

ZeroSync核心开发者有:

  • Robin Linus
  • Lukas George
  • Tino Steffens
  • Max Gillett
  • Andrew Milson

开源代码见:

  • https://github.com/ZeroSync/ZeroSync(Cairo语言):即时同步Bitcoin全节点的STARK proof。
  • https://github.com/ZeroSync/header_chain(Cairo语言):为Header Chain Proof,即Bitcoin header chain的STARK proof。

ZeroSync的主要任务为:

  • 1)为即时同步Bitcoin链状态创建证明系统。此外,作为开发者工具,使用ZKP来加强现有协议、应用和服务。
  • 2)构建Bitcoin proofs社区,具体方式为:
    • 在会议上分享技术
    • 为参与的人们提供资源
    • 与该领域的其它项目合作
  • 3)最终致力于在Bitcoin 主网层集成ZKP verifier。

ZeroSync为比特币网络部署了一个基于零知识证明的系统。该项目帮助比特币用户验证网络状态,而无需下载整个区块链。

区块链开发商 ZeroSync 已经实现了第一个基于 Stark 证明的比特币客户端系统——比特币header chain。
该项目基于 Starkware 的 Cairo 编程语言构建,将使比特币用户能够验证网络状态,而无需下载区块链或信任利用 Starks( StarkWare开发的一种 ZK 证明)的第三方。

ZK 证明是一种承诺增强隐私性和可扩展性的加密方法。ZeroSync 表示,通过使一方能够在不透露任何额外信息的情况下验证声明的真实性,ZK 证明可以基本上解决比特币在交易速度和网络拥塞方面的挑战。

ZeroSync 的verifier对于轻客户端来说是一个值得注意的发展,使他们能够几乎即时验证比特币交易的包含情况,客户端仅存储header chain proof,而不是下载所有区块头。ZeroSync 的比特币网络区块头Verifier使得为网络构建基于 zk 证明的轻客户端成为可能,这是无许可创新路线图的第一步。在短期内,轻客户端可能会让你在手机上运行比特币完整节点。但该路线图包括比特币之上的Layer 2协议,该协议可以将代币(例如稳定币)引入比特币网络,并使吞吐量增加 20 至 50 倍,而无需任何类型的分叉。

ZeroSync 联合创始人 Robin Linus 表示:“这大大降低了作为一等公民参与比特币网络的门槛。” “从长远来看,ZeroSync团队希望使用 Stark Proofs 为比特币带来大规模的可扩展性。ZeroSync 设计并目前正在实施Layer2 协议,该协议具有卓越的隐私性和可扩展性特性,允许比特币每秒处理超过 100 笔代币交易。这可能是让比特币实现其所需的可扩展性的一项重大成就。”Linus 告诉 Blockworks。“除此之外,我们还获得了完美的隐私——你可以对交易金额和交易图表进行加密,然后你基本上就可以获得与 Zcash 相当的一流隐私。”隐私优势本质上是协议使用 STARK(StarkWare发明的证明系统)的副产品,而不是故意的设计选择。

ZeroSync 表示,通过发布比特币网络header chain的verifier作为其网络 ZK 客户端的一部分,它已经实现了第一个重大里程碑。比特币轻客户端(即钱包)使用区块头和一种称为简单支付验证(SPV)的机制来验证交易。

ZeroSync 的下一步是向节点提供整个区块链的验证,而不需要它们下载和处理数据。“最终目标是在比特币主网上建立一个零知识证明Verifier,”Linus 补充道。

需要软分叉才能在 ZeroSync 设想的Layer 2 网络上实现无需信任的比特币桥接。但即使没有这一点,网络也可以无需许可地支持有用的功能,例如以稳定币支付费用的代币转账,从而无需使用比特币(BTC)来支付交易。

比特币从设计上就难以改变,需要核心开发人员的共识,以及包括矿工在内的全节点运营商的近乎共识。之前的 2021 年软分叉名为Taproot,经过多年酝酿,只有在超过 90% 的节点运营商表示同意后才激活。

“我们希望它很难改变,这样就可以成为硬通货,但一些改变是必要的,”Linus说。“似乎存在一种共识,即在某个时候我们确实希望在比特币上拥有某种 [zk 证明] Verifier。”

Linus 认为 ZeroSync 的作用是帮助找出最有意义的方法。

“我们尝试参与社区并推动这一进程,”他指出。“一切都必须是免费和开源的,否则永远不会进入主层。”

与此同时,他们完成的链状态证明不需要任何类型的分叉。

1.1 ZeroSync技术突破点

ZeroSync协议,用于降低运行Bitcoin全节点所需的存储和计算压力,特别适于资源有限的设备运行。其主要技术突破点在于:

  • 1)Merkle Proofs and UTXO Set:比特币网络依赖Unspent Transaction Output (UTTXO) 集合来验证交易。全节点需维护该UTXO集合,目前该集合非常大。ZeroSync 使用 Merkle 证明来允许节点验证交易,而无需在本地维护整个 UTXO集合。这是一种加密证明形式,可以确认区块内特定交易的存在。
  • 2)Simplified Payment Verification (SPV):ZeroSync 可被认为是 SPV(简化支付验证)节点的扩展或改进。SPV 节点已经不下载完整的区块链,而是依赖区块头和 Merkle 证明进行交易验证。ZeroSync 更进一步,减少了 SPV 节点需要存储的数据量。
  • 3)Data Pruning:ZeroSync 的主要功能之一是数据修剪,可以安全地删除不再相关的旧交易数据。这对于在磁盘上维持较小的区块链大小至关重要。
  • 4)Computational Efficiency:通过减少需要存储和验证的数据量,ZeroSync 还旨在减少运行节点所需的计算能力。这使得在功能较弱的硬件上运行节点变得更加可行,从而有可能增加网络的去中心化。
  • 5)Security Trade-offs:虽然 ZeroSync 的目标是保持与全节点相同的安全级别,但也存在权衡。例如,理论上,如果第三方是恶意的,依赖第三方的 Merkle 证明可能会使节点面临某些类型的欺诈。
  • 6)Network Propagation:减少节点的数据和计算要求也可以对网络传播速度产生积极影响。更快的交易验证和中继可以提高网络的整体吞吐量和延迟。
  • 7)Merkleized UTXO Set:ZeroSync 利用 Merkle Trees 创建 Merkleized UTXO 集。Merkle Tree 的每个叶子节点代表一个 UTXO,并且该树的构建方式允许高效插入、删除和验证 UTXO。当交易被验证时,会生成 Merkle 证明,证明 UTXO 存在于集合中,而不会泄露整个集合。这是一个 O(log N) 操作,其中 N 是 UTXO 的数量。采用Patricia Trie,代码示例为:
    from pymerkle import MerkleTree
    utxo_hashes = [hash_function(utxo) for utxo in utxo_set]
    merkle_tree = MerkleTree(leaves=utxo_hashes)
    
  • 8)SPV Nodes with Bloom Filters:ZeroSync 基于 SPV 节点的概念,通过合并布隆过滤器来实现块头的高效查询和检索。这使得 SPV 节点不仅可以验证交易,还可以查询与其钱包相关的交易,从而减少不必要的数据传输。使得SPV节点可仅查询相关区块头。
    from pybloom import BloomFilter
    filter = BloomFilter(capacity=10000, error_rate=0.1)
    filter.add(item)
    
  • 9)Data Pruning and Garbage Collection:ZeroSync 采用垃圾收集机制来修剪陈旧的 UTXO 和 Merkle 树节点。这对于保持较低的存储占用空间至关重要。垃圾收集算法被设计为非阻塞并在后台运行,确保节点的性能不受影响。实现垃圾回收算法来裁剪Merkle tree:
    def prune_merkle_tree(tree, stale_nodes):
        for node in stale_nodes:
            tree.delete(node)
    
  • 10)Parallel Validation:ZeroSync 允许通过跨多个线程甚至多台机器分发 Merkle 证明来并行验证交易。这对于具有多核处理器的设备特别有用,并且可以显着加快验证过程。可使用多线程来并行验证Merkle proofs:
    from concurrent.futures import ThreadPoolExecutor
    with ThreadPoolExecutor() as executor:
        executor.map(validate_merkle_proof, merkle_proofs)
    
  • 11)Cryptographic Commitments:为了确保数据完整性,ZeroSync 对每个 UTXO 使用加密承诺,特别是 Pedersen 承诺。这允许节点在不泄露其价值的情况下验证 UTXO 的完整性,从而提供隐私和安全性。使用Pedersen commitment来对每个UTXO进行承诺:
    def pedersen_commitment(value, blinding_factor):
        return G * value + H * blinding_factor
    
  • 12)Network Latency and Gossip Protocol:ZeroSync 采用修改后的gossip协议来实现跨网络的高效数据传播。通过减小数据包的大小并采用数据聚合和批处理等技术,ZeroSync 旨在减少网络延迟。
  • 13)Security Considerations:虽然 ZeroSync 减少了数据占用空间,但它确实带来了潜在的攻击媒介,例如 Merkle Proof 伪造。为了缓解这一问题,ZeroSync 采用 zk-SNARK(零知识简洁非交互式知识论证)来提供零知识证明系统,使攻击者在计算上无法伪造 Merkle 证明。在不公开UTXO集合的情况下,使用zk-SNARKs来验证Merkle proofs的完整性:
    from py_ecc import bn128
    _, proof = bn128.zk_snark(...)
    
  • 14)Consensus Algorithm Compatibility:值得注意的是,ZeroSync 的设计与底层共识算法无关,无论是工作量证明 (PoW)、权益证明 (PoS) 还是任何其他算法。这使其成为一种多功能解决方案,有可能被各种区块链网络采用。

2. 等待比特币的简单性

ZK证明技术仍处于起步阶段。有许多不同的证明系统可供使用,需要考虑各种不同的权衡。这些选择会对构建在其之上的虚拟机产生影响。Linus 承认仅就一项达成共识是相当困难的。

StarkNet 基金会董事会成员、比特币思想领袖埃里克·沃尔 (Eric Wall)阐述了(ZKrollups on Bitcoin - notes)比特币在这一领域的决策过程面临的挑战之一。

“当 zk 社区本身没有以任何方式就哪种类型的 zkVM 最适合明年的比特币达成共识时,比特币社区如何能够就特定的 zk 验证操作码达成共识,更不用说未来5年还是未来100年?”

幸运的是,Linus 看到了一个可能的解决方案,即Simplicity 编程语言,该语言最初由Blockstream于大约五年前推出。

Simplicity 是一种类似于以太坊上的 Solidity 的智能合约语言,被描述为“比特币的最后一个软分叉”。Linus 表示,如果它被激活,它将“极大地提高比特币的脚本能力”。

“我们已经开始试验它,因为 Blockstream 刚刚在Liquid测试网上激活了它……这将是我们在比特币主层上试验 [zk 证明] verifier的第一步。”

StarkWare 的联合创始人 Eli Ben-Sasson 毫不奇怪地倡导Cairo+STARK 堆栈。
在这里插入图片描述
但 Linus 表示,采用 Simplicity 将使 zk 证明团队不必完全依赖一种或另一种证明系统。

“你可以相当自由地选择你想要使用的证明系统……它是一种智能合约的高级语言,它允许你进行基本上任何类型的计算,你可以用常规编程语言进行,”他说。

“因此,关于我们想要激活哪个 [zk 证明] verifier的问题就不会再有太多戏剧性的问题了——我们基本上只会实现我们认为最好的,”他补充道。

如果其他人认为他们有更好的证明系统,他们可以自由地实施它,而不需要任何人的许可。

3. Zerosync开发者工具(ZDK)

ZeroSync Developer Toolkit (ZDK) 开发者工具包:

  • 为比特币开发人员提供强大的工具来支持下一代生态系统,将零知识证明应用到他们自己的产品和服务中。

ZeroSync 开发者工具包(ZDK)允许具有最少领域专业知识的开发者将证明系统集成到现有的比特币生态系统中。这在比特币之上启用了“ZK 层”。以下示例给出了新颖的设计空间的想法:

  • 1)轻客户端:目前,许多比特币应用程序都基于服务器,以可信的方式向客户端提供链数据。比特币证明支持不需要信任的客户端-服务器模型,同时只在客户端增加最小的开销,这对于移动设备和 Web 应用程序来说是理想的选择。
  • 2)灵活的数据库:证明可以转换或过滤区块链数据,并创建索引以高效查询。如,他们可以通过以下方式来扩充链条:紧凑型区块过滤器 Compact block filters,这增加了轻客户端的隐私。另一个想法是过滤单边支付通道关闭,这样闪电节点就可以跳过大部分链。
  • 3)Attestations证明:ZKP 允许对 UTXO 状态和历史做出任意复杂的陈述,包括选择性隐藏信息。如,比特币交易所可以向所有客户证明其偿付能力,而无需透露任何余额或交易历史记录。
  • 4)proofs是可组合的:如,"the full state proof"对每个人来说都是相同的,但它可以轻松扩展,这使得自定义状态证明变得便宜。如,自定义证明还可以提供最新区块的平均交易费用。
  • 5)闪电网络隐私:ZKP 可能有助于增强闪电网络中支付路由的隐私性。目前,gossip network要求通道是公共的,但 ZKP 可以启用私有路由通道。
  • 6)Layer 2:针对交易历史压缩的客户端验证协议如Taro(Taproot Assets)和RGB,以及嵌入式共识协议,如Omni Layer或者Counterparty,或Ordinals。此外,ZKP 可以通过混淆交易值和the graphs 来添加一流的隐私。
  • 7)互操作性:从 BTC 到外链的信任减少的跨链桥。还可以将外链上的资产与比特币上的资产进行无需信任的挂钩。
  • 8)域名系统:证明可以实现高效的去中心化域名系统,解决了之前设计的许多缺陷。
  • 9)出售数据:可以使用证明来出售Zero-Knowledge Contingent Payments。这在闪电网络上也很有效。也许可以将其进一步开发为数据层协议,该协议可以激励服务器向轻客户端提供链数据和证明。

更一般地说,该工具包可用于开发更复杂的链下应用程序,并具有改进的可扩展性、可用性和隐私性。

pip install zerosync

该工具包仍处于早期阶段和实验阶段,但已可使用 Python 包管理器将ZeroSync的 Bitcoin Cairo 库集成到自己的项目中。

4. ZeroSync长期愿景

ZeroSync 促进了将 ZKP 系统添加到比特币主层的过程。比特币的proof verifier可实现各种强大的新功能,如validity rollups,无需信任的双向挂钩,或完美的交易隐私。ZeroSync在非状态证明方面的工作旨在探索这一设计空间,并帮助开发未来链上证明的工具和最佳实践。

若Simplicity在比特币上被激活,一个好的候选人可能是用以下Simplicity语言编写的 STARK Verifier。很快将可在Liquid sidechain中对Simplicity中的STARK 进行实验。

5. ZeroSync技术栈

ZeroSync 完全基于免费开源软件。

STARK和Cairo:ZeroSync 基于 STARK 证明,与其他证明系统相比相对简单。STARK 仅依赖于哈希函数和多项式。不需要新颖的密码学假设。最重要的是,没有可信的设置。
使用由StarkWare创建的Cairo语言来实现Bitcoin proofs。当前正与ZeroSync底层所有STARK工具开发者紧密合作。

  • 正在使用https://github.com/maxgillett/giza,基于Winterfell的一个免费开源的 STARK Prover和Verifier
  • 在消费级设备上,使用https://github.com/andrewmilson/ministark(为GPU加速的prover)来生成proofs。
  • 从长远来看,未来可能会转向 StarkWare开源 StarkNet Prover

ZeroSync Cairo代码均已开源:

  • https://github.com/zerosync

其提供各种模块,如:

  • 实现共识规则的比特币库
  • 对UTXO set commitments的Utreexo实现
  • 用于增量可验证计算的递归 STARK verifier

6. ZeroSync路线图

转向生产级比特币证明。

当前原型是比特币证明系统技术可行性的有力指标。现在ZeroSync团队希望将这项技术带入现实世界。

ZeroSync路线图规划为:

  • 1)提高Prover性能
    • 切换到https://github.com/lambdaclass/cairo-vm,与当前使用的用 Python 编写的运行器相比,它要快得多,因为它是用 Rust 编写的。
    • 使用 STARK 友好的哈希函数作为递归验证器
    • 对 sha256 和 secp256k1实现Cairo builtins。还对剩余 bitwise、pedersen、ecdsa、ec_op 实现builtins。
    • 使用goldilocks域 ntt trick节省内存并提高性能
  • 2)完成比特币共识:仍然需要实施一些剩余的比特币共识规则。
    • sighashes(ALL、NONE、SINGLE、ANYONECANPAY等等)
    • 脚本解释器(实现所有操作码)
    • 所有支付类型,Legacy:p2pk、p2pkh、p2sh。SegWit:p2wpkh、p2wsh。Taproot:p2tr; key path & script path spend。
    • Schnorr签名验证
  • 3)安全加固:应用最佳实践来确保证明系统的安全性。
    • 进行大量的自动化测试。如,使用源自Bitcoin Core的所有静态测试向量。还添加fuzzing测试
    • 雇用外部人员来执行代码审查和安全审计
    • 运行公共bug赏金计划
  • 4)融入生态系统:逐步推出针对现实世界用例的证明系统。
  • 将header chain集成到 Neutrino 等轻客户端中。
  • 将full state proof集成到 btcd 或 Electrum 中
  • 构建一个同步比特币核心全节点的工具。运行ZeroSync全节点不需要修改Bitcoin Core代码。验证后将UTXO 集复制到 Core 的chainstate目录中即可。理想情况下,这与新的AssumeUTXO模式即时同步,同时仍然对该state proof进行备份检查。
  • 为比特币的点对点网络定义一组新的网络消息,以在节点之间共享state proofs。

7. ZeroSync历史

从想法成长为现实。

  • 2022 年 2 月,Lukas George开始了STARK relay: https://github.com/lucidLuckylee/LightSync,他在柏林工业大学的学士论文,其中他实现了比特币header chain的第一个基本证明并对其进行了基准测试。
  • Geometry提供了一项研究补助金来资助初步开发。
  • 2022 年 7 月,Robin Linus作为项目负责人加入,他们共同创立了 ZeroSync 来实施完整的状态证明。
  • Ruben Somsen将该项目被命名为ZeroSync。
  • 2022 年 9 月,Max Gillett(其开发了 Giza Prover)加入了团队,帮助在Cario实施 STARK verifier以进行证明递归。
  • 2023 年 2 月,他们完成了第一个重大里程碑,这是一个递归状态证明的基本原型,可验证除witness数据之外的所有比特币共识规则。
  • 2023 年 3 月,Giacomo Zucco(其与 Peter Todd 共同创作了 RGB 协议),帮助他们在瑞士成立了ZeroSync 协会,并将其发展成为一个长期项目。
  • StarkWare 的开源计划,OnlyDust,还提供了研究资助来赞助开发。
  • 2023 年 6 月,Andrew Milson(其开发了 miniSTARK prover)加入了团队,帮助优化prover性能并完成可投入生产的chain proof。
  • 2023年7月,ZeroSync获得了来自OpenSats的研究赞助。
  • 2023年9月,团队完成了header chain proof,启用比特币的第一个 zk 客户端。

8. ZeroSync相关文章及媒体资料

Zero相关文章有:

  • 研究论文:ZeroSync: Introducing Validity Proofs to Bitcoin
  • Geometry Notebook:Introduction to ZeroSync
  • CoinDesk:ZeroSync 和 Blockstream 从太空广播比特币零知识证明
  • CoinTelegraph:比特币的零知识证明彻底改变了网络状态验证
  • Decrypt:StarkWare 的零知识证明在以太坊上进行了测试,现已在比特币上上线
  • Bitcoin Magazine:比特币节点现在距离即时同步又近了一步
  • Blockworks:比特币的第一个零知识轻客户端致力于推动创新
  • The Block:ZeroSync 为比特币实现了第一个基于 Stark 的 ZK 客户端

ZeroSync相关媒体资料有:

  • CoinDesk:新成立的 ZeroSync 协会为比特币带来零知识证明
  • Andrew Milson在StarkWare Sessions 2023上的演讲:Provers for Consumers
  • Olaoluwa Osuntokun 在StarkWare Sessions 2023上的演讲:比特币上的 STARK:从外到内
  • Lukas George和 Robin Linus在 Blockstream Talk演讲:ZeroSync 和 Blockstream 卫星
  • 在MIT Bitcoin Expo 2023, Cambridge MA上演讲:比特币的零知识证明
  • 在Bitcoin Builders 2023, Miami上演讲:为比特币构建零知识证明系统
  • Robin Linus在Bitcoin 2023, Miami上演讲:为比特币引入有效性证明
  • Lukas George 和 Robin Linus在Bitcoin Optech Recap对演讲论文的演讲。
  • Stephan Livera播客:ZeroSync:加速比特币 IBD
  • Robin Linus在Bitcoin Optech Recap上演讲:Some Day Peg
  • 在StarknetCC 2023, Paris上演讲:Bitcoin STARKs
  • 在BTC Startup Lab线上演讲:zkCoins:具有强大隐私性和可扩展性的新型代币协议
  • 与Bitcoin News采访:比特币区块链可以从 600GB 压缩到几 MB 吗?

参考资料

[1] Bitcoin+STARK: ZeroSync & Khepri
[2] 2023年10月新闻 ZeroSync 为比特币实现了第一个基于 Stark 的 ZK 客户端
[3] 2023年11月博客 Zero Sync Protocol: Reducing the computational and storage for running a Bitcoin Full Node
[4] 2023年3月新闻 The ZeroSync Association is developing a Bitcoin proof system based on STARK proofs
[5] ZeroSync demo
[6] ZeroSync官方twitter
[7] 2023年9月新闻 比特币首个零知识轻客户端寻求推动创新
[8] ZeroSync官网

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

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

相关文章

STM32——ADC

STM32——ADC 1.ADC介绍 ADC是什么? 全称:Analog-to-Digital Converter,指模拟/数字转换器! ADC性能指标 量程:能测量的电压范围分辨率:ADC能辨别的最小模拟量,通常以输出二进制数的位数表示&#xf…

春季选品策略:如何在Shopee平台上脱颖而出

在Shopee平台上进行春季选品时,卖家需要制定有效的策略来吸引消费者的注意并提高销售业绩。本文将介绍一些关键的选品策略,帮助卖家在春季市场中脱颖而出。 先给大家推荐一款shopee知虾数据运营工具知虾免费体验地址(复制浏览器打开&#xf…

嵌入式——模拟/数字转换器(ADC)补充

目录 一、ADC简介 二、ADC功能 1.电压输入范围 2.输入通道 3. 转换顺序 (1)规则序列 (2) 注入序列 4.触发源 5. 转换时间 (1) ADC时钟 (2) 采样时间 6. 数据寄存器 &am…

回归预测 | Matlab实现CPO-BiLSTM【24年新算法】冠豪猪优化双向长短期记忆神经网络多变量回归预测

回归预测 | Matlab实现CPO-BiLSTM【24年新算法】冠豪猪优化双向长短期记忆神经网络多变量回归预测 目录 回归预测 | Matlab实现CPO-BiLSTM【24年新算法】冠豪猪优化双向长短期记忆神经网络多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CPO-B…

字符串中的单词反转【leetcode】

本题选自leetcode图解算法数据结构一书 你在与一位习惯从右往左阅读的朋友发消息,他发出的文字顺序都与正常相反但单词内容正确,为了和他顺利交流你决定写一个转换程序,把他所发的消息 message 转换为正常语序。 注意:输入字符串…

python 标准库random生成随机数

当前版本: Python 3.8.4 文章目录如下 1. random的特点 2. random的用法 2.1. 随机整数 2.2. 随机小数 2.3. 随机元素 2.4. 随机字符串 1. random的特点 random 提供了生成伪随机数的功能,可以用于各种随机相关的操作,如生成随机数、…

LVS常用的NAT模式和DR模式实战示例

引言:紧接上文,了解LVS,这一篇就够了-CSDN博客,今天我们对LVS常用的两种模式来进行示例配置演示 LVS-NAT模式 1、环境准备 准备 3 台纯净的虚拟机 关闭防火墙和selinux 例: lvs-server 添加两个网卡 NAT模式 …

TortoiseSVN各版本汉化包下载

首先进入下载版本列表 1.下载地址:https://sourceforge.net/projects/tortoisesvn/files ​ 2.选择自己版本进入​ 3.选择Language Packs进入,选择对应语言包下载。 ​ 4.在TortoiseSVN根目录下点击安装即可。 ​

Android图表第一库MPAndroidChart探索40k stars

Android图表第一库MPAndroidChart探索40k stars 1. 引言 在Android应用程序中,图表是一种非常有用的数据可视化工具。这些图表可以帮助用户更好地理解复杂数据和趋势,并支持业务决策。为了方便开发人员创建出色的图表,有许多优秀的第三方库…

【劳德巴赫 Trace32 高阶系列 3 -- trace32 svf 文件操作命令】

请阅读【嵌入式开发学习必备专栏 之 Trace32 系列 】 文章目录 Trace32 SVF 文件操作命令JTAG.PROGRAM.autoJTAG.PROGRAM.SVF命令参数介绍IRPREIRPOSTDRPREDRPOSTInitStateIgnoreTDOVerbose使用示例Trace32 SVF 文件操作命令 JTAG.PROGRAM.auto Format: JTAG.PROGRAM.</

SQLMap的Tamper脚本

由于SQL注入的影响过于广泛以及人们的网络安全意识普遍提升&#xff0c;网站往往 会针对SQL注入添加防SQL注入系统或者WAF 。这时&#xff0c;在渗透测试过程中就需要 绕过网站的安全防护系统。SQLMap是一款用来检测与利用SQL注入漏洞的免费 开源工具&#xff0c;不仅可以实现S…

PyQT——URAT串口调试助手(上位机界面)

页面实现效果&#xff1a; main.py from PyQt5.QtWidgets import * from PyQt5.QtGui import * from PyQt5.QtCore import * import sys from ui.Ui_main_window import Ui_MainWindow from views.serial_assist_widget import *class MainWidget(QMainWindow):def __init__(s…

图的学习

图的基本概念和术语 图的定义&#xff1a;图是由顶点的有穷非空集合和顶点之间的边的集合组成的&#xff0c;G表示&#xff0c;V是图G中顶点的集合&#xff0c;E是图G中边的集合 无向图&#xff1a;任意两点的边都是无向边组成的图&#xff08;无向边&#xff1a;&#xff08…

Java 的 Map 與 List

通過重新new 一個ArrayList 轉化 resTask.setList(new ArrayList<Group>(custMap.values())); 无序的Map List 有序的数据放到Map&#xff0c;就变成无序。 List排序 按照code 的字母进行排序A-Z resTask.getListData().sort(Comparator.comparing(Gmer::getCode));…

配置nginx作为静态文件托管服务器

下载nginx windows上是个压缩包 解压后, 使用命令行输入 nginx 进行启动 nginx -s stop 进行停止 nginx -s status 查看状态 可以配置一下环境变量 主要是配置文件, windows的nginx配置文件在 conf文件夹下 在http标签下 添加如下配置 其他地方不用更改,保持原样即可, 以…

[GN] 23种设计模式 —— 常见设计模式学习总结

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言创建型模式 —— 创建的艺术结构型模式 —— 组合的艺术适配器模式 -- 不兼容结构的协调对象适配器类适配器模式优缺点适用场景 组合模式 -- 树形结构的处理例子…

Springboot整合Websocket实现ws和wss连接

1. 引入pom依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId><version>2.7.10</version> </dependency>2. 新建websocket配置文件 import org.springf…

ElementUI Form:Radio 单选框

ElementUI安装与使用指南 Radio 单选框 点击下载learnelementuispringboot项目源码 效果图 el-radio.vue 页面效果图 项目里el-radio.vue代码 <script> export default {name: el_radio,data() {return {radio: 1,radio2: 2,radio3: 3,radio4: 上海,radio5: 上海,ra…

【JAVA】单例模式的线程安全性

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 正文 我的其他博客 正文 老生常谈的问题了&#xff0c;首先要说的是单例模式的线程安全意味着&#xff1a;某个类的实例在多线程环境 下只会被…

Codeforces Round 922 (Div. 2) (A~B)

A. Brick Wall 读题不谨慎翻车半小时&#xff0c;警惕黑体加粗的单词&#xff0c;真的很重要。 给你n高&#xff0c;m宽的方框&#xff0c;往里面放 1*k 大小的砖头&#xff0c;k自己选&#xff0c;但是>2&#xff0c;塞满方框的情况并且不超出边界&#xff0c;输出最大的…