diff --git a/Cargo.toml b/Cargo.toml index 8371096a..b9f1074c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,4 +1,5 @@ [workspace] +resolver = "2" members = [ "arithmetic", "hyperplonk", diff --git a/arithmetic/src/univariate_polynomial.rs b/arithmetic/src/univariate_polynomial.rs index 674bac95..d730fe19 100644 --- a/arithmetic/src/univariate_polynomial.rs +++ b/arithmetic/src/univariate_polynomial.rs @@ -86,10 +86,6 @@ mod test { #[test] fn test_build_l_with_suffix() -> Result<(), ArithErrors> { - test_build_l_with_suffix_helper::() - } - - fn test_build_l_with_suffix_helper() -> Result<(), ArithErrors> { // point 1 is [1, 2] let point1 = vec![Fr::from(1u64), Fr::from(2u64)]; @@ -228,10 +224,6 @@ mod test { #[test] fn test_build_l() -> Result<(), ArithErrors> { - test_build_l_helper::() - } - - fn test_build_l_helper() -> Result<(), ArithErrors> { // point 1 is [1, 2] let point1 = vec![Fr::from(1u64), Fr::from(2u64)]; diff --git a/arithmetic/src/virtual_polynomial.rs b/arithmetic/src/virtual_polynomial.rs index 3d3e5d47..96eb53f9 100644 --- a/arithmetic/src/virtual_polynomial.rs +++ b/arithmetic/src/virtual_polynomial.rs @@ -99,7 +99,7 @@ impl VirtualPolynomial { aux_info: VPAuxInfo { max_degree: 0, num_variables, - phantom: PhantomData::default(), + phantom: PhantomData, }, products: Vec::new(), flattened_ml_extensions: Vec::new(), @@ -118,7 +118,7 @@ impl VirtualPolynomial { // The max degree is the max degree of any individual variable max_degree: 1, num_variables: mle.num_vars, - phantom: PhantomData::default(), + phantom: PhantomData, }, // here `0` points to the first polynomial of `flattened_ml_extensions` products: vec![(coefficient, vec![0])], @@ -174,6 +174,7 @@ impl VirtualPolynomial { /// Multiple the current VirtualPolynomial by an MLE: /// - add the MLE to the MLE list; /// - multiple each product by MLE and its coefficient. + /// /// Returns an error if the MLE has a different `num_vars` from self. pub fn mul_by_mle( &mut self, diff --git a/bench_results/plot_spartan b/bench_results/plot_spartan index cd5a9f6c..02bd6747 100644 --- a/bench_results/plot_spartan +++ b/bench_results/plot_spartan @@ -19,7 +19,7 @@ set logscale y set xrange [9:20] # set title font ",10" # set key title "Proving time" -set xlabel "log \# constraits" +set xlabel "log \# constraints" set ylabel 'time (sec)' # set xtics (4,8,16,32,64) plot spartan using 1:2 w lp t "spartan",\ @@ -48,7 +48,7 @@ set grid set xrange [9:20] set title font ",10" # set key title "Proving time" -set xlabel "log \# constraits" +set xlabel "log \# constraints" set ylabel 'ratio ' # set xtics (4,8,16,32,64) plot ratio using 1:6 w lp t "Jellyfish/Hyperplonk",\ diff --git a/flake.lock b/flake.lock index 0e088361..c82c1b06 100644 --- a/flake.lock +++ b/flake.lock @@ -3,11 +3,11 @@ "flake-compat": { "flake": false, "locked": { - "lastModified": 1668681692, - "narHash": "sha256-Ht91NGdewz8IQLtWZ9LCeNXMSXHUss+9COoqu6JLmXU=", + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", "owner": "edolstra", "repo": "flake-compat", - "rev": "009399224d5e398d03b22badca40a37ac85412a1", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", "type": "github" }, "original": { @@ -16,28 +16,32 @@ "type": "github" } }, - "flake-utils": { + "flake-compat_2": { + "flake": false, "locked": { - "lastModified": 1667395993, - "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", "type": "github" }, "original": { - "owner": "numtide", - "repo": "flake-utils", + "owner": "edolstra", + "repo": "flake-compat", "type": "github" } }, - "flake-utils_2": { + "flake-utils": { + "inputs": { + "systems": "systems" + }, "locked": { - "lastModified": 1667077288, - "narHash": "sha256-bdC8sFNDpT0HK74u9fUkpbf1MEzVYJ+ka7NXCdgBoaA=", + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", "owner": "numtide", "repo": "flake-utils", - "rev": "6ee9ebb6b1ee695d2cacc4faa053a7b9baa76817", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", "type": "github" }, "original": { @@ -46,28 +50,34 @@ "type": "github" } }, - "flake-utils_3": { + "gitignore": { + "inputs": { + "nixpkgs": [ + "pre-commit-hooks", + "nixpkgs" + ] + }, "locked": { - "lastModified": 1659877975, - "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", "type": "github" }, "original": { - "owner": "numtide", - "repo": "flake-utils", + "owner": "hercules-ci", + "repo": "gitignore.nix", "type": "github" } }, "nixpkgs": { "locked": { - "lastModified": 1668765800, - "narHash": "sha256-rC40+/W6Hio7b/RsY8SvQPKNx4WqNcTgfYv8cUMAvJk=", + "lastModified": 1724224976, + "narHash": "sha256-Z/ELQhrSd7bMzTO8r7NZgi9g5emh+aRKoCdaAv5fiO0=", "owner": "nixos", "repo": "nixpkgs", - "rev": "52b2ac8ae18bbad4374ff0dd5aeee0fdf1aea739", + "rev": "c374d94f1536013ca8e92341b540eba4c22f9c62", "type": "github" }, "original": { @@ -77,13 +87,29 @@ "type": "github" } }, + "nixpkgs-stable": { + "locked": { + "lastModified": 1720386169, + "narHash": "sha256-NGKVY4PjzwAa4upkGtAMz1npHGoRzWotlSnVlqI40mo=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "194846768975b7ad2c4988bdb82572c00222c0d7", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-24.05", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs_2": { "locked": { - "lastModified": 1665296151, - "narHash": "sha256-uOB0oxqxN9K7XGF1hcnY+PQnlQJ+3bP2vCn/+Ru/bbc=", + "lastModified": 1718428119, + "narHash": "sha256-WdWDpNaq6u1IPtxtYHHWpl5BmabtpmLnMAx0RdJ/vo8=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "14ccaaedd95a488dd7ae142757884d8e125b3363", + "rev": "e6cea36f83499eb4e9cd184c8a8e823296b50ad5", "type": "github" }, "original": { @@ -95,17 +121,19 @@ }, "pre-commit-hooks": { "inputs": { - "flake-utils": "flake-utils_2", + "flake-compat": "flake-compat_2", + "gitignore": "gitignore", "nixpkgs": [ "nixpkgs" - ] + ], + "nixpkgs-stable": "nixpkgs-stable" }, "locked": { - "lastModified": 1667992213, - "narHash": "sha256-8Ens8ozllvlaFMCZBxg6S7oUyynYx2v7yleC5M0jJsE=", + "lastModified": 1724440431, + "narHash": "sha256-9etXEOUtzeMgqg1u0wp+EdwG7RpmrAZ2yX516bMj2aE=", "owner": "cachix", "repo": "pre-commit-hooks.nix", - "rev": "ebcbfe09d2bd6d15f68de3a0ebb1e4dcb5cd324b", + "rev": "c8a54057aae480c56e28ef3e14e4960628ac495b", "type": "github" }, "original": { @@ -125,15 +153,14 @@ }, "rust-overlay": { "inputs": { - "flake-utils": "flake-utils_3", "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1668825399, - "narHash": "sha256-F2ro05D6tGMwSaOYeIediJq6X0ATD7JgWEG2TgOs9Wo=", + "lastModified": 1724638882, + "narHash": "sha256-ap2jIQi/FuUHR6HCht6ASWhoz8EiB99XmI8Esot38VE=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "a705fe51ef5cdf932ff1cb342f0fe9e5d66f1b71", + "rev": "19b70f147b9c67a759e35824b241f1ed92e46694", "type": "github" }, "original": { @@ -141,6 +168,21 @@ "repo": "rust-overlay", "type": "github" } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } } }, "root": "root", diff --git a/flake.nix b/flake.nix index 58b512ca..919bd460 100644 --- a/flake.nix +++ b/flake.nix @@ -53,6 +53,12 @@ entry = "cargo sort -w"; pass_filenames = false; }; + spell-check = { + enable = true; + description = "Spell check"; + entry = "typos"; + pass_filenames = false; + }; }; }; }; @@ -60,8 +66,9 @@ buildInputs = [ argbash openssl - pkgconfig + pkg-config git + typos stableToolchain nightlyToolchain diff --git a/hyperplonk/src/lib.rs b/hyperplonk/src/lib.rs index 4044a11a..47a2588b 100644 --- a/hyperplonk/src/lib.rs +++ b/hyperplonk/src/lib.rs @@ -38,6 +38,7 @@ where /// Inputs: /// - `index`: HyperPlonk index /// - `pcs_srs`: Polynomial commitment structured reference string + /// /// Outputs: /// - The HyperPlonk proving key, which includes the preprocessed /// polynomials. @@ -54,6 +55,7 @@ where /// - `pk`: circuit proving key /// - `pub_input`: online public input /// - `witness`: witness assignment + /// /// Outputs: /// - The HyperPlonk SNARK proof. fn prove( @@ -68,6 +70,7 @@ where /// - `vk`: verifying key /// - `pub_input`: online public input /// - `proof`: HyperPlonk SNARK proof challenges + /// /// Outputs: /// - Return a boolean on whether the verification is successful fn verify( diff --git a/hyperplonk/src/snark.rs b/hyperplonk/src/snark.rs index 7db5f9cb..72c3a884 100644 --- a/hyperplonk/src/snark.rs +++ b/hyperplonk/src/snark.rs @@ -110,13 +110,14 @@ where /// - `pk`: circuit proving key /// - `pub_input`: online public input of length 2^\ell /// - `witness`: witness assignment of length 2^n + /// /// Outputs: /// - The HyperPlonk SNARK proof. /// /// Steps: /// /// 1. Commit Witness polynomials `w_i(x)` and append commitment to - /// transcript + /// transcript /// /// 2. Run ZeroCheck on /// @@ -130,7 +131,7 @@ where /// in vanilla plonk, and obtain a ZeroCheckSubClaim /// /// 3. Run permutation check on `\{w_i(x)\}` and `permutation_oracle`, and - /// obtain a PermCheckSubClaim. + /// obtain a PermCheckSubClaim. /// /// 4. Generate evaluations and corresponding proofs /// - 4.1. (deferred) batch opening prod(x) at @@ -363,6 +364,7 @@ where /// - `vk`: verification key /// - `pub_input`: online public input /// - `proof`: HyperPlonk SNARK proof + /// /// Outputs: /// - Return a boolean on whether the verification is successful /// @@ -426,8 +428,7 @@ where let pi_eval = proof.batch_openings.f_i_eval_at_point_i.last().unwrap(); // ======================================================================= - // 1. Verify zero_check_proof on - // `f(q_0(x),...q_l(x), w_0(x),...w_d(x))` + // 1. Verify zero_check_proof on `f(q_0(x),...q_l(x), w_0(x),...w_d(x))` // // where `f` is the constraint polynomial i.e., // @@ -440,7 +441,7 @@ where let zero_check_aux_info = VPAuxInfo:: { max_degree: vk.params.gate_func.degree(), num_variables: num_vars, - phantom: PhantomData::default(), + phantom: PhantomData, }; // push witness to transcript for w_com in proof.witness_commits.iter() { @@ -474,7 +475,7 @@ where // Prod(x) has a max degree of witnesses.len() + 1 max_degree: proof.witness_commits.len() + 1, num_variables: num_vars, - phantom: PhantomData::default(), + phantom: PhantomData, }; let perm_check_sub_claim = >::verify( &proof.perm_check_proof, diff --git a/hyperplonk/src/utils.rs b/hyperplonk/src/utils.rs index 4853c97c..349aaffd 100644 --- a/hyperplonk/src/utils.rs +++ b/hyperplonk/src/utils.rs @@ -129,7 +129,7 @@ pub(crate) fn prover_sanity_check( if pub_input.len() > params.num_constraints { return Err(HyperPlonkErrors::InvalidProver(format!( - "Public input length {} is greater than num constraits {}", + "Public input length {} is greater than num constraints {}", pub_input.len(), params.num_pub_input ))); diff --git a/subroutines/benches/iop_bench.rs b/subroutines/benches/iop_bench.rs index a5766fb0..c06bfea7 100644 --- a/subroutines/benches/iop_bench.rs +++ b/subroutines/benches/iop_bench.rs @@ -181,7 +181,7 @@ fn bench_permutation_check() -> Result<(), PolyIOPErrors> { let poly_info = VPAuxInfo { max_degree: 2, num_variables: nv, - phantom: PhantomData::default(), + phantom: PhantomData, }; let start = Instant::now(); @@ -252,7 +252,7 @@ fn bench_prod_check() -> Result<(), PolyIOPErrors> { let poly_info = VPAuxInfo { max_degree: 2, num_variables: nv, - phantom: PhantomData::default(), + phantom: PhantomData, }; let start = Instant::now(); diff --git a/subroutines/src/lib.rs b/subroutines/src/lib.rs index 5281aeba..8f4cccf8 100644 --- a/subroutines/src/lib.rs +++ b/subroutines/src/lib.rs @@ -4,6 +4,8 @@ // You should have received a copy of the MIT License // along with the HyperPlonk library. If not, see . +#![allow(clippy::non_canonical_clone_impl)] // using `derivative` + pub mod pcs; pub mod poly_iop; diff --git a/subroutines/src/pcs/multilinear_kzg/batching.rs b/subroutines/src/pcs/multilinear_kzg/batching.rs index 9a54a46c..9219d2d7 100644 --- a/subroutines/src/pcs/multilinear_kzg/batching.rs +++ b/subroutines/src/pcs/multilinear_kzg/batching.rs @@ -47,7 +47,7 @@ where /// 4. compute \tilde eq_i(b) = eq(b, point_i) /// 5. run sumcheck on \sum_i=1..k \tilde eq_i * \tilde g_i /// 6. build g'(X) = \sum_i=1..k \tilde eq_i(a2) * \tilde g_i(X) where (a2) is -/// the sumcheck's point 7. open g'(X) at point (a2) +/// the sumcheck's point 7. open g'(X) at point (a2) pub(crate) fn multi_open_internal( prover_param: &PCS::ProverParam, polynomials: &[PCS::Polynomial], @@ -179,7 +179,7 @@ where /// 1. get challenge point t from transcript /// 2. build g' commitment /// 3. ensure \sum_i eq(a2, point_i) * eq(t, ) * f_i_evals matches the sum -/// via SumCheck verification 4. verify commitment +/// via SumCheck verification 4. verify commitment pub(crate) fn batch_verify_internal( verifier_param: &PCS::VerifierParam, f_i_commitments: &[Commitment], @@ -304,7 +304,7 @@ mod tests { let commitments = polys .iter() - .map(|poly| MultilinearKzgPCS::commit(&ml_ck.clone(), poly).unwrap()) + .map(|poly| MultilinearKzgPCS::commit(ml_ck.clone(), poly).unwrap()) .collect::>(); let mut transcript = IOPTranscript::new("test transcript".as_ref()); diff --git a/subroutines/src/pcs/multilinear_kzg/srs.rs b/subroutines/src/pcs/multilinear_kzg/srs.rs index 91687ca3..6fcefc8f 100644 --- a/subroutines/src/pcs/multilinear_kzg/srs.rs +++ b/subroutines/src/pcs/multilinear_kzg/srs.rs @@ -145,7 +145,7 @@ impl StructuredReferenceString for MultilinearUniversalParams let scalar_bits = E::ScalarField::MODULUS_BIT_SIZE as usize; let mut eq: LinkedList> = - LinkedList::from_iter(eq_extension(&t).into_iter()); + LinkedList::from_iter(eq_extension(&t)); let mut eq_arr = LinkedList::new(); let mut base = eq.pop_back().unwrap().evaluations; diff --git a/subroutines/src/pcs/univariate_kzg/mod.rs b/subroutines/src/pcs/univariate_kzg/mod.rs index 252c0d0d..194cbef9 100644 --- a/subroutines/src/pcs/univariate_kzg/mod.rs +++ b/subroutines/src/pcs/univariate_kzg/mod.rs @@ -86,7 +86,7 @@ impl PolynomialCommitmentScheme for UnivariateKzgPCS { } /// Generate a commitment for a polynomial - /// Note that the scheme is not hidding + /// Note that the scheme is not hiding fn commit( prover_param: impl Borrow, poly: &Self::Polynomial, diff --git a/subroutines/src/poly_iop/perm_check/mod.rs b/subroutines/src/poly_iop/perm_check/mod.rs index afff80e8..1d0f3f70 100644 --- a/subroutines/src/poly_iop/perm_check/mod.rs +++ b/subroutines/src/poly_iop/perm_check/mod.rs @@ -66,6 +66,7 @@ where /// - fs = (f1, ..., fk) /// - gs = (g1, ..., gk) /// - permutation oracles = (p1, ..., pk) + /// /// Outputs: /// - a permutation check proof proving that gs is a permutation of fs under /// permutation @@ -220,7 +221,7 @@ mod test { let poly_info = VPAuxInfo { max_degree: fxs.len() + 1, num_variables: nv, - phantom: PhantomData::default(), + phantom: PhantomData, }; // prover diff --git a/subroutines/src/poly_iop/prelude.rs b/subroutines/src/poly_iop/prelude.rs index 50a43edf..88bd7617 100644 --- a/subroutines/src/poly_iop/prelude.rs +++ b/subroutines/src/poly_iop/prelude.rs @@ -4,6 +4,8 @@ // You should have received a copy of the MIT License // along with the HyperPlonk library. If not, see . +#![allow(unused_imports)] + pub use crate::poly_iop::{ errors::PolyIOPErrors, perm_check::PermutationCheck, prod_check::ProductCheck, structs::IOPProof, sum_check::SumCheck, utils::*, zero_check::ZeroCheck, PolyIOP, diff --git a/subroutines/src/poly_iop/prod_check/mod.rs b/subroutines/src/poly_iop/prod_check/mod.rs index 2e0225a9..3ae130d5 100644 --- a/subroutines/src/poly_iop/prod_check/mod.rs +++ b/subroutines/src/poly_iop/prod_check/mod.rs @@ -34,24 +34,24 @@ mod util; /// /// Prover steps: /// 1. build MLE `frac(x)` s.t. `frac(x) = f1(x) * ... * fk(x) / (g1(x) * ... * -/// gk(x))` for all x \in {0,1}^n 2. build `prod(x)` from `frac(x)`, where -/// `prod(x)` equals to `v(1,x)` in the paper 2. push commitments of `frac(x)` -/// and `prod(x)` to the transcript, and `generate_challenge` from current -/// transcript (generate alpha) 3. generate the zerocheck proof for the virtual -/// polynomial Q(x): prod(x) - p1(x) * p2(x) -/// + alpha * frac(x) * g1(x) * ... * gk(x) +/// gk(x))` for all x \in {0,1}^n 2. build `prod(x)` from `frac(x)`, where +/// `prod(x)` equals to `v(1,x)` in the paper +/// 2. push commitments of `frac(x)` and `prod(x)` to the transcript, and +/// `generate_challenge` from current transcript (generate alpha) 3. generate +/// the zerocheck proof for the virtual polynomial: +/// +/// Q(x) = prod(x) - p1(x) * p2(x) + alpha * frac(x) * g1(x) * ... * gk(x) /// - alpha * f1(x) * ... * fk(x) -/// where p1(x) = (1-x1) * frac(x2, ..., xn, 0) -/// + x1 * prod(x2, ..., xn, 0), -/// and p2(x) = (1-x1) * frac(x2, ..., xn, 1) -/// + x1 * prod(x2, ..., xn, 1) +/// +/// where p1(x) = (1-x1) * frac(x2, ..., xn, 0) + x1 * prod(x2, ..., xn, 0), +/// and p2(x) = (1-x1) * frac(x2, ..., xn, 1) + x1 * prod(x2, ..., xn, 1) /// /// Verifier steps: -/// 1. Extract commitments of `frac(x)` and `prod(x)` from the proof, push -/// them to the transcript +/// 1. Extract commitments of `frac(x)` and `prod(x)` from the proof, push them +/// to the transcript /// 2. `generate_challenge` from current transcript (generate alpha) /// 3. `verify` to verify the zerocheck proof and generate the subclaim for -/// polynomial evaluations +/// polynomial evaluations pub trait ProductCheck: ZeroCheck where E: Pairing, @@ -323,7 +323,7 @@ mod test { let aux_info = VPAuxInfo { max_degree: fs.len() + 1, num_variables: fs[0].num_vars, - phantom: PhantomData::default(), + phantom: PhantomData, }; let prod_subclaim = as ProductCheck>::verify( &proof, diff --git a/subroutines/src/poly_iop/prod_check/util.rs b/subroutines/src/poly_iop/prod_check/util.rs index ded6e24c..02f87f37 100644 --- a/subroutines/src/poly_iop/prod_check/util.rs +++ b/subroutines/src/poly_iop/prod_check/util.rs @@ -115,6 +115,7 @@ pub(super) fn compute_product_poly( /// * ... * fk(x)] where p1(x) = (1-x1) * frac(x2, ..., xn, 0) + x1 * prod(x2, /// ..., xn, 0), p2(x) = (1-x1) * frac(x2, ..., xn, 1) + x1 * prod(x2, ..., /// xn, 1) +/// /// Returns proof. /// /// Cost: O(N) diff --git a/subroutines/src/poly_iop/sum_check/prover.rs b/subroutines/src/poly_iop/sum_check/prover.rs index f59e0ab2..2c87dba9 100644 --- a/subroutines/src/poly_iop/sum_check/prover.rs +++ b/subroutines/src/poly_iop/sum_check/prover.rs @@ -189,7 +189,8 @@ fn barycentric_weights(points: &[F]) -> Vec { points .iter() .enumerate() - .filter_map(|(i, point_i)| (i != j).then(|| *point_j - point_i)) + .filter(|&(i, _point_i)| (i != j)) + .map(|(_i, point_i)| *point_j - point_i) .reduce(|acc, value| acc * value) .unwrap_or_else(F::one) }) diff --git a/transcript/src/lib.rs b/transcript/src/lib.rs index 3129cae1..c3427d8f 100644 --- a/transcript/src/lib.rs +++ b/transcript/src/lib.rs @@ -41,7 +41,7 @@ impl IOPTranscript { Self { transcript: Transcript::new(label), is_empty: true, - phantom: PhantomData::default(), + phantom: PhantomData, } } diff --git a/typos.toml b/typos.toml new file mode 100644 index 00000000..3eefb315 --- /dev/null +++ b/typos.toml @@ -0,0 +1 @@ +# see