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

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官网

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

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

相关文章

shell

目录 一.运行方式 二.编程习惯 三.变量 3.1变量的命名 3.3普通变量(局部变量) 3.4特殊变量 3.5变量子串 3.6变量赋值 四.运算方式 4.1$(( )) 4.2let 4.3expr 4.4bc(小数运算) 4.5$[ ] 4.6awk 4.7总结运算方式 五.条件测试语句 5.1文件 5.2条件测试表达式…

js实现动漫拼图1.0版

文章目录 1 实现效果视频2 功能实现思路3代码实现 1 实现效果视频 拼图1.0 2 功能实现思路 布局忽略(小白学前端,不献丑了) 左侧拼图格 左侧4*4的拼图小格子 利用表格实现,规划好td的大小,给每个格子加上背景图片&…

计算方法实验2:利用二分法及不动点迭代求解非线性方程

一、问题描述 利用二分法及不动点迭代求解非线性方程。 二、实验目的 掌握二分法及不动点迭代的算法原理;能分析两种方法的收敛性;能熟练编写代码实现利用二分法及不动点迭代来求解非线性方程。 三、实验内容及要求 二分法 (1) 编写代码计算下列数字…

类和对象 第五部分第四小节:赋值运算符重载

C编译器至少给一个类添加4个函数 1.默认构造函数无参,函数体为空 2.默认析构函数无参,函数体为空 3.默认拷贝沟早函数,对属性进行值拷贝 4.赋值运算符“operator”,对属性进行值拷贝 如果类中有属性指向堆区,做赋值操作…

上推加载更多组件

本组件使用的是TaroReact 实现的 ,具体代码如下 一共分为tsx和less文件 //index.tsx /** RefreshLoading* description 上推加载更多组件* param loading boolean* param style* returns*/import { View } from "tarojs/components"; import React, { FC…

[ESP32 IDF] wifi 的应用

目录 背景知识 wifi的基本连接使用 WiFi篇—— WiFi两种模式文章中二、WiFi 的启动(STA 及 AP 模式) 输出现象 通过websocket控制LED 实践验证 实验现象 背景知识 WIFI是ESP32非常重要的一个功能,想要使用一下IDF的API实现将ESP32连…

深度学习核心技术与实践之深度学习研究篇

非书中全部内容,只是写了些自认为有收获的部分。 Batch Normalization 向前传播 (1)三个主要任务:计算出每批训练数据的统计量。 对数据进行标准化 对标…

vue 使用 v-viewer 用于图片浏览的Vue组件,支持旋转、缩放、翻转等操作,基于viewer.js。

作者连接 npm: npm install v-viewerlegacy viewerjs main.js 引入: // 引入Viewer插件 import VueViewer, { directive as viewerDirective } from v-viewer; // 引入Viewer插件的图片预览器的样式 import viewerjs/dist/viewer.css; // 使用Viewer图片…

最新Unity DOTS Instancing合批:如何针对单个渲染实体修改材质参数

最近在做DOTS的教程,由于DOTS(版本1.0.16)目前不支持角色的骨骼动画,我们是将角色的所有动画数据Baker到一个纹理里面,通过修改材质中的参数AnimBegin,AnimEnd来决定动画播放的起点和终点,材质参数AnimTime记录当前过去的动画时间。但是在做大…

RabbitMQ“延时队列“

1.RabbitMQ"延时队列" 延迟队列存储的对象是对应的延迟消息,所谓“延迟消息”是指当消息被发送以后,并不想让消费者立刻拿到消息,而是等待特定时间后,消费者才能拿到这个消息进行消费 注意RabbitMQ并没有延时队列慨念,…

vite+ts+vue3打包的过程和错误

文章目录 概要vite.config.ts配置tsconfig.json 的配置package.json 的配置路由配置打包打开打包后的文件小结 概要 完成vite的打包,和在本地打开页面 记录一下,vite打包过程中的问题!!! vite.config.ts配置 vite.config.ts配置打包的相关配置 import…

Linux实验记录:使用RAID(独立冗余磁盘阵列)

前言: 本文是一篇关于Linux系统初学者的实验记录。 参考书籍:《Linux就该这么学》 实验环境: VmwareWorkStation 17——虚拟机软件 RedHatEnterpriseLinux[RHEL]8——红帽操作系统 目录 前言: 备注: 部署磁盘阵…

菱形打印和十进制ip转二进制

1.菱形打印 用for循环 #!/bin/bashread -p "请输入菱形的大小&#xff1a;" num #打印向上的等腰三角形 for ((i1;i<num;i)) dofor ((jnum-1;j>i;j--))doecho -n " " #打印的是前面的空格donefor ((k1;k<2*i-1;k))doecho -n "*" #打印…

NPDP认证:产品经理的国际专业认证

你是否想证明自己在产品开发与管理方面的专业能力&#xff1f;NPDP认证正是你需要的&#xff01;&#x1f525; NPDP认证&#xff0c;即产品经理国际资格认证&#xff0c;由美国产品开发与管理协会&#xff08;PDMA&#xff09;所发起&#xff0c;是全球公认的新产品开发专业认…

【大厂AI课学习笔记】1.2 人工智能的应用(1)

目录 1.2 人工智能的应用 1.2.1 产业中人工智能的应用 金融 教育 医疗 交通 制造 ——智慧金融 智能风控 智能理赔 智能投研 &#xff08;声明&#xff1a;本学习笔记学习原始资料来自于腾讯&#xff0c;截图等资料&#xff0c;如有不合适摘录的&#xff0c;请与我联…

【Sql Server】新手一分钟看懂在已有表基础上增加字段和说明

欢迎来到《小5讲堂》&#xff0c;大家好&#xff0c;我是全栈小5。 这是《Sql Server》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对…

Python根据Excel表进行文件重命名

一、问题背景 在日常办公过程中&#xff0c;批量重命名是经常使用的操作。之前我们已经进行了初步探索&#xff0c;主要是通过批处理文件、renamer软件或者Python中的pathlib等模块对当前目录下的文件进行批量重命名。 而今天我们要使用的是PythonExcel的方法对指定目录下的文…

开发工具之GIT协同开发流程和微服务部署实践与总结

GIT协同开发流程和微服务部署的实践&#xff0c;并总结经验和教训。通过合理的GIT协同开发流程和良好的微服务部署策略&#xff0c;团队可以更高效地开发和部署软件。 ## 引言 在当今快节奏的软件开发环境中&#xff0c;采用合适的工具和流程对于实现高效协同开发和可靠部署至…

uniapp 解决键盘弹出页面内容挤压问题

page.json 配置 加 “app-plus”: { “softinputMode”: “adjustResize” } {"path": "pages/jxx/xx","style": {"navigationBarTitleText": "贺卡DIY","enablePullDownRefresh": false,"app-plus": {…

【李宏毅机器学习】Transformer 内容补充

视频来源&#xff1a;10.【李宏毅机器学习2021】自注意力机制 (Self-attention) (上)_哔哩哔哩_bilibili 发现一个奇怪的地方&#xff0c;如果直接看ML/DL的课程的话&#xff0c;有很多都是不完整的。开始思考是不是要科学上网。 本文用作Transformer - Attention is all you…