利用多核的Rust快速Merkle tree

1. 引言

利用多核的Rust快速Merkle tree,开源代码见:

其具有如下属性:

  • 可调整为任意高度
  • 构建root复杂度为O(n)
  • 提供了插入和获取叶子节点的方法
  • 获取某叶子节点的opening proof,并基于某root验证该proof
  • 抽象化的哈希函数,可任意替换为其它哈希函数。
  • 默认叶子节点为h(0)
  • 可选择使用multi processing(多重处理)

cargo test来做测试用例测试。cargo bench来做benchmark。

在做代码优化时,通常需权衡代码效率和代码可读以及可维护性。
https://github.com/anoushk1234/fast-merkle-tree 代码实现和优化时,试图兼顾了三者(效率、可读性、可维护性)。

具体的算法优化有:

  • 1)由于所有的叶子节点都预填充了默认值,实际插入时,无法简单将data hash推入,直观方法是轮询找到某叶子节点然后替换为data hash。这样复杂度为 O ( n ! ) O(n!) O(n!)。本文会记录Merkle tree的当前可添加叶子节点的index,这样有助于跟踪那个index可被替换,从而将插入平均时长缩短了约800ms。
    之前方案:

    现在方案:
  • 2)由于已知Merkle tree的容量,可提前预分配向量,来节约在heap中没必要的分配,从而节约调用syscall的开销(因需做上下文切换)。
  • 3)将DEFAULT_LEAF等值用作常量值,节约在运行时对其进行哈希的时间。

同时,还做了如下并行优化:

  • 1)不是顺序插入叶子节点,而是使用多个线程来哈希叶子节点,然后一次性附加到数组中,可节约约70ms到80ms的时间。
  • 2)即使对Merkle tree进行了预填充,由于向量已分配,可使用par_extend来并行预填充,但性能改进可忽略,此处倾向于简化for循环中的逻辑。

代码可读性改进:

  • 1)当计算level length或tree height时,可使用浮点数计算,如:

    rust 复制代码
    (current_level_len as f64 / 2.0).ceil() as usize

    或者,采用整数运算,如:

    rust 复制代码
    if current_level_len % 2 == 0 {
        current_level_len / 2
    } else {
        (current_level_len + 1) / 2
    }

    浮点数运算需要的计算量多一点,这种性能差异在特定应用场景下(特别是当 h < = 10 h<=10 h<=10时)可忽略不计。不过个人倾向于采用整数运算。

未来性能改进点:

  • 1)AVX-512 Accelarated SHA256,已有一些开源实现。
  • 2)定制Heap Allocator:使用定制allocator来分配单个dram page,然后每次需给向量分配heap时,使用该定制allocator。可节约向内核做syscall的额外开销。类似如Hoard Allocator
  • 3)向量化:不同于 使用多个变量来存储不同的值,可使用搭个matrix/vector来存储不同的值。但这将牺牲可读性。
  • 4)使用Blake4而不是SHA-256。
相关推荐
T***u3332 天前
区块链零知识证明
区块链·零知识证明
HaiLang_IT24 天前
【信息安全毕业设计】基于zkSNARK与递归证明的数字签名验证方案研究
零知识证明·数字签名·身份验证
FAFU_kyp1 个月前
Iden3 协议规范(Version 0)详细总结
零知识证明
搬砖魁首1 个月前
密码学系列 - 零知识证明(ZKP) - NTT与MSM的总结
密码学·零知识证明·zkp·ntt·msm·pippenger·kzg
openHiTLS密码开源社区1 个月前
椭圆曲线密码学的效率核心:单标量与多标量乘法详解
区块链·零知识证明·rsa·隐私保护·ecc·多标量·单标量
openHiTLS密码开源社区1 个月前
从 “对话” 到 “证书”:零知识证明的魔法工具箱 —— 让隐私验证走进普通人的数字生活
区块链·零知识证明·隐私泄露·zkp
搬砖魁首2 个月前
密码学系列 - 零知识证明(ZKP) - NTT运算
区块链·密码学·零知识证明·fft·ntt
mutourend2 个月前
ICICLE-Snark:目前最快的 Groth16 实现
零知识证明
搬砖魁首4 个月前
密码学系列 - 零知识证明(ZKP) - 多种承诺方案
密码学·零知识证明·pcs·zkp·承诺方案
AIMercs4 个月前
零知识证明
区块链·零知识证明