Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(rln): review and refine utility functions in rln #287

Merged
merged 8 commits into from
Mar 6, 2025

Conversation

vinhtc27
Copy link
Contributor

@vinhtc27 vinhtc27 commented Feb 28, 2025

Review and refine utility functions to resolve #279:

  • Update utility functions to the current version.
  • Remove unused and commented-out code.
  • Optimize some utility functions by using extend_from_slice() and pre-allocate size for Vec.

@vinhtc27 vinhtc27 changed the title fix(rln): review and refactor utility functions in rln fix(rln): review and refine utility functions in rln Feb 28, 2025
Copy link

Benchmark for 3f2009c

Click to view benchmark
Test Base PR %
FullMerkleTree::compute_root 0.0±0.00ns 0.0±0.00ns NaN%
FullMerkleTree::delete 886.6±11.33ns 870.1±10.53ns -1.86%
FullMerkleTree::get 0.0±0.00ns 0.0±0.00ns NaN%
FullMerkleTree::get_empty_leaves_indices 7.5±0.11ns 7.5±0.17ns 0.00%
FullMerkleTree::get_subtree_root 3.8±0.12ns 3.8±0.22ns 0.00%
FullMerkleTree::override_range 1332.8±11.75ns 1338.2±17.46ns +0.41%
FullMerkleTree::set 889.8±17.50ns 873.8±10.47ns -1.80%
OptimalMerkleTree::compute_root 1047.5±7.36ns 1006.2±13.10ns -3.94%
OptimalMerkleTree::delete 1022.5±7.31ns 1001.7±12.60ns -2.03%
OptimalMerkleTree::get 22.3±0.12ns 22.3±0.27ns 0.00%
OptimalMerkleTree::get_empty_leaves_indices 7.5±0.13ns 7.5±0.10ns 0.00%
OptimalMerkleTree::get_subtree_root 24.2±1.20ns 24.0±0.26ns -0.83%
OptimalMerkleTree::override_range 4.2±0.03µs 4.2±0.28µs 0.00%
OptimalMerkleTree::set 1021.6±13.49ns 999.1±5.73ns -2.20%

Copy link

Benchmark for 1bd7e8d

Click to view benchmark
Test Base PR %
FullMerkleTree::compute_root 0.0±0.00ns 0.0±0.00ns NaN%
FullMerkleTree::delete 867.7±11.21ns 877.5±12.57ns +1.13%
FullMerkleTree::get 0.0±0.00ns 0.0±0.00ns NaN%
FullMerkleTree::get_empty_leaves_indices 7.5±0.10ns 7.5±0.07ns 0.00%
FullMerkleTree::get_subtree_root 3.7±0.08ns 3.8±0.19ns +2.70%
FullMerkleTree::override_range 1331.9±12.27ns 1345.3±14.33ns +1.01%
FullMerkleTree::set 875.5±9.46ns 871.3±12.98ns -0.48%
OptimalMerkleTree::compute_root 1005.9±11.92ns 1010.6±23.00ns +0.47%
OptimalMerkleTree::delete 1005.7±9.91ns 1007.4±9.01ns +0.17%
OptimalMerkleTree::get 22.0±0.24ns 25.2±0.12ns +14.55%
OptimalMerkleTree::get_empty_leaves_indices 7.5±0.12ns 7.5±0.09ns 0.00%
OptimalMerkleTree::get_subtree_root 24.1±0.40ns 23.7±0.29ns -1.66%
OptimalMerkleTree::override_range 4.1±0.05µs 4.1±0.06µs 0.00%
OptimalMerkleTree::set 1006.6±17.18ns 1002.4±16.90ns -0.42%

Copy link

Benchmark for 3f2009c

Click to view benchmark
Test Base PR %
FullMerkleTree::::full_height_gen 13.5±0.33ms 13.5±0.24ms 0.00%
OptimalMerkleTree::::full_height_gen 580.1±4.37µs 585.3±9.73µs +0.90%
Pmtree::compute_root 0.0±0.00ns 0.0±0.00ns NaN%
Pmtree::get 378.0±6.52ns 380.0±3.97ns +0.53%
Pmtree::get_empty_leaves_indices 9.0±0.17ns 9.0±0.10ns 0.00%
Pmtree::get_subtree_root 520.8±3.15ns 522.1±15.69ns +0.25%
Pmtree::override_range 249.4±6.47µs 243.8±4.87µs -2.25%
Pmtree::set 54.6±0.39µs 56.2±1.53µs +2.93%
Pmtree:delete 54.6±0.36µs 55.0±0.85µs +0.73%
Set/FullMerkleTree::::set/1 559.5±6.17µs 558.7±6.87µs -0.14%
Set/FullMerkleTree::::set/10 5.7±0.02ms 5.6±0.02ms -1.75%
Set/FullMerkleTree::::set/100 56.1±1.23ms 56.0±0.08ms -0.18%
Set/FullMerkleTree::::set_range/1 560.0±4.06µs 559.8±3.45µs -0.04%
Set/FullMerkleTree::::set_range/10 777.8±5.12µs 758.5±2.90µs -2.48%
Set/FullMerkleTree::::set_range/100 3.3±0.09ms 3.3±0.06ms 0.00%
Set/OptimalMerkleTree::::set/1 562.8±4.69µs 563.9±6.59µs +0.20%
Set/OptimalMerkleTree::::set/10 5.6±0.08ms 5.7±0.14ms +1.79%
Set/OptimalMerkleTree::::set/100 56.0±0.18ms 56.6±0.93ms +1.07%
Set/OptimalMerkleTree::::set_range/1 572.1±5.23µs 564.1±2.60µs -1.40%
Set/OptimalMerkleTree::::set_range/10 5.6±0.02ms 5.7±0.07ms +1.79%
Set/OptimalMerkleTree::::set_range/100 56.3±0.27ms 56.4±0.20ms +0.18%
vk::vk_from_ark_serialized 1620.7±5.55ns 1617.3±9.04ns -0.21%
zkey::zkey_from_raw 3.4±0.01s 3.5±0.02s +2.94%

Copy link

