#utxo #selection #bitcoin #algorithm #transaction #group #output

bitcoin-coinselect

筛选我们可能在币选择中使用的 OutputGroups 的抽象 — OutputGroup 是一组支付给相同输出脚本的 UTXOs

2 个版本

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

#18 in #utxo


3 个crate中(2个直接使用)使用

MIT 许可证

1.5MB
4.5K SLoC

Bitcoin CoinSelect:用于比特币 UTXO 选择的一个 Rust crate

比特币 UTXO 选择算法的 Rust 实现,是直接将比特币代码库从 C++ 转换到 Rust 的部分。一些函数体可能仍在翻译过程中。


这个 Rust crate,bitcoin-coinselect,提供了一组用于在比特币网络中选择未花费交易输出(UTXOs)的算法和实用工具。该crate是直接将比特币代码库从 C++ 转换到 Rust 的部分,一些函数体可能仍在翻译过程中。

该crate包括几个核心组件

  • OutputGroup:表示一组可以在交易中使用的 UTXOs 的数据结构。

  • eligible_for_spending:一个函数,根据各种标准(如年龄和金额)确定给定的 UTXO 是否符合使用条件。

  • knapsack_solver:一个用于 UTXO 选择的多重背包算法实现,旨在找到最有效的 UTXOs 组合来覆盖目标交易金额,同时最小化找零。

  • get_selection_waste:一个函数,计算与特定 UTXO 选择相关的浪费,考虑交易费用和隐私等因素。

  • DescendingOrderComparator:一个用于按价值降序排序 UTXOs 的实用工具,以便高效选择价值最高的 UTXOs。

  • CoinSelectionParams:一个结构体,用于存储 UTXO 选择过程的参数,例如目标交易金额、期望的输入数和其他约束条件。

find_coins:一个函数,在钱包或一组 UTXOs 中搜索符合条件的 UTXOs,根据提供的 CoinEligibilityFilter 标准进行过滤。这使用户能够搜索满足特定要求的 UTXOs,例如最低确认次数或包含在特定地址范围内。

  • CoinEligibilityFilter:一个结构体,定义了 UTXOs 的资格标准,包括最小和最大确认数、是否包括仅查看的交易以及其他过滤器。

  • select_coins_bnb:这是针对 UTXO 选择实现的分支和边界算法,旨在在不产生找零的情况下,尽可能精确地匹配目标交易金额。该算法通过深度优先搜索和剪枝来遍历 UTXO 集合,考虑每个 UTXO 的价值和总交易费用。

  • select_coinssrd:一个实现单次随机抽取(SRD)UTXO 选择算法的函数。此方法从可用集合中随机选择 UTXOs,直到达到或超过目标交易金额。当更高级的选择算法(如背包求解器或分支和边界)无法找到合适的解决方案时,SRD 算法通常用作后备方案。

  • approximate_best_subset:一个寻找 UTXO 选择问题的近似解的函数,使用贪婪算法选择覆盖目标交易金额的最高价值 UTXOs。这种方法比背包求解器或分支和边界算法计算量小,但可能会导致次优选择。

  • InputCoin:一个结构体,用于表示选择算法上下文中的单个 UTXO,包含有关 UTXO 的价值、相关交易和其他相关数据。

  • cmpeqpartial_cmp:比较函数,用于根据 UTXO 的价值或其他标准对 UTXOs 进行排序和比较,从而实现高效的 UTXO 选择和管理。

bitcoin-coinselect 库提供了一套针对比特币交易中 UTXO 选择的全面工具集,提供各种算法和实用工具,以适应不同的用例和需求。通过在 Rust 中实现这些选择算法,该库旨在为比特币钱包软件和其他需要 UTXO 管理的应用程序提供快速、高效且安全的基础。

依赖项

~109MB
~1M SLoC