Thanks to visit codestin.com
Credit goes to github.com

Skip to content

perf(candid): linear-time encoding/decoding of large nat/int#744

Open
lwshang wants to merge 3 commits into
masterfrom
lwshang/linear_big_int
Open

perf(candid): linear-time encoding/decoding of large nat/int#744
lwshang wants to merge 3 commits into
masterfrom
lwshang/linear_big_int

Conversation

@lwshang

@lwshang lwshang commented Jun 24, 2026

Copy link
Copy Markdown
Contributor

Summary

Nat/Int encode and decode processed values one LEB128/SLEB128 group at a time, shifting or OR-ing the whole bignum on every byte — O(n²) in the encoded length once a value exceeds the u64/i64 fast path. This rebuilds the value in a single pass instead, making all four paths O(n).

  • decode: collect the 7-bit groups and construct the bignum once via BigUint::from_radix_le(_, 128) (radix 128 is a power of two, so this bit-packs in O(n)); Int additionally reinterprets the two's-complement sign.
  • encode: emit groups via BigUint::to_radix_le(128) for Nat, and repack the minimal two's-complement bytes into SLEB128 groups for Int.

The u64/i64 fast paths are unchanged.

Impact

All four paths were O(n²) before this PR. Measured with canbench on a 1 MiB encoded value, after the fix:

path instructions
Nat encode 66.5 M
Nat decode 189 M
Int encode 285 M
Int decode 191 M

For reference, before the fix the encode side alone measured 1.93 T (Nat) and 3.85 T (Int) for the same input — a ~29,000× / ~13,500× reduction; decode had the same O(n²) shape.

Tests

  • New boundary, large-value, all-0x7f, large-negative, and a randomized roundtrip (1000 values, both signs) covering the bignum encode/decode paths.
  • Existing exact-byte and random fast-path tests still pass (cargo test -p candid --all-features).

Bench

  • Adds nat_bignum / int_bignum to the canbench suite (rust/bench).

Release

  • Bumps candid and candid_derive to 0.10.31, adds the CHANGELOG entry, and refreshes the workspace and bench lockfiles.

lwshang and others added 2 commits June 24, 2026 12:21
Nat/Int encode and decode previously operated one 7-bit group at a time,
shifting or OR-ing the whole bignum on every byte, which is O(n^2) in the
encoded length. Rebuild the value in a single pass instead:

- decode: collect the 7-bit groups and construct the bignum once via
  BigUint::from_radix_le(_, 128) (radix 128 is a power of two, so this
  bit-packs in O(n)); Int additionally reinterprets the two's-complement
  sign.
- encode: emit groups via BigUint::to_radix_le(128) for Nat, and repack the
  minimal two's-complement bytes into SLEB128 groups for Int.

The u64/i64 fast paths are unchanged. Add boundary, large-value, and
randomized roundtrip tests for the bignum paths, plus nat_bignum/int_bignum
canbench benchmarks.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Bump candid and candid_derive to 0.10.31, add the CHANGELOG entry, and
refresh the workspace and bench lockfiles.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
@github-actions