Benchmark for 3f2009c

Click to view benchmark
Test Base PR %
FullMerkleTree::::full_height_gen 13.6±0.22ms 13.3±0.13ms -2.21%
OptimalMerkleTree::::full_height_gen 579.2±7.77µs 577.8±7.28µs -0.24%
Pmtree::compute_root 0.0±0.00ns 0.0±0.00ns NaN%
Pmtree::get 381.3±4.31ns 384.2±9.18ns +0.76%
Pmtree::get_empty_leaves_indices 8.7±0.12ns 8.8±0.52ns +1.15%
Pmtree::get_subtree_root 522.0±25.95ns 514.6±4.44ns -1.42%
Pmtree::override_range 240.3±8.25µs 238.4±7.61µs -0.79%
Pmtree::set 54.9±0.79µs 54.5±0.68µs -0.73%
Pmtree:delete 54.7±0.29µs 54.5±0.40µs -0.37%
Set/FullMerkleTree::::set/1 556.3±4.58µs 558.7±6.21µs +0.43%
Set/FullMerkleTree::::set/10 5.6±0.01ms 5.6±0.02ms 0.00%
Set/FullMerkleTree::::set/100 56.0±1.71ms 55.6±0.05ms -0.71%
Set/FullMerkleTree::::set_range/1 556.6±4.78µs 558.4±6.12µs +0.32%
Set/FullMerkleTree::::set_range/10 757.5±4.78µs 754.7±6.32µs -0.37%
Set/FullMerkleTree::::set_range/100 3.3±0.04ms 3.3±0.01ms 0.00%
Set/OptimalMerkleTree::::set/1 561.7±6.84µs 559.3±5.47µs -0.43%
Set/OptimalMerkleTree::::set/10 5.6±0.02ms 5.6±0.02ms 0.00%
Set/OptimalMerkleTree::::set/100 55.8±0.20ms 56.0±0.21ms +0.36%
Set/OptimalMerkleTree::::set_range/1 560.4±4.96µs 556.4±4.05µs -0.71%
Set/OptimalMerkleTree::::set_range/10 5.6±0.02ms 5.6±0.03ms 0.00%
Set/OptimalMerkleTree::::set_range/100 56.8±5.84ms 56.0±0.27ms -1.41%
arkzkey::arkzkey_from_raw_compressed 339.3±0.50ms 341.5±4.46ms +0.65%
arkzkey::arkzkey_from_raw_uncompressed 6.0±0.01ms 6.1±0.03ms +1.67%
vk::vk_from_ark_serialized 1585.7±26.20ns 1590.8±10.32ns +0.32%
zkey::zkey_from_raw 3.4±0.00s 3.4±0.00s 0.00%

Copy link

Benchmark for 1bd7e8d

Click to view benchmark
Test Base PR %
FullMerkleTree::::full_height_gen 13.1±0.08ms 13.1±0.10ms 0.00%
OptimalMerkleTree::::full_height_gen 577.8±7.92µs 585.5±7.19µs +1.33%
Pmtree::compute_root 0.0±0.00ns 0.0±0.00ns NaN%
Pmtree::get 379.9±4.46ns 376.3±5.14ns -0.95%
Pmtree::get_empty_leaves_indices 9.0±0.10ns 9.0±0.13ns 0.00%
Pmtree::get_subtree_root 526.2±6.95ns 515.7±6.77ns -2.00%
Pmtree::override_range 241.8±3.42µs 236.5±5.03µs -2.19%
Pmtree::set 54.4±0.78µs 54.5±0.59µs +0.18%
Pmtree:delete 54.5±0.40µs 54.5±0.51µs 0.00%
Set/FullMerkleTree::::set/1 557.5±7.51µs 560.5±6.65µs +0.54%
Set/FullMerkleTree::::set/10 5.6±0.02ms 5.6±0.04ms 0.00%
Set/FullMerkleTree::::set/100 55.8±0.32ms 55.8±0.33ms 0.00%
Set/FullMerkleTree::::set_range/1 561.8±6.46µs 559.1±8.21µs -0.48%
Set/FullMerkleTree::::set_range/10 759.6±4.77µs 763.8±4.97µs +0.55%
Set/FullMerkleTree::::set_range/100 3.3±0.01ms 3.3±0.01ms 0.00%
Set/OptimalMerkleTree::::set/1 561.2±7.01µs 562.5±7.14µs +0.23%
Set/OptimalMerkleTree::::set/10 5.6±0.01ms 5.6±0.04ms 0.00%
Set/OptimalMerkleTree::::set/100 55.8±0.28ms 56.1±0.26ms +0.54%
Set/OptimalMerkleTree::::set_range/1 562.2±4.58µs 562.4±5.61µs +0.04%
Set/OptimalMerkleTree::::set_range/10 5.6±0.03ms 5.6±0.06ms 0.00%
Set/OptimalMerkleTree::::set_range/100 55.8±0.53ms 56.2±0.25ms +0.72%
vk::vk_from_ark_serialized 1660.7±13.13ns 1618.0±6.34ns -2.57%
zkey::zkey_from_raw 3.4±0.01s 3.4±0.01s 0.00%

Copy link

Benchmark for 1bd7e8d

