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

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

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

相关文章

Hive(15)中使用sum() over()实现累积求和和滑动求和

目的: 三个常用的排序函数row_number(),rank()和dense_rank()。这三个函数需要配合开窗函数over()来实现排序功能。但over()的用法远不止于此,本文咱们来介绍如何实现累计求和和滑动求和。 1、数据介绍 三列数据,分别是员工的姓名、月份和…

React16源码: React中处理LegacyContext相关的源码实现

LegacyContext 老的 contextAPI 也就是我们使用 childContextTypes 这种声明方式来从父节点为它的子树提供 context 内容的这么一种方式遗留的contextAPI 在 react 17 被彻底移除了,就无法使用了那么为什么要彻底移除这个contextAPI的使用方式呢?因为它…

leetcode 27.移除元素(python版)

需求 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度…

河南郑州:“车辆医生”——检修列车 护航春运

(通讯员:刘雨 李子豪)1月26日,铁路系统的“春运大考”缓缓拉开帷幕。在中国铁路郑州局集团有限公司郑州车辆段郑州客整所内,一列列精检细修的客车整装待发。繁忙的客整所内,穿着工装、拿着检车锤的客车检车…

亚马逊、速卖通、虾皮等平台测评自养号,虚拟信用卡的使用

在上一篇文章中,我提到了一个完善的自养号测评系统需要具备的几个要求。在这篇文章中,我将重点探讨支付方式虚拟信用卡的问题,以及如何避免信用卡关联。 首先,需要了解信用卡关联风控机制的存在意义。在跨境电商亚马逊平台上&…

2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷9

某企业根据自身业务需求,实施数字化转型,规划和建设数字化平台,平台聚焦“DevOps开发运维一体化”和“数据驱动产品开发”,拟采用开源OpenStack搭建企业内部私有云平台,开源Kubernetes搭建云原生服务平台,选…

长度最小的子数组[中等]

一、题目 给定一个含有n个正整数的数组和一个正整数target。找出该数组中满足其总和大于等于target的长度最小的连续子数组[numsl, numsl1, ..., numsr-1, numsr],并返回其长度。如果不存在符合条件的子数组,返回0。 示例 1: 输入&#xff…

C 练习实例51-学习使用按位与

按位与、或、异或 1.按位与 & 0&00 0&10 1&00 1&11 2.按位或 | 0|00 0|11 1|01 1|11 3.按位异或 ^ 0^00 0^11 1^01 1^10 (只要学过离散数学懂的都懂) (都是双目运…

Qt QScrollArea 不显示滚动条 不滚动

使用QScrollArea时,发现添加的控件超出QScrollArea 并没有显示,且没有滚动条效果 原因是 scrollArea指的是scrollArea控件本身的大小,肉眼能看到的外形尺寸。 scrollAreaWidgetContents指的是scrollArea控件内部的显示区域,里面可…

如何优雅的完成权限认证?-- 瞎扯文

文章目录 前言常规解决方案Linux系统文件的权限编码压缩Python版本Java版本总结前言 以前挺喜欢计算机的,出来工作后发现,现在更喜欢了嘿嘿~当然也是沉寂了一个月之久。终于又来冒泡了,实属不易啊。消失了这么久的时间,干嘛去了呢?很简单实习去了,当然不是某互联网公司哈…

05 SB3之Spring Initializr+运行方式+自动配置原理(TBD)

1. 使用IDEA内置Spring Initializr 生成SB项目 最上方Server URL可以选择借助哪个平台生成, 可选阿里云 作为对比 , 官方可选版本最旧为3.1.18 ; 阿里云可选最新版本为3.0.2 本次选择3.1.8版本, 并且添加Spring Web依赖(包括RESTful / Spring MVC/)和Lombok依赖 生成后端项目…

Android Studio项目——TCP客户端

目录 一、TCP客户端UI 1、UI展示 2、xml代码 二、TCP客户端数据发送 三、TCP客户端数据接收 一、TCP客户端UI 1、UI展示 2、xml代码 <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.…