Copy link
Copy Markdown
Name Max Mem (Kb) Encode Decode
blob 4_224 4_207_275 ($\textcolor{green}{-0.00\%}$) 2_121_468 ($\textcolor{red}{0.00\%}$)
btreemap 75_456 529_877_822 ($\textcolor{green}{-0.00\%}$) 10_166_634_784 ($\textcolor{red}{0.00\%}$)
double_option 128 1_321_164 ($\textcolor{green}{-0.09\%}$) 26_803_780 ($\textcolor{green}{-1.45\%}$)
int_bignum (new) 1_472 284_867_045 191_058_743
large_variant 320 1_036_657 ($\textcolor{green}{-0.15\%}$) 19_998_589 ($\textcolor{green}{-1.62\%}$)
multi_arg 64 550_726 ($\textcolor{green}{-0.12\%}$) 6_438_853 ($\textcolor{red}{2.49\%}$)
nat_bignum (new) 960 66_527_844 188_960_963
nns 192 1_986_716 ($\textcolor{green}{-0.29\%}$) 5_490_345 ($\textcolor{green}{-0.33\%}$)
nns_list_neurons 1_152 6_584_201 ($\textcolor{green}{-0.15\%}$) 209_097_577 ($\textcolor{green}{-0.77\%}$)
nns_list_proposal 1_216 6_893_273 ($\textcolor{green}{-0.19\%}$) 54_062_253 ($\textcolor{green}{-1.84\%}$)
option_list 128 731_055 ($\textcolor{red}{0.44\%}$) 16_210_721 ($\textcolor{green}{-1.30\%}$)
result_variant 192 1_376_596 ($\textcolor{green}{-0.12\%}$) 16_186_197 ($\textcolor{red}{0.28\%}$)
subtype_decode 512 2_662_520 ($\textcolor{green}{-0.07\%}$) 49_522_733 ($\textcolor{red}{0.32\%}$)
text 6_336 4_204_189 ($\textcolor{green}{-0.00\%}$) 7_877_307 ($\textcolor{red}{0.00\%}$)
variant_list 128 725_972 ($\textcolor{red}{0.50\%}$) 15_650_105 ($\textcolor{red}{0.16\%}$)
vec_int16 12_480 8_404_293 ($\textcolor{green}{-0.00\%}$) 249_585_780 ($\textcolor{red}{0.00\%}$)
vec_nat 11_008 66_046_568 ($\textcolor{green}{-0.00\%}$) 275_504_070 ($\textcolor{green}{-0.19\%}$)
vec_nat32 24_768 16_792_901 ($\textcolor{green}{-0.00\%}$) 243_294_605 ($\textcolor{red}{0.00\%}$)
vec_nat64 49_344 33_570_101 ($\textcolor{green}{-0.00\%}$) 251_683_467 ($\textcolor{red}{0.00\%}$)
vec_service 64 688_634 ($\textcolor{red}{0.15\%}$) 94_833_386 ($\textcolor{red}{0.00\%}$)
wide_record 1_152 3_265_205 ($\textcolor{red}{0.02\%}$) 44_518_054 ($\textcolor{green}{-0.09\%}$)
  • Parser cost: 15_592_845 ($\textcolor{green}{-0.01\%}$)
  • Extra args: 2_863_913 ($\textcolor{red}{0.07\%}$)
Click to see raw report
---------------------------------------------------

Benchmark: blob
  total:
    instructions: 6.33 M (-0.00%) (change within noise threshold)
    heap_increase: 66 pages (no change)
    stable_memory_increase: 0 pages (no change)

  1. Encoding (scope):
    calls: 1 (no change)
    instructions: 4.21 M (-0.00%) (change within noise threshold)
    heap_increase: 66 pages (no change)
    stable_memory_increase: 0 pages (no change)

  2. Decoding (scope):
    calls: 1 (no change)
    instructions: 2.12 M (0.00%) (change within noise threshold)
    heap_increase: 0 pages (no change)
    stable_memory_increase: 0 pages (no change)

---------------------------------------------------

Benchmark: btreemap
  total:
    instructions: 10.70 B (-0.00%) (change within noise threshold)
    heap_increase: 1179 pages (no change)
    stable_memory_increase: 0 pages (no change)

  1. Encoding (scope):
    calls: 1 (no change)
    instructions: 529.88 M (-0.00%) (change within noise threshold)
    heap_increase: 159 pages (no change)
    stable_memory_increase: 0 pages (no change)

  2. Decoding (scope):
    calls: 1 (no change)
    instructions: 10.17 B (0.00%) (change within noise threshold)
    heap_increase: 1020 pages (no change)
    stable_memory_increase: 0 pages (no change)

---------------------------------------------------

Benchmark: double_option
  total:
    instructions: 28.13 M (-1.39%) (change within noise threshold)
    heap_increase: 2 pages (no change)
    stable_memory_increase: 0 pages (no change)

  1. Encoding (scope):
    calls: 1 (no change)
    instructions: 1.32 M (-0.09%) (change within noise threshold)
    heap_increase: 0 pages (no change)
    stable_memory_increase: 0 pages (no change)

  2. Decoding (scope):
    calls: 1 (no change)
    instructions: 26.80 M (-1.45%) (change within noise threshold)
    heap_increase: 2 pages (no change)
    stable_memory_increase: 0 pages (no change)

---------------------------------------------------

Benchmark: extra_args
  total:
    instructions: 2.86 M (0.07%) (change within noise threshold)
    heap_increase: 0 pages (no change)
    stable_memory_increase: 0 pages (no change)

---------------------------------------------------