Click to view benchmark
Test Base PR %
FullMerkleTree::::full_height_gen 13.7±0.15ms 13.5±0.30ms -1.46%
OptimalMerkleTree::::full_height_gen 585.6±9.08µs 582.7±13.24µs -0.50%
Pmtree::compute_root 0.0±0.00ns 0.0±0.00ns NaN%
Pmtree::get 379.9±3.11ns 383.2±5.67ns +0.87%
Pmtree::get_empty_leaves_indices 8.7±0.13ns 8.7±0.04ns 0.00%
Pmtree::get_subtree_root 531.3±7.07ns 536.5±7.05ns +0.98%
Pmtree::override_range 239.8±3.65µs 244.5±3.32µs +1.96%
Pmtree::set 54.9±0.57µs 54.7±0.80µs -0.36%
Pmtree:delete 54.5±0.58µs 54.4±0.40µs -0.18%
Set/FullMerkleTree::::set/1 555.1±4.36µs 558.8±14.41µs +0.67%
Set/FullMerkleTree::::set/10 5.6±0.02ms 5.6±0.02ms 0.00%
Set/FullMerkleTree::::set/100 55.7±0.59ms 55.8±0.11ms +0.18%
Set/FullMerkleTree::::set_range/1 556.2±6.52µs 557.9±5.77µs +0.31%
Set/FullMerkleTree::::set_range/10 755.0±5.00µs 759.1±5.80µs +0.54%
Set/FullMerkleTree::::set_range/100 3.3±0.01ms 3.3±0.02ms 0.00%
Set/OptimalMerkleTree::::set/1 555.9±4.71µs 556.5±4.19µs +0.11%
Set/OptimalMerkleTree::::set/10 5.6±0.01ms 5.6±0.03ms 0.00%
Set/OptimalMerkleTree::::set/100 55.8±0.29ms 56.0±1.34ms +0.36%
Set/OptimalMerkleTree::::set_range/1 557.2±4.80µs 556.9±5.84µs -0.05%
Set/OptimalMerkleTree::::set_range/10 5.6±0.02ms 5.6±0.02ms 0.00%
Set/OptimalMerkleTree::::set_range/100 55.7±0.37ms 55.8±0.35ms +0.18%
arkzkey::arkzkey_from_raw_compressed 343.2±1.92ms 340.0±0.78ms -0.93%
arkzkey::arkzkey_from_raw_uncompressed 6.0±0.02ms 6.0±0.03ms 0.00%
vk::vk_from_ark_serialized 1581.2±7.42ns 1594.7±15.96ns +0.85%
zkey::zkey_from_raw 3.4±0.01s 3.5±0.00s +2.94%

Copy link

Benchmark for 1cd0004

Click to view benchmark
Test Base PR %
FullMerkleTree::compute_root 0.0±0.00ns 0.0±0.00ns NaN%
FullMerkleTree::delete 867.8±4.83ns 875.0±10.96ns +0.83%
FullMerkleTree::get 0.0±0.00ns 0.0±0.00ns NaN%
FullMerkleTree::get_empty_leaves_indices 7.5±0.09ns 7.5±0.22ns 0.00%
FullMerkleTree::get_subtree_root 3.8±0.16ns 3.8±0.09ns 0.00%
FullMerkleTree::override_range 1332.1±13.14ns 1384.9±257.44ns +3.96%
FullMerkleTree::set 877.1±22.59ns 883.2±15.19ns +0.70%
OptimalMerkleTree::compute_root 1006.4±8.86ns 1025.2±12.76ns +1.87%
OptimalMerkleTree::delete 1003.5±10.06ns 1030.2±12.38ns +2.66%
OptimalMerkleTree::get 22.4±0.33ns 22.2±0.23ns -0.89%
OptimalMerkleTree::get_empty_leaves_indices 7.5±0.06ns 7.5±0.12ns 0.00%
OptimalMerkleTree::get_subtree_root 24.0±0.21ns 24.0±0.29ns 0.00%
OptimalMerkleTree::override_range 4.1±0.06µs 4.1±0.06µs 0.00%
OptimalMerkleTree::set 1004.5±34.59ns 1029.2±11.66ns +2.46%

Copy link

Benchmark for 1cd0004

Click to view benchmark
Test Base PR %
FullMerkleTree::::full_height_gen 13.9±0.06ms 13.6±0.38ms -2.16%
OptimalMerkleTree::::full_height_gen 582.8±4.51µs 581.5±13.91µs -0.22%
Pmtree::compute_root 0.0±0.00ns 0.0±0.00ns NaN%
Pmtree::get 376.8±3.24ns 459.9±4.38ns +22.05%
Pmtree::get_empty_leaves_indices 9.0±0.13ns 8.7±0.12ns -3.33%
Pmtree::get_subtree_root 524.5±29.35ns 638.4±6.16ns +21.72%
Pmtree::override_range 246.3±7.56µs 238.1±5.12µs -3.33%
Pmtree::set 54.8±0.95µs 55.1±0.37µs +0.55%
Pmtree:delete 54.6±0.53µs 55.5±0.64µs +1.65%
Set/FullMerkleTree::::set/1 562.6±27.40µs 558.5±3.65µs -0.73%
Set/FullMerkleTree::::set/10 5.6±0.01ms 5.6±0.01ms 0.00%
Set/FullMerkleTree::::set/100 55.8±0.14ms 55.9±0.16ms +0.18%
Set/FullMerkleTree::::set_range/1 557.4±7.69µs 559.0±4.17µs +0.29%
Set/FullMerkleTree::::set_range/10 760.1±6.60µs 761.8±6.24µs +0.22%
Set/FullMerkleTree::::set_range/100 3.3±0.05ms 3.3±0.16ms 0.00%
Set/OptimalMerkleTree::::set/1 581.4±18.93µs 563.4±8.11µs -3.10%
Set/OptimalMerkleTree::::set/10 5.6±0.01ms 5.6±0.03ms 0.00%
Set/OptimalMerkleTree::::set/100 56.2±0.10ms 55.9±0.12ms -0.53%
Set/OptimalMerkleTree::::set_range/1 562.3±16.50µs 558.0±3.47µs -0.76%
Set/OptimalMerkleTree::::set_range/10 5.6±0.02ms 5.7±0.38ms +1.79%
Set/OptimalMerkleTree::::set_range/100 56.8±0.63ms 56.0±0.12ms -1.41%
vk::vk_from_ark_serialized 1611.9±5.86ns 1634.9±18.92ns +1.43%
zkey::zkey_from_raw 3.4±0.01s 3.4±0.02s 0.00%

Copy link

Benchmark for 1cd0004

