Skip to content

feat: implement multi-message-id feature#375

Merged
vinhtc27 merged 72 commits intomasterfrom
multi-message-id-burn
Mar 16, 2026
Merged

feat: implement multi-message-id feature#375
vinhtc27 merged 72 commits intomasterfrom
multi-message-id-burn

Conversation

@vinhtc27
Copy link
Contributor

@vinhtc27 vinhtc27 commented Feb 5, 2026

Description

  • Refactored RLNWitnessInput and RLNProofValues into struct/enum (SingleV1 / MultiV1) to cleanly support both standard and multi-message-id modes.
  • Added version byte retrieval methods for RLNProof and RLNWitnessInput.
  • Enhanced ProtocolError with new variants: EmptyMessageIds, DuplicateMessageIds, MissingSelectorUsed, NoActiveSelectorUsed, and FieldLengthMismatch.
  • Read MAX_OUT value directly from the graph file instead of hardcoding.
  • Added checks for message_ids, selector_used, path_elements, identity_path_index in proof gen api.
  • Extended FFI (C/Nim/Rust) and WASM bindings with multi-message-id support.
  • Added multi-message-id CLI example and updated existing examples.
  • Added multi-message-id circuit resources (max_out_4) for tree depth 10 and 20; removed tree depth 16 and 24.
  • Updated CI with clippy checks and nightly release for the multi-message-id feature flag.
  • Version bump for dependencies in all modules.
  • Exposed compute_id_secret as a public API and updated README on how to use the slashing cross feature.

Testing

  • Added multi-message-id test cases for FFI, protocol, and public API.
  • Added compatibility tests to verify new witness/proof types against old serialized data.

Checklist

  • I have run the CI coverage report. Add the run-coverage label to this PR to enable it.

@vinhtc27 vinhtc27 force-pushed the multi-message-id-burn branch from 7947444 to ca42628 Compare February 6, 2026 13:34
@vinhtc27 vinhtc27 marked this pull request as ready for review February 6, 2026 15:17
@github-actions
Copy link

github-actions bot commented Feb 6, 2026

Benchmark for 836d7b7

Click to view benchmark
Test Base PR %
FullMerkleTree::delete 17.2±0.21µs 17.3±0.23µs +0.58%
FullMerkleTree::get 0.8±0.01ns 0.8±0.00ns 0.00%
FullMerkleTree::get_empty_leaves_indices 980.9±7.44µs 985.2±28.16µs +0.44%
FullMerkleTree::get_subtree_root 11.8±0.33ns 11.7±0.07ns -0.85%
FullMerkleTree::override_range 2.3±0.11ms 2.3±0.07ms 0.00%
FullMerkleTree::set 8.6±0.11µs 8.7±0.28µs +1.16%
OptimalMerkleTree::delete 19.9±0.20µs 20.1±0.50µs +1.01%
OptimalMerkleTree::get 50.2±0.28ns 51.6±0.59ns +2.79%
OptimalMerkleTree::get_empty_leaves_indices 982.5±16.13µs 985.7±31.42µs +0.33%
OptimalMerkleTree::get_subtree_root 25.9±0.22ns 25.9±0.35ns 0.00%
OptimalMerkleTree::override_range 3.8±0.29ms 5.2±0.31ms +36.84%
OptimalMerkleTree::set 10.0±0.18µs 10.1±0.13µs +1.00%
poseidon Fr/Array hash/10 138.8±0.25µs 70.3 KElem/sec N/A N/A
poseidon Fr/Array hash/100 1489.0±3.08µs 65.6 KElem/sec N/A N/A
poseidon Fr/Array hash/1000 15.0±0.02ms 65.0 KElem/sec N/A N/A
poseidon Fr/Single hash 13.7±0.02µs 69.4 MElem/sec N/A N/A

@github-actions
Copy link

github-actions bot commented Feb 6, 2026

Benchmark for 836d7b7

Click to view benchmark
Test Base PR %
FullMerkleTree::::full_depth_gen 13.5±0.13ms 13.2±0.59ms -2.22%
OptimalMerkleTree::::full_depth_gen 793.3±4.37µs 805.9±5.03µs +1.59%
Pmtree::delete 52.3±7.92µs 50.6±0.45µs -3.25%
Pmtree::get 358.0±6.15ns 368.8±16.56ns +3.02%
Pmtree::get_empty_leaves_indices 5.0±0.07ns 8.4±0.08ns +68.00%
Pmtree::get_subtree_root 498.1±7.36ns 498.7±7.54ns +0.12%
Pmtree::override_range 99.8±1.88µs 101.0±2.01µs +1.20%
Pmtree::set 50.9±0.64µs 50.8±1.30µs -0.20%
Set/FullMerkleTree::::set/1 515.5±4.30µs 521.2±2.80µs +1.11%
Set/FullMerkleTree::::set/10 5.2±0.01ms 5.2±0.01ms 0.00%
Set/FullMerkleTree::::set/100 51.8±0.07ms 52.7±1.95ms +1.74%
Set/FullMerkleTree::::set_range/1 515.3±2.18µs 521.8±6.12µs +1.26%
Set/FullMerkleTree::::set_range/10 700.7±4.60µs 713.5±12.92µs +1.83%
Set/FullMerkleTree::::set_range/100 1874.6±23.29µs 1891.1±22.63µs +0.88%
Set/OptimalMerkleTree::::set/1 516.5±1.96µs 519.8±3.73µs +0.64%
Set/OptimalMerkleTree::::set/10 5.1±0.01ms 5.2±0.01ms +1.96%
Set/OptimalMerkleTree::::set/100 52.0±0.07ms 52.4±0.39ms +0.77%
Set/OptimalMerkleTree::::set_range/1 516.7±4.79µs 521.6±5.77µs +0.95%
Set/OptimalMerkleTree::::set_range/10 715.0±10.64µs 718.9±8.23µs +0.55%
Set/OptimalMerkleTree::::set_range/100 1849.1±34.86µs 1863.4±54.08µs +0.77%

@github-actions
Copy link

github-actions bot commented Feb 6, 2026

Benchmark for 204b974

Click to view benchmark
Test Base PR %
FullMerkleTree::delete 19.3±0.23µs 19.4±0.31µs +0.52%
FullMerkleTree::get 0.9±0.00ns 0.9±0.00ns 0.00%
FullMerkleTree::get_empty_leaves_indices 1109.5±6.90µs 1111.5±23.48µs +0.18%
FullMerkleTree::get_subtree_root 12.3±0.13ns 12.3±0.14ns 0.00%
FullMerkleTree::override_range 2.5±0.08ms 2.5±0.10ms 0.00%
FullMerkleTree::set 9.7±0.35µs 9.7±0.16µs 0.00%
OptimalMerkleTree::delete 22.5±0.97µs 22.4±0.33µs -0.44%
OptimalMerkleTree::get 35.6±0.58ns 35.7±0.99ns +0.28%
OptimalMerkleTree::get_empty_leaves_indices 1111.3±24.58µs 1111.8±25.77µs +0.04%
OptimalMerkleTree::get_subtree_root 25.1±0.29ns 25.2±0.39ns +0.40%
OptimalMerkleTree::override_range 4.2±0.05ms 4.3±0.38ms +2.38%
OptimalMerkleTree::set 11.3±0.19µs 11.4±0.23µs +0.88%
poseidon Fr/Array hash/10 152.3±0.19µs 64.1 KElem/sec N/A N/A
poseidon Fr/Array hash/100 1581.0±5.22µs 61.8 KElem/sec N/A N/A
poseidon Fr/Array hash/1000 16.8±0.04ms 58.2 KElem/sec N/A N/A
poseidon Fr/Single hash 15.2±0.02µs 62.7 MElem/sec N/A N/A

@github-actions
Copy link

github-actions bot commented Feb 6, 2026

Benchmark for 204b974