Benchmark: int_bignum (new)
  total:
    instructions: 475.93 M (new)
    heap_increase: 23 pages (new)
    stable_memory_increase: 0 pages (new)

  1. Encoding (scope):
    calls: 1 (new)
    instructions: 284.87 M (new)
    heap_increase: 0 pages (new)
    stable_memory_increase: 0 pages (new)

  2. Decoding (scope):
    calls: 1 (new)
    instructions: 191.06 M (new)
    heap_increase: 23 pages (new)
    stable_memory_increase: 0 pages (new)

---------------------------------------------------

Benchmark: large_variant
  total:
    instructions: 21.04 M (-1.54%) (change within noise threshold)
    heap_increase: 5 pages (no change)
    stable_memory_increase: 0 pages (no change)

  1. Encoding (scope):
    calls: 1 (no change)
    instructions: 1.04 M (-0.15%) (change within noise threshold)
    heap_increase: 2 pages (no change)
    stable_memory_increase: 0 pages (no change)

  2. Decoding (scope):
    calls: 1 (no change)
    instructions: 20.00 M (-1.62%) (change within noise threshold)
    heap_increase: 3 pages (no change)
    stable_memory_increase: 0 pages (no change)

---------------------------------------------------

Benchmark: multi_arg
  total:
    instructions: 6.99 M (regressed by 2.27%)
    heap_increase: 1 pages (no change)
    stable_memory_increase: 0 pages (no change)

  1. Encoding (scope):
    calls: 1 (no change)
    instructions: 550.73 K (-0.12%) (change within noise threshold)
    heap_increase: 1 pages (no change)
    stable_memory_increase: 0 pages (no change)

  2. Decoding (scope):
    calls: 1 (no change)
    instructions: 6.44 M (regressed by 2.49%)
    heap_increase: 0 pages (no change)
    stable_memory_increase: 0 pages (no change)

---------------------------------------------------

Benchmark: nat_bignum (new)
  total:
    instructions: 255.49 M (new)
    heap_increase: 15 pages (new)
    stable_memory_increase: 0 pages (new)

  1. Encoding (scope):
    calls: 1 (new)
    instructions: 66.53 M (new)
    heap_increase: 0 pages (new)
    stable_memory_increase: 0 pages (new)

  2. Decoding (scope):
    calls: 1 (new)
    instructions: 188.96 M (new)
    heap_increase: 15 pages (new)
    stable_memory_increase: 0 pages (new)

---------------------------------------------------

Benchmark: nns
  total:
    instructions: 23.91 M (-0.10%) (change within noise threshold)
    heap_increase: 3 pages (no change)
    stable_memory_increase: 0 pages (no change)

  0. Parsing (scope):
    calls: 1 (no change)
    instructions: 15.59 M (-0.01%) (change within noise threshold)
    heap_increase: 3 pages (no change)
    stable_memory_increase: 0 pages (no change)

  1. Encoding (scope):
    calls: 1 (no change)
    instructions: 1.99 M (-0.29%) (change within noise threshold)
    heap_increase: 0 pages (no change)
    stable_memory_increase: 0 pages (no change)

  2. Decoding (scope):
    calls: 1 (no change)
    instructions: 5.49 M (-0.33%) (change within noise threshold)
    heap_increase: 0 pages (no change)
    stable_memory_increase: 0 pages (no change)

---------------------------------------------------

Benchmark: nns_list_neurons
  total:
    instructions: 215.68 M (-0.75%) (change within noise threshold)
    heap_increase: 18 pages (no change)
    stable_memory_increase: 0 pages (no change)

  1. Encoding (scope):
    calls: 1 (no change)
    instructions: 6.58 M (-0.15%) (change within noise threshold)
    heap_increase: 18 pages (no change)
    stable_memory_increase: 0 pages (no change)

  2. Decoding (scope):
    calls: 1 (no change)
    instructions: 209.10 M (-0.77%) (change within noise threshold)
    heap_increase: 0 pages (no change)
    stable_memory_increase: 0 pages (no change)

---------------------------------------------------