Click to view benchmark
Test Base PR %
FullMerkleTree::::full_height_gen 13.2±0.09ms 13.5±0.10ms +2.27%
OptimalMerkleTree::::full_height_gen 579.3±11.66µs 584.5±9.29µs +0.90%
Pmtree::compute_root 0.0±0.00ns 0.0±0.00ns NaN%
Pmtree::get 384.2±4.58ns 379.5±5.89ns -1.22%
Pmtree::get_empty_leaves_indices 8.7±0.11ns 8.7±0.24ns 0.00%
Pmtree::get_subtree_root 536.5±6.67ns 520.9±16.63ns -2.91%
Pmtree::override_range 235.2±4.09µs 250.6±6.00µs +6.55%
Pmtree::set 55.0±1.87µs 54.8±0.56µs -0.36%
Pmtree:delete 54.6±0.50µs 54.8±1.48µs +0.37%
Set/FullMerkleTree::::set/1 557.5±6.76µs 555.4±5.14µs -0.38%
Set/FullMerkleTree::::set/10 5.6±0.07ms 5.6±0.14ms 0.00%
Set/FullMerkleTree::::set/100 55.5±0.05ms 55.9±1.16ms +0.72%
Set/FullMerkleTree::::set_range/1 556.0±4.64µs 555.8±5.15µs -0.04%
Set/FullMerkleTree::::set_range/10 755.6±6.38µs 758.5±21.10µs +0.38%
Set/FullMerkleTree::::set_range/100 3.3±0.02ms 3.3±0.01ms 0.00%
Set/OptimalMerkleTree::::set/1 557.3±3.50µs 556.5±4.39µs -0.14%
Set/OptimalMerkleTree::::set/10 5.6±0.01ms 5.6±0.02ms 0.00%
Set/OptimalMerkleTree::::set/100 55.6±0.21ms 55.8±0.36ms +0.36%
Set/OptimalMerkleTree::::set_range/1 557.8±8.46µs 556.9±6.12µs -0.16%
Set/OptimalMerkleTree::::set_range/10 5.6±0.01ms 5.6±0.02ms 0.00%
Set/OptimalMerkleTree::::set_range/100 55.6±0.15ms 55.9±1.20ms +0.54%
arkzkey::arkzkey_from_raw_compressed 339.1±0.15ms 340.0±1.71ms +0.27%
arkzkey::arkzkey_from_raw_uncompressed 6.0±0.02ms 6.1±0.02ms +1.67%
vk::vk_from_ark_serialized 1592.8±10.56ns 1587.4±17.49ns -0.34%
zkey::zkey_from_raw 3.5±0.01s 3.4±0.01s -2.86%

Copy link

Benchmark for 1820ead

Click to view benchmark
Test Base PR %
FullMerkleTree::compute_root 0.0±0.00ns 0.0±0.00ns NaN%
FullMerkleTree::delete 880.3±38.39ns 878.9±45.44ns -0.16%
FullMerkleTree::get 0.0±0.00ns 0.0±0.00ns NaN%
FullMerkleTree::get_empty_leaves_indices 7.5±0.08ns 7.5±0.15ns 0.00%
FullMerkleTree::get_subtree_root 3.7±0.21ns 3.8±0.10ns +2.70%
FullMerkleTree::override_range 1343.9±15.30ns 1341.8±17.26ns -0.16%
FullMerkleTree::set 869.8±10.70ns 868.8±10.60ns -0.11%
OptimalMerkleTree::compute_root 1007.6±20.36ns 1006.9±12.23ns -0.07%
OptimalMerkleTree::delete 1002.6±6.77ns 1000.2±7.93ns -0.24%
OptimalMerkleTree::get 22.0±0.29ns 22.0±0.46ns 0.00%
OptimalMerkleTree::get_empty_leaves_indices 7.5±0.06ns 7.5±0.12ns 0.00%
OptimalMerkleTree::get_subtree_root 23.7±0.30ns 23.9±0.32ns +0.84%
OptimalMerkleTree::override_range 4.1±0.05µs 4.1±0.05µs 0.00%
OptimalMerkleTree::set 999.7±7.28ns 1000.2±9.79ns +0.05%

Copy link

Benchmark for 1820ead

Click to view benchmark
Test Base PR %
FullMerkleTree::::full_height_gen 13.3±0.09ms 13.5±0.14ms +1.50%
OptimalMerkleTree::::full_height_gen 580.3±2.62µs 583.2±5.41µs +0.50%
Pmtree::compute_root 0.0±0.00ns 0.0±0.00ns NaN%
Pmtree::get 541.7±3.88ns 383.7±11.20ns -29.17%
Pmtree::get_empty_leaves_indices 9.0±0.07ns 8.7±0.14ns -3.33%
Pmtree::get_subtree_root 654.0±3.85ns 540.0±7.28ns -17.43%
Pmtree::override_range 244.8±6.68µs 241.3±5.65µs -1.43%
Pmtree::set 54.7±0.38µs 54.9±1.60µs +0.37%
Pmtree:delete 56.4±8.59µs 54.5±0.38µs -3.37%
Set/FullMerkleTree::::set/1 560.0±6.84µs 557.4±3.48µs -0.46%
Set/FullMerkleTree::::set/10 5.6±0.04ms 5.6±0.01ms 0.00%
Set/FullMerkleTree::::set/100 55.9±0.11ms 56.2±1.64ms +0.54%
Set/FullMerkleTree::::set_range/1 559.6±5.38µs 558.6±3.31µs -0.18%
Set/FullMerkleTree::::set_range/10 761.9±6.29µs 760.7±8.01µs -0.16%
Set/FullMerkleTree::::set_range/100 3.3±0.01ms 3.3±0.03ms 0.00%
Set/OptimalMerkleTree::::set/1 559.6±3.81µs 558.7±4.90µs -0.16%
Set/OptimalMerkleTree::::set/10 5.6±0.01ms 5.6±0.01ms 0.00%
Set/OptimalMerkleTree::::set/100 56.1±0.14ms 56.0±0.21ms -0.18%
Set/OptimalMerkleTree::::set_range/1 559.6±3.94µs 559.2±4.19µs -0.07%
Set/OptimalMerkleTree::::set_range/10 5.6±0.01ms 5.6±0.04ms 0.00%
Set/OptimalMerkleTree::::set_range/100 56.2±0.17ms 56.1±0.47ms -0.18%
vk::vk_from_ark_serialized 1622.4±5.58ns 1649.9±25.49ns +1.70%
zkey::zkey_from_raw 3.4±0.01s 3.4±0.01s 0.00%

