#coin #bitcoin #utxo #coinselection #coin-selection

bitcoin-coin-selection

提供高效选择一组未使用交易输出(UTXOs)的实用函数的库

5个不稳定版本

0.5.0 2024年7月19日
0.4.1 2024年7月12日
0.4.0 2024年7月5日
0.3.2 2024年7月1日
0.3.1 2024年6月30日

#3#utxo

CC0 许可证

47KB
644

比特币币选择

本库提供了高效算法来组合一组未使用交易输出(UTXOs)。当比特币钱包创建交易时,需要考虑多种权衡来决定选择哪些UTXOs。这里详细描述了决定使用哪个UTXOs集的权衡:在币选择策略评估以及在此什么是浪费度量?

用法

当前接口通过select_coins()函数提供。所需参数包括

target - 所需的交易金额。
cost_of_change - 创建新输出(UTXO)的成本。
fee_rate - 当前的费率。
long_term_fee_rate - 长期费率,有助于确定费率是高还是低。
weighted_utxos - 可供选择的可能加权UTXOs集。

如上所述的文献中讨论的,我们希望找到一个“无找零”的解决方案。一个无找零的解决方案是指超出target但小于target + cost_of_change的解决方案。如果找不到无找零解决方案,那么通过分割UTXO创建找零输出是次优选择。为此,select_coins()最初尝试分支界限选择算法来找到无找零解决方案。如果没有找到无找零解决方案,则select_coins()回退到单次随机抽取选择策略。

基准测试

要运行基准测试,请使用:cargo bench

注意:criterion需要rustc版本1.65才能运行基准测试。

性能比较

使用商品硬件(我的相当旧的计算器)对Rust BnB实现和Bitcoin Core进行的基本性能比较。

实现 池大小 ns/iter
Rust BnB 1,000 897,810
C++ Core BnB 1,000 816,374

注意:使用 rustc 1.75 进行了测量。使用 MSRV 可能会有更差的性能。

最低支持的 Rust 版本 (MSRV)

此库应始终与 Rust 1.56.1 上的任何功能组合编译。

发行说明

依赖项

~7MB
~87K SLoC