Benchmark: nns_list_proposal
  total:
    instructions: 60.96 M (-1.66%) (change within noise threshold)
    heap_increase: 19 pages (no change)
    stable_memory_increase: 0 pages (no change)

  1. Encoding (scope):
    calls: 1 (no change)
    instructions: 6.89 M (-0.19%) (change within noise threshold)
    heap_increase: 5 pages (no change)
    stable_memory_increase: 0 pages (no change)

  2. Decoding (scope):
    calls: 1 (no change)
    instructions: 54.06 M (-1.84%) (change within noise threshold)
    heap_increase: 14 pages (no change)
    stable_memory_increase: 0 pages (no change)

---------------------------------------------------

Benchmark: option_list
  total:
    instructions: 16.94 M (-1.22%) (change within noise threshold)
    heap_increase: 2 pages (no change)
    stable_memory_increase: 0 pages (no change)

  1. Encoding (scope):
    calls: 1 (no change)
    instructions: 731.05 K (0.44%) (change within noise threshold)
    heap_increase: 0 pages (no change)
    stable_memory_increase: 0 pages (no change)

  2. Decoding (scope):
    calls: 1 (no change)
    instructions: 16.21 M (-1.30%) (change within noise threshold)
    heap_increase: 2 pages (no change)
    stable_memory_increase: 0 pages (no change)

---------------------------------------------------

Benchmark: result_variant
  total:
    instructions: 17.56 M (0.25%) (change within noise threshold)
    heap_increase: 3 pages (no change)
    stable_memory_increase: 0 pages (no change)

  1. Encoding (scope):
    calls: 1 (no change)
    instructions: 1.38 M (-0.12%) (change within noise threshold)
    heap_increase: 1 pages (no change)
    stable_memory_increase: 0 pages (no change)

  2. Decoding (scope):
    calls: 1 (no change)
    instructions: 16.19 M (0.28%) (change within noise threshold)
    heap_increase: 2 pages (no change)
    stable_memory_increase: 0 pages (no change)

---------------------------------------------------

Benchmark: subtype_decode
  total:
    instructions: 52.19 M (0.30%) (change within noise threshold)
    heap_increase: 8 pages (no change)
    stable_memory_increase: 0 pages (no change)

  1. Encoding (scope):
    calls: 1 (no change)
    instructions: 2.66 M (-0.07%) (change within noise threshold)
    heap_increase: 8 pages (no change)
    stable_memory_increase: 0 pages (no change)

  2. Decoding (scope):
    calls: 1 (no change)
    instructions: 49.52 M (0.32%) (change within noise threshold)
    heap_increase: 0 pages (no change)
    stable_memory_increase: 0 pages (no change)

---------------------------------------------------

Benchmark: text
  total:
    instructions: 12.08 M (-0.00%) (change within noise threshold)
    heap_increase: 99 pages (no change)
    stable_memory_increase: 0 pages (no change)

  1. Encoding (scope):
    calls: 1 (no change)
    instructions: 4.20 M (-0.00%) (change within noise threshold)
    heap_increase: 66 pages (no change)
    stable_memory_increase: 0 pages (no change)

  2. Decoding (scope):
    calls: 1 (no change)
    instructions: 7.88 M (0.00%) (change within noise threshold)
    heap_increase: 33 pages (no change)
    stable_memory_increase: 0 pages (no change)

---------------------------------------------------

Benchmark: variant_list
  total:
    instructions: 16.38 M (0.17%) (change within noise threshold)
    heap_increase: 2 pages (no change)
    stable_memory_increase: 0 pages (no change)

  1. Encoding (scope):
    calls: 1 (no change)
    instructions: 725.97 K (0.50%) (change within noise threshold)
    heap_increase: 0 pages (no change)
    stable_memory_increase: 0 pages (no change)

  2. Decoding (scope):
    calls: 1 (no change)
    instructions: 15.65 M (0.16%) (change within noise threshold)
    heap_increase: 2 pages (no change)
    stable_memory_increase: 0 pages (no change)

---------------------------------------------------

Benchmark: vec_int16
  total:
    instructions: 257.99 M (-0.00%) (change within noise threshold)
    heap_increase: 195 pages (no change)
    stable_memory_increase: 0 pages (no change)

  1. Encoding (scope):
    calls: 1 (no change)
    instructions: 8.40 M (-0.00%) (change within noise threshold)
    heap_increase: 130 pages (no change)
    stable_memory_increase: 0 pages (no change)

  2. Decoding (scope):
    calls: 1 (no change)
    instructions: 249.59 M (0.00%) (change within noise threshold)
    heap_increase: 65 pages (no change)
    stable_memory_increase: 0 pages (no change)