Copy link

Benchmark for 1820ead

Click to view benchmark
Test Base PR %
FullMerkleTree::::full_height_gen 13.6±0.09ms 13.6±0.12ms 0.00%
OptimalMerkleTree::::full_height_gen 578.6±7.85µs 580.3±15.19µs +0.29%
Pmtree::compute_root 0.0±0.00ns 0.0±0.00ns NaN%
Pmtree::get 380.1±4.96ns 379.7±3.23ns -0.11%
Pmtree::get_empty_leaves_indices 8.7±0.14ns 8.7±0.13ns 0.00%
Pmtree::get_subtree_root 518.3±7.44ns 513.4±5.62ns -0.95%
Pmtree::override_range 237.2±3.07µs 242.1±6.66µs +2.07%
Pmtree::set 54.9±0.47µs 55.0±1.09µs +0.18%
Pmtree:delete 54.7±0.63µs 54.7±0.42µs 0.00%
Set/FullMerkleTree::::set/1 555.5±3.80µs 558.0±8.57µs +0.45%
Set/FullMerkleTree::::set/10 5.5±0.02ms 5.6±0.07ms +1.82%
Set/FullMerkleTree::::set/100 56.6±0.13ms 55.6±0.15ms -1.77%
Set/FullMerkleTree::::set_range/1 556.3±6.81µs 557.4±12.16µs +0.20%
Set/FullMerkleTree::::set_range/10 770.2±4.83µs 756.7±8.25µs -1.75%
Set/FullMerkleTree::::set_range/100 3.3±0.00ms 3.3±0.03ms 0.00%
Set/OptimalMerkleTree::::set/1 560.6±8.46µs 581.1±2.82µs +3.66%
Set/OptimalMerkleTree::::set/10 5.6±0.04ms 5.6±0.01ms 0.00%
Set/OptimalMerkleTree::::set/100 56.0±0.28ms 58.5±0.90ms +4.46%
Set/OptimalMerkleTree::::set_range/1 559.5±5.65µs 581.8±5.21µs +3.99%
Set/OptimalMerkleTree::::set_range/10 5.6±0.01ms 5.8±0.01ms +3.57%
Set/OptimalMerkleTree::::set_range/100 56.1±0.45ms 58.3±0.20ms +3.92%
arkzkey::arkzkey_from_raw_compressed 339.7±1.16ms 340.2±2.83ms +0.15%
arkzkey::arkzkey_from_raw_uncompressed 6.0±0.00ms 6.1±0.03ms +1.67%
vk::vk_from_ark_serialized 1598.2±6.31ns 1600.0±41.28ns +0.11%
zkey::zkey_from_raw 3.4±0.00s 3.4±0.00s 0.00%

Copy link

Benchmark for c388464

Click to view benchmark
Test Base PR %
FullMerkleTree::compute_root 0.0±0.00ns 0.0±0.00ns NaN%
FullMerkleTree::delete 868.0±12.25ns 874.3±11.89ns +0.73%
FullMerkleTree::get 0.0±0.00ns 0.0±0.00ns NaN%
FullMerkleTree::get_empty_leaves_indices 7.5±0.12ns 7.5±0.08ns 0.00%
FullMerkleTree::get_subtree_root 3.7±0.12ns 3.8±0.09ns +2.70%
FullMerkleTree::override_range 1333.3±8.48ns 1348.5±11.83ns +1.14%
FullMerkleTree::set 875.2±7.44ns 867.2±7.12ns -0.91%
OptimalMerkleTree::compute_root 1020.2±46.80ns 1006.8±12.42ns -1.31%
OptimalMerkleTree::delete 1002.0±10.05ns 1008.6±43.23ns +0.66%
OptimalMerkleTree::get 22.0±0.25ns 21.9±0.40ns -0.45%
OptimalMerkleTree::get_empty_leaves_indices 7.5±0.11ns 7.5±0.10ns 0.00%
OptimalMerkleTree::get_subtree_root 24.0±0.21ns 23.9±0.32ns -0.42%
OptimalMerkleTree::override_range 4.1±0.05µs 4.1±0.22µs 0.00%
OptimalMerkleTree::set 1000.9±8.02ns 1000.4±14.14ns -0.05%

Copy link

Benchmark for c388464

Click to view benchmark
Test Base PR %
FullMerkleTree::::full_height_gen 13.8±0.13ms 13.8±0.20ms 0.00%
OptimalMerkleTree::::full_height_gen 586.2±8.41µs 586.6±5.53µs +0.07%
Pmtree::compute_root 0.0±0.00ns 0.0±0.00ns NaN%
Pmtree::get 381.1±4.41ns 383.6±4.08ns +0.66%
Pmtree::get_empty_leaves_indices 9.2±0.09ns 8.9±0.40ns -3.26%
Pmtree::get_subtree_root 534.6±7.21ns 536.1±4.08ns +0.28%
Pmtree::override_range 246.5±3.81µs 242.1±4.63µs -1.78%
Pmtree::set 54.9±0.61µs 54.7±0.68µs -0.36%
Pmtree:delete 54.9±0.56µs 54.6±0.51µs -0.55%
Set/FullMerkleTree::::set/1 559.0±5.93µs 558.9±6.19µs -0.02%
Set/FullMerkleTree::::set/10 5.6±0.01ms 5.6±0.05ms 0.00%
Set/FullMerkleTree::::set/100 55.8±0.15ms 55.9±1.12ms +0.18%
Set/FullMerkleTree::::set_range/1 557.8±7.00µs 558.5±3.40µs +0.13%
Set/FullMerkleTree::::set_range/10 758.1±5.92µs 760.4±9.10µs +0.30%
Set/FullMerkleTree::::set_range/100 3.3±0.01ms 3.3±0.02ms 0.00%
Set/OptimalMerkleTree::::set/1 568.5±7.78µs 559.7±6.12µs -1.55%
Set/OptimalMerkleTree::::set/10 5.6±0.03ms 5.6±0.14ms 0.00%
Set/OptimalMerkleTree::::set/100 56.1±0.12ms 56.5±0.86ms +0.71%
Set/OptimalMerkleTree::::set_range/1 560.4±6.77µs 559.1±3.39µs -0.23%
Set/OptimalMerkleTree::::set_range/10 5.6±0.02ms 5.6±0.02ms 0.00%
Set/OptimalMerkleTree::::set_range/100 56.0±0.48ms 56.0±0.15ms 0.00%
vk::vk_from_ark_serialized 1626.4±61.68ns 1635.7±12.51ns +0.57%
zkey::zkey_from_raw 3.4±0.00s 3.4±0.01s 0.00%

