diff --git a/.drone.yml b/.drone.yml index 1f118084e..ed34bb4ea 100644 --- a/.drone.yml +++ b/.drone.yml @@ -53,10 +53,10 @@ steps: - cp /usr/local/bin/mina cli/bin/ - name: build - image: rust:1.75-bullseye + image: rust:1.77-bullseye commands: - apt-get update && apt-get install -y libssl-dev libjemalloc-dev jq - - rustup update 1.75 && rustup default 1.75 + - rustup update 1.77 && rustup default 1.77 - rustup component add rustfmt # just to be sure it builds without errors - cargo build diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index ec0fac85d..af0cc1ca0 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -43,8 +43,8 @@ jobs: - name: Setup Rust run: | - rustup install 1.75 - rustup override set 1.75 + rustup install 1.77 + rustup override set 1.77 rustup component add clippy rustfmt # - name: Check diff --git a/.github/workflows/rustfmt.yml b/.github/workflows/rustfmt.yml index 3c7c374cd..e732ff1a8 100644 --- a/.github/workflows/rustfmt.yml +++ b/.github/workflows/rustfmt.yml @@ -13,7 +13,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions-rs/toolchain@v1 with: - toolchain: 1.75 + toolchain: 1.77 default: true - run: rustup component add rustfmt - uses: actions-rs/cargo@v1 diff --git a/CHANGELOG.md b/CHANGELOG.md index c6c9c0dff..daba91f24 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Changed + +- Change minimum Rust toolchain to 1.77. + ## [0.2.0] - 2024-02-29 ### Changed diff --git a/Dockerfile b/Dockerfile index ced0e2df7..d1ff1db5c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG MINA_SNARK_WORKER_TAG=0.0.9 FROM rust:buster AS build -RUN rustup default 1.75 && rustup component add rustfmt +RUN rustup default 1.77 && rustup component add rustfmt WORKDIR /openmina COPY . . RUN cargo build --release --package=cli --bin=openmina diff --git a/README.md b/README.md index 05679ba63..c4655fd24 100644 --- a/README.md +++ b/README.md @@ -72,8 +72,8 @@ Open up the command line and enter the following: And then: ```sh -# Install rustup and set the default Rust toolchain to 1.75 (newer versions work too) -curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain 1.75 +# Install rustup and set the default Rust toolchain to 1.77 (newer versions work too) +curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain 1.77 # Setup the current shell with rustup source "$HOME/.cargo/env" # Clone the openmina repository diff --git a/ledger/src/account/conv.rs b/ledger/src/account/conv.rs index 56abf7b59..818e8d472 100644 --- a/ledger/src/account/conv.rs +++ b/ledger/src/account/conv.rs @@ -8,7 +8,7 @@ use mina_p2p_messages::{ binprot, pseq::PaddedSeq, v2::{ - MinaBaseAccountBinableArgStableV2, MinaBaseAccountIdDigestStableV1, + self, MinaBaseAccountBinableArgStableV2, MinaBaseAccountIdDigestStableV1, MinaBaseAccountIdStableV2, MinaBaseAccountIndexStableV1, MinaBaseAccountTimingStableV2, MinaBasePermissionsAuthRequiredStableV2, MinaBasePermissionsStableV2, MinaBaseVerificationKeyWireStableV1, MinaBaseVerificationKeyWireStableV1WrapIndex, @@ -115,7 +115,7 @@ where T: 'a, U: From<&'a T>, { - std::array::from_fn(|i| U::from(&value[i])) + value.each_ref().map(|value| U::from(value)) } pub fn array_into_with<'a, T, U, F, const N: usize>(value: &'a [T; N], fun: F) -> [U; N] @@ -123,7 +123,7 @@ where T: 'a, F: Fn(&T) -> U, { - std::array::from_fn(|i| fun(&value[i])) + value.each_ref().map(|value| fun(value)) } impl From<&MinaBaseVerificationKeyWireStableV1> for VerificationKey { @@ -509,16 +509,24 @@ impl From<&MinaBaseAccountBinableArgStableV2> for Account { timing: (&acc.timing).into(), permissions: (&acc.permissions).into(), zkapp: acc.zkapp.as_ref().map(|zkapp| { - let app_state = std::array::from_fn(|i| zkapp.app_state[i].to_field()); + let v2::MinaBaseZkappAccountStableV2 { + app_state, + verification_key, + zkapp_version, + action_state, + last_action_slot, + proved_state, + zkapp_uri, + } = zkapp; ZkAppAccount { - app_state, - verification_key: zkapp.verification_key.as_ref().map(Into::into), - zkapp_version: zkapp.zkapp_version.as_u32(), - action_state: std::array::from_fn(|i| zkapp.action_state[i].to_field()), - last_action_slot: Slot::from_u32(zkapp.last_action_slot.as_u32()), - proved_state: zkapp.proved_state, - zkapp_uri: (&zkapp.zkapp_uri).try_into().unwrap(), + app_state: app_state.each_ref().map(|s| s.to_field()), + verification_key: verification_key.as_ref().map(Into::into), + zkapp_version: zkapp_version.as_u32(), + action_state: action_state.each_ref().map(|s| s.to_field()), + last_action_slot: Slot::from_u32(last_action_slot.as_u32()), + proved_state: *proved_state, + zkapp_uri: zkapp_uri.try_into().unwrap(), } }), } diff --git a/ledger/src/proofs/accumulator_check.rs b/ledger/src/proofs/accumulator_check.rs index 4010e74d0..857a000a0 100644 --- a/ledger/src/proofs/accumulator_check.rs +++ b/ledger/src/proofs/accumulator_check.rs @@ -1,5 +1,3 @@ -use std::array; - use mina_curves::pasta::Vesta; use mina_hasher::Fp; use mina_p2p_messages::{bigint::BigInt, v2::PicklesProofProofsVerified2ReprStableV2}; @@ -23,7 +21,7 @@ pub fn accumulator_check( .iter() .map(|chal| { let prechallenge = &chal.prechallenge.inner; - let prechallenge: [u64; 2] = array::from_fn(|k| prechallenge[k].as_u64()); + let prechallenge: [u64; 2] = prechallenge.each_ref().map(|c| c.as_u64()); ScalarChallenge::limbs_to_field(&prechallenge) }) diff --git a/ledger/src/proofs/block.rs b/ledger/src/proofs/block.rs index b1abedf00..557076c62 100644 --- a/ledger/src/proofs/block.rs +++ b/ledger/src/proofs/block.rs @@ -702,8 +702,8 @@ mod vrf { pub const VRF_OUTPUT_NBITS: usize = 253; fn truncate_vrf_output(output: Fp, w: &mut Witness) -> Box<[bool; VRF_OUTPUT_NBITS]> { - let output = w.exists(field_to_bits::<_, 255>(output)); - Box::new(std::array::from_fn(|i| output[i])) + let output: [bool; 255] = w.exists(field_to_bits(output)); + Box::new(std::array::from_fn(|i| output[i])) // 2 last bits are ignored } pub fn check( diff --git a/ledger/src/proofs/caching.rs b/ledger/src/proofs/caching.rs index 5417fe60a..b19593122 100644 --- a/ledger/src/proofs/caching.rs +++ b/ledger/src/proofs/caching.rs @@ -328,7 +328,7 @@ impl From<&VerifierIndex> for VerifierIndexCached { foreign_field_mul_comm: foreign_field_mul_comm.clone(), xor_comm: xor_comm.clone(), rot_comm: rot_comm.clone(), - shift: std::array::from_fn(|i| shift[i].into()), + shift: shift.each_ref().map(|s| s.into()), zkpm: zkpm.get().unwrap().into(), w: (*w.get().unwrap()).into(), endo: endo.into(), @@ -384,7 +384,7 @@ impl From<&VerifierIndexCached> for VerifierIndex { endomul_scalar_comm: endomul_scalar_comm.clone(), foreign_field_add_comm: foreign_field_add_comm.clone(), xor_comm: xor_comm.clone(), - shift: std::array::from_fn(|i| shift[i].to_field()), + shift: shift.each_ref().map(|s| s.to_field()), zkpm: OnceCell::with_value(zkpm.into()), w: OnceCell::with_value(w.to_field()), endo: endo.to_field(), diff --git a/ledger/src/proofs/merge.rs b/ledger/src/proofs/merge.rs index a7474fd0e..cddc61fab 100644 --- a/ledger/src/proofs/merge.rs +++ b/ledger/src/proofs/merge.rs @@ -113,10 +113,12 @@ impl feature_flags: _, // TODO: Handle features flags } = value; - let alpha_bytes = std::array::from_fn(|i| alpha.inner[i].as_u64()); - let beta_bytes = std::array::from_fn(|i| beta[i].as_u64()); - let gamma_bytes = std::array::from_fn(|i| gamma[i].as_u64()); - let zeta_bytes = std::array::from_fn(|i| zeta.inner[i].as_u64()); + let to_bytes = |v: &v2::LimbVectorConstantHex64StableV1| v.as_u64(); + + let alpha_bytes = alpha.inner.each_ref().map(to_bytes); + let beta_bytes = beta.each_ref().map(to_bytes); + let gamma_bytes = gamma.each_ref().map(to_bytes); + let zeta_bytes = zeta.inner.each_ref().map(to_bytes); assert!(joint_combiner.is_none()); diff --git a/ledger/src/proofs/prover.rs b/ledger/src/proofs/prover.rs index f259e275e..aa5f4d702 100644 --- a/ledger/src/proofs/prover.rs +++ b/ledger/src/proofs/prover.rs @@ -1,4 +1,4 @@ -use std::{array, borrow::Cow, str::FromStr}; +use std::{borrow::Cow, str::FromStr}; use kimchi::{ poly_commitment::PolyComm, @@ -46,10 +46,8 @@ pub fn make_padded_proof_from_p2p( shifted: None, }; - let w_comm: [PolyComm; 15] = - array::from_fn(|i| make_poly(&proof.commitments.w_comm[i])); + let w_comm: [PolyComm; 15] = proof.commitments.w_comm.each_ref().map(make_poly); let z_comm: PolyComm = make_poly(&proof.commitments.z_comm); - // let t_comm: [PolyComm; 7] = array::from_fn(|i| make_poly(&proof.commitments.t_comm[i])); let t_comm: PolyComm = { let unshifted = proof.commitments.t_comm.iter().map(of_coord).collect(); PolyComm { @@ -84,12 +82,12 @@ pub fn make_padded_proof_from_p2p( }; let evals: ProofEvaluations>> = ProofEvaluations { - w: array::from_fn(|i| to_pt_eval(&evals.w[i])), + w: evals.w.each_ref().map(to_pt_eval), z: to_pt_eval(&evals.z), - s: array::from_fn(|i| to_pt_eval(&evals.s[i])), + s: evals.s.each_ref().map(to_pt_eval), generic_selector: to_pt_eval(&evals.generic_selector), poseidon_selector: to_pt_eval(&evals.poseidon_selector), - coefficients: array::from_fn(|i| to_pt_eval(&evals.coefficients[i])), + coefficients: evals.coefficients.each_ref().map(to_pt_eval), complete_add_selector: to_pt_eval(&evals.complete_add_selector), mul_selector: to_pt_eval(&evals.mul_selector), emul_selector: to_pt_eval(&evals.emul_selector), diff --git a/ledger/src/proofs/public_input/messages.rs b/ledger/src/proofs/public_input/messages.rs index cb192cbd2..99694af89 100644 --- a/ledger/src/proofs/public_input/messages.rs +++ b/ledger/src/proofs/public_input/messages.rs @@ -17,8 +17,8 @@ impl<'a> From<&'a VerifierIndex> for PlonkVerificationKeyEvals { let to_curve = |v: &PolyComm| InnerCurve::of_affine(v.unshifted[0]); Self { - sigma: std::array::from_fn(|i| to_curve(&verifier_index.sigma_comm[i])), - coefficients: std::array::from_fn(|i| to_curve(&verifier_index.coefficients_comm[i])), + sigma: verifier_index.sigma_comm.each_ref().map(to_curve), + coefficients: verifier_index.coefficients_comm.each_ref().map(to_curve), generic: to_curve(&verifier_index.generic_comm), psm: to_curve(&verifier_index.psm_comm), complete_add: to_curve(&verifier_index.complete_add_comm), diff --git a/ledger/src/proofs/public_input/scalar_challenge.rs b/ledger/src/proofs/public_input/scalar_challenge.rs index f48e47d9c..8ed00dfb3 100644 --- a/ledger/src/proofs/public_input/scalar_challenge.rs +++ b/ledger/src/proofs/public_input/scalar_challenge.rs @@ -95,7 +95,7 @@ impl ScalarChallenge { pub fn array_to_fields(array: &[F; N]) -> [F; N] { let (_, endo) = endos::(); - std::array::from_fn(|i| Self::from(array[i]).to_field(&endo)) + array.each_ref().map(|v| Self::from(*v).to_field(&endo)) } pub fn limbs_to_field(limbs: &[u64; 2]) -> F { diff --git a/ledger/src/proofs/step.rs b/ledger/src/proofs/step.rs index 8011566f6..30bd0c476 100644 --- a/ledger/src/proofs/step.rs +++ b/ledger/src/proofs/step.rs @@ -209,16 +209,14 @@ impl From<&v2::PicklesProofProofsVerified2ReprStableV2StatementProofState> for S Self { deferred_values: StatementDeferredValues { plonk: plonk.into(), - bulletproof_challenges: std::array::from_fn(|i| { - std::array::from_fn(|j| { - bulletproof_challenges[i].prechallenge.inner[j].as_u64() - }) - }), + bulletproof_challenges: bulletproof_challenges + .each_ref() + .map(|challenge| challenge.prechallenge.inner.each_ref().map(|v| v.as_u64())), branch_data: branch_data.clone(), }, - sponge_digest_before_evaluations: std::array::from_fn(|i| { - sponge_digest_before_evaluations[i].as_u64() - }), + sponge_digest_before_evaluations: sponge_digest_before_evaluations + .each_ref() + .map(|v| v.as_u64()), messages_for_next_wrap_proof: MessagesForNextWrapProof { challenge_polynomial_commitment: InnerCurve::from(( c0.to_field::(), @@ -226,11 +224,9 @@ impl From<&v2::PicklesProofProofsVerified2ReprStableV2StatementProofState> for S )), old_bulletproof_challenges: old_bulletproof_challenges .iter() - .map(|v| { - std::array::from_fn(|i| { - u64_to_field::<_, 2>(&std::array::from_fn(|j| { - v.0[i].prechallenge.inner[j].as_u64() - })) + .map(|old_bulletproof_challenge| { + old_bulletproof_challenge.each_ref().map(|chal| { + u64_to_field(&chal.prechallenge.inner.each_ref().map(|v| v.as_u64())) }) }) .collect(), @@ -2101,17 +2097,17 @@ fn expand_proof(params: ExpandProofParams) -> ExpandedProof { .deferred_values .bulletproof_challenges .iter() - .map(|v| { - u64_to_field::<_, 2>(&std::array::from_fn(|i| { - v.prechallenge.inner[i].as_u64() - })) + .map(|challenge| { + u64_to_field(&challenge.prechallenge.inner.each_ref().map(|v| v.as_u64())) }) .collect(), branch_data: deferred_values.branch_data, }, - sponge_digest_before_evaluations: std::array::from_fn(|i| { - statement.proof_state.sponge_digest_before_evaluations[i].as_u64() - }), + sponge_digest_before_evaluations: statement + .proof_state + .sponge_digest_before_evaluations + .each_ref() + .map(|v| v.as_u64()), messages_for_next_wrap_proof: MessagesForNextWrapProof { old_bulletproof_challenges: prev_challenges.clone(), challenge_polynomial_commitment: { @@ -2473,9 +2469,8 @@ pub fn extract_recursion_challenges( ) -> Vec>> { use poly_commitment::PolyComm; - let comms: [(Fq, Fq); N] = std::array::from_fn(|i| { - let p = &proofs[i]; - let (a, b) = &p + let comms: [(Fq, Fq); N] = proofs.map(|proof| { + let (a, b) = &proof .statement .proof_state .messages_for_next_wrap_proof @@ -2582,15 +2577,15 @@ pub fn step( .unwrap(); let prevs: [&PerProofWitness; N_PREVIOUS] = - w.exists(std::array::from_fn(|i| &expanded_proofs[i].witness)); + w.exists(expanded_proofs.each_ref().map(|p| &p.witness)); let unfinalized_proofs_unextended: [&Unfinalized; N_PREVIOUS] = - w.exists(std::array::from_fn(|i| &expanded_proofs[i].unfinalized)); + w.exists(expanded_proofs.each_ref().map(|p| &p.unfinalized)); let messages_for_next_wrap_proof: [Fp; N_PREVIOUS] = { let f = u64_to_field::; - std::array::from_fn(|i| { - f(&expanded_proofs[i] - .prev_statement_with_hashes + + expanded_proofs.each_ref().map(|p| { + f(&p.prev_statement_with_hashes .proof_state .messages_for_next_wrap_proof) }) @@ -2611,7 +2606,7 @@ pub fn step( let all_possible_domains = wrap_verifier::all_possible_domains(); let actuals_wrap_domain: [u32; N_PREVIOUS] = - std::array::from_fn(|i| expanded_proofs[i].actual_wrap_domain); + expanded_proofs.each_ref().map(|p| p.actual_wrap_domain); actuals_wrap_domain.map(|domain_size| { let domain_size = domain_size as u64; @@ -2715,8 +2710,10 @@ pub fn step( w, )?; - let proofs: [&v2::PicklesProofProofsVerified2ReprStableV2; N_PREVIOUS] = - std::array::from_fn(|i| rule.previous_proof_statements[i].proof); + let proofs: [&v2::PicklesProofProofsVerified2ReprStableV2; N_PREVIOUS] = rule + .previous_proof_statements + .each_ref() + .map(|stmt| stmt.proof); let prev_evals = proofs .iter() @@ -2757,7 +2754,7 @@ pub fn step( let old_bulletproof_challenges = old_bulletproof_challenges .into_iter() - .map(|v: [[u64; 2]; 16]| std::array::from_fn(|i| u64_to_field::(&v[i]))) + .map(|v: [[u64; 2]; 16]| v.each_ref().map(u64_to_field)) .collect(); let step_statement = crate::proofs::transaction::StepStatement { diff --git a/ledger/src/proofs/transaction.rs b/ledger/src/proofs/transaction.rs index 1268bd887..5c0a1cada 100644 --- a/ledger/src/proofs/transaction.rs +++ b/ledger/src/proofs/transaction.rs @@ -523,18 +523,17 @@ impl CircuitPlonkVerificationKeyEvals { endomul_scalar, } = self; - use std::array; - let c = |c: &GroupAffine| InnerCurve::::of_affine(*c); + let c = |c: &CircuitVar>| InnerCurve::::of_affine(*c.value()); PlonkVerificationKeyEvals:: { - sigma: array::from_fn(|i| c(sigma[i].value())), - coefficients: array::from_fn(|i| c(coefficients[i].value())), - generic: c(generic.value()), - psm: c(psm.value()), - complete_add: c(&complete_add.value()), - mul: c(&mul.value()), - emul: c(&emul.value()), - endomul_scalar: c(&endomul_scalar.value()), + sigma: sigma.each_ref().map(c), + coefficients: coefficients.each_ref().map(c), + generic: c(generic), + psm: c(psm), + complete_add: c(complete_add), + mul: c(mul), + emul: c(emul), + endomul_scalar: c(endomul_scalar), } } } @@ -555,12 +554,11 @@ impl PlonkVerificationKeyEvals { endomul_scalar, } = self; - use std::array; let cvar = |c: &InnerCurve| cvar(c.to_affine()); CircuitPlonkVerificationKeyEvals:: { - sigma: array::from_fn(|i| cvar(&sigma[i])), - coefficients: array::from_fn(|i| cvar(&coefficients[i])), + sigma: sigma.each_ref().map(cvar), + coefficients: coefficients.each_ref().map(cvar), generic: cvar(&generic), psm: cvar(&psm), complete_add: cvar(&complete_add), diff --git a/ledger/src/proofs/unfinalized.rs b/ledger/src/proofs/unfinalized.rs index ee48da4d8..8ede9993c 100644 --- a/ledger/src/proofs/unfinalized.rs +++ b/ledger/src/proofs/unfinalized.rs @@ -195,10 +195,10 @@ pub fn evals_from_p2p( use std::array; ProofEvaluations { - w: array::from_fn(|i| of(&w[i])), + w: w.each_ref().map(of), z: of(z), - s: array::from_fn(|i| of(&s[i])), - coefficients: array::from_fn(|i| of(&coefficients[i])), + s: s.each_ref().map(of), + coefficients: coefficients.each_ref().map(of), generic_selector: of(generic_selector), poseidon_selector: of(poseidon_selector), complete_add_selector: of(complete_add_selector), @@ -288,7 +288,7 @@ pub fn dummy_ipa_step_challenges() -> [[u64; 2]; BACKEND_TICK_ROUNDS_N] { pub fn dummy_ipa_step_challenges_computed() -> [Fp; BACKEND_TICK_ROUNDS_N] { cache_one!([Fp; BACKEND_TICK_ROUNDS_N], { let challenges = dummy_ipa_step_challenges(); - std::array::from_fn(|i| ScalarChallenge::limbs_to_field(&challenges[i])) + challenges.each_ref().map(ScalarChallenge::limbs_to_field) }) } diff --git a/ledger/src/proofs/util.rs b/ledger/src/proofs/util.rs index 9a9ffcd73..667fcfd31 100644 --- a/ledger/src/proofs/util.rs +++ b/ledger/src/proofs/util.rs @@ -1,5 +1,3 @@ -use std::array; - use ark_ff::{BigInteger256, Field}; use kimchi::proof::ProofEvaluations; use mina_hasher::Fp; @@ -45,9 +43,8 @@ pub fn extract_bulletproof< ) -> Vec<[F; N]> { v.into_iter() .map(|old| { - array::from_fn(|j| { - let prechallenge = &old[j].prechallenge.inner; - let prechallenge: [u64; 2] = array::from_fn(|k| prechallenge[k].as_u64()); + old.each_ref().map(|old| { + let prechallenge = old.prechallenge.inner.each_ref().map(|v| v.as_u64()); ScalarChallenge::limbs_to_field(&prechallenge) }) }) diff --git a/ledger/src/proofs/verification.rs b/ledger/src/proofs/verification.rs index f3d75b83b..0dc3abc7d 100644 --- a/ledger/src/proofs/verification.rs +++ b/ledger/src/proofs/verification.rs @@ -1,4 +1,4 @@ -use std::{array, rc::Rc}; +use std::rc::Rc; use ark_poly::{EvaluationDomain, Radix2EvaluationDomain}; use poly_commitment::srs::SRS; @@ -181,10 +181,10 @@ pub fn prev_evals_from_p2p( let of_opt = |v: &Option<(_, _)>| v.as_ref().map(of); ProofEvaluations { - w: array::from_fn(|i| of(&w[i])), + w: w.each_ref().map(of), z: of(z), - s: array::from_fn(|i| of(&s[i])), - coefficients: array::from_fn(|i| of(&coefficients[i])), + s: s.each_ref().map(of), + coefficients: coefficients.each_ref().map(of), generic_selector: of(generic_selector), poseidon_selector: of(poseidon_selector), complete_add_selector: of(complete_add_selector), @@ -199,7 +199,7 @@ pub fn prev_evals_from_p2p( rot_selector: of_opt(rot_selector), lookup_aggregation: of_opt(lookup_aggregation), lookup_table: of_opt(lookup_table), - lookup_sorted: array::from_fn(|i| of_opt(&lookup_sorted[i])), + lookup_sorted: lookup_sorted.each_ref().map(of_opt), runtime_lookup_table: of_opt(runtime_lookup_table), runtime_lookup_table_selector: of_opt(runtime_lookup_table_selector), xor_lookup_selector: of_opt(xor_lookup_selector), @@ -248,10 +248,10 @@ pub fn prev_evals_to_p2p( let of_opt = |v: &Option<[Fp; 2]>| v.as_ref().map(of); PicklesProofProofsVerified2ReprStableV2PrevEvalsEvalsEvals { - w: PaddedSeq(array::from_fn(|i| of(&w[i]))), + w: PaddedSeq(w.each_ref().map(of)), z: of(z), - s: PaddedSeq(array::from_fn(|i| of(&s[i]))), - coefficients: PaddedSeq(array::from_fn(|i| of(&coefficients[i]))), + s: PaddedSeq(s.each_ref().map(of)), + coefficients: PaddedSeq(coefficients.each_ref().map(of)), generic_selector: of(generic_selector), poseidon_selector: of(poseidon_selector), complete_add_selector: of(complete_add_selector), @@ -266,7 +266,7 @@ pub fn prev_evals_to_p2p( rot_selector: of_opt(rot_selector), lookup_aggregation: of_opt(lookup_aggregation), lookup_table: of_opt(lookup_table), - lookup_sorted: PaddedSeq(array::from_fn(|i| of_opt(&lookup_sorted[i]))), + lookup_sorted: PaddedSeq(lookup_sorted.each_ref().map(of_opt)), runtime_lookup_table: of_opt(runtime_lookup_table), runtime_lookup_table_selector: of_opt(runtime_lookup_table_selector), xor_lookup_selector: of_opt(xor_lookup_selector), @@ -391,7 +391,7 @@ where AppState: ToFieldElements, { let digest = sponge_digest_before_evaluations; - let sponge_digest_before_evaluations: [u64; 4] = array::from_fn(|i| digest[i].as_u64()); + let sponge_digest_before_evaluations: [u64; 4] = digest.each_ref().map(|v| v.as_u64()); PreparedStatement { proof_state: ProofState { @@ -554,7 +554,7 @@ fn compute_deferred_values(proof: &PicklesProofProofsVerified2ReprStableV2) -> D .iter() .map(|chal| { let prechallenge = &chal.prechallenge.inner; - let prechallenge: [u64; 2] = array::from_fn(|k| prechallenge[k].as_u64()); + let prechallenge: [u64; 2] = prechallenge.each_ref().map(|v| v.as_u64()); u64_to_field(&prechallenge) }) .collect(); diff --git a/ledger/src/proofs/verifier_index.rs b/ledger/src/proofs/verifier_index.rs index 4617ddfe5..ff5ecae68 100644 --- a/ledger/src/proofs/verifier_index.rs +++ b/ledger/src/proofs/verifier_index.rs @@ -298,8 +298,8 @@ pub fn make_zkapp_verifier_index(vk: &VerificationKey) -> VerifierIndex srs: once_cell::sync::OnceCell::with_value(Arc::new(srs)), public, prev_challenges: 2, - sigma_comm: std::array::from_fn(|i| make_poly(&vk.wrap_index.sigma[i])), - coefficients_comm: std::array::from_fn(|i| make_poly(&vk.wrap_index.coefficients[i])), + sigma_comm: vk.wrap_index.sigma.each_ref().map(make_poly), + coefficients_comm: vk.wrap_index.coefficients.each_ref().map(make_poly), generic_comm: make_poly(&vk.wrap_index.generic), psm_comm: make_poly(&vk.wrap_index.psm), complete_add_comm: make_poly(&vk.wrap_index.complete_add), diff --git a/ledger/src/proofs/wrap.rs b/ledger/src/proofs/wrap.rs index ff42d3817..edcc8911d 100644 --- a/ledger/src/proofs/wrap.rs +++ b/ledger/src/proofs/wrap.rs @@ -1400,8 +1400,8 @@ pub mod wrap_verifier { }; let plonk_index = PlonkVerificationKeyEvals { - sigma: std::array::from_fn(|i| to_curve(&vk.sigma_comm[i])), - coefficients: std::array::from_fn(|i| to_curve(&vk.coefficients_comm[i])), + sigma: vk.sigma_comm.each_ref().map(to_curve), + coefficients: vk.coefficients_comm.each_ref().map(to_curve), generic: to_curve(&vk.generic_comm), psm: to_curve(&vk.psm_comm), complete_add: to_curve(&vk.complete_add_comm), diff --git a/ledger/src/proofs/zkapp.rs b/ledger/src/proofs/zkapp.rs index d0d5c6908..b3735f5af 100644 --- a/ledger/src/proofs/zkapp.rs +++ b/ledger/src/proofs/zkapp.rs @@ -1493,9 +1493,11 @@ impl From<&WrapProof> for v2::PicklesProofProofsVerified2ReprStableV2 { v2::CompositionTypesDigestConstantStableV1({ let BigInteger256(bigint) = (*sponge_digest_before_evaluations).into(); - PaddedSeq(array::from_fn(|i| { - v2::LimbVectorConstantHex64StableV1(bigint[i].into()) - })) + PaddedSeq( + bigint + .each_ref() + .map(|v| v2::LimbVectorConstantHex64StableV1(v.into())), + ) }), messages_for_next_wrap_proof: v2::PicklesProofProofsVerified2ReprStableV2MessagesForNextWrapProof { @@ -1565,7 +1567,7 @@ impl From<&WrapProof> for v2::PicklesProofProofsVerified2ReprStableV2 { }, proof: v2::PicklesWrapWireProofStableV1 { commitments: v2::PicklesWrapWireProofCommitmentsStableV1 { - w_comm: PaddedSeq(array::from_fn(|i| to_tuple(&w_comm[i].unshifted[0]))), + w_comm: PaddedSeq(w_comm.each_ref().map(|w| to_tuple(&w.unshifted[0]))), z_comm: to_tuple(&z_comm.unshifted[0]), t_comm: PaddedSeq(array::from_fn(|i| to_tuple(&t_comm.unshifted[i]))), }, @@ -1589,10 +1591,10 @@ impl From<&WrapProof> for v2::PicklesProofProofsVerified2ReprStableV2 { }; v2::PicklesWrapWireProofEvaluationsStableV1 { - w: PaddedSeq(array::from_fn(|i| to_tuple(&w[i]))), - coefficients: PaddedSeq(array::from_fn(|i| to_tuple(&coefficients[i]))), + w: PaddedSeq(w.each_ref().map(to_tuple)), + coefficients: PaddedSeq(coefficients.each_ref().map(to_tuple)), z: to_tuple(z), - s: PaddedSeq(array::from_fn(|i| to_tuple(&s[i]))), + s: PaddedSeq(s.each_ref().map(to_tuple)), generic_selector: to_tuple(generic_selector), poseidon_selector: to_tuple(poseidon_selector), complete_add_selector: to_tuple(complete_add_selector), diff --git a/ledger/src/scan_state/conv.rs b/ledger/src/scan_state/conv.rs index 45017f605..710be326d 100644 --- a/ledger/src/scan_state/conv.rs +++ b/ledger/src/scan_state/conv.rs @@ -1109,7 +1109,7 @@ impl From<&MinaBaseAccountUpdateTStableV1> for AccountUpdate { public_key: value.body.public_key.clone().into_inner().into(), token_id: value.body.token_id.clone().into_inner().into(), update: zkapp_command::Update { - app_state: std::array::from_fn(|i| match &value.body.update.app_state[i] { + app_state: value.body.update.app_state.each_ref().map(|s| match s { AppState::Set(bigint) => SetOrKeep::Set(bigint.to_field()), AppState::Keep => SetOrKeep::Keep, }), @@ -1283,7 +1283,7 @@ impl From<&AccountUpdate> for MinaBaseAccountUpdateTStableV1 { public_key: (&value.body.public_key).into(), token_id: (&value.body.token_id).into(), update: MinaBaseAccountUpdateUpdateStableV1 { - app_state: PaddedSeq(std::array::from_fn(|i| match &value.body.update.app_state[i] { + app_state: PaddedSeq(value.body.update.app_state.each_ref().map(|s| match s { SetOrKeep::Set(bigint) => AppState::Set(bigint.into()), SetOrKeep::Keep => AppState::Keep, })), diff --git a/ledger/src/zkapps/zkapp_logic.rs b/ledger/src/zkapps/zkapp_logic.rs index e5c99cfa8..6cc640352 100644 --- a/ledger/src/zkapps/zkapp_logic.rs +++ b/ledger/src/zkapps/zkapp_logic.rs @@ -816,13 +816,11 @@ where let (_a, _local_state) = { let app_state = &account_update.body().update.app_state; let keeping_app_state = { - let is_all_keep: [_; 8] = std::array::from_fn(|i| Z::SetOrKeep::is_keep(&app_state[i])); - assert_eq!(is_all_keep.len(), app_state.len()); // TODO: Use `array::each_ref` when stable + let is_all_keep: [_; 8] = app_state.each_ref().map(Z::SetOrKeep::is_keep); Z::Bool::all(&is_all_keep, w) }; let changing_entire_app_state = { - let is_all_set: [_; 8] = std::array::from_fn(|i| Z::SetOrKeep::is_set(&app_state[i])); - assert_eq!(is_all_set.len(), app_state.len()); // TODO: Use `array::each_ref` when stable + let is_all_set: [_; 8] = app_state.each_ref().map(Z::SetOrKeep::is_set); Z::Bool::all(&is_all_set, w) }; let proved_state = { diff --git a/node/testing/docker/Dockerfile.openmina b/node/testing/docker/Dockerfile.openmina index 855517bb0..d40bccbb3 100644 --- a/node/testing/docker/Dockerfile.openmina +++ b/node/testing/docker/Dockerfile.openmina @@ -9,7 +9,7 @@ RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y RUN rm /bin/sh && ln -s /bin/bash /bin/sh -RUN source ~/.cargo/env && rustup update 1.75 +RUN source ~/.cargo/env && rustup update 1.77 RUN git clone https://github.com/openmina/openmina diff --git a/node/testing/docker/Dockerfile.test b/node/testing/docker/Dockerfile.test index d483a9f8a..627be6be4 100644 --- a/node/testing/docker/Dockerfile.test +++ b/node/testing/docker/Dockerfile.test @@ -2,7 +2,7 @@ FROM vladsimplestakingcom/mina-openmina-builder:focal as builder RUN git fetch && git checkout feat/tests-with-debugger -RUN source ~/.cargo/env && cargo +1.75 build --release -p openmina-node-testing --bin runner --bin openmina-node-testing +RUN source ~/.cargo/env && cargo +1.77 build --release -p openmina-node-testing --bin runner --bin openmina-node-testing FROM vladsimplestakingcom/mina-debugger:2.0.0rampup4-focal diff --git a/run.yaml b/run.yaml index 37128b551..e23069a4b 100644 --- a/run.yaml +++ b/run.yaml @@ -60,11 +60,11 @@ spec: - | apt-get update && apt-get -y install git curl gcc libssl-dev pkg-config curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y - PATH=$PATH:~/.cargo/bin && rustup update 1.75 + PATH=$PATH:~/.cargo/bin && rustup update 1.77 git clone https://github.com/openmina/openmina cd openmina git fetch && git checkout feat/tests-with-debugger - PATH=$PATH:~/.cargo/bin && cargo +1.75 build --release --bin openmina + PATH=$PATH:~/.cargo/bin && cargo +1.77 build --release --bin openmina cp target/release/openmina /usr/local/bin/openmina openmina node -p 10000 --libp2p-port 8302 ports: