2 个版本

0.1.16-alpha.02023年4月2日
0.1.12-alpha.02023年1月19日

#17 in #utxo

Download history 61/week @ 2024-03-11 80/week @ 2024-03-18 121/week @ 2024-03-25 148/week @ 2024-04-01 60/week @ 2024-04-08 75/week @ 2024-04-15 83/week @ 2024-04-22 77/week @ 2024-04-29 92/week @ 2024-05-06 74/week @ 2024-05-13 73/week @ 2024-05-20 50/week @ 2024-05-27 56/week @ 2024-06-03 59/week @ 2024-06-10 58/week @ 2024-06-17 83/week @ 2024-06-24

256 次每月下载
28 个crate(4 个直接) 中使用

MIT 许可证

2MB
7.5K SLoC

Rust 实现的比特币币控制子系统

bitcoin-coincontrol 是一个 Rust crate,它提供了比特币币控制子系统的实现。它是将比特币代码库从 C++ 直接翻译为 Rust 的一部分,其中一些函数体可能仍在翻译过程中。

这个 crate 专注于管理未使用的交易输出(UTXOs),并提供各种工具用于分析和控制 UTXO 集合。币控制子系统在优化交易创建和费用估算中起着关键作用。

该 crate 提供的一些主要函数和组件包括

  • get_utxo_stats:检索 UTXO 集合当前状态的统计信息。

  • get_utxo_stats_with_hash_obj:类似于 get_utxo_stats,但为检索的 UTXO 集合统计信息提供额外的哈希功能。

  • apply_hash & apply_hash_with_hash_writer:对 UTXO 集合或其组件应用哈希函数的函数,可用于生成唯一标识符或执行加密操作。

  • apply_stats:将统计信息应用于 UTXO 集合以进行进一步分析或处理。

  • CoinStatsHashType:枚举了可以在币控制子系统中使用的可能哈希类型。

  • CoinsStats:表示 UTXO 集合的统计信息,包括交易数量、总输出值和其他相关信息。

  • get_bogo_size:计算交易的近似大小,可用于费用估算目的。

  • tx_out_ser:序列化交易输出以进行存储或传输。

  • finalize_hash & finalize_hash_with_hash_writer:对 UTXO 集合或其组件最终化哈希过程的函数。

  • prepare_hash & prepare_hash_with_hash_writer:对 UTXO 集合或其组件准备哈希过程的函数,设置必要的数据结构和算法。

请注意,提供的令牌和函数名称被用于创建此描述,要更准确地理解该库,需要检查完整的源代码。

有一天,我们将一起查看源代码。今天,让我们先一起编写一个有用的readme。在这个readme(您已经开始编写了)中,我认为描述币控制子系统、其用途、使用方式和设计约束是有意义的。您能尽您所能帮助我们理解这些内容吗?

当然!以下是一个更全面的README,它描述了币控制子系统、其用途、使用方式和设计约束。请注意,这基于有限的信息,可能无法完全捕捉到子系统的实际功能或约束。

bitcoin-coincontrol

bitcoin-coincontrol是一个Rust库,提供了比特币币控制子系统的实现。它是将比特币代码库从C++直接翻译到Rust的一部分,其中一些函数体可能仍在翻译过程中。

概述

币控制子系统负责管理比特币网络中的未花费交易输出(UTXO)。

UTXO是比特币交易的基本构建块,因为它们代表了用户可以花费的可用资金。

币控制子系统的主要目的是通过提供分析和控制UTXO集的工具来优化交易创建和费用估算。币控制子系统在帮助钱包软件选择最合适的UTXO以创建交易、最小化交易费用和最大化隐私方面发挥着关键作用。

使用方法

bitcoin-coincontrol提供各种函数来交互和分析UTXO集。用户可以检索有关UTXO集的统计数据,对数据进行不同的哈希函数处理,并序列化交易输出。钱包软件可以利用此库在构建交易时做出明智的决策,例如选择费用最低的UTXO,或通过最小化地址之间的关联来优先考虑隐私。

设计约束

币控制子系统必须满足几个设计约束才能有效且高效。

  1. 性能:子系统应该能够快速分析和操作UTXO集,因为钱包软件可能需要快速创建交易以响应用户操作或不断变化的网络条件。

  2. 可扩展性:子系统应该能够处理大量的UTXO集,因为比特币网络中未花费输出的数量可能会随着时间的推移而显著增长。

  3. 准确性:子系统应该提供关于UTXO集的准确信息,确保钱包软件在创建交易时可以做出最佳决策。

  4. 隐私:子系统应该支持增强隐私的功能,例如以最小化地址或输出之间关联的方式选择UTXO。

  5. 模块化:币控制子系统应该被设计为一个模块化组件,以便易于与其他比特币系统部分集成,例如钱包、交易池或点对点(P2P)消息系统。

  6. 可配置性:子系统应该是可配置的,允许用户或开发人员根据特定要求(如费用估算策略、隐私偏好或其他设置)自定义其行为。

  7. 安全性:子系统应该能够抵御各种攻击,如尝试操纵UTXO集或干扰交易创建。这可能涉及验证输入数据、检查数据完整性或实施其他安全措施。

