from __future__ import annotations from dataclasses import dataclass, asdict from typing import Any, Dict, List import json @dataclass class LocalProblem: id: str asset: str venue: str objective: str constraints: Dict[str, Any] price_target: float tolerance: float def to_json(self) -> str: return json.dumps(asdict(self), default=str) @dataclass class SharedVariables: variables: Dict[str, Any] version: int contract_id: str def to_json(self) -> str: return json.dumps(asdict(self), default=str) @dataclass class PlanDelta: delta: Dict[str, Any] timestamp: str author: str contract_id: str privacy_budget: float def to_json(self) -> str: return json.dumps(asdict(self), default=str) @dataclass class DualVariables: shadow_prices: Dict[str, float] version: int contract_id: str = "" def to_json(self) -> str: return json.dumps(asdict(self), default=str) @dataclass class AuditLogEntry: event: str timestamp: str hash: str details: Dict[str, Any] = None def to_json(self) -> str: return json.dumps(asdict(self), default=str) @dataclass class GovernanceAuditLog: entries: List[AuditLogEntry] def add(self, entry: AuditLogEntry) -> None: self.entries.append(entry) def to_json(self) -> str: return json.dumps([asdict(e) for e in self.entries], default=str)