idea199-replicasurety-econo.../src/idea199_replicasurety_econo.../models.py

65 lines
2.0 KiB
Python

from typing import Dict, List, Optional, Any
from pydantic import BaseModel, Field, constr
from datetime import datetime
class PoeticCert(BaseModel):
"""Compact PoeticCert schema.
Fields:
- invariants: free-form list of invariant descriptors (strings or structured)
- resource_limits: optional resource constraints
- replica_intent_hash: hex string hash of the intent being certified
- expected_receipt: optional acceptance witness
- attester_signatures: mapping signer_id -> signature (base64 or hex)
- issued_at: timestamp
"""
invariants: List[Any]
resource_limits: Optional[Dict[str, Any]] = None
replica_intent_hash: constr(min_length=1)
expected_receipt: Optional[Dict[str, Any]] = None
attester_signatures: Dict[str, str] = Field(default_factory=dict)
issued_at: datetime = Field(default_factory=datetime.utcnow)
class TraceEvent(BaseModel):
seq: int
timestamp: datetime
message: str
meta: Optional[Dict[str, Any]] = None
class ReplayBundle(BaseModel):
"""Deterministic ReplayBundle reference format.
Fields:
- trace: sequence of TraceEvent
- monitors: signed attestations produced by monitors
- evidence_root: a top-level digest (hex) that represents merkle/root of evidence
- artifacts: optional dict of artifact_name -> digest
"""
trace: List[TraceEvent]
monitors: Dict[str, str] = Field(default_factory=dict)
evidence_root: constr(min_length=1)
artifacts: Optional[Dict[str, str]] = None
class BondRecord(BaseModel):
escrow_id: str
issuer: str
stake_amount: float
policy_hash: Optional[str] = None
ttl: Optional[datetime] = None
created_at: datetime = Field(default_factory=datetime.utcnow)
status: str = "active" # active, settled, cancelled
class ClaimSubmission(BaseModel):
claim_id: str
evidence_root: str
claimant: str
timestamp: datetime = Field(default_factory=datetime.utcnow)
details: Optional[Dict[str, Any]] = None