signalvault-verifiable-priv.../signalvault/schema.py

60 lines
1.3 KiB
Python

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