2 个版本
0.1.16-alpha.0 | 2023年4月2日 |
---|---|
0.1.12-alpha.0 | 2023年1月20日 |
#18 in #utxo
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 的价值、相关交易和其他相关数据。 -
cmp
、eq
、partial_cmp
:比较函数,用于根据 UTXO 的价值或其他标准对 UTXOs 进行排序和比较,从而实现高效的 UTXO 选择和管理。
bitcoin-coinselect
库提供了一套针对比特币交易中 UTXO 选择的全面工具集,提供各种算法和实用工具,以适应不同的用例和需求。通过在 Rust 中实现这些选择算法,该库旨在为比特币钱包软件和其他需要 UTXO 管理的应用程序提供快速、高效且安全的基础。
依赖项
~109MB
~1M SLoC