Skip to content
Snippets Groups Projects
  1. Aug 01, 2024
    • STEVAN Antoine's avatar
      isolate Semi-AVID (!160) · 0977677f
      STEVAN Antoine authored
      this is a refactor to prepare the addition of other cryptographic methods.
      
      ## changelog
      - moves Semi-AVID code from `lib.rs` to `semi_avid.rs`
      0977677f
  2. Apr 15, 2024
    • STEVAN Antoine's avatar
      add "unchecked" versions of `Matrix::{vandermonde,from_vec_vec}` and test both... · 5dc7dd2c
      STEVAN Antoine authored
      add "unchecked" versions of `Matrix::{vandermonde,from_vec_vec}` and test both matrices (dragoon/komodo!75)
      
      ## changelog
      - replace `Matrix::vandermonde` with `Matrix::vandermonde_unchecked`
      - add a new `Matrix::vandermonde` which calls `Matrix::vandermonde_unchecked` after checking the seed points are distinct, otherwise, gives a `KomodoError::InvalidVandermonde` error
      - same with `Matrix::from_vec_vec` and `Matrix::from_vec_vec_unchecked`
      - add documentation tests for the two "checked" functions
      - run the main lib tests on both a random and a Vandermond matrix, just to be sure we do not take advantage of the Vandermonde structure
      5dc7dd2c
  3. Apr 12, 2024
    • STEVAN Antoine's avatar
      update the API (dragoon/komodo!71) · 6f6647cd
      STEVAN Antoine authored
      ## changelog
      - rename the `encode` function to `prove` and have it take _shards_ instead of an _encoding matrix_: this is to isolate the "encoding" process inside the `fec` module and leave the main `komodo::prove` only compute the "proof", i.e. the commits of the data
      
      from
      ```rust
      fn encode<F, G, P>(
          bytes: &[u8],
          encoding_mat: &Matrix<F>,
          powers: &Powers<F, G>,
      ) -> Result<Vec<Block<F, G>>, KomodoError>
      ```
      to
      ```rust
      fn prove<F, G, P>(
          bytes: &[u8],
          powers: &Powers<F, G>,
          k: usize,
      ) -> Result<Vec<Commitment<F, G>>, KomodoError>
      ```
      - rename `fec::Shard.combine` to `fec::Shard.recode_with` to get rid of "combine"
      - rename `fec::recode` to `fec::recode_with_coeffs` to show that this version takes a list of coefficients
      - rename `Block.commit` to `Block.proof`: "commit" should be "commits" and it's usually refered to as "proof"
      - split `prove` further into `prove` and `build`: `prove` now outputs a `Vec<Commitment<F>>`, `build` simply takes a `Vec<Shard<F>>` and a `Vec<Commitment<F>>` and outputs a `Vec<Block<F>>`
      - add `fec::recode_random` that does the "shard" part of `recode` to wrap around `fec::recode_with_coeffs`
      - remove `R: RngCore` from the signature of `zk::setup`, to avoid having to pass a generic `_` annotation everywhere `zk::setup` is used, same change has been applied to `recode` and the `generate_random_powers` in `main.rs`
      
      from
      ```rust
      fn setup<R: RngCore, F: PrimeField, G: CurveGroup<ScalarField = F>>(
          max_degree: usize,
          rng: &mut R,
      ) -> Result<Powers<F, G>, KomodoError> {
      ```
      to
      ```rust
      fn setup<F: PrimeField, G: CurveGroup<ScalarField = F>>(
          max_degree: usize,
          rng: &mut impl RngCore,
      ) -> Result<Powers<F, G>, KomodoError> {
      ```
      
      ### some extra minor changes
      - remove some useles generic type annotations, e.g. `prove::<F, G, P>` can become a simpler `prove` most of the time, i.e. when there is at least one generic annotation somewhere in the scope
  4. Apr 11, 2024
  5. Apr 08, 2024
    • STEVAN Antoine's avatar
      fix random (dragoon/komodo!65) · fc23965a
      STEVAN Antoine authored
      should address #8 
      
      ## changelog
      - move the internal `rng` to an argument of type `R: RngCore` for the following functions
        - `recode` in `lib.rs`
        - `linalg::Matrix::random`
        - `generate_random_setup` in `main.rs`
      - make sure
        - `ark_std::test_rng` is only used in tests modules
        - `rand::thread_rng` is used in benchmarks, examples and `main.rs`
      fc23965a
  6. Apr 05, 2024
    • STEVAN Antoine's avatar
      fix the _trusted setup_ size (dragoon/komodo!60) · d8981b90
      STEVAN Antoine authored
      in 3c91ef12 and !54, a new implementation of the creation of the _trusted setup_ has been introduced, that gets rid of the `E: Pairing` requirement with a more general `<F: PrimeField, G: CurveGroup<_>>`.
      
      however, the size of the _trusted setup_ was incorrect.
      `zk::setup` requires the _maximum degree_ of the _trusted setup_, however, the number of bytes `nb_bytes` was consistently being given to it throughout the code base...
      
      this MR
      - introduces a new `zk::nb_elements_in_setup` that converts a number of bytes to the associated number of _trusted setup_ elements
      - uses that new `zk` function before calling `zK::setup` in all the code base
      
      
      ## results
      > :bulb: **Note**  
      > !58 is required for the whole table to be used easily
      
      > :bulb: **Note**  
      > here is how to run the benchmarks in Nushell
      > ```bash
      > let bad_mr = "3c91ef12"
      > let fix = "fix-setup-size"
      > 
      > git co $"($bad_mr)^"
      > cargo criterion --output-format verbose --message-format json out> benches/results/before.ndjson
      > cargo run --example bench_setup_size out>> benches/results/before.ndjson
      > 
      > git co $bad_mr
      > cargo criterion --output-format verbose --message-format json out> benches/results/after.ndjson
      > cargo run --example bench_setup_size out>> benches/results/after.ndjson
      > 
      > git co $fix
      > cargo criterion --output-format verbose --message-format json out> benches/results/fix.ndjson
      > cargo run --example bench_setup_size out>> benches/results/fix.ndjson
      > ```
      > and here the script used to generate that table is the following:
      > ```bash
      > def "parse bench-file" []: table<reason: string, id: string, mean: any> -> table<id: string, mean: float> {
      >     where reason == "benchmark-complete"
      >         | select id mean
      >         # NOTE: because `bench_setup_size.rs` outputs `record<reason: string, id: string, mean: float>`
      >         | update mean { if ($in | describe) == int { $in } else { $in.estimate } }
      >         # NOTE: addressed in `!58`
      >         | update id {|it|
      >             if ($it.id | str starts-with "recoding") {
      >                 $it.id ++ " on some curve"
      >             } else {
      >                 $it.id
      >             }
      >         }
      >         | update mean { into int }
      >         | update id { parse "{id} on {curve}" | into record | get id }
      > }
      > 
      > let before = open benches/results/before.ndjson | parse bench-file
      > let after = open benches/results/after.ndjson | parse bench-file
      > let fix = open benches/results/fix.ndjson | parse bench-file
      > 
      > $before
      >     | join $after id
      >     | rename --column { mean: "before", mean_: "after" }
      >     | join $fix id
      >     | rename --column { mean: "fix" }
      >     | insert b->a {|it| $it.after / $it.before | math round --precision 2 }
      >     | insert a->f {|it| $it.fix / $it.after | math round --precision 2 }
      >     | insert b->f {|it| $it.fix / $it.before | math round --precision 2 }
      >     | select id before b->a after a->f fix b->f
      >     | to md --pretty
      > ```
      
      > :exclamation: **Important**  
      > before this very MR, i.e. on `3c91ef12`, there was a factor of 15x between _before_ and _after_, meaning that the _trusted setups_ were 15 times larger and longer to serde :eyes: 
      >
      > this can be explained by the following facts
      > - due to the bad sizes given to the _trusted setup_ building function, the setups were around 30 times larger, 30 being close to the size of a field element on BLS-12-381
      > - because the `zk::setup` function only creates half of what its Arkworks counterpart does, the setups were at the same time around 2 times smaller
      >
      > combining these two and we get a factor of 15x!!
      >
      > now, with this MR, we get rid of the first factor and are left with _trusted setups_ twice as small and twice as fast to serde :tada: 
      
      | id                                                              | before     | b-&gt;a | after      | a-&gt;f | fix        | b-&gt;f |
      | --------------------------------------------------------------- | ---------- | ------- | ---------- | ------- | ---------- | ------- |
      | inverse 10x10                                                   | 336359     | 0.93    | 313852     | 1.05    | 329191     | 0.98    |
      | inverse 15x15                                                   | 811018     | 0.99    | 800064     | 1.01    | 807417     | 1       |
      | inverse 20x20                                                   | 1511592    | 1       | 1508034    | 1.02    | 1542538    | 1.02    |
      | inverse 30x30                                                   | 3703750    | 1.01    | 3731380    | 1.02    | 3793071    | 1.02    |
      | inverse 40x40                                                   | 7163839    | 1       | 7145015    | 1.03    | 7336996    | 1.02    |
      | inverse 60x60                                                   | 18620089   | 1       | 18625577   | 1.02    | 18922329   | 1.02    |
      | inverse 80x80                                                   | 37571610   | 1       | 37643906   | 1.02    | 38306236   | 1.02    |
      | inverse 120x120                                                 | 105404054  | 1       | 105281874  | 1.01    | 106797441  | 1.01    |
      | inverse 160x160                                                 | 224332257  | 1       | 224092724  | 1.01    | 227066824  | 1.01    |
      | inverse 240x240                                                 | 671096671  | 1       | 671005055  | 1.01    | 679280010  | 1.01    |
      | inverse 320x320                                                 | 1487909175 | 1       | 1488534950 | 1.01    | 1506027089 | 1.01    |
      | transpose 10x10                                                 | 87         | 0.93    | 81         | 1       | 81         | 0.93    |
      | transpose 15x15                                                 | 175        | 0.96    | 168        | 1       | 168        | 0.96    |
      | transpose 20x20                                                 | 284        | 1.03    | 293        | 0.95    | 279        | 0.98    |
      | transpose 30x30                                                 | 759        | 1.22    | 924        | 0.89    | 823        | 1.08    |
      | transpose 40x40                                                 | 1798       | 1.63    | 2935       | 0.98    | 2887       | 1.61    |
      | transpose 60x60                                                 | 3830       | 1.67    | 6378       | 1.01    | 6468       | 1.69    |
      | transpose 80x80                                                 | 7720       | 1.5     | 11548      | 0.99    | 11470      | 1.49    |
      | transpose 120x120                                               | 16365      | 1.5     | 24572      | 0.98    | 24059      | 1.47    |
      | transpose 160x160                                               | 42764      | 1.18    | 50453      | 1.07    | 54189      | 1.27    |
      | transpose 240x240                                               | 119435     | 1.18    | 141357     | 1       | 140752     | 1.18    |
      | transpose 320x320                                               | 218674     | 1.13    | 246262     | 1       | 247167     | 1.13    |
      | mul 10x10                                                       | 15499      | 1       | 15474      | 1       | 15527      | 1       |
      | mul 15x15                                                       | 51800      | 1       | 51913      | 1       | 51772      | 1       |
      | mul 20x20                                                       | 122399     | 1       | 122390     | 1.01    | 123248     | 1.01    |
      | mul 30x30                                                       | 499047     | 0.95    | 474740     | 1.01    | 481756     | 0.97    |
      | mul 40x40                                                       | 1224755    | 0.98    | 1203588    | 1.01    | 1211995    | 0.99    |
      | mul 60x60                                                       | 4166589    | 0.99    | 4122003    | 1       | 4139839    | 0.99    |
      | mul 80x80                                                       | 9942560    | 0.99    | 9870864    | 1       | 9912815    | 1       |
      | mul 120x120                                                     | 33706366   | 0.99    | 33458234   | 1.01    | 33680802   | 1       |
      | mul 160x160                                                     | 79645646   | 1       | 79974020   | 1.01    | 80469214   | 1.01    |
      | mul 240x240                                                     | 277091998  | 0.99    | 274638961  | 1.01    | 276412347  | 1       |
      | mul 320x320                                                     | 664942845  | 1       | 662229758  | 1.02    | 676065811  | 1.02    |
      | recoding 1 bytes and 2 shards with k = 2                        | 124        | 1       | 124        | 1.02    | 127        | 1.02    |
      | recoding 1 bytes and 2 shards with k = 4                        | 179        | 0.99    | 178        | 1.01    | 180        | 1.01    |
      | recoding 1 bytes and 2 shards with k = 8                        | 284        | 1       | 284        | 1       | 285        | 1       |
      | recoding 1 bytes and 2 shards with k = 16                       | 496        | 1.01    | 499        | 1.01    | 505        | 1.02    |
      | recoding 1 bytes and 4 shards with k = 2                        | 347        | 1.01    | 349        | 0.99    | 347        | 1       |
      | recoding 1 bytes and 4 shards with k = 4                        | 505        | 1       | 505        | 1       | 507        | 1       |
      | recoding 1 bytes and 4 shards with k = 8                        | 821        | 1       | 825        | 1       | 825        | 1       |
      | recoding 1 bytes and 4 shards with k = 16                       | 1451       | 1       | 1454       | 1.01    | 1464       | 1.01    |
      | recoding 1 bytes and 8 shards with k = 2                        | 792        | 1       | 791        | 1       | 792        | 1       |
      | recoding 1 bytes and 8 shards with k = 4                        | 1162       | 1       | 1163       | 1.01    | 1169       | 1.01    |
      | recoding 1 bytes and 8 shards with k = 8                        | 1884       | 1.01    | 1897       | 1       | 1902       | 1.01    |
      | recoding 1 bytes and 8 shards with k = 16                       | 3361       | 1       | 3368       | 1.02    | 3446       | 1.03    |
      | recoding 1 bytes and 16 shards with k = 2                       | 1680       | 1       | 1679       | 1.01    | 1699       | 1.01    |
      | recoding 1 bytes and 16 shards with k = 4                       | 2472       | 1       | 2475       | 1       | 2468       | 1       |
      | recoding 1 bytes and 16 shards with k = 8                       | 4034       | 1       | 4033       | 1.01    | 4060       | 1.01    |
      | recoding 1 bytes and 16 shards with k = 16                      | 7187       | 1       | 7173       | 1.02    | 7331       | 1.02    |
      | recoding 1024 bytes and 2 shards with k = 2                     | 1020       | 1       | 1020       | 1       | 1017       | 1       |
      | recoding 1024 bytes and 2 shards with k = 4                     | 1079       | 1       | 1081       | 0.98    | 1064       | 0.99    |
      | recoding 1024 bytes and 2 shards with k = 8                     | 1186       | 0.98    | 1167       | 1       | 1166       | 0.98    |
      | recoding 1024 bytes and 2 shards with k = 16                    | 1386       | 1       | 1392       | 0.99    | 1383       | 1       |
      | recoding 1024 bytes and 4 shards with k = 2                     | 2978       | 1       | 2968       | 1       | 2970       | 1       |
      | recoding 1024 bytes and 4 shards with k = 4                     | 3120       | 1       | 3113       | 1       | 3113       | 1       |
      | recoding 1024 bytes and 4 shards with k = 8                     | 3438       | 1       | 3445       | 1       | 3447       | 1       |
      | recoding 1024 bytes and 4 shards with k = 16                    | 4056       | 1       | 4071       | 1       | 4051       | 1       |
      | recoding 1024 bytes and 8 shards with k = 2                     | 6905       | 1       | 6879       | 1       | 6861       | 0.99    |
      | recoding 1024 bytes and 8 shards with k = 4                     | 7236       | 1       | 7216       | 1       | 7227       | 1       |
      | recoding 1024 bytes and 8 shards with k = 8                     | 7969       | 1       | 7986       | 1       | 7962       | 1       |
      | recoding 1024 bytes and 8 shards with k = 16                    | 9455       | 1       | 9427       | 1       | 9442       | 1       |
      | recoding 1024 bytes and 16 shards with k = 2                    | 14746      | 1       | 14760      | 0.99    | 14686      | 1       |
      | recoding 1024 bytes and 16 shards with k = 4                    | 15516      | 1       | 15493      | 1       | 15538      | 1       |
      | recoding 1024 bytes and 16 shards with k = 8                    | 17112      | 1       | 17097      | 1       | 17078      | 1       |
      | recoding 1024 bytes and 16 shards with k = 16                   | 20237      | 1       | 20284      | 1       | 20295      | 1       |
      | recoding 1048576 bytes and 2 shards with k = 2                  | 1427516    | 1.01    | 1441658    | 0.99    | 1424866    | 1       |
      | recoding 1048576 bytes and 2 shards with k = 4                  | 1083761    | 1.01    | 1094451    | 1       | 1089954    | 1.01    |
      | recoding 1048576 bytes and 2 shards with k = 8                  | 1087564    | 0.99    | 1076515    | 1.02    | 1094795    | 1.01    |
      | recoding 1048576 bytes and 2 shards with k = 16                 | 1089556    | 0.99    | 1078406    | 1.03    | 1105840    | 1.01    |
      | recoding 1048576 bytes and 4 shards with k = 2                  | 3256507    | 1       | 3250060    | 1.04    | 3370007    | 1.03    |
      | recoding 1048576 bytes and 4 shards with k = 4                  | 3259079    | 1.01    | 3285892    | 1       | 3297768    | 1.01    |
      | recoding 1048576 bytes and 4 shards with k = 8                  | 3235697    | 1       | 3244151    | 1.01    | 3278027    | 1.01    |
      | recoding 1048576 bytes and 4 shards with k = 16                 | 3240586    | 1.01    | 3264910    | 1.01    | 3284101    | 1.01    |
      | recoding 1048576 bytes and 8 shards with k = 2                  | 7580388    | 1       | 7576306    | 1.02    | 7732461    | 1.02    |
      | recoding 1048576 bytes and 8 shards with k = 4                  | 7567385    | 1.01    | 7614250    | 1.01    | 7699032    | 1.02    |
      | recoding 1048576 bytes and 8 shards with k = 8                  | 7589588    | 1       | 7584071    | 1.01    | 7643021    | 1.01    |
      | recoding 1048576 bytes and 8 shards with k = 16                 | 7572517    | 1       | 7596138    | 1.01    | 7637596    | 1.01    |
      | recoding 1048576 bytes and 16 shards with k = 2                 | 16248634   | 1       | 16245477   | 1.01    | 16450530   | 1.01    |
      | recoding 1048576 bytes and 16 shards with k = 4                 | 16253850   | 1       | 16299266   | 1.01    | 16458170   | 1.01    |
      | recoding 1048576 bytes and 16 shards with k = 8                 | 16240827   | 1       | 16265027   | 1       | 16256734   | 1       |
      | recoding 1048576 bytes and 16 shards with k = 16                | 16229981   | 1       | 16307729   | 1       | 16265882   | 1       |
      | setup/setup 1024                                                | 8934763    | 2.12    | 18942383   | 0.11    | 2175852    | 0.24    |
      | setup/serializing with compression 1024                         | 4194       | 15.82   | 66364      | 0.03    | 2100       | 0.5     |
      | setup/serializing with no compression 1024                      | 4953       | 16.04   | 79451      | 0.03    | 2501       | 0.5     |
      | setup/deserializing with compression and validation 1024        | 3644409    | 15.18   | 55337980   | 0.03    | 1809773    | 0.5     |
      | setup/deserializing with compression and no validation 1024     | 1065186    | 15.74   | 16762363   | 0.03    | 544255     | 0.51    |
      | setup/deserializing with no compression and validation 1024     | 2566945    | 15.17   | 38931135   | 0.03    | 1258935    | 0.49    |
      | setup/deserializing with no compression and no validation 1024  | 6722       | 14.84   | 99769      | 0.03    | 3235       | 0.48    |
      | setup/setup 2048                                                | 9092980    | 3.63    | 33024605   | 0.09    | 2909175    | 0.32    |
      | setup/serializing with compression 2048                         | 8240       | 16.32   | 134437     | 0.03    | 4141       | 0.5     |
      | setup/serializing with no compression 2048                      | 9767       | 16.41   | 160306     | 0.03    | 4976       | 0.51    |
      | setup/deserializing with compression and validation 2048        | 7239787    | 15.32   | 110931280  | 0.03    | 3639477    | 0.5     |
      | setup/deserializing with compression and no validation 2048     | 2113330    | 15.93   | 33674890   | 0.03    | 1084243    | 0.51    |
      | setup/deserializing with no compression and validation 2048     | 5081373    | 15.25   | 77482178   | 0.03    | 2537317    | 0.5     |
      | setup/deserializing with no compression and no validation 2048  | 13079      | 15.14   | 198034     | 0.03    | 6479       | 0.5     |
      | setup/setup 4096                                                | 9731992    | 6.14    | 59757543   | 0.07    | 4328023    | 0.44    |
      | setup/serializing with compression 4096                         | 16462      | 16.44   | 270647     | 0.03    | 8407       | 0.51    |
      | setup/serializing with no compression 4096                      | 19654      | 16.4    | 322264     | 0.03    | 9854       | 0.5     |
      | setup/deserializing with compression and validation 4096        | 14330104   | 15.47   | 221659652  | 0.03    | 7227388    | 0.5     |
      | setup/deserializing with compression and no validation 4096     | 4214098    | 15.79   | 66537465   | 0.03    | 2137818    | 0.51    |
      | setup/deserializing with no compression and validation 4096     | 10095359   | 15.33   | 154755178  | 0.03    | 5037809    | 0.5     |
      | setup/deserializing with no compression and no validation 4096  | 26192      | 14.94   | 391397     | 0.03    | 12862      | 0.49    |
      | setup/setup 8192                                                | 9594720    | 11.35   | 108884342  | 0.06    | 6893620    | 0.72    |
      | setup/serializing with compression 8192                         | 33114      | 16.42   | 543855     | 0.03    | 16713      | 0.5     |
      | setup/serializing with no compression 8192                      | 39992      | 16.17   | 646576     | 0.03    | 19983      | 0.5     |
      | setup/deserializing with compression and validation 8192        | 28578044   | 15.55   | 444525236  | 0.03    | 14337421   | 0.5     |
      | setup/deserializing with compression and no validation 8192     | 8417684    | 15.93   | 134082205  | 0.03    | 4309633    | 0.51    |
      | setup/deserializing with no compression and validation 8192     | 20134851   | 15.39   | 309785238  | 0.03    | 10066797   | 0.5     |
      | setup/deserializing with no compression and no validation 8192  | 51832      | 15.06   | 780369     | 0.03    | 25710      | 0.5     |
      | setup/setup 16384                                               | 10096523   | 19.72   | 199105054  | 0.06    | 11317161   | 1.12    |
      | setup/serializing with compression 16384                        | 67050      | 16.28   | 1091282    | 0.03    | 33502      | 0.5     |
      | setup/serializing with no compression 16384                     | 80269      | 16.2    | 1300111    | 0.03    | 40785      | 0.51    |
      | setup/deserializing with compression and validation 16384       | 56905556   | 15.56   | 885542593  | 0.03    | 28622218   | 0.5     |
      | setup/deserializing with compression and no validation 16384    | 16829951   | 15.96   | 268660355  | 0.03    | 8607645    | 0.51    |
      | setup/deserializing with no compression and validation 16384    | 40158772   | 15.44   | 619890738  | 0.03    | 20006634   | 0.5     |
      | setup/deserializing with no compression and no validation 16384 | 103242     | 15.07   | 1555913    | 0.03    | 51533      | 0.5     |
      | serialized size with compression and validation 1024            | 3280       | 15      | 49208      | 0.03    | 1640       | 0.5     |
      | serialized size with compression and no validation 1024         | 3280       | 15      | 49208      | 0.03    | 1640       | 0.5     |
      | serialized size with no compression and validation 1024         | 6544       | 15.04   | 98408      | 0.03    | 3272       | 0.5     |
      | serialized size with no compression and no validation 1024      | 6544       | 15.04   | 98408      | 0.03    | 3272       | 0.5     |
      | serialized size with compression and validation 2048            | 6448       | 15.25   | 98360      | 0.03    | 3224       | 0.5     |
      | serialized size with compression and no validation 2048         | 6448       | 15.25   | 98360      | 0.03    | 3224       | 0.5     |
      | serialized size with no compression and validation 2048         | 12880      | 15.27   | 196712     | 0.03    | 6440       | 0.5     |
      | serialized size with no compression and no validation 2048      | 12880      | 15.27   | 196712     | 0.03    | 6440       | 0.5     |
      | serialized size with compression and validation 4096            | 12784      | 15.38   | 196664     | 0.03    | 6392       | 0.5     |
      | serialized size with compression and no validation 4096         | 12784      | 15.38   | 196664     | 0.03    | 6392       | 0.5     |
      | serialized size with no compression and validation 4096         | 25552      | 15.39   | 393320     | 0.03    | 12776      | 0.5     |
      | serialized size with no compression and no validation 4096      | 25552      | 15.39   | 393320     | 0.03    | 12776      | 0.5     |
      | serialized size with compression and validation 8192            | 25456      | 15.45   | 393272     | 0.03    | 12728      | 0.5     |
      | serialized size with compression and no validation 8192         | 25456      | 15.45   | 393272     | 0.03    | 12728      | 0.5     |
      | serialized size with no compression and validation 8192         | 50896      | 15.45   | 786536     | 0.03    | 25448      | 0.5     |
      | serialized size with no compression and no validation 8192      | 50896      | 15.45   | 786536     | 0.03    | 25448      | 0.5     |
      | serialized size with compression and validation 16384           | 50800      | 15.48   | 786488     | 0.03    | 25400      | 0.5     |
      | serialized size with compression and no validation 16384        | 50800      | 15.48   | 786488     | 0.03    | 25400      | 0.5     |
      | serialized size with no compression and validation 16384        | 101584     | 15.48   | 1572968    | 0.03    | 50792      | 0.5     |
      | serialized size with no compression and no validation 16384     | 101584     | 15.48   | 1572968    | 0.03    | 50792      | 0.5     |
      d8981b90
    • STEVAN Antoine's avatar
      don't use a type alias for dense polynomial (!59) · 1b26be8c
      STEVAN Antoine authored
      this is a minor proposition, get rid of the `UniPoly12_381` or `UniPoly381` type aliases that are just `DensePolynomial<Fr>`.
      
      now, it's enough to just change the import of `Fr` to another crate / another curve, without having an inconsistent mention to BLS-12-381 in the name of the _dense polynomial_.
      1b26be8c
  7. Apr 04, 2024
    • STEVAN Antoine's avatar
      refactor imports for consistency (dragoon/komodo!56) · 9136212f
      STEVAN Antoine authored
      as per title, this is a minor MR that just makes sure the imports are consistent across modules.
      
      in order
      - `std`
      - `ark_...`
      - others
      - `komodo` or `crate` or `super`
      9136212f
    • STEVAN Antoine's avatar
    • STEVAN Antoine's avatar
      remove requirements on _pairing_ and `ark-poly-commit` (!54) · 3c91ef12
      STEVAN Antoine authored
      ## changelog
      - remove `ark-poly-commit` from the dependencies
      - remove the old `setup.rs`
      - add temporary `foo.rs` which define (some details are ommited for brevity)
        - `struct Powers<F, G>` 
        - `struct Commitment<F, G>`
        - `fn build_powers<F, G>(...) -> Powers<F, G>`
        - `fn commit<F, G, P>(powers: &Powers<F, G>, polynomial: &P) -> Commitment<F, G>`
        - tests
      - `foo.rs` is then renamed to `setup.rs`
      - two new `KomodoError` variants have been created to replace `ark_poly_commit::Error`
        - `DegreeIsZero`
        - `TooFewPowersInTrustedSetup(usize, usize)`
      - finally, all the past mentions to `E: Pairing` and `setup::random` have been replaced with `F, G` and `setup::build_powers` respectively
      3c91ef12
  8. Apr 02, 2024
  9. Mar 26, 2024
    • DISSOUBRAY Nathan's avatar
      Move functions defined in the main to the lib (dragoon/komodo!47) · b567b1bd
      DISSOUBRAY Nathan authored and STEVAN Antoine's avatar STEVAN Antoine committed
      ## Description
      
      Those functions in the main could be useful later as they are operations that an external user might actually want to do directly (instead of just rewriting the functions in the main).
      
      ## List of changes
      - Create a dump function (to be be used by both dump_blocks and generate_powers as they write to disk)
      - Created a fs mod for actions related to writing on disk
      - moved functions into their relevant module (though some might be up to discussion, as noted in some commits)
      - Use anyhow to be able to return Result from functions with multiple error types (since before they just threw errors in the main)
      
      ## Additional notes
      
      Should I include the example that I was working on (ie writing blocks of files recursively), which was the thing that prompted me to actually move the functions from the main to the lib (as I noticed I was rewriting what was in the main to be able to do that) ?
      b567b1bd
  10. Jan 30, 2024
    • STEVAN Antoine's avatar
      allow to combine more than two blocks (dragoon/komodo!32) · a3c1639a
      STEVAN Antoine authored
      this MR allows to give any number of blocks to recode them.
      this is a convenience to avoid combining the blocks pair-wise and create intermediate and useless blocks, e.g. by defining the following Nushell command with the `komodo.nu` module
      ```bash
      def "komodo full-recode" []: list<string> -> string {
          let blocks = $in
          match ($blocks | length) {
              0 => { return null },
              1 => { return $blocks.0 },
          }
      
          $blocks | skip 1 | reduce --fold $blocks.0 {|it, acc| komodo combine $it $acc}
      }
      ```
      one can now do directly
      ```bash
      komodo combine ...(komodo ls)
      ```
      which will create a single new fully recoded block!
      
      ## changelog
      - new `fec::combine` that takes a list of shards and their coefficients and combines them, returns `None` if the slices are empty or not of the same length
      ```rust
      pub(super) combine<E: Pairing>(
          shards: &[Shard<E>],
          coeffs: &[E::ScalarField],
      ) -> Option<Shard<E>>
      ```
      - modified `recode` that takes any number of blocks and returns an `Option` if there is none
      ```rust
      pub recode<E: Pairing>(blocks: &[Block<E>]) -> Result<Option<Block<E>>, KomodoError>
      ```
      - the `komodo combine` command from `komodo.nu` can now take any number of blocks, even 0 by giving a nice error
      a3c1639a
  11. Jan 25, 2024
  12. Jan 23, 2024
    • STEVAN Antoine's avatar
      allow passing any matrix as parameter to encoding process (dragoon/komodo!27) · 0c48f632
      STEVAN Antoine authored
      ## changelog
      - add `--encoding-method` to `komodo prove`
      - pass the encoding matrix to `encode` and `fec::encode` instead of `k` and `n`, these two parameters can be extracted without further check by looking at the shape of the encoding matrix
      - the global recoding vector is now extracted from the encoding matrix instead of recomputing it (see new `Matrix::get_col` implementation)
      - `linalg` and `Matrix::{random, vandermonde}` have been made public (see new `Matrix::random` implementation)
      - the computation of `Matrix::vandermonde` has been optimized
      0c48f632
  13. Jan 19, 2024
  14. Jan 17, 2024
    • STEVAN Antoine's avatar
      improvements on the API (dragoon/komodo!19) · 1b89bb2c
      STEVAN Antoine authored
      ## changes to the API of `komodo.nu`
      - there is no `--powers-file` anymore => the location of the blocks and the powers is controlled via the `$env.KOMODO_HOME` environment variable which defaults to `$env.XDG_DATA_HOME/komodo/` and then `~/.local/share/komodo/`
      - a new `komodo clean` command to empty the `$env.KOMODO_HOME` directory
      - a new `komodo` command to get some basic help
      - `komodo setup` now expects a number of bytes rather than a filename to build a trusted setup
      1b89bb2c
    • STEVAN Antoine's avatar
      better error handling and internals (dragoon/komodo!17) · 016cb2dd
      STEVAN Antoine authored
      in this MR
      - all `unwrap`s and `expect`s have been removed from any `.rs` module that is not `main.rs` => the goal is to never panic from inside the library and let `main.rs` handle the errors
      - in `main.rs` the new `throw_error` function is used to return a message on `stderr` and exit the runtime with a code => then `komodo.nu` picks it up and gives a nicer error to the user
      - the internals of `komodo.nu` also have been greatly simplified without feature changes
      
      > **Note**  
      > because `throw_error` does not return anything and some of the places where there might be errors in `main.rs` need to return a value, some `unwrap_or_else` need to have an `unreachable!` statement in them to show the compiler it's ok if there's no value on the `Err` branch
      >
      > it would be nice to find a better way of doing this :thinking:
      016cb2dd
  15. Jan 16, 2024
    • STEVAN Antoine's avatar
      transition to a hash-only application (!16) · e19e3d77
      STEVAN Antoine authored
      in this MR
      - only the hashes of blocks are shown and `komodo ...` expects hashes and not full paths to the blocks
      - completion has been added for the `komodo` command
      - a `komodo ls` command has been added to help with listing blocks
      
      
      > **Note**  
      > everything happens in `blocks/` for now and it's hardcoded
      e19e3d77
    • STEVAN Antoine's avatar
      some miscellaneous work (dragoon/komodo!15) · 3371ccc9
      STEVAN Antoine authored
      ## changelog
      - add an `inspect` command to `komodo` through `main.rs`
      - remove the useless `Shard.mul` implementation and tests
      - because `i` is a `u128`, use `i.to_le_bytes()` instead of `[i as u8]` in calls to `E::ScalarField::from_le_bytes_mod_order`
      - add to `tests/cli.nu` the cases tha should fail
      - merge together the tests in `lib.rs`, e.g. `verify_2`, `verify_4` and `verify_6` become a simpler `verification`
      - add some documentation and NOTEs
      - `impl`ement `Display` for `Block` to dump it to `stdout`
      - print more detailed test cases when a test fails
      3371ccc9
    • STEVAN Antoine's avatar
      add support for decoding recoded shards (dragoon/komodo!13) · 4493022b
      STEVAN Antoine authored
      - should close dragoon/komodo#3
      - based on top of dragoon/komodo!12
      
      > **Note**  
      > - commits containing "_DEBUG_" will be removed once this is done
      > - this MR is based on dragoon/komodo!12 and will be rebased on top of `main` once dragoon/komodo!12 lands
      
      i think this is best [reviewed commit by commit](dragoon/komodo!13 (58cec473))
      4493022b
  16. Dec 06, 2023
  17. Dec 01, 2023
  18. Nov 30, 2023
Loading