Click to view benchmark
Test Base PR %
FullMerkleTree::::full_depth_gen 13.0±0.13ms 14.1±0.09ms +8.46%
OptimalMerkleTree::::full_depth_gen 799.9±14.87µs 789.0±8.33µs -1.36%
Pmtree::delete 50.9±0.52µs 50.7±0.48µs -0.39%
Pmtree::get 354.5±5.92ns 366.6±12.35ns +3.41%
Pmtree::get_empty_leaves_indices 5.0±0.09ns 8.4±0.09ns +68.00%
Pmtree::get_subtree_root 494.9±4.51ns 512.7±13.51ns +3.60%
Pmtree::override_range 99.8±2.14µs 99.4±0.80µs -0.40%
Pmtree::set 51.1±1.48µs 50.7±0.62µs -0.78%
Set/FullMerkleTree::::set/1 513.0±3.82µs 522.9±11.82µs +1.93%
Set/FullMerkleTree::::set/10 5.2±0.13ms 5.2±0.02ms 0.00%
Set/FullMerkleTree::::set/100 51.7±0.21ms 52.4±0.06ms +1.35%
Set/FullMerkleTree::::set_range/1 518.5±13.22µs 520.8±2.81µs +0.44%
Set/FullMerkleTree::::set_range/10 711.9±53.76µs 712.8±6.91µs +0.13%
Set/FullMerkleTree::::set_range/100 1878.0±27.94µs 1895.6±39.26µs +0.94%
Set/OptimalMerkleTree::::set/1 516.5±3.53µs 522.8±9.37µs +1.22%
Set/OptimalMerkleTree::::set/10 5.1±0.01ms 5.2±0.17ms +1.96%
Set/OptimalMerkleTree::::set/100 51.8±0.37ms 52.5±0.12ms +1.35%
Set/OptimalMerkleTree::::set_range/1 516.5±3.57µs 523.4±11.84µs +1.34%
Set/OptimalMerkleTree::::set_range/10 710.9±9.59µs 717.1±5.47µs +0.87%
Set/OptimalMerkleTree::::set_range/100 1861.0±36.45µs 1858.6±30.40µs -0.13%

@github-actions
Copy link

github-actions bot commented Feb 6, 2026

Benchmark for 08586b5

Click to view benchmark
Test Base PR %
FullMerkleTree::delete 17.3±0.28µs 17.2±0.26µs -0.58%
FullMerkleTree::get 0.8±0.01ns 0.8±0.01ns 0.00%
FullMerkleTree::get_empty_leaves_indices 991.1±46.60µs 985.5±25.73µs -0.57%
FullMerkleTree::get_subtree_root 11.7±0.17ns 11.8±0.39ns +0.85%
FullMerkleTree::override_range 2.3±0.08ms 2.3±0.09ms 0.00%
FullMerkleTree::set 8.6±0.29µs 8.6±0.14µs 0.00%
OptimalMerkleTree::delete 20.5±0.84µs 20.2±0.22µs -1.46%
OptimalMerkleTree::get 50.8±0.61ns 50.8±1.23ns 0.00%
OptimalMerkleTree::get_empty_leaves_indices 989.5±30.03µs 988.6±25.99µs -0.09%
OptimalMerkleTree::get_subtree_root 25.9±0.39ns 26.2±1.12ns +1.16%
OptimalMerkleTree::override_range 5.5±0.26ms 5.6±0.39ms +1.82%
OptimalMerkleTree::set 10.4±0.65µs 10.3±0.29µs -0.96%
poseidon Fr/Array hash/10 139.1±1.51µs 70.2 KElem/sec N/A N/A
poseidon Fr/Array hash/100 1515.3±68.97µs 64.4 KElem/sec N/A N/A
poseidon Fr/Array hash/1000 15.0±0.01ms 65.0 KElem/sec N/A N/A
poseidon Fr/Single hash 13.9±0.37µs 68.4 MElem/sec N/A N/A

@github-actions
Copy link

github-actions bot commented Feb 6, 2026

Benchmark for 4dde7df

Click to view benchmark
Test Base PR %
FullMerkleTree::delete 17.1±0.33µs 17.1±0.33µs 0.00%
FullMerkleTree::get 0.8±0.01ns 0.8±0.03ns 0.00%
FullMerkleTree::get_empty_leaves_indices 1062.4±78.67µs 1025.8±9.63µs -3.45%
FullMerkleTree::get_subtree_root 12.6±0.26ns 12.6±0.27ns 0.00%
FullMerkleTree::override_range 2.7±0.03ms 2.7±0.03ms 0.00%
FullMerkleTree::set 8.5±0.16µs 8.6±0.19µs +1.18%
OptimalMerkleTree::delete 19.9±0.39µs 19.9±0.72µs 0.00%
OptimalMerkleTree::get 37.6±0.98ns 35.2±1.67ns -6.38%
OptimalMerkleTree::get_empty_leaves_indices 1034.3±47.94µs 1025.5±8.25µs -0.85%
OptimalMerkleTree::get_subtree_root 28.3±0.73ns 27.9±0.20ns -1.41%
OptimalMerkleTree::override_range 5.7±0.30ms 5.7±0.29ms 0.00%
OptimalMerkleTree::set 10.3±0.26µs 10.2±0.32µs -0.97%
poseidon Fr/Array hash/10 136.6±0.21µs 71.5 KElem/sec N/A N/A
poseidon Fr/Array hash/100 1469.6±3.90µs 66.5 KElem/sec N/A N/A
poseidon Fr/Array hash/1000 14.9±0.06ms 65.6 KElem/sec N/A N/A
poseidon Fr/Single hash 13.6±0.03µs 70.3 MElem/sec N/A N/A

@github-actions
Copy link

github-actions bot commented Feb 6, 2026

Benchmark for 08586b5

Click to view benchmark
Test Base PR %
FullMerkleTree::::full_depth_gen 12.6±0.14ms 13.6±0.12ms +7.94%
OptimalMerkleTree::::full_depth_gen 784.3±5.87µs 787.1±8.98µs +0.36%
Pmtree::delete 51.1±0.31µs 50.7±0.52µs -0.78%
Pmtree::get 356.5±6.02ns 357.6±4.80ns +0.31%
Pmtree::get_empty_leaves_indices 5.0±0.07ns 8.4±0.11ns +68.00%
Pmtree::get_subtree_root 498.9±14.68ns 500.2±9.13ns +0.26%
Pmtree::override_range 102.2±0.74µs 101.5±0.95µs -0.68%
Pmtree::set 50.9±0.56µs 50.8±0.80µs -0.20%
Set/FullMerkleTree::::set/1 516.9±4.30µs 520.1±1.94µs +0.62%
Set/FullMerkleTree::::set/10 5.2±0.01ms 5.2±0.02ms 0.00%
Set/FullMerkleTree::::set/100 51.6±0.16ms 52.3±0.11ms +1.36%
Set/FullMerkleTree::::set_range/1 511.5±4.50µs 520.8±3.61µs +1.82%
Set/FullMerkleTree::::set_range/10 703.8±3.58µs 711.7±4.99µs +1.12%
Set/FullMerkleTree::::set_range/100 1891.0±24.20µs 1900.7±28.84µs +0.51%
Set/OptimalMerkleTree::::set/1 519.0±3.60µs 520.0±5.45µs +0.19%
Set/OptimalMerkleTree::::set/10 5.2±0.01ms 5.2±0.01ms 0.00%
Set/OptimalMerkleTree::::set/100 52.2±0.10ms 52.4±0.11ms +0.38%
Set/OptimalMerkleTree::::set_range/1 517.7±2.62µs 521.2±4.63µs +0.68%
Set/OptimalMerkleTree::::set_range/10 715.5±5.36µs 721.0±8.36µs +0.77%
Set/OptimalMerkleTree::::set_range/100 1870.7±41.61µs 1867.3±34.83µs -0.18%

@github-actions
Copy link

github-actions bot commented Feb 6, 2026

Benchmark for 4dde7df

