Zerosync:构建基于STARK的Bitcoin证明系统_stark和zero-程序员宅基地

技术标签: 比特币  

1. 引言

前序博客:

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第一个准备的生产级版本。

  • 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

开源代码见:

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工具开发者紧密合作。

ZeroSync Cairo代码均已开源:

其提供各种模块,如:

  • 实现共识规则的比特币库
  • 对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相关媒体资料有:

参考资料

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/mutourend/article/details/135893249

智能推荐

生活垃圾数据集(YOLO版)_垃圾回收数据集-程序员宅基地

文章浏览阅读1.6k次,点赞5次,收藏20次。【有害垃圾】:电池(1 号、2 号、5 号)、过期药品或内包装等;【可回收垃圾】:易拉罐、小号矿泉水瓶;【厨余垃圾】:小土豆、切过的白萝卜、胡萝卜,尺寸为电池大小;【其他垃圾】:瓷片、鹅卵石(小土豆大小)、砖块等。文件结构|----classes.txt # 标签种类|----data-txt\ # 数据集文件集合|----images\ # 数据集图片|----labels\ # yolo标签。_垃圾回收数据集

天气系统3------微服务_cityid=101280803-程序员宅基地

文章浏览阅读272次。之前写到 通过封装的API 已经可以做到使用redis进行缓存天气信息但是这一操作每次都由客户使用时才进行更新 不友好 所以应该自己实现半小时的定时存入redis 使用quartz框架 首先添加依赖build.gradle中// Quartz compile('org.springframework.boot:spring-boot-starter-quartz'..._cityid=101280803

python wxpython 不同Frame 之间的参数传递_wxpython frame.bind-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏8次。对于使用触发事件来反应的按钮传递参数如下:可以通过lambda对function的参数传递:t.Bind(wx.EVT_BUTTON, lambda x, textctrl=t: self.input_fun(event=x, textctrl=textctrl))前提需要self.input_fun(self,event,t):传入参数而同时两个Frame之间的参数传..._wxpython frame.bind

cocos小游戏开发总结-程序员宅基地

文章浏览阅读1.9k次。最近接到一个任务要开发消消乐小游戏,当然首先就想到乐cocosCreator来作为开发工具。开发本身倒没有多少难点。消消乐的开发官网发行的书上有专门讲到。下面主要总结一下开发中遇到的问题以及解决方法屏幕适配由于设计尺寸是750*1336,如果适应高度,则在iphonX下,内容会超出屏幕宽度。按宽适应,iphon4下内容会超出屏幕高度。所以就需要根据屏幕比例来动态设置适配策略。 onLoad..._750*1336

ssm435银行贷款管理系统+vue_vue3重构信贷管理系统-程序员宅基地

文章浏览阅读745次,点赞21次,收藏21次。web项目的框架,通常更简单的数据源。21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存储达到准确、快速、完善,并能提高工作管理效率,促进其发展。论文主要是对银行贷款管理系统进行了介绍,包括研究的现状,还有涉及的开发背景,然后还对系统的设计目标进行了论述,还有系统的需求,以及整个的设计方案,对系统的设计以及实现,也都论述的比较细致,最后对银行贷款管理系统进行了一些具体测试。_vue3重构信贷管理系统

乌龟棋 题解-程序员宅基地

文章浏览阅读774次。题目描述原题目戳这里小明过生日的时候,爸爸送给他一副乌龟棋当作礼物。乌龟棋的棋盘是一行 NNN 个格子,每个格子上一个分数(非负整数)。棋盘第 111 格是唯一的起点,第 NNN 格是终点,游戏要求玩家控制一个乌龟棋子从起点出发走到终点。乌龟棋中 MMM 张爬行卡片,分成 444 种不同的类型( MMM 张卡片中不一定包含所有 444 种类型的卡片,见样例),每种类型的卡片上分别标有 1,2,3,41, 2, 3, 41,2,3,4 四个数字之一,表示使用这种卡片后,乌龟棋子将向前爬行相应的格子数

随便推点

