pub trait ToFieldElements<F: Field> {
// Required method
fn to_field_elements(&self, fields: &mut Vec<F>);
// Provided method
fn to_field_elements_owned(&self) -> Vec<F> { ... }
}
Required Methods§
fn to_field_elements(&self, fields: &mut Vec<F>)
Provided Methods§
fn to_field_elements_owned(&self) -> Vec<F>
Implementations on Foreign Types§
Source§impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for Option<&ZkAppUri>
impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for Option<&ZkAppUri>
fn to_field_elements(&self, fields: &mut Vec<Fp>)
Source§impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for Box<Account>
impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for Box<Account>
fn to_field_elements(&self, fields: &mut Vec<Fp>)
Source§impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for CompressedPubKey
impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for CompressedPubKey
fn to_field_elements(&self, fields: &mut Vec<Fp>)
Source§impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for PubKey
impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for PubKey
fn to_field_elements(&self, fields: &mut Vec<Fp>)
Source§impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for Signature
impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for Signature
fn to_field_elements(&self, fields: &mut Vec<Fp>)
Source§impl ToFieldElements<Fp<MontBackend<FrConfig, 4>, 4>> for OpeningProof<Vesta>
impl ToFieldElements<Fp<MontBackend<FrConfig, 4>, 4>> for OpeningProof<Vesta>
fn to_field_elements(&self, fields: &mut Vec<Fq>)
Source§impl ToFieldElements<Fp<MontBackend<FrConfig, 4>, 4>> for ProverCommitments<Vesta>
impl ToFieldElements<Fp<MontBackend<FrConfig, 4>, 4>> for ProverCommitments<Vesta>
fn to_field_elements(&self, fields: &mut Vec<Fq>)
Source§impl<F: FieldWitness> ToFieldElements<F> for &[bool]
impl<F: FieldWitness> ToFieldElements<F> for &[bool]
fn to_field_elements(&self, fields: &mut Vec<F>)
Source§impl<F: FieldWitness> ToFieldElements<F> for &[u8]
impl<F: FieldWitness> ToFieldElements<F> for &[u8]
fn to_field_elements(&self, fields: &mut Vec<F>)
Source§impl<F: FieldWitness> ToFieldElements<F> for &[AllEvals<F>]
impl<F: FieldWitness> ToFieldElements<F> for &[AllEvals<F>]
fn to_field_elements(&self, fields: &mut Vec<F>)
Source§impl<F: FieldWitness> ToFieldElements<F> for bool
impl<F: FieldWitness> ToFieldElements<F> for bool
fn to_field_elements(&self, fields: &mut Vec<F>)
Source§impl<F: FieldWitness> ToFieldElements<F> for u32
impl<F: FieldWitness> ToFieldElements<F> for u32
fn to_field_elements(&self, fields: &mut Vec<F>)
Source§impl<F: FieldWitness> ToFieldElements<F> for u64
impl<F: FieldWitness> ToFieldElements<F> for u64
fn to_field_elements(&self, fields: &mut Vec<F>)
Source§impl<F: FieldWitness> ToFieldElements<F> for MinaBaseProtocolConstantsCheckedValueStableV1
impl<F: FieldWitness> ToFieldElements<F> for MinaBaseProtocolConstantsCheckedValueStableV1
fn to_field_elements(&self, fields: &mut Vec<F>)
Source§impl<F: FieldWitness> ToFieldElements<F> for ByteString
impl<F: FieldWitness> ToFieldElements<F> for ByteString
fn to_field_elements(&self, fields: &mut Vec<F>)
Source§impl<F: FieldWitness> ToFieldElements<F> for Fp
impl<F: FieldWitness> ToFieldElements<F> for Fp
fn to_field_elements(&self, fields: &mut Vec<F>)
Source§impl<F: FieldWitness> ToFieldElements<F> for Fq
impl<F: FieldWitness> ToFieldElements<F> for Fq
fn to_field_elements(&self, fields: &mut Vec<F>)
Source§impl<F: FieldWitness, A: ToFieldElements<F>, B: ToFieldElements<F>> ToFieldElements<F> for (A, B)
impl<F: FieldWitness, A: ToFieldElements<F>, B: ToFieldElements<F>> ToFieldElements<F> for (A, B)
fn to_field_elements(&self, fields: &mut Vec<F>)
Source§impl<F: FieldWitness, T: ToFieldElements<F> + Clone> ToFieldElements<F> for Cow<'_, T>
impl<F: FieldWitness, T: ToFieldElements<F> + Clone> ToFieldElements<F> for Cow<'_, T>
fn to_field_elements(&self, fields: &mut Vec<F>)
Source§impl<F: FieldWitness, T: ToFieldElements<F>> ToFieldElements<F> for &T
impl<F: FieldWitness, T: ToFieldElements<F>> ToFieldElements<F> for &T
fn to_field_elements(&self, fields: &mut Vec<F>)
Source§impl<F: FieldWitness, T: ToFieldElements<F>> ToFieldElements<F> for Box<[T]>
impl<F: FieldWitness, T: ToFieldElements<F>> ToFieldElements<F> for Box<[T]>
fn to_field_elements(&self, fields: &mut Vec<F>)
Source§impl<F: FieldWitness, T: ToFieldElements<F>> ToFieldElements<F> for Vec<T>
impl<F: FieldWitness, T: ToFieldElements<F>> ToFieldElements<F> for Vec<T>
fn to_field_elements(&self, fields: &mut Vec<F>)
Source§impl<F: FieldWitness, T: ToFieldElements<F>> ToFieldElements<F> for PointEvaluations<T>
impl<F: FieldWitness, T: ToFieldElements<F>> ToFieldElements<F> for PointEvaluations<T>
fn to_field_elements(&self, fields: &mut Vec<F>)
Source§impl<F: FieldWitness, T: ToFieldElements<F>> ToFieldElements<F> for ProofEvaluations<T>
impl<F: FieldWitness, T: ToFieldElements<F>> ToFieldElements<F> for ProofEvaluations<T>
fn to_field_elements(&self, fields: &mut Vec<F>)
Source§impl<F: FieldWitness, T: ToFieldElements<F>, const N: usize> ToFieldElements<F> for [T; N]
impl<F: FieldWitness, T: ToFieldElements<F>, const N: usize> ToFieldElements<F> for [T; N]
fn to_field_elements(&self, fields: &mut Vec<F>)
Source§impl<F: Field> ToFieldElements<F> for ()
impl<F: Field> ToFieldElements<F> for ()
fn to_field_elements(&self, _fields: &mut Vec<F>)
Source§impl<T, F> ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for (&OrIgnore<T>, F)where
T: ToFieldElements<Fp>,
F: Fn() -> T,
impl<T, F> ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for (&OrIgnore<T>, F)where
T: ToFieldElements<Fp>,
F: Fn() -> T,
fn to_field_elements(&self, fields: &mut Vec<Fp>)
Source§impl<T, F> ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for (&SetOrKeep<T>, F)
impl<T, F> ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for (&SetOrKeep<T>, F)
fn to_field_elements(&self, fields: &mut Vec<Fp>)
Source§impl<T, F> ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for (FlaggedOption<&T>, F)where
T: ToFieldElements<Fp>,
F: Fn() -> T,
impl<T, F> ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for (FlaggedOption<&T>, F)where
T: ToFieldElements<Fp>,
F: Fn() -> T,
fn to_field_elements(&self, fields: &mut Vec<Fp>)
Implementors§
impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for ProofVerified
impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for AuthorizationKind
impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for MayUseToken
impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for TokenId
impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for TokenSymbol
impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for VerificationKey
impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for VotingFor
impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for ZkAppAccount
impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for Stack
impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for StateStack
impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for SokDigest
impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for StackFrameCheckedFrame
impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for EpochLedger<Fp>
impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for TransactionUnion
impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for AccountPreconditions
impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for Actions
impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for Body
impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for mina_tree::scan_state::transaction_logic::zkapp_command::EpochData
impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for Events
impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for Preconditions
impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for mina_tree::scan_state::transaction_logic::zkapp_command::Timing
impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for Update
impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for ZkAppPreconditions
impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for ZkappStatement
impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for AccountUnhashed
impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for ConsensusState
impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for BlockchainState
impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for ProtocolState
impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for ProtocolStateBody
impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for SnarkTransition
impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for PerProofWitness
impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for StepMainStatement
impl ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for LedgerWithHash
impl<F, T> ToFieldElements<F> for MyCow<'_, T>where
F: FieldWitness,
T: ToFieldElements<F>,
impl<F: FieldWitness> ToFieldElements<F> for AuthRequired
impl<F: FieldWitness> ToFieldElements<F> for mina_tree::account::Timing
impl<F: FieldWitness> ToFieldElements<F> for MerklePath
impl<F: FieldWitness> ToFieldElements<F> for Sgn
impl<F: FieldWitness> ToFieldElements<F> for Boolean
impl<F: FieldWitness> ToFieldElements<F> for CircuitVar<Sgn>
impl<F: FieldWitness> ToFieldElements<F> for CircuitVar<Boolean>
impl<F: FieldWitness> ToFieldElements<F> for Permissions<AuthRequired>
impl<F: FieldWitness> ToFieldElements<F> for ReceiptChainHash
impl<F: FieldWitness> ToFieldElements<F> for Amount
impl<F: FieldWitness> ToFieldElements<F> for Balance
impl<F: FieldWitness> ToFieldElements<F> for BlockTime
impl<F: FieldWitness> ToFieldElements<F> for BlockTimeSpan
impl<F: FieldWitness> ToFieldElements<F> for Epoch
impl<F: FieldWitness> ToFieldElements<F> for Fee
impl<F: FieldWitness> ToFieldElements<F> for Index
impl<F: FieldWitness> ToFieldElements<F> for Length
impl<F: FieldWitness> ToFieldElements<F> for N
impl<F: FieldWitness> ToFieldElements<F> for Nonce
impl<F: FieldWitness> ToFieldElements<F> for Slot
impl<F: FieldWitness> ToFieldElements<F> for SlotSpan
impl<F: FieldWitness> ToFieldElements<F> for TxnVersion
impl<F: FieldWitness> ToFieldElements<F> for CallStack
impl<F: FieldWitness> ToFieldElements<F> for mina_tree::scan_state::transaction_logic::protocol_state::EpochData<F>
impl<F: FieldWitness> ToFieldElements<F> for StagedLedgerHash<F>
impl<F: FieldWitness> ToFieldElements<F> for CheckedAmount<F>
impl<F: FieldWitness> ToFieldElements<F> for CheckedBalance<F>
impl<F: FieldWitness> ToFieldElements<F> for CheckedFee<F>
impl<F: FieldWitness> ToFieldElements<F> for CheckedBlockTime<F>
impl<F: FieldWitness> ToFieldElements<F> for CheckedBlockTimeSpan<F>
impl<F: FieldWitness> ToFieldElements<F> for CheckedIndex<F>
impl<F: FieldWitness> ToFieldElements<F> for CheckedLength<F>
impl<F: FieldWitness> ToFieldElements<F> for CheckedN32<F>
impl<F: FieldWitness> ToFieldElements<F> for CheckedN<F>
impl<F: FieldWitness> ToFieldElements<F> for CheckedNonce<F>
impl<F: FieldWitness> ToFieldElements<F> for CheckedSlot<F>
impl<F: FieldWitness> ToFieldElements<F> for CheckedSlotSpan<F>
impl<F: FieldWitness> ToFieldElements<F> for CheckedTxnVersion<F>
impl<F: FieldWitness> ToFieldElements<F> for FeatureFlags<bool>
impl<F: FieldWitness> ToFieldElements<F> for InnerCurve<F>
impl<F: FieldWitness> ToFieldElements<F> for PlonkVerificationKeyEvals<F>
impl<F: FieldWitness> ToFieldElements<F> for Failure
impl<F: FieldWitness> ToFieldElements<F> for AllEvals<F>
impl<F: FieldWitness> ToFieldElements<F> for Unfinalized
impl<F: FieldWitness> ToFieldElements<F> for GroupAffine<F>
impl<F: FieldWitness, F2: FieldWitness + ToFieldElements<F>> ToFieldElements<F> for ShiftedValue<F2>
impl<F: FieldWitness, T: Magnitude + ToFieldElements<F>> ToFieldElements<F> for Signed<T>
impl<F: FieldWitness, const N: usize> ToFieldElements<F> for Address<N>
impl<T> ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for WithLazyHash<T>
impl<T> ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for ClosedInterval<T>where
T: ToFieldElements<Fp>,
impl<T> ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for WithHash<T>
impl<T: ToFieldElements<Fp>> ToFieldElements<Fp<MontBackend<FqConfig, 4>, 4>> for Statement<T>
Unlike expectations, OCaml doesn’t call Sok_digest.to_field_elements
on
Statement_intf.to_field_elements
, it is probably overwritten somewhere
but I was not able to find which method exactly is used:
I added lots of printf
everywhere but they are never called/triggered.
I suspect it uses the to_hlist
, or the Typ
, or the data spec, but
again, I couldn’t confirm.
This implementation relies only on the output I observed here, using reproducible input test data: https://github.com/MinaProtocol/mina/blob/bfd1009abdbee78979ff0343cc73a3480e862f58/src/lib/pickles/composition_types/composition_types.ml#L714C11-L714C48
TODO: Fuzz this method, compare with OCaml