Click to view benchmark
Test Base PR %
FullMerkleTree::::full_depth_gen 12.6±0.19ms 12.8±0.15ms +1.59%
OptimalMerkleTree::::full_depth_gen 780.5±6.95µs 785.2±5.61µs +0.60%
Pmtree::delete 50.9±0.33µs 50.7±0.71µs -0.39%
Pmtree::get 359.6±7.98ns 365.5±23.47ns +1.64%
Pmtree::get_empty_leaves_indices 5.0±0.08ns 8.4±0.14ns +68.00%
Pmtree::get_subtree_root 500.0±9.38ns 503.4±9.22ns +0.68%
Pmtree::override_range 101.8±0.82µs 101.8±0.64µs 0.00%
Pmtree::set 51.4±1.01µs 50.6±0.43µs -1.56%
Set/FullMerkleTree::::set/1 516.2±4.50µs 520.6±3.42µs +0.85%
Set/FullMerkleTree::::set/10 5.2±0.07ms 5.2±0.03ms 0.00%
Set/FullMerkleTree::::set/100 51.8±0.11ms 52.4±0.15ms +1.16%
Set/FullMerkleTree::::set_range/1 516.3±3.75µs 520.5±5.19µs +0.81%
Set/FullMerkleTree::::set_range/10 702.6±4.81µs 711.3±3.21µs +1.24%
Set/FullMerkleTree::::set_range/100 1887.1±23.90µs 1905.1±30.46µs +0.95%
Set/OptimalMerkleTree::::set/1 517.4±3.23µs 521.8±2.46µs +0.85%
Set/OptimalMerkleTree::::set/10 5.2±0.02ms 5.2±0.01ms 0.00%
Set/OptimalMerkleTree::::set/100 51.9±0.20ms 52.6±0.55ms +1.35%
Set/OptimalMerkleTree::::set_range/1 518.8±4.58µs 521.6±3.67µs +0.54%
Set/OptimalMerkleTree::::set_range/10 713.2±13.43µs 724.6±8.38µs +1.60%
Set/OptimalMerkleTree::::set_range/100 1860.0±39.20µs 1869.1±41.75µs +0.49%

@vinhtc27 vinhtc27 added the run-coverage Runs coverage report in CI once added to the open PR. label Feb 6, 2026
@github-actions
Copy link

github-actions bot commented Feb 6, 2026

Benchmark for b875d2f

Click to view benchmark
Test Base PR %
FullMerkleTree::delete 17.2±0.20µs 17.2±0.23µs 0.00%
FullMerkleTree::get 0.8±0.01ns 0.8±0.00ns 0.00%
FullMerkleTree::get_empty_leaves_indices 981.1±7.95µs 980.8±7.31µs -0.03%
FullMerkleTree::get_subtree_root 11.7±0.18ns 11.7±0.07ns 0.00%
FullMerkleTree::override_range 2.3±0.10ms 2.3±0.09ms 0.00%
FullMerkleTree::set 8.6±0.12µs 8.6±0.13µs 0.00%
OptimalMerkleTree::delete 20.0±0.28µs 20.4±0.35µs +2.00%
OptimalMerkleTree::get 50.4±0.37ns 50.5±0.45ns +0.20%
OptimalMerkleTree::get_empty_leaves_indices 981.2±7.17µs 981.4±12.19µs +0.02%
OptimalMerkleTree::get_subtree_root 26.0±0.23ns 25.8±0.39ns -0.77%
OptimalMerkleTree::override_range 4.8±0.28ms 4.8±0.44ms 0.00%
OptimalMerkleTree::set 10.2±0.18µs 10.3±0.15µs +0.98%
poseidon Fr/Array hash/10 138.8±0.15µs 70.4 KElem/sec N/A N/A
poseidon Fr/Array hash/100 1489.2±2.35µs 65.6 KElem/sec N/A N/A
poseidon Fr/Array hash/1000 15.0±0.03ms 65.0 KElem/sec N/A N/A
poseidon Fr/Single hash 13.7±0.02µs 69.4 MElem/sec N/A N/A

@github-actions
Copy link

github-actions bot commented Feb 6, 2026

Benchmark for b875d2f

Click to view benchmark
Test Base PR %
FullMerkleTree::::full_depth_gen 11.9±0.10ms 13.7±0.12ms +15.13%
OptimalMerkleTree::::full_depth_gen 799.1±4.64µs 806.8±12.48µs +0.96%
Pmtree::delete 50.7±0.31µs 50.7±0.57µs 0.00%
Pmtree::get 351.0±5.36ns 360.8±22.59ns +2.79%
Pmtree::get_empty_leaves_indices 5.0±0.08ns 8.4±0.08ns +68.00%
Pmtree::get_subtree_root 495.2±6.93ns 510.9±4.80ns +3.17%
Pmtree::override_range 99.3±1.10µs 99.4±1.23µs +0.10%
Pmtree::set 50.7±0.28µs 50.7±0.51µs 0.00%
Set/FullMerkleTree::::set/1 511.0±5.15µs 520.2±2.41µs +1.80%
Set/FullMerkleTree::::set/10 5.2±0.01ms 5.2±0.02ms 0.00%
Set/FullMerkleTree::::set/100 51.8±0.09ms 52.1±0.11ms +0.58%
Set/FullMerkleTree::::set_range/1 515.4±4.56µs 519.8±3.63µs +0.85%
Set/FullMerkleTree::::set_range/10 702.4±5.86µs 710.9±2.85µs +1.21%
Set/FullMerkleTree::::set_range/100 1874.0±26.84µs 1889.1±26.90µs +0.81%
Set/OptimalMerkleTree::::set/1 517.5±7.85µs 519.2±4.10µs +0.33%
Set/OptimalMerkleTree::::set/10 5.2±0.01ms 5.2±0.01ms 0.00%
Set/OptimalMerkleTree::::set/100 51.9±0.06ms 52.3±0.06ms +0.77%
Set/OptimalMerkleTree::::set_range/1 511.6±4.76µs 521.2±2.31µs +1.88%
Set/OptimalMerkleTree::::set_range/10 715.5±7.08µs 724.1±5.20µs +1.20%
Set/OptimalMerkleTree::::set_range/100 1857.3±42.58µs 1861.3±48.68µs +0.22%

@github-actions
Copy link

github-actions bot commented Feb 6, 2026

Coverage report uploaded. Download HTML Report

@vinhtc27 vinhtc27 force-pushed the multi-message-id-burn branch from 2f3ba9f to aa47df7 Compare February 9, 2026 09:23
@vinhtc27 vinhtc27 changed the title feat: multi message id burn feat: implement multi-message-id feature Feb 9, 2026
@github-actions
Copy link

github-actions bot commented Feb 9, 2026

Benchmark for 2fe5b69

Click to view benchmark
Test Base PR %
FullMerkleTree::delete 17.1±0.29µs 17.0±0.33µs -0.58%
FullMerkleTree::get 0.8±0.01ns 0.8±0.01ns 0.00%
FullMerkleTree::get_empty_leaves_indices 1027.8±31.14µs 1024.3±25.93µs -0.34%
FullMerkleTree::get_subtree_root 12.6±0.09ns 12.5±0.10ns -0.79%
FullMerkleTree::override_range 2.7±0.03ms 2.6±0.03ms -3.70%
FullMerkleTree::set 8.6±0.21µs 8.5±0.21µs -1.16%
OptimalMerkleTree::delete 19.9±0.47µs 19.8±0.41µs -0.50%
OptimalMerkleTree::get 35.2±0.54ns 37.5±1.36ns +6.53%
OptimalMerkleTree::get_empty_leaves_indices 1023.6±28.68µs 1022.8±12.01µs -0.08%
OptimalMerkleTree::get_subtree_root 28.1±0.41ns 28.0±0.63ns -0.36%
OptimalMerkleTree::override_range 5.2±0.43ms 5.1±0.07ms -1.92%
OptimalMerkleTree::set 10.1±0.24µs 10.1±0.39µs 0.00%
poseidon Fr/Array hash/10 137.0±0.90µs 71.3 KElem/sec N/A N/A
poseidon Fr/Array hash/100 1474.2±1.89µs 66.2 KElem/sec N/A N/A
poseidon Fr/Array hash/1000 14.9±0.02ms 65.5 KElem/sec N/A N/A
poseidon Fr/Single hash 13.6±0.04µs 70.3 MElem/sec N/A N/A

@github-actions
Copy link

github-actions bot commented Feb 9, 2026

Benchmark for 2fe5b69