Copy link

Benchmark for c388464

Click to view benchmark
Test Base PR %
FullMerkleTree::::full_height_gen 13.4±0.07ms 13.1±0.14ms -2.24%
OptimalMerkleTree::::full_height_gen 578.1±4.46µs 576.4±5.29µs -0.29%
Pmtree::compute_root 0.0±0.00ns 0.0±0.00ns NaN%
Pmtree::get 379.2±4.81ns 380.8±8.64ns +0.42%
Pmtree::get_empty_leaves_indices 8.7±0.12ns 8.7±0.10ns 0.00%
Pmtree::get_subtree_root 519.0±45.24ns 530.6±9.99ns +2.24%
Pmtree::override_range 242.4±4.54µs 235.2±4.42µs -2.97%
Pmtree::set 55.1±2.54µs 55.3±3.11µs +0.36%
Pmtree:delete 54.5±0.28µs 54.6±0.60µs +0.18%
Set/FullMerkleTree::::set/1 558.5±18.52µs 555.8±3.57µs -0.48%
Set/FullMerkleTree::::set/10 5.6±0.01ms 5.6±0.19ms 0.00%
Set/FullMerkleTree::::set/100 55.9±2.94ms 56.0±2.09ms +0.18%
Set/FullMerkleTree::::set_range/1 556.0±3.92µs 556.2±4.59µs +0.04%
Set/FullMerkleTree::::set_range/10 757.1±7.68µs 756.4±7.15µs -0.09%
Set/FullMerkleTree::::set_range/100 3.3±0.01ms 3.3±0.01ms 0.00%
Set/OptimalMerkleTree::::set/1 561.1±4.20µs 557.0±5.82µs -0.73%
Set/OptimalMerkleTree::::set/10 5.6±0.02ms 5.6±0.01ms 0.00%
Set/OptimalMerkleTree::::set/100 55.8±0.11ms 55.7±0.18ms -0.18%
Set/OptimalMerkleTree::::set_range/1 561.0±6.35µs 557.4±6.34µs -0.64%
Set/OptimalMerkleTree::::set_range/10 5.6±0.03ms 5.6±0.07ms 0.00%
Set/OptimalMerkleTree::::set_range/100 56.2±0.39ms 55.7±0.11ms -0.89%
arkzkey::arkzkey_from_raw_compressed 342.2±5.48ms 339.7±0.71ms -0.73%
arkzkey::arkzkey_from_raw_uncompressed 6.0±0.01ms 6.1±0.07ms +1.67%
vk::vk_from_ark_serialized 1583.2±9.96ns 1613.9±20.45ns +1.94%
zkey::zkey_from_raw 3.4±0.00s 3.4±0.00s 0.00%

@vinhtc27 vinhtc27 marked this pull request as ready for review February 28, 2025 14:44
Copy link

Benchmark for 1b8f7e6

Click to view benchmark
Test Base PR %
FullMerkleTree::compute_root 0.0±0.00ns 0.0±0.00ns NaN%
FullMerkleTree::delete 876.4±12.44ns 874.9±11.81ns -0.17%
FullMerkleTree::get 0.0±0.00ns 0.0±0.00ns NaN%
FullMerkleTree::get_empty_leaves_indices 7.5±0.07ns 7.5±0.07ns 0.00%
FullMerkleTree::get_subtree_root 3.8±0.20ns 3.8±0.05ns 0.00%
FullMerkleTree::override_range 1344.4±13.78ns 1350.5±22.97ns +0.45%
FullMerkleTree::set 869.2±10.02ns 869.0±9.57ns -0.02%
OptimalMerkleTree::compute_root 1018.7±9.70ns 1009.5±12.62ns -0.90%
OptimalMerkleTree::delete 1004.0±11.89ns 1003.5±8.02ns -0.05%
OptimalMerkleTree::get 21.9±0.17ns 21.9±0.19ns 0.00%
OptimalMerkleTree::get_empty_leaves_indices 7.5±0.12ns 7.5±0.12ns 0.00%
OptimalMerkleTree::get_subtree_root 23.7±0.30ns 23.8±0.32ns +0.42%
OptimalMerkleTree::override_range 4.1±0.04µs 4.1±0.04µs 0.00%
OptimalMerkleTree::set 1002.2±9.57ns 1008.2±26.14ns +0.60%

Copy link

Benchmark for 1b8f7e6

