Utreexo:优化Bitcoin UTXO集合的基于哈希的动态累加器

1. 引言

前序博客:

  • Utreexo:比特币UTXO merkle tree proof以节约节点存储空间

MIT Digital Currency Initiative 的 Thaddeus Dryja 2019年论文 Utreexo: A dynamic hash-based accumulator optimized for the Bitcoin UTXO set。
开源代码实现见:

  • https://github.com/mit-dci/rustreexo(Rust)

比特币最早出现且最持久的问题之一是可扩展性。Bticoin的字面意思是“be your own bank成为你自己的银行”,比特币网络上的每台计算机都存储着系统中拥有资金的每个用户的每个帐户。在比特币中,它被存储为“Unspent transaction outputs未花费的交易输出”或“UTXO”的集合,这有点不直观,但与传统金融中使用的基于“帐户”的替代模型相比,提供了隐私和效率优势。
区分交易历史记录和系统当前状态非常重要。比特币的交易历史记录目前为 200GB,包含自 2009 年初比特币推出以来的每笔交易。该历史记录的大小当然只会随着时间的推移而增加。然而,当前的系统状态要小得多,不到 4GB,并且只处理当前谁拥有什么。随着时间的推移,该状态规模总体上有所增加,但今年实际上有所减少。

尽管历史记录的规模要大得多,但实际上并不是可扩展性问题,因为它不以任何time-critical的方式使用;人们可以在处理后丢弃历史记录,而不会损失安全性。然而,不断增加的状态规模是一个令人担忧的问题——utreexo 解决了这个问题。

Utreexo 是一种新颖的基于哈希的动态累加器,它允许数百万个UTXO以千字节以下的形式表示——小到可以写在一张纸上。不存在可信设置或安全损失;相反,跟踪资金的负担转移到了这些资金的所有者身上。

目前,交易指定了输入和输出,验证输入需要了解系统的整个状态。通过 Utreexo,资金持有者可以维护资金存在的证明,并在花费时间时向其他节点提供该证明。这些证明很紧凑(低于 1KB),但确实代表了 utreexo 模型的主要缺点,它们提供了额外的数据传输开销,从而允许更小的状态。

Utreexo 将维护网络的成本推到了正确的位置:创建数百万笔交易的交易所可能需要维护数百万个proofs,而只有少量未花费输出的个人账户只需要维护几千字节的证明数据。Utreexo 还提供了长期的可扩展性解决方案,因为累加器大小随着底层集合大小的增加而增长非常缓慢(累加器大小与集合大小成对数)。

在比特币共识网络中,所有节点就未花费的交易输出集(“UTXO”集)达成一致。这种共享状态的大小是网络的可扩展性约束,因为随着更多用户加入系统,集合的大小会扩展,从而增加所有节点的资源需求。将网络的状态大小与单个机器的存储要求分离将减少验证节点的硬件要求。Utreexo引入了一个基于哈希的累加器来本地表示 UTXO 集,该集的大小是对数的。节点将包含证明附加并传播到交易的输入,该包含证明与累加器状态一起提供验证交易所需的所有信息。虽然包含证明的大小会导致网络流量增加,但这些证明可以在验证后被丢弃,并且聚合方法可以将其大小减少到可管理的开销水平。对截至 2019 年初的比特币区块链下载进行的模拟中,分配了 500MB RAM 用于缓存,proofs仅比其他下载量增加了约 25%。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

参考资料

[1] Utreexo: A dynamic hash-based accumulator optimized for the Bitcoin UTXO set
[2] utreexo: a dynamic accumulator for bitcoin state

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

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

相关文章

Kafka 记录

推荐资源 官网http://kafka.apache.org/Githubhttps://github.com/apache/kafka书籍《深入理解Kafka 核心设计与实践原理》 Kafka 架构 Kafka使用ZooKeeper作为其分布式协调框架,其动态扩容是通过ZooKeeper来实现的。Kafka使用Zookeeper保存broker的元数据和消费者信…

使用流服务器m7s对接gb28181

优:sip品牌兼容性比较好,大华,海康都稳定可以,srs的5.0 sip品牌兼容性大华没反应,akstream-sip 大华也有问题,wvp也还可以 缺:目前最新的4.7.4版本,,sip协议用udp正常&a…

年底特殊时期外贸装柜多花点心思

如果可以,尽量不要在工厂快要放假的时候安排装柜了,一个是人手不够,一个是容易漏货,还有就是柜子不好定。 看到有人说自己客户收到货的时候比预期晚了两个星期,一直延误,已经比原来要计划开业的时间推迟&a…

mini-spring 实现应用上下文,自动识别、资源加载、扩展机制

