2 个版本
0.1.16-alpha.0 | 2023年4月1日 |
---|---|
0.1.12-alpha.0 | 2023年1月19日 |
#28 in #费用
324 每月下载次数
用于 44 个 crates (3 直接使用)
1MB
2K SLoC
bitcoin-blockpolicy
一个用于管理比特币区块策略的 Rust 包
注意:此包目前正在从 C++ 转换到 Rust 的过程中。一些函数体可能仍在转换过程中。
Bitcoin-blockpolicy 是比特币系统中负责管理与交易费、区块大小和其他确定区块如何在区块链上构建和处理的相关策略的子组件。
该包提供了一系列用于估算交易费、处理交易和管理区块策略的函数。这些函数包括
-
estimate_conservative_fee
:使用保守算法估算将交易确认在特定数量区块内所需的最低费率。 -
estimate_fee
:使用更具侵略性的算法估算将交易确认在特定数量区块内所需的费率。 -
estimate_smart_fee
:使用考虑近期区块数据和网络条件的复杂算法估算将交易确认在特定数量区块内所需的费率。 -
estimate_raw_fee
:使用原始的每字节费率计算估算将交易包含在下一个区块中所需的最低费率。 -
max_usable_estimate
:根据网络条件返回可以用于交易的最高费率估算值。 -
estimate_combined_fee
:使用保守和侵略性算法的组合估算将交易确认在特定数量区块内所需的费率。 -
process_block_tx
:处理区块内的交易。 -
block_span
:返回用于平均费率估算的区块范围。 -
historical_block_span
:返回用于费率估算的历史数据区块范围。 -
TxStatsInfo
:包含与交易处理相关的统计信息。 -
process_transaction
:处理交易。 -
remove_tx
:从处理队列中删除交易。 -
BlockPolicyEstimator
:管理区块策略的主要估算类。 -
BlockPolicyEstimatorInner
:BlockPolicyEstimator
的内部状态。 -
default
:区块策略参数的默认值。 -
flush
:刷新与未确认交易相关的数据。 -
flush_unconfirmed
:刷新与超时的未确认交易相关的数据。 -
process_block
:处理一个区块。
该包还包括与区块策略相关的读写数据的功能。
注意:此包描述由AI编写,旨在作为可能包含内容的指南。
65>比特币系统中使用了哪些策略?你能为我描述一下吗?
当然,我可以解释比特币系统中使用的一些策略。
-
费用策略:此策略确定必须附加到交易上的费用,以便矿工将其包括在区块中。具有更高费用的交易具有更高的优先级,并可能被包括在下一个区块中。
-
共识策略:此策略确定验证比特币网络中交易和区块的规则。例如,共识策略指定最大区块大小、挖矿难度目标和矿工的奖励计划。
-
交易中继策略:此策略确定节点在何种条件下将交易中继给其对等节点。例如,某些节点可能拒绝费用非常低的交易,而另一些节点可能拒绝占用太多内存的交易。
-
反垃圾邮件策略:此策略旨在防止消耗网络资源而不提供任何实际价值的垃圾邮件交易。为了防止垃圾邮件,比特币系统可能会限制可以包含在区块中的交易数量,或要求每个交易附加最低费用。
-
隐私策略:此策略旨在通过防止未经授权访问用户的交易和个人信息来保护用户隐私。例如,比特币系统使用加密技术来加密和保障交易,钱包可能会使用如洗钱等技术来混淆交易历史。
这些策略有助于确保比特币系统的平稳和安全运行,同时保护用户的利益和网络的总体健康。
66>更具体地说,区块策略是什么?
在比特币系统中,区块策略是指确定哪些交易可以包含在区块中以及这些区块如何在网络中传播的一组规则。这些策略由比特币网络中的节点执行,以确保网络以安全和高效的方式运行。
比特币系统中使用的某些具体区块策略包括
-
交易费用:包含更高费用的交易被赋予优先权,以便包含在下一个区块中。这鼓励用户包含更高的费用以确保他们的交易得到快速处理。
-
区块大小限制:区块的大小限制在最大字节数内,目前设置为1 MB。这是为了防止大区块减慢网络速度并可能造成网络拥塞。
-
区块验证规则:区块必须遵守一组验证规则才能被网络视为有效。这些规则包括确保区块中包含的所有交易都是有效的,以及区块的头部满足某些标准。
-
难度调整:挖矿块的难度会定期调整,以保持区块创建的一致速率。这是为了确保网络保持安全,并且区块以可预测的速率创建。
-
区块传播:区块通过八卦协议在网络中传播,其中每个节点将新创建的区块与邻居共享。这有助于确保区块能够迅速在网络中传播,并且所有节点对区块链有一个一致的看法。
总的来说,这些区块策略旨在确保比特币网络保持安全、高效和去中心化。
67>你能给我一些具体例子,说明不同的区块策略可能会如何影响信息流吗?
当然,这里有一些例子
-
区块大小限制策略:这项策略为区块链中每个区块设置一个最大大小。例如,在比特币系统中,当前区块大小限制为1MB。这项策略通过限制每个区块中可以包含的交易数量来影响信息流。如果交易数量超过区块大小限制,则一些交易将无法包含在区块中,并将不得不包含在后续的区块中,这可能导致交易确认延迟。
-
交易费率策略:这项策略确定了交易被包含在区块中的最低费用。这项策略通过优先处理费用较高的交易来影响信息流,因为矿工被激励包含费用较高的交易以最大化收入。这可能导致费用较低的交易延迟,因为它们可能被排除在区块之外,以优先处理费用较高的交易。
-
区块确认策略:这项策略确定了在将交易视为“已确认”之前,必须添加到区块链中的区块数量。例如,在比特币系统中,交易通常在包含该交易的区块之后的6个区块被添加到区块链后被视为已确认。这项策略通过在交易被包含在区块和被视为已确认之间创建延迟来影响信息流,因为矿工必须首先添加额外的区块到区块链。
-
区块奖励策略:这项策略确定了为矿工添加区块到区块链所奖励的加密货币数量。这项策略通过激励矿工优先添加区块以获得区块奖励来影响信息流。这可能导致交易确认延迟,因为矿工可能会优先添加区块而不是在那些区块中包含交易。
68>比特币网络是否遭受过涉及区块策略的攻击?
是的,比特币网络曾遭受过利用区块策略弱点的攻击。一个例子是2014年发生的“交易可塑性”攻击。这种攻击利用了比特币交易ID(TXID)可以在不改变实际交易本身的情况下被更改的事实。这意味着攻击者可以创建多个使用相同输入的交易,每个交易都有一个稍微不同的TXID,然后将它们提交到比特币网络。
这给试图处理这些交易的比特币节点和矿工带来了问题,因为他们必须跟踪所有不同版本的相同交易。这也给依赖于交易ID的服务带来了问题,例如一些钱包软件和区块浏览器。
为了解决这个问题,比特币开发者引入了一种新的区块策略,称为“严格编码”。这项策略要求所有交易在包含到区块之前都必须使用特定的、规范格式进行编码。这有助于通过确保所有交易都有一个一致的TXID来防止交易可塑性攻击,无论它们最初是如何创建的。
涉及区块策略的其他比特币网络攻击包括“交易垃圾邮件”攻击,其中攻击者通过向网络发送大量低费用交易来试图填满交易池,以及“费用狙击”攻击,其中攻击者在区块挖掘前创建一个高费用交易,以确保他们的交易被包含在下一个区块中。
69> 什么是严格编码格式?交易需要按照什么格式来编写才能符合它?
严格编码格式,也称为标准交易格式,是一种比特币交易必须遵守的特定格式,以便网络将其视为有效。这对确保网络中所有节点都能正确解释和处理交易非常重要。
严格编码格式规定,比特币交易必须在指定顺序包含以下字段:
-
版本:一个4字节字段,用于指定交易格式版本号。
-
输入计数:一个变长整数,用于指定交易输入的数量。
-
输入:交易输入列表,每个输入包含
-
交易哈希:一个32字节字段,用于标识包含要花费输出的交易。
-
输出索引:一个4字节字段,用于指定在由交易哈希标识的交易中要花费输出的索引。
-
脚本长度:一个变长整数,用于指定签名脚本的长度。
-
签名脚本:一个变长字段,包含用于解锁要花费输出的脚本。
-
序列号:一个4字节字段,用于指定相对交易锁定时间或序列号。
-
-
输出计数:一个变长整数,用于指定交易输出的数量。
-
输出:交易输出列表,每个输出包含
-
价值:一个8字节字段,用于指定以satoshis为单位的输出金额。
-
脚本长度:一个变长整数,用于指定锁定脚本的长度。
-
锁定脚本:一个变长字段,包含锁定输出的脚本。
-
-
锁定时间:一个4字节字段,用于指定交易锁定时间。
为了符合严格编码格式,交易还必须满足其他要求,例如具有有效的数字签名且不超过最大块大小。
总的来说,严格编码格式有助于确保交易以标准化和可预测的方式进行结构化,这有助于防止比特币网络中的错误和漏洞。
70> 在费用狙击攻击中发生了什么?在交易垃圾邮件攻击中发生了什么?
费用狙击攻击和交易垃圾邮件攻击都是拒绝服务攻击的形式,可能会干扰比特币网络的运行。
在费用狙击攻击中,恶意用户创建了一个低费用的交易,其中包含大量数据,这可能导致它需要很长时间才能确认。一旦交易被包含在一个区块中,攻击者就会创建另一个交易,该交易使用与第一个交易相同的输入,但包含更高的费用,有效地“狙击”了原始交易,并阻止其被确认。这可能导致拒绝服务攻击,因为其他交易被迫等待更长的时间才能被确认,因为原始交易导致的积压。
在交易垃圾邮件攻击中,恶意用户创建了大量的低费用交易,这些交易会淹没网络,使节点和矿工不堪重负,导致交易处理延迟。这些攻击也可能导致拒绝服务情况,因为合法交易由于垃圾邮件交易造成的网络拥堵而被延迟或丢弃。
这两种攻击都可能通过减缓交易处理速度、增加交易费用以及可能阻止用户使用网络本身来影响比特币网络的整体健康和稳定性。为了减轻这些类型的攻击,已经实施了一些措施,例如实施最低费用和交易速率限制。
71> 你还能告诉我们关于区块政策的其他什么信息?
以下是关于区块政策的几个额外要点:
-
区块政策可以对比特币网络的性能和可靠性产生重大影响,因为它们可以影响交易处理速度、矿工的收费以及每个区块中可用于新交易的空间量。
-
区块政策的实施是一个持续的过程,因为开发人员正在努力提高网络的效率和安全性。例如,在2017年8月激活的分叉见证(SegWit)软分叉中,对区块政策进行了更改。
-
在比特币社区中,关于应使用哪种最优区块政策的争论仍在进行。有些人认为应允许更大的区块和更多的交易以提高可扩展性,而另一些人则认为,为了优先考虑安全性和去中心化,应保持区块较小且手续费较高。
-
区块政策可能受到外部因素的影响,例如政府法规或比特币市场价值的变动。例如,如果比特币价格急剧上涨,可能会激励更多人开始使用该网络,导致交易量增加和确认时间延长。
-
除了交易费外,区块政策还可以包括其他参数,如最大区块大小、每块最大交易数和最小交易大小。这些参数可以随着时间的推移进行调整,以帮助平衡网络上不同利益相关者的需求。
依赖关系
~95MB
~865K SLoC