Click to view benchmark
Test Base PR %
FullMerkleTree::::full_height_gen 13.5±0.15ms 13.4±0.09ms -0.74%
OptimalMerkleTree::::full_height_gen 579.7±9.32µs 580.5±4.65µs +0.14%
Pmtree::compute_root 0.0±0.00ns 0.0±0.00ns NaN%
Pmtree::get 374.4±4.72ns 369.5±3.67ns -1.31%
Pmtree::get_empty_leaves_indices 9.0±0.08ns 8.8±0.24ns -2.22%
Pmtree::get_subtree_root 526.8±5.02ns 528.8±7.86ns +0.38%
Pmtree::override_range 237.7±3.92µs 236.5±6.42µs -0.50%
Pmtree::set 54.9±1.29µs 55.0±0.43µs +0.18%
Pmtree:delete 54.6±0.34µs 55.4±1.41µs +1.47%
Set/FullMerkleTree::::set/1 558.3±4.15µs 558.9±6.34µs +0.11%
Set/FullMerkleTree::::set/10 5.6±0.02ms 5.6±0.02ms 0.00%
Set/FullMerkleTree::::set/100 56.1±0.16ms 55.9±0.19ms -0.36%
Set/FullMerkleTree::::set_range/1 560.7±5.32µs 559.4±4.44µs -0.23%
Set/FullMerkleTree::::set_range/10 763.0±4.69µs 761.0±6.40µs -0.26%
Set/FullMerkleTree::::set_range/100 3.3±0.13ms 3.3±0.01ms 0.00%
Set/OptimalMerkleTree::::set/1 560.4±5.81µs 559.8±6.05µs -0.11%
Set/OptimalMerkleTree::::set/10 5.6±0.01ms 5.6±0.02ms 0.00%
Set/OptimalMerkleTree::::set/100 56.1±0.08ms 56.0±0.16ms -0.18%
Set/OptimalMerkleTree::::set_range/1 558.5±4.22µs 561.8±10.56µs +0.59%
Set/OptimalMerkleTree::::set_range/10 5.6±0.01ms 5.6±0.01ms 0.00%
Set/OptimalMerkleTree::::set_range/100 56.0±0.42ms 56.3±1.98ms +0.54%
vk::vk_from_ark_serialized 1619.0±30.81ns 1629.6±68.78ns +0.65%
zkey::zkey_from_raw 3.4±0.00s 3.4±0.01s 0.00%

Copy link

Benchmark for 1b8f7e6

Click to view benchmark
Test Base PR %
FullMerkleTree::::full_height_gen 13.3±0.17ms 13.3±0.15ms 0.00%
OptimalMerkleTree::::full_height_gen 577.6±4.80µs 572.7±4.85µs -0.85%
Pmtree::compute_root 0.0±0.00ns 0.0±0.00ns NaN%
Pmtree::get 378.0±5.42ns 383.0±7.65ns +1.32%
Pmtree::get_empty_leaves_indices 8.7±0.08ns 9.2±0.10ns +5.75%
Pmtree::get_subtree_root 521.4±7.19ns 542.6±3.74ns +4.07%
Pmtree::override_range 234.7±5.77µs 232.8±3.76µs -0.81%
Pmtree::set 54.8±1.18µs 54.2±2.36µs -1.09%
Pmtree:delete 54.3±0.54µs 54.4±0.85µs +0.18%
Set/FullMerkleTree::::set/1 555.9±4.88µs 550.4±2.57µs -0.99%
Set/FullMerkleTree::::set/10 5.5±0.02ms 5.5±0.23ms 0.00%
Set/FullMerkleTree::::set/100 55.5±0.05ms 55.2±0.60ms -0.54%
Set/FullMerkleTree::::set_range/1 554.9±4.10µs 552.6±2.82µs -0.41%
Set/FullMerkleTree::::set_range/10 754.1±2.85µs 749.6±5.50µs -0.60%
Set/FullMerkleTree::::set_range/100 3.3±0.02ms 3.2±0.00ms -3.03%
Set/OptimalMerkleTree::::set/1 558.1±6.05µs 552.7±4.17µs -0.97%
Set/OptimalMerkleTree::::set/10 5.6±0.05ms 5.5±0.01ms -1.79%
Set/OptimalMerkleTree::::set/100 55.9±0.13ms 55.2±0.12ms -1.25%
Set/OptimalMerkleTree::::set_range/1 557.9±3.56µs 552.4±3.21µs -0.99%
Set/OptimalMerkleTree::::set_range/10 5.6±0.02ms 5.5±0.01ms -1.79%
Set/OptimalMerkleTree::::set_range/100 55.8±0.15ms 55.3±0.23ms -0.90%
arkzkey::arkzkey_from_raw_compressed 339.3±0.18ms 342.9±7.60ms +1.06%
arkzkey::arkzkey_from_raw_uncompressed 6.0±0.01ms 6.0±0.04ms 0.00%
vk::vk_from_ark_serialized 1650.8±17.26ns 1588.4±61.47ns -3.78%
zkey::zkey_from_raw 3.4±0.01s 3.4±0.00s 0.00%

@vinhtc27 vinhtc27 requested a review from seemenkina February 28, 2025 15:14
Copy link
Collaborator

@seemenkina seemenkina left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, just add a comments near Vec::with_capacity(...) on how the length was calculated if there are any numbers in there


// We store each element
input.iter().for_each(|el| bytes.extend(fr_to_bytes_le(el)));
let mut bytes = Vec::with_capacity(8 + input.len() * fr_byte_size());
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

could you please add comment why such size. Just for code readability in the future


Ok(bytes)
}
let mut bytes = Vec::with_capacity(8 + input.len());
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same as above