我们不能让面向 Spring 本身开发的 DefaultListableBeanFactory 服务,直接给予用户使用 DefaultListableBeanFactory、XmlBeanDefinitionReader,是我们在目前 Spring 框架中对于服务功能测试的使用方式,它能很好的体现出 Spring 是如何对 xm…

Cocos creator 动作系统

动作系统简介 是用于控制物体运动的一套系统,完全依赖代码进行实现,动态调节节点的移动。 移动 cc.moveTo 移动到某个坐标(x,y) //1秒时间内,移动到0,0let action1 cc.moveTo(1,0,0)this.node.runAction(action1)c…

Walrus 实用教程|Walrus + Gitlab,打通CI/CD 自动化交付!

Walrus file 是 Walrus 0.5 版本推出的新功能,用户可以通过一个非常简洁的 YAML 描述应用或基础设施资源的部署配置,然后通过 Walrus CLI 执行 walrus apply或在 Walrus UI 上进行import,将 Walrus file 提交给 Walrus server,由 …

Qt简易的五子棋

五子棋是个简单的小游戏,尝试使用Qt将他做出来,学习时的练习demo。 成果展示 需求分析 五子棋:在棋盘上,黑棋先行,交替下棋,五子练成直线获取胜利。 实现过程 1.棋盘绘制:下棋的第一步肯定是绘制…

7000字详解Spring Boot项目集成RabbitMQ实战以及坑点分析

本文给大家介绍一下在 Spring Boot 项目中如何集成消息队列 RabbitMQ,包含对 RibbitMQ 的架构介绍、应用场景、坑点解析以及代码实战。 我将使用 waynboot-mall 项目作为代码讲解,项目地址:https://github.com/wayn111/waynboot-mall。本文大…

无需 Root 卸载手机预装软件,精简过的老年机又行了

基础准备 准备目标手机、USB 数据线、以及一台电脑。手机 USB 连接电脑,开发者选项中打开 USB 调试。(开发者选项默认隐藏,需要在关于手机中多次点击版本号才能调出)。 安装手机驱动,下载安装 ADB 工具包。 开始操作…

世界坐标系转换为平面地图坐标

将世界坐标系转换为平面地图坐标的方法通常涉及地图投影。地图投影是一种将地球(一个三维球体)上的点转换为平面(二维)地图上的点的方法。 这里介绍几种常见的地图投影方法: 墨卡托投影(Mercator Projection): 这是最常见的投影方式之一,尤其用于航海地图。它将经纬度…

3D数据转换器HOOPS Exchange如何获取模型的几何数据? 干货预警!

一、概述 前面讲解过模型在内存中的结构,现在回顾一下,当模型导入成功后,整个模型数据会以原生结构的 PRC 组装树形式存放到内存中。(申请 HOOPS Exchange 试用) PRC结构的主要类型包含四种,分别是…

Pipwork相关测试过程

pipework可以减轻docker实施过程中的工作量,在网上也找了几篇类似的文章,按照相应配置,结果并不相同 如下测试过程记录下: docker run -it --rm --name c1 busybox docker run -it --rm --name c2 busyboxpipework br1 c1 192…

数据结构:大顶堆、小顶堆

堆是其中一种非常重要且实用的数据结构。堆可以用于实现优先队列,进行堆排序,以及解决各种与查找和排序相关的问题。本文将深入探讨两种常见的堆结构:大顶堆和小顶堆,并通过 C 语言展示如何实现和使用它们。 一、定义 堆是一种完…

【代码随想录-链表】两两交换链表中的节点

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

虹科方案|释放总线潜力:汽车总线离线模拟解决方案

导读:传统的ECU模拟工具通常需要依赖上位机软件来发起通信,这在离线场景和自动化产线中带来不便。为了应对这一挑战,虹科推出了创新的汽车总线离线模拟解决方案,基于PCAN-Router系列网关,通过内部可编程固件&#xff0…

Ubuntu 22.04 中文乱码解决方案

sudo apkg-reconfigure locales 按空格键选中

TypeScript(七) 函数

1. TypeScript 函数 1.1. 函数的定义 函数就是包裹在花括号中的代码块,前面使用关键字function。 语法: // An highlighted block function function_name() {// 执行代码 }实例: function test() { // 函数定义console.log("我就是…

【leetcode题解C++】257.二叉树的所有路径 and 404.左叶子之和 and 112.路径总和

257. 二叉树的所有路径 给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。 叶子节点 是指没有子节点的节点。 示例 1: 输入:root [1,2,3,null,5] 输出:["1->2->5",&…

给准备从事软件开发工作的年轻人的13个建议

从事软件开发是一个不断学习和适应变化的过程。这里有一些针对刚入行或准备从事软件开发工作的年轻人的建议: 掌握基础知识:确保你有扎实的编程基础。了解至少一种编程语言的语法和核心概念,比如C语言、Python、Java或C#。同时,理…