”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 使用 Utreexo 改进比特币网络

使用 Utreexo 改进比特币网络

发布于2024-07-31
浏览:342

Improving the Bitcoin network using Utreexo

世界日益数字化,我们生活的越来越多方面变得越来越无形。货币并没有被排除在外,从实物现金到无现金系统,再到现在的加密货币。自 2009 年第一个比特币区块诞生以来,它的采用率增长得如此之快,随着采用率的提高,网络的稳定性和信任度也随之提高,这只会增加它的采用率。

首先,什么是比特币,比特币是如何运作的?

比特币是一种去中心化的点对点网络数字货币,由一个名为中本聪的伪匿名实体于 2008 年创建。比特币网络是由计算机组成的网络,也称为彼此互连的节点,有助于在整个网络中传播交易并验证交易。该网络使用数字货币比特币(BTC)。这些交易存储在使用区块链技术的去中心化公共分类账上。
比特币区块链由链接到每个前面的块的块组成,除了第一个块也称为创世块,它不连接到任何前面的块。区块由多笔交易组成,这些交易在执行挖掘过程之前已由矿工验证并仔细添加到区块中。交易基本上是比特币钱包之间的价值转移。矿工负责在网络上执行主要工作,确认或“挖掘”新区块并将其添加到区块链中。
有多种在线资源可以帮助您了解比特币。这些资源提供了有关比特币功能的更多详细信息。
尽管比特币有很多优点,但可扩展性始终是一个主要问题。比特币区块的大小限制为 1MB,大约每 10 分钟开采一个区块。截至撰写本文时,比特币区块链的当前大小约为 580 GB,比去年增长了约 18%。为了让全节点加入区块链并验证网络,他们需要下载整个区块链并开始对所有旧块和新添加的块执行验证。这个规模肯定会每天持续增长,在某个时候,可能会变得太大,以至于由于资源限制而阻止一些普通用户加入网络。
除了区块链的大小之外,节点还验证并存储网络的当前状态。这种状态是当前未花费的交易输出集(UTXO),其大小相对整个区块链要小得多,但是,随着越来越多的用户在网络上执行更多交易,这种状态也保证会保持快速增长。该集合是网络中所有未花费交易输出的集合。

那么 Utreexo 是什么?

Utreexo 引入了基于哈希的动态累加器,它可以显着减小当前状态的大小。它允许节点在不知道系统的整个状态的情况下完全验证交易的输入。它通过让资金所有者保留资金确实存在的证据来实现这一点,然后当他们要花费资金时提供这些资金。
Utreexo 引入了一种称为紧凑状态节点的新型节点。这些节点仅存储状态的累加器表示。为了让这些节点验证交易,它们需要包含证明。当他们即将花费一些输入时,支出交易会提供此证明。

Utreexo 如何改进比特币网络?

如上所示,Utreexo 允许将比特币网络的状态表示为动态累加器,这些累加器的大小只有几千字节,而比特币当前的状态则超过 5GB。
要了解 Utreexo 的工作原理,我们必须首先了解什么是加密累加器以及它是如何工作的。加密累加器允许我们查询一个集合,而无需存储或泄露该集合的所有成员。这种累加器构建方法非常适合比特币 UXTO 集,因为对于每笔交易,我们都想查询所花费的 TXO 是否确实是 UTXO 集的成员,如果不是,则拒绝该交易。
普通节点在加入网络时必须下载超过 580GB 的整个区块链历史记录并验证交易并构建自己的 UTXO 集副本。然后,他们必须验证影响节点的所有状态更改。所有这些过程都是资源密集型操作,从而限制了网络参与者的数量,从而限制了可扩展性。
此初始同步过程(也称为初始块下载 (IBD))可能需要很长时间,具体取决于互联网连接和硬件资源。影响该IBD操作速度的主要因素之一是所使用的存储磁盘的类型和I/O操作的速度,特别是快速执行随机存取读取的能力。这就是为什么使用固态驱动器的计算机(通常具有更优越的随机访问读取时间)与使用硬盘驱动器的计算机相比,验证交易的时间要少 30 倍以上。
使用 Utreexo,所使用的磁盘类型不会产生如此大的差异,因为我们将看到 SSD 计算机和 HDD 计算机之间只有细微的性能差异
Utreexo 引入了基于哈希的动态累加器,没有可信设置或管理器要求。如上所述,累加器是集合的紧凑表示,可以向其中添加和证明元素。 Utreexo 累加器使用完美的 Merkle 树森林,可以有效地从累加器中删除元素,从而减少发生删除时森林中叶子的总数。
添加可以在没有累加器和要添加的元素之外的任何数据的情况下计算,并且删除可以通过要删除的数据的包含证明来计算。
累加器的设计是完美二叉哈希树的森林。累加器必须存储的表示形式包括:存储的元素数量,以及森林中每棵树的根。
完美二叉树的逻辑结构超出了本文的范围,因为这只是一篇介绍性文章。不过,完整的 Utreexo 论文可以在这里找到。

