refactor: consolidate blockchain explorer into single app and update backup ignore patterns

- Remove standalone explorer-web app (README, HTML, package files)
- Add /web endpoint to blockchain-explorer for web interface access
- Update .gitignore to exclude application backup archives (*.tar.gz, *.zip)
- Add backup documentation files to .gitignore (BACKUP_INDEX.md, README.md)
- Consolidate explorer functionality into main blockchain-explorer application
This commit is contained in:
oib
2026-03-06 18:14:49 +01:00
parent dc1561d457
commit bb5363bebc
295 changed files with 35501 additions and 3734 deletions

View File

@@ -0,0 +1,5 @@
"""Receipt verification helpers for the wallet daemon."""
from .service import ReceiptValidationResult, ReceiptVerifierService
__all__ = ["ReceiptValidationResult", "ReceiptVerifierService"]

View File

@@ -0,0 +1,58 @@
from __future__ import annotations
from dataclasses import dataclass
from typing import List, Optional
from aitbc_sdk import (
CoordinatorReceiptClient,
ReceiptVerification,
SignatureValidation,
verify_receipt,
verify_receipts,
)
@dataclass
class ReceiptValidationResult:
job_id: str
receipt_id: str
receipt: dict
miner_signature: SignatureValidation
coordinator_attestations: List[SignatureValidation]
@property
def miner_valid(self) -> bool:
return self.miner_signature.valid
@property
def all_valid(self) -> bool:
return self.miner_signature.valid and all(att.valid for att in self.coordinator_attestations)
class ReceiptVerifierService:
"""Wraps `aitbc_sdk` receipt verification for wallet daemon workflows."""
def __init__(self, coordinator_url: str, api_key: str, timeout: float = 10.0) -> None:
self.client = CoordinatorReceiptClient(coordinator_url, api_key, timeout=timeout)
def verify_latest(self, job_id: str) -> Optional[ReceiptValidationResult]:
receipt = self.client.fetch_latest(job_id)
if receipt is None:
return None
verification = verify_receipt(receipt)
return self._to_result(verification)
def verify_history(self, job_id: str) -> List[ReceiptValidationResult]:
receipts = self.client.fetch_history(job_id)
verifications = verify_receipts(receipts)
return [self._to_result(item) for item in verifications]
@staticmethod
def _to_result(verification: ReceiptVerification) -> ReceiptValidationResult:
return ReceiptValidationResult(
job_id=str(verification.receipt.get("job_id")),
receipt_id=str(verification.receipt.get("receipt_id")),
receipt=verification.receipt,
miner_signature=verification.miner_signature,
coordinator_attestations=list(verification.coordinator_attestations),
)