86 lines
1.9 KiB
Python
86 lines
1.9 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import Any, Dict, List, Optional
|
|
|
|
from aitbc_sdk import SignatureValidation
|
|
|
|
from pydantic import BaseModel
|
|
|
|
|
|
class SignatureValidationModel(BaseModel):
|
|
key_id: str
|
|
alg: str = "Ed25519"
|
|
valid: bool
|
|
|
|
|
|
class ReceiptVerificationModel(BaseModel):
|
|
job_id: str
|
|
receipt_id: str
|
|
miner_signature: SignatureValidationModel
|
|
coordinator_attestations: List[SignatureValidationModel]
|
|
all_valid: bool
|
|
|
|
|
|
class ReceiptVerifyResponse(BaseModel):
|
|
result: ReceiptVerificationModel
|
|
|
|
|
|
def _signature_to_model(sig: SignatureValidation | SignatureValidationModel) -> SignatureValidationModel:
|
|
if isinstance(sig, SignatureValidationModel):
|
|
return sig
|
|
return SignatureValidationModel(key_id=sig.key_id, alg=sig.algorithm, valid=sig.valid)
|
|
|
|
|
|
def from_validation_result(result) -> ReceiptVerificationModel:
|
|
return ReceiptVerificationModel(
|
|
job_id=result.job_id,
|
|
receipt_id=result.receipt_id,
|
|
miner_signature=_signature_to_model(result.miner_signature),
|
|
coordinator_attestations=[_signature_to_model(att) for att in result.coordinator_attestations],
|
|
all_valid=result.all_valid,
|
|
)
|
|
|
|
|
|
class ReceiptVerificationListResponse(BaseModel):
|
|
items: List[ReceiptVerificationModel]
|
|
|
|
|
|
class WalletDescriptor(BaseModel):
|
|
wallet_id: str
|
|
public_key: str
|
|
metadata: Dict[str, Any]
|
|
|
|
|
|
class WalletListResponse(BaseModel):
|
|
items: List[WalletDescriptor]
|
|
|
|
|
|
class WalletCreateRequest(BaseModel):
|
|
wallet_id: str
|
|
password: str
|
|
metadata: Dict[str, Any] = {}
|
|
secret_key: Optional[str] = None
|
|
|
|
|
|
class WalletCreateResponse(BaseModel):
|
|
wallet: WalletDescriptor
|
|
|
|
|
|
class WalletUnlockRequest(BaseModel):
|
|
password: str
|
|
|
|
|
|
class WalletUnlockResponse(BaseModel):
|
|
wallet_id: str
|
|
unlocked: bool
|
|
|
|
|
|
class WalletSignRequest(BaseModel):
|
|
password: str
|
|
message_base64: str
|
|
|
|
|
|
class WalletSignResponse(BaseModel):
|
|
wallet_id: str
|
|
signature_base64: str
|