From 0bbf541dcef8acc23849ba4a7c2578104d482dd2 Mon Sep 17 00:00:00 2001 From: ahmetyalp <16453361+lighterabc@users.noreply.github.com> Date: Wed, 24 Dec 2025 13:52:30 +0300 Subject: [PATCH 1/2] Move poseidon2 gate with other default gates and add poseidon2 trait to RichField --- plonky2/src/gates/mod.rs | 1 + plonky2/src/{hash/poseidon2/gate.rs => gates/poseidon2.rs} | 4 ++-- plonky2/src/hash/hash_types.rs | 3 ++- plonky2/src/hash/poseidon2/hash.rs | 2 +- plonky2/src/hash/poseidon2/mod.rs | 1 - plonky2/src/util/serialization/gate_serialization.rs | 5 ++++- 6 files changed, 10 insertions(+), 6 deletions(-) rename plonky2/src/{hash/poseidon2/gate.rs => gates/poseidon2.rs} (99%) diff --git a/plonky2/src/gates/mod.rs b/plonky2/src/gates/mod.rs index c73eb17cf..80eeb39de 100644 --- a/plonky2/src/gates/mod.rs +++ b/plonky2/src/gates/mod.rs @@ -40,6 +40,7 @@ pub mod noop; pub mod packed_util; pub mod poseidon; pub mod poseidon_mds; +pub mod poseidon2; pub mod public_input; pub mod random_access; pub mod reducing; diff --git a/plonky2/src/hash/poseidon2/gate.rs b/plonky2/src/gates/poseidon2.rs similarity index 99% rename from plonky2/src/hash/poseidon2/gate.rs rename to plonky2/src/gates/poseidon2.rs index ff53335e2..e31eeeb8d 100644 --- a/plonky2/src/hash/poseidon2/gate.rs +++ b/plonky2/src/gates/poseidon2.rs @@ -4,8 +4,8 @@ use core::marker::PhantomData; use anyhow::Result; -use super::config::*; -use super::hash::Poseidon2; +use crate::hash::poseidon2::config::*; +use crate::hash::poseidon2::hash::Poseidon2; use crate::field::extension::Extendable; use crate::field::types::Field; use crate::gates::gate::Gate; diff --git a/plonky2/src/hash/hash_types.rs b/plonky2/src/hash/hash_types.rs index 9f9d976bf..4ec86aa8e 100644 --- a/plonky2/src/hash/hash_types.rs +++ b/plonky2/src/hash/hash_types.rs @@ -9,11 +9,12 @@ use serde::{Deserialize, Deserializer, Serialize, Serializer}; use crate::field::goldilocks_field::GoldilocksField; use crate::field::types::{Field, PrimeField64, Sample}; use crate::hash::poseidon::Poseidon; +use crate::hash::poseidon2::hash::Poseidon2; use crate::iop::target::Target; use crate::plonk::config::GenericHashOut; /// A prime order field with the features we need to use it as a base field in our argument system. -pub trait RichField: PrimeField64 + Poseidon {} +pub trait RichField: PrimeField64 + Poseidon + Poseidon2 {} impl RichField for GoldilocksField {} diff --git a/plonky2/src/hash/poseidon2/hash.rs b/plonky2/src/hash/poseidon2/hash.rs index 5f9553fad..204905679 100644 --- a/plonky2/src/hash/poseidon2/hash.rs +++ b/plonky2/src/hash/poseidon2/hash.rs @@ -3,7 +3,7 @@ use core::fmt::Debug; use plonky2_field::ops::Square; use super::config::*; -use super::gate::Poseidon2Gate; +use crate::gates::poseidon2::Poseidon2Gate; use crate::field::extension::{Extendable, FieldExtension}; use crate::field::goldilocks_field::GoldilocksField as F; use crate::field::types::{Field, PrimeField64}; diff --git a/plonky2/src/hash/poseidon2/mod.rs b/plonky2/src/hash/poseidon2/mod.rs index 52ede9a4d..bddaa67c4 100644 --- a/plonky2/src/hash/poseidon2/mod.rs +++ b/plonky2/src/hash/poseidon2/mod.rs @@ -1,5 +1,4 @@ pub mod config; -pub mod gate; pub mod hash; #[cfg(test)] diff --git a/plonky2/src/util/serialization/gate_serialization.rs b/plonky2/src/util/serialization/gate_serialization.rs index 46f60b9f5..957ccc16f 100644 --- a/plonky2/src/util/serialization/gate_serialization.rs +++ b/plonky2/src/util/serialization/gate_serialization.rs @@ -111,11 +111,13 @@ pub mod default { use crate::gates::noop::NoopGate; use crate::gates::poseidon::PoseidonGate; use crate::gates::poseidon_mds::PoseidonMdsGate; + use crate::gates::poseidon2::Poseidon2Gate; use crate::gates::public_input::PublicInputGate; use crate::gates::random_access::RandomAccessGate; use crate::gates::reducing::ReducingGate; use crate::gates::reducing_extension::ReducingExtensionGate; use crate::hash::hash_types::RichField; + use crate::hash::poseidon2::hash::Poseidon2; use crate::util::serialization::GateSerializer; /// A gate serializer that can be used to serialize all default gates supported /// by the `plonky2` library. @@ -128,7 +130,7 @@ pub mod default { /// the `GateSerializer` trait. This can be easily done through the `impl_gate_serializer` macro. #[derive(Debug)] pub struct DefaultGateSerializer; - impl, const D: usize> GateSerializer for DefaultGateSerializer { + impl + Poseidon2, const D: usize> GateSerializer for DefaultGateSerializer { impl_gate_serializer! { DefaultGateSerializer, ArithmeticGate, @@ -146,6 +148,7 @@ pub mod default { NoopGate, PoseidonMdsGate, PoseidonGate, + Poseidon2Gate, PublicInputGate, RandomAccessGate, ReducingExtensionGate, From f2611b2e9c824c068c5984172dad222e56dd612f Mon Sep 17 00:00:00 2001 From: ahmetyalp <16453361+lighterabc@users.noreply.github.com> Date: Wed, 24 Dec 2025 13:55:34 +0300 Subject: [PATCH 2/2] fmt --- plonky2/src/gates/mod.rs | 2 +- plonky2/src/gates/poseidon2.rs | 4 ++-- plonky2/src/hash/poseidon2/hash.rs | 2 +- plonky2/src/util/serialization/gate_serialization.rs | 6 ++++-- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/plonky2/src/gates/mod.rs b/plonky2/src/gates/mod.rs index 80eeb39de..c1cb1e2ab 100644 --- a/plonky2/src/gates/mod.rs +++ b/plonky2/src/gates/mod.rs @@ -39,8 +39,8 @@ pub mod multiplication_extension; pub mod noop; pub mod packed_util; pub mod poseidon; -pub mod poseidon_mds; pub mod poseidon2; +pub mod poseidon_mds; pub mod public_input; pub mod random_access; pub mod reducing; diff --git a/plonky2/src/gates/poseidon2.rs b/plonky2/src/gates/poseidon2.rs index e31eeeb8d..2e6be6791 100644 --- a/plonky2/src/gates/poseidon2.rs +++ b/plonky2/src/gates/poseidon2.rs @@ -4,13 +4,13 @@ use core::marker::PhantomData; use anyhow::Result; -use crate::hash::poseidon2::config::*; -use crate::hash::poseidon2::hash::Poseidon2; use crate::field::extension::Extendable; use crate::field::types::Field; use crate::gates::gate::Gate; use crate::gates::util::StridedConstraintConsumer; use crate::hash::hash_types::RichField; +use crate::hash::poseidon2::config::*; +use crate::hash::poseidon2::hash::Poseidon2; use crate::iop::ext_target::ExtensionTarget; use crate::iop::generator::{GeneratedValues, SimpleGenerator, WitnessGeneratorRef}; use crate::iop::target::Target; diff --git a/plonky2/src/hash/poseidon2/hash.rs b/plonky2/src/hash/poseidon2/hash.rs index 204905679..d6fb72bfd 100644 --- a/plonky2/src/hash/poseidon2/hash.rs +++ b/plonky2/src/hash/poseidon2/hash.rs @@ -3,10 +3,10 @@ use core::fmt::Debug; use plonky2_field::ops::Square; use super::config::*; -use crate::gates::poseidon2::Poseidon2Gate; use crate::field::extension::{Extendable, FieldExtension}; use crate::field::goldilocks_field::GoldilocksField as F; use crate::field::types::{Field, PrimeField64}; +use crate::gates::poseidon2::Poseidon2Gate; use crate::hash::hash_types::{HashOut, RichField}; use crate::hash::hashing::{compress, hash_n_to_hash_no_pad, PlonkyPermutation}; use crate::iop::ext_target::ExtensionTarget; diff --git a/plonky2/src/util/serialization/gate_serialization.rs b/plonky2/src/util/serialization/gate_serialization.rs index 957ccc16f..d48f5ca7a 100644 --- a/plonky2/src/util/serialization/gate_serialization.rs +++ b/plonky2/src/util/serialization/gate_serialization.rs @@ -110,8 +110,8 @@ pub mod default { use crate::gates::multiplication_extension::MulExtensionGate; use crate::gates::noop::NoopGate; use crate::gates::poseidon::PoseidonGate; - use crate::gates::poseidon_mds::PoseidonMdsGate; use crate::gates::poseidon2::Poseidon2Gate; + use crate::gates::poseidon_mds::PoseidonMdsGate; use crate::gates::public_input::PublicInputGate; use crate::gates::random_access::RandomAccessGate; use crate::gates::reducing::ReducingGate; @@ -130,7 +130,9 @@ pub mod default { /// the `GateSerializer` trait. This can be easily done through the `impl_gate_serializer` macro. #[derive(Debug)] pub struct DefaultGateSerializer; - impl + Poseidon2, const D: usize> GateSerializer for DefaultGateSerializer { + impl + Poseidon2, const D: usize> GateSerializer + for DefaultGateSerializer + { impl_gate_serializer! { DefaultGateSerializer, ArithmeticGate,