package com.bizzan.bitrade.job.chain;

import java.math.BigDecimal;

/**
 * 链上 hash 扫描器接口
 * 不同链（ERC20/TRC20/BEP20）实现各自的 hash 查询逻辑
 *
 * @author auto
 * @date 2026-05-13
 */
public interface ChainScanner {

    /**
     * 判断本扫描器是否支持指定主网
     *
     * @param networkName 主网名称，如 ERC20、TRC20、BEP20
     * @return 是否支持
     */
    boolean supports(String networkName);

    /**
     * 查询链上交易，验证 hash 是否已确认，并返回实际到账金额
     * 返回 null 表示交易未确认或查询失败
     *
     * @param rpcUrl          节点 RPC 地址
     * @param txHash          交易 hash
     * @param toAddress       期望的收款地址（用于校验）
     * @param contractAddress 代币合约地址，原生币传 null
     * @param decimals        代币精度（小数位数），用于将链上原始金额转为实际金额，如 USDT=6，ETH=18
     * @return 已确认的到账金额；未确认或失败返回 null
     */
    BigDecimal queryConfirmedAmount(String rpcUrl, String txHash,
                                    String toAddress, String contractAddress, int decimals);
}