Click to view benchmark
Test Base PR %
FullMerkleTree::::full_depth_gen 13.0±0.13ms 13.7±0.21ms +5.38%
OptimalMerkleTree::::full_depth_gen 801.7±20.52µs 797.7±5.73µs -0.50%
Pmtree::delete 50.7±0.57µs 51.0±0.38µs +0.59%
Pmtree::get 376.9±10.16ns 362.3±8.24ns -3.87%
Pmtree::get_empty_leaves_indices 5.0±0.07ns 8.7±0.12ns +74.00%
Pmtree::get_subtree_root 503.8±9.12ns 504.8±15.10ns +0.20%
Pmtree::override_range 102.2±2.92µs 101.9±0.82µs -0.29%
Pmtree::set 53.1±9.55µs 50.6±0.48µs -4.71%
Set/FullMerkleTree::::set/1 513.4±5.61µs 521.4±12.96µs +1.56%
Set/FullMerkleTree::::set/10 5.2±0.02ms 5.2±0.02ms 0.00%
Set/FullMerkleTree::::set/100 51.9±0.71ms 52.2±0.08ms +0.58%
Set/FullMerkleTree::::set_range/1 514.4±4.95µs 520.0±2.69µs +1.09%
Set/FullMerkleTree::::set_range/10 702.2±5.28µs 725.2±77.23µs +3.28%
Set/FullMerkleTree::::set_range/100 1887.9±25.03µs 1905.8±47.18µs +0.95%
Set/OptimalMerkleTree::::set/1 517.3±4.32µs 521.8±3.00µs +0.87%
Set/OptimalMerkleTree::::set/10 5.2±0.01ms 5.2±0.05ms 0.00%
Set/OptimalMerkleTree::::set/100 52.0±0.57ms 52.3±0.26ms +0.58%
Set/OptimalMerkleTree::::set_range/1 516.5±2.55µs 522.4±7.15µs +1.14%
Set/OptimalMerkleTree::::set_range/10 711.0±6.67µs 719.2±6.55µs +1.15%
Set/OptimalMerkleTree::::set_range/100 1859.6±38.15µs 1865.7±31.14µs +0.33%

@github-actions
Copy link

github-actions bot commented Feb 9, 2026

Coverage report uploaded. Download HTML Report

@github-actions
Copy link

github-actions bot commented Feb 9, 2026

Benchmark for 7622a9c

Click to view benchmark
Test Base PR %
FullMerkleTree::delete 17.2±0.25µs 17.1±0.28µs -0.58%
FullMerkleTree::get 0.8±0.00ns 0.8±0.01ns 0.00%
FullMerkleTree::get_empty_leaves_indices 981.5±7.75µs 982.3±4.41µs +0.08%
FullMerkleTree::get_subtree_root 11.7±0.13ns 11.6±0.15ns -0.85%
FullMerkleTree::override_range 2.3±0.08ms 2.2±0.07ms -4.35%
FullMerkleTree::set 8.6±0.19µs 8.5±0.12µs -1.16%
OptimalMerkleTree::delete 20.1±0.30µs 20.1±0.30µs 0.00%
OptimalMerkleTree::get 50.6±0.77ns 51.4±0.45ns +1.58%
OptimalMerkleTree::get_empty_leaves_indices 983.2±7.65µs 982.6±8.88µs -0.06%
OptimalMerkleTree::get_subtree_root 26.1±0.35ns 25.8±0.38ns -1.15%
OptimalMerkleTree::override_range 5.0±0.27ms 5.4±0.70ms +8.00%
OptimalMerkleTree::set 10.2±0.25µs 10.3±0.17µs +0.98%
poseidon Fr/Array hash/10 138.7±0.25µs 70.4 KElem/sec N/A N/A
poseidon Fr/Array hash/100 1491.1±10.39µs 65.5 KElem/sec N/A N/A
poseidon Fr/Array hash/1000 15.1±0.15ms 64.8 KElem/sec N/A N/A
poseidon Fr/Single hash 13.8±0.03µs 69.3 MElem/sec N/A N/A

@github-actions
Copy link

github-actions bot commented Feb 9, 2026

Benchmark for 7622a9c

Click to view benchmark
Test Base PR %
FullMerkleTree::::full_depth_gen 13.7±0.29ms 12.7±0.18ms -7.30%
OptimalMerkleTree::::full_depth_gen 793.0±11.83µs 787.4±3.77µs -0.71%
Pmtree::delete 50.7±0.57µs 51.0±1.62µs +0.59%
Pmtree::get 355.8±7.78ns 354.0±7.76ns -0.51%
Pmtree::get_empty_leaves_indices 5.0±0.15ns 8.7±0.15ns +74.00%
Pmtree::get_subtree_root 492.8±6.98ns 504.6±8.89ns +2.39%
Pmtree::override_range 101.7±2.65µs 102.0±1.35µs +0.29%
Pmtree::set 50.7±0.26µs 50.6±0.40µs -0.20%
Set/FullMerkleTree::::set/1 516.6±5.61µs 520.0±4.56µs +0.66%
Set/FullMerkleTree::::set/10 5.2±0.07ms 5.2±0.01ms 0.00%
Set/FullMerkleTree::::set/100 51.9±0.28ms 52.2±0.23ms +0.58%
Set/FullMerkleTree::::set_range/1 516.8±4.79µs 521.3±8.64µs +0.87%
Set/FullMerkleTree::::set_range/10 702.6±2.90µs 709.0±8.05µs +0.91%
Set/FullMerkleTree::::set_range/100 1890.8±22.49µs 1897.6±27.09µs +0.36%
Set/OptimalMerkleTree::::set/1 515.2±5.78µs 521.5±5.91µs +1.22%
Set/OptimalMerkleTree::::set/10 5.2±0.02ms 5.2±0.03ms 0.00%
Set/OptimalMerkleTree::::set/100 51.9±0.15ms 52.4±0.13ms +0.96%
Set/OptimalMerkleTree::::set_range/1 516.9±6.37µs 521.3±5.21µs +0.85%
Set/OptimalMerkleTree::::set_range/10 713.6±9.09µs 718.2±4.93µs +0.64%
Set/OptimalMerkleTree::::set_range/100 1862.7±34.41µs 1871.8±31.51µs +0.49%

@github-actions
Copy link

github-actions bot commented Feb 9, 2026

Coverage report uploaded. Download HTML Report

@github-actions
Copy link

github-actions bot commented Feb 9, 2026

Benchmark for ffc21ea

Click to view benchmark
Test Base PR %
FullMerkleTree::delete 17.2±0.17µs 16.9±0.27µs -1.74%
FullMerkleTree::get 0.8±0.01ns 0.8±0.01ns 0.00%
FullMerkleTree::get_empty_leaves_indices 982.2±11.04µs 983.1±14.46µs +0.09%
FullMerkleTree::get_subtree_root 11.7±0.11ns 13.7±1.24ns +17.09%
FullMerkleTree::override_range 2.3±0.11ms 2.2±0.07ms -4.35%
FullMerkleTree::set 8.6±0.12µs 8.5±0.10µs -1.16%
OptimalMerkleTree::delete 20.0±0.35µs 19.8±0.21µs -1.00%
OptimalMerkleTree::get 50.6±0.53ns 53.3±2.99ns +5.34%
OptimalMerkleTree::get_empty_leaves_indices 982.8±17.22µs 982.9±9.14µs +0.01%
OptimalMerkleTree::get_subtree_root 25.9±0.23ns 26.9±1.62ns +3.86%
OptimalMerkleTree::override_range 5.0±0.39ms 4.7±0.50ms -6.00%
OptimalMerkleTree::set 10.1±0.19µs 10.0±0.19µs -0.99%
poseidon Fr/Array hash/10 138.5±0.43µs 70.5 KElem/sec N/A N/A
poseidon Fr/Array hash/100 1487.7±4.25µs 65.6 KElem/sec N/A N/A
poseidon Fr/Array hash/1000 15.0±0.04ms 65.0 KElem/sec N/A N/A
poseidon Fr/Single hash 13.7±0.06µs 69.5 MElem/sec N/A N/A

@github-actions
Copy link

github-actions bot commented Feb 9, 2026

Benchmark for ffc21ea

Click to view benchmark
Test Base PR %
FullMerkleTree::::full_depth_gen 12.6±0.15ms 13.0±0.14ms +3.17%
OptimalMerkleTree::::full_depth_gen 783.1±6.89µs 787.9±4.80µs +0.61%
Pmtree::delete 51.1±1.81µs 50.7±0.52µs -0.78%
Pmtree::get 356.4±10.24ns 356.0±5.05ns -0.11%
Pmtree::get_empty_leaves_indices 5.0±0.08ns 8.7±0.11ns +74.00%
Pmtree::get_subtree_root 497.8±8.44ns 516.7±6.19ns +3.80%
Pmtree::override_range 99.2±0.73µs 98.6±1.28µs -0.60%
Pmtree::set 50.8±0.44µs 51.2±3.50µs +0.79%
Set/FullMerkleTree::::set/1 511.2±4.98µs 519.6±1.68µs +1.64%
Set/FullMerkleTree::::set/10 5.2±0.01ms 5.2±0.01ms 0.00%
Set/FullMerkleTree::::set/100 51.5±0.13ms 52.3±0.14ms +1.55%
Set/FullMerkleTree::::set_range/1 515.8±5.25µs 520.5±6.11µs +0.91%
Set/FullMerkleTree::::set_range/10 702.9±4.61µs 709.7±4.64µs +0.97%
Set/FullMerkleTree::::set_range/100 1876.5±24.38µs 1891.3±76.97µs +0.79%
Set/OptimalMerkleTree::::set/1 512.0±5.38µs 528.1±29.37µs +3.14%
Set/OptimalMerkleTree::::set/10 5.2±0.01ms 5.2±0.02ms 0.00%
Set/OptimalMerkleTree::::set/100 52.0±0.10ms 52.6±0.18ms +1.15%
Set/OptimalMerkleTree::::set_range/1 518.7±4.69µs 522.2±4.25µs +0.67%
Set/OptimalMerkleTree::::set_range/10 710.0±5.72µs 714.3±9.87µs +0.61%
Set/OptimalMerkleTree::::set_range/100 1857.6±37.55µs 1855.8±36.21µs -0.10%

