diff --git a/src/node/api/serializers/proof.py b/src/node/api/serializers/proof.py index 60e4bef..e48ede8 100644 --- a/src/node/api/serializers/proof.py +++ b/src/node/api/serializers/proof.py @@ -1,5 +1,5 @@ from abc import ABC, abstractmethod -from typing import Annotated, Any, Self, Union +from typing import Annotated, Any, Literal, Self, Union from pydantic import BeforeValidator, Field, RootModel @@ -23,6 +23,8 @@ class OperationProofSerializer(EnforceSubclassFromRandom, ABC): class NoProofSerializer(OperationProofSerializer): + root: Literal["NoProof"] + def into_operation_proof(self) -> NbeSignature: return NoProof.model_validate({}) diff --git a/src/node/api/serializers/signed_transaction.py b/src/node/api/serializers/signed_transaction.py index 8ffe9fd..f0d798d 100644 --- a/src/node/api/serializers/signed_transaction.py +++ b/src/node/api/serializers/signed_transaction.py @@ -1,8 +1,9 @@ import hashlib import json -from typing import List, Self +from typing import Any, List, Self from pydantic import Field +from pydantic.config import ExtraValues from core.models import NbeSerializer from models.transactions.transaction import Transaction @@ -42,6 +43,23 @@ class SignedTransactionSerializer(NbeSerializer, FromRandom): ) ledger_transaction_proof: Groth16ProofSerializer = Field(alias="ledger_tx_proof", description="Groth16 proof.") + @classmethod + def model_validate_json( + cls, + json_data: str | bytes | bytearray, + *, + strict: bool | None = None, + extra: ExtraValues | None = None, + context: Any | None = None, + by_alias: bool | None = None, + by_name: bool | None = None, + ) -> Self: + print(f"Validating JSON data for {cls.__name__} with by_alias={by_alias}, by_name={by_name}") + print(f"JSON data: {json_data}") + return super().model_validate_json( + json_data, strict=strict, extra=extra, context=context, by_alias=by_alias, by_name=by_name + ) + def _compute_hash(self) -> bytes: data = self.transaction.model_dump(mode="json") canonical = json.dumps(data, sort_keys=True, separators=(",", ":"))