#hashing #algorithm #hash #library #astrobwt

spectrex

SpectreX是Rust中实现的AstroBWTv3 CPU挖矿算法

4个版本

0.3.17 2024年6月13日
0.3.16 2024年6月12日
0.3.15 2024年6月11日
0.3.14 2024年6月11日

#480 in 算法

Download history 416/week @ 2024-06-10 379/week @ 2024-06-17 360/week @ 2024-06-24 201/week @ 2024-07-01 49/week @ 2024-07-08 10/week @ 2024-07-15 79/week @ 2024-07-22 101/week @ 2024-07-29 45/week @ 2024-08-05 25/week @ 2024-08-12

251 每月下载量

ISC许可证

140KB
2.5K SLoC

SpectreX

Crates.io GitHub license

SpectreX是一个通用的CPU挖矿算法库,由Spectre On Rust全节点守护进程使用。

概述

SpectreX具有基于Burrows-Wheeler变换(BWT)的证明工作(PoW)系统AstroBWTv3算法,该版本完全使用Rust编写,不依赖于任何外部C库,仅依赖于各种Rust包。

散列函数

证明工作计算涉及一系列顺序散列函数以形成最终散列

  • 步骤1:计算输入数据的sha256。
  • 步骤2:使用Salsa20扩展数据。
  • 步骤3:根据步骤2的输出使用RC4加密数据。
  • 步骤4:计算步骤3的结果的初始FNV-1a散列。
  • 步骤5:对步骤4的数据应用基于RC4流加密的分支循环。
  • 步骤6:使用步骤5的结果构建和排序后缀数组。
  • 步骤7:计算步骤6的数据的最终sha256。

改进

原始算法使用了SA-IS排序算法。存在一个增强的SACA-K算法,用于诱导排序,将线性时间复杂度改进为常数字母集的就地版本。然而,这仍然是单核版本。《a href="https://ieeexplore.ieee.org/document/8371211" rel="noopener ugc nofollow">pSACAK算法提供了一种快速、线性时间、就地并行解决方案,利用多核机器。然而,测试表明它仍然需要优化。它与原始AstroBWTv3后缀数组完全兼容。

我们的AstroBWTv3实现使用cdivsufsort,因为它是仍然最快的单线程后缀数组构建实现。

有许多机会可以增强AstroBWTv3散列的计算,包括

  • 用CPU上的高度优化的内联汇编代码替换大多数步骤。
  • 将后缀数组分区并将排序卸载到GPU上,以显着提高性能。

我们鼓励开发人员优化单个计算步骤,以随着时间的推移改进算法并成熟代码库。

使用

要将 SpectreX 包含到项目依赖中,只需运行以下命令:cargo add spectrex。下面是一个简单的示例

use spectrex::astrobwtv3;

fn main() {
    let hash_in: [u8; 32] = [88, 101, 183, 41, 212, 156, 190, 48, 230, 97, 94, 105, 177, 86, 88, 84, 60, 239, 203, 124, 63, 32, 160, 222, 34, 141, 50, 108, 138, 16, 90, 230];
    let hash_out = astrobwtv3::astrobwtv3_hash(&hash_in);
    println!("hash_out: {:?}", hash_out);
}

测试

下面是一个基本的计算测试,旨在确保在不同字节序下计算出的散列值的准确性。您可以使用以下命令执行它:cargo test,测试成功完成后,将显示以下输出

running 1 test
test astrobwtv3_hash_10 ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.54s

基准测试

包含了一个简单的计算基准测试,使用Criterion。这个基准测试有助于验证如果有任何计算步骤被修改,性能是否有所改进或下降。您可以使用以下命令运行它:cargo bench,它将返回以下结果

astrobwtv3              time:   [8.8912 ms 9.0648 ms 9.2387 ms]
                        change: [-7.8592% -4.5050% -1.1622%] (p = 0.01 < 0.05)
                        Performance has improved.
Found 4 outliers among 100 measurements (4.00%)
  4 (4.00%) high mild

依赖项

~0.9–1.2MB
~26K SLoC