@github-actions
Copy link

github-actions bot commented Feb 9, 2026

Coverage report uploaded. Download HTML Report

@github-actions
Copy link

github-actions bot commented Feb 9, 2026

Benchmark for 7d58e73

Click to view benchmark
Test Base PR %
FullMerkleTree::delete 17.1±0.45µs 16.9±0.17µs -1.17%
FullMerkleTree::get 0.8±0.01ns 0.8±0.01ns 0.00%
FullMerkleTree::get_empty_leaves_indices 1022.1±16.76µs 1021.8±8.95µs -0.03%
FullMerkleTree::get_subtree_root 12.6±0.09ns 12.5±0.18ns -0.79%
FullMerkleTree::override_range 2.6±0.03ms 2.7±0.05ms +3.85%
FullMerkleTree::set 8.5±0.09µs 8.4±0.15µs -1.18%
OptimalMerkleTree::delete 19.8±0.55µs 19.8±0.43µs 0.00%
OptimalMerkleTree::get 35.3±0.59ns 35.0±0.93ns -0.85%
OptimalMerkleTree::get_empty_leaves_indices 1049.5±67.32µs 1025.2±19.46µs -2.32%
OptimalMerkleTree::get_subtree_root 28.0±0.72ns 28.1±0.89ns +0.36%
OptimalMerkleTree::override_range 5.0±0.11ms 5.1±0.07ms +2.00%
OptimalMerkleTree::set 10.1±0.27µs 10.2±0.48µs +0.99%
poseidon Fr/Array hash/10 136.7±0.22µs 71.4 KElem/sec N/A N/A
poseidon Fr/Array hash/100 1475.6±14.28µs 66.2 KElem/sec N/A N/A
poseidon Fr/Array hash/1000 14.9±0.02ms 65.7 KElem/sec N/A N/A
poseidon Fr/Single hash 13.6±0.03µs 70.3 MElem/sec N/A N/A

@github-actions
Copy link

github-actions bot commented Feb 9, 2026

Benchmark for 7d58e73

Click to view benchmark
Test Base PR %
FullMerkleTree::::full_depth_gen 12.6±0.13ms 13.7±0.13ms +8.73%
OptimalMerkleTree::::full_depth_gen 793.0±18.95µs 799.9±3.90µs +0.87%
Pmtree::delete 51.1±0.82µs 50.7±0.33µs -0.78%
Pmtree::get 370.8±13.80ns 355.5±5.72ns -4.13%
Pmtree::get_empty_leaves_indices 5.0±0.05ns 8.8±0.60ns +76.00%
Pmtree::get_subtree_root 505.2±15.23ns 504.0±5.39ns -0.24%
Pmtree::override_range 102.1±0.89µs 101.8±0.59µs -0.29%
Pmtree::set 50.8±0.47µs 50.7±0.42µs -0.20%
Set/FullMerkleTree::::set/1 515.5±13.65µs 519.4±4.60µs +0.76%
Set/FullMerkleTree::::set/10 5.2±0.01ms 5.2±0.01ms 0.00%
Set/FullMerkleTree::::set/100 51.9±0.07ms 52.2±0.16ms +0.58%
Set/FullMerkleTree::::set_range/1 515.9±4.61µs 519.4±5.57µs +0.68%
Set/FullMerkleTree::::set_range/10 706.1±5.13µs 708.4±8.21µs +0.33%
Set/FullMerkleTree::::set_range/100 1892.4±29.19µs 1895.2±27.43µs +0.15%
Set/OptimalMerkleTree::::set/1 517.5±5.17µs 520.1±2.00µs +0.50%
Set/OptimalMerkleTree::::set/10 5.1±0.01ms 5.2±0.01ms +1.96%
Set/OptimalMerkleTree::::set/100 51.7±0.12ms 52.2±0.18ms +0.97%
Set/OptimalMerkleTree::::set_range/1 516.9±5.04µs 520.6±4.00µs +0.72%
Set/OptimalMerkleTree::::set_range/10 714.5±11.50µs 723.0±8.64µs +1.19%
Set/OptimalMerkleTree::::set_range/100 1859.0±31.23µs 1864.6±29.85µs +0.30%

@github-actions
Copy link

github-actions bot commented Feb 9, 2026

Coverage report uploaded. Download HTML Report

@github-actions
Copy link

Benchmark for f8dbb16

Click to view benchmark
Test Base PR %
FullMerkleTree::delete 17.2±0.24µs 17.0±0.40µs -1.16%
FullMerkleTree::get 0.8±0.00ns 0.8±0.01ns 0.00%
FullMerkleTree::get_empty_leaves_indices 982.0±7.27µs 982.2±8.18µs +0.02%
FullMerkleTree::get_subtree_root 11.7±0.13ns 11.6±0.13ns -0.85%
FullMerkleTree::override_range 2.3±0.10ms 2.2±0.11ms -4.35%
FullMerkleTree::set 8.6±0.12µs 8.5±0.10µs -1.16%
OptimalMerkleTree::delete 19.9±0.31µs 20.0±0.31µs +0.50%
OptimalMerkleTree::get 50.1±0.50ns 50.3±0.38ns +0.40%
OptimalMerkleTree::get_empty_leaves_indices 982.6±9.85µs 981.8±5.91µs -0.08%
OptimalMerkleTree::get_subtree_root 25.9±0.36ns 26.3±0.35ns +1.54%
OptimalMerkleTree::override_range 4.5±0.31ms 4.4±0.32ms -2.22%
OptimalMerkleTree::set 10.0±0.15µs 10.3±0.56µs +3.00%
poseidon Fr/Array hash/10 138.8±0.20µs 70.3 KElem/sec N/A N/A
poseidon Fr/Array hash/100 1490.9±1.23µs 65.5 KElem/sec N/A N/A
poseidon Fr/Array hash/1000 15.1±0.10ms 64.9 KElem/sec N/A N/A
poseidon Fr/Single hash 13.8±0.02µs 69.3 MElem/sec N/A N/A

@github-actions
Copy link

github-actions bot commented Mar 3, 2026

Benchmark for a2969bd