---------------------------------------------------

Benchmark: vec_nat
  total:
    instructions: 341.55 M (-0.15%) (change within noise threshold)
    heap_increase: 172 pages (no change)
    stable_memory_increase: 0 pages (no change)

  1. Encoding (scope):
    calls: 1 (no change)
    instructions: 66.05 M (-0.00%) (change within noise threshold)
    heap_increase: 33 pages (no change)
    stable_memory_increase: 0 pages (no change)

  2. Decoding (scope):
    calls: 1 (no change)
    instructions: 275.50 M (-0.19%) (change within noise threshold)
    heap_increase: 139 pages (no change)
    stable_memory_increase: 0 pages (no change)

---------------------------------------------------

Benchmark: vec_nat32
  total:
    instructions: 260.09 M (-0.00%) (change within noise threshold)
    heap_increase: 387 pages (no change)
    stable_memory_increase: 0 pages (no change)

  1. Encoding (scope):
    calls: 1 (no change)
    instructions: 16.79 M (-0.00%) (change within noise threshold)
    heap_increase: 258 pages (no change)
    stable_memory_increase: 0 pages (no change)

  2. Decoding (scope):
    calls: 1 (no change)
    instructions: 243.29 M (0.00%) (change within noise threshold)
    heap_increase: 129 pages (no change)
    stable_memory_increase: 0 pages (no change)

---------------------------------------------------

Benchmark: vec_nat64
  total:
    instructions: 285.26 M (-0.00%) (change within noise threshold)
    heap_increase: 771 pages (no change)
    stable_memory_increase: 0 pages (no change)

  1. Encoding (scope):
    calls: 1 (no change)
    instructions: 33.57 M (-0.00%) (change within noise threshold)
    heap_increase: 514 pages (no change)
    stable_memory_increase: 0 pages (no change)

  2. Decoding (scope):
    calls: 1 (no change)
    instructions: 251.68 M (0.00%) (change within noise threshold)
    heap_increase: 257 pages (no change)
    stable_memory_increase: 0 pages (no change)

---------------------------------------------------

Benchmark: vec_service
  total:
    instructions: 95.52 M (0.00%) (change within noise threshold)
    heap_increase: 1 pages (no change)
    stable_memory_increase: 0 pages (no change)

  1. Encoding (scope):
    calls: 1 (no change)
    instructions: 688.63 K (0.15%) (change within noise threshold)
    heap_increase: 0 pages (no change)
    stable_memory_increase: 0 pages (no change)

  2. Decoding (scope):
    calls: 1 (no change)
    instructions: 94.83 M (0.00%) (change within noise threshold)
    heap_increase: 1 pages (no change)
    stable_memory_increase: 0 pages (no change)

---------------------------------------------------

Benchmark: wide_record
  total:
    instructions: 47.79 M (-0.08%) (change within noise threshold)
    heap_increase: 18 pages (no change)
    stable_memory_increase: 0 pages (no change)

  1. Encoding (scope):
    calls: 1 (no change)
    instructions: 3.27 M (0.02%) (change within noise threshold)
    heap_increase: 18 pages (no change)
    stable_memory_increase: 0 pages (no change)

  2. Decoding (scope):
    calls: 1 (no change)
    instructions: 44.52 M (-0.09%) (change within noise threshold)
    heap_increase: 0 pages (no change)
    stable_memory_increase: 0 pages (no change)

---------------------------------------------------

Summary:
  instructions:
    status:   Regressions and new benchmarks 🔴➕
    counts:   [total 22 | regressed 1 | improved 0 | new 2 | unchanged 19]
    change:   [max +156.64K | p75 +1.83K | median -207 | p25 -239.77K | min -1.63M]
    change %: [max +2.27% | p75 +0.02% | median -0.00% | p25 -0.30% | min -1.66%]

  heap_increase:
    status:   New benchmarks added ➕
    counts:   [total 22 | regressed 0 | improved 0 | new 2 | unchanged 20]
    change:   [max 0 | p75 0 | median 0 | p25 0 | min 0]
    change %: [max 0.00% | p75 0.00% | median 0.00% | p25 0.00% | min 0.00%]

  stable_memory_increase:
    status:   New benchmarks added ➕
    counts:   [total 22 | regressed 0 | improved 0 | new 2 | unchanged 20]
    change:   [max 0 | p75 0 | median 0 | p25 0 | min 0]
    change %: [max 0.00% | p75 0.00% | median 0.00% | p25 0.00% | min 0.00%]