python内存泄露的原因_Python服务端内存泄露的处理过程-程序员宅基地

文章浏览阅读1.5k次。吐槽内存泄露 ? 内存暴涨 ? OOM ?首先提一下我自己曾经历过多次内存泄露,到底有几次? 我自己心里悲伤的回想了下,造成线上影响的内存泄露事件有将近5次了,没上线就查出内存暴涨次数可能更多。这次不是最惨,相信也不会是最后的内存的泄露。有人说,内存泄露对于程序员来说,是个好事,也是个坏事。 怎么说? 好事在于,技术又有所长进,经验有所心得…. 毕竟不是所有程序员都写过OOM的服务…. 坏事..._python内存泄露

Sensor (draft)_draft sensor-程序员宅基地

文章浏览阅读747次。1.sensor typeTYPE_ACCELEROMETER=1 TYPE_MAGNETIC_FIELD=2 (what's value mean at x and z axis)TYPE_ORIENTATION=3TYPE_GYROSCOPE=4 TYPE_LIGHT=5(in )TYPE_PRESSURE=6TYPE_TEMPERATURE=7TYPE_PRO_draft sensor

【刘庆源码共享】稀疏线性系统求解算法MGMRES(m) 之 矩阵类定义三(C++)_gmres不构造矩阵-程序员宅基地

文章浏览阅读581次。/* * Copyright (c) 2009 湖南师范大学数计院 一心飞翔项目组 * All Right Reserved * * 文件名:matrix.cpp 定义Point、Node、Matrix类的各个方法 * 摘 要:定义矩阵类,包括矩阵的相关信息和方法 * * 作 者:刘 庆 * 修改日期:2009年7月19日21:15:12 **/

三分钟带你看完HTML5增强的【iframe元素】_iframe allow-top-navigation-程序员宅基地

文章浏览阅读1.7w次,点赞6次,收藏20次。HTML不再推荐页面中使用框架集,因此HTML5删除了<frameset>、<frame>和<noframes>这三个元素。不过HTML5还保留了<iframe>元素,该元素可以在普通的HTML页面中使用,生成一个行内框架,可以直接放在HTML页面的任意位置。除了指定id、class和style之外,还可以指定如下属性:src 指定一个UR..._iframe allow-top-navigation

Java之 Spring Cloud 微服务的链路追踪 Sleuth 和 Zipkin(第三个阶段)【三】【SpringBoot项目实现商品服务器端是调用】-程序员宅基地

文章浏览阅读785次,点赞29次,收藏12次。Zipkin 是 Twitter 的一个开源项目,它基于 Google Dapper 实现,它致力于收集服务的定时数据,以解决微服务架构中的延迟问题,包括数据的收集、存储、查找和展现。我们可以使用它来收集各个服务器上请求链路的跟踪数据,并通过它提供的 REST API 接口来辅助我们查询跟踪数据以实现对分布式系统的监控程序,从而及时地发现系统中出现的延迟升高问题并找出系统性能瓶颈的根源。除了面向开发的 API 接口之外,它也提供了方便的 UI 组件来帮助我们直观的搜索跟踪信息和分析请求链路明细,

烁博科技|浅谈视频安全监控行业发展_2018年8月由于某知名视频监控厂商多款摄像机存在安全漏洞-程序员宅基地

文章浏览阅读358次。“随着天网工程的建设,中国已经建成世界上规模最大的视频监控网,摄像头总 数超过2000万个,成为世界上最安全的国家。视频图像及配套数据已经应用在反恐维稳、治安防控、侦查破案、交通行政管理、服务民生等各行业各领域。烁博科技视频安全核心能力:精准智能数据采集能力:在建设之初即以应用需求为导向,开展点位选择、设备选型等布建工作,实现前端采集设备的精细化部署。随需而动的AI数据挖掘能力:让AI所需要的算力、算法、数据、服务都在应用需求的牵引下实现合理的调度,实现解析能力的最大化。完善的数据治理能力:面_2018年8月由于某知名视频监控厂商多款摄像机存在安全漏洞