pub fn serialize_witness(rln_witness: &RLNWitnessInput) -> Result<Vec<u8>> {
message_id_range_check(&rln_witness.message_id, &rln_witness.user_message_limit)?;

let mut serialized: Vec<u8> = Vec::new();
let mut serialized: Vec<u8> = Vec::with_capacity(
fr_byte_size() * (5 + rln_witness.path_elements.len())
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also good idea to describe how we calculate length

Copy link

github-actions bot commented Mar 6, 2025

Benchmark for a6114ee

Click to view benchmark
Test Base PR %
FullMerkleTree::compute_root 0.0±0.00ns 0.0±0.00ns NaN%
FullMerkleTree::delete 875.3±10.18ns 869.9±13.74ns -0.62%
FullMerkleTree::get 0.0±0.00ns 0.0±0.00ns NaN%
FullMerkleTree::get_empty_leaves_indices 7.5±0.07ns 7.5±0.12ns 0.00%
FullMerkleTree::get_subtree_root 3.8±0.09ns 3.8±0.12ns 0.00%
FullMerkleTree::override_range 1343.0±9.71ns 1331.7±7.68ns -0.84%
FullMerkleTree::set 869.8±10.88ns 877.4±30.92ns +0.87%
OptimalMerkleTree::compute_root 1016.6±29.13ns 1008.7±13.64ns -0.78%
OptimalMerkleTree::delete 1005.7±9.23ns 1011.1±46.74ns +0.54%
OptimalMerkleTree::get 23.0±0.44ns 24.1±0.39ns +4.78%
OptimalMerkleTree::get_empty_leaves_indices 7.5±0.05ns 7.6±0.64ns +1.33%
OptimalMerkleTree::get_subtree_root 23.7±0.13ns 24.0±0.19ns +1.27%
OptimalMerkleTree::override_range 4.1±0.03µs 4.1±0.04µs 0.00%
OptimalMerkleTree::set 1003.0±6.17ns 1021.8±59.09ns +1.87%

Copy link

github-actions bot commented Mar 6, 2025

Benchmark for a6114ee

Click to view benchmark
Test Base PR %
FullMerkleTree::::full_height_gen 13.2±0.10ms 13.3±0.13ms +0.76%
OptimalMerkleTree::::full_height_gen 580.0±7.65µs 578.5±4.10µs -0.26%
Pmtree::compute_root 0.0±0.00ns 0.0±0.00ns NaN%
Pmtree::get 389.2±2.90ns 368.9±4.68ns -5.22%
Pmtree::get_empty_leaves_indices 9.0±0.12ns 8.8±0.21ns -2.22%
Pmtree::get_subtree_root 517.0±7.55ns 539.6±6.81ns +4.37%
Pmtree::override_range 237.2±5.59µs 236.2±5.30µs -0.42%
Pmtree::set 55.2±0.38µs 55.1±0.54µs -0.18%
Pmtree:delete 54.7±0.52µs 55.1±0.85µs +0.73%
Set/FullMerkleTree::::set/1 557.8±5.38µs 557.2±6.88µs -0.11%
Set/FullMerkleTree::::set/10 5.6±0.02ms 5.6±0.02ms 0.00%
Set/FullMerkleTree::::set/100 55.9±0.10ms 56.0±1.87ms +0.18%
Set/FullMerkleTree::::set_range/1 557.1±4.23µs 559.0±6.03µs +0.34%
Set/FullMerkleTree::::set_range/10 761.3±4.66µs 758.0±2.69µs -0.43%
Set/FullMerkleTree::::set_range/100 3.3±0.01ms 3.3±0.13ms 0.00%
Set/OptimalMerkleTree::::set/1 563.4±6.53µs 563.6±4.77µs +0.04%
Set/OptimalMerkleTree::::set/10 5.6±0.03ms 5.6±0.10ms 0.00%
Set/OptimalMerkleTree::::set/100 56.4±0.16ms 56.4±2.17ms 0.00%
Set/OptimalMerkleTree::::set_range/1 564.7±20.09µs 560.7±4.13µs -0.71%
Set/OptimalMerkleTree::::set_range/10 5.6±0.01ms 5.6±0.01ms 0.00%
Set/OptimalMerkleTree::::set_range/100 56.1±0.33ms 56.1±0.24ms 0.00%
vk::vk_from_ark_serialized 1607.7±9.14ns 1605.9±62.07ns -0.11%
zkey::zkey_from_raw 3.4±0.01s 3.5±0.02s +2.94%

Copy link

github-actions bot commented Mar 6, 2025

Benchmark for a6114ee

Click to view benchmark
Test Base PR %
FullMerkleTree::::full_height_gen 13.6±0.43ms 13.5±0.12ms -0.74%
OptimalMerkleTree::::full_height_gen 584.1±6.24µs 579.6±9.47µs -0.77%
Pmtree::compute_root 0.0±0.00ns 0.0±0.00ns NaN%
Pmtree::get 380.5±5.30ns 376.6±4.83ns -1.02%
Pmtree::get_empty_leaves_indices 8.7±0.11ns 9.0±0.10ns +3.45%
Pmtree::get_subtree_root 530.0±7.83ns 531.5±9.01ns +0.28%
Pmtree::override_range 249.1±5.21µs 238.5±5.23µs -4.26%
Pmtree::set 54.8±0.49µs 53.4±0.42µs -2.55%
Pmtree:delete 54.4±0.35µs 53.7±1.51µs -1.29%
Set/FullMerkleTree::::set/1 557.6±7.30µs 551.4±5.66µs -1.11%
Set/FullMerkleTree::::set/10 5.6±0.01ms 5.5±0.11ms -1.79%
Set/FullMerkleTree::::set/100 55.7±0.13ms 55.7±0.15ms 0.00%
Set/FullMerkleTree::::set_range/1 555.3±4.95µs 553.5±6.51µs -0.32%
Set/FullMerkleTree::::set_range/10 760.9±5.48µs 749.2±11.23µs -1.54%
Set/FullMerkleTree::::set_range/100 3.3±0.01ms 3.3±0.10ms 0.00%
Set/OptimalMerkleTree::::set/1 560.7±10.55µs 552.7±4.34µs -1.43%
Set/OptimalMerkleTree::::set/10 5.6±0.01ms 5.5±0.02ms -1.79%
Set/OptimalMerkleTree::::set/100 55.7±0.13ms 55.5±1.48ms -0.36%
Set/OptimalMerkleTree::::set_range/1 555.8±5.05µs 551.5±4.62µs -0.77%
Set/OptimalMerkleTree::::set_range/10 5.6±0.03ms 5.5±0.14ms -1.79%
Set/OptimalMerkleTree::::set_range/100 56.0±2.21ms 55.2±0.13ms -1.43%
arkzkey::arkzkey_from_raw_compressed 340.4±2.67ms 341.0±3.09ms +0.18%
arkzkey::arkzkey_from_raw_uncompressed 6.0±0.01ms 6.1±0.07ms +1.67%
vk::vk_from_ark_serialized 1610.6±6.43ns 1579.3±17.77ns -1.94%
zkey::zkey_from_raw 3.5±0.01s 3.4±0.00s -2.86%

@vinhtc27 vinhtc27 merged commit 9d8372b into master Mar 6, 2025
13 checks passed
@vinhtc27 vinhtc27 deleted the vinhtc27/issue-279-review-util-func branch March 6, 2025 11:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Review necessity of serialization utility functions
2 participants