结论

基于 Utreexo 哈希的累加器旨在将比特币状态的大小减少到仅仅几千字节,允许几乎任何设备加入比特币网络并开始验证交易,而无需昂贵的顶级硬件。这将大大提高比特币网络的可扩展性,因为累加器的大小增长非常缓慢(Onlogn)空间复杂度。

版本声明 本文转载于:https://dev.to/alainjr10/improving-the-bitcoin-network-using-utreexo-1dcb?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 人脸检测失败原因及解决方案:Error -215
    人脸检测失败原因及解决方案:Error -215
    错误处理:解决“ error:( - 215)!empty()in Function openCv in Function MultSiscale中的“检测”中的错误:在功能检测中。”当Face Cascade分类器(即面部检测至关重要的组件)未正确加载时,通常会出现此错误。要解决此问题,必须...
    编程 发布于2025-04-18
  • PHP SimpleXML解析带命名空间冒号的XML方法
    PHP SimpleXML解析带命名空间冒号的XML方法
    在php 很少,请使用该限制很大,很少有很高。例如:这种技术可确保可以通过遍历XML树和使用儿童()方法()方法的XML树和切换名称空间来访问名称空间内的元素。
    编程 发布于2025-04-18
  • 在Python中如何创建动态变量?
    在Python中如何创建动态变量?
    在Python 中,动态创建变量的功能可以是一种强大的工具,尤其是在使用复杂的数据结构或算法时,Dynamic Variable Creation的动态变量创建。 Python提供了几种创造性的方法来实现这一目标。利用dictionaries 一种有效的方法是利用字典。字典允许您动态创建密钥并分...
    编程 发布于2025-04-18
  • 如何限制动态大小的父元素中元素的滚动范围?
    如何限制动态大小的父元素中元素的滚动范围?
    在交互式接口中实现垂直滚动元素的CSS高度限制问题:考虑一个布局,其中我们具有与用户垂直滚动一起移动的可滚动地图div,同时与固定的固定sidebar保持一致。但是,地图的滚动无限期扩展,超过了视口的高度,阻止用户访问页面页脚。$("#map").css({ marginT...
    编程 发布于2025-04-18
  • 为什么尽管有效代码,为什么在PHP中捕获输入?
    为什么尽管有效代码,为什么在PHP中捕获输入?
    在php ;?>" method="post">The intention is to capture the input from the text box and display it when the submit button is clicked.但是,输出...
    编程 发布于2025-04-18
  • 如何从Google API中检索最新的jQuery库?
    如何从Google API中检索最新的jQuery库?
    从Google APIS 问题中提供的jQuery URL是版本1.2.6。对于检索最新版本,以前有一种使用特定版本编号的替代方法,它是使用以下语法:获取最新版本:未压缩)While these legacy URLs still remain in use, it is recommended ...
    编程 发布于2025-04-18
  • Java字符串非空且非null的有效检查方法
    Java字符串非空且非null的有效检查方法
    检查字符串是否不是null而不是空的 if(str!= null && str.isementy())二手: if(str!= null && str.length()== 0) option 3:trim()。isement(Isement() trim whitespace whitesp...
    编程 发布于2025-04-18
  • PHP阵列键值异常:了解07和08的好奇情况
    PHP阵列键值异常:了解07和08的好奇情况
    PHP数组键值问题,使用07&08 在给定数月的数组中,键值07和08呈现令人困惑的行为时,就会出现一个不寻常的问题。运行print_r($月)返回意外结果:键“ 07”丢失,而键“ 08”分配给了9月的值。此问题源于PHP对领先零的解释。当一个数字带有0(例如07或08)的前缀时,PHP将其...
    编程 发布于2025-04-18
  • 解决MySQL错误1153:数据包超出'max_allowed_packet'限制
    解决MySQL错误1153:数据包超出'max_allowed_packet'限制
    mysql错误1153:故障排除比“ max_allowed_pa​​cket” bytes 更大的数据包,用于面对阴谋mysql错误1153,同时导入数据capase doft a Database dust?让我们深入研究罪魁祸首并探索解决方案以纠正此问题。理解错误此错误表明在导入过程中接...
    编程 发布于2025-04-18
  • 切换到MySQLi后CodeIgniter连接MySQL数据库失败原因
    切换到MySQLi后CodeIgniter连接MySQL数据库失败原因
    Unable to Connect to MySQL Database: Troubleshooting Error MessageWhen attempting to switch from the MySQL driver to the MySQLi driver in CodeIgniter,...
    编程 发布于2025-04-18
  • 如何从PHP中的Unicode字符串中有效地产生对URL友好的sl。
    如何从PHP中的Unicode字符串中有效地产生对URL友好的sl。
    为有效的slug生成首先,该函数用指定的分隔符替换所有非字母或数字字符。此步骤可确保slug遵守URL惯例。随后,它采用ICONV函数将文本简化为us-ascii兼容格式,从而允许更广泛的字符集合兼容性。接下来,该函数使用正则表达式删除了不需要的字符,例如特殊字符和空格。此步骤可确保slug仅包含...
    编程 发布于2025-04-18
  • 为什么使用Firefox后退按钮时JavaScript执行停止?
    为什么使用Firefox后退按钮时JavaScript执行停止?
    导航历史记录问题:JavaScript使用Firefox Back Back 此行为是由浏览器缓存JavaScript资源引起的。要解决此问题并确保在后续页面访问中执行脚本,Firefox用户应设置一个空功能。 警报'); }; alert('inline Alert')...
    编程 发布于2025-04-18
  • 如何在其容器中为DIV创建平滑的左右CSS动画?
    如何在其容器中为DIV创建平滑的左右CSS动画?
    通用CSS动画,用于左右运动 ,我们将探索创建一个通用的CSS动画,以向左和右移动DIV,从而到达其容器的边缘。该动画可以应用于具有绝对定位的任何div,无论其未知长度如何。问题:使用左直接导致瞬时消失 更加流畅的解决方案:混合转换和左 [并实现平稳的,线性的运动,我们介绍了线性的转换。这...
    编程 发布于2025-04-18
  • 您可以使用CSS在Chrome和Firefox中染色控制台输出吗?
    您可以使用CSS在Chrome和Firefox中染色控制台输出吗?
    在javascript console 中显示颜色是可以使用chrome的控制台显示彩色文本,例如红色的redors,for for for for错误消息?回答是的,可以使用CSS将颜色添加到Chrome和Firefox中的控制台显示的消息(版本31或更高版本)中。要实现这一目标,请使用以下模...
    编程 发布于2025-04-18
  • 如何将MySQL数据库添加到Visual Studio 2012中的数据源对话框中?
    如何将MySQL数据库添加到Visual Studio 2012中的数据源对话框中?
    在Visual Studio 2012 尽管已安装了MySQL Connector v.6.5.4,但无法将MySQL数据库添加到实体框架的“ DataSource对话框”中。为了解决这一问题,至关重要的是要了解MySQL连接器v.6.5.5及以后的6.6.x版本将提供MySQL的官方Visual...
    编程 发布于2025-04-18

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3