Some checks failed
Blockchain Synchronization Verification / sync-verification (push) Has been cancelled
CLI Tests / test-cli (push) Has been cancelled
Contract Performance Benchmarks / benchmark-gas-usage (push) Has been cancelled
Contract Performance Benchmarks / benchmark-execution-time (push) Has been cancelled
Contract Performance Benchmarks / benchmark-throughput (push) Has been cancelled
Coverage Phase 1 (70% Target) / test-coverage-70 (push) Has been cancelled
Coverage Phase 2 (85% Target) / test-coverage-85 (push) Has been cancelled
Cross-Chain Functionality Tests / test-cross-chain-sync (push) Has been cancelled
Cross-Chain Functionality Tests / test-cross-chain-transactions (push) Has been cancelled
Cross-Chain Functionality Tests / test-multi-chain-consensus (push) Has been cancelled
Deploy to Testnet / deploy-testnet (push) Has been cancelled
Documentation Validation / validate-docs (push) Has been cancelled
Documentation Validation / validate-policies-strict (push) Has been cancelled
Integration Tests / test-service-integration (push) Has been cancelled
Multi-Chain Island Architecture Tests / test-multi-chain-island (push) Has been cancelled
Multi-Node Blockchain Health Monitoring / health-check (push) Has been cancelled
Node Failover Simulation / failover-test (push) Has been cancelled
P2P Network Verification / p2p-verification (push) Has been cancelled
Package Tests / Python package - aitbc-agent-sdk (push) Has been cancelled
Package Tests / Python package - aitbc-core (push) Has been cancelled
Package Tests / Python package - aitbc-crypto (push) Has been cancelled
Package Tests / Python package - aitbc-sdk (push) Has been cancelled
Package Tests / JavaScript package - aitbc-sdk-js (push) Has been cancelled
Package Tests / JavaScript package - aitbc-token (push) Has been cancelled
Python Tests / test-python (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
Smart Contract Tests / test-solidity (map[name:aitbc-contracts path:contracts]) (push) Has been cancelled
Smart Contract Tests / test-solidity (map[name:aitbc-token path:packages/solidity/aitbc-token]) (push) Has been cancelled
Smart Contract Tests / test-foundry (push) Has been cancelled
Smart Contract Tests / lint-solidity (push) Has been cancelled
Smart Contract Tests / deploy-contracts (push) Has been cancelled
Staking Tests / test-staking-service (push) Has been cancelled
Contract Performance Benchmarks / compare-benchmarks (push) Has been cancelled
Cross-Chain Functionality Tests / aggregate-results (push) Has been cancelled
Staking Tests / test-staking-integration (push) Has been cancelled
Staking Tests / test-staking-contract (push) Has been cancelled
Staking Tests / run-staking-test-runner (push) Has been cancelled
Multi-Node Stress Testing / stress-test (push) Successful in 3s
Cross-Node Transaction Testing / transaction-test (push) Successful in 3s
- Add get_authenticated_address() helper to extract wallet address from X-Wallet-Address header or JWT token - Add authentication to dispute filing, evidence submission, verification, voting, and arbitrator authorization endpoints - Replace hardcoded zero addresses with authenticated addresses from request headers - Add DEV_MODE fallback for development without authentication - Add --mock flag to experimental resource
48 lines
1.2 KiB
Python
Executable File
48 lines
1.2 KiB
Python
Executable File
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
from typing import Any, Dict
|
|
|
|
import json
|
|
from hashlib import sha256
|
|
|
|
from pydantic import BaseModel
|
|
|
|
|
|
class Receipt(BaseModel):
|
|
version: str
|
|
receipt_id: str
|
|
job_id: str
|
|
provider: str
|
|
client: str
|
|
units: float
|
|
unit_type: str
|
|
started_at: int
|
|
completed_at: int
|
|
price: float | None = None
|
|
model: str | None = None
|
|
prompt_hash: str | None = None
|
|
duration_ms: int | None = None
|
|
artifact_hash: str | None = None
|
|
coordinator_id: str | None = None
|
|
nonce: str | None = None
|
|
chain_id: int | None = None
|
|
metadata: Dict[str, Any] | None = None
|
|
|
|
|
|
def canonical_json(receipt: Dict[str, Any]) -> str:
|
|
def remove_none(obj: Any) -> Any:
|
|
if isinstance(obj, dict):
|
|
return {k: remove_none(v) for k, v in obj.items() if v is not None}
|
|
if isinstance(obj, list):
|
|
return [remove_none(x) for x in obj if x is not None]
|
|
return obj
|
|
|
|
cleaned = remove_none(receipt)
|
|
return json.dumps(cleaned, separators=(",", ":"), sort_keys=True)
|
|
|
|
|
|
def receipt_hash(receipt: Dict[str, Any]) -> bytes:
|
|
data = canonical_json(receipt).encode("utf-8")
|
|
return sha256(data).digest()
|