/**
 * Provides processing of Ethereum transaction receipts relevant for the CIC network.
 *
 * @module helper
 */
import { Registry } from './registry';
import { EVMAddress, FungibleToken } from "./typ";
/**
 * Reduced, concrete view of a transaction receipt.
 *
 * @todo Is there a way of importing the web3 type instead?
 */
declare class Receipt {
    logs: Array<any>;
    status: boolean;
}
/**
 * Receipt processor within context of a given registry.
 *
 */
declare class TransactionHelper {
    w3: any;
    registry: Registry;
    ontransfer: (Transfer: any) => void;
    onconversion: (Conversion: any) => void;
    /**
     *
     * @param registry The registry context to use
     */
    constructor(w3: any, registry: Registry);
    /**
     * Processes a single receipt to find conversion and token transfer events.
     *
     * If a transfer is found, ontransfer callback will be called with a Transfer instance.
     * If a conversion is found, onconvsrsion callback will be called with a Conversion instance.
     *
     * @param r A Web3 transaction receipt.
     * @todo The from-amount of convert is currently wrong, but be retrieved from the initial transfer log entry instead.
     */
    processReceipt(r: Receipt): Promise<void>;
}
/**
 * Token query within the context of a registry.
 */
declare class TokenDeclarationHelper {
    registry: Registry;
    w3: any;
    /**
     *
     * @param w3
     * @param registry The registry context to use.
     */
    constructor(w3: any, registry: Registry);
    /**
     * Check if a token fits the ERC20 standard.
     *
     * @param tokenAddress The address of the token to be checked.
     */
    assertERC20TokenType(tokenAddress: string): Promise<boolean>;
}
/**
 * Declarator query within the context of a registry.
 */
declare class DeclaratorHelper {
    registry: Registry;
    trusts: EVMAddress[];
    tokenHelper: TokenDeclarationHelper;
    /**
     *
     * @param w3
     * @param registry The registry context to use.
     */
    constructor(w3: any, registry: Registry);
    /**
     * Add an address to list of declarators to trust.
     *
     * @param address The address to be added to the trust list
     */
    addTrust(address: EVMAddress): void;
    /**
     * Check for trust records of a token
     *
     *  if there are no trust records, an error will be thrown.
     *
     * @param tokenRegistryContractName The name of the token in the token registry.
     * @param tokenAddress The address of the contract used to deploy the token.
     * @param checkInterface A boolean on whether to to check the interface.
     */
    getTrustedTokenDeclaration(tokenRegistryContractName: string, tokenAddress: EVMAddress, checkInterface?: boolean): Promise<FungibleToken>;
    /**
     * Check for trust records for a token by a declarator.
     *
     * @param tokenRegistryContractName The name of the token in the token registry.
     * @param declarator The address of the declarator used to check for trust.
     * @param tokenAddress The address of the contract used to deploy the token.
     * @param checkInterface A boolean on whether to to check the interface.
     */
    getTokenDeclaration(tokenRegistryContractName: string, declarator: EVMAddress, tokenAddress: EVMAddress, checkInterface?: boolean): Promise<FungibleToken>;
}
export { DeclaratorHelper, TransactionHelper, TokenDeclarationHelper };