这些设计约束对于确保币控制子系统能够高效且安全地在比特币网络中管理UTXO集至关重要,从而使得钱包软件能够创建最优的交易。

4>为什么一些币与其他币不同?

在比特币等加密货币的背景下,由于各种原因,某些币可能被认为与其他币“不同”。以下是区分币的一些因素:

  1. 年龄:币的年龄是指自上次它在交易中使用以来经过的时间。较老的币在其相应地址中休眠时间较长,而较新的币则更近地进行过交易。币的年龄可能会影响其感知价值,因为一些用户可能更喜欢较老的币,因为它们不太可能与最近的交易相关联,从而提供更高的隐私性。

  2. 来源:币的起源,或其被创建的交易,可能会影响其感知价值。例如,已知由信誉良好的实体挖掘或通过合法手段获得的币可能比与非法活动(如洗钱或勒索软件付款)相关的币更受欢迎。

  3. 隐私性:一些币由于过去交易中使用的方式,具有比其他币更好的隐私特性。例如,一个使用CoinJoin交易(将来自多个用户的输入组合在一起以掩盖个别地址之间的关系)进行混合的币可能比未经过此过程的币更私密。

  4. 交易费用:与较低相关交易费用的币可能更受欢迎,因为它们的花费更低。这可能会发生在币的UTXO是包含低费率交易的一部分时,这使得将其包含在新的交易中更加经济。

  5. 确认状态:币的确认状态是指在其交易所在的区块之后添加到区块链中的区块数量。具有更多确认的币被认为是更安全的,因为随着确认数量的增加,撤销交易变得越来越困难。

  6. 币控制设置:一些钱包软件允许用户实施币控制设置,使他们能够在创建交易时选择特定的UTXO。用户可以根据年龄、隐私或交易费用等因素优先考虑某些币。通过这些设置选择的币可能被认为更适合特定用例或个人偏好。

  7. 币面额:在某些情况下,币的面额或UTXO的价值可能有所不同。较小的面额可能由于与花费多个小输入相关的高交易费用而价值较低,而较大的面额在创建交易时可以提供更大的灵活性和更低的费用。

这些因素在比特币等加密货币的背景下,有助于区分币的差异。用户和钱包软件在选择用于交易的币时可能会考虑这些因素,以优化费用、隐私和其他考虑因素。

6> 是一个与整个轨迹相关的UTXO吗?其历史中包含多少步骤?是否需要提供具有特定属性的币才能拒绝交易?如果你的币距离一个完全未知的人(这个人可能在进行洗钱)有三步之遥,这实际上是否会“玷污”你的钱包中的钱?这在实践中是如何体现的?

UTXO代表交易未花费的输出,并携带创建它的交易的历史。然而,UTXO本身并不存储其整个轨迹或导致其创建的前置交易的历史。相反,区块链记录了每一次交易,因此UTXO的历史可以通过区块链追溯。

UTXO的历史可以追溯到创世交易(块中的第一个交易,奖励矿工新币),或者如果它最近被花费并再次成为UTXO,则相对较短。历史深度取决于涉及UTXO的交易数量。

在大多数情况下,交易不会被基于提供的硬币属性拒绝。然而,一些集中式服务,如交易所,可能会使用链分析工具来监控和追踪硬币的历史。他们可能会拒绝接受有可疑历史的硬币,例如与洗钱、犯罪活动或其他非法行为有关。

实际上,由于交易与您有几步之遥,因此您的钱包中的货币“污染”通常不是大多数用户的重大关切。虽然链分析工具可以追踪硬币的历史,但像比特币这样的加密货币的去中心化特性使得根据其历史对硬币实施限制变得困难。

然而,了解潜在的风险并确保您不是有意接受或交易与非法活动有关的硬币是很重要的。使用专注于隐私的钱包软件、隐私增强技术如CoinJoin或专注于隐私的加密货币可以帮助降低您的硬币与不良交易历史相关联的风险。

那么,钱包软件能自动为您做这件事吗?例如,一个人能设置他的钱包,使其不接受有负面历史的硬币的交易?此外,谁决定“负面”历史是什么?这不意味着某种程度的集中控制吗?

理论上,钱包软件可以实现分析硬币历史并自动拒绝涉及有“负面”历史的硬币的交易的功能。然而,大多数钱包软件目前并不提供此功能,因为确定什么是负面历史非常主观,可能取决于个人的偏好、风险承受能力和司法管辖权。

