aztec-nr - protocol_types::traits

Trait Serialize

pub trait Serialize {
    let N: u32;

    // Required methods
    pub fn serialize(self) -> [Field; N];
}

Trait for serializing Noir types into arrays of Fields.

An implementation of the Serialize trait has to follow Noir's intrinsic serialization (each member of a struct converted directly into one or more Fields without any packing or compression). This trait (and Deserialize) are typically used to communicate between Noir and TypeScript (via oracles and function arguments).

On Following Noir's Intrinsic Serialization

When calling a Noir function from TypeScript (TS), first the function arguments are serialized into an array of fields. This array is then included in the initial witness. Noir's intrinsic serialization is then used to deserialize the arguments from the witness. When the same Noir function is called from Noir this Serialize trait is used instead of the serialization in TS. For this reason we need to have a match between TS serialization, Noir's intrinsic serialization and the implementation of this trait. If there is a mismatch, the function calls fail with an arguments hash mismatch error message.

Associated Constants

Example

impl<let N: u32> Serialize for str<N> {
    let N: u32 = N;

    fn serialize(self) -> [Field; Self::N] {
        let bytes = self.as_bytes();
        let mut fields = [0; Self::N];
        for i in 0..bytes.len() {
            fields[i] = bytes[i] as Field;  // Each byte gets its own Field
        }
        fields
    }
}

Required methods

pub fn serialize(self) -> [Field; N]

Implementors

impl<T0, T1> Serialize for (T0, T1)
where T0: Serialize, T1: Serialize

impl<T0, T1, T2> Serialize for (T0, T1, T2)
where T0: Serialize, T1: Serialize, T2: Serialize

impl<T0, T1, T2, T3> Serialize for (T0, T1, T2, T3)
where T0: Serialize, T1: Serialize, T2: Serialize, T3: Serialize

impl<T0, T1, T2, T3, T4> Serialize for (T0, T1, T2, T3, T4)
where T0: Serialize, T1: Serialize, T2: Serialize, T3: Serialize, T4: Serialize

impl<T0, T1, T2, T3, T4, T5> Serialize for (T0, T1, T2, T3, T4, T5)
where T0: Serialize, T1: Serialize, T2: Serialize, T3: Serialize, T4: Serialize, T5: Serialize

impl<T1> Serialize for (T1,)
where T1: Serialize

impl Serialize for AddressNote

impl Serialize for AppPayload

impl Serialize for AppendOnlyTreeSnapshot

impl Serialize for AuthorizationSelector

impl Serialize for AvmAccumulatedData

impl Serialize for AvmAccumulatedDataArrayLengths

impl Serialize for AvmCircuitPublicInputs

impl Serialize for AztecAddress

impl Serialize for BlockConstantData

impl Serialize for BlockHeader

impl<let M: u32, T> Serialize for BoundedVec<T, M>
where T: Serialize

impl Serialize for CallContext

impl Serialize for CheckpointConstantData

impl Serialize for CheckpointHeader

impl<let N: u32, T> Serialize for ClaimedLengthArray<T, N>
where T: Serialize

impl<let M: u32, let N: u32> Serialize for CompressedString<N, M>

impl Serialize for ContentCommitment

impl Serialize for ContractClassId

impl Serialize for ContractInstance

impl<T> Serialize for Counted<T>
where T: Serialize

impl Serialize for EmbeddedCurvePoint

impl Serialize for EmbeddedCurveScalar

impl Serialize for Empty

impl Serialize for EpochConstantData

impl Serialize for EthAddress

impl Serialize for EventSelector

impl Serialize for Fancier

impl Serialize for FeeRecipient

impl Serialize for Field

impl Serialize for FieldCompressedString

impl Serialize for FunctionCall

impl Serialize for FunctionData

impl Serialize for FunctionSelector

impl Serialize for Gas

impl Serialize for GasFees

impl Serialize for GasSettings

impl Serialize for GlobalVariables

impl Serialize for HasArray

impl<let N: u32, T> Serialize for HasArrayWithGenerics<T, N>
where T: Serialize

impl Serialize for IvpkM

impl Serialize for KeyValidationRequest

impl Serialize for KeyValidationRequestAndGenerator

impl Serialize for L2ToL1Message

impl<let N: u32> Serialize for Log<N>

impl Serialize for LogHash

impl<let M: u32, let N: u32> Serialize for MembershipWitness<N, M>

impl Serialize for MockStruct

impl Serialize for NoteMetadata

impl Serialize for NpkM

impl Serialize for Nullifier

impl Serialize for NullifierLeafPreimage

impl Serialize for NullifierMembershipWitness

impl<T> Serialize for Option<T>
where T: Serialize

impl Serialize for OvpkM

impl Serialize for PartialAddress

impl Serialize for PartialStateReference

impl Serialize for PartialUintNote

impl Serialize for Poseidon2Sponge

impl Serialize for PrivateCallRequest

impl Serialize for PrivateCircuitPublicInputs

impl Serialize for PrivateLogData

impl Serialize for PrivateToAvmAccumulatedData

impl Serialize for PrivateToAvmAccumulatedDataArrayLengths

impl Serialize for PrivateToPublicAccumulatedData

impl Serialize for PrivateToPublicKernelCircuitPublicInputs

impl Serialize for PrivateToRollupAccumulatedData

impl Serialize for PrivateToRollupKernelCircuitPublicInputs

impl Serialize for ProtocolContracts

impl Serialize for PublicCallRequest

impl Serialize for PublicCallRequestArrayLengths

impl Serialize for PublicDataTreeLeafPreimage

impl Serialize for PublicDataWitness

impl Serialize for PublicDataWrite

impl Serialize for PublicKeys

impl Serialize for PublicKeysHash

impl Serialize for PublicLogs

impl<Note> Serialize for RetrievedNote<Note>
where Note: Serialize

impl<T> Serialize for Scoped<T>
where T: Serialize

impl Serialize for Smol

impl Serialize for SpongeBlob

impl Serialize for StateReference

impl Serialize for TestAccount

impl Serialize for TestValue

impl Serialize for TpkM

impl Serialize for TreeSnapshots

impl Serialize for TxConstantData

impl Serialize for TxContext

impl Serialize for TxRequest

impl Serialize for UintNote

impl Serialize for ValueNote

impl<let M: u32, T> Serialize for [T; M]
where T: Serialize

impl Serialize for bool

impl Serialize for i16

impl Serialize for i32

impl Serialize for i64

impl Serialize for i8

impl<let M: u32> Serialize for str<M>

impl Serialize for u1

impl Serialize for u128

impl Serialize for u16

impl Serialize for u32

impl Serialize for u64

impl Serialize for u8