from __future__ import annotations from dataclasses import dataclass, field from typing import List, Optional @dataclass(frozen=True) class SignalNode: asset: str venue: str signal_type: str timestamp: int quality: float = 1.0 id: Optional[str] = None def __post_init__(self): if self.timestamp < 0: raise ValueError("timestamp must be non-negative") @dataclass(frozen=True) class Edge: from_node: SignalNode to_node: SignalNode relation: str # e.g., "causal", "derived_from", etc. delta_hash: str @dataclass class Scenario: id: str nodes: List[SignalNode] = field(default_factory=list) edges: List[Edge] = field(default_factory=list) description: str = "" @dataclass class HedgePlan: id: str delta: dict version: int = 1 approvals: List[str] = field(default_factory=list) @dataclass class AuditLog: entries: List[str] = field(default_factory=list) signer: str | None = None timestamp: int | None = None contract_id: str | None = None # Optional provenance fields for verifiable provenance and chaining parent_hash: str | None = None signature: str | None = None @dataclass class PrivacyBudget: per_signal_budget: dict[str, float] = field(default_factory=dict) global_budget: float = 0.0