---------------------------------------------------

Only significant changes:
| status | name                    | calls |     ins |  ins Δ% | HI |  HI Δ% | SMI |  SMI Δ% |
|--------|-------------------------|-------|---------|---------|----|--------|-----|---------|
|   +    | multi_arg::2. Decoding  |     1 |   6.44M |  +2.49% |  0 |  0.00% |   0 |   0.00% |
|   +    | multi_arg               |       |   6.99M |  +2.27% |  1 |  0.00% |   0 |   0.00% |
|  new   | int_bignum              |       | 475.93M |         | 23 |        |   0 |         |
|  new   | int_bignum::1. Encoding |     1 | 284.87M |         |  0 |        |   0 |         |
|  new   | int_bignum::2. Decoding |     1 | 191.06M |         | 23 |        |   0 |         |
|  new   | nat_bignum              |       | 255.49M |         | 15 |        |   0 |         |
|  new   | nat_bignum::1. Encoding |     1 |  66.53M |         |  0 |        |   0 |         |
|  new   | nat_bignum::2. Decoding |     1 | 188.96M |         | 15 |        |   0 |         |

ins = instructions, HI = heap_increase, SMI = stable_memory_increase, Δ% = percent change

---------------------------------------------------
Successfully persisted results to canbench_results.yml

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

Improves candid’s Nat/Int LEB128/SLEB128 bignum encoding and decoding to be linear-time in the encoded length by collecting base-128 groups and constructing the bignum once, rather than repeatedly shifting/OR-ing the entire bignum per byte.

Changes:

  • Reworks Nat/Int bignum encode/decode to use base-128 digit collection (to_radix_le(128) / from_radix_le(_, 128)) for O(n) behavior.
  • Adds boundary, large-value, and randomized roundtrip tests for the bignum paths.
  • Adds large-nat/int benches and bumps crate versions + lockfiles + changelog entry for 0.10.31.

Reviewed changes

Copilot reviewed 6 out of 8 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
rust/candid/src/types/number.rs Replaces O(n²) bignum LEB128/SLEB128 encode/decode loops with O(n) group-collection + single-pass construction.
rust/candid/tests/number.rs Adds new boundary/large/randomized roundtrip tests targeting the new bignum paths.
rust/bench/bench.rs Adds nat_bignum / int_bignum benchmarks using ~1 MiB encoded bodies.
rust/candid/Cargo.toml Bumps candid to 0.10.31 and syncs candid_derive dependency version.
rust/candid_derive/Cargo.toml Bumps candid_derive to 0.10.31.
CHANGELOG.md Adds a 0.10.31 changelog entry for linear-time large Nat/Int encode/decode.
Cargo.lock Updates workspace lockfile for 0.10.31 version bumps.
rust/bench/Cargo.lock Updates bench lockfile for 0.10.31 version bumps.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread rust/candid/tests/number.rs Outdated
Use `len - 1` directly instead of `saturating_sub(1)` so the helper returns
exactly `len` bytes (and panics on the never-valid `len == 0`) rather than
silently returning a 1-byte body. Addresses PR review feedback.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
@lwshang lwshang marked this pull request as ready for review June 24, 2026 16:48
@lwshang lwshang requested a review from a team as a code owner June 24, 2026 16:48
@zeropath-ai

zeropath-ai Bot commented Jun 24, 2026

Copy link
Copy Markdown

No security or compliance issues detected. Reviewed everything up to 772c058.

Security Overview
Detected Code Changes
Change Type Relevant files
Enhancement ► rust/candid/src/types/number.rs
    Implement O(n) encoding/decoding for large Nat/Int values
► rust/candid/tests/number.rs
    Add tests for large Nat/Int value encoding/decoding and roundtripping
► rust/bench/bench.rs
    Add benchmarks for large Nat/Int value encoding/decoding
Configuration changes ► CHANGELOG.md
    Update changelog for new version
► Cargo.lock
    Update version of candid and related crates
► rust/bench/Cargo.lock
    Update version of candid and related crates
► rust/candid/Cargo.toml
    Update version of candid crate
► rust/candid_derive/Cargo.toml
    Update version of candid_derive crate

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.

2 participants