Click to view benchmark
Test Base PR %
FullMerkleTree::delete 17.1±0.27µs 17.0±0.18µs -0.58%
FullMerkleTree::get 0.8±0.01ns 0.8±0.00ns 0.00%
FullMerkleTree::get_empty_leaves_indices 982.4±6.05µs 982.1±6.30µs -0.03%
FullMerkleTree::get_subtree_root 11.8±0.23ns 11.6±0.14ns -1.69%
FullMerkleTree::override_range 2.3±0.07ms 2.3±0.11ms 0.00%
FullMerkleTree::set 8.5±0.14µs 8.5±0.07µs 0.00%
OptimalMerkleTree::delete 20.1±0.23µs 20.4±0.41µs +1.49%
OptimalMerkleTree::get 51.3±0.49ns 50.4±0.38ns -1.75%
OptimalMerkleTree::get_empty_leaves_indices 982.0±8.12µs 982.1±7.91µs +0.01%
OptimalMerkleTree::get_subtree_root 26.3±0.39ns 25.9±0.24ns -1.52%
OptimalMerkleTree::override_range 4.5±0.24ms 4.9±0.36ms +8.89%
OptimalMerkleTree::set 10.2±0.30µs 10.3±0.41µs +0.98%
poseidon Fr/Array hash/10 139.6±0.48µs 69.9 KElem/sec N/A N/A
poseidon Fr/Array hash/100 1500.4±6.42µs 65.1 KElem/sec N/A N/A
poseidon Fr/Array hash/1000 15.1±0.02ms 64.6 KElem/sec N/A N/A
poseidon Fr/Single hash 13.9±0.05µs 68.6 MElem/sec N/A N/A
validate_override_range/FullMerkleTree/override_range/1024 599.4±29.14µs 649.1±56.03µs +8.29%
validate_override_range/FullMerkleTree/override_range/64 97.8±15.60µs 98.6±16.24µs +0.82%
validate_override_range/FullMerkleTree/override_range/65536 435.3±1.99ms 436.1±1.74ms +0.18%
validate_override_range/FullMerkleTree/override_range/8192 8.8±0.32ms 8.9±0.04ms +1.14%
validate_override_range/OptimalMerkleTree/override_range/1024 803.1±32.32µs 806.6±63.65µs +0.44%
validate_override_range/OptimalMerkleTree/override_range/64 124.9±17.70µs 122.1±14.71µs -2.24%
validate_override_range/OptimalMerkleTree/override_range/65536 461.5±1.55ms 462.0±2.36ms +0.11%
validate_override_range/OptimalMerkleTree/override_range/8192 10.2±0.09ms 10.2±0.13ms 0.00%
validate_override_range/validate_only/1024 8.1±0.08µs 10.7±0.10µs +32.10%
validate_override_range/validate_only/64 344.6±9.64ns 344.2±10.86ns -0.12%
validate_override_range/validate_only/65536 849.6±5.59µs 847.7±4.99µs -0.22%
validate_override_range/validate_only/8192 103.4±1.05µs 103.1±1.53µs -0.29%

@vinhtc27 vinhtc27 requested a review from seemenkina March 3, 2026 19:03
@github-actions
Copy link

github-actions bot commented Mar 3, 2026

Benchmark for da3fd07

Click to view benchmark
Test Base PR %
FullMerkleTree::::full_depth_gen 13.6±0.36ms 13.2±0.17ms -2.94%
OptimalMerkleTree::::full_depth_gen 688.8±7.30µs 698.0±8.52µs +1.34%
Pmtree::delete 50.6±0.57µs 50.9±0.43µs +0.59%
Pmtree::get 355.0±6.69ns 348.5±7.05ns -1.83%
Pmtree::get_empty_leaves_indices 4.7±0.06ns 8.4±0.17ns +78.72%
Pmtree::get_subtree_root 503.1±7.89ns 497.9±8.76ns -1.03%
Pmtree::override_range 101.5±1.27µs 102.1±1.04µs +0.59%
Pmtree::set 50.6±0.56µs 50.9±0.52µs +0.59%
Set/FullMerkleTree::::set/1 517.2±4.77µs 515.7±5.10µs -0.29%
Set/FullMerkleTree::::set/10 5.2±0.02ms 5.2±0.01ms 0.00%
Set/FullMerkleTree::::set/100 52.0±0.08ms 51.5±0.08ms -0.96%
Set/FullMerkleTree::::set_range/1 517.2±4.03µs 517.7±7.96µs +0.10%
Set/FullMerkleTree::::set_range/10 707.2±4.62µs 702.1±3.61µs -0.72%
Set/FullMerkleTree::::set_range/100 1862.1±39.96µs 1856.3±34.87µs -0.31%
Set/OptimalMerkleTree::::set/1 518.1±2.42µs 517.4±2.51µs -0.14%
Set/OptimalMerkleTree::::set/10 5.2±0.01ms 5.1±0.02ms -1.92%
Set/OptimalMerkleTree::::set/100 52.1±0.14ms 51.9±0.16ms -0.38%
Set/OptimalMerkleTree::::set_range/1 518.0±4.58µs 514.2±6.27µs -0.73%
Set/OptimalMerkleTree::::set_range/10 730.2±8.24µs 727.7±9.27µs -0.34%
Set/OptimalMerkleTree::::set_range/100 1825.6±57.24µs 1826.2±48.69µs +0.03%

@github-actions
Copy link

github-actions bot commented Mar 3, 2026

Coverage report uploaded. Download HTML Report

@github-actions
Copy link

github-actions bot commented Mar 3, 2026

Benchmark for da3fd07

Click to view benchmark
Test Base PR %
FullMerkleTree::delete 17.0±0.19µs 17.0±0.20µs 0.00%
FullMerkleTree::get 0.8±0.01ns 0.8±0.02ns 0.00%
FullMerkleTree::get_empty_leaves_indices 983.1±10.91µs 981.6±4.78µs -0.15%
FullMerkleTree::get_subtree_root 11.8±0.13ns 11.6±0.13ns -1.69%
FullMerkleTree::override_range 2.2±0.08ms 2.3±0.08ms +4.55%
FullMerkleTree::set 8.5±0.07µs 8.5±0.17µs 0.00%
OptimalMerkleTree::delete 19.6±0.20µs 20.0±0.23µs +2.04%
OptimalMerkleTree::get 50.4±0.44ns 50.6±0.98ns +0.40%
OptimalMerkleTree::get_empty_leaves_indices 982.4±8.10µs 982.6±10.03µs +0.02%
OptimalMerkleTree::get_subtree_root 26.1±0.58ns 26.3±0.41ns +0.77%
OptimalMerkleTree::override_range 4.1±0.55ms 4.1±0.33ms 0.00%
OptimalMerkleTree::set 9.9±0.20µs 10.1±0.36µs +2.02%
poseidon Fr/Array hash/10 140.3±2.91µs 69.6 KElem/sec N/A N/A
poseidon Fr/Array hash/100 1500.2±4.17µs 65.1 KElem/sec N/A N/A
poseidon Fr/Array hash/1000 15.1±0.02ms 64.6 KElem/sec N/A N/A
poseidon Fr/Single hash 13.8±0.02µs 69.1 MElem/sec N/A N/A
validate_override_range/FullMerkleTree/override_range/1024 600.1±34.68µs 621.0±32.95µs +3.48%
validate_override_range/FullMerkleTree/override_range/64 96.3±14.02µs 97.2±13.38µs +0.93%
validate_override_range/FullMerkleTree/override_range/65536 438.5±1.04ms 437.7±1.46ms -0.18%
validate_override_range/FullMerkleTree/override_range/8192 8.9±0.03ms 8.9±0.04ms 0.00%
validate_override_range/OptimalMerkleTree/override_range/1024 785.5±52.77µs 796.8±82.52µs +1.44%
validate_override_range/OptimalMerkleTree/override_range/64 131.0±22.58µs 126.3±19.63µs -3.59%
validate_override_range/OptimalMerkleTree/override_range/65536 456.4±3.96ms 457.6±3.51ms +0.26%
validate_override_range/OptimalMerkleTree/override_range/8192 10.1±0.06ms 10.1±0.22ms 0.00%
validate_override_range/validate_only/1024 10.6±0.19µs 8.0±0.07µs -24.53%
validate_override_range/validate_only/64 343.6±4.99ns 345.8±4.93ns +0.64%
validate_override_range/validate_only/65536 846.0±5.37µs 847.8±5.34µs +0.21%
validate_override_range/validate_only/8192 103.2±1.58µs 104.7±1.26µs +1.45%

@github-actions
Copy link

github-actions bot commented Mar 3, 2026

Benchmark for 550cdc6

Click to view benchmark
Test Base PR %
FullMerkleTree::::full_depth_gen 11.6±0.07ms 11.6±0.08ms 0.00%
OptimalMerkleTree::::full_depth_gen 695.5±9.06µs 693.5±6.26µs -0.29%
Pmtree::delete 50.5±1.14µs 50.9±0.86µs +0.79%
Pmtree::get 353.9±6.91ns 348.8±6.18ns -1.44%
Pmtree::get_empty_leaves_indices 4.7±0.09ns 8.4±0.11ns +78.72%
Pmtree::get_subtree_root 498.7±9.79ns 509.3±8.63ns +2.13%
Pmtree::override_range 104.0±0.70µs 104.1±0.98µs +0.10%
Pmtree::set 50.5±0.96µs 51.0±0.77µs +0.99%
Set/FullMerkleTree::::set/1 517.3±5.20µs 515.9±5.39µs -0.27%
Set/FullMerkleTree::::set/10 5.2±0.06ms 5.2±0.01ms 0.00%
Set/FullMerkleTree::::set/100 51.9±0.39ms 51.5±0.12ms -0.77%
Set/FullMerkleTree::::set_range/1 516.3±7.34µs 514.8±5.39µs -0.29%
Set/FullMerkleTree::::set_range/10 699.8±12.06µs 703.5±3.36µs +0.53%
Set/FullMerkleTree::::set_range/100 1859.3±50.87µs 1867.6±66.74µs +0.45%
Set/OptimalMerkleTree::::set/1 519.2±3.41µs 516.9±5.37µs -0.44%
Set/OptimalMerkleTree::::set/10 5.2±0.08ms 5.4±0.94ms +3.85%
Set/OptimalMerkleTree::::set/100 52.2±0.39ms 52.0±0.97ms -0.38%
Set/OptimalMerkleTree::::set_range/1 516.2±6.20µs 517.4±4.42µs +0.23%
Set/OptimalMerkleTree::::set_range/10 726.7±9.95µs 721.3±7.20µs -0.74%
Set/OptimalMerkleTree::::set_range/100 1833.4±44.41µs 1813.9±39.31µs -1.06%

