#!/usr/bin/env python3
"""CashOps public sample. Run locally with Python 3. No network access.
Permission granted to use, copy and modify this sample for any purpose.
This is a frozen demonstration of a flawed verifier, not a payment tool.
"""
from typing import Any
BASE_USDC = '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913'
TRANSFER_TOPIC = '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'

def verify(
    receipt: dict[str, Any] | None,
    *,
    head_block: int,
    expected_recipient: str,
    minimum_base_units: int,
    minimum_confirmations: int,
) -> dict[str, Any]:
    recipient = expected_recipient.lower()
    if not recipient.startswith("0x") or len(recipient) != 42:
        raise ValueError("expected recipient must be an EVM address")
    if receipt is None:
        return {"verified": False, "reason": "transaction_not_found"}
    status = int(str(receipt.get("status", "0x0")), 16)
    block = int(str(receipt.get("blockNumber", "0x0")), 16)
    confirmations = max(0, head_block - block + 1)
    total = 0
    for log in receipt.get("logs", []):
        if not isinstance(log, dict) or str(log.get("address", "")).lower() != BASE_USDC:
            continue
        topics = log.get("topics", [])
        if not isinstance(topics, list) or len(topics) < 3:
            continue
        if str(topics[0]).lower() != TRANSFER_TOPIC:
            continue
        to_address = "0x" + str(topics[2])[-40:].lower()
        if to_address == recipient:
            total += int(str(log.get("data", "0x0")), 16)
    verified = status == 1 and confirmations >= minimum_confirmations and total >= minimum_base_units
    return {
        "verified": verified,
        "transaction_hash": receipt.get("transactionHash"),
        "status": status,
        "block_number": block,
        "confirmations": confirmations,
        "recipient": recipient,
        "usdc_received_base_units": total,
        "minimum_required_base_units": minimum_base_units,
        "reason": None if verified else "settlement_requirements_not_met",
    }

if __name__ == "__main__":
    receipt = {"status": "0x1", "blockNumber": "0x64", "logs": []}
    for minimum in (0, 1):
        result = verify(receipt, head_block=110,
            expected_recipient="0x" + "1" * 40,
            minimum_base_units=minimum, minimum_confirmations=3)
        print(f"minimum={minimum}, verified={result['verified']}, received={result['usdc_received_base_units']}")
        assert result["verified"] is (minimum == 0)
    print("Reproduced: the zero-minimum case passes without a transfer.")