至于谁决定“负面”历史是什么,没有普遍认同的标准。这最终取决于评估硬币的人或实体的背景和视角。例如,集中式交易所可能会有自己决定硬币历史是否为负面的标准,而个人用户可能会有不同的标准。

这确实意味着在评估硬币历史时存在某种程度的集中控制,尤其是在像交易所或钱包提供商这样的集中式服务背景下。然而,比特币等加密货币的去中心化特性确保没有任何单个实体可以控制整个网络或将自己的标准强加给所有用户。

如果您担心您的硬币历史并希望保持更高的隐私水平,您可以使用隐私增强技术如CoinJoin或选择提供内置匿名功能的隐私中心加密货币,如Monero或Zcash。这可以帮助您避免与可能链接到不良交易历史的硬币相关的问题。此外,您可以选择使用去中心化交易所或非托管钱包服务,这些服务不强制执行有关硬币历史的严格规则,让您对自己的资产有更多控制权。

8>关于硬币控制您还能告诉我些什么?

硬币控制是某些钱包软件提供的一项功能,允许用户手动选择他们想要在新交易中用作输入的具体未使用交易输出(UTXOs)。此功能为用户提供更高的交易控制权,有助于优化交易费用、增强隐私并更有效地管理钱包中的UTXO集。以下是硬币控制的一些附加方面

  1. 费用优化:通过选择与较低关联交易费用或较大面值的UTXOs,用户可以最小化其交易成本。这在网络拥堵且交易费用较高时尤其有用。

  2. 隐私增强:币控制允许用户选择可以增强隐私的未花费交易输出(UTXOs)。例如,他们可以选择较早的UTXOs,这些UTXOs不太可能与其当前钱包活动相关联,或者使用来自不同地址的UTXOs,使观察者更难将交易与单个地址相关联。

  3. UTXOs的合并:币控制可以帮助用户合并他们的UTXOs,使钱包更易于管理,并减少他们需要跟踪的整体UTXOs数量。这对于拥有大量小额UTXOs的用户来说非常有用,因为合并这些输出可以使未来的交易成本更低,管理起来也更方便。

  4. 特定硬币的手动花费:币控制允许用户花费他们可能希望用于特定目的的特定硬币,例如使用没有已知非法活动关联的“干净”硬币,或优先花费隐私级别较低的硬币。

  5. 碎片管理:“碎片”是指可能因交易费而不值得花费的微小加密货币金额。币控制可以帮助用户通过允许他们合并这些小额UTXOs或完全避免花费它们来管理碎片。

  6. 自定义零钱地址:具有币控制功能的某些钱包软件允许用户在创建交易时选择自定义零钱地址。这可以进一步增强隐私,因为这使得观察者更难将零钱输出与特定地址或交易相关联。

通过提供这些好处,币控制使用户能够对他们的交易和钱包管理有更大的控制权,从而提高隐私性、优化费用和更好地管理UTXOs。重要的是要了解,有效地使用币控制需要对UTXOs和交易在比特币等加密货币背景下的工作方式有一定的了解。

在UTXOs中是否存在类似于计算机体系结构中内存碎片化问题的东西?

是的,钱包中的UTXO集或整个比特币网络都可能经历类似于计算机系统内存碎片化的现象。这个问题有时被称为“UTXO碎片化”或“UTXO集碎片化”。

在计算机内存的背景下,碎片化发生时,内存以分配和取消分配的方式分配,使得很难找到足够大的连续空闲内存块来容纳新的分配。这可能导致内存使用效率低下,性能降低。

类似地,在UTXOs的背景下,当用户的钱包或全球UTXO集包含许多小UTXOs且没有有效分组或合并时,就会发生碎片化。这可能是由于多种因素造成的,例如创建了多个小额交易或长时间内多次接收小额付款。碎片化可能导致以下问题

  1. 交易费用增加:当钱包包含许多小UTXOs时,创建花费这些小额输入的交易可能导致更高的交易费用。这是因为交易大小随着输入数量的增加而增加,通常需要更高的费用才能被网络确认。

  2. 钱包性能降低:当管理大量UTXOs时,钱包软件可能会变慢,因为它需要跟踪和管理所有这些单个输出。

  3. 网络资源使用增加:高度碎片化的UTXO集可以增加整个网络资源的使用量,因为节点必须在它们的内存中存储和管理更多的UTXOs。这可能导致节点增加存储和内存需求,以及可能更长的同步时间。

为了减轻未使用交易输出(UTXO)碎片化,用户可以采用一些策略,例如通过创建将多个小型输入合并成一个单一较大输出的交易来整合UTXO。这可以通过某些钱包软件中的币控制功能手动完成,或者在某些情况下,钱包可以自动处理。整合UTXO可以帮助优化交易费用,提高钱包性能,并减少整个网络的资源消耗。然而,需要注意的是,整合交易可能会影响用户隐私,因为它们可能会揭示多个地址或交易之间的联系。

依赖项

~102MB
~879K SLoC