70 lines
1.7 KiB
Python
70 lines
1.7 KiB
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass, field
|
|
from typing import List, Dict, Optional
|
|
|
|
|
|
@dataclass
|
|
class SignalNode:
|
|
asset: str
|
|
venue: str
|
|
signal_type: str
|
|
timestamp: int # epoch seconds
|
|
quality: float = 0.0
|
|
metadata: Dict[str, object] = field(default_factory=dict)
|
|
|
|
|
|
@dataclass
|
|
class Edge:
|
|
from_id: str
|
|
to_id: str
|
|
relation: str # e.g., "causal", "temporal"
|
|
timestamp: int
|
|
metadata: Dict[str, object] = field(default_factory=dict)
|
|
|
|
|
|
@dataclass
|
|
class Scenario:
|
|
id: str
|
|
nodes: List[str] = field(default_factory=list)
|
|
edges: List[str] = field(default_factory=list)
|
|
description: str = ""
|
|
version: int = 1
|
|
|
|
|
|
@dataclass
|
|
class HedgePlan:
|
|
id: str
|
|
delta: Dict[str, object] # minimal representation of hedging actions
|
|
version: int = 1
|
|
approvals: List[str] = field(default_factory=list)
|
|
|
|
|
|
@dataclass
|
|
class AuditLog:
|
|
# Per-message audit log entries. We keep a list to support multi-entry provenance.
|
|
entries: List[str] = field(default_factory=list)
|
|
# Optional signer identity for provenance signing
|
|
signer: Optional[str] = None
|
|
# Optional timestamp for when the log entry was created
|
|
timestamp: Optional[int] = None
|
|
# Optional contract identifier related to this audit log
|
|
contract_id: Optional[str] = None
|
|
# Optional cryptographic chaining fields (for verifiable provenance)
|
|
parent_hash: Optional[str] = None
|
|
signature: Optional[str] = None
|
|
|
|
|
|
@dataclass
|
|
class PrivacyBudget:
|
|
signal_id: str
|
|
budget: float # DP budget allocated per signal
|
|
policy: Dict[str, object] = field(default_factory=dict)
|
|
|
|
|
|
@dataclass
|
|
class RegistryEntry:
|
|
adapter_name: str
|
|
contract: Dict[str, object]
|
|
conformance: bool = False
|