idea172-bevault-verifiable-.../idea172_bevault_verifiable_.../adapters/price_feed.py

46 lines
1.3 KiB
Python

"""Price feed adapter for BeVault."""
from __future__ import annotations
import hashlib
from dataclasses import dataclass
from typing import Optional
from ..bridge import canonical_payload, to_canonical_ir
from ..core import HedgeDelta, LocalArbProblem, SharedSignals
@dataclass
class PriceFeedAdapter:
name: str = "price-feed-v1"
version: str = "1.0"
def generate_signal(self, asset: str, price: float, latency_ms: float) -> SharedSignals:
return SharedSignals(asset=asset, price=price, latency_ms=latency_ms)
def build_delta(
self,
local: LocalArbProblem,
signals: SharedSignals,
hedge_size: Optional[float] = None,
) -> HedgeDelta:
hedge_size = signals.price if hedge_size is None else hedge_size
ir = to_canonical_ir(local, signals)
audit_ref = hashlib.sha256(canonical_payload(ir).encode("utf-8")).hexdigest()
return HedgeDelta(
asset=local.asset,
hedge_size=hedge_size,
timestamp=signals.timestamp,
policy_tag="price-feed",
audit_ref=audit_ref,
)
def conformance_contract(self) -> dict:
return {
"name": self.name,
"version": self.version,
"produces": ["SharedSignals", "HedgeDelta"],
}
__all__ = ["PriceFeedAdapter"]