65 lines
2.0 KiB
Python
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
|