@github-actions
Copy link

github-actions bot commented Mar 3, 2026

Coverage report uploaded. Download HTML Report

@github-actions
Copy link

github-actions bot commented Mar 3, 2026

Benchmark for 550cdc6

Click to view benchmark
Test Base PR %
FullMerkleTree::delete 17.0±0.21µs 17.1±0.80µs +0.59%
FullMerkleTree::get 0.8±0.01ns 0.8±0.01ns 0.00%
FullMerkleTree::get_empty_leaves_indices 983.3±14.01µs 983.0±8.52µs -0.03%
FullMerkleTree::get_subtree_root 11.8±0.23ns 11.6±0.13ns -1.69%
FullMerkleTree::override_range 2.3±0.07ms 2.3±0.09ms 0.00%
FullMerkleTree::set 8.5±0.13µs 8.5±0.07µs 0.00%
OptimalMerkleTree::delete 19.7±0.29µs 20.1±0.20µs +2.03%
OptimalMerkleTree::get 51.3±0.57ns 51.0±0.44ns -0.58%
OptimalMerkleTree::get_empty_leaves_indices 983.0±10.08µs 986.2±24.11µs +0.33%
OptimalMerkleTree::get_subtree_root 26.0±0.31ns 26.0±0.38ns 0.00%
OptimalMerkleTree::override_range 5.3±0.38ms 4.6±0.41ms -13.21%
OptimalMerkleTree::set 9.9±0.24µs 10.3±0.36µs +4.04%
poseidon Fr/Array hash/10 139.5±0.28µs 70.0 KElem/sec N/A N/A
poseidon Fr/Array hash/100 1498.8±1.88µs 65.2 KElem/sec N/A N/A
poseidon Fr/Array hash/1000 15.1±0.03ms 64.6 KElem/sec N/A N/A
poseidon Fr/Single hash 13.9±0.23µs 68.7 MElem/sec N/A N/A
validate_override_range/FullMerkleTree/override_range/1024 605.4±43.42µs 608.9±29.63µs +0.58%
validate_override_range/FullMerkleTree/override_range/64 94.6±12.50µs 99.7±16.83µs +5.39%
validate_override_range/FullMerkleTree/override_range/65536 438.2±0.62ms 437.7±3.26ms -0.11%
validate_override_range/FullMerkleTree/override_range/8192 8.9±0.05ms 8.9±0.13ms 0.00%
validate_override_range/OptimalMerkleTree/override_range/1024 807.5±44.05µs 810.4±44.46µs +0.36%
validate_override_range/OptimalMerkleTree/override_range/64 134.1±25.48µs 130.3±24.08µs -2.83%
validate_override_range/OptimalMerkleTree/override_range/65536 462.3±1.96ms 463.4±3.00ms +0.24%
validate_override_range/OptimalMerkleTree/override_range/8192 10.2±0.06ms 10.2±0.06ms 0.00%
validate_override_range/validate_only/1024 10.7±0.16µs 8.0±0.14µs -25.23%
validate_override_range/validate_only/64 343.5±2.76ns 345.5±16.52ns +0.58%
validate_override_range/validate_only/65536 852.4±7.13µs 851.8±6.29µs -0.07%
validate_override_range/validate_only/8192 105.6±1.64µs 103.1±1.56µs -2.37%

@romanzac
Copy link
Contributor

romanzac commented Mar 4, 2026

@romanzac Hey! I added extra byte rejection for RLNProofValues, like you mentioned here: #376 (comment)

It’s implemented in this PR, and I also tweaked the last part of your previous test case:

// Test extra proof values bytes rejection

Wonderful! Thanks.

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.

also please check merge conflict

@vinhtc27
Copy link
Contributor Author

vinhtc27 commented Mar 9, 2026

also please check merge conflict

Yes, I’ll also open another sub-PR when rebasing the partial proof generation PR into this to make it easier to review.

@github-actions
Copy link

github-actions bot commented Mar 9, 2026

Benchmark for 6b01d1c

Click to view benchmark
Test Base PR %
FullMerkleTree::::full_depth_gen 16.8±0.93ms 18.0±0.31ms +7.14%
OptimalMerkleTree::::full_depth_gen 825.1±23.98µs 813.7±24.99µs -1.38%
Pmtree::delete 49.5±0.95µs 49.2±0.94µs -0.61%
Pmtree::get 297.2±4.12ns 289.3±7.67ns -2.66%
Pmtree::get_empty_leaves_indices 5.2±0.05ns 8.4±0.09ns +61.54%
Pmtree::get_subtree_root 368.1±8.65ns 357.1±9.50ns -2.99%
Pmtree::override_range 97.8±1.00µs 97.9±1.34µs +0.10%
Pmtree::set 49.6±0.62µs 49.3±0.71µs -0.60%
Set/FullMerkleTree::::set/1 506.9±8.79µs 509.3±7.82µs +0.47%
Set/FullMerkleTree::::set/10 5.1±0.01ms 5.1±0.03ms 0.00%
Set/FullMerkleTree::::set/100 50.9±0.69ms 51.3±0.13ms +0.79%
Set/FullMerkleTree::::set_range/1 504.3±7.24µs 508.6±7.99µs +0.85%
Set/FullMerkleTree::::set_range/10 687.4±8.38µs 691.8±3.99µs +0.64%
Set/FullMerkleTree::::set_range/100 1984.4±29.04µs 1986.5±39.56µs +0.11%
Set/OptimalMerkleTree::::set/1 506.3±6.85µs 510.5±11.12µs +0.83%
Set/OptimalMerkleTree::::set/10 5.1±0.02ms 5.1±0.05ms 0.00%
Set/OptimalMerkleTree::::set/100 51.0±0.12ms 51.2±0.16ms +0.39%
Set/OptimalMerkleTree::::set_range/1 508.0±6.08µs 510.1±9.04µs +0.41%
Set/OptimalMerkleTree::::set_range/10 734.0±22.06µs 741.2±11.26µs +0.98%
Set/OptimalMerkleTree::::set_range/100 1956.4±34.78µs 1970.8±24.97µs +0.74%

@github-actions
Copy link

github-actions bot commented Mar 9, 2026

Benchmark for 6b01d1c

Click to view benchmark
Test Base PR %
FullMerkleTree::delete 17.8±0.99µs 18.3±0.93µs +2.81%
FullMerkleTree::get 0.8±0.02ns 0.8±0.03ns 0.00%
FullMerkleTree::get_empty_leaves_indices 1015.7±37.43µs 1102.4±47.37µs +8.54%
FullMerkleTree::get_subtree_root 11.9±0.38ns 13.0±0.54ns +9.24%
FullMerkleTree::override_range 2.4±0.15ms 2.4±0.14ms 0.00%
FullMerkleTree::set 8.6±0.18µs 9.1±0.51µs +5.81%
OptimalMerkleTree::delete 20.0±0.49µs 23.5±1.63µs +17.50%
OptimalMerkleTree::get 54.2±2.37ns 54.0±2.04ns -0.37%
OptimalMerkleTree::get_empty_leaves_indices 991.4±37.07µs 1105.1±61.45µs +11.47%
OptimalMerkleTree::get_subtree_root 26.5±1.11ns 27.6±0.98ns +4.15%
OptimalMerkleTree::override_range 4.8±0.30ms 5.6±0.62ms +16.67%
OptimalMerkleTree::set 10.1±0.30µs 11.0±0.59µs +8.91%
poseidon Fr/Array hash/10 144.4±4.42µs 67.6 KElem/sec N/A N/A
poseidon Fr/Array hash/100 1499.3±4.05µs 65.1 KElem/sec N/A N/A
poseidon Fr/Array hash/1000 15.3±0.39ms 63.9 KElem/sec N/A N/A
poseidon Fr/Single hash 14.4±0.54µs 66.1 MElem/sec N/A N/A
validate_override_range/FullMerkleTree/override_range/1024 643.2±47.91µs 618.8±41.55µs -3.79%
validate_override_range/FullMerkleTree/override_range/64 98.3±12.48µs 109.4±18.86µs +11.29%
validate_override_range/FullMerkleTree/override_range/65536 446.3±11.20ms 446.3±17.38ms 0.00%
validate_override_range/FullMerkleTree/override_range/8192 8.9±0.04ms 9.5±0.54ms +6.74%
validate_override_range/OptimalMerkleTree/override_range/1024 821.9±52.56µs 869.1±65.53µs +5.74%
validate_override_range/OptimalMerkleTree/override_range/64 141.4±24.12µs 149.4±27.61µs +5.66%
validate_override_range/OptimalMerkleTree/override_range/65536 481.9±24.99ms 478.8±25.28ms -0.64%
validate_override_range/OptimalMerkleTree/override_range/8192 10.3±0.28ms 10.3±0.23ms 0.00%
validate_override_range/validate_only/1024 12.4±0.97µs 8.3±0.36µs -33.06%
validate_override_range/validate_only/64 364.7±13.26ns 391.5±14.33ns +7.35%
validate_override_range/validate_only/65536 870.2±36.63µs 852.2±13.90µs -2.07%
validate_override_range/validate_only/8192 103.9±1.90µs 107.3±3.49µs +3.27%

@github-actions
Copy link

github-actions bot commented Mar 9, 2026

Coverage report uploaded. Download HTML Report

@seemenkina seemenkina self-requested a review March 11, 2026 16:52
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.

Thank you, great job!

vinhtc27 and others added 2 commits March 16, 2026 17:05
### Changes
- Updated binary resources after auditing the new [circom
circuit](https://github.com/vinhtc27/circom-rln/tree/multi-message-id/circuits)
and updated the root README.
- Renamed all related partial_proof.rs files to a single name (no
changes compared to master).
- Added test cases and included missing partial proof methods in the FFI
and Nim example.
- Added a version byte when serializing `RLNPartialWitnessInput` and
`PartialProof`.
- Merged the partial proof feature from `master` into the
`multi-message-id` PR.
@vinhtc27 vinhtc27 requested a review from seemenkina March 16, 2026 10:32
@github-actions
Copy link

Benchmark for eb80818

Click to view benchmark
Test Base PR %
FullMerkleTree::::full_depth_gen 12.2±0.11ms 13.1±0.08ms +7.38%
OptimalMerkleTree::::full_depth_gen 697.0±9.42µs 1664.5±39.06µs +138.81%
Pmtree::delete 50.3±0.91µs 50.4±0.59µs +0.20%
Pmtree::get 299.4±6.05ns 298.8±6.71ns -0.20%
Pmtree::get_empty_leaves_indices 8.4±0.19ns 8.4±0.11ns 0.00%
Pmtree::get_subtree_root 372.3±8.03ns 394.3±6.97ns +5.91%
Pmtree::override_range 103.5±0.76µs 103.8±3.64µs +0.29%
Pmtree::set 50.4±0.96µs 50.3±0.49µs -0.20%
Set/FullMerkleTree::::set/1 518.0±3.67µs 521.7±4.91µs +0.71%
Set/FullMerkleTree::::set/10 5.2±0.02ms 5.2±0.02ms 0.00%
Set/FullMerkleTree::::set/100 51.7±0.07ms 52.5±0.17ms +1.55%
Set/FullMerkleTree::::set_range/1 519.3±7.01µs 522.5±4.44µs +0.62%
Set/FullMerkleTree::::set_range/10 706.1±4.47µs 715.0±15.01µs +1.26%
Set/FullMerkleTree::::set_range/100 1867.1±67.36µs 1871.0±64.23µs +0.21%
Set/OptimalMerkleTree::::set/1 522.7±5.13µs 523.8±6.16µs +0.21%
Set/OptimalMerkleTree::::set/10 5.2±0.02ms 5.2±0.03ms 0.00%
Set/OptimalMerkleTree::::set/100 52.4±0.15ms 52.7±0.09ms +0.57%
Set/OptimalMerkleTree::::set_range/1 521.6±6.95µs 522.7±5.91µs +0.21%
Set/OptimalMerkleTree::::set_range/10 727.4±7.06µs 727.5±12.60µs +0.01%
Set/OptimalMerkleTree::::set_range/100 1825.1±41.24µs 1823.3±42.38µs -0.10%
rln_finish_partial_proof 67.7±0.86ms 67.4±0.75ms -0.44%
rln_full_proof 186.6±8.04ms 185.6±7.71ms -0.54%
rln_partial_proof_generation 128.2±1.46ms 127.6±2.67ms -0.47%

@github-actions
Copy link

Benchmark for eb80818

Click to view benchmark
Test Base PR %
FullMerkleTree::delete 17.0±0.17µs 17.2±0.25µs +1.18%
FullMerkleTree::get 0.8±0.01ns 0.8±0.01ns 0.00%
FullMerkleTree::get_empty_leaves_indices 981.7±4.44µs 986.3±29.21µs +0.47%
FullMerkleTree::get_subtree_root 11.8±0.40ns 11.8±0.18ns 0.00%
FullMerkleTree::override_range 2.3±0.08ms 2.3±0.07ms 0.00%
FullMerkleTree::set 8.5±0.29µs 8.6±0.13µs +1.18%
OptimalMerkleTree::delete 20.0±0.31µs 19.9±0.26µs -0.50%
OptimalMerkleTree::get 51.9±2.07ns 50.8±1.20ns -2.12%
OptimalMerkleTree::get_empty_leaves_indices 989.7±30.29µs 982.1±8.01µs -0.77%
OptimalMerkleTree::get_subtree_root 26.0±0.35ns 26.1±0.41ns +0.38%
OptimalMerkleTree::override_range 5.1±0.23ms 4.9±0.46ms -3.92%
OptimalMerkleTree::set 10.1±0.20µs 10.1±0.13µs 0.00%
poseidon Fr/Array hash/10 139.6±0.52µs 70.0 KElem/sec N/A N/A
poseidon Fr/Array hash/100 1504.4±8.19µs 64.9 KElem/sec N/A N/A
poseidon Fr/Array hash/1000 15.1±0.05ms 64.5 KElem/sec N/A N/A
poseidon Fr/Single hash 13.8±0.02µs 69.1 MElem/sec N/A N/A
validate_override_range/FullMerkleTree/override_range/1024 594.4±29.25µs 604.0±50.61µs +1.62%
validate_override_range/FullMerkleTree/override_range/64 104.9±19.43µs 94.5±11.43µs -9.91%
validate_override_range/FullMerkleTree/override_range/65536 433.5±1.67ms 439.8±10.51ms +1.45%
validate_override_range/FullMerkleTree/override_range/8192 9.0±0.25ms 8.9±0.09ms -1.11%
validate_override_range/OptimalMerkleTree/override_range/1024 797.3±33.02µs 794.3±24.87µs -0.38%
validate_override_range/OptimalMerkleTree/override_range/64 125.3±16.84µs 126.5±18.27µs +0.96%
validate_override_range/OptimalMerkleTree/override_range/65536 461.4±3.93ms 462.6±12.64ms +0.26%
validate_override_range/OptimalMerkleTree/override_range/8192 10.2±0.08ms 10.4±0.25ms +1.96%
validate_override_range/validate_only/1024 10.7±0.13µs 8.0±0.13µs -25.23%
validate_override_range/validate_only/64 346.0±2.24ns 341.7±6.36ns -1.24%
validate_override_range/validate_only/65536 856.8±21.25µs 842.6±6.62µs -1.66%
validate_override_range/validate_only/8192 111.6±4.89µs 102.9±1.47µs -7.80%

@vinhtc27 vinhtc27 merged commit 25d398b into master Mar 16, 2026
21 checks passed
@vinhtc27 vinhtc27 deleted the multi-message-id-burn branch March 16, 2026 10:49
@github-actions
Copy link

Coverage report uploaded. Download HTML Report

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

run-coverage Runs coverage report